]> xenbits.xensource.com Git - xenclient/xen-pq.git/commitdiff
Import the xenclient-xen patch queue
authorJean Guyader <jean.guyader@eu.citrix.com>
Thu, 2 Apr 2009 13:30:18 +0000 (14:30 +0100)
committerJean Guyader <jean.guyader@eu.citrix.com>
Thu, 2 Apr 2009 13:30:18 +0000 (14:30 +0100)
xen-3.4/acpi-slic [new file with mode: 0644]
xen-3.4/fix_compilation [new file with mode: 0644]
xen-3.4/oem-features [new file with mode: 0644]
xen-3.4/power-management-enhancement [new file with mode: 0644]
xen-3.4/series [new file with mode: 0644]
xen-3.4/smbios [new file with mode: 0644]
xen-3.4/status [new file with mode: 0644]
xen-3.4/thermal-management [new file with mode: 0644]

diff --git a/xen-3.4/acpi-slic b/xen-3.4/acpi-slic
new file mode 100644 (file)
index 0000000..bcada23
--- /dev/null
@@ -0,0 +1,244 @@
+diff -Nur a/tools/firmware/hvmloader/acpi/build.c b/tools/firmware/hvmloader/acpi/build.c
+--- a/tools/firmware/hvmloader/acpi/build.c    2009-04-01 16:02:46.000000000 -0400
++++ b/tools/firmware/hvmloader/acpi/build.c    2009-04-01 15:57:01.000000000 -0400
+@@ -59,7 +59,16 @@
+     return 1;
+ }
+-static int construct_madt(struct acpi_20_madt *madt)
++static void pt_update_acpi_tables(struct acpi_header *header, struct hvm_acinfo_table *va_ac)
++{
++    memcpy(header->oem_id, va_ac->oem_id, HVM_ACINFO_OEM_ID_SIZE);
++    memcpy(header->oem_table_id, va_ac->oem_table_id, HVM_ACINFO_OEM_TABLE_ID_SIZE);
++    header->oem_revision = va_ac->oem_revision;
++    header->creator_id   = ASCII32(va_ac->creator_id[0],va_ac->creator_id[1],va_ac->creator_id[2],va_ac->creator_id[3]);
++    header->creator_revision = va_ac->creator_revision;
++}
++
++static int construct_madt(struct acpi_20_madt *madt, struct hvm_acinfo_table *va_ac)
+ {
+     struct acpi_20_madt_intsrcovr *intsrcovr;
+     struct acpi_20_madt_ioapic    *io_apic;
+@@ -69,7 +78,14 @@
+     memset(madt, 0, sizeof(*madt));
+     madt->header.signature    = ACPI_2_0_MADT_SIGNATURE;
+     madt->header.revision     = ACPI_2_0_MADT_REVISION;
+-    fixed_strcpy(madt->header.oem_id, ACPI_OEM_ID);
++    if (va_ac == NULL)
++    {
++        fixed_strcpy(madt->header.oem_id, ACPI_OEM_ID);
++    }
++    else
++    {
++        memcpy(madt->header.oem_id, va_ac->oem_id, HVM_ACINFO_OEM_ID_SIZE);       
++    }
+     fixed_strcpy(madt->header.oem_table_id, ACPI_OEM_TABLE_ID);
+     madt->header.oem_revision = ACPI_OEM_REVISION;
+     madt->header.creator_id   = ACPI_CREATOR_ID;
+@@ -136,14 +152,21 @@
+     return align16(offset);
+ }
+-static int construct_hpet(struct acpi_20_hpet *hpet)
++static int construct_hpet(struct acpi_20_hpet *hpet, struct hvm_acinfo_table *va_ac)
+ {
+     int offset;
+     memset(hpet, 0, sizeof(*hpet));
+     hpet->header.signature    = ACPI_2_0_HPET_SIGNATURE;
+     hpet->header.revision     = ACPI_2_0_HPET_REVISION;
+-    fixed_strcpy(hpet->header.oem_id, ACPI_OEM_ID);
++    if (va_ac == NULL)
++    {
++        fixed_strcpy(hpet->header.oem_id, ACPI_OEM_ID);        
++    }
++    else
++    {
++        memcpy(hpet->header.oem_id, va_ac->oem_id, HVM_ACINFO_OEM_ID_SIZE);
++    }
+     fixed_strcpy(hpet->header.oem_table_id, ACPI_OEM_TABLE_ID);
+     hpet->header.oem_revision = ACPI_OEM_REVISION;
+     hpet->header.creator_id   = ACPI_CREATOR_ID;
+@@ -158,7 +181,7 @@
+     return offset;
+ }
+-static int construct_secondary_tables(uint8_t *buf, unsigned long *table_ptrs)
++static int construct_secondary_tables(uint8_t *buf, unsigned long *table_ptrs, struct hvm_acinfo_table *va_ac)
+ {
+     int offset = 0, nr_tables = 0;
+     struct acpi_20_madt *madt;
+@@ -172,7 +195,7 @@
+     if ( (hvm_info->nr_vcpus > 1) || hvm_info->apic_mode )
+     {
+         madt = (struct acpi_20_madt *)&buf[offset];
+-        offset += construct_madt(madt);
++        offset += construct_madt(madt, va_ac);
+         table_ptrs[nr_tables++] = (unsigned long)madt;
+     }
+@@ -180,7 +203,7 @@
+     if ( hpet_exists(ACPI_HPET_ADDRESS) )
+     {
+         hpet = (struct acpi_20_hpet *)&buf[offset];
+-        offset += construct_hpet(hpet);
++        offset += construct_hpet(hpet, va_ac);
+         table_ptrs[nr_tables++] = (unsigned long)hpet;
+     }
+@@ -191,6 +214,14 @@
+         offset += align16(sizeof(AmlCode_PM));
+     }
++    /* SLIC */
++    if (va_ac != NULL)
++    {
++        table_ptrs[nr_tables++] = (unsigned long)&buf[offset];
++        memcpy(&buf[offset], (uint8_t*)va_ac + sizeof(struct hvm_acinfo_table), va_ac->slic_length);
++        offset += align16(va_ac->slic_length);
++    }
++
+     /* TPM TCPA and SSDT. */
+     tis_hdr = (uint16_t *)0xFED40F00;
+     if ( (tis_hdr[0] == tis_signature[0]) &&
+@@ -209,7 +240,14 @@
+         tcpa->header.signature = ACPI_2_0_TCPA_SIGNATURE;
+         tcpa->header.length    = sizeof(*tcpa);
+         tcpa->header.revision  = ACPI_2_0_TCPA_REVISION;
+-        fixed_strcpy(tcpa->header.oem_id, ACPI_OEM_ID);
++        if (va_ac == NULL)
++        {
++            fixed_strcpy(tcpa->header.oem_id, ACPI_OEM_ID);            
++        }
++        else
++        {
++            memcpy(tcpa->header.oem_id, va_ac->oem_id, HVM_ACINFO_OEM_ID_SIZE);
++        }
+         fixed_strcpy(tcpa->header.oem_table_id, ACPI_OEM_TABLE_ID);
+         tcpa->header.oem_revision = ACPI_OEM_REVISION;
+         tcpa->header.creator_id   = ACPI_CREATOR_ID;
+@@ -240,6 +278,21 @@
+     unsigned char       *dsdt;
+     unsigned long        secondary_tables[16];
+     int                  offset = 0, i;
++    struct hvm_acinfo_table *va_ac;
++
++    /*
++     * First get the ACPI info structure that may be passed to the HVM loader. This will be used
++     * to pass through platform ACPI information if present.
++     */
++    va_ac = get_hvm_acinfo_table();
++    if (va_ac != NULL)
++    {
++        pt_update_acpi_tables(&Rsdt.header, va_ac);
++        pt_update_acpi_tables(&Xsdt.header, va_ac);
++        /* just the OEM ID for the RSDP and FADT */
++        memcpy(Rsdp.oem_id, va_ac->oem_id, HVM_ACINFO_OEM_ID_SIZE);
++        memcpy(Fadt.header.oem_id, va_ac->oem_id, HVM_ACINFO_OEM_ID_SIZE);
++    }
+     /*
+      * Fill in high-memory data structures, starting at @buf.
+@@ -283,7 +336,7 @@
+                  offsetof(struct acpi_header, checksum),
+                  sizeof(struct acpi_20_fadt));
+-    offset += construct_secondary_tables(&buf[offset], secondary_tables);
++    offset += construct_secondary_tables(&buf[offset], secondary_tables, va_ac);
+     xsdt = (struct acpi_20_xsdt *)&buf[offset];
+     memcpy(xsdt, &Xsdt, sizeof(struct acpi_header));
+diff -Nur a/tools/firmware/hvmloader/util.c b/tools/firmware/hvmloader/util.c
+--- a/tools/firmware/hvmloader/util.c  2009-04-01 16:02:51.000000000 -0400
++++ b/tools/firmware/hvmloader/util.c  2009-04-01 15:47:57.000000000 -0400
+@@ -680,6 +680,32 @@
+     return table;
+ }
++struct hvm_acinfo_table *get_hvm_acinfo_table(void)
++{
++    static struct hvm_acinfo_table *table = NULL;
++    static int validated = 0;
++    struct hvm_acinfo_table *t;
++
++    if ( validated )
++        return table;
++
++    t = (struct hvm_acinfo_table *)HVM_ACINFO_PADDR;
++
++    if ( t->slic_length == 0 ) {
++        printf("HVM ACPI info table missing SLIC table?\n");
++        validated = 1;
++        return table;
++    }
++  
++    if ( validate_hvm_info_table((uint8_t*)t, t->slic_length + sizeof(struct hvm_acinfo_table), t->signature, "AC INFO", 7) )        
++        table = t;
++    else
++        printf("Bad or missing HVM SMBIOS info table\n");
++    validated = 1;
++
++    return table;
++}
++
+ struct hvm_smtable_header * get_sminfo_by_type(struct hvm_sminfo_table *pa_sm, uint8_t type)
+ {
+     struct hvm_smtable_header *header = 
+diff -Nur a/tools/firmware/hvmloader/util.h b/tools/firmware/hvmloader/util.h
+--- a/tools/firmware/hvmloader/util.h  2009-04-01 16:02:51.000000000 -0400
++++ b/tools/firmware/hvmloader/util.h  2009-04-01 15:48:13.000000000 -0400
+@@ -113,6 +113,7 @@
+ /* HVM-build SMBIOS/ACPI info extensions */
+ struct hvm_sminfo_table *get_hvm_sminfo_table(void);
++struct hvm_acinfo_table *get_hvm_acinfo_table(void);
+ struct hvm_smtable_header * get_sminfo_by_type(struct hvm_sminfo_table *pa_sm, uint8_t type);
+ /* String and memory functions */
+diff -Nur a/tools/libxc/xc_dom_x86.c b/tools/libxc/xc_dom_x86.c
+--- a/tools/libxc/xc_dom_x86.c 2009-04-01 14:06:29.000000000 -0400
++++ b/tools/libxc/xc_dom_x86.c 2009-04-01 16:00:48.000000000 -0400
+@@ -17,7 +17,6 @@
+ #include <xen/xen.h>
+ #include <xen/foreign/x86_32.h>
+ #include <xen/foreign/x86_64.h>
+-#include <xen/hvm/hvm_info_table.h>
+ #include <xen/io/protocols.h>
+ #include "xg_private.h"
+diff -Nur a/xen/include/public/hvm/hvm_info_table.h b/xen/include/public/hvm/hvm_info_table.h
+--- a/xen/include/public/hvm/hvm_info_table.h  2009-04-01 16:02:51.000000000 -0400
++++ b/xen/include/public/hvm/hvm_info_table.h  2009-04-01 15:41:59.000000000 -0400
+@@ -32,8 +32,12 @@
+ #define HVM_SMINFO_OFFSET    0x0
+ #define HVM_SMINFO_PADDR     ((HVM_INFO_PFN << 12) + HVM_SMINFO_OFFSET)
+ #define HVM_SMINFO_MAX       0x800
++#define HVM_ACINFO_OFFSET    0xC00
++#define HVM_ACINFO_PADDR     ((HVM_INFO_PFN << 12) + HVM_ACINFO_OFFSET)
++#define HVM_ACINFO_MAX       0x400
+ #define HVM_SMINFO_EXTENSIONS 1
++#define HVM_ACINFO_EXTENSIONS 1
+ struct hvm_info_table {
+     char        signature[8]; /* "HVM INFO" */
+@@ -83,4 +87,19 @@
+     uint32_t    sm_length; /* beginning after this stucture, includes fixed table, string list, and terminator */
+ };
++#define HVM_ACINFO_OEM_ID_SIZE       6
++#define HVM_ACINFO_OEM_TABLE_ID_SIZE 8
++#define HVM_ACINFO_CREATOR_ID_SIZE   4
++
++struct hvm_acinfo_table {
++    char        signature[7]; /* "AC INFO" */
++    uint8_t     checksum;
++    uint32_t    slic_length; /* length of SLIC following this structure */
++    char        oem_id[HVM_ACINFO_OEM_ID_SIZE];
++    char        oem_table_id[HVM_ACINFO_OEM_TABLE_ID_SIZE];
++    uint32_t    oem_revision;
++    char        creator_id[HVM_ACINFO_CREATOR_ID_SIZE];
++    uint32_t    creator_revision;
++};
++
+ #endif /* __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__ */
diff --git a/xen-3.4/fix_compilation b/xen-3.4/fix_compilation
new file mode 100644 (file)
index 0000000..7f8451f
--- /dev/null
@@ -0,0 +1,1898 @@
+diff -r 0477f9061c8a tools/Makefile
+--- a/tools/Makefile   Fri Mar 20 17:42:46 2009 +0000
++++ b/tools/Makefile   Thu Apr 02 14:13:31 2009 +0200
+@@ -2,16 +2,16 @@
+ include $(XEN_ROOT)/tools/Rules.mk
+ SUBDIRS-y :=
+-SUBDIRS-y += check
++SUBDIRS-n += check
+ SUBDIRS-y += include
+ SUBDIRS-y += libxc
+ SUBDIRS-y += flask
+ SUBDIRS-y += xenstore
+-SUBDIRS-y += misc
+-SUBDIRS-y += examples
++SUBDIRS-n += misc
++SUBDIRS-n += examples
+ SUBDIRS-y += hotplug
+ SUBDIRS-y += xentrace
+-SUBDIRS-$(CONFIG_XCUTILS) += xcutils
++SUBDIRS-n += xcutils
+ SUBDIRS-$(CONFIG_X86) += firmware
+ SUBDIRS-$(ACM_SECURITY) += security
+ SUBDIRS-y += console
+@@ -23,7 +23,7 @@
+ SUBDIRS-$(CONFIG_Linux) += blktap
+ SUBDIRS-y += libfsimage
+ SUBDIRS-$(LIBXENAPI_BINDINGS) += libxen
+-SUBDIRS-$(CONFIG_Linux) += fs-back
++SUBDIRS-n += fs-back
+ SUBDIRS-$(CONFIG_IOEMU) += ioemu-dir
+ SUBDIRS-y += xenpmd
+@@ -54,7 +54,7 @@
+ clean distclean: subdirs-clean
+ ifneq ($(XEN_COMPILE_ARCH),$(XEN_TARGET_ARCH))
+-IOEMU_CONFIGURE_CROSS ?= --cpu=$(XEN_TARGET_ARCH) \
++IOEMU_CONFIGURE_CROSS ?= --cpu=$(XEN_TARGET_ARCH:x86_32=i386) \
+                        --cross-prefix=$(CROSS_COMPILE) \
+                        --interp-prefix=$(CROSS_SYS_ROOT)
+ endif
+diff -r 0477f9061c8a tools/firmware/hvmloader/acpi/dsdt.c
+--- a/tools/firmware/hvmloader/acpi/dsdt.c     Fri Mar 20 17:42:46 2009 +0000
++++ /dev/null  Thu Jan 01 00:00:00 1970 +0000
+@@ -1,1617 +0,0 @@
+-/*
+- * 
+- * Intel ACPI Component Architecture
+- * ASL Optimizing Compiler version 20090220 [Mar  9 2009]
+- * Copyright (C) 2000 - 2009 Intel Corporation
+- * Supports ACPI Specification Revision 3.0a
+- * 
+- * Compilation of "dsdt.asl" - Tue Mar 17 10:44:21 2009
+- * 
+- * C source code output
+- *
+- */
+-unsigned char AmlCode[] =
+-{
+-    0x44,0x53,0x44,0x54,0x02,0x32,0x00,0x00,  /* 00000000    "DSDT.2.." */
+-    0x02,0xC6,0x58,0x65,0x6E,0x00,0x00,0x00,  /* 00000008    "..Xen..." */
+-    0x48,0x56,0x4D,0x00,0x00,0x00,0x00,0x00,  /* 00000010    "HVM....." */
+-    0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
+-    0x20,0x02,0x09,0x20,0x08,0x50,0x4D,0x42,  /* 00000020    " .. .PMB" */
+-    0x53,0x0B,0x00,0x0C,0x08,0x50,0x4D,0x4C,  /* 00000028    "S....PML" */
+-    0x4E,0x0A,0x08,0x08,0x49,0x4F,0x42,0x31,  /* 00000030    "N...IOB1" */
+-    0x00,0x08,0x49,0x4F,0x4C,0x31,0x00,0x08,  /* 00000038    "..IOL1.." */
+-    0x41,0x50,0x43,0x42,0x0C,0x00,0x00,0xC0,  /* 00000040    "APCB...." */
+-    0xFE,0x08,0x41,0x50,0x43,0x4C,0x0C,0x00,  /* 00000048    "..APCL.." */
+-    0x00,0x01,0x00,0x08,0x50,0x55,0x49,0x44,  /* 00000050    "....PUID" */
+-    0x00,0x10,0x49,0x0C,0x5F,0x50,0x52,0x5F,  /* 00000058    "..I._PR_" */
+-    0x5B,0x83,0x0B,0x50,0x52,0x30,0x30,0x00,  /* 00000060    "[..PR00." */
+-    0x00,0x00,0x00,0x00,0x00,0x5B,0x83,0x0B,  /* 00000068    ".....[.." */
+-    0x50,0x52,0x30,0x31,0x01,0x00,0x00,0x00,  /* 00000070    "PR01...." */
+-    0x00,0x00,0x5B,0x83,0x0B,0x50,0x52,0x30,  /* 00000078    "..[..PR0" */
+-    0x32,0x02,0x00,0x00,0x00,0x00,0x00,0x5B,  /* 00000080    "2......[" */
+-    0x83,0x0B,0x50,0x52,0x30,0x33,0x03,0x00,  /* 00000088    "..PR03.." */
+-    0x00,0x00,0x00,0x00,0x5B,0x83,0x0B,0x50,  /* 00000090    "....[..P" */
+-    0x52,0x30,0x34,0x04,0x00,0x00,0x00,0x00,  /* 00000098    "R04....." */
+-    0x00,0x5B,0x83,0x0B,0x50,0x52,0x30,0x35,  /* 000000A0    ".[..PR05" */
+-    0x05,0x00,0x00,0x00,0x00,0x00,0x5B,0x83,  /* 000000A8    "......[." */
+-    0x0B,0x50,0x52,0x30,0x36,0x06,0x00,0x00,  /* 000000B0    ".PR06..." */
+-    0x00,0x00,0x00,0x5B,0x83,0x0B,0x50,0x52,  /* 000000B8    "...[..PR" */
+-    0x30,0x37,0x07,0x00,0x00,0x00,0x00,0x00,  /* 000000C0    "07......" */
+-    0x5B,0x83,0x0B,0x50,0x52,0x30,0x38,0x08,  /* 000000C8    "[..PR08." */
+-    0x00,0x00,0x00,0x00,0x00,0x5B,0x83,0x0B,  /* 000000D0    ".....[.." */
+-    0x50,0x52,0x30,0x39,0x09,0x00,0x00,0x00,  /* 000000D8    "PR09...." */
+-    0x00,0x00,0x5B,0x83,0x0B,0x50,0x52,0x30,  /* 000000E0    "..[..PR0" */
+-    0x41,0x0A,0x00,0x00,0x00,0x00,0x00,0x5B,  /* 000000E8    "A......[" */
+-    0x83,0x0B,0x50,0x52,0x30,0x42,0x0B,0x00,  /* 000000F0    "..PR0B.." */
+-    0x00,0x00,0x00,0x00,0x5B,0x83,0x0B,0x50,  /* 000000F8    "....[..P" */
+-    0x52,0x30,0x43,0x0C,0x00,0x00,0x00,0x00,  /* 00000100    "R0C....." */
+-    0x00,0x5B,0x83,0x0B,0x50,0x52,0x30,0x44,  /* 00000108    ".[..PR0D" */
+-    0x0D,0x00,0x00,0x00,0x00,0x00,0x5B,0x83,  /* 00000110    "......[." */
+-    0x0B,0x50,0x52,0x30,0x45,0x0E,0x00,0x00,  /* 00000118    ".PR0E..." */
+-    0x00,0x00,0x00,0x08,0x5F,0x53,0x33,0x5F,  /* 00000120    "...._S3_" */
+-    0x12,0x08,0x04,0x0A,0x05,0x0A,0x05,0x00,  /* 00000128    "........" */
+-    0x00,0x08,0x5F,0x53,0x34,0x5F,0x12,0x08,  /* 00000130    ".._S4_.." */
+-    0x04,0x0A,0x06,0x0A,0x06,0x00,0x00,0x08,  /* 00000138    "........" */
+-    0x5F,0x53,0x35,0x5F,0x12,0x08,0x04,0x0A,  /* 00000140    "_S5_...." */
+-    0x07,0x0A,0x07,0x00,0x00,0x08,0x50,0x49,  /* 00000148    "......PI" */
+-    0x43,0x44,0x00,0x14,0x0C,0x5F,0x50,0x49,  /* 00000150    "CD..._PI" */
+-    0x43,0x01,0x70,0x68,0x50,0x49,0x43,0x44,  /* 00000158    "C.phPICD" */
+-    0x10,0x83,0xB7,0x02,0x5F,0x53,0x42,0x5F,  /* 00000160    "...._SB_" */
+-    0x5B,0x80,0x42,0x49,0x4F,0x53,0x00,0x0C,  /* 00000168    "[.BIOS.." */
+-    0x00,0xA0,0x0E,0x00,0x0A,0x10,0x5B,0x81,  /* 00000170    "......[." */
+-    0x21,0x42,0x49,0x4F,0x53,0x01,0x55,0x41,  /* 00000178    "!BIOS.UA" */
+-    0x52,0x31,0x01,0x55,0x41,0x52,0x32,0x01,  /* 00000180    "R1.UAR2." */
+-    0x48,0x50,0x45,0x54,0x01,0x00,0x1D,0x50,  /* 00000188    "HPET...P" */
+-    0x4D,0x49,0x4E,0x20,0x50,0x4C,0x45,0x4E,  /* 00000190    "MIN PLEN" */
+-    0x20,0x5B,0x82,0x49,0x04,0x4D,0x45,0x4D,  /* 00000198    " [.I.MEM" */
+-    0x30,0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,  /* 000001A0    "0._HID.A" */
+-    0xD0,0x0C,0x02,0x08,0x5F,0x43,0x52,0x53,  /* 000001A8    "...._CRS" */
+-    0x11,0x33,0x0A,0x30,0x8A,0x2B,0x00,0x00,  /* 000001B0    ".3.0.+.." */
+-    0x0D,0x03,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001B8    "........" */
+-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001C0    "........" */
+-    0x00,0x00,0xFF,0xFF,0x09,0x00,0x00,0x00,  /* 000001C8    "........" */
+-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001D0    "........" */
+-    0x00,0x00,0x00,0x00,0x0A,0x00,0x00,0x00,  /* 000001D8    "........" */
+-    0x00,0x00,0x79,0x00,0x5B,0x82,0x8E,0xAE,  /* 000001E0    "..y.[..." */
+-    0x02,0x50,0x43,0x49,0x30,0x08,0x5F,0x48,  /* 000001E8    ".PCI0._H" */
+-    0x49,0x44,0x0C,0x41,0xD0,0x0A,0x03,0x08,  /* 000001F0    "ID.A...." */
+-    0x5F,0x55,0x49,0x44,0x00,0x08,0x5F,0x41,  /* 000001F8    "_UID.._A" */
+-    0x44,0x52,0x00,0x08,0x5F,0x42,0x42,0x4E,  /* 00000200    "DR.._BBN" */
+-    0x00,0x5B,0x82,0x2A,0x48,0x50,0x30,0x5F,  /* 00000208    ".[.*HP0_" */
+-    0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,  /* 00000210    "._HID.A." */
+-    0x0C,0x02,0x08,0x5F,0x43,0x52,0x53,0x11,  /* 00000218    "..._CRS." */
+-    0x15,0x0A,0x12,0x47,0x01,0xC0,0x10,0xC0,  /* 00000220    "...G...." */
+-    0x10,0x00,0x03,0x47,0x01,0x44,0xB0,0x44,  /* 00000228    "...G.D.D" */
+-    0xB0,0x00,0x04,0x79,0x00,0x14,0x4E,0x0C,  /* 00000230    "...y..N." */
+-    0x5F,0x43,0x52,0x53,0x00,0x08,0x50,0x52,  /* 00000238    "_CRS..PR" */
+-    0x54,0x30,0x11,0x42,0x07,0x0A,0x6E,0x88,  /* 00000240    "T0.B..n." */
+-    0x0D,0x00,0x02,0x0E,0x00,0x00,0x00,0x00,  /* 00000248    "........" */
+-    0x00,0xFF,0x00,0x00,0x00,0x00,0x01,0x47,  /* 00000250    ".......G" */
+-    0x01,0xF8,0x0C,0xF8,0x0C,0x01,0x08,0x88,  /* 00000258    "........" */
+-    0x0D,0x00,0x01,0x0C,0x03,0x00,0x00,0x00,  /* 00000260    "........" */
+-    0x00,0xF7,0x0C,0x00,0x00,0xF8,0x0C,0x88,  /* 00000268    "........" */
+-    0x0D,0x00,0x01,0x0C,0x03,0x00,0x00,0x00,  /* 00000270    "........" */
+-    0x0D,0xFF,0xFF,0x00,0x00,0x00,0xF3,0x87,  /* 00000278    "........" */
+-    0x17,0x00,0x00,0x0C,0x03,0x00,0x00,0x00,  /* 00000280    "........" */
+-    0x00,0x00,0x00,0x0A,0x00,0xFF,0xFF,0x0B,  /* 00000288    "........" */
+-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,  /* 00000290    "........" */
+-    0x00,0x87,0x17,0x00,0x00,0x0C,0x03,0x00,  /* 00000298    "........" */
+-    0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,  /* 000002A0    "........" */
+-    0xFF,0xFF,0xF4,0x00,0x00,0x00,0x00,0x00,  /* 000002A8    "........" */
+-    0x00,0x00,0x05,0x79,0x00,0x8A,0x50,0x52,  /* 000002B0    "...y..PR" */
+-    0x54,0x30,0x0A,0x5C,0x4D,0x4D,0x49,0x4E,  /* 000002B8    "T0.\MMIN" */
+-    0x8A,0x50,0x52,0x54,0x30,0x0A,0x60,0x4D,  /* 000002C0    ".PRT0.`M" */
+-    0x4D,0x41,0x58,0x8A,0x50,0x52,0x54,0x30,  /* 000002C8    "MAX.PRT0" */
+-    0x0A,0x68,0x4D,0x4C,0x45,0x4E,0x70,0x50,  /* 000002D0    ".hMLENpP" */
+-    0x4D,0x49,0x4E,0x4D,0x4D,0x49,0x4E,0x70,  /* 000002D8    "MINMMINp" */
+-    0x50,0x4C,0x45,0x4E,0x4D,0x4C,0x45,0x4E,  /* 000002E0    "PLENMLEN" */
+-    0x72,0x4D,0x4D,0x49,0x4E,0x4D,0x4C,0x45,  /* 000002E8    "rMMINMLE" */
+-    0x4E,0x4D,0x4D,0x41,0x58,0x74,0x4D,0x4D,  /* 000002F0    "NMMAXtMM" */
+-    0x41,0x58,0x01,0x4D,0x4D,0x41,0x58,0xA4,  /* 000002F8    "AX.MMAX." */
+-    0x50,0x52,0x54,0x30,0x08,0x42,0x55,0x46,  /* 00000300    "PRT0.BUF" */
+-    0x41,0x11,0x09,0x0A,0x06,0x23,0x20,0x0C,  /* 00000308    "A....# ." */
+-    0x18,0x79,0x00,0x08,0x42,0x55,0x46,0x42,  /* 00000310    ".y..BUFB" */
+-    0x11,0x09,0x0A,0x06,0x23,0x00,0x00,0x18,  /* 00000318    "....#..." */
+-    0x79,0x00,0x8B,0x42,0x55,0x46,0x42,0x01,  /* 00000320    "y..BUFB." */
+-    0x49,0x52,0x51,0x56,0x5B,0x82,0x48,0x08,  /* 00000328    "IRQV[.H." */
+-    0x4C,0x4E,0x4B,0x41,0x08,0x5F,0x48,0x49,  /* 00000330    "LNKA._HI" */
+-    0x44,0x0C,0x41,0xD0,0x0C,0x0F,0x08,0x5F,  /* 00000338    "D.A...._" */
+-    0x55,0x49,0x44,0x01,0x14,0x1C,0x5F,0x53,  /* 00000340    "UID..._S" */
+-    0x54,0x41,0x00,0x7B,0x50,0x49,0x52,0x41,  /* 00000348    "TA.{PIRA" */
+-    0x0A,0x80,0x60,0xA0,0x08,0x93,0x60,0x0A,  /* 00000350    "..`...`." */
+-    0x80,0xA4,0x0A,0x09,0xA1,0x04,0xA4,0x0A,  /* 00000358    "........" */
+-    0x0B,0x14,0x0B,0x5F,0x50,0x52,0x53,0x00,  /* 00000360    "..._PRS." */
+-    0xA4,0x42,0x55,0x46,0x41,0x14,0x11,0x5F,  /* 00000368    ".BUFA.._" */
+-    0x44,0x49,0x53,0x00,0x7D,0x50,0x49,0x52,  /* 00000370    "DIS.}PIR" */
+-    0x41,0x0A,0x80,0x50,0x49,0x52,0x41,0x14,  /* 00000378    "A..PIRA." */
+-    0x1A,0x5F,0x43,0x52,0x53,0x00,0x7B,0x50,  /* 00000380    "._CRS.{P" */
+-    0x49,0x52,0x41,0x0A,0x0F,0x60,0x79,0x01,  /* 00000388    "IRA..`y." */
+-    0x60,0x49,0x52,0x51,0x56,0xA4,0x42,0x55,  /* 00000390    "`IRQV.BU" */
+-    0x46,0x42,0x14,0x1B,0x5F,0x53,0x52,0x53,  /* 00000398    "FB.._SRS" */
+-    0x01,0x8B,0x68,0x01,0x49,0x52,0x51,0x31,  /* 000003A0    "..h.IRQ1" */
+-    0x82,0x49,0x52,0x51,0x31,0x60,0x76,0x60,  /* 000003A8    ".IRQ1`v`" */
+-    0x70,0x60,0x50,0x49,0x52,0x41,0x5B,0x82,  /* 000003B0    "p`PIRA[." */
+-    0x49,0x08,0x4C,0x4E,0x4B,0x42,0x08,0x5F,  /* 000003B8    "I.LNKB._" */
+-    0x48,0x49,0x44,0x0C,0x41,0xD0,0x0C,0x0F,  /* 000003C0    "HID.A..." */
+-    0x08,0x5F,0x55,0x49,0x44,0x0A,0x02,0x14,  /* 000003C8    "._UID..." */
+-    0x1C,0x5F,0x53,0x54,0x41,0x00,0x7B,0x50,  /* 000003D0    "._STA.{P" */
+-    0x49,0x52,0x42,0x0A,0x80,0x60,0xA0,0x08,  /* 000003D8    "IRB..`.." */
+-    0x93,0x60,0x0A,0x80,0xA4,0x0A,0x09,0xA1,  /* 000003E0    ".`......" */
+-    0x04,0xA4,0x0A,0x0B,0x14,0x0B,0x5F,0x50,  /* 000003E8    "......_P" */
+-    0x52,0x53,0x00,0xA4,0x42,0x55,0x46,0x41,  /* 000003F0    "RS..BUFA" */
+-    0x14,0x11,0x5F,0x44,0x49,0x53,0x00,0x7D,  /* 000003F8    ".._DIS.}" */
+-    0x50,0x49,0x52,0x42,0x0A,0x80,0x50,0x49,  /* 00000400    "PIRB..PI" */
+-    0x52,0x42,0x14,0x1A,0x5F,0x43,0x52,0x53,  /* 00000408    "RB.._CRS" */
+-    0x00,0x7B,0x50,0x49,0x52,0x42,0x0A,0x0F,  /* 00000410    ".{PIRB.." */
+-    0x60,0x79,0x01,0x60,0x49,0x52,0x51,0x56,  /* 00000418    "`y.`IRQV" */
+-    0xA4,0x42,0x55,0x46,0x42,0x14,0x1B,0x5F,  /* 00000420    ".BUFB.._" */
+-    0x53,0x52,0x53,0x01,0x8B,0x68,0x01,0x49,  /* 00000428    "SRS..h.I" */
+-    0x52,0x51,0x31,0x82,0x49,0x52,0x51,0x31,  /* 00000430    "RQ1.IRQ1" */
+-    0x60,0x76,0x60,0x70,0x60,0x50,0x49,0x52,  /* 00000438    "`v`p`PIR" */
+-    0x42,0x5B,0x82,0x49,0x08,0x4C,0x4E,0x4B,  /* 00000440    "B[.I.LNK" */
+-    0x43,0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,  /* 00000448    "C._HID.A" */
+-    0xD0,0x0C,0x0F,0x08,0x5F,0x55,0x49,0x44,  /* 00000450    "...._UID" */
+-    0x0A,0x03,0x14,0x1C,0x5F,0x53,0x54,0x41,  /* 00000458    "...._STA" */
+-    0x00,0x7B,0x50,0x49,0x52,0x43,0x0A,0x80,  /* 00000460    ".{PIRC.." */
+-    0x60,0xA0,0x08,0x93,0x60,0x0A,0x80,0xA4,  /* 00000468    "`...`..." */
+-    0x0A,0x09,0xA1,0x04,0xA4,0x0A,0x0B,0x14,  /* 00000470    "........" */
+-    0x0B,0x5F,0x50,0x52,0x53,0x00,0xA4,0x42,  /* 00000478    "._PRS..B" */
+-    0x55,0x46,0x41,0x14,0x11,0x5F,0x44,0x49,  /* 00000480    "UFA.._DI" */
+-    0x53,0x00,0x7D,0x50,0x49,0x52,0x43,0x0A,  /* 00000488    "S.}PIRC." */
+-    0x80,0x50,0x49,0x52,0x43,0x14,0x1A,0x5F,  /* 00000490    ".PIRC.._" */
+-    0x43,0x52,0x53,0x00,0x7B,0x50,0x49,0x52,  /* 00000498    "CRS.{PIR" */
+-    0x43,0x0A,0x0F,0x60,0x79,0x01,0x60,0x49,  /* 000004A0    "C..`y.`I" */
+-    0x52,0x51,0x56,0xA4,0x42,0x55,0x46,0x42,  /* 000004A8    "RQV.BUFB" */
+-    0x14,0x1B,0x5F,0x53,0x52,0x53,0x01,0x8B,  /* 000004B0    ".._SRS.." */
+-    0x68,0x01,0x49,0x52,0x51,0x31,0x82,0x49,  /* 000004B8    "h.IRQ1.I" */
+-    0x52,0x51,0x31,0x60,0x76,0x60,0x70,0x60,  /* 000004C0    "RQ1`v`p`" */
+-    0x50,0x49,0x52,0x43,0x5B,0x82,0x49,0x08,  /* 000004C8    "PIRC[.I." */
+-    0x4C,0x4E,0x4B,0x44,0x08,0x5F,0x48,0x49,  /* 000004D0    "LNKD._HI" */
+-    0x44,0x0C,0x41,0xD0,0x0C,0x0F,0x08,0x5F,  /* 000004D8    "D.A...._" */
+-    0x55,0x49,0x44,0x0A,0x04,0x14,0x1C,0x5F,  /* 000004E0    "UID...._" */
+-    0x53,0x54,0x41,0x00,0x7B,0x50,0x49,0x52,  /* 000004E8    "STA.{PIR" */
+-    0x44,0x0A,0x80,0x60,0xA0,0x08,0x93,0x60,  /* 000004F0    "D..`...`" */
+-    0x0A,0x80,0xA4,0x0A,0x09,0xA1,0x04,0xA4,  /* 000004F8    "........" */
+-    0x0A,0x0B,0x14,0x0B,0x5F,0x50,0x52,0x53,  /* 00000500    "...._PRS" */
+-    0x00,0xA4,0x42,0x55,0x46,0x41,0x14,0x11,  /* 00000508    "..BUFA.." */
+-    0x5F,0x44,0x49,0x53,0x00,0x7D,0x50,0x49,  /* 00000510    "_DIS.}PI" */
+-    0x52,0x44,0x0A,0x80,0x50,0x49,0x52,0x44,  /* 00000518    "RD..PIRD" */
+-    0x14,0x1A,0x5F,0x43,0x52,0x53,0x00,0x7B,  /* 00000520    ".._CRS.{" */
+-    0x50,0x49,0x52,0x44,0x0A,0x0F,0x60,0x79,  /* 00000528    "PIRD..`y" */
+-    0x01,0x60,0x49,0x52,0x51,0x56,0xA4,0x42,  /* 00000530    ".`IRQV.B" */
+-    0x55,0x46,0x42,0x14,0x1B,0x5F,0x53,0x52,  /* 00000538    "UFB.._SR" */
+-    0x53,0x01,0x8B,0x68,0x01,0x49,0x52,0x51,  /* 00000540    "S..h.IRQ" */
+-    0x31,0x82,0x49,0x52,0x51,0x31,0x60,0x76,  /* 00000548    "1.IRQ1`v" */
+-    0x60,0x70,0x60,0x50,0x49,0x52,0x44,0x5B,  /* 00000550    "`p`PIRD[" */
+-    0x82,0x44,0x05,0x48,0x50,0x45,0x54,0x08,  /* 00000558    ".D.HPET." */
+-    0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x01,  /* 00000560    "_HID.A.." */
+-    0x03,0x08,0x5F,0x55,0x49,0x44,0x00,0x14,  /* 00000568    ".._UID.." */
+-    0x18,0x5F,0x53,0x54,0x41,0x00,0xA0,0x0C,  /* 00000570    "._STA..." */
+-    0x93,0x5E,0x5E,0x5E,0x48,0x50,0x45,0x54,  /* 00000578    ".^^^HPET" */
+-    0x00,0xA4,0x00,0xA1,0x04,0xA4,0x0A,0x0F,  /* 00000580    "........" */
+-    0x08,0x5F,0x43,0x52,0x53,0x11,0x1F,0x0A,  /* 00000588    "._CRS..." */
+-    0x1C,0x87,0x17,0x00,0x00,0x0D,0x01,0x00,  /* 00000590    "........" */
+-    0x00,0x00,0x00,0x00,0x00,0xD0,0xFE,0xFF,  /* 00000598    "........" */
+-    0x03,0xD0,0xFE,0x00,0x00,0x00,0x00,0x00,  /* 000005A0    "........" */
+-    0x04,0x00,0x00,0x79,0x00,0x14,0x16,0x5F,  /* 000005A8    "...y..._" */
+-    0x50,0x52,0x54,0x00,0xA0,0x0A,0x50,0x49,  /* 000005B0    "PRT...PI" */
+-    0x43,0x44,0xA4,0x50,0x52,0x54,0x41,0xA4,  /* 000005B8    "CD.PRTA." */
+-    0x50,0x52,0x54,0x50,0x08,0x50,0x52,0x54,  /* 000005C0    "PRTP.PRT" */
+-    0x50,0x12,0x49,0x70,0x7C,0x12,0x0D,0x04,  /* 000005C8    "P.Ip|..." */
+-    0x0C,0xFF,0xFF,0x01,0x00,0x00,0x4C,0x4E,  /* 000005D0    "......LN" */
+-    0x4B,0x42,0x00,0x12,0x0D,0x04,0x0C,0xFF,  /* 000005D8    "KB......" */
+-    0xFF,0x01,0x00,0x01,0x4C,0x4E,0x4B,0x43,  /* 000005E0    "....LNKC" */
+-    0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x01,  /* 000005E8    "........" */
+-    0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x44,0x00,  /* 000005F0    "...LNKD." */
+-    0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x01,0x00,  /* 000005F8    "........" */
+-    0x0A,0x03,0x4C,0x4E,0x4B,0x41,0x00,0x12,  /* 00000600    "..LNKA.." */
+-    0x0D,0x04,0x0C,0xFF,0xFF,0x02,0x00,0x00,  /* 00000608    "........" */
+-    0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0D,0x04,  /* 00000610    "LNKC...." */
+-    0x0C,0xFF,0xFF,0x02,0x00,0x01,0x4C,0x4E,  /* 00000618    "......LN" */
+-    0x4B,0x44,0x00,0x12,0x0E,0x04,0x0C,0xFF,  /* 00000620    "KD......" */
+-    0xFF,0x02,0x00,0x0A,0x02,0x4C,0x4E,0x4B,  /* 00000628    ".....LNK" */
+-    0x41,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,  /* 00000630    "A......." */
+-    0x02,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x42,  /* 00000638    "....LNKB" */
+-    0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x03,  /* 00000640    "........" */
+-    0x00,0x00,0x4C,0x4E,0x4B,0x44,0x00,0x12,  /* 00000648    "..LNKD.." */
+-    0x0D,0x04,0x0C,0xFF,0xFF,0x03,0x00,0x01,  /* 00000650    "........" */
+-    0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0E,0x04,  /* 00000658    "LNKA...." */
+-    0x0C,0xFF,0xFF,0x03,0x00,0x0A,0x02,0x4C,  /* 00000660    ".......L" */
+-    0x4E,0x4B,0x42,0x00,0x12,0x0E,0x04,0x0C,  /* 00000668    "NKB....." */
+-    0xFF,0xFF,0x03,0x00,0x0A,0x03,0x4C,0x4E,  /* 00000670    "......LN" */
+-    0x4B,0x43,0x00,0x12,0x0D,0x04,0x0C,0xFF,  /* 00000678    "KC......" */
+-    0xFF,0x04,0x00,0x00,0x4C,0x4E,0x4B,0x41,  /* 00000680    "....LNKA" */
+-    0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x04,  /* 00000688    "........" */
+-    0x00,0x01,0x4C,0x4E,0x4B,0x42,0x00,0x12,  /* 00000690    "..LNKB.." */
+-    0x0E,0x04,0x0C,0xFF,0xFF,0x04,0x00,0x0A,  /* 00000698    "........" */
+-    0x02,0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0E,  /* 000006A0    ".LNKC..." */
+-    0x04,0x0C,0xFF,0xFF,0x04,0x00,0x0A,0x03,  /* 000006A8    "........" */
+-    0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0D,0x04,  /* 000006B0    "LNKD...." */
+-    0x0C,0xFF,0xFF,0x05,0x00,0x00,0x4C,0x4E,  /* 000006B8    "......LN" */
+-    0x4B,0x42,0x00,0x12,0x0D,0x04,0x0C,0xFF,  /* 000006C0    "KB......" */
+-    0xFF,0x05,0x00,0x01,0x4C,0x4E,0x4B,0x43,  /* 000006C8    "....LNKC" */
+-    0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x05,  /* 000006D0    "........" */
+-    0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x44,0x00,  /* 000006D8    "...LNKD." */
+-    0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x05,0x00,  /* 000006E0    "........" */
+-    0x0A,0x03,0x4C,0x4E,0x4B,0x41,0x00,0x12,  /* 000006E8    "..LNKA.." */
+-    0x0D,0x04,0x0C,0xFF,0xFF,0x06,0x00,0x00,  /* 000006F0    "........" */
+-    0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0D,0x04,  /* 000006F8    "LNKC...." */
+-    0x0C,0xFF,0xFF,0x06,0x00,0x01,0x4C,0x4E,  /* 00000700    "......LN" */
+-    0x4B,0x44,0x00,0x12,0x0E,0x04,0x0C,0xFF,  /* 00000708    "KD......" */
+-    0xFF,0x06,0x00,0x0A,0x02,0x4C,0x4E,0x4B,  /* 00000710    ".....LNK" */
+-    0x41,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,  /* 00000718    "A......." */
+-    0x06,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x42,  /* 00000720    "....LNKB" */
+-    0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x07,  /* 00000728    "........" */
+-    0x00,0x00,0x4C,0x4E,0x4B,0x44,0x00,0x12,  /* 00000730    "..LNKD.." */
+-    0x0D,0x04,0x0C,0xFF,0xFF,0x07,0x00,0x01,  /* 00000738    "........" */
+-    0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0E,0x04,  /* 00000740    "LNKA...." */
+-    0x0C,0xFF,0xFF,0x07,0x00,0x0A,0x02,0x4C,  /* 00000748    ".......L" */
+-    0x4E,0x4B,0x42,0x00,0x12,0x0E,0x04,0x0C,  /* 00000750    "NKB....." */
+-    0xFF,0xFF,0x07,0x00,0x0A,0x03,0x4C,0x4E,  /* 00000758    "......LN" */
+-    0x4B,0x43,0x00,0x12,0x0D,0x04,0x0C,0xFF,  /* 00000760    "KC......" */
+-    0xFF,0x08,0x00,0x00,0x4C,0x4E,0x4B,0x41,  /* 00000768    "....LNKA" */
+-    0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x08,  /* 00000770    "........" */
+-    0x00,0x01,0x4C,0x4E,0x4B,0x42,0x00,0x12,  /* 00000778    "..LNKB.." */
+-    0x0E,0x04,0x0C,0xFF,0xFF,0x08,0x00,0x0A,  /* 00000780    "........" */
+-    0x02,0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0E,  /* 00000788    ".LNKC..." */
+-    0x04,0x0C,0xFF,0xFF,0x08,0x00,0x0A,0x03,  /* 00000790    "........" */
+-    0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0D,0x04,  /* 00000798    "LNKD...." */
+-    0x0C,0xFF,0xFF,0x09,0x00,0x00,0x4C,0x4E,  /* 000007A0    "......LN" */
+-    0x4B,0x42,0x00,0x12,0x0D,0x04,0x0C,0xFF,  /* 000007A8    "KB......" */
+-    0xFF,0x09,0x00,0x01,0x4C,0x4E,0x4B,0x43,  /* 000007B0    "....LNKC" */
+-    0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x09,  /* 000007B8    "........" */
+-    0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x44,0x00,  /* 000007C0    "...LNKD." */
+-    0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x09,0x00,  /* 000007C8    "........" */
+-    0x0A,0x03,0x4C,0x4E,0x4B,0x41,0x00,0x12,  /* 000007D0    "..LNKA.." */
+-    0x0D,0x04,0x0C,0xFF,0xFF,0x0A,0x00,0x00,  /* 000007D8    "........" */
+-    0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0D,0x04,  /* 000007E0    "LNKC...." */
+-    0x0C,0xFF,0xFF,0x0A,0x00,0x01,0x4C,0x4E,  /* 000007E8    "......LN" */
+-    0x4B,0x44,0x00,0x12,0x0E,0x04,0x0C,0xFF,  /* 000007F0    "KD......" */
+-    0xFF,0x0A,0x00,0x0A,0x02,0x4C,0x4E,0x4B,  /* 000007F8    ".....LNK" */
+-    0x41,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,  /* 00000800    "A......." */
+-    0x0A,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x42,  /* 00000808    "....LNKB" */
+-    0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x0B,  /* 00000810    "........" */
+-    0x00,0x00,0x4C,0x4E,0x4B,0x44,0x00,0x12,  /* 00000818    "..LNKD.." */
+-    0x0D,0x04,0x0C,0xFF,0xFF,0x0B,0x00,0x01,  /* 00000820    "........" */
+-    0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0E,0x04,  /* 00000828    "LNKA...." */
+-    0x0C,0xFF,0xFF,0x0B,0x00,0x0A,0x02,0x4C,  /* 00000830    ".......L" */
+-    0x4E,0x4B,0x42,0x00,0x12,0x0E,0x04,0x0C,  /* 00000838    "NKB....." */
+-    0xFF,0xFF,0x0B,0x00,0x0A,0x03,0x4C,0x4E,  /* 00000840    "......LN" */
+-    0x4B,0x43,0x00,0x12,0x0D,0x04,0x0C,0xFF,  /* 00000848    "KC......" */
+-    0xFF,0x0C,0x00,0x00,0x4C,0x4E,0x4B,0x41,  /* 00000850    "....LNKA" */
+-    0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x0C,  /* 00000858    "........" */
+-    0x00,0x01,0x4C,0x4E,0x4B,0x42,0x00,0x12,  /* 00000860    "..LNKB.." */
+-    0x0E,0x04,0x0C,0xFF,0xFF,0x0C,0x00,0x0A,  /* 00000868    "........" */
+-    0x02,0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0E,  /* 00000870    ".LNKC..." */
+-    0x04,0x0C,0xFF,0xFF,0x0C,0x00,0x0A,0x03,  /* 00000878    "........" */
+-    0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0D,0x04,  /* 00000880    "LNKD...." */
+-    0x0C,0xFF,0xFF,0x0D,0x00,0x00,0x4C,0x4E,  /* 00000888    "......LN" */
+-    0x4B,0x42,0x00,0x12,0x0D,0x04,0x0C,0xFF,  /* 00000890    "KB......" */
+-    0xFF,0x0D,0x00,0x01,0x4C,0x4E,0x4B,0x43,  /* 00000898    "....LNKC" */
+-    0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x0D,  /* 000008A0    "........" */
+-    0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x44,0x00,  /* 000008A8    "...LNKD." */
+-    0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x0D,0x00,  /* 000008B0    "........" */
+-    0x0A,0x03,0x4C,0x4E,0x4B,0x41,0x00,0x12,  /* 000008B8    "..LNKA.." */
+-    0x0D,0x04,0x0C,0xFF,0xFF,0x0E,0x00,0x00,  /* 000008C0    "........" */
+-    0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0D,0x04,  /* 000008C8    "LNKC...." */
+-    0x0C,0xFF,0xFF,0x0E,0x00,0x01,0x4C,0x4E,  /* 000008D0    "......LN" */
+-    0x4B,0x44,0x00,0x12,0x0E,0x04,0x0C,0xFF,  /* 000008D8    "KD......" */
+-    0xFF,0x0E,0x00,0x0A,0x02,0x4C,0x4E,0x4B,  /* 000008E0    ".....LNK" */
+-    0x41,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,  /* 000008E8    "A......." */
+-    0x0E,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x42,  /* 000008F0    "....LNKB" */
+-    0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x0F,  /* 000008F8    "........" */
+-    0x00,0x00,0x4C,0x4E,0x4B,0x44,0x00,0x12,  /* 00000900    "..LNKD.." */
+-    0x0D,0x04,0x0C,0xFF,0xFF,0x0F,0x00,0x01,  /* 00000908    "........" */
+-    0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0E,0x04,  /* 00000910    "LNKA...." */
+-    0x0C,0xFF,0xFF,0x0F,0x00,0x0A,0x02,0x4C,  /* 00000918    ".......L" */
+-    0x4E,0x4B,0x42,0x00,0x12,0x0E,0x04,0x0C,  /* 00000920    "NKB....." */
+-    0xFF,0xFF,0x0F,0x00,0x0A,0x03,0x4C,0x4E,  /* 00000928    "......LN" */
+-    0x4B,0x43,0x00,0x12,0x0D,0x04,0x0C,0xFF,  /* 00000930    "KC......" */
+-    0xFF,0x10,0x00,0x00,0x4C,0x4E,0x4B,0x41,  /* 00000938    "....LNKA" */
+-    0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x10,  /* 00000940    "........" */
+-    0x00,0x01,0x4C,0x4E,0x4B,0x42,0x00,0x12,  /* 00000948    "..LNKB.." */
+-    0x0E,0x04,0x0C,0xFF,0xFF,0x10,0x00,0x0A,  /* 00000950    "........" */
+-    0x02,0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0E,  /* 00000958    ".LNKC..." */
+-    0x04,0x0C,0xFF,0xFF,0x10,0x00,0x0A,0x03,  /* 00000960    "........" */
+-    0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0D,0x04,  /* 00000968    "LNKD...." */
+-    0x0C,0xFF,0xFF,0x11,0x00,0x00,0x4C,0x4E,  /* 00000970    "......LN" */
+-    0x4B,0x42,0x00,0x12,0x0D,0x04,0x0C,0xFF,  /* 00000978    "KB......" */
+-    0xFF,0x11,0x00,0x01,0x4C,0x4E,0x4B,0x43,  /* 00000980    "....LNKC" */
+-    0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x11,  /* 00000988    "........" */
+-    0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x44,0x00,  /* 00000990    "...LNKD." */
+-    0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x11,0x00,  /* 00000998    "........" */
+-    0x0A,0x03,0x4C,0x4E,0x4B,0x41,0x00,0x12,  /* 000009A0    "..LNKA.." */
+-    0x0D,0x04,0x0C,0xFF,0xFF,0x12,0x00,0x00,  /* 000009A8    "........" */
+-    0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0D,0x04,  /* 000009B0    "LNKC...." */
+-    0x0C,0xFF,0xFF,0x12,0x00,0x01,0x4C,0x4E,  /* 000009B8    "......LN" */
+-    0x4B,0x44,0x00,0x12,0x0E,0x04,0x0C,0xFF,  /* 000009C0    "KD......" */
+-    0xFF,0x12,0x00,0x0A,0x02,0x4C,0x4E,0x4B,  /* 000009C8    ".....LNK" */
+-    0x41,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,  /* 000009D0    "A......." */
+-    0x12,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x42,  /* 000009D8    "....LNKB" */
+-    0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x13,  /* 000009E0    "........" */
+-    0x00,0x00,0x4C,0x4E,0x4B,0x44,0x00,0x12,  /* 000009E8    "..LNKD.." */
+-    0x0D,0x04,0x0C,0xFF,0xFF,0x13,0x00,0x01,  /* 000009F0    "........" */
+-    0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0E,0x04,  /* 000009F8    "LNKA...." */
+-    0x0C,0xFF,0xFF,0x13,0x00,0x0A,0x02,0x4C,  /* 00000A00    ".......L" */
+-    0x4E,0x4B,0x42,0x00,0x12,0x0E,0x04,0x0C,  /* 00000A08    "NKB....." */
+-    0xFF,0xFF,0x13,0x00,0x0A,0x03,0x4C,0x4E,  /* 00000A10    "......LN" */
+-    0x4B,0x43,0x00,0x12,0x0D,0x04,0x0C,0xFF,  /* 00000A18    "KC......" */
+-    0xFF,0x14,0x00,0x00,0x4C,0x4E,0x4B,0x41,  /* 00000A20    "....LNKA" */
+-    0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x14,  /* 00000A28    "........" */
+-    0x00,0x01,0x4C,0x4E,0x4B,0x42,0x00,0x12,  /* 00000A30    "..LNKB.." */
+-    0x0E,0x04,0x0C,0xFF,0xFF,0x14,0x00,0x0A,  /* 00000A38    "........" */
+-    0x02,0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0E,  /* 00000A40    ".LNKC..." */
+-    0x04,0x0C,0xFF,0xFF,0x14,0x00,0x0A,0x03,  /* 00000A48    "........" */
+-    0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0D,0x04,  /* 00000A50    "LNKD...." */
+-    0x0C,0xFF,0xFF,0x15,0x00,0x00,0x4C,0x4E,  /* 00000A58    "......LN" */
+-    0x4B,0x42,0x00,0x12,0x0D,0x04,0x0C,0xFF,  /* 00000A60    "KB......" */
+-    0xFF,0x15,0x00,0x01,0x4C,0x4E,0x4B,0x43,  /* 00000A68    "....LNKC" */
+-    0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x15,  /* 00000A70    "........" */
+-    0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x44,0x00,  /* 00000A78    "...LNKD." */
+-    0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x15,0x00,  /* 00000A80    "........" */
+-    0x0A,0x03,0x4C,0x4E,0x4B,0x41,0x00,0x12,  /* 00000A88    "..LNKA.." */
+-    0x0D,0x04,0x0C,0xFF,0xFF,0x16,0x00,0x00,  /* 00000A90    "........" */
+-    0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0D,0x04,  /* 00000A98    "LNKC...." */
+-    0x0C,0xFF,0xFF,0x16,0x00,0x01,0x4C,0x4E,  /* 00000AA0    "......LN" */
+-    0x4B,0x44,0x00,0x12,0x0E,0x04,0x0C,0xFF,  /* 00000AA8    "KD......" */
+-    0xFF,0x16,0x00,0x0A,0x02,0x4C,0x4E,0x4B,  /* 00000AB0    ".....LNK" */
+-    0x41,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,  /* 00000AB8    "A......." */
+-    0x16,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x42,  /* 00000AC0    "....LNKB" */
+-    0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x17,  /* 00000AC8    "........" */
+-    0x00,0x00,0x4C,0x4E,0x4B,0x44,0x00,0x12,  /* 00000AD0    "..LNKD.." */
+-    0x0D,0x04,0x0C,0xFF,0xFF,0x17,0x00,0x01,  /* 00000AD8    "........" */
+-    0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0E,0x04,  /* 00000AE0    "LNKA...." */
+-    0x0C,0xFF,0xFF,0x17,0x00,0x0A,0x02,0x4C,  /* 00000AE8    ".......L" */
+-    0x4E,0x4B,0x42,0x00,0x12,0x0E,0x04,0x0C,  /* 00000AF0    "NKB....." */
+-    0xFF,0xFF,0x17,0x00,0x0A,0x03,0x4C,0x4E,  /* 00000AF8    "......LN" */
+-    0x4B,0x43,0x00,0x12,0x0D,0x04,0x0C,0xFF,  /* 00000B00    "KC......" */
+-    0xFF,0x18,0x00,0x00,0x4C,0x4E,0x4B,0x41,  /* 00000B08    "....LNKA" */
+-    0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x18,  /* 00000B10    "........" */
+-    0x00,0x01,0x4C,0x4E,0x4B,0x42,0x00,0x12,  /* 00000B18    "..LNKB.." */
+-    0x0E,0x04,0x0C,0xFF,0xFF,0x18,0x00,0x0A,  /* 00000B20    "........" */
+-    0x02,0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0E,  /* 00000B28    ".LNKC..." */
+-    0x04,0x0C,0xFF,0xFF,0x18,0x00,0x0A,0x03,  /* 00000B30    "........" */
+-    0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0D,0x04,  /* 00000B38    "LNKD...." */
+-    0x0C,0xFF,0xFF,0x19,0x00,0x00,0x4C,0x4E,  /* 00000B40    "......LN" */
+-    0x4B,0x42,0x00,0x12,0x0D,0x04,0x0C,0xFF,  /* 00000B48    "KB......" */
+-    0xFF,0x19,0x00,0x01,0x4C,0x4E,0x4B,0x43,  /* 00000B50    "....LNKC" */
+-    0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x19,  /* 00000B58    "........" */
+-    0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x44,0x00,  /* 00000B60    "...LNKD." */
+-    0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x19,0x00,  /* 00000B68    "........" */
+-    0x0A,0x03,0x4C,0x4E,0x4B,0x41,0x00,0x12,  /* 00000B70    "..LNKA.." */
+-    0x0D,0x04,0x0C,0xFF,0xFF,0x1A,0x00,0x00,  /* 00000B78    "........" */
+-    0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0D,0x04,  /* 00000B80    "LNKC...." */
+-    0x0C,0xFF,0xFF,0x1A,0x00,0x01,0x4C,0x4E,  /* 00000B88    "......LN" */
+-    0x4B,0x44,0x00,0x12,0x0E,0x04,0x0C,0xFF,  /* 00000B90    "KD......" */
+-    0xFF,0x1A,0x00,0x0A,0x02,0x4C,0x4E,0x4B,  /* 00000B98    ".....LNK" */
+-    0x41,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,  /* 00000BA0    "A......." */
+-    0x1A,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x42,  /* 00000BA8    "....LNKB" */
+-    0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x1B,  /* 00000BB0    "........" */
+-    0x00,0x00,0x4C,0x4E,0x4B,0x44,0x00,0x12,  /* 00000BB8    "..LNKD.." */
+-    0x0D,0x04,0x0C,0xFF,0xFF,0x1B,0x00,0x01,  /* 00000BC0    "........" */
+-    0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0E,0x04,  /* 00000BC8    "LNKA...." */
+-    0x0C,0xFF,0xFF,0x1B,0x00,0x0A,0x02,0x4C,  /* 00000BD0    ".......L" */
+-    0x4E,0x4B,0x42,0x00,0x12,0x0E,0x04,0x0C,  /* 00000BD8    "NKB....." */
+-    0xFF,0xFF,0x1B,0x00,0x0A,0x03,0x4C,0x4E,  /* 00000BE0    "......LN" */
+-    0x4B,0x43,0x00,0x12,0x0D,0x04,0x0C,0xFF,  /* 00000BE8    "KC......" */
+-    0xFF,0x1C,0x00,0x00,0x4C,0x4E,0x4B,0x41,  /* 00000BF0    "....LNKA" */
+-    0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x1C,  /* 00000BF8    "........" */
+-    0x00,0x01,0x4C,0x4E,0x4B,0x42,0x00,0x12,  /* 00000C00    "..LNKB.." */
+-    0x0E,0x04,0x0C,0xFF,0xFF,0x1C,0x00,0x0A,  /* 00000C08    "........" */
+-    0x02,0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0E,  /* 00000C10    ".LNKC..." */
+-    0x04,0x0C,0xFF,0xFF,0x1C,0x00,0x0A,0x03,  /* 00000C18    "........" */
+-    0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0D,0x04,  /* 00000C20    "LNKD...." */
+-    0x0C,0xFF,0xFF,0x1D,0x00,0x00,0x4C,0x4E,  /* 00000C28    "......LN" */
+-    0x4B,0x42,0x00,0x12,0x0D,0x04,0x0C,0xFF,  /* 00000C30    "KB......" */
+-    0xFF,0x1D,0x00,0x01,0x4C,0x4E,0x4B,0x43,  /* 00000C38    "....LNKC" */
+-    0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x1D,  /* 00000C40    "........" */
+-    0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x44,0x00,  /* 00000C48    "...LNKD." */
+-    0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x1D,0x00,  /* 00000C50    "........" */
+-    0x0A,0x03,0x4C,0x4E,0x4B,0x41,0x00,0x12,  /* 00000C58    "..LNKA.." */
+-    0x0D,0x04,0x0C,0xFF,0xFF,0x1E,0x00,0x00,  /* 00000C60    "........" */
+-    0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0D,0x04,  /* 00000C68    "LNKC...." */
+-    0x0C,0xFF,0xFF,0x1E,0x00,0x01,0x4C,0x4E,  /* 00000C70    "......LN" */
+-    0x4B,0x44,0x00,0x12,0x0E,0x04,0x0C,0xFF,  /* 00000C78    "KD......" */
+-    0xFF,0x1E,0x00,0x0A,0x02,0x4C,0x4E,0x4B,  /* 00000C80    ".....LNK" */
+-    0x41,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,  /* 00000C88    "A......." */
+-    0x1E,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x42,  /* 00000C90    "....LNKB" */
+-    0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x1F,  /* 00000C98    "........" */
+-    0x00,0x00,0x4C,0x4E,0x4B,0x44,0x00,0x12,  /* 00000CA0    "..LNKD.." */
+-    0x0D,0x04,0x0C,0xFF,0xFF,0x1F,0x00,0x01,  /* 00000CA8    "........" */
+-    0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0E,0x04,  /* 00000CB0    "LNKA...." */
+-    0x0C,0xFF,0xFF,0x1F,0x00,0x0A,0x02,0x4C,  /* 00000CB8    ".......L" */
+-    0x4E,0x4B,0x42,0x00,0x12,0x0E,0x04,0x0C,  /* 00000CC0    "NKB....." */
+-    0xFF,0xFF,0x1F,0x00,0x0A,0x03,0x4C,0x4E,  /* 00000CC8    "......LN" */
+-    0x4B,0x43,0x00,0x08,0x50,0x52,0x54,0x41,  /* 00000CD0    "KC..PRTA" */
+-    0x12,0x41,0x61,0x7C,0x12,0x0B,0x04,0x0C,  /* 00000CD8    ".Aa|...." */
+-    0xFF,0xFF,0x01,0x00,0x00,0x00,0x0A,0x14,  /* 00000CE0    "........" */
+-    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x01,0x00,  /* 00000CE8    "........" */
+-    0x01,0x00,0x0A,0x15,0x12,0x0C,0x04,0x0C,  /* 00000CF0    "........" */
+-    0xFF,0xFF,0x01,0x00,0x0A,0x02,0x00,0x0A,  /* 00000CF8    "........" */
+-    0x16,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x01,  /* 00000D00    "........" */
+-    0x00,0x0A,0x03,0x00,0x0A,0x17,0x12,0x0B,  /* 00000D08    "........" */
+-    0x04,0x0C,0xFF,0xFF,0x02,0x00,0x00,0x00,  /* 00000D10    "........" */
+-    0x0A,0x18,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 00000D18    "........" */
+-    0x02,0x00,0x01,0x00,0x0A,0x19,0x12,0x0C,  /* 00000D20    "........" */
+-    0x04,0x0C,0xFF,0xFF,0x02,0x00,0x0A,0x02,  /* 00000D28    "........" */
+-    0x00,0x0A,0x1A,0x12,0x0C,0x04,0x0C,0xFF,  /* 00000D30    "........" */
+-    0xFF,0x02,0x00,0x0A,0x03,0x00,0x0A,0x1B,  /* 00000D38    "........" */
+-    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x03,0x00,  /* 00000D40    "........" */
+-    0x00,0x00,0x0A,0x1C,0x12,0x0B,0x04,0x0C,  /* 00000D48    "........" */
+-    0xFF,0xFF,0x03,0x00,0x01,0x00,0x0A,0x1D,  /* 00000D50    "........" */
+-    0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x03,0x00,  /* 00000D58    "........" */
+-    0x0A,0x02,0x00,0x0A,0x1E,0x12,0x0C,0x04,  /* 00000D60    "........" */
+-    0x0C,0xFF,0xFF,0x03,0x00,0x0A,0x03,0x00,  /* 00000D68    "........" */
+-    0x0A,0x1F,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 00000D70    "........" */
+-    0x04,0x00,0x00,0x00,0x0A,0x20,0x12,0x0B,  /* 00000D78    "..... .." */
+-    0x04,0x0C,0xFF,0xFF,0x04,0x00,0x01,0x00,  /* 00000D80    "........" */
+-    0x0A,0x21,0x12,0x0C,0x04,0x0C,0xFF,0xFF,  /* 00000D88    ".!......" */
+-    0x04,0x00,0x0A,0x02,0x00,0x0A,0x22,0x12,  /* 00000D90    "......"." */
+-    0x0C,0x04,0x0C,0xFF,0xFF,0x04,0x00,0x0A,  /* 00000D98    "........" */
+-    0x03,0x00,0x0A,0x23,0x12,0x0B,0x04,0x0C,  /* 00000DA0    "...#...." */
+-    0xFF,0xFF,0x05,0x00,0x00,0x00,0x0A,0x24,  /* 00000DA8    ".......$" */
+-    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x05,0x00,  /* 00000DB0    "........" */
+-    0x01,0x00,0x0A,0x25,0x12,0x0C,0x04,0x0C,  /* 00000DB8    "...%...." */
+-    0xFF,0xFF,0x05,0x00,0x0A,0x02,0x00,0x0A,  /* 00000DC0    "........" */
+-    0x26,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x05,  /* 00000DC8    "&......." */
+-    0x00,0x0A,0x03,0x00,0x0A,0x27,0x12,0x0B,  /* 00000DD0    ".....'.." */
+-    0x04,0x0C,0xFF,0xFF,0x06,0x00,0x00,0x00,  /* 00000DD8    "........" */
+-    0x0A,0x28,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 00000DE0    ".(......" */
+-    0x06,0x00,0x01,0x00,0x0A,0x29,0x12,0x0C,  /* 00000DE8    ".....).." */
+-    0x04,0x0C,0xFF,0xFF,0x06,0x00,0x0A,0x02,  /* 00000DF0    "........" */
+-    0x00,0x0A,0x2A,0x12,0x0C,0x04,0x0C,0xFF,  /* 00000DF8    "..*....." */
+-    0xFF,0x06,0x00,0x0A,0x03,0x00,0x0A,0x2B,  /* 00000E00    ".......+" */
+-    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x07,0x00,  /* 00000E08    "........" */
+-    0x00,0x00,0x0A,0x2C,0x12,0x0B,0x04,0x0C,  /* 00000E10    "...,...." */
+-    0xFF,0xFF,0x07,0x00,0x01,0x00,0x0A,0x2D,  /* 00000E18    ".......-" */
+-    0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x07,0x00,  /* 00000E20    "........" */
+-    0x0A,0x02,0x00,0x0A,0x2E,0x12,0x0C,0x04,  /* 00000E28    "........" */
+-    0x0C,0xFF,0xFF,0x07,0x00,0x0A,0x03,0x00,  /* 00000E30    "........" */
+-    0x0A,0x2F,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 00000E38    "./......" */
+-    0x08,0x00,0x00,0x00,0x0A,0x11,0x12,0x0B,  /* 00000E40    "........" */
+-    0x04,0x0C,0xFF,0xFF,0x08,0x00,0x01,0x00,  /* 00000E48    "........" */
+-    0x0A,0x12,0x12,0x0C,0x04,0x0C,0xFF,0xFF,  /* 00000E50    "........" */
+-    0x08,0x00,0x0A,0x02,0x00,0x0A,0x13,0x12,  /* 00000E58    "........" */
+-    0x0C,0x04,0x0C,0xFF,0xFF,0x08,0x00,0x0A,  /* 00000E60    "........" */
+-    0x03,0x00,0x0A,0x14,0x12,0x0B,0x04,0x0C,  /* 00000E68    "........" */
+-    0xFF,0xFF,0x09,0x00,0x00,0x00,0x0A,0x15,  /* 00000E70    "........" */
+-    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x09,0x00,  /* 00000E78    "........" */
+-    0x01,0x00,0x0A,0x16,0x12,0x0C,0x04,0x0C,  /* 00000E80    "........" */
+-    0xFF,0xFF,0x09,0x00,0x0A,0x02,0x00,0x0A,  /* 00000E88    "........" */
+-    0x17,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x09,  /* 00000E90    "........" */
+-    0x00,0x0A,0x03,0x00,0x0A,0x18,0x12,0x0B,  /* 00000E98    "........" */
+-    0x04,0x0C,0xFF,0xFF,0x0A,0x00,0x00,0x00,  /* 00000EA0    "........" */
+-    0x0A,0x19,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 00000EA8    "........" */
+-    0x0A,0x00,0x01,0x00,0x0A,0x1A,0x12,0x0C,  /* 00000EB0    "........" */
+-    0x04,0x0C,0xFF,0xFF,0x0A,0x00,0x0A,0x02,  /* 00000EB8    "........" */
+-    0x00,0x0A,0x1B,0x12,0x0C,0x04,0x0C,0xFF,  /* 00000EC0    "........" */
+-    0xFF,0x0A,0x00,0x0A,0x03,0x00,0x0A,0x1C,  /* 00000EC8    "........" */
+-    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x0B,0x00,  /* 00000ED0    "........" */
+-    0x00,0x00,0x0A,0x1D,0x12,0x0B,0x04,0x0C,  /* 00000ED8    "........" */
+-    0xFF,0xFF,0x0B,0x00,0x01,0x00,0x0A,0x1E,  /* 00000EE0    "........" */
+-    0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x0B,0x00,  /* 00000EE8    "........" */
+-    0x0A,0x02,0x00,0x0A,0x1F,0x12,0x0C,0x04,  /* 00000EF0    "........" */
+-    0x0C,0xFF,0xFF,0x0B,0x00,0x0A,0x03,0x00,  /* 00000EF8    "........" */
+-    0x0A,0x20,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 00000F00    ". ......" */
+-    0x0C,0x00,0x00,0x00,0x0A,0x21,0x12,0x0B,  /* 00000F08    ".....!.." */
+-    0x04,0x0C,0xFF,0xFF,0x0C,0x00,0x01,0x00,  /* 00000F10    "........" */
+-    0x0A,0x22,0x12,0x0C,0x04,0x0C,0xFF,0xFF,  /* 00000F18    "."......" */
+-    0x0C,0x00,0x0A,0x02,0x00,0x0A,0x23,0x12,  /* 00000F20    "......#." */
+-    0x0C,0x04,0x0C,0xFF,0xFF,0x0C,0x00,0x0A,  /* 00000F28    "........" */
+-    0x03,0x00,0x0A,0x24,0x12,0x0B,0x04,0x0C,  /* 00000F30    "...$...." */
+-    0xFF,0xFF,0x0D,0x00,0x00,0x00,0x0A,0x25,  /* 00000F38    ".......%" */
+-    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x0D,0x00,  /* 00000F40    "........" */
+-    0x01,0x00,0x0A,0x26,0x12,0x0C,0x04,0x0C,  /* 00000F48    "...&...." */
+-    0xFF,0xFF,0x0D,0x00,0x0A,0x02,0x00,0x0A,  /* 00000F50    "........" */
+-    0x27,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x0D,  /* 00000F58    "'......." */
+-    0x00,0x0A,0x03,0x00,0x0A,0x28,0x12,0x0B,  /* 00000F60    ".....(.." */
+-    0x04,0x0C,0xFF,0xFF,0x0E,0x00,0x00,0x00,  /* 00000F68    "........" */
+-    0x0A,0x29,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 00000F70    ".)......" */
+-    0x0E,0x00,0x01,0x00,0x0A,0x2A,0x12,0x0C,  /* 00000F78    ".....*.." */
+-    0x04,0x0C,0xFF,0xFF,0x0E,0x00,0x0A,0x02,  /* 00000F80    "........" */
+-    0x00,0x0A,0x2B,0x12,0x0C,0x04,0x0C,0xFF,  /* 00000F88    "..+....." */
+-    0xFF,0x0E,0x00,0x0A,0x03,0x00,0x0A,0x2C,  /* 00000F90    ".......," */
+-    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x0F,0x00,  /* 00000F98    "........" */
+-    0x00,0x00,0x0A,0x2D,0x12,0x0B,0x04,0x0C,  /* 00000FA0    "...-...." */
+-    0xFF,0xFF,0x0F,0x00,0x01,0x00,0x0A,0x2E,  /* 00000FA8    "........" */
+-    0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x0F,0x00,  /* 00000FB0    "........" */
+-    0x0A,0x02,0x00,0x0A,0x2F,0x12,0x0C,0x04,  /* 00000FB8    "..../..." */
+-    0x0C,0xFF,0xFF,0x0F,0x00,0x0A,0x03,0x00,  /* 00000FC0    "........" */
+-    0x0A,0x10,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 00000FC8    "........" */
+-    0x10,0x00,0x00,0x00,0x0A,0x12,0x12,0x0B,  /* 00000FD0    "........" */
+-    0x04,0x0C,0xFF,0xFF,0x10,0x00,0x01,0x00,  /* 00000FD8    "........" */
+-    0x0A,0x13,0x12,0x0C,0x04,0x0C,0xFF,0xFF,  /* 00000FE0    "........" */
+-    0x10,0x00,0x0A,0x02,0x00,0x0A,0x14,0x12,  /* 00000FE8    "........" */
+-    0x0C,0x04,0x0C,0xFF,0xFF,0x10,0x00,0x0A,  /* 00000FF0    "........" */
+-    0x03,0x00,0x0A,0x15,0x12,0x0B,0x04,0x0C,  /* 00000FF8    "........" */
+-    0xFF,0xFF,0x11,0x00,0x00,0x00,0x0A,0x16,  /* 00001000    "........" */
+-    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x11,0x00,  /* 00001008    "........" */
+-    0x01,0x00,0x0A,0x17,0x12,0x0C,0x04,0x0C,  /* 00001010    "........" */
+-    0xFF,0xFF,0x11,0x00,0x0A,0x02,0x00,0x0A,  /* 00001018    "........" */
+-    0x18,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x11,  /* 00001020    "........" */
+-    0x00,0x0A,0x03,0x00,0x0A,0x19,0x12,0x0B,  /* 00001028    "........" */
+-    0x04,0x0C,0xFF,0xFF,0x12,0x00,0x00,0x00,  /* 00001030    "........" */
+-    0x0A,0x1A,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 00001038    "........" */
+-    0x12,0x00,0x01,0x00,0x0A,0x1B,0x12,0x0C,  /* 00001040    "........" */
+-    0x04,0x0C,0xFF,0xFF,0x12,0x00,0x0A,0x02,  /* 00001048    "........" */
+-    0x00,0x0A,0x1C,0x12,0x0C,0x04,0x0C,0xFF,  /* 00001050    "........" */
+-    0xFF,0x12,0x00,0x0A,0x03,0x00,0x0A,0x1D,  /* 00001058    "........" */
+-    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x13,0x00,  /* 00001060    "........" */
+-    0x00,0x00,0x0A,0x1E,0x12,0x0B,0x04,0x0C,  /* 00001068    "........" */
+-    0xFF,0xFF,0x13,0x00,0x01,0x00,0x0A,0x1F,  /* 00001070    "........" */
+-    0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x13,0x00,  /* 00001078    "........" */
+-    0x0A,0x02,0x00,0x0A,0x20,0x12,0x0C,0x04,  /* 00001080    ".... ..." */
+-    0x0C,0xFF,0xFF,0x13,0x00,0x0A,0x03,0x00,  /* 00001088    "........" */
+-    0x0A,0x21,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 00001090    ".!......" */
+-    0x14,0x00,0x00,0x00,0x0A,0x22,0x12,0x0B,  /* 00001098    ".....".." */
+-    0x04,0x0C,0xFF,0xFF,0x14,0x00,0x01,0x00,  /* 000010A0    "........" */
+-    0x0A,0x23,0x12,0x0C,0x04,0x0C,0xFF,0xFF,  /* 000010A8    ".#......" */
+-    0x14,0x00,0x0A,0x02,0x00,0x0A,0x24,0x12,  /* 000010B0    "......$." */
+-    0x0C,0x04,0x0C,0xFF,0xFF,0x14,0x00,0x0A,  /* 000010B8    "........" */
+-    0x03,0x00,0x0A,0x25,0x12,0x0B,0x04,0x0C,  /* 000010C0    "...%...." */
+-    0xFF,0xFF,0x15,0x00,0x00,0x00,0x0A,0x26,  /* 000010C8    ".......&" */
+-    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x15,0x00,  /* 000010D0    "........" */
+-    0x01,0x00,0x0A,0x27,0x12,0x0C,0x04,0x0C,  /* 000010D8    "...'...." */
+-    0xFF,0xFF,0x15,0x00,0x0A,0x02,0x00,0x0A,  /* 000010E0    "........" */
+-    0x28,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x15,  /* 000010E8    "(......." */
+-    0x00,0x0A,0x03,0x00,0x0A,0x29,0x12,0x0B,  /* 000010F0    ".....).." */
+-    0x04,0x0C,0xFF,0xFF,0x16,0x00,0x00,0x00,  /* 000010F8    "........" */
+-    0x0A,0x2A,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 00001100    ".*......" */
+-    0x16,0x00,0x01,0x00,0x0A,0x2B,0x12,0x0C,  /* 00001108    ".....+.." */
+-    0x04,0x0C,0xFF,0xFF,0x16,0x00,0x0A,0x02,  /* 00001110    "........" */
+-    0x00,0x0A,0x2C,0x12,0x0C,0x04,0x0C,0xFF,  /* 00001118    "..,....." */
+-    0xFF,0x16,0x00,0x0A,0x03,0x00,0x0A,0x2D,  /* 00001120    ".......-" */
+-    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x17,0x00,  /* 00001128    "........" */
+-    0x00,0x00,0x0A,0x2E,0x12,0x0B,0x04,0x0C,  /* 00001130    "........" */
+-    0xFF,0xFF,0x17,0x00,0x01,0x00,0x0A,0x2F,  /* 00001138    "......./" */
+-    0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x17,0x00,  /* 00001140    "........" */
+-    0x0A,0x02,0x00,0x0A,0x10,0x12,0x0C,0x04,  /* 00001148    "........" */
+-    0x0C,0xFF,0xFF,0x17,0x00,0x0A,0x03,0x00,  /* 00001150    "........" */
+-    0x0A,0x11,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 00001158    "........" */
+-    0x18,0x00,0x00,0x00,0x0A,0x13,0x12,0x0B,  /* 00001160    "........" */
+-    0x04,0x0C,0xFF,0xFF,0x18,0x00,0x01,0x00,  /* 00001168    "........" */
+-    0x0A,0x14,0x12,0x0C,0x04,0x0C,0xFF,0xFF,  /* 00001170    "........" */
+-    0x18,0x00,0x0A,0x02,0x00,0x0A,0x15,0x12,  /* 00001178    "........" */
+-    0x0C,0x04,0x0C,0xFF,0xFF,0x18,0x00,0x0A,  /* 00001180    "........" */
+-    0x03,0x00,0x0A,0x16,0x12,0x0B,0x04,0x0C,  /* 00001188    "........" */
+-    0xFF,0xFF,0x19,0x00,0x00,0x00,0x0A,0x17,  /* 00001190    "........" */
+-    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x19,0x00,  /* 00001198    "........" */
+-    0x01,0x00,0x0A,0x18,0x12,0x0C,0x04,0x0C,  /* 000011A0    "........" */
+-    0xFF,0xFF,0x19,0x00,0x0A,0x02,0x00,0x0A,  /* 000011A8    "........" */
+-    0x19,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x19,  /* 000011B0    "........" */
+-    0x00,0x0A,0x03,0x00,0x0A,0x1A,0x12,0x0B,  /* 000011B8    "........" */
+-    0x04,0x0C,0xFF,0xFF,0x1A,0x00,0x00,0x00,  /* 000011C0    "........" */
+-    0x0A,0x1B,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 000011C8    "........" */
+-    0x1A,0x00,0x01,0x00,0x0A,0x1C,0x12,0x0C,  /* 000011D0    "........" */
+-    0x04,0x0C,0xFF,0xFF,0x1A,0x00,0x0A,0x02,  /* 000011D8    "........" */
+-    0x00,0x0A,0x1D,0x12,0x0C,0x04,0x0C,0xFF,  /* 000011E0    "........" */
+-    0xFF,0x1A,0x00,0x0A,0x03,0x00,0x0A,0x1E,  /* 000011E8    "........" */
+-    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x1B,0x00,  /* 000011F0    "........" */
+-    0x00,0x00,0x0A,0x1F,0x12,0x0B,0x04,0x0C,  /* 000011F8    "........" */
+-    0xFF,0xFF,0x1B,0x00,0x01,0x00,0x0A,0x20,  /* 00001200    "....... " */
+-    0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x1B,0x00,  /* 00001208    "........" */
+-    0x0A,0x02,0x00,0x0A,0x21,0x12,0x0C,0x04,  /* 00001210    "....!..." */
+-    0x0C,0xFF,0xFF,0x1B,0x00,0x0A,0x03,0x00,  /* 00001218    "........" */
+-    0x0A,0x22,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 00001220    "."......" */
+-    0x1C,0x00,0x00,0x00,0x0A,0x23,0x12,0x0B,  /* 00001228    ".....#.." */
+-    0x04,0x0C,0xFF,0xFF,0x1C,0x00,0x01,0x00,  /* 00001230    "........" */
+-    0x0A,0x24,0x12,0x0C,0x04,0x0C,0xFF,0xFF,  /* 00001238    ".$......" */
+-    0x1C,0x00,0x0A,0x02,0x00,0x0A,0x25,0x12,  /* 00001240    "......%." */
+-    0x0C,0x04,0x0C,0xFF,0xFF,0x1C,0x00,0x0A,  /* 00001248    "........" */
+-    0x03,0x00,0x0A,0x26,0x12,0x0B,0x04,0x0C,  /* 00001250    "...&...." */
+-    0xFF,0xFF,0x1D,0x00,0x00,0x00,0x0A,0x27,  /* 00001258    ".......'" */
+-    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x1D,0x00,  /* 00001260    "........" */
+-    0x01,0x00,0x0A,0x28,0x12,0x0C,0x04,0x0C,  /* 00001268    "...(...." */
+-    0xFF,0xFF,0x1D,0x00,0x0A,0x02,0x00,0x0A,  /* 00001270    "........" */
+-    0x29,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x1D,  /* 00001278    ")......." */
+-    0x00,0x0A,0x03,0x00,0x0A,0x2A,0x12,0x0B,  /* 00001280    ".....*.." */
+-    0x04,0x0C,0xFF,0xFF,0x1E,0x00,0x00,0x00,  /* 00001288    "........" */
+-    0x0A,0x2B,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 00001290    ".+......" */
+-    0x1E,0x00,0x01,0x00,0x0A,0x2C,0x12,0x0C,  /* 00001298    ".....,.." */
+-    0x04,0x0C,0xFF,0xFF,0x1E,0x00,0x0A,0x02,  /* 000012A0    "........" */
+-    0x00,0x0A,0x2D,0x12,0x0C,0x04,0x0C,0xFF,  /* 000012A8    "..-....." */
+-    0xFF,0x1E,0x00,0x0A,0x03,0x00,0x0A,0x2E,  /* 000012B0    "........" */
+-    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x1F,0x00,  /* 000012B8    "........" */
+-    0x00,0x00,0x0A,0x2F,0x12,0x0B,0x04,0x0C,  /* 000012C0    ".../...." */
+-    0xFF,0xFF,0x1F,0x00,0x01,0x00,0x0A,0x10,  /* 000012C8    "........" */
+-    0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x1F,0x00,  /* 000012D0    "........" */
+-    0x0A,0x02,0x00,0x0A,0x11,0x12,0x0C,0x04,  /* 000012D8    "........" */
+-    0x0C,0xFF,0xFF,0x1F,0x00,0x0A,0x03,0x00,  /* 000012E0    "........" */
+-    0x0A,0x12,0x5B,0x82,0x46,0x37,0x49,0x53,  /* 000012E8    "..[.F7IS" */
+-    0x41,0x5F,0x08,0x5F,0x41,0x44,0x52,0x0C,  /* 000012F0    "A_._ADR." */
+-    0x00,0x00,0x01,0x00,0x5B,0x80,0x50,0x49,  /* 000012F8    "....[.PI" */
+-    0x52,0x51,0x02,0x0A,0x60,0x0A,0x04,0x10,  /* 00001300    "RQ..`..." */
+-    0x2E,0x5C,0x00,0x5B,0x81,0x29,0x5C,0x2F,  /* 00001308    ".\.[.)\/" */
+-    0x04,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,  /* 00001310    "._SB_PCI" */
+-    0x30,0x49,0x53,0x41,0x5F,0x50,0x49,0x52,  /* 00001318    "0ISA_PIR" */
+-    0x51,0x01,0x50,0x49,0x52,0x41,0x08,0x50,  /* 00001320    "Q.PIRA.P" */
+-    0x49,0x52,0x42,0x08,0x50,0x49,0x52,0x43,  /* 00001328    "IRB.PIRC" */
+-    0x08,0x50,0x49,0x52,0x44,0x08,0x5B,0x82,  /* 00001330    ".PIRD.[." */
+-    0x46,0x0B,0x53,0x59,0x53,0x52,0x08,0x5F,  /* 00001338    "F.SYSR._" */
+-    0x48,0x49,0x44,0x0C,0x41,0xD0,0x0C,0x02,  /* 00001340    "HID.A..." */
+-    0x08,0x5F,0x55,0x49,0x44,0x01,0x08,0x43,  /* 00001348    "._UID..C" */
+-    0x52,0x53,0x5F,0x11,0x4E,0x08,0x0A,0x8A,  /* 00001350    "RS_.N..." */
+-    0x47,0x01,0x10,0x00,0x10,0x00,0x00,0x10,  /* 00001358    "G......." */
+-    0x47,0x01,0x22,0x00,0x22,0x00,0x00,0x0C,  /* 00001360    "G."."..." */
+-    0x47,0x01,0x30,0x00,0x30,0x00,0x00,0x10,  /* 00001368    "G.0.0..." */
+-    0x47,0x01,0x44,0x00,0x44,0x00,0x00,0x1C,  /* 00001370    "G.D.D..." */
+-    0x47,0x01,0x62,0x00,0x62,0x00,0x00,0x02,  /* 00001378    "G.b.b..." */
+-    0x47,0x01,0x65,0x00,0x65,0x00,0x00,0x0B,  /* 00001380    "G.e.e..." */
+-    0x47,0x01,0x72,0x00,0x72,0x00,0x00,0x0E,  /* 00001388    "G.r.r..." */
+-    0x47,0x01,0x80,0x00,0x80,0x00,0x00,0x01,  /* 00001390    "G......." */
+-    0x47,0x01,0x84,0x00,0x84,0x00,0x00,0x03,  /* 00001398    "G......." */
+-    0x47,0x01,0x88,0x00,0x88,0x00,0x00,0x01,  /* 000013A0    "G......." */
+-    0x47,0x01,0x8C,0x00,0x8C,0x00,0x00,0x03,  /* 000013A8    "G......." */
+-    0x47,0x01,0x90,0x00,0x90,0x00,0x00,0x10,  /* 000013B0    "G......." */
+-    0x47,0x01,0xA2,0x00,0xA2,0x00,0x00,0x1C,  /* 000013B8    "G......." */
+-    0x47,0x01,0xE0,0x00,0xE0,0x00,0x00,0x10,  /* 000013C0    "G......." */
+-    0x47,0x01,0xA0,0x08,0xA0,0x08,0x00,0x04,  /* 000013C8    "G......." */
+-    0x47,0x01,0xC0,0x0C,0xC0,0x0C,0x00,0x10,  /* 000013D0    "G......." */
+-    0x47,0x01,0xD0,0x04,0xD0,0x04,0x00,0x02,  /* 000013D8    "G......." */
+-    0x79,0x00,0x14,0x0B,0x5F,0x43,0x52,0x53,  /* 000013E0    "y..._CRS" */
+-    0x00,0xA4,0x43,0x52,0x53,0x5F,0x5B,0x82,  /* 000013E8    "..CRS_[." */
+-    0x2B,0x50,0x49,0x43,0x5F,0x08,0x5F,0x48,  /* 000013F0    "+PIC_._H" */
+-    0x49,0x44,0x0B,0x41,0xD0,0x08,0x5F,0x43,  /* 000013F8    "ID.A.._C" */
+-    0x52,0x53,0x11,0x18,0x0A,0x15,0x47,0x01,  /* 00001400    "RS....G." */
+-    0x20,0x00,0x20,0x00,0x01,0x02,0x47,0x01,  /* 00001408    " . ...G." */
+-    0xA0,0x00,0xA0,0x00,0x01,0x02,0x22,0x04,  /* 00001410    "......"." */
+-    0x00,0x79,0x00,0x5B,0x82,0x47,0x05,0x44,  /* 00001418    ".y.[.G.D" */
+-    0x4D,0x41,0x30,0x08,0x5F,0x48,0x49,0x44,  /* 00001420    "MA0._HID" */
+-    0x0C,0x41,0xD0,0x02,0x00,0x08,0x5F,0x43,  /* 00001428    ".A...._C" */
+-    0x52,0x53,0x11,0x41,0x04,0x0A,0x3D,0x2A,  /* 00001430    "RS.A..=*" */
+-    0x10,0x04,0x47,0x01,0x00,0x00,0x00,0x00,  /* 00001438    "..G....." */
+-    0x00,0x10,0x47,0x01,0x81,0x00,0x81,0x00,  /* 00001440    "..G....." */
+-    0x00,0x03,0x47,0x01,0x87,0x00,0x87,0x00,  /* 00001448    "..G....." */
+-    0x00,0x01,0x47,0x01,0x89,0x00,0x89,0x00,  /* 00001450    "..G....." */
+-    0x00,0x03,0x47,0x01,0x8F,0x00,0x8F,0x00,  /* 00001458    "..G....." */
+-    0x00,0x01,0x47,0x01,0xC0,0x00,0xC0,0x00,  /* 00001460    "..G....." */
+-    0x00,0x20,0x47,0x01,0x80,0x04,0x80,0x04,  /* 00001468    ". G....." */
+-    0x00,0x10,0x79,0x00,0x5B,0x82,0x25,0x54,  /* 00001470    "..y.[.%T" */
+-    0x4D,0x52,0x5F,0x08,0x5F,0x48,0x49,0x44,  /* 00001478    "MR_._HID" */
+-    0x0C,0x41,0xD0,0x01,0x00,0x08,0x5F,0x43,  /* 00001480    ".A...._C" */
+-    0x52,0x53,0x11,0x10,0x0A,0x0D,0x47,0x01,  /* 00001488    "RS....G." */
+-    0x40,0x00,0x40,0x00,0x00,0x04,0x22,0x01,  /* 00001490    "@.@..."." */
+-    0x00,0x79,0x00,0x5B,0x82,0x25,0x52,0x54,  /* 00001498    ".y.[.%RT" */
+-    0x43,0x5F,0x08,0x5F,0x48,0x49,0x44,0x0C,  /* 000014A0    "C_._HID." */
+-    0x41,0xD0,0x0B,0x00,0x08,0x5F,0x43,0x52,  /* 000014A8    "A...._CR" */
+-    0x53,0x11,0x10,0x0A,0x0D,0x47,0x01,0x70,  /* 000014B0    "S....G.p" */
+-    0x00,0x70,0x00,0x00,0x02,0x22,0x00,0x01,  /* 000014B8    ".p...".." */
+-    0x79,0x00,0x5B,0x82,0x22,0x53,0x50,0x4B,  /* 000014C0    "y.[."SPK" */
+-    0x52,0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,  /* 000014C8    "R._HID.A" */
+-    0xD0,0x08,0x00,0x08,0x5F,0x43,0x52,0x53,  /* 000014D0    "...._CRS" */
+-    0x11,0x0D,0x0A,0x0A,0x47,0x01,0x61,0x00,  /* 000014D8    "....G.a." */
+-    0x61,0x00,0x00,0x01,0x79,0x00,0x5B,0x82,  /* 000014E0    "a...y.[." */
+-    0x31,0x50,0x53,0x32,0x4D,0x08,0x5F,0x48,  /* 000014E8    "1PS2M._H" */
+-    0x49,0x44,0x0C,0x41,0xD0,0x0F,0x13,0x08,  /* 000014F0    "ID.A...." */
+-    0x5F,0x43,0x49,0x44,0x0C,0x41,0xD0,0x0F,  /* 000014F8    "_CID.A.." */
+-    0x13,0x14,0x09,0x5F,0x53,0x54,0x41,0x00,  /* 00001500    "..._STA." */
+-    0xA4,0x0A,0x0F,0x08,0x5F,0x43,0x52,0x53,  /* 00001508    "...._CRS" */
+-    0x11,0x08,0x0A,0x05,0x22,0x00,0x10,0x79,  /* 00001510    "...."..y" */
+-    0x00,0x5B,0x82,0x42,0x04,0x50,0x53,0x32,  /* 00001518    ".[.B.PS2" */
+-    0x4B,0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,  /* 00001520    "K._HID.A" */
+-    0xD0,0x03,0x03,0x08,0x5F,0x43,0x49,0x44,  /* 00001528    "...._CID" */
+-    0x0C,0x41,0xD0,0x03,0x0B,0x14,0x09,0x5F,  /* 00001530    ".A....._" */
+-    0x53,0x54,0x41,0x00,0xA4,0x0A,0x0F,0x08,  /* 00001538    "STA....." */
+-    0x5F,0x43,0x52,0x53,0x11,0x18,0x0A,0x15,  /* 00001540    "_CRS...." */
+-    0x47,0x01,0x60,0x00,0x60,0x00,0x00,0x01,  /* 00001548    "G.`.`..." */
+-    0x47,0x01,0x64,0x00,0x64,0x00,0x00,0x01,  /* 00001550    "G.d.d..." */
+-    0x22,0x02,0x00,0x79,0x00,0x5B,0x82,0x3A,  /* 00001558    ""..y.[.:" */
+-    0x46,0x44,0x43,0x30,0x08,0x5F,0x48,0x49,  /* 00001560    "FDC0._HI" */
+-    0x44,0x0C,0x41,0xD0,0x07,0x00,0x14,0x09,  /* 00001568    "D.A....." */
+-    0x5F,0x53,0x54,0x41,0x00,0xA4,0x0A,0x0F,  /* 00001570    "_STA...." */
+-    0x08,0x5F,0x43,0x52,0x53,0x11,0x1B,0x0A,  /* 00001578    "._CRS..." */
+-    0x18,0x47,0x01,0xF0,0x03,0xF0,0x03,0x01,  /* 00001580    ".G......" */
+-    0x06,0x47,0x01,0xF7,0x03,0xF7,0x03,0x01,  /* 00001588    ".G......" */
+-    0x01,0x22,0x40,0x00,0x2A,0x04,0x00,0x79,  /* 00001590    "."@.*..y" */
+-    0x00,0x5B,0x82,0x46,0x04,0x55,0x41,0x52,  /* 00001598    ".[.F.UAR" */
+-    0x31,0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,  /* 000015A0    "1._HID.A" */
+-    0xD0,0x05,0x01,0x08,0x5F,0x55,0x49,0x44,  /* 000015A8    "...._UID" */
+-    0x01,0x14,0x19,0x5F,0x53,0x54,0x41,0x00,  /* 000015B0    "..._STA." */
+-    0xA0,0x0D,0x93,0x5E,0x5E,0x5E,0x5E,0x55,  /* 000015B8    "...^^^^U" */
+-    0x41,0x52,0x31,0x00,0xA4,0x00,0xA1,0x04,  /* 000015C0    "AR1....." */
+-    0xA4,0x0A,0x0F,0x08,0x5F,0x43,0x52,0x53,  /* 000015C8    "...._CRS" */
+-    0x11,0x10,0x0A,0x0D,0x47,0x01,0xF8,0x03,  /* 000015D0    "....G..." */
+-    0xF8,0x03,0x08,0x08,0x22,0x10,0x00,0x79,  /* 000015D8    "...."..y" */
+-    0x00,0x5B,0x82,0x47,0x04,0x55,0x41,0x52,  /* 000015E0    ".[.G.UAR" */
+-    0x32,0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,  /* 000015E8    "2._HID.A" */
+-    0xD0,0x05,0x01,0x08,0x5F,0x55,0x49,0x44,  /* 000015F0    "...._UID" */
+-    0x0A,0x02,0x14,0x19,0x5F,0x53,0x54,0x41,  /* 000015F8    "...._STA" */
+-    0x00,0xA0,0x0D,0x93,0x5E,0x5E,0x5E,0x5E,  /* 00001600    "....^^^^" */
+-    0x55,0x41,0x52,0x32,0x00,0xA4,0x00,0xA1,  /* 00001608    "UAR2...." */
+-    0x04,0xA4,0x0A,0x0F,0x08,0x5F,0x43,0x52,  /* 00001610    "....._CR" */
+-    0x53,0x11,0x10,0x0A,0x0D,0x47,0x01,0xF8,  /* 00001618    "S....G.." */
+-    0x02,0xF8,0x02,0x08,0x08,0x22,0x08,0x00,  /* 00001620    ".....".." */
+-    0x79,0x00,0x5B,0x82,0x36,0x4C,0x54,0x50,  /* 00001628    "y.[.6LTP" */
+-    0x31,0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,  /* 00001630    "1._HID.A" */
+-    0xD0,0x04,0x00,0x08,0x5F,0x55,0x49,0x44,  /* 00001638    "...._UID" */
+-    0x0A,0x02,0x14,0x09,0x5F,0x53,0x54,0x41,  /* 00001640    "...._STA" */
+-    0x00,0xA4,0x0A,0x0F,0x08,0x5F,0x43,0x52,  /* 00001648    "....._CR" */
+-    0x53,0x11,0x10,0x0A,0x0D,0x47,0x01,0x78,  /* 00001650    "S....G.x" */
+-    0x03,0x78,0x03,0x08,0x08,0x22,0x80,0x00,  /* 00001658    ".x...".." */
+-    0x79,0x00,0x5B,0x82,0x49,0x0A,0x53,0x30,  /* 00001660    "y.[.I.S0" */
+-    0x30,0x5F,0x08,0x5F,0x41,0x44,0x52,0x00,  /* 00001668    "0_._ADR." */
+-    0x08,0x5F,0x53,0x55,0x4E,0x00,0x14,0x1F,  /* 00001670    "._SUN..." */
+-    0x5F,0x50,0x53,0x30,0x00,0x70,0x00,0x5C,  /* 00001678    "_PS0.p.\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 00001680    "._GPEDPT" */
+-    0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47,  /* 00001688    "1p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x1F,  /* 00001690    "PEDPT2.." */
+-    0x5F,0x50,0x53,0x33,0x00,0x70,0x00,0x5C,  /* 00001698    "_PS3.p.\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 000016A0    "._GPEDPT" */
+-    0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F,0x47,  /* 000016A8    "1p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x2B,  /* 000016B0    "PEDPT2.+" */
+-    0x5F,0x45,0x4A,0x30,0x01,0x70,0x00,0x5C,  /* 000016B8    "_EJ0.p.\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 000016C0    "._GPEDPT" */
+-    0x31,0x70,0x0A,0x88,0x5C,0x2E,0x5F,0x47,  /* 000016C8    "1p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x32,0x70,0x01,  /* 000016D0    "PEDPT2p." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x50,0x48,  /* 000016D8    "\._GPEPH" */
+-    0x30,0x30,0x14,0x2A,0x5F,0x53,0x54,0x41,  /* 000016E0    "00.*_STA" */
+-    0x00,0x70,0x00,0x5C,0x2E,0x5F,0x47,0x50,  /* 000016E8    ".p.\._GP" */
+-    0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x89,  /* 000016F0    "EDPT1p.." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 000016F8    "\._GPEDP" */
+-    0x54,0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,  /* 00001700    "T2.\._GP" */
+-    0x45,0x50,0x48,0x30,0x30,0x5B,0x82,0x4D,  /* 00001708    "EPH00[.M" */
+-    0x0A,0x53,0x30,0x31,0x5F,0x08,0x5F,0x41,  /* 00001710    ".S01_._A" */
+-    0x44,0x52,0x0C,0x00,0x00,0x01,0x00,0x08,  /* 00001718    "DR......" */
+-    0x5F,0x53,0x55,0x4E,0x01,0x14,0x1F,0x5F,  /* 00001720    "_SUN..._" */
+-    0x50,0x53,0x30,0x00,0x70,0x01,0x5C,0x2E,  /* 00001728    "PS0.p.\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31,  /* 00001730    "_GPEDPT1" */
+-    0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47,0x50,  /* 00001738    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x32,0x14,0x1F,0x5F,  /* 00001740    "EDPT2.._" */
+-    0x50,0x53,0x33,0x00,0x70,0x01,0x5C,0x2E,  /* 00001748    "PS3.p.\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31,  /* 00001750    "_GPEDPT1" */
+-    0x70,0x0A,0x83,0x5C,0x2E,0x5F,0x47,0x50,  /* 00001758    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x32,0x14,0x2B,0x5F,  /* 00001760    "EDPT2.+_" */
+-    0x45,0x4A,0x30,0x01,0x70,0x01,0x5C,0x2E,  /* 00001768    "EJ0.p.\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31,  /* 00001770    "_GPEDPT1" */
+-    0x70,0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,  /* 00001778    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x32,0x70,0x01,0x5C,  /* 00001780    "EDPT2p.\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x50,0x48,0x30,  /* 00001788    "._GPEPH0" */
+-    0x31,0x14,0x2A,0x5F,0x53,0x54,0x41,0x00,  /* 00001790    "1.*_STA." */
+-    0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00001798    "p.\._GPE" */
+-    0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C,  /* 000017A0    "DPT1p..\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 000017A8    "._GPEDPT" */
+-    0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 000017B0    "2.\._GPE" */
+-    0x50,0x48,0x30,0x31,0x5B,0x82,0x42,0x0B,  /* 000017B8    "PH01[.B." */
+-    0x53,0x30,0x32,0x5F,0x08,0x5F,0x41,0x44,  /* 000017C0    "S02_._AD" */
+-    0x52,0x0C,0x00,0x00,0x02,0x00,0x08,0x5F,  /* 000017C8    "R......_" */
+-    0x53,0x55,0x4E,0x0A,0x02,0x14,0x20,0x5F,  /* 000017D0    "SUN... _" */
+-    0x50,0x53,0x30,0x00,0x70,0x0A,0x02,0x5C,  /* 000017D8    "PS0.p..\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 000017E0    "._GPEDPT" */
+-    0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47,  /* 000017E8    "1p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x20,  /* 000017F0    "PEDPT2. " */
+-    0x5F,0x50,0x53,0x33,0x00,0x70,0x0A,0x02,  /* 000017F8    "_PS3.p.." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 00001800    "\._GPEDP" */
+-    0x54,0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F,  /* 00001808    "T1p..\._" */
+-    0x47,0x50,0x45,0x44,0x50,0x54,0x32,0x14,  /* 00001810    "GPEDPT2." */
+-    0x2C,0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A,  /* 00001818    ",_EJ0.p." */
+-    0x02,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,  /* 00001820    ".\._GPED" */
+-    0x50,0x54,0x31,0x70,0x0A,0x88,0x5C,0x2E,  /* 00001828    "PT1p..\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32,  /* 00001830    "_GPEDPT2" */
+-    0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00001838    "p.\._GPE" */
+-    0x50,0x48,0x30,0x32,0x14,0x2B,0x5F,0x53,  /* 00001840    "PH02.+_S" */
+-    0x54,0x41,0x00,0x70,0x0A,0x02,0x5C,0x2E,  /* 00001848    "TA.p..\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31,  /* 00001850    "_GPEDPT1" */
+-    0x70,0x0A,0x89,0x5C,0x2E,0x5F,0x47,0x50,  /* 00001858    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E,  /* 00001860    "EDPT2.\." */
+-    0x5F,0x47,0x50,0x45,0x50,0x48,0x30,0x32,  /* 00001868    "_GPEPH02" */
+-    0x5B,0x82,0x42,0x0B,0x53,0x30,0x33,0x5F,  /* 00001870    "[.B.S03_" */
+-    0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00,  /* 00001878    "._ADR..." */
+-    0x03,0x00,0x08,0x5F,0x53,0x55,0x4E,0x0A,  /* 00001880    "..._SUN." */
+-    0x03,0x14,0x20,0x5F,0x50,0x53,0x30,0x00,  /* 00001888    ".. _PS0." */
+-    0x70,0x0A,0x03,0x5C,0x2E,0x5F,0x47,0x50,  /* 00001890    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x80,  /* 00001898    "EDPT1p.." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 000018A0    "\._GPEDP" */
+-    0x54,0x32,0x14,0x20,0x5F,0x50,0x53,0x33,  /* 000018A8    "T2. _PS3" */
+-    0x00,0x70,0x0A,0x03,0x5C,0x2E,0x5F,0x47,  /* 000018B0    ".p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x31,0x70,0x0A,  /* 000018B8    "PEDPT1p." */
+-    0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,  /* 000018C0    ".\._GPED" */
+-    0x50,0x54,0x32,0x14,0x2C,0x5F,0x45,0x4A,  /* 000018C8    "PT2.,_EJ" */
+-    0x30,0x01,0x70,0x0A,0x03,0x5C,0x2E,0x5F,  /* 000018D0    "0.p..\._" */
+-    0x47,0x50,0x45,0x44,0x50,0x54,0x31,0x70,  /* 000018D8    "GPEDPT1p" */
+-    0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 000018E0    "..\._GPE" */
+-    0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E,  /* 000018E8    "DPT2p.\." */
+-    0x5F,0x47,0x50,0x45,0x50,0x48,0x30,0x33,  /* 000018F0    "_GPEPH03" */
+-    0x14,0x2B,0x5F,0x53,0x54,0x41,0x00,0x70,  /* 000018F8    ".+_STA.p" */
+-    0x0A,0x03,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00001900    "..\._GPE" */
+-    0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C,  /* 00001908    "DPT1p..\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 00001910    "._GPEDPT" */
+-    0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00001918    "2.\._GPE" */
+-    0x50,0x48,0x30,0x33,0x5B,0x82,0x42,0x0B,  /* 00001920    "PH03[.B." */
+-    0x53,0x30,0x34,0x5F,0x08,0x5F,0x41,0x44,  /* 00001928    "S04_._AD" */
+-    0x52,0x0C,0x00,0x00,0x04,0x00,0x08,0x5F,  /* 00001930    "R......_" */
+-    0x53,0x55,0x4E,0x0A,0x04,0x14,0x20,0x5F,  /* 00001938    "SUN... _" */
+-    0x50,0x53,0x30,0x00,0x70,0x0A,0x04,0x5C,  /* 00001940    "PS0.p..\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 00001948    "._GPEDPT" */
+-    0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47,  /* 00001950    "1p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x20,  /* 00001958    "PEDPT2. " */
+-    0x5F,0x50,0x53,0x33,0x00,0x70,0x0A,0x04,  /* 00001960    "_PS3.p.." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 00001968    "\._GPEDP" */
+-    0x54,0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F,  /* 00001970    "T1p..\._" */
+-    0x47,0x50,0x45,0x44,0x50,0x54,0x32,0x14,  /* 00001978    "GPEDPT2." */
+-    0x2C,0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A,  /* 00001980    ",_EJ0.p." */
+-    0x04,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,  /* 00001988    ".\._GPED" */
+-    0x50,0x54,0x31,0x70,0x0A,0x88,0x5C,0x2E,  /* 00001990    "PT1p..\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32,  /* 00001998    "_GPEDPT2" */
+-    0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 000019A0    "p.\._GPE" */
+-    0x50,0x48,0x30,0x34,0x14,0x2B,0x5F,0x53,  /* 000019A8    "PH04.+_S" */
+-    0x54,0x41,0x00,0x70,0x0A,0x04,0x5C,0x2E,  /* 000019B0    "TA.p..\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31,  /* 000019B8    "_GPEDPT1" */
+-    0x70,0x0A,0x89,0x5C,0x2E,0x5F,0x47,0x50,  /* 000019C0    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E,  /* 000019C8    "EDPT2.\." */
+-    0x5F,0x47,0x50,0x45,0x50,0x48,0x30,0x34,  /* 000019D0    "_GPEPH04" */
+-    0x5B,0x82,0x42,0x0B,0x53,0x30,0x35,0x5F,  /* 000019D8    "[.B.S05_" */
+-    0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00,  /* 000019E0    "._ADR..." */
+-    0x05,0x00,0x08,0x5F,0x53,0x55,0x4E,0x0A,  /* 000019E8    "..._SUN." */
+-    0x05,0x14,0x20,0x5F,0x50,0x53,0x30,0x00,  /* 000019F0    ".. _PS0." */
+-    0x70,0x0A,0x05,0x5C,0x2E,0x5F,0x47,0x50,  /* 000019F8    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x80,  /* 00001A00    "EDPT1p.." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 00001A08    "\._GPEDP" */
+-    0x54,0x32,0x14,0x20,0x5F,0x50,0x53,0x33,  /* 00001A10    "T2. _PS3" */
+-    0x00,0x70,0x0A,0x05,0x5C,0x2E,0x5F,0x47,  /* 00001A18    ".p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x31,0x70,0x0A,  /* 00001A20    "PEDPT1p." */
+-    0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,  /* 00001A28    ".\._GPED" */
+-    0x50,0x54,0x32,0x14,0x2C,0x5F,0x45,0x4A,  /* 00001A30    "PT2.,_EJ" */
+-    0x30,0x01,0x70,0x0A,0x05,0x5C,0x2E,0x5F,  /* 00001A38    "0.p..\._" */
+-    0x47,0x50,0x45,0x44,0x50,0x54,0x31,0x70,  /* 00001A40    "GPEDPT1p" */
+-    0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00001A48    "..\._GPE" */
+-    0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E,  /* 00001A50    "DPT2p.\." */
+-    0x5F,0x47,0x50,0x45,0x50,0x48,0x30,0x35,  /* 00001A58    "_GPEPH05" */
+-    0x14,0x2B,0x5F,0x53,0x54,0x41,0x00,0x70,  /* 00001A60    ".+_STA.p" */
+-    0x0A,0x05,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00001A68    "..\._GPE" */
+-    0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C,  /* 00001A70    "DPT1p..\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 00001A78    "._GPEDPT" */
+-    0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00001A80    "2.\._GPE" */
+-    0x50,0x48,0x30,0x35,0x5B,0x82,0x42,0x0B,  /* 00001A88    "PH05[.B." */
+-    0x53,0x30,0x36,0x5F,0x08,0x5F,0x41,0x44,  /* 00001A90    "S06_._AD" */
+-    0x52,0x0C,0x00,0x00,0x06,0x00,0x08,0x5F,  /* 00001A98    "R......_" */
+-    0x53,0x55,0x4E,0x0A,0x06,0x14,0x20,0x5F,  /* 00001AA0    "SUN... _" */
+-    0x50,0x53,0x30,0x00,0x70,0x0A,0x06,0x5C,  /* 00001AA8    "PS0.p..\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 00001AB0    "._GPEDPT" */
+-    0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47,  /* 00001AB8    "1p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x20,  /* 00001AC0    "PEDPT2. " */
+-    0x5F,0x50,0x53,0x33,0x00,0x70,0x0A,0x06,  /* 00001AC8    "_PS3.p.." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 00001AD0    "\._GPEDP" */
+-    0x54,0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F,  /* 00001AD8    "T1p..\._" */
+-    0x47,0x50,0x45,0x44,0x50,0x54,0x32,0x14,  /* 00001AE0    "GPEDPT2." */
+-    0x2C,0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A,  /* 00001AE8    ",_EJ0.p." */
+-    0x06,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,  /* 00001AF0    ".\._GPED" */
+-    0x50,0x54,0x31,0x70,0x0A,0x88,0x5C,0x2E,  /* 00001AF8    "PT1p..\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32,  /* 00001B00    "_GPEDPT2" */
+-    0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00001B08    "p.\._GPE" */
+-    0x50,0x48,0x30,0x36,0x14,0x2B,0x5F,0x53,  /* 00001B10    "PH06.+_S" */
+-    0x54,0x41,0x00,0x70,0x0A,0x06,0x5C,0x2E,  /* 00001B18    "TA.p..\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31,  /* 00001B20    "_GPEDPT1" */
+-    0x70,0x0A,0x89,0x5C,0x2E,0x5F,0x47,0x50,  /* 00001B28    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E,  /* 00001B30    "EDPT2.\." */
+-    0x5F,0x47,0x50,0x45,0x50,0x48,0x30,0x36,  /* 00001B38    "_GPEPH06" */
+-    0x5B,0x82,0x42,0x0B,0x53,0x30,0x37,0x5F,  /* 00001B40    "[.B.S07_" */
+-    0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00,  /* 00001B48    "._ADR..." */
+-    0x07,0x00,0x08,0x5F,0x53,0x55,0x4E,0x0A,  /* 00001B50    "..._SUN." */
+-    0x07,0x14,0x20,0x5F,0x50,0x53,0x30,0x00,  /* 00001B58    ".. _PS0." */
+-    0x70,0x0A,0x07,0x5C,0x2E,0x5F,0x47,0x50,  /* 00001B60    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x80,  /* 00001B68    "EDPT1p.." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 00001B70    "\._GPEDP" */
+-    0x54,0x32,0x14,0x20,0x5F,0x50,0x53,0x33,  /* 00001B78    "T2. _PS3" */
+-    0x00,0x70,0x0A,0x07,0x5C,0x2E,0x5F,0x47,  /* 00001B80    ".p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x31,0x70,0x0A,  /* 00001B88    "PEDPT1p." */
+-    0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,  /* 00001B90    ".\._GPED" */
+-    0x50,0x54,0x32,0x14,0x2C,0x5F,0x45,0x4A,  /* 00001B98    "PT2.,_EJ" */
+-    0x30,0x01,0x70,0x0A,0x07,0x5C,0x2E,0x5F,  /* 00001BA0    "0.p..\._" */
+-    0x47,0x50,0x45,0x44,0x50,0x54,0x31,0x70,  /* 00001BA8    "GPEDPT1p" */
+-    0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00001BB0    "..\._GPE" */
+-    0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E,  /* 00001BB8    "DPT2p.\." */
+-    0x5F,0x47,0x50,0x45,0x50,0x48,0x30,0x37,  /* 00001BC0    "_GPEPH07" */
+-    0x14,0x2B,0x5F,0x53,0x54,0x41,0x00,0x70,  /* 00001BC8    ".+_STA.p" */
+-    0x0A,0x07,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00001BD0    "..\._GPE" */
+-    0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C,  /* 00001BD8    "DPT1p..\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 00001BE0    "._GPEDPT" */
+-    0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00001BE8    "2.\._GPE" */
+-    0x50,0x48,0x30,0x37,0x5B,0x82,0x42,0x0B,  /* 00001BF0    "PH07[.B." */
+-    0x53,0x30,0x38,0x5F,0x08,0x5F,0x41,0x44,  /* 00001BF8    "S08_._AD" */
+-    0x52,0x0C,0x00,0x00,0x08,0x00,0x08,0x5F,  /* 00001C00    "R......_" */
+-    0x53,0x55,0x4E,0x0A,0x08,0x14,0x20,0x5F,  /* 00001C08    "SUN... _" */
+-    0x50,0x53,0x30,0x00,0x70,0x0A,0x08,0x5C,  /* 00001C10    "PS0.p..\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 00001C18    "._GPEDPT" */
+-    0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47,  /* 00001C20    "1p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x20,  /* 00001C28    "PEDPT2. " */
+-    0x5F,0x50,0x53,0x33,0x00,0x70,0x0A,0x08,  /* 00001C30    "_PS3.p.." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 00001C38    "\._GPEDP" */
+-    0x54,0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F,  /* 00001C40    "T1p..\._" */
+-    0x47,0x50,0x45,0x44,0x50,0x54,0x32,0x14,  /* 00001C48    "GPEDPT2." */
+-    0x2C,0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A,  /* 00001C50    ",_EJ0.p." */
+-    0x08,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,  /* 00001C58    ".\._GPED" */
+-    0x50,0x54,0x31,0x70,0x0A,0x88,0x5C,0x2E,  /* 00001C60    "PT1p..\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32,  /* 00001C68    "_GPEDPT2" */
+-    0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00001C70    "p.\._GPE" */
+-    0x50,0x48,0x30,0x38,0x14,0x2B,0x5F,0x53,  /* 00001C78    "PH08.+_S" */
+-    0x54,0x41,0x00,0x70,0x0A,0x08,0x5C,0x2E,  /* 00001C80    "TA.p..\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31,  /* 00001C88    "_GPEDPT1" */
+-    0x70,0x0A,0x89,0x5C,0x2E,0x5F,0x47,0x50,  /* 00001C90    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E,  /* 00001C98    "EDPT2.\." */
+-    0x5F,0x47,0x50,0x45,0x50,0x48,0x30,0x38,  /* 00001CA0    "_GPEPH08" */
+-    0x5B,0x82,0x42,0x0B,0x53,0x30,0x39,0x5F,  /* 00001CA8    "[.B.S09_" */
+-    0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00,  /* 00001CB0    "._ADR..." */
+-    0x09,0x00,0x08,0x5F,0x53,0x55,0x4E,0x0A,  /* 00001CB8    "..._SUN." */
+-    0x09,0x14,0x20,0x5F,0x50,0x53,0x30,0x00,  /* 00001CC0    ".. _PS0." */
+-    0x70,0x0A,0x09,0x5C,0x2E,0x5F,0x47,0x50,  /* 00001CC8    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x80,  /* 00001CD0    "EDPT1p.." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 00001CD8    "\._GPEDP" */
+-    0x54,0x32,0x14,0x20,0x5F,0x50,0x53,0x33,  /* 00001CE0    "T2. _PS3" */
+-    0x00,0x70,0x0A,0x09,0x5C,0x2E,0x5F,0x47,  /* 00001CE8    ".p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x31,0x70,0x0A,  /* 00001CF0    "PEDPT1p." */
+-    0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,  /* 00001CF8    ".\._GPED" */
+-    0x50,0x54,0x32,0x14,0x2C,0x5F,0x45,0x4A,  /* 00001D00    "PT2.,_EJ" */
+-    0x30,0x01,0x70,0x0A,0x09,0x5C,0x2E,0x5F,  /* 00001D08    "0.p..\._" */
+-    0x47,0x50,0x45,0x44,0x50,0x54,0x31,0x70,  /* 00001D10    "GPEDPT1p" */
+-    0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00001D18    "..\._GPE" */
+-    0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E,  /* 00001D20    "DPT2p.\." */
+-    0x5F,0x47,0x50,0x45,0x50,0x48,0x30,0x39,  /* 00001D28    "_GPEPH09" */
+-    0x14,0x2B,0x5F,0x53,0x54,0x41,0x00,0x70,  /* 00001D30    ".+_STA.p" */
+-    0x0A,0x09,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00001D38    "..\._GPE" */
+-    0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C,  /* 00001D40    "DPT1p..\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 00001D48    "._GPEDPT" */
+-    0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00001D50    "2.\._GPE" */
+-    0x50,0x48,0x30,0x39,0x5B,0x82,0x42,0x0B,  /* 00001D58    "PH09[.B." */
+-    0x53,0x30,0x41,0x5F,0x08,0x5F,0x41,0x44,  /* 00001D60    "S0A_._AD" */
+-    0x52,0x0C,0x00,0x00,0x0A,0x00,0x08,0x5F,  /* 00001D68    "R......_" */
+-    0x53,0x55,0x4E,0x0A,0x0A,0x14,0x20,0x5F,  /* 00001D70    "SUN... _" */
+-    0x50,0x53,0x30,0x00,0x70,0x0A,0x0A,0x5C,  /* 00001D78    "PS0.p..\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 00001D80    "._GPEDPT" */
+-    0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47,  /* 00001D88    "1p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x20,  /* 00001D90    "PEDPT2. " */
+-    0x5F,0x50,0x53,0x33,0x00,0x70,0x0A,0x0A,  /* 00001D98    "_PS3.p.." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 00001DA0    "\._GPEDP" */
+-    0x54,0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F,  /* 00001DA8    "T1p..\._" */
+-    0x47,0x50,0x45,0x44,0x50,0x54,0x32,0x14,  /* 00001DB0    "GPEDPT2." */
+-    0x2C,0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A,  /* 00001DB8    ",_EJ0.p." */
+-    0x0A,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,  /* 00001DC0    ".\._GPED" */
+-    0x50,0x54,0x31,0x70,0x0A,0x88,0x5C,0x2E,  /* 00001DC8    "PT1p..\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32,  /* 00001DD0    "_GPEDPT2" */
+-    0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00001DD8    "p.\._GPE" */
+-    0x50,0x48,0x30,0x41,0x14,0x2B,0x5F,0x53,  /* 00001DE0    "PH0A.+_S" */
+-    0x54,0x41,0x00,0x70,0x0A,0x0A,0x5C,0x2E,  /* 00001DE8    "TA.p..\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31,  /* 00001DF0    "_GPEDPT1" */
+-    0x70,0x0A,0x89,0x5C,0x2E,0x5F,0x47,0x50,  /* 00001DF8    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E,  /* 00001E00    "EDPT2.\." */
+-    0x5F,0x47,0x50,0x45,0x50,0x48,0x30,0x41,  /* 00001E08    "_GPEPH0A" */
+-    0x5B,0x82,0x42,0x0B,0x53,0x30,0x42,0x5F,  /* 00001E10    "[.B.S0B_" */
+-    0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00,  /* 00001E18    "._ADR..." */
+-    0x0B,0x00,0x08,0x5F,0x53,0x55,0x4E,0x0A,  /* 00001E20    "..._SUN." */
+-    0x0B,0x14,0x20,0x5F,0x50,0x53,0x30,0x00,  /* 00001E28    ".. _PS0." */
+-    0x70,0x0A,0x0B,0x5C,0x2E,0x5F,0x47,0x50,  /* 00001E30    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x80,  /* 00001E38    "EDPT1p.." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 00001E40    "\._GPEDP" */
+-    0x54,0x32,0x14,0x20,0x5F,0x50,0x53,0x33,  /* 00001E48    "T2. _PS3" */
+-    0x00,0x70,0x0A,0x0B,0x5C,0x2E,0x5F,0x47,  /* 00001E50    ".p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x31,0x70,0x0A,  /* 00001E58    "PEDPT1p." */
+-    0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,  /* 00001E60    ".\._GPED" */
+-    0x50,0x54,0x32,0x14,0x2C,0x5F,0x45,0x4A,  /* 00001E68    "PT2.,_EJ" */
+-    0x30,0x01,0x70,0x0A,0x0B,0x5C,0x2E,0x5F,  /* 00001E70    "0.p..\._" */
+-    0x47,0x50,0x45,0x44,0x50,0x54,0x31,0x70,  /* 00001E78    "GPEDPT1p" */
+-    0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00001E80    "..\._GPE" */
+-    0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E,  /* 00001E88    "DPT2p.\." */
+-    0x5F,0x47,0x50,0x45,0x50,0x48,0x30,0x42,  /* 00001E90    "_GPEPH0B" */
+-    0x14,0x2B,0x5F,0x53,0x54,0x41,0x00,0x70,  /* 00001E98    ".+_STA.p" */
+-    0x0A,0x0B,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00001EA0    "..\._GPE" */
+-    0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C,  /* 00001EA8    "DPT1p..\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 00001EB0    "._GPEDPT" */
+-    0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00001EB8    "2.\._GPE" */
+-    0x50,0x48,0x30,0x42,0x5B,0x82,0x42,0x0B,  /* 00001EC0    "PH0B[.B." */
+-    0x53,0x30,0x43,0x5F,0x08,0x5F,0x41,0x44,  /* 00001EC8    "S0C_._AD" */
+-    0x52,0x0C,0x00,0x00,0x0C,0x00,0x08,0x5F,  /* 00001ED0    "R......_" */
+-    0x53,0x55,0x4E,0x0A,0x0C,0x14,0x20,0x5F,  /* 00001ED8    "SUN... _" */
+-    0x50,0x53,0x30,0x00,0x70,0x0A,0x0C,0x5C,  /* 00001EE0    "PS0.p..\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 00001EE8    "._GPEDPT" */
+-    0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47,  /* 00001EF0    "1p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x20,  /* 00001EF8    "PEDPT2. " */
+-    0x5F,0x50,0x53,0x33,0x00,0x70,0x0A,0x0C,  /* 00001F00    "_PS3.p.." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 00001F08    "\._GPEDP" */
+-    0x54,0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F,  /* 00001F10    "T1p..\._" */
+-    0x47,0x50,0x45,0x44,0x50,0x54,0x32,0x14,  /* 00001F18    "GPEDPT2." */
+-    0x2C,0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A,  /* 00001F20    ",_EJ0.p." */
+-    0x0C,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,  /* 00001F28    ".\._GPED" */
+-    0x50,0x54,0x31,0x70,0x0A,0x88,0x5C,0x2E,  /* 00001F30    "PT1p..\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32,  /* 00001F38    "_GPEDPT2" */
+-    0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00001F40    "p.\._GPE" */
+-    0x50,0x48,0x30,0x43,0x14,0x2B,0x5F,0x53,  /* 00001F48    "PH0C.+_S" */
+-    0x54,0x41,0x00,0x70,0x0A,0x0C,0x5C,0x2E,  /* 00001F50    "TA.p..\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31,  /* 00001F58    "_GPEDPT1" */
+-    0x70,0x0A,0x89,0x5C,0x2E,0x5F,0x47,0x50,  /* 00001F60    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E,  /* 00001F68    "EDPT2.\." */
+-    0x5F,0x47,0x50,0x45,0x50,0x48,0x30,0x43,  /* 00001F70    "_GPEPH0C" */
+-    0x5B,0x82,0x42,0x0B,0x53,0x30,0x44,0x5F,  /* 00001F78    "[.B.S0D_" */
+-    0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00,  /* 00001F80    "._ADR..." */
+-    0x0D,0x00,0x08,0x5F,0x53,0x55,0x4E,0x0A,  /* 00001F88    "..._SUN." */
+-    0x0D,0x14,0x20,0x5F,0x50,0x53,0x30,0x00,  /* 00001F90    ".. _PS0." */
+-    0x70,0x0A,0x0D,0x5C,0x2E,0x5F,0x47,0x50,  /* 00001F98    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x80,  /* 00001FA0    "EDPT1p.." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 00001FA8    "\._GPEDP" */
+-    0x54,0x32,0x14,0x20,0x5F,0x50,0x53,0x33,  /* 00001FB0    "T2. _PS3" */
+-    0x00,0x70,0x0A,0x0D,0x5C,0x2E,0x5F,0x47,  /* 00001FB8    ".p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x31,0x70,0x0A,  /* 00001FC0    "PEDPT1p." */
+-    0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,  /* 00001FC8    ".\._GPED" */
+-    0x50,0x54,0x32,0x14,0x2C,0x5F,0x45,0x4A,  /* 00001FD0    "PT2.,_EJ" */
+-    0x30,0x01,0x70,0x0A,0x0D,0x5C,0x2E,0x5F,  /* 00001FD8    "0.p..\._" */
+-    0x47,0x50,0x45,0x44,0x50,0x54,0x31,0x70,  /* 00001FE0    "GPEDPT1p" */
+-    0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00001FE8    "..\._GPE" */
+-    0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E,  /* 00001FF0    "DPT2p.\." */
+-    0x5F,0x47,0x50,0x45,0x50,0x48,0x30,0x44,  /* 00001FF8    "_GPEPH0D" */
+-    0x14,0x2B,0x5F,0x53,0x54,0x41,0x00,0x70,  /* 00002000    ".+_STA.p" */
+-    0x0A,0x0D,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00002008    "..\._GPE" */
+-    0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C,  /* 00002010    "DPT1p..\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 00002018    "._GPEDPT" */
+-    0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00002020    "2.\._GPE" */
+-    0x50,0x48,0x30,0x44,0x5B,0x82,0x42,0x0B,  /* 00002028    "PH0D[.B." */
+-    0x53,0x30,0x45,0x5F,0x08,0x5F,0x41,0x44,  /* 00002030    "S0E_._AD" */
+-    0x52,0x0C,0x00,0x00,0x0E,0x00,0x08,0x5F,  /* 00002038    "R......_" */
+-    0x53,0x55,0x4E,0x0A,0x0E,0x14,0x20,0x5F,  /* 00002040    "SUN... _" */
+-    0x50,0x53,0x30,0x00,0x70,0x0A,0x0E,0x5C,  /* 00002048    "PS0.p..\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 00002050    "._GPEDPT" */
+-    0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47,  /* 00002058    "1p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x20,  /* 00002060    "PEDPT2. " */
+-    0x5F,0x50,0x53,0x33,0x00,0x70,0x0A,0x0E,  /* 00002068    "_PS3.p.." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 00002070    "\._GPEDP" */
+-    0x54,0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F,  /* 00002078    "T1p..\._" */
+-    0x47,0x50,0x45,0x44,0x50,0x54,0x32,0x14,  /* 00002080    "GPEDPT2." */
+-    0x2C,0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A,  /* 00002088    ",_EJ0.p." */
+-    0x0E,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,  /* 00002090    ".\._GPED" */
+-    0x50,0x54,0x31,0x70,0x0A,0x88,0x5C,0x2E,  /* 00002098    "PT1p..\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32,  /* 000020A0    "_GPEDPT2" */
+-    0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 000020A8    "p.\._GPE" */
+-    0x50,0x48,0x30,0x45,0x14,0x2B,0x5F,0x53,  /* 000020B0    "PH0E.+_S" */
+-    0x54,0x41,0x00,0x70,0x0A,0x0E,0x5C,0x2E,  /* 000020B8    "TA.p..\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31,  /* 000020C0    "_GPEDPT1" */
+-    0x70,0x0A,0x89,0x5C,0x2E,0x5F,0x47,0x50,  /* 000020C8    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E,  /* 000020D0    "EDPT2.\." */
+-    0x5F,0x47,0x50,0x45,0x50,0x48,0x30,0x45,  /* 000020D8    "_GPEPH0E" */
+-    0x5B,0x82,0x42,0x0B,0x53,0x30,0x46,0x5F,  /* 000020E0    "[.B.S0F_" */
+-    0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00,  /* 000020E8    "._ADR..." */
+-    0x0F,0x00,0x08,0x5F,0x53,0x55,0x4E,0x0A,  /* 000020F0    "..._SUN." */
+-    0x0F,0x14,0x20,0x5F,0x50,0x53,0x30,0x00,  /* 000020F8    ".. _PS0." */
+-    0x70,0x0A,0x0F,0x5C,0x2E,0x5F,0x47,0x50,  /* 00002100    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x80,  /* 00002108    "EDPT1p.." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 00002110    "\._GPEDP" */
+-    0x54,0x32,0x14,0x20,0x5F,0x50,0x53,0x33,  /* 00002118    "T2. _PS3" */
+-    0x00,0x70,0x0A,0x0F,0x5C,0x2E,0x5F,0x47,  /* 00002120    ".p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x31,0x70,0x0A,  /* 00002128    "PEDPT1p." */
+-    0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,  /* 00002130    ".\._GPED" */
+-    0x50,0x54,0x32,0x14,0x2C,0x5F,0x45,0x4A,  /* 00002138    "PT2.,_EJ" */
+-    0x30,0x01,0x70,0x0A,0x0F,0x5C,0x2E,0x5F,  /* 00002140    "0.p..\._" */
+-    0x47,0x50,0x45,0x44,0x50,0x54,0x31,0x70,  /* 00002148    "GPEDPT1p" */
+-    0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00002150    "..\._GPE" */
+-    0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E,  /* 00002158    "DPT2p.\." */
+-    0x5F,0x47,0x50,0x45,0x50,0x48,0x30,0x46,  /* 00002160    "_GPEPH0F" */
+-    0x14,0x2B,0x5F,0x53,0x54,0x41,0x00,0x70,  /* 00002168    ".+_STA.p" */
+-    0x0A,0x0F,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00002170    "..\._GPE" */
+-    0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C,  /* 00002178    "DPT1p..\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 00002180    "._GPEDPT" */
+-    0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00002188    "2.\._GPE" */
+-    0x50,0x48,0x30,0x46,0x5B,0x82,0x42,0x0B,  /* 00002190    "PH0F[.B." */
+-    0x53,0x31,0x30,0x5F,0x08,0x5F,0x41,0x44,  /* 00002198    "S10_._AD" */
+-    0x52,0x0C,0x00,0x00,0x10,0x00,0x08,0x5F,  /* 000021A0    "R......_" */
+-    0x53,0x55,0x4E,0x0A,0x10,0x14,0x20,0x5F,  /* 000021A8    "SUN... _" */
+-    0x50,0x53,0x30,0x00,0x70,0x0A,0x10,0x5C,  /* 000021B0    "PS0.p..\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 000021B8    "._GPEDPT" */
+-    0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47,  /* 000021C0    "1p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x20,  /* 000021C8    "PEDPT2. " */
+-    0x5F,0x50,0x53,0x33,0x00,0x70,0x0A,0x10,  /* 000021D0    "_PS3.p.." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 000021D8    "\._GPEDP" */
+-    0x54,0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F,  /* 000021E0    "T1p..\._" */
+-    0x47,0x50,0x45,0x44,0x50,0x54,0x32,0x14,  /* 000021E8    "GPEDPT2." */
+-    0x2C,0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A,  /* 000021F0    ",_EJ0.p." */
+-    0x10,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,  /* 000021F8    ".\._GPED" */
+-    0x50,0x54,0x31,0x70,0x0A,0x88,0x5C,0x2E,  /* 00002200    "PT1p..\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32,  /* 00002208    "_GPEDPT2" */
+-    0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00002210    "p.\._GPE" */
+-    0x50,0x48,0x31,0x30,0x14,0x2B,0x5F,0x53,  /* 00002218    "PH10.+_S" */
+-    0x54,0x41,0x00,0x70,0x0A,0x10,0x5C,0x2E,  /* 00002220    "TA.p..\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31,  /* 00002228    "_GPEDPT1" */
+-    0x70,0x0A,0x89,0x5C,0x2E,0x5F,0x47,0x50,  /* 00002230    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E,  /* 00002238    "EDPT2.\." */
+-    0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x30,  /* 00002240    "_GPEPH10" */
+-    0x5B,0x82,0x42,0x0B,0x53,0x31,0x31,0x5F,  /* 00002248    "[.B.S11_" */
+-    0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00,  /* 00002250    "._ADR..." */
+-    0x11,0x00,0x08,0x5F,0x53,0x55,0x4E,0x0A,  /* 00002258    "..._SUN." */
+-    0x11,0x14,0x20,0x5F,0x50,0x53,0x30,0x00,  /* 00002260    ".. _PS0." */
+-    0x70,0x0A,0x11,0x5C,0x2E,0x5F,0x47,0x50,  /* 00002268    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x80,  /* 00002270    "EDPT1p.." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 00002278    "\._GPEDP" */
+-    0x54,0x32,0x14,0x20,0x5F,0x50,0x53,0x33,  /* 00002280    "T2. _PS3" */
+-    0x00,0x70,0x0A,0x11,0x5C,0x2E,0x5F,0x47,  /* 00002288    ".p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x31,0x70,0x0A,  /* 00002290    "PEDPT1p." */
+-    0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,  /* 00002298    ".\._GPED" */
+-    0x50,0x54,0x32,0x14,0x2C,0x5F,0x45,0x4A,  /* 000022A0    "PT2.,_EJ" */
+-    0x30,0x01,0x70,0x0A,0x11,0x5C,0x2E,0x5F,  /* 000022A8    "0.p..\._" */
+-    0x47,0x50,0x45,0x44,0x50,0x54,0x31,0x70,  /* 000022B0    "GPEDPT1p" */
+-    0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 000022B8    "..\._GPE" */
+-    0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E,  /* 000022C0    "DPT2p.\." */
+-    0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x31,  /* 000022C8    "_GPEPH11" */
+-    0x14,0x2B,0x5F,0x53,0x54,0x41,0x00,0x70,  /* 000022D0    ".+_STA.p" */
+-    0x0A,0x11,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 000022D8    "..\._GPE" */
+-    0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C,  /* 000022E0    "DPT1p..\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 000022E8    "._GPEDPT" */
+-    0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 000022F0    "2.\._GPE" */
+-    0x50,0x48,0x31,0x31,0x5B,0x82,0x42,0x0B,  /* 000022F8    "PH11[.B." */
+-    0x53,0x31,0x32,0x5F,0x08,0x5F,0x41,0x44,  /* 00002300    "S12_._AD" */
+-    0x52,0x0C,0x00,0x00,0x12,0x00,0x08,0x5F,  /* 00002308    "R......_" */
+-    0x53,0x55,0x4E,0x0A,0x12,0x14,0x20,0x5F,  /* 00002310    "SUN... _" */
+-    0x50,0x53,0x30,0x00,0x70,0x0A,0x12,0x5C,  /* 00002318    "PS0.p..\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 00002320    "._GPEDPT" */
+-    0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47,  /* 00002328    "1p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x20,  /* 00002330    "PEDPT2. " */
+-    0x5F,0x50,0x53,0x33,0x00,0x70,0x0A,0x12,  /* 00002338    "_PS3.p.." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 00002340    "\._GPEDP" */
+-    0x54,0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F,  /* 00002348    "T1p..\._" */
+-    0x47,0x50,0x45,0x44,0x50,0x54,0x32,0x14,  /* 00002350    "GPEDPT2." */
+-    0x2C,0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A,  /* 00002358    ",_EJ0.p." */
+-    0x12,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,  /* 00002360    ".\._GPED" */
+-    0x50,0x54,0x31,0x70,0x0A,0x88,0x5C,0x2E,  /* 00002368    "PT1p..\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32,  /* 00002370    "_GPEDPT2" */
+-    0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00002378    "p.\._GPE" */
+-    0x50,0x48,0x31,0x32,0x14,0x2B,0x5F,0x53,  /* 00002380    "PH12.+_S" */
+-    0x54,0x41,0x00,0x70,0x0A,0x12,0x5C,0x2E,  /* 00002388    "TA.p..\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31,  /* 00002390    "_GPEDPT1" */
+-    0x70,0x0A,0x89,0x5C,0x2E,0x5F,0x47,0x50,  /* 00002398    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E,  /* 000023A0    "EDPT2.\." */
+-    0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x32,  /* 000023A8    "_GPEPH12" */
+-    0x5B,0x82,0x42,0x0B,0x53,0x31,0x33,0x5F,  /* 000023B0    "[.B.S13_" */
+-    0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00,  /* 000023B8    "._ADR..." */
+-    0x13,0x00,0x08,0x5F,0x53,0x55,0x4E,0x0A,  /* 000023C0    "..._SUN." */
+-    0x13,0x14,0x20,0x5F,0x50,0x53,0x30,0x00,  /* 000023C8    ".. _PS0." */
+-    0x70,0x0A,0x13,0x5C,0x2E,0x5F,0x47,0x50,  /* 000023D0    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x80,  /* 000023D8    "EDPT1p.." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 000023E0    "\._GPEDP" */
+-    0x54,0x32,0x14,0x20,0x5F,0x50,0x53,0x33,  /* 000023E8    "T2. _PS3" */
+-    0x00,0x70,0x0A,0x13,0x5C,0x2E,0x5F,0x47,  /* 000023F0    ".p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x31,0x70,0x0A,  /* 000023F8    "PEDPT1p." */
+-    0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,  /* 00002400    ".\._GPED" */
+-    0x50,0x54,0x32,0x14,0x2C,0x5F,0x45,0x4A,  /* 00002408    "PT2.,_EJ" */
+-    0x30,0x01,0x70,0x0A,0x13,0x5C,0x2E,0x5F,  /* 00002410    "0.p..\._" */
+-    0x47,0x50,0x45,0x44,0x50,0x54,0x31,0x70,  /* 00002418    "GPEDPT1p" */
+-    0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00002420    "..\._GPE" */
+-    0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E,  /* 00002428    "DPT2p.\." */
+-    0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x33,  /* 00002430    "_GPEPH13" */
+-    0x14,0x2B,0x5F,0x53,0x54,0x41,0x00,0x70,  /* 00002438    ".+_STA.p" */
+-    0x0A,0x13,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00002440    "..\._GPE" */
+-    0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C,  /* 00002448    "DPT1p..\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 00002450    "._GPEDPT" */
+-    0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00002458    "2.\._GPE" */
+-    0x50,0x48,0x31,0x33,0x5B,0x82,0x42,0x0B,  /* 00002460    "PH13[.B." */
+-    0x53,0x31,0x34,0x5F,0x08,0x5F,0x41,0x44,  /* 00002468    "S14_._AD" */
+-    0x52,0x0C,0x00,0x00,0x14,0x00,0x08,0x5F,  /* 00002470    "R......_" */
+-    0x53,0x55,0x4E,0x0A,0x14,0x14,0x20,0x5F,  /* 00002478    "SUN... _" */
+-    0x50,0x53,0x30,0x00,0x70,0x0A,0x14,0x5C,  /* 00002480    "PS0.p..\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 00002488    "._GPEDPT" */
+-    0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47,  /* 00002490    "1p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x20,  /* 00002498    "PEDPT2. " */
+-    0x5F,0x50,0x53,0x33,0x00,0x70,0x0A,0x14,  /* 000024A0    "_PS3.p.." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 000024A8    "\._GPEDP" */
+-    0x54,0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F,  /* 000024B0    "T1p..\._" */
+-    0x47,0x50,0x45,0x44,0x50,0x54,0x32,0x14,  /* 000024B8    "GPEDPT2." */
+-    0x2C,0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A,  /* 000024C0    ",_EJ0.p." */
+-    0x14,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,  /* 000024C8    ".\._GPED" */
+-    0x50,0x54,0x31,0x70,0x0A,0x88,0x5C,0x2E,  /* 000024D0    "PT1p..\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32,  /* 000024D8    "_GPEDPT2" */
+-    0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 000024E0    "p.\._GPE" */
+-    0x50,0x48,0x31,0x34,0x14,0x2B,0x5F,0x53,  /* 000024E8    "PH14.+_S" */
+-    0x54,0x41,0x00,0x70,0x0A,0x14,0x5C,0x2E,  /* 000024F0    "TA.p..\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31,  /* 000024F8    "_GPEDPT1" */
+-    0x70,0x0A,0x89,0x5C,0x2E,0x5F,0x47,0x50,  /* 00002500    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E,  /* 00002508    "EDPT2.\." */
+-    0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x34,  /* 00002510    "_GPEPH14" */
+-    0x5B,0x82,0x42,0x0B,0x53,0x31,0x35,0x5F,  /* 00002518    "[.B.S15_" */
+-    0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00,  /* 00002520    "._ADR..." */
+-    0x15,0x00,0x08,0x5F,0x53,0x55,0x4E,0x0A,  /* 00002528    "..._SUN." */
+-    0x15,0x14,0x20,0x5F,0x50,0x53,0x30,0x00,  /* 00002530    ".. _PS0." */
+-    0x70,0x0A,0x15,0x5C,0x2E,0x5F,0x47,0x50,  /* 00002538    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x80,  /* 00002540    "EDPT1p.." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 00002548    "\._GPEDP" */
+-    0x54,0x32,0x14,0x20,0x5F,0x50,0x53,0x33,  /* 00002550    "T2. _PS3" */
+-    0x00,0x70,0x0A,0x15,0x5C,0x2E,0x5F,0x47,  /* 00002558    ".p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x31,0x70,0x0A,  /* 00002560    "PEDPT1p." */
+-    0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,  /* 00002568    ".\._GPED" */
+-    0x50,0x54,0x32,0x14,0x2C,0x5F,0x45,0x4A,  /* 00002570    "PT2.,_EJ" */
+-    0x30,0x01,0x70,0x0A,0x15,0x5C,0x2E,0x5F,  /* 00002578    "0.p..\._" */
+-    0x47,0x50,0x45,0x44,0x50,0x54,0x31,0x70,  /* 00002580    "GPEDPT1p" */
+-    0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00002588    "..\._GPE" */
+-    0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E,  /* 00002590    "DPT2p.\." */
+-    0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x35,  /* 00002598    "_GPEPH15" */
+-    0x14,0x2B,0x5F,0x53,0x54,0x41,0x00,0x70,  /* 000025A0    ".+_STA.p" */
+-    0x0A,0x15,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 000025A8    "..\._GPE" */
+-    0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C,  /* 000025B0    "DPT1p..\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 000025B8    "._GPEDPT" */
+-    0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 000025C0    "2.\._GPE" */
+-    0x50,0x48,0x31,0x35,0x5B,0x82,0x42,0x0B,  /* 000025C8    "PH15[.B." */
+-    0x53,0x31,0x36,0x5F,0x08,0x5F,0x41,0x44,  /* 000025D0    "S16_._AD" */
+-    0x52,0x0C,0x00,0x00,0x16,0x00,0x08,0x5F,  /* 000025D8    "R......_" */
+-    0x53,0x55,0x4E,0x0A,0x16,0x14,0x20,0x5F,  /* 000025E0    "SUN... _" */
+-    0x50,0x53,0x30,0x00,0x70,0x0A,0x16,0x5C,  /* 000025E8    "PS0.p..\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 000025F0    "._GPEDPT" */
+-    0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47,  /* 000025F8    "1p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x20,  /* 00002600    "PEDPT2. " */
+-    0x5F,0x50,0x53,0x33,0x00,0x70,0x0A,0x16,  /* 00002608    "_PS3.p.." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 00002610    "\._GPEDP" */
+-    0x54,0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F,  /* 00002618    "T1p..\._" */
+-    0x47,0x50,0x45,0x44,0x50,0x54,0x32,0x14,  /* 00002620    "GPEDPT2." */
+-    0x2C,0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A,  /* 00002628    ",_EJ0.p." */
+-    0x16,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,  /* 00002630    ".\._GPED" */
+-    0x50,0x54,0x31,0x70,0x0A,0x88,0x5C,0x2E,  /* 00002638    "PT1p..\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32,  /* 00002640    "_GPEDPT2" */
+-    0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00002648    "p.\._GPE" */
+-    0x50,0x48,0x31,0x36,0x14,0x2B,0x5F,0x53,  /* 00002650    "PH16.+_S" */
+-    0x54,0x41,0x00,0x70,0x0A,0x16,0x5C,0x2E,  /* 00002658    "TA.p..\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31,  /* 00002660    "_GPEDPT1" */
+-    0x70,0x0A,0x89,0x5C,0x2E,0x5F,0x47,0x50,  /* 00002668    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E,  /* 00002670    "EDPT2.\." */
+-    0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x36,  /* 00002678    "_GPEPH16" */
+-    0x5B,0x82,0x42,0x0B,0x53,0x31,0x37,0x5F,  /* 00002680    "[.B.S17_" */
+-    0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00,  /* 00002688    "._ADR..." */
+-    0x17,0x00,0x08,0x5F,0x53,0x55,0x4E,0x0A,  /* 00002690    "..._SUN." */
+-    0x17,0x14,0x20,0x5F,0x50,0x53,0x30,0x00,  /* 00002698    ".. _PS0." */
+-    0x70,0x0A,0x17,0x5C,0x2E,0x5F,0x47,0x50,  /* 000026A0    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x80,  /* 000026A8    "EDPT1p.." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 000026B0    "\._GPEDP" */
+-    0x54,0x32,0x14,0x20,0x5F,0x50,0x53,0x33,  /* 000026B8    "T2. _PS3" */
+-    0x00,0x70,0x0A,0x17,0x5C,0x2E,0x5F,0x47,  /* 000026C0    ".p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x31,0x70,0x0A,  /* 000026C8    "PEDPT1p." */
+-    0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,  /* 000026D0    ".\._GPED" */
+-    0x50,0x54,0x32,0x14,0x2C,0x5F,0x45,0x4A,  /* 000026D8    "PT2.,_EJ" */
+-    0x30,0x01,0x70,0x0A,0x17,0x5C,0x2E,0x5F,  /* 000026E0    "0.p..\._" */
+-    0x47,0x50,0x45,0x44,0x50,0x54,0x31,0x70,  /* 000026E8    "GPEDPT1p" */
+-    0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 000026F0    "..\._GPE" */
+-    0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E,  /* 000026F8    "DPT2p.\." */
+-    0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x37,  /* 00002700    "_GPEPH17" */
+-    0x14,0x2B,0x5F,0x53,0x54,0x41,0x00,0x70,  /* 00002708    ".+_STA.p" */
+-    0x0A,0x17,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00002710    "..\._GPE" */
+-    0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C,  /* 00002718    "DPT1p..\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 00002720    "._GPEDPT" */
+-    0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00002728    "2.\._GPE" */
+-    0x50,0x48,0x31,0x37,0x5B,0x82,0x42,0x0B,  /* 00002730    "PH17[.B." */
+-    0x53,0x31,0x38,0x5F,0x08,0x5F,0x41,0x44,  /* 00002738    "S18_._AD" */
+-    0x52,0x0C,0x00,0x00,0x18,0x00,0x08,0x5F,  /* 00002740    "R......_" */
+-    0x53,0x55,0x4E,0x0A,0x18,0x14,0x20,0x5F,  /* 00002748    "SUN... _" */
+-    0x50,0x53,0x30,0x00,0x70,0x0A,0x18,0x5C,  /* 00002750    "PS0.p..\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 00002758    "._GPEDPT" */
+-    0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47,  /* 00002760    "1p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x20,  /* 00002768    "PEDPT2. " */
+-    0x5F,0x50,0x53,0x33,0x00,0x70,0x0A,0x18,  /* 00002770    "_PS3.p.." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 00002778    "\._GPEDP" */
+-    0x54,0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F,  /* 00002780    "T1p..\._" */
+-    0x47,0x50,0x45,0x44,0x50,0x54,0x32,0x14,  /* 00002788    "GPEDPT2." */
+-    0x2C,0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A,  /* 00002790    ",_EJ0.p." */
+-    0x18,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,  /* 00002798    ".\._GPED" */
+-    0x50,0x54,0x31,0x70,0x0A,0x88,0x5C,0x2E,  /* 000027A0    "PT1p..\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32,  /* 000027A8    "_GPEDPT2" */
+-    0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 000027B0    "p.\._GPE" */
+-    0x50,0x48,0x31,0x38,0x14,0x2B,0x5F,0x53,  /* 000027B8    "PH18.+_S" */
+-    0x54,0x41,0x00,0x70,0x0A,0x18,0x5C,0x2E,  /* 000027C0    "TA.p..\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31,  /* 000027C8    "_GPEDPT1" */
+-    0x70,0x0A,0x89,0x5C,0x2E,0x5F,0x47,0x50,  /* 000027D0    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E,  /* 000027D8    "EDPT2.\." */
+-    0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x38,  /* 000027E0    "_GPEPH18" */
+-    0x5B,0x82,0x42,0x0B,0x53,0x31,0x39,0x5F,  /* 000027E8    "[.B.S19_" */
+-    0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00,  /* 000027F0    "._ADR..." */
+-    0x19,0x00,0x08,0x5F,0x53,0x55,0x4E,0x0A,  /* 000027F8    "..._SUN." */
+-    0x19,0x14,0x20,0x5F,0x50,0x53,0x30,0x00,  /* 00002800    ".. _PS0." */
+-    0x70,0x0A,0x19,0x5C,0x2E,0x5F,0x47,0x50,  /* 00002808    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x80,  /* 00002810    "EDPT1p.." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 00002818    "\._GPEDP" */
+-    0x54,0x32,0x14,0x20,0x5F,0x50,0x53,0x33,  /* 00002820    "T2. _PS3" */
+-    0x00,0x70,0x0A,0x19,0x5C,0x2E,0x5F,0x47,  /* 00002828    ".p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x31,0x70,0x0A,  /* 00002830    "PEDPT1p." */
+-    0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,  /* 00002838    ".\._GPED" */
+-    0x50,0x54,0x32,0x14,0x2C,0x5F,0x45,0x4A,  /* 00002840    "PT2.,_EJ" */
+-    0x30,0x01,0x70,0x0A,0x19,0x5C,0x2E,0x5F,  /* 00002848    "0.p..\._" */
+-    0x47,0x50,0x45,0x44,0x50,0x54,0x31,0x70,  /* 00002850    "GPEDPT1p" */
+-    0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00002858    "..\._GPE" */
+-    0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E,  /* 00002860    "DPT2p.\." */
+-    0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x39,  /* 00002868    "_GPEPH19" */
+-    0x14,0x2B,0x5F,0x53,0x54,0x41,0x00,0x70,  /* 00002870    ".+_STA.p" */
+-    0x0A,0x19,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00002878    "..\._GPE" */
+-    0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C,  /* 00002880    "DPT1p..\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 00002888    "._GPEDPT" */
+-    0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00002890    "2.\._GPE" */
+-    0x50,0x48,0x31,0x39,0x5B,0x82,0x42,0x0B,  /* 00002898    "PH19[.B." */
+-    0x53,0x31,0x41,0x5F,0x08,0x5F,0x41,0x44,  /* 000028A0    "S1A_._AD" */
+-    0x52,0x0C,0x00,0x00,0x1A,0x00,0x08,0x5F,  /* 000028A8    "R......_" */
+-    0x53,0x55,0x4E,0x0A,0x1A,0x14,0x20,0x5F,  /* 000028B0    "SUN... _" */
+-    0x50,0x53,0x30,0x00,0x70,0x0A,0x1A,0x5C,  /* 000028B8    "PS0.p..\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 000028C0    "._GPEDPT" */
+-    0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47,  /* 000028C8    "1p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x20,  /* 000028D0    "PEDPT2. " */
+-    0x5F,0x50,0x53,0x33,0x00,0x70,0x0A,0x1A,  /* 000028D8    "_PS3.p.." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 000028E0    "\._GPEDP" */
+-    0x54,0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F,  /* 000028E8    "T1p..\._" */
+-    0x47,0x50,0x45,0x44,0x50,0x54,0x32,0x14,  /* 000028F0    "GPEDPT2." */
+-    0x2C,0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A,  /* 000028F8    ",_EJ0.p." */
+-    0x1A,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,  /* 00002900    ".\._GPED" */
+-    0x50,0x54,0x31,0x70,0x0A,0x88,0x5C,0x2E,  /* 00002908    "PT1p..\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32,  /* 00002910    "_GPEDPT2" */
+-    0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00002918    "p.\._GPE" */
+-    0x50,0x48,0x31,0x41,0x14,0x2B,0x5F,0x53,  /* 00002920    "PH1A.+_S" */
+-    0x54,0x41,0x00,0x70,0x0A,0x1A,0x5C,0x2E,  /* 00002928    "TA.p..\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31,  /* 00002930    "_GPEDPT1" */
+-    0x70,0x0A,0x89,0x5C,0x2E,0x5F,0x47,0x50,  /* 00002938    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E,  /* 00002940    "EDPT2.\." */
+-    0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x41,  /* 00002948    "_GPEPH1A" */
+-    0x5B,0x82,0x42,0x0B,0x53,0x31,0x42,0x5F,  /* 00002950    "[.B.S1B_" */
+-    0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00,  /* 00002958    "._ADR..." */
+-    0x1B,0x00,0x08,0x5F,0x53,0x55,0x4E,0x0A,  /* 00002960    "..._SUN." */
+-    0x1B,0x14,0x20,0x5F,0x50,0x53,0x30,0x00,  /* 00002968    ".. _PS0." */
+-    0x70,0x0A,0x1B,0x5C,0x2E,0x5F,0x47,0x50,  /* 00002970    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x80,  /* 00002978    "EDPT1p.." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 00002980    "\._GPEDP" */
+-    0x54,0x32,0x14,0x20,0x5F,0x50,0x53,0x33,  /* 00002988    "T2. _PS3" */
+-    0x00,0x70,0x0A,0x1B,0x5C,0x2E,0x5F,0x47,  /* 00002990    ".p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x31,0x70,0x0A,  /* 00002998    "PEDPT1p." */
+-    0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,  /* 000029A0    ".\._GPED" */
+-    0x50,0x54,0x32,0x14,0x2C,0x5F,0x45,0x4A,  /* 000029A8    "PT2.,_EJ" */
+-    0x30,0x01,0x70,0x0A,0x1B,0x5C,0x2E,0x5F,  /* 000029B0    "0.p..\._" */
+-    0x47,0x50,0x45,0x44,0x50,0x54,0x31,0x70,  /* 000029B8    "GPEDPT1p" */
+-    0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 000029C0    "..\._GPE" */
+-    0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E,  /* 000029C8    "DPT2p.\." */
+-    0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x42,  /* 000029D0    "_GPEPH1B" */
+-    0x14,0x2B,0x5F,0x53,0x54,0x41,0x00,0x70,  /* 000029D8    ".+_STA.p" */
+-    0x0A,0x1B,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 000029E0    "..\._GPE" */
+-    0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C,  /* 000029E8    "DPT1p..\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 000029F0    "._GPEDPT" */
+-    0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 000029F8    "2.\._GPE" */
+-    0x50,0x48,0x31,0x42,0x5B,0x82,0x42,0x0B,  /* 00002A00    "PH1B[.B." */
+-    0x53,0x31,0x43,0x5F,0x08,0x5F,0x41,0x44,  /* 00002A08    "S1C_._AD" */
+-    0x52,0x0C,0x00,0x00,0x1C,0x00,0x08,0x5F,  /* 00002A10    "R......_" */
+-    0x53,0x55,0x4E,0x0A,0x1C,0x14,0x20,0x5F,  /* 00002A18    "SUN... _" */
+-    0x50,0x53,0x30,0x00,0x70,0x0A,0x1C,0x5C,  /* 00002A20    "PS0.p..\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 00002A28    "._GPEDPT" */
+-    0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47,  /* 00002A30    "1p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x20,  /* 00002A38    "PEDPT2. " */
+-    0x5F,0x50,0x53,0x33,0x00,0x70,0x0A,0x1C,  /* 00002A40    "_PS3.p.." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 00002A48    "\._GPEDP" */
+-    0x54,0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F,  /* 00002A50    "T1p..\._" */
+-    0x47,0x50,0x45,0x44,0x50,0x54,0x32,0x14,  /* 00002A58    "GPEDPT2." */
+-    0x2C,0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A,  /* 00002A60    ",_EJ0.p." */
+-    0x1C,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,  /* 00002A68    ".\._GPED" */
+-    0x50,0x54,0x31,0x70,0x0A,0x88,0x5C,0x2E,  /* 00002A70    "PT1p..\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32,  /* 00002A78    "_GPEDPT2" */
+-    0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00002A80    "p.\._GPE" */
+-    0x50,0x48,0x31,0x43,0x14,0x2B,0x5F,0x53,  /* 00002A88    "PH1C.+_S" */
+-    0x54,0x41,0x00,0x70,0x0A,0x1C,0x5C,0x2E,  /* 00002A90    "TA.p..\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31,  /* 00002A98    "_GPEDPT1" */
+-    0x70,0x0A,0x89,0x5C,0x2E,0x5F,0x47,0x50,  /* 00002AA0    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E,  /* 00002AA8    "EDPT2.\." */
+-    0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x43,  /* 00002AB0    "_GPEPH1C" */
+-    0x5B,0x82,0x42,0x0B,0x53,0x31,0x44,0x5F,  /* 00002AB8    "[.B.S1D_" */
+-    0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00,  /* 00002AC0    "._ADR..." */
+-    0x1D,0x00,0x08,0x5F,0x53,0x55,0x4E,0x0A,  /* 00002AC8    "..._SUN." */
+-    0x1D,0x14,0x20,0x5F,0x50,0x53,0x30,0x00,  /* 00002AD0    ".. _PS0." */
+-    0x70,0x0A,0x1D,0x5C,0x2E,0x5F,0x47,0x50,  /* 00002AD8    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x80,  /* 00002AE0    "EDPT1p.." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 00002AE8    "\._GPEDP" */
+-    0x54,0x32,0x14,0x20,0x5F,0x50,0x53,0x33,  /* 00002AF0    "T2. _PS3" */
+-    0x00,0x70,0x0A,0x1D,0x5C,0x2E,0x5F,0x47,  /* 00002AF8    ".p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x31,0x70,0x0A,  /* 00002B00    "PEDPT1p." */
+-    0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,  /* 00002B08    ".\._GPED" */
+-    0x50,0x54,0x32,0x14,0x2C,0x5F,0x45,0x4A,  /* 00002B10    "PT2.,_EJ" */
+-    0x30,0x01,0x70,0x0A,0x1D,0x5C,0x2E,0x5F,  /* 00002B18    "0.p..\._" */
+-    0x47,0x50,0x45,0x44,0x50,0x54,0x31,0x70,  /* 00002B20    "GPEDPT1p" */
+-    0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00002B28    "..\._GPE" */
+-    0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E,  /* 00002B30    "DPT2p.\." */
+-    0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x44,  /* 00002B38    "_GPEPH1D" */
+-    0x14,0x2B,0x5F,0x53,0x54,0x41,0x00,0x70,  /* 00002B40    ".+_STA.p" */
+-    0x0A,0x1D,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00002B48    "..\._GPE" */
+-    0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C,  /* 00002B50    "DPT1p..\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 00002B58    "._GPEDPT" */
+-    0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00002B60    "2.\._GPE" */
+-    0x50,0x48,0x31,0x44,0x5B,0x82,0x42,0x0B,  /* 00002B68    "PH1D[.B." */
+-    0x53,0x31,0x45,0x5F,0x08,0x5F,0x41,0x44,  /* 00002B70    "S1E_._AD" */
+-    0x52,0x0C,0x00,0x00,0x1E,0x00,0x08,0x5F,  /* 00002B78    "R......_" */
+-    0x53,0x55,0x4E,0x0A,0x1E,0x14,0x20,0x5F,  /* 00002B80    "SUN... _" */
+-    0x50,0x53,0x30,0x00,0x70,0x0A,0x1E,0x5C,  /* 00002B88    "PS0.p..\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 00002B90    "._GPEDPT" */
+-    0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47,  /* 00002B98    "1p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x20,  /* 00002BA0    "PEDPT2. " */
+-    0x5F,0x50,0x53,0x33,0x00,0x70,0x0A,0x1E,  /* 00002BA8    "_PS3.p.." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 00002BB0    "\._GPEDP" */
+-    0x54,0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F,  /* 00002BB8    "T1p..\._" */
+-    0x47,0x50,0x45,0x44,0x50,0x54,0x32,0x14,  /* 00002BC0    "GPEDPT2." */
+-    0x2C,0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A,  /* 00002BC8    ",_EJ0.p." */
+-    0x1E,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,  /* 00002BD0    ".\._GPED" */
+-    0x50,0x54,0x31,0x70,0x0A,0x88,0x5C,0x2E,  /* 00002BD8    "PT1p..\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32,  /* 00002BE0    "_GPEDPT2" */
+-    0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00002BE8    "p.\._GPE" */
+-    0x50,0x48,0x31,0x45,0x14,0x2B,0x5F,0x53,  /* 00002BF0    "PH1E.+_S" */
+-    0x54,0x41,0x00,0x70,0x0A,0x1E,0x5C,0x2E,  /* 00002BF8    "TA.p..\." */
+-    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31,  /* 00002C00    "_GPEDPT1" */
+-    0x70,0x0A,0x89,0x5C,0x2E,0x5F,0x47,0x50,  /* 00002C08    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E,  /* 00002C10    "EDPT2.\." */
+-    0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x45,  /* 00002C18    "_GPEPH1E" */
+-    0x5B,0x82,0x42,0x0B,0x53,0x31,0x46,0x5F,  /* 00002C20    "[.B.S1F_" */
+-    0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00,  /* 00002C28    "._ADR..." */
+-    0x1F,0x00,0x08,0x5F,0x53,0x55,0x4E,0x0A,  /* 00002C30    "..._SUN." */
+-    0x1F,0x14,0x20,0x5F,0x50,0x53,0x30,0x00,  /* 00002C38    ".. _PS0." */
+-    0x70,0x0A,0x1F,0x5C,0x2E,0x5F,0x47,0x50,  /* 00002C40    "p..\._GP" */
+-    0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x80,  /* 00002C48    "EDPT1p.." */
+-    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 00002C50    "\._GPEDP" */
+-    0x54,0x32,0x14,0x20,0x5F,0x50,0x53,0x33,  /* 00002C58    "T2. _PS3" */
+-    0x00,0x70,0x0A,0x1F,0x5C,0x2E,0x5F,0x47,  /* 00002C60    ".p..\._G" */
+-    0x50,0x45,0x44,0x50,0x54,0x31,0x70,0x0A,  /* 00002C68    "PEDPT1p." */
+-    0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,  /* 00002C70    ".\._GPED" */
+-    0x50,0x54,0x32,0x14,0x2C,0x5F,0x45,0x4A,  /* 00002C78    "PT2.,_EJ" */
+-    0x30,0x01,0x70,0x0A,0x1F,0x5C,0x2E,0x5F,  /* 00002C80    "0.p..\._" */
+-    0x47,0x50,0x45,0x44,0x50,0x54,0x31,0x70,  /* 00002C88    "GPEDPT1p" */
+-    0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00002C90    "..\._GPE" */
+-    0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E,  /* 00002C98    "DPT2p.\." */
+-    0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x46,  /* 00002CA0    "_GPEPH1F" */
+-    0x14,0x2B,0x5F,0x53,0x54,0x41,0x00,0x70,  /* 00002CA8    ".+_STA.p" */
+-    0x0A,0x1F,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00002CB0    "..\._GPE" */
+-    0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C,  /* 00002CB8    "DPT1p..\" */
+-    0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54,  /* 00002CC0    "._GPEDPT" */
+-    0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00002CC8    "2.\._GPE" */
+-    0x50,0x48,0x31,0x46,0x10,0x4D,0x52,0x5F,  /* 00002CD0    "PH1F.MR_" */
+-    0x47,0x50,0x45,0x5B,0x80,0x50,0x48,0x50,  /* 00002CD8    "GPE[.PHP" */
+-    0x5F,0x01,0x0B,0xC0,0x10,0x0A,0x22,0x5B,  /* 00002CE0    "_....."[" */
+-    0x81,0x41,0x0B,0x50,0x48,0x50,0x5F,0x01,  /* 00002CE8    ".A.PHP_." */
+-    0x50,0x53,0x54,0x41,0x08,0x50,0x53,0x54,  /* 00002CF0    "PSTA.PST" */
+-    0x42,0x08,0x50,0x48,0x30,0x30,0x08,0x50,  /* 00002CF8    "B.PH00.P" */
+-    0x48,0x30,0x31,0x08,0x50,0x48,0x30,0x32,  /* 00002D00    "H01.PH02" */
+-    0x08,0x50,0x48,0x30,0x33,0x08,0x50,0x48,  /* 00002D08    ".PH03.PH" */
+-    0x30,0x34,0x08,0x50,0x48,0x30,0x35,0x08,  /* 00002D10    "04.PH05." */
+-    0x50,0x48,0x30,0x36,0x08,0x50,0x48,0x30,  /* 00002D18    "PH06.PH0" */
+-    0x37,0x08,0x50,0x48,0x30,0x38,0x08,0x50,  /* 00002D20    "7.PH08.P" */
+-    0x48,0x30,0x39,0x08,0x50,0x48,0x30,0x41,  /* 00002D28    "H09.PH0A" */
+-    0x08,0x50,0x48,0x30,0x42,0x08,0x50,0x48,  /* 00002D30    ".PH0B.PH" */
+-    0x30,0x43,0x08,0x50,0x48,0x30,0x44,0x08,  /* 00002D38    "0C.PH0D." */
+-    0x50,0x48,0x30,0x45,0x08,0x50,0x48,0x30,  /* 00002D40    "PH0E.PH0" */
+-    0x46,0x08,0x50,0x48,0x31,0x30,0x08,0x50,  /* 00002D48    "F.PH10.P" */
+-    0x48,0x31,0x31,0x08,0x50,0x48,0x31,0x32,  /* 00002D50    "H11.PH12" */
+-    0x08,0x50,0x48,0x31,0x33,0x08,0x50,0x48,  /* 00002D58    ".PH13.PH" */
+-    0x31,0x34,0x08,0x50,0x48,0x31,0x35,0x08,  /* 00002D60    "14.PH15." */
+-    0x50,0x48,0x31,0x36,0x08,0x50,0x48,0x31,  /* 00002D68    "PH16.PH1" */
+-    0x37,0x08,0x50,0x48,0x31,0x38,0x08,0x50,  /* 00002D70    "7.PH18.P" */
+-    0x48,0x31,0x39,0x08,0x50,0x48,0x31,0x41,  /* 00002D78    "H19.PH1A" */
+-    0x08,0x50,0x48,0x31,0x42,0x08,0x50,0x48,  /* 00002D80    ".PH1B.PH" */
+-    0x31,0x43,0x08,0x50,0x48,0x31,0x44,0x08,  /* 00002D88    "1C.PH1D." */
+-    0x50,0x48,0x31,0x45,0x08,0x50,0x48,0x31,  /* 00002D90    "PH1E.PH1" */
+-    0x46,0x08,0x5B,0x80,0x44,0x47,0x31,0x5F,  /* 00002D98    "F.[.DG1_" */
+-    0x01,0x0B,0x44,0xB0,0x0A,0x04,0x5B,0x81,  /* 00002DA0    "..D...[." */
+-    0x10,0x44,0x47,0x31,0x5F,0x01,0x44,0x50,  /* 00002DA8    ".DG1_.DP" */
+-    0x54,0x31,0x08,0x44,0x50,0x54,0x32,0x08,  /* 00002DB0    "T1.DPT2." */
+-    0x14,0x49,0x44,0x5F,0x4C,0x30,0x33,0x08,  /* 00002DB8    ".ID_L03." */
+-    0x08,0x5F,0x54,0x5F,0x30,0x00,0x08,0x53,  /* 00002DC0    "._T_0..S" */
+-    0x4C,0x54,0x5F,0x00,0x08,0x45,0x56,0x54,  /* 00002DC8    "LT_..EVT" */
+-    0x5F,0x00,0x70,0x50,0x53,0x54,0x41,0x61,  /* 00002DD0    "_.pPSTAa" */
+-    0x7B,0x61,0x0A,0x0F,0x45,0x56,0x54,0x5F,  /* 00002DD8    "{a..EVT_" */
+-    0x70,0x50,0x53,0x54,0x42,0x61,0x7B,0x61,  /* 00002DE0    "pPSTBa{a" */
+-    0x0A,0xFF,0x53,0x4C,0x54,0x5F,0x70,0x53,  /* 00002DE8    "..SLT_pS" */
+-    0x4C,0x54,0x5F,0x44,0x50,0x54,0x31,0x70,  /* 00002DF0    "LT_DPT1p" */
+-    0x45,0x56,0x54,0x5F,0x44,0x50,0x54,0x32,  /* 00002DF8    "EVT_DPT2" */
+-    0x70,0x53,0x4C,0x54,0x5F,0x5F,0x54,0x5F,  /* 00002E00    "pSLT__T_" */
+-    0x30,0xA0,0x1B,0x93,0x5F,0x54,0x5F,0x30,  /* 00002E08    "0..._T_0" */
+-    0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,  /* 00002E10    "..\/._SB" */
+-    0x5F,0x50,0x43,0x49,0x30,0x53,0x30,0x30,  /* 00002E18    "_PCI0S00" */
+-    0x5F,0x45,0x56,0x54,0x5F,0xA1,0x4C,0x3D,  /* 00002E20    "_EVT_.L=" */
+-    0xA0,0x1B,0x93,0x5F,0x54,0x5F,0x30,0x01,  /* 00002E28    "..._T_0." */
+-    0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,  /* 00002E30    ".\/._SB_" */
+-    0x50,0x43,0x49,0x30,0x53,0x30,0x31,0x5F,  /* 00002E38    "PCI0S01_" */
+-    0x45,0x56,0x54,0x5F,0xA1,0x4D,0x3B,0xA0,  /* 00002E40    "EVT_.M;." */
+-    0x1C,0x93,0x5F,0x54,0x5F,0x30,0x0A,0x02,  /* 00002E48    ".._T_0.." */
+-    0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,  /* 00002E50    ".\/._SB_" */
+-    0x50,0x43,0x49,0x30,0x53,0x30,0x32,0x5F,  /* 00002E58    "PCI0S02_" */
+-    0x45,0x56,0x54,0x5F,0xA1,0x4D,0x39,0xA0,  /* 00002E60    "EVT_.M9." */
+-    0x1C,0x93,0x5F,0x54,0x5F,0x30,0x0A,0x03,  /* 00002E68    ".._T_0.." */
+-    0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,  /* 00002E70    ".\/._SB_" */
+-    0x50,0x43,0x49,0x30,0x53,0x30,0x33,0x5F,  /* 00002E78    "PCI0S03_" */
+-    0x45,0x56,0x54,0x5F,0xA1,0x4D,0x37,0xA0,  /* 00002E80    "EVT_.M7." */
+-    0x1C,0x93,0x5F,0x54,0x5F,0x30,0x0A,0x04,  /* 00002E88    ".._T_0.." */
+-    0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,  /* 00002E90    ".\/._SB_" */
+-    0x50,0x43,0x49,0x30,0x53,0x30,0x34,0x5F,  /* 00002E98    "PCI0S04_" */
+-    0x45,0x56,0x54,0x5F,0xA1,0x4D,0x35,0xA0,  /* 00002EA0    "EVT_.M5." */
+-    0x1C,0x93,0x5F,0x54,0x5F,0x30,0x0A,0x05,  /* 00002EA8    ".._T_0.." */
+-    0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,  /* 00002EB0    ".\/._SB_" */
+-    0x50,0x43,0x49,0x30,0x53,0x30,0x35,0x5F,  /* 00002EB8    "PCI0S05_" */
+-    0x45,0x56,0x54,0x5F,0xA1,0x4D,0x33,0xA0,  /* 00002EC0    "EVT_.M3." */
+-    0x1C,0x93,0x5F,0x54,0x5F,0x30,0x0A,0x06,  /* 00002EC8    ".._T_0.." */
+-    0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,  /* 00002ED0    ".\/._SB_" */
+-    0x50,0x43,0x49,0x30,0x53,0x30,0x36,0x5F,  /* 00002ED8    "PCI0S06_" */
+-    0x45,0x56,0x54,0x5F,0xA1,0x4D,0x31,0xA0,  /* 00002EE0    "EVT_.M1." */
+-    0x1C,0x93,0x5F,0x54,0x5F,0x30,0x0A,0x07,  /* 00002EE8    ".._T_0.." */
+-    0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,  /* 00002EF0    ".\/._SB_" */
+-    0x50,0x43,0x49,0x30,0x53,0x30,0x37,0x5F,  /* 00002EF8    "PCI0S07_" */
+-    0x45,0x56,0x54,0x5F,0xA1,0x4D,0x2F,0xA0,  /* 00002F00    "EVT_.M/." */
+-    0x1C,0x93,0x5F,0x54,0x5F,0x30,0x0A,0x08,  /* 00002F08    ".._T_0.." */
+-    0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,  /* 00002F10    ".\/._SB_" */
+-    0x50,0x43,0x49,0x30,0x53,0x30,0x38,0x5F,  /* 00002F18    "PCI0S08_" */
+-    0x45,0x56,0x54,0x5F,0xA1,0x4D,0x2D,0xA0,  /* 00002F20    "EVT_.M-." */
+-    0x1C,0x93,0x5F,0x54,0x5F,0x30,0x0A,0x09,  /* 00002F28    ".._T_0.." */
+-    0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,  /* 00002F30    ".\/._SB_" */
+-    0x50,0x43,0x49,0x30,0x53,0x30,0x39,0x5F,  /* 00002F38    "PCI0S09_" */
+-    0x45,0x56,0x54,0x5F,0xA1,0x4D,0x2B,0xA0,  /* 00002F40    "EVT_.M+." */
+-    0x1C,0x93,0x5F,0x54,0x5F,0x30,0x0A,0x0A,  /* 00002F48    ".._T_0.." */
+-    0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,  /* 00002F50    ".\/._SB_" */
+-    0x50,0x43,0x49,0x30,0x53,0x30,0x41,0x5F,  /* 00002F58    "PCI0S0A_" */
+-    0x45,0x56,0x54,0x5F,0xA1,0x4D,0x29,0xA0,  /* 00002F60    "EVT_.M)." */
+-    0x1C,0x93,0x5F,0x54,0x5F,0x30,0x0A,0x0B,  /* 00002F68    ".._T_0.." */
+-    0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,  /* 00002F70    ".\/._SB_" */
+-    0x50,0x43,0x49,0x30,0x53,0x30,0x42,0x5F,  /* 00002F78    "PCI0S0B_" */
+-    0x45,0x56,0x54,0x5F,0xA1,0x4D,0x27,0xA0,  /* 00002F80    "EVT_.M'." */
+-    0x1C,0x93,0x5F,0x54,0x5F,0x30,0x0A,0x0C,  /* 00002F88    ".._T_0.." */
+-    0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,  /* 00002F90    ".\/._SB_" */
+-    0x50,0x43,0x49,0x30,0x53,0x30,0x43,0x5F,  /* 00002F98    "PCI0S0C_" */
+-    0x45,0x56,0x54,0x5F,0xA1,0x4D,0x25,0xA0,  /* 00002FA0    "EVT_.M%." */
+-    0x1C,0x93,0x5F,0x54,0x5F,0x30,0x0A,0x0D,  /* 00002FA8    ".._T_0.." */
+-    0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,  /* 00002FB0    ".\/._SB_" */
+-    0x50,0x43,0x49,0x30,0x53,0x30,0x44,0x5F,  /* 00002FB8    "PCI0S0D_" */
+-    0x45,0x56,0x54,0x5F,0xA1,0x4D,0x23,0xA0,  /* 00002FC0    "EVT_.M#." */
+-    0x1C,0x93,0x5F,0x54,0x5F,0x30,0x0A,0x0E,  /* 00002FC8    ".._T_0.." */
+-    0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,  /* 00002FD0    ".\/._SB_" */
+-    0x50,0x43,0x49,0x30,0x53,0x30,0x45,0x5F,  /* 00002FD8    "PCI0S0E_" */
+-    0x45,0x56,0x54,0x5F,0xA1,0x4D,0x21,0xA0,  /* 00002FE0    "EVT_.M!." */
+-    0x1C,0x93,0x5F,0x54,0x5F,0x30,0x0A,0x0F,  /* 00002FE8    ".._T_0.." */
+-    0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,  /* 00002FF0    ".\/._SB_" */
+-    0x50,0x43,0x49,0x30,0x53,0x30,0x46,0x5F,  /* 00002FF8    "PCI0S0F_" */
+-    0x45,0x56,0x54,0x5F,0xA1,0x4D,0x1F,0xA0,  /* 00003000    "EVT_.M.." */
+-    0x1C,0x93,0x5F,0x54,0x5F,0x30,0x0A,0x10,  /* 00003008    ".._T_0.." */
+-    0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,  /* 00003010    ".\/._SB_" */
+-    0x50,0x43,0x49,0x30,0x53,0x31,0x30,0x5F,  /* 00003018    "PCI0S10_" */
+-    0x45,0x56,0x54,0x5F,0xA1,0x4D,0x1D,0xA0,  /* 00003020    "EVT_.M.." */
+-    0x1C,0x93,0x5F,0x54,0x5F,0x30,0x0A,0x11,  /* 00003028    ".._T_0.." */
+-    0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,  /* 00003030    ".\/._SB_" */
+-    0x50,0x43,0x49,0x30,0x53,0x31,0x31,0x5F,  /* 00003038    "PCI0S11_" */
+-    0x45,0x56,0x54,0x5F,0xA1,0x4D,0x1B,0xA0,  /* 00003040    "EVT_.M.." */
+-    0x1C,0x93,0x5F,0x54,0x5F,0x30,0x0A,0x12,  /* 00003048    ".._T_0.." */
+-    0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,  /* 00003050    ".\/._SB_" */
+-    0x50,0x43,0x49,0x30,0x53,0x31,0x32,0x5F,  /* 00003058    "PCI0S12_" */
+-    0x45,0x56,0x54,0x5F,0xA1,0x4D,0x19,0xA0,  /* 00003060    "EVT_.M.." */
+-    0x1C,0x93,0x5F,0x54,0x5F,0x30,0x0A,0x13,  /* 00003068    ".._T_0.." */
+-    0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,  /* 00003070    ".\/._SB_" */
+-    0x50,0x43,0x49,0x30,0x53,0x31,0x33,0x5F,  /* 00003078    "PCI0S13_" */
+-    0x45,0x56,0x54,0x5F,0xA1,0x4D,0x17,0xA0,  /* 00003080    "EVT_.M.." */
+-    0x1C,0x93,0x5F,0x54,0x5F,0x30,0x0A,0x14,  /* 00003088    ".._T_0.." */
+-    0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,  /* 00003090    ".\/._SB_" */
+-    0x50,0x43,0x49,0x30,0x53,0x31,0x34,0x5F,  /* 00003098    "PCI0S14_" */
+-    0x45,0x56,0x54,0x5F,0xA1,0x4D,0x15,0xA0,  /* 000030A0    "EVT_.M.." */
+-    0x1C,0x93,0x5F,0x54,0x5F,0x30,0x0A,0x15,  /* 000030A8    ".._T_0.." */
+-    0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,  /* 000030B0    ".\/._SB_" */
+-    0x50,0x43,0x49,0x30,0x53,0x31,0x35,0x5F,  /* 000030B8    "PCI0S15_" */
+-    0x45,0x56,0x54,0x5F,0xA1,0x4D,0x13,0xA0,  /* 000030C0    "EVT_.M.." */
+-    0x1C,0x93,0x5F,0x54,0x5F,0x30,0x0A,0x16,  /* 000030C8    ".._T_0.." */
+-    0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,  /* 000030D0    ".\/._SB_" */
+-    0x50,0x43,0x49,0x30,0x53,0x31,0x36,0x5F,  /* 000030D8    "PCI0S16_" */
+-    0x45,0x56,0x54,0x5F,0xA1,0x4D,0x11,0xA0,  /* 000030E0    "EVT_.M.." */
+-    0x1C,0x93,0x5F,0x54,0x5F,0x30,0x0A,0x17,  /* 000030E8    ".._T_0.." */
+-    0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,  /* 000030F0    ".\/._SB_" */
+-    0x50,0x43,0x49,0x30,0x53,0x31,0x37,0x5F,  /* 000030F8    "PCI0S17_" */
+-    0x45,0x56,0x54,0x5F,0xA1,0x4D,0x0F,0xA0,  /* 00003100    "EVT_.M.." */
+-    0x1C,0x93,0x5F,0x54,0x5F,0x30,0x0A,0x18,  /* 00003108    ".._T_0.." */
+-    0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,  /* 00003110    ".\/._SB_" */
+-    0x50,0x43,0x49,0x30,0x53,0x31,0x38,0x5F,  /* 00003118    "PCI0S18_" */
+-    0x45,0x56,0x54,0x5F,0xA1,0x4D,0x0D,0xA0,  /* 00003120    "EVT_.M.." */
+-    0x1C,0x93,0x5F,0x54,0x5F,0x30,0x0A,0x19,  /* 00003128    ".._T_0.." */
+-    0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,  /* 00003130    ".\/._SB_" */
+-    0x50,0x43,0x49,0x30,0x53,0x31,0x39,0x5F,  /* 00003138    "PCI0S19_" */
+-    0x45,0x56,0x54,0x5F,0xA1,0x4D,0x0B,0xA0,  /* 00003140    "EVT_.M.." */
+-    0x1C,0x93,0x5F,0x54,0x5F,0x30,0x0A,0x1A,  /* 00003148    ".._T_0.." */
+-    0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,  /* 00003150    ".\/._SB_" */
+-    0x50,0x43,0x49,0x30,0x53,0x31,0x41,0x5F,  /* 00003158    "PCI0S1A_" */
+-    0x45,0x56,0x54,0x5F,0xA1,0x4D,0x09,0xA0,  /* 00003160    "EVT_.M.." */
+-    0x1C,0x93,0x5F,0x54,0x5F,0x30,0x0A,0x1B,  /* 00003168    ".._T_0.." */
+-    0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,  /* 00003170    ".\/._SB_" */
+-    0x50,0x43,0x49,0x30,0x53,0x31,0x42,0x5F,  /* 00003178    "PCI0S1B_" */
+-    0x45,0x56,0x54,0x5F,0xA1,0x4D,0x07,0xA0,  /* 00003180    "EVT_.M.." */
+-    0x1C,0x93,0x5F,0x54,0x5F,0x30,0x0A,0x1C,  /* 00003188    ".._T_0.." */
+-    0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,  /* 00003190    ".\/._SB_" */
+-    0x50,0x43,0x49,0x30,0x53,0x31,0x43,0x5F,  /* 00003198    "PCI0S1C_" */
+-    0x45,0x56,0x54,0x5F,0xA1,0x4D,0x05,0xA0,  /* 000031A0    "EVT_.M.." */
+-    0x1C,0x93,0x5F,0x54,0x5F,0x30,0x0A,0x1D,  /* 000031A8    ".._T_0.." */
+-    0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,  /* 000031B0    ".\/._SB_" */
+-    0x50,0x43,0x49,0x30,0x53,0x31,0x44,0x5F,  /* 000031B8    "PCI0S1D_" */
+-    0x45,0x56,0x54,0x5F,0xA1,0x3D,0xA0,0x1C,  /* 000031C0    "EVT_.=.." */
+-    0x93,0x5F,0x54,0x5F,0x30,0x0A,0x1E,0x86,  /* 000031C8    "._T_0..." */
+-    0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,  /* 000031D0    "\/._SB_P" */
+-    0x43,0x49,0x30,0x53,0x31,0x45,0x5F,0x45,  /* 000031D8    "CI0S1E_E" */
+-    0x56,0x54,0x5F,0xA1,0x1E,0xA0,0x1C,0x93,  /* 000031E0    "VT_....." */
+-    0x5F,0x54,0x5F,0x30,0x0A,0x1F,0x86,0x5C,  /* 000031E8    "_T_0...\" */
+-    0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43,  /* 000031F0    "/._SB_PC" */
+-    0x49,0x30,0x53,0x31,0x46,0x5F,0x45,0x56,  /* 000031F8    "I0S1F_EV" */
+-    0x54,0x5F,
+-};
+-int DsdtLen=sizeof(AmlCode);
+diff -r 0477f9061c8a tools/firmware/hvmloader/acpi/ssdt_pm.h
+--- a/tools/firmware/hvmloader/acpi/ssdt_pm.h  Fri Mar 20 17:42:46 2009 +0000
++++ /dev/null  Thu Jan 01 00:00:00 1970 +0000
+@@ -1,202 +0,0 @@
+-/*
+- * 
+- * Intel ACPI Component Architecture
+- * ASL Optimizing Compiler version 20061109 [May 18 2007]
+- * Copyright (C) 2000 - 2006 Intel Corporation
+- * Supports ACPI Specification Revision 3.0a
+- * 
+- * Compilation of "ssdt_pm.asl" - Sun Oct 12 23:57:51 2008
+- * 
+- * C source code output
+- *
+- */
+-unsigned char AmlCode_PM[] =
+-{
+-    0x53,0x53,0x44,0x54,0xD6,0x05,0x00,0x00,  /* 00000000    "SSDT...." */
+-    0x02,0xD9,0x58,0x65,0x6E,0x00,0x00,0x00,  /* 00000008    "..Xen..." */
+-    0x48,0x56,0x4D,0x00,0x00,0x00,0x00,0x00,  /* 00000010    "HVM....." */
+-    0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
+-    0x09,0x11,0x06,0x20,0x10,0x41,0x5B,0x5C,  /* 00000020    "... .A[\" */
+-    0x5F,0x53,0x42,0x5F,0x5B,0x80,0x44,0x42,  /* 00000028    "_SB_[.DB" */
+-    0x47,0x41,0x01,0x0B,0x40,0xB0,0x01,0x5B,  /* 00000030    "GA..@..[" */
+-    0x81,0x0B,0x44,0x42,0x47,0x41,0x01,0x44,  /* 00000038    "..DBGA.D" */
+-    0x42,0x47,0x31,0x08,0x5B,0x80,0x44,0x42,  /* 00000040    "BG1.[.DB" */
+-    0x47,0x42,0x01,0x0B,0x44,0xB0,0x01,0x5B,  /* 00000048    "GB..D..[" */
+-    0x81,0x0B,0x44,0x42,0x47,0x42,0x01,0x44,  /* 00000050    "..DBGB.D" */
+-    0x42,0x47,0x32,0x08,0x5B,0x80,0x44,0x42,  /* 00000058    "BG2.[.DB" */
+-    0x47,0x43,0x01,0x0B,0x46,0xB0,0x01,0x5B,  /* 00000060    "GC..F..[" */
+-    0x81,0x0B,0x44,0x42,0x47,0x43,0x01,0x44,  /* 00000068    "..DBGC.D" */
+-    0x42,0x47,0x33,0x08,0x5B,0x80,0x44,0x42,  /* 00000070    "BG3.[.DB" */
+-    0x47,0x44,0x01,0x0B,0x48,0xB0,0x01,0x5B,  /* 00000078    "GD..H..[" */
+-    0x81,0x0B,0x44,0x42,0x47,0x44,0x01,0x44,  /* 00000080    "..DBGD.D" */
+-    0x42,0x47,0x34,0x08,0x5B,0x80,0x50,0x52,  /* 00000088    "BG4.[.PR" */
+-    0x54,0x31,0x01,0x0A,0xB2,0x0A,0x02,0x5B,  /* 00000090    "T1.....[" */
+-    0x81,0x10,0x50,0x52,0x54,0x31,0x01,0x50,  /* 00000098    "..PRT1.P" */
+-    0x42,0x32,0x5F,0x08,0x50,0x42,0x32,0x41,  /* 000000A0    "B2_.PB2A" */
+-    0x08,0x5B,0x80,0x50,0x52,0x54,0x32,0x01,  /* 000000A8    ".[.PRT2." */
+-    0x0A,0x86,0x01,0x5B,0x81,0x0B,0x50,0x52,  /* 000000B0    "...[..PR" */
+-    0x54,0x32,0x01,0x50,0x38,0x36,0x5F,0x08,  /* 000000B8    "T2.P86_." */
+-    0x5B,0x80,0x50,0x52,0x54,0x33,0x01,0x0A,  /* 000000C0    "[.PRT3.." */
+-    0x88,0x01,0x5B,0x81,0x0B,0x50,0x52,0x54,  /* 000000C8    "..[..PRT" */
+-    0x33,0x01,0x50,0x38,0x38,0x5F,0x08,0x5B,  /* 000000D0    "3.P88_.[" */
+-    0x01,0x53,0x59,0x4E,0x43,0x01,0x08,0x42,  /* 000000D8    ".SYNC..B" */
+-    0x55,0x46,0x30,0x11,0x04,0x0B,0x00,0x01,  /* 000000E0    "UF0....." */
+-    0x08,0x42,0x55,0x46,0x31,0x11,0x03,0x0A,  /* 000000E8    ".BUF1..." */
+-    0x08,0x8B,0x42,0x55,0x46,0x31,0x00,0x42,  /* 000000F0    "..BUF1.B" */
+-    0x55,0x46,0x41,0x8B,0x42,0x55,0x46,0x31,  /* 000000F8    "UFA.BUF1" */
+-    0x0A,0x04,0x42,0x55,0x46,0x42,0x14,0x14,  /* 00000100    "..BUFB.." */
+-    0x41,0x43,0x51,0x52,0x00,0x5B,0x23,0x53,  /* 00000108    "ACQR.[#S" */
+-    0x59,0x4E,0x43,0xFF,0xFF,0x70,0x00,0x42,  /* 00000110    "YNC..p.B" */
+-    0x55,0x46,0x41,0x14,0x31,0x49,0x4E,0x49,  /* 00000118    "UFA.1INI" */
+-    0x54,0x01,0x70,0x42,0x55,0x46,0x41,0x60,  /* 00000120    "T.pBUFA`" */
+-    0x75,0x60,0xA0,0x22,0x92,0x94,0x60,0x87,  /* 00000128    "u`."..`." */
+-    0x42,0x55,0x46,0x30,0x8C,0x42,0x55,0x46,  /* 00000130    "BUF0.BUF" */
+-    0x30,0x42,0x55,0x46,0x41,0x54,0x4D,0x50,  /* 00000138    "0BUFATMP" */
+-    0x31,0x70,0x68,0x54,0x4D,0x50,0x31,0x70,  /* 00000140    "1phTMP1p" */
+-    0x60,0x42,0x55,0x46,0x41,0x14,0x48,0x07,  /* 00000148    "`BUFA.H." */
+-    0x57,0x50,0x52,0x54,0x02,0x70,0x69,0x5C,  /* 00000150    "WPRT.pi\" */
+-    0x2E,0x5F,0x53,0x42,0x5F,0x50,0x38,0x36,  /* 00000158    "._SB_P86" */
+-    0x5F,0x70,0x68,0x5C,0x2E,0x5F,0x53,0x42,  /* 00000160    "_ph\._SB" */
+-    0x5F,0x50,0x42,0x32,0x5F,0x70,0x68,0x5C,  /* 00000168    "_PB2_ph\" */
+-    0x2E,0x5F,0x53,0x42,0x5F,0x44,0x42,0x47,  /* 00000170    "._SB_DBG" */
+-    0x32,0x70,0x69,0x5C,0x2E,0x5F,0x53,0x42,  /* 00000178    "2pi\._SB" */
+-    0x5F,0x44,0x42,0x47,0x34,0x70,0x5C,0x2E,  /* 00000180    "_DBG4p\." */
+-    0x5F,0x53,0x42,0x5F,0x50,0x42,0x32,0x5F,  /* 00000188    "_SB_PB2_" */
+-    0x60,0xA2,0x11,0x92,0x93,0x60,0x00,0x70,  /* 00000190    "`....`.p" */
+-    0x5C,0x2E,0x5F,0x53,0x42,0x5F,0x50,0x42,  /* 00000198    "\._SB_PB" */
+-    0x32,0x5F,0x60,0x70,0x5C,0x2E,0x5F,0x53,  /* 000001A0    "2_`p\._S" */
+-    0x42,0x5F,0x50,0x38,0x36,0x5F,0x61,0x70,  /* 000001A8    "B_P86_ap" */
+-    0x61,0x5C,0x2E,0x5F,0x53,0x42,0x5F,0x44,  /* 000001B0    "a\._SB_D" */
+-    0x42,0x47,0x33,0xA4,0x5C,0x2E,0x5F,0x53,  /* 000001B8    "BG3.\._S" */
+-    0x42,0x5F,0x50,0x38,0x36,0x5F,0x14,0x1D,  /* 000001C0    "B_P86_.." */
+-    0x48,0x4C,0x50,0x31,0x02,0xA0,0x16,0x95,  /* 000001C8    "HLP1...." */
+-    0x69,0x87,0x68,0x8C,0x68,0x69,0x54,0x4D,  /* 000001D0    "i.h.hiTM" */
+-    0x50,0x31,0x57,0x50,0x52,0x54,0x0A,0x7C,  /* 000001D8    "P1WPRT.|" */
+-    0x54,0x4D,0x50,0x31,0x14,0x23,0x48,0x4C,  /* 000001E0    "TMP1.#HL" */
+-    0x50,0x32,0x00,0x57,0x50,0x52,0x54,0x0A,  /* 000001E8    "P2.WPRT." */
+-    0x7B,0x00,0x70,0x00,0x60,0xA2,0x12,0x95,  /* 000001F0    "{.p.`..." */
+-    0x60,0x42,0x55,0x46,0x41,0x48,0x4C,0x50,  /* 000001F8    "`BUFAHLP" */
+-    0x31,0x42,0x55,0x46,0x30,0x60,0x75,0x60,  /* 00000200    "1BUF0`u`" */
+-    0x14,0x1F,0x48,0x4C,0x50,0x33,0x02,0xA0,  /* 00000208    "..HLP3.." */
+-    0x18,0x95,0x69,0x87,0x68,0x8C,0x68,0x69,  /* 00000210    "..i.h.hi" */
+-    0x54,0x4D,0x50,0x31,0x70,0x57,0x50,0x52,  /* 00000218    "TMP1pWPR" */
+-    0x54,0x0A,0x7D,0x00,0x54,0x4D,0x50,0x31,  /* 00000220    "T.}.TMP1" */
+-    0x14,0x23,0x48,0x4C,0x50,0x34,0x00,0x70,  /* 00000228    ".#HLP4.p" */
+-    0x00,0x60,0xA2,0x19,0x95,0x60,0x42,0x55,  /* 00000230    ".`...`BU" */
+-    0x46,0x42,0x72,0x42,0x55,0x46,0x41,0x60,  /* 00000238    "FBrBUFA`" */
+-    0x61,0x48,0x4C,0x50,0x33,0x42,0x55,0x46,  /* 00000240    "aHLP3BUF" */
+-    0x30,0x61,0x75,0x60,0x14,0x42,0x04,0x48,  /* 00000248    "0au`.B.H" */
+-    0x4C,0x50,0x35,0x00,0x48,0x4C,0x50,0x32,  /* 00000250    "LP5.HLP2" */
+-    0x70,0x57,0x50,0x52,0x54,0x0A,0x79,0x00,  /* 00000258    "pWPRT.y." */
+-    0x42,0x55,0x46,0x42,0x72,0x42,0x55,0x46,  /* 00000260    "BUFBrBUF" */
+-    0x41,0x42,0x55,0x46,0x42,0x60,0xA0,0x1C,  /* 00000268    "ABUFB`.." */
+-    0x95,0x87,0x42,0x55,0x46,0x30,0x60,0x70,  /* 00000270    "..BUF0`p" */
+-    0x87,0x42,0x55,0x46,0x30,0x60,0x74,0x60,  /* 00000278    ".BUF0`t`" */
+-    0x42,0x55,0x46,0x41,0x60,0x70,0x60,0x42,  /* 00000280    "BUFA`p`B" */
+-    0x55,0x46,0x42,0x48,0x4C,0x50,0x34,0x14,  /* 00000288    "UFBHLP4." */
+-    0x32,0x48,0x4C,0x50,0x36,0x00,0x70,0x42,  /* 00000290    "2HLP6.pB" */
+-    0x55,0x46,0x41,0x60,0x75,0x60,0xA0,0x21,  /* 00000298    "UFA`u`.!" */
+-    0x92,0x94,0x60,0x87,0x42,0x55,0x46,0x30,  /* 000002A0    "..`.BUF0" */
+-    0x8C,0x42,0x55,0x46,0x30,0x42,0x55,0x46,  /* 000002A8    ".BUF0BUF" */
+-    0x41,0x54,0x4D,0x50,0x31,0x70,0x60,0x42,  /* 000002B0    "ATMP1p`B" */
+-    0x55,0x46,0x41,0xA4,0x54,0x4D,0x50,0x31,  /* 000002B8    "UFA.TMP1" */
+-    0xA4,0x00,0x14,0x35,0x48,0x4C,0x50,0x37,  /* 000002C0    "...5HLP7" */
+-    0x00,0x70,0x42,0x55,0x46,0x41,0x60,0x72,  /* 000002C8    ".pBUFA`r" */
+-    0x60,0x0A,0x04,0x60,0xA0,0x21,0x92,0x94,  /* 000002D0    "`..`.!.." */
+-    0x60,0x87,0x42,0x55,0x46,0x30,0x8A,0x42,  /* 000002D8    "`.BUF0.B" */
+-    0x55,0x46,0x30,0x42,0x55,0x46,0x41,0x53,  /* 000002E0    "UF0BUFAS" */
+-    0x58,0x32,0x32,0x70,0x60,0x42,0x55,0x46,  /* 000002E8    "X22p`BUF" */
+-    0x41,0xA4,0x53,0x58,0x32,0x32,0xA4,0x00,  /* 000002F0    "A.SX22.." */
+-    0x14,0x1C,0x48,0x4C,0x50,0x38,0x02,0xA0,  /* 000002F8    "..HLP8.." */
+-    0x15,0x95,0x69,0x87,0x68,0x8C,0x68,0x69,  /* 00000300    "..i.h.hi" */
+-    0x54,0x4D,0x50,0x31,0x70,0x48,0x4C,0x50,  /* 00000308    "TMP1pHLP" */
+-    0x36,0x54,0x4D,0x50,0x31,0x14,0x16,0x48,  /* 00000310    "6TMP1..H" */
+-    0x4C,0x50,0x39,0x02,0x70,0x00,0x60,0xA2,  /* 00000318    "LP9.p.`." */
+-    0x0C,0x95,0x60,0x69,0x48,0x4C,0x50,0x38,  /* 00000320    "..`iHLP8" */
+-    0x68,0x60,0x75,0x60,0x14,0x22,0x48,0x4C,  /* 00000328    "h`u`."HL" */
+-    0x50,0x41,0x00,0x70,0x48,0x4C,0x50,0x36,  /* 00000330    "PA.pHLP6" */
+-    0x60,0x08,0x54,0x4D,0x50,0x5F,0x11,0x02,  /* 00000338    "`.TMP_.." */
+-    0x60,0x48,0x4C,0x50,0x39,0x54,0x4D,0x50,  /* 00000340    "`HLP9TMP" */
+-    0x5F,0x60,0xA4,0x54,0x4D,0x50,0x5F,0x14,  /* 00000348    "_`.TMP_." */
+-    0x0C,0x52,0x45,0x4C,0x5F,0x00,0x5B,0x27,  /* 00000350    ".REL_.['" */
+-    0x53,0x59,0x4E,0x43,0x5B,0x82,0x3C,0x41,  /* 00000358    "SYNC[.<A" */
+-    0x43,0x5F,0x5F,0x08,0x5F,0x48,0x49,0x44,  /* 00000360    "C__._HID" */
+-    0x0D,0x41,0x43,0x50,0x49,0x30,0x30,0x30,  /* 00000368    ".ACPI000" */
+-    0x33,0x00,0x08,0x5F,0x50,0x43,0x4C,0x12,  /* 00000370    "3.._PCL." */
+-    0x0F,0x03,0x5C,0x5F,0x53,0x42,0x5F,0x42,  /* 00000378    "..\_SB_B" */
+-    0x41,0x54,0x30,0x42,0x41,0x54,0x31,0x14,  /* 00000380    "AT0BAT1." */
+-    0x08,0x5F,0x50,0x53,0x52,0x00,0xA4,0x00,  /* 00000388    "._PSR..." */
+-    0x14,0x09,0x5F,0x53,0x54,0x41,0x00,0xA4,  /* 00000390    ".._STA.." */
+-    0x0A,0x0F,0x08,0x42,0x49,0x46,0x50,0x12,  /* 00000398    "...BIFP." */
+-    0x02,0x0D,0x14,0x49,0x0C,0x42,0x49,0x46,  /* 000003A0    "...I.BIF" */
+-    0x5F,0x01,0x41,0x43,0x51,0x52,0x49,0x4E,  /* 000003A8    "_.ACQRIN" */
+-    0x49,0x54,0x01,0x49,0x4E,0x49,0x54,0x68,  /* 000003B0    "IT.INITh" */
+-    0x48,0x4C,0x50,0x35,0x70,0x48,0x4C,0x50,  /* 000003B8    "HLP5pHLP" */
+-    0x37,0x88,0x42,0x49,0x46,0x50,0x00,0x00,  /* 000003C0    "7.BIFP.." */
+-    0x70,0x48,0x4C,0x50,0x37,0x88,0x42,0x49,  /* 000003C8    "pHLP7.BI" */
+-    0x46,0x50,0x01,0x00,0x70,0x48,0x4C,0x50,  /* 000003D0    "FP..pHLP" */
+-    0x37,0x88,0x42,0x49,0x46,0x50,0x0A,0x02,  /* 000003D8    "7.BIFP.." */
+-    0x00,0x70,0x48,0x4C,0x50,0x37,0x88,0x42,  /* 000003E0    ".pHLP7.B" */
+-    0x49,0x46,0x50,0x0A,0x03,0x00,0x70,0x48,  /* 000003E8    "IFP...pH" */
+-    0x4C,0x50,0x37,0x88,0x42,0x49,0x46,0x50,  /* 000003F0    "LP7.BIFP" */
+-    0x0A,0x04,0x00,0x70,0x48,0x4C,0x50,0x37,  /* 000003F8    "...pHLP7" */
+-    0x88,0x42,0x49,0x46,0x50,0x0A,0x05,0x00,  /* 00000400    ".BIFP..." */
+-    0x70,0x48,0x4C,0x50,0x37,0x88,0x42,0x49,  /* 00000408    "pHLP7.BI" */
+-    0x46,0x50,0x0A,0x06,0x00,0x70,0x48,0x4C,  /* 00000410    "FP...pHL" */
+-    0x50,0x37,0x88,0x42,0x49,0x46,0x50,0x0A,  /* 00000418    "P7.BIFP." */
+-    0x07,0x00,0x70,0x48,0x4C,0x50,0x37,0x88,  /* 00000420    "..pHLP7." */
+-    0x42,0x49,0x46,0x50,0x0A,0x08,0x00,0x70,  /* 00000428    "BIFP...p" */
+-    0x48,0x4C,0x50,0x41,0x88,0x42,0x49,0x46,  /* 00000430    "HLPA.BIF" */
+-    0x50,0x0A,0x09,0x00,0x70,0x48,0x4C,0x50,  /* 00000438    "P...pHLP" */
+-    0x41,0x88,0x42,0x49,0x46,0x50,0x0A,0x0A,  /* 00000440    "A.BIFP.." */
+-    0x00,0x70,0x48,0x4C,0x50,0x41,0x88,0x42,  /* 00000448    ".pHLPA.B" */
+-    0x49,0x46,0x50,0x0A,0x0B,0x00,0x70,0x48,  /* 00000450    "IFP...pH" */
+-    0x4C,0x50,0x41,0x88,0x42,0x49,0x46,0x50,  /* 00000458    "LPA.BIFP" */
+-    0x0A,0x0C,0x00,0x52,0x45,0x4C,0x5F,0xA4,  /* 00000460    "...REL_." */
+-    0x42,0x49,0x46,0x50,0x5B,0x82,0x4F,0x0B,  /* 00000468    "BIFP[.O." */
+-    0x42,0x41,0x54,0x30,0x08,0x5F,0x48,0x49,  /* 00000470    "BAT0._HI" */
+-    0x44,0x0C,0x41,0xD0,0x0C,0x0A,0x08,0x5F,  /* 00000478    "D.A...._" */
+-    0x55,0x49,0x44,0x01,0x08,0x5F,0x50,0x43,  /* 00000480    "UID.._PC" */
+-    0x4C,0x12,0x07,0x01,0x5C,0x5F,0x53,0x42,  /* 00000488    "L...\_SB" */
+-    0x5F,0x14,0x14,0x5F,0x53,0x54,0x41,0x00,  /* 00000490    "_.._STA." */
+-    0x70,0x5C,0x2E,0x5F,0x53,0x42,0x5F,0x50,  /* 00000498    "p\._SB_P" */
+-    0x38,0x38,0x5F,0x60,0xA4,0x60,0x14,0x0F,  /* 000004A0    "88_`.`.." */
+-    0x5F,0x42,0x49,0x46,0x00,0x70,0x42,0x49,  /* 000004A8    "_BIF.pBI" */
+-    0x46,0x5F,0x01,0x60,0xA4,0x60,0x14,0x46,  /* 000004B0    "F_.`.`.F" */
+-    0x07,0x5F,0x42,0x53,0x54,0x00,0x70,0x01,  /* 000004B8    "._BST.p." */
+-    0x5C,0x2E,0x5F,0x53,0x42,0x5F,0x44,0x42,  /* 000004C0    "\._SB_DB" */
+-    0x47,0x31,0x41,0x43,0x51,0x52,0x49,0x4E,  /* 000004C8    "G1ACQRIN" */
+-    0x49,0x54,0x0A,0x02,0x49,0x4E,0x49,0x54,  /* 000004D0    "IT..INIT" */
+-    0x01,0x48,0x4C,0x50,0x35,0x08,0x42,0x53,  /* 000004D8    ".HLP5.BS" */
+-    0x54,0x30,0x12,0x02,0x04,0x70,0x48,0x4C,  /* 000004E0    "T0...pHL" */
+-    0x50,0x37,0x88,0x42,0x53,0x54,0x30,0x00,  /* 000004E8    "P7.BST0." */
+-    0x00,0x70,0x48,0x4C,0x50,0x37,0x88,0x42,  /* 000004F0    ".pHLP7.B" */
+-    0x53,0x54,0x30,0x01,0x00,0x70,0x48,0x4C,  /* 000004F8    "ST0..pHL" */
+-    0x50,0x37,0x88,0x42,0x53,0x54,0x30,0x0A,  /* 00000500    "P7.BST0." */
+-    0x02,0x00,0x70,0x48,0x4C,0x50,0x37,0x88,  /* 00000508    "..pHLP7." */
+-    0x42,0x53,0x54,0x30,0x0A,0x03,0x00,0x52,  /* 00000510    "BST0...R" */
+-    0x45,0x4C,0x5F,0x70,0x0A,0x02,0x5C,0x2E,  /* 00000518    "EL_p..\." */
+-    0x5F,0x53,0x42,0x5F,0x44,0x42,0x47,0x31,  /* 00000520    "_SB_DBG1" */
+-    0xA4,0x42,0x53,0x54,0x30,0x5B,0x82,0x47,  /* 00000528    ".BST0[.G" */
+-    0x0A,0x42,0x41,0x54,0x31,0x08,0x5F,0x48,  /* 00000530    ".BAT1._H" */
+-    0x49,0x44,0x0C,0x41,0xD0,0x0C,0x0A,0x08,  /* 00000538    "ID.A...." */
+-    0x5F,0x55,0x49,0x44,0x0A,0x02,0x08,0x5F,  /* 00000540    "_UID..._" */
+-    0x50,0x43,0x4C,0x12,0x07,0x01,0x5C,0x5F,  /* 00000548    "PCL...\_" */
+-    0x53,0x42,0x5F,0x14,0x09,0x5F,0x53,0x54,  /* 00000550    "SB_.._ST" */
+-    0x41,0x00,0xA4,0x0A,0x0F,0x14,0x19,0x5F,  /* 00000558    "A......_" */
+-    0x42,0x49,0x46,0x00,0x70,0x5C,0x2E,0x5F,  /* 00000560    "BIF.p\._" */
+-    0x53,0x42,0x5F,0x50,0x42,0x32,0x5F,0x60,  /* 00000568    "SB_PB2_`" */
+-    0xA4,0x42,0x49,0x46,0x5F,0x0A,0x02,0x14,  /* 00000570    ".BIF_..." */
+-    0x4E,0x05,0x5F,0x42,0x53,0x54,0x00,0x41,  /* 00000578    "N._BST.A" */
+-    0x43,0x51,0x52,0x49,0x4E,0x49,0x54,0x0A,  /* 00000580    "CQRINIT." */
+-    0x02,0x49,0x4E,0x49,0x54,0x0A,0x02,0x48,  /* 00000588    ".INIT..H" */
+-    0x4C,0x50,0x35,0x08,0x42,0x53,0x54,0x31,  /* 00000590    "LP5.BST1" */
+-    0x12,0x02,0x04,0x70,0x48,0x4C,0x50,0x37,  /* 00000598    "...pHLP7" */
+-    0x88,0x42,0x53,0x54,0x31,0x00,0x00,0x70,  /* 000005A0    ".BST1..p" */
+-    0x48,0x4C,0x50,0x37,0x88,0x42,0x53,0x54,  /* 000005A8    "HLP7.BST" */
+-    0x31,0x01,0x00,0x70,0x48,0x4C,0x50,0x37,  /* 000005B0    "1..pHLP7" */
+-    0x88,0x42,0x53,0x54,0x31,0x0A,0x02,0x00,  /* 000005B8    ".BST1..." */
+-    0x70,0x48,0x4C,0x50,0x37,0x88,0x42,0x53,  /* 000005C0    "pHLP7.BS" */
+-    0x54,0x31,0x0A,0x03,0x00,0x52,0x45,0x4C,  /* 000005C8    "T1...REL" */
+-    0x5F,0xA4,0x42,0x53,0x54,0x31,
+-};
+diff -r 0477f9061c8a tools/firmware/hvmloader/acpi/ssdt_tpm.h
+--- a/tools/firmware/hvmloader/acpi/ssdt_tpm.h Fri Mar 20 17:42:46 2009 +0000
++++ /dev/null  Thu Jan 01 00:00:00 1970 +0000
+@@ -1,25 +0,0 @@
+-/*
+- * 
+- * Intel ACPI Component Architecture
+- * ASL Optimizing Compiler version 20060707 [Dec 30 2006]
+- * Copyright (C) 2000 - 2006 Intel Corporation
+- * Supports ACPI Specification Revision 3.0a
+- * 
+- * Compilation of "ssdt_tpm.asl" - Sat Dec 30 15:31:27 2006
+- * 
+- * C source code output
+- *
+- */
+-unsigned char AmlCode_TPM[] =
+-{
+-    0x53,0x53,0x44,0x54,0x4C,0x00,0x00,0x00,  /* 00000000    "SSDTL..." */
+-    0x02,0x56,0x58,0x65,0x6E,0x00,0x00,0x00,  /* 00000008    ".VXen..." */
+-    0x48,0x56,0x4D,0x00,0x00,0x00,0x00,0x00,  /* 00000010    "HVM....." */
+-    0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
+-    0x07,0x07,0x06,0x20,0x5B,0x82,0x26,0x54,  /* 00000020    "... [.&T" */
+-    0x50,0x4D,0x5F,0x08,0x5F,0x48,0x49,0x44,  /* 00000028    "PM_._HID" */
+-    0x0C,0x41,0xD0,0x0C,0x31,0x08,0x5F,0x43,  /* 00000030    ".A..1._C" */
+-    0x52,0x53,0x11,0x11,0x0A,0x0E,0x86,0x09,  /* 00000038    "RS......" */
+-    0x00,0x01,0x00,0x00,0xD4,0xFE,0x00,0x50,  /* 00000040    ".......P" */
+-    0x00,0x00,0x79,0x00,
+-};
diff --git a/xen-3.4/oem-features b/xen-3.4/oem-features
new file mode 100644 (file)
index 0000000..0a68f7c
--- /dev/null
@@ -0,0 +1,2694 @@
+diff -Nur a/tools/firmware/hvmloader/acpi/build.c b/tools/firmware/hvmloader/acpi/build.c
+--- a/tools/firmware/hvmloader/acpi/build.c    2009-04-01 16:31:10.000000000 -0400
++++ b/tools/firmware/hvmloader/acpi/build.c    2009-04-01 17:04:59.000000000 -0400
+@@ -19,8 +19,12 @@
+ #include "acpi2_0.h"
+ #include "ssdt_tpm.h"
+ #include "ssdt_pm.h"
++#include "ssdt_hp_6930p_elitebook.h"
++#include "ssdt_dell_latitude_eseries.h"
++#include "ssdt_lenovo_t_and_x_series.h"
+ #include "../config.h"
+ #include "../util.h"
++#include "../smbios_types.h"
+ #define align16(sz)        (((sz) + 15) & ~15)
+ #define fixed_strcpy(d, s) strncpy((d), (s), sizeof(d))
+@@ -33,6 +37,16 @@
+ extern unsigned char AmlCode[];
+ extern int DsdtLen;
++#define OEM_NAME_DELL                    "Dell"
++#define OEM_NAME_HP                      "Hewlett-Packard"
++#define OEM_NAME_LENOVO                  "LENOVO"
++
++#define OEM_MODEL_DELL_LATITUDE_1        "Latitude E4200"
++#define OEM_MODEL_DELL_LATITUDE_2        "Latitude E6500"
++#define OEM_MODEL_HP_EliteBook           "HP EliteBook 6930p"
++#define OEM_MODEL_LENOVO_T400            "6475BY3"
++#define OEM_MODEL_LENOVO_X200            "74542NU"
++
+ static void set_checksum(
+     void *table, uint32_t checksum_offset, uint32_t length)
+ {
+@@ -59,6 +73,12 @@
+     return 1;
+ }
++static uint8_t oem_value_add_exists(void)
++{
++    outb(0x96, 100);
++    return (inb(0x96) == 100);
++}
++
+ static void pt_update_acpi_tables(struct acpi_header *header, struct hvm_acinfo_table *va_ac)
+ {
+     memcpy(header->oem_id, va_ac->oem_id, HVM_ACINFO_OEM_ID_SIZE);
+@@ -68,6 +88,59 @@
+     header->creator_revision = va_ac->creator_revision;
+ }
++static int construct_oem_ssdt(uint8_t *buf)
++{
++    struct smbios_type_1 *type1_info;
++    char *manufacturer, *model;
++    struct hvm_sminfo_table *pa_sm;
++    struct hvm_smtable_header *header;
++
++    pa_sm = get_hvm_sminfo_table();
++    if ( pa_sm == NULL )
++        return 0;
++
++    header = (struct hvm_smtable_header *)get_sminfo_by_type(pa_sm, 1);
++    if ( header == NULL )
++        return 0;
++    if ( header->sm_length < sizeof(struct smbios_type_1) )
++        return 0;
++
++    type1_info = (struct smbios_type_1 *)((char *)header + sizeof(struct hvm_smtable_header));
++    manufacturer = (char *)type1_info + type1_info->header.length;
++    model = manufacturer + strlen(manufacturer) + 1;
++
++    if ( strncmp(manufacturer, OEM_NAME_DELL, strlen(OEM_NAME_DELL)) == 0 )
++    {
++        if ( (strncmp(model, OEM_MODEL_DELL_LATITUDE_1, strlen(OEM_MODEL_DELL_LATITUDE_1)) != 0) &&
++             (strncmp(model, OEM_MODEL_DELL_LATITUDE_2, strlen(OEM_MODEL_DELL_LATITUDE_2)) != 0) )
++            return 0;
++
++        memcpy(buf, AmlCode_DELL_LATITUDE_ESERIES, sizeof(AmlCode_DELL_LATITUDE_ESERIES));
++        return align16(sizeof(AmlCode_DELL_LATITUDE_ESERIES));
++    }
++
++    if ( strncmp(manufacturer, OEM_NAME_HP, strlen(OEM_NAME_HP)) == 0 )
++    {
++        if ( strncmp(model, OEM_MODEL_HP_EliteBook, strlen(OEM_MODEL_HP_EliteBook)) != 0 )
++            return 0;
++
++        memcpy(buf, AmlCode_HP_6930P_ELITEBOOK, sizeof(AmlCode_HP_6930P_ELITEBOOK));
++        return align16(sizeof(AmlCode_HP_6930P_ELITEBOOK));
++    }
++
++    if ( strncmp(manufacturer, OEM_NAME_LENOVO, strlen(OEM_NAME_LENOVO)) == 0 )
++    {
++        if ( (strncmp(model, OEM_MODEL_LENOVO_T400, strlen(OEM_MODEL_LENOVO_T400)) != 0) &&
++             (strncmp(model, OEM_MODEL_LENOVO_X200, strlen(OEM_MODEL_LENOVO_X200)) != 0) )
++            return 0;
++
++        memcpy(buf, AmlCode_LENOVO_T_AND_X_SERIES, sizeof(AmlCode_LENOVO_T_AND_X_SERIES));
++        return align16(sizeof(AmlCode_LENOVO_T_AND_X_SERIES));
++    }
++
++    return 0;
++}
++
+ static int construct_madt(struct acpi_20_madt *madt, struct hvm_acinfo_table *va_ac)
+ {
+     struct acpi_20_madt_intsrcovr *intsrcovr;
+@@ -183,12 +256,13 @@
+ static int construct_secondary_tables(uint8_t *buf, unsigned long *table_ptrs, struct hvm_acinfo_table *va_ac)
+ {
+-    int offset = 0, nr_tables = 0;
++    int offset = 0, nr_tables = 0, oem_ssdt_offset = 0;
+     struct acpi_20_madt *madt;
+     struct acpi_20_hpet *hpet;
+     struct acpi_20_tcpa *tcpa;
+     static const uint16_t tis_signature[] = {0x0001, 0x0001, 0x0001};
+     uint16_t *tis_hdr;
++    uint8_t *oem_ssdt;
+     void *lasa;
+     /* MADT. */
+@@ -222,6 +296,17 @@
+         offset += align16(va_ac->slic_length);
+     }
++    if ( oem_value_add_exists() )
++    {
++        oem_ssdt = &buf[offset];
++        oem_ssdt_offset = construct_oem_ssdt(oem_ssdt);
++        if ( oem_ssdt_offset != 0 )
++        {
++            offset += oem_ssdt_offset;
++            table_ptrs[nr_tables++] = (unsigned long)oem_ssdt;
++        }
++    }
++
+     /* TPM TCPA and SSDT. */
+     tis_hdr = (uint16_t *)0xFED40F00;
+     if ( (tis_hdr[0] == tis_signature[0]) &&
+diff -Nur a/tools/firmware/hvmloader/acpi/Makefile b/tools/firmware/hvmloader/acpi/Makefile
+--- a/tools/firmware/hvmloader/acpi/Makefile   2009-04-01 16:30:52.000000000 -0400
++++ b/tools/firmware/hvmloader/acpi/Makefile   2009-04-01 16:36:38.000000000 -0400
+@@ -19,7 +19,7 @@
+ include $(XEN_ROOT)/tools/firmware/Rules.mk
+ C_SRC = build.c dsdt.c static_tables.c
+-H_SRC = $(wildcard *.h) ssdt_pm.h ssdt_tpm.h
++H_SRC = $(wildcard *.h) ssdt_pm.h ssdt_hp_6930p_elitebook.h ssdt_dell_latitude_eseries.h ssdt_lenovo_t_and_x_series.h ssdt_tpm.h
+ OBJS  = $(patsubst %.c,%.o,$(C_SRC))
+ build.o: $(H_SRC) build.c
+@@ -39,6 +39,27 @@
+       mv $*.hex $@
+       rm -f *.aml
++ssdt_hp_6930p_elitebook.h: ssdt_hp_6930p_elitebook.asl
++      $(MAKE) iasl
++      iasl -tc $<
++      sed -i'' -re 's/AmlCode/AmlCode_HP_6930P_ELITEBOOK/g' $*.hex
++      mv $*.hex $@
++      rm -f *.aml
++
++ssdt_dell_latitude_eseries.h: ssdt_dell_latitude_eseries.asl
++      $(MAKE) iasl
++      iasl -tc $<
++      sed -i'' -re 's/AmlCode/AmlCode_DELL_LATITUDE_ESERIES/g' $*.hex
++      mv $*.hex $@
++      rm -f *.aml
++
++ssdt_lenovo_t_and_x_series.h: ssdt_lenovo_t_and_x_series.asl
++      $(MAKE) iasl
++      iasl -tc $<
++      sed -i'' -re 's/AmlCode/AmlCode_LENOVO_T_AND_X_SERIES/g' $*.hex
++      mv $*.hex $@
++      rm -f *.aml
++
+ ssdt_tpm.h: ssdt_tpm.asl
+       $(MAKE) iasl
+       iasl -tc $<
+@@ -60,10 +81,11 @@
+       @echo "If wget failed, please download and compile manually from"
+       @echo "http://acpica.org/downloads/"
+       @echo 
+-      wget $(IASL_URL)
+-      tar xzf $(IASL_VER).tar.gz
+-      make -C $(IASL_VER)/compiler
+-      $(INSTALL_PROG) $(IASL_VER)/compiler/iasl /$(BINDIR)/iasl
++      @exit 1
++#     wget $(IASL_URL)
++#     tar xzf $(IASL_VER).tar.gz
++#     make -C $(IASL_VER)/compiler
++#     $(INSTALL_PROG) $(IASL_VER)/compiler/iasl /$(BINDIR)/iasl
+ %.o: %.c
+       $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
+@@ -72,6 +94,6 @@
+       $(AR) rc $@ $(OBJS)
+ clean:
+-      rm -rf *.a *.o dsdt.c ssdt_pm.h ssdt_tpm.h $(IASL_VER) $(IASL_VER).tar.gz
++      rm -rf *.a *.o dsdt.c ssdt_pm.h ssdt_hp_6930p_elitebook.h ssdt_dell_latitude_eseries.h ssdt_lenovo_t_and_x_series.h ssdt_tpm.h $(IASL_VER) $(IASL_VER).tar.gz
+ install: all
+diff
+--- /dev/null
++++ b/tools/firmware/hvmloader/acpi/ssdt_dell_latitude_eseries.asl     2009-04-01 16:35:13.000000000 -0400
+@@ -0,0 +1,516 @@
++/*
++ * ssdt_dell_latitude_eseries.asl
++ *
++ * Copyright (c) 2009  Kamala Narasimhan
++ * Copyright (c) 2009  Citrix Systems, Inc.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++ */
++
++/* SSDT for exposing Dell latitude eseries specific value add functionalities like  
++ * hotkeys, special buttons.
++ */
++
++/* IMPLEMENTATION DETAILS:  OEM value add features are generally exposed through
++ * WMI psuedo device objects.  For our guests to benefit from such value add, we
++ * expose a psuedo device object in our vACPI layer also.  This psuedo object is 
++ * similar to the underlying base firmware object in the sense we expose the 
++ * same _WDG method which describes the WMI methods, data objects and events 
++ * provided by the WMI psuedo object.  Guest wmi wrapper driver which automatically
++ * gets loaded upon identifying this WMI pseudo device object, calls _WDG to get 
++ * known entry points and calls those entry points for further information exchange.
++ * Reference - http://www.microsoft.com/whdc/system/pnppwr/wmi/wmi-acpi.mspx
++ */
++
++/* COMMUNICATION DETAILS -
++ * Command port - 0x96 
++ *                Writes to this port describe what type of information is about
++ *                to be exchanged.  E.g., guid, input argument transfer etc.
++ * Data Port    - 0x98 and 0x9A for byte and dword data transfer respectively.
++ *                Communicates data to and from the backend.  E.g. Input buffer values
++ *                get written to this port and output buffer values are read from this 
++ *                port.
++ */
++
++DefinitionBlock ("SSDT_DELL_LATITUDE_ESERIES.aml", "SSDT", 2, "Xen", "HVM", 0)
++{
++    Scope (\_SB)
++    {
++
++        OperationRegion (LAT1, SystemIO, 0x96, 0x01)
++        Field (LAT1, ByteAcc, NoLock, Preserve)
++        {
++            P96,   8
++        }
++
++        OperationRegion (LAT2, SystemIO, 0x98, 0x01)
++        Field (LAT2, ByteAcc, NoLock, Preserve)
++        {
++            P98,  8
++        }
++
++        OperationRegion (LAT3, SystemIO, 0x9A, 0x04)
++        Field (LAT3, DWordAcc, NoLock, Preserve)
++        {
++            P9A,  32
++        }
++
++        Device (AMW0)
++        {
++            /* Exposing a pseudo device with HID PNP0C14 will 
++             * result in Windows guest loading their WMI wrapper
++             * driver - wmiacpi.sys
++             */
++            Name (_HID, EisaId ("PNP0C14"))
++            Name (_UID, 0x00)
++
++            /* Following list of data blocks exposed by _WDG is same as the 
++             * one provided by the underlying firmware.  Refer to -
++             * http://www.microsoft.com/whdc/system/pnppwr/wmi/wmi-acpi.mspx
++             * for further information about _WDG and what it exposes.
++             */ 
++            Name (_WDG, Buffer (0x78)
++            {
++                /* Data Block 1 */
++                /* GUID */
++                0xBC, 0xDC, 0x9D, 0x8D, 0x97, 0xA9, 0xDA, 0x11,
++                0xB0, 0x12, 0xB6, 0x22, 0xA1, 0xEF, 0x54, 0x92,
++                0x41, 0x41, /* Object ID - WQAA */ 
++                0x01, /* Instance count */
++                0x00, /* Flag - Data */
++
++                /* Data Block 2 */
++                /* GUID */
++                0xCE, 0x93, 0x05, 0xA8, 0x97, 0xA9, 0xDA, 0x11,
++                0xB0, 0x12, 0xB6, 0x22, 0xA1, 0xEF, 0x54, 0x92,
++                0x42, 0x41, /*Object ID - WMBA */ 
++                0x01, /* Instance count */
++                0x02, /* Flag - Method */
++
++                /* Data Block 3 */
++                /* GUID */
++                0x94, 0x59, 0xBB, 0x9D, 0x97, 0xA9, 0xDA, 0x11,
++                0xB0, 0x12, 0xB6, 0x22, 0xA1, 0xEF, 0x54, 0x92,
++                0xD0, 0x00, /* Event notification ID */
++                0x01, /* Instance count */
++                0x08, /* Flag - Event */
++
++                /* Data Block 4 */
++                /* GUID */
++                0xE0, 0x6C, 0x77, 0xA3, 0x88, 0x1E, 0xDB, 0x11,
++                0xA9, 0x8B, 0x08, 0x00, 0x20, 0x0C, 0x9A, 0x66,
++                0x42, 0x43, /* Object ID - WQBC */
++                0x01, /* Instance count */
++                0x00, /* Flag - Data */
++
++                /* Data Block 5 */
++                /* GUID */
++                0x21, 0x12, 0x90, 0x05, 0x66, 0xD5, 0xD1, 0x11,
++                0xB2, 0xF0, 0x00, 0xA0, 0xC9, 0x06, 0x29, 0x10,
++                0x4D, 0x4F, /* Object ID - WQMO */
++                0x01, /* Instance count */
++                0x00, /* Flag - Method */
++
++                /* Data Block 6 */
++                /* GUID */
++                0x28, 0x07, 0xBD, 0x77, 0x34, 0x2E, 0x8C, 0x47,
++                0xB6, 0x25, 0x67, 0xF0, 0x2A, 0x7E, 0x48, 0x97,
++                0x42, 0x44, /* Object ID - WMBD */
++                0x01, /* Instance count */
++                0x02, /* Flag - Method */ 
++
++            })
++
++            /* Initialize cmd port and communicate invocation type
++             * i.e., method execution or query or set object 
++             */
++            Method (INIT, 1, Serialized)
++            {
++                Store (100, P96)
++                Store (Arg0, P98)
++            }
++
++            /* Pass the guid pertaining to the operation */
++            Method (GUID, 1, Serialized)
++            {
++                Store (101, P96)
++                Store (0x0, Local0)
++                Store (Arg0, Local1)
++
++                While ( LLess(Local0,16) ) 
++                {
++                    Add(Local1, Local0, Local2)
++                    Store (DerefOf(Index (_WDG, Local2)), P98 ) 
++                    Increment( Local0 )
++                }
++            }
++
++            /* Pass instance # for the associated object pertaining
++             * to the invocation.
++             */
++            Method (INST, 1, Serialized)
++            {
++                Store(102, P96)
++                Store(Arg0, P9A)
++            }
++
++            /* Pass method id relevant to the method about to be
++             * executed.
++             */
++            Method (MTID, 1, Serialized)
++            {
++                Store(103, P96)
++                Store(Arg0, P9A)
++            }
++
++            /* Pass input buffer pertaining to the current operation */
++            Method (IBUF, 1, Serialized)
++            {
++                Store (105, P96) 
++                Store (SizeOf(Arg0), Local0)
++                Store (Local0, P9A)
++                ToBuffer (Arg0, Local1)
++                Store (0, Local2)
++                Store (104, P96)
++                While ( LLess(Local2,Local0) )
++                {
++                    Store (DerefOf(Index (Local1, Local2)), P98)
++                    Increment (Local2)
++                }
++            }
++
++            /* Now that the input arguments are passed, execute the command */
++            Method (EXEC, 0, Serialized)
++            {
++                Store (106, P96)
++            }
++
++            /* Get the output buffer pertaining to the just executed command */
++            Method (OBUF, 0, Serialized)
++            {
++                Store (108, P96)
++                Store (P9A, Local0)
++                Store (Buffer(Local0) {}, Local2)
++                Store (0, Local1)
++                Store (107, P96)
++                While ( LLess(Local1, Local0) )
++                {
++                    Store (P98, Index(Local2, Local1)) 
++                    Increment (Local1)
++                }
++                Return (Local2)
++            }
++
++            /* Get event data */
++            Method (_WED, 1, Serialized)
++            {
++                INIT (4)
++                Store (109, P96)
++                Store (Arg0, P98)
++                EXEC ()
++                Return (OBUF())
++            }
++
++            /*  Following are well know entry points as supplied by 
++             *  _WDG.
++             *  @TODO:  Though current testing suggest that defining
++             *  a method for seralized execution is enough to prevent
++             *  synchronization issues, consider using explicit mutexes
++             *  for further protection.
++             */
++            Method (WQAA, 1, Serialized)
++            {
++                INIT (2)
++                GUID (0)
++                INST (Arg0)
++                EXEC () 
++                Return (OBUF())
++            }
++
++            Method (WMBA, 3, Serialized)
++            {
++                INIT (1)
++                GUID (20)
++                INST (Arg0)
++                MTID (Arg1)
++                IBUF (Arg2)
++                EXEC ()
++                Return (OBUF())
++            }
++
++            Method (WQBC, 1, Serialized)
++            {
++                INIT (2)
++                GUID (60)
++                INST (Arg0)
++                EXEC ()
++                Return (OBUF())
++            }
++
++            /* Like all other well know entry points, we could delegate
++             * the below to the base firmware also.  But, why ask for a 
++             * static list (that too this big) and go through layer after
++             * layer to get it?  Also, port i/o is not a good idea for this
++             * much data transfer.  Luckily, this is the only place that appear
++             * to transfer so much data.
++             */ 
++            Name (WQMO, Buffer (0x06CD)
++            {
++                /* 0000 */    0x46, 0x4F, 0x4D, 0x42, 0x01, 0x00, 0x00, 0x00,
++                /* 0008 */    0xBD, 0x06, 0x00, 0x00, 0x66, 0x23, 0x00, 0x00,
++                /* 0010 */    0x44, 0x53, 0x00, 0x01, 0x1A, 0x7D, 0xDA, 0x54,
++                /* 0018 */    0x98, 0x40, 0x91, 0x00, 0x01, 0x06, 0x18, 0x42,
++                /* 0020 */    0x10, 0x11, 0x10, 0x22, 0x21, 0x30, 0x34, 0x32,
++                /* 0028 */    0x0B, 0x03, 0x63, 0x04, 0x8A, 0x0B, 0x21, 0x07,
++                /* 0030 */    0x10, 0x12, 0x07, 0x85, 0x12, 0x02, 0xA1, 0xFE,
++                /* 0038 */    0x04, 0xF2, 0x2B, 0x00, 0xA1, 0x43, 0x01, 0x32,
++                /* 0040 */    0x05, 0x18, 0x14, 0xE0, 0x14, 0x41, 0x04, 0xBD,
++                /* 0048 */    0x0A, 0xB0, 0x29, 0xC0, 0xA4, 0x00, 0x8B, 0x02,
++                /* 0050 */    0xB4, 0x0B, 0xB0, 0x2C, 0x40, 0xB7, 0x00, 0xE9,
++                /* 0058 */    0xB0, 0x44, 0x24, 0x38, 0x4A, 0x0C, 0x38, 0x4A,
++                /* 0060 */    0x27, 0xB6, 0x70, 0xC3, 0x06, 0x2F, 0x14, 0x45,
++                /* 0068 */    0x33, 0x88, 0x92, 0xA0, 0x72, 0x01, 0xBE, 0x11,
++                /* 0070 */    0x04, 0x5E, 0xAE, 0x00, 0xC9, 0x13, 0x90, 0x66,
++                /* 0078 */    0x01, 0x86, 0x05, 0x58, 0x17, 0x20, 0x7B, 0x08,
++                /* 0080 */    0x54, 0xEA, 0x10, 0x50, 0x72, 0x86, 0x80, 0x1A,
++                /* 0088 */    0x40, 0xAB, 0x13, 0x10, 0x7E, 0xA5, 0x53, 0x42,
++                /* 0090 */    0x12, 0x84, 0x33, 0x56, 0xF1, 0xF8, 0x9A, 0x45,
++                /* 0098 */    0xD3, 0x73, 0x92, 0x73, 0x0C, 0x39, 0x1E, 0x17,
++                /* 00A0 */    0x7A, 0x10, 0x3C, 0x90, 0x02, 0x10, 0x16, 0x1E,
++                /* 00A8 */    0x42, 0x11, 0x60, 0x50, 0x12, 0xC6, 0x42, 0x5D,
++                /* 00B0 */    0x8C, 0x1A, 0x35, 0x52, 0x36, 0x20, 0x43, 0x94,
++                /* 00B8 */    0x36, 0x6A, 0xF4, 0x80, 0xCE, 0xEF, 0x48, 0xCE,
++                /* 00C0 */    0xEE, 0xE8, 0x8E, 0x24, 0x81, 0x51, 0x8F, 0xE9,
++                /* 00C8 */    0x18, 0x0B, 0x9B, 0x91, 0x50, 0x63, 0x34, 0x07,
++                /* 00D0 */    0x45, 0xA0, 0x71, 0x83, 0xB6, 0x44, 0x58, 0x8D,
++                /* 00D8 */    0x2B, 0xF6, 0x99, 0x59, 0xF8, 0xB0, 0x84, 0x71,
++                /* 00E0 */    0x04, 0x07, 0x96, 0xA0, 0x51, 0x34, 0xCD, 0xF1,
++                /* 00E8 */    0x6C, 0x43, 0x24, 0x38, 0x88, 0xD0, 0x18, 0x19,
++                /* 00F0 */    0x10, 0xF2, 0x3C, 0x6C, 0x81, 0x1E, 0x79, 0x02,
++                /* 00F8 */    0xBB, 0x47, 0x94, 0x42, 0x04, 0xCD, 0xF7, 0x44,
++                /* 0100 */    0x6A, 0x14, 0xA0, 0x0D, 0x43, 0xB6, 0xCE, 0x06,
++                /* 0108 */    0x1A, 0x6A, 0xAC, 0xC6, 0x50, 0x04, 0x11, 0x21,
++                /* 0110 */    0x68, 0x14, 0x83, 0x45, 0x08, 0x15, 0xE2, 0xFF,
++                /* 0118 */    0x1F, 0x25, 0xEA, 0x29, 0x05, 0x89, 0x5A, 0x19,
++                /* 0120 */    0x88, 0xD0, 0x82, 0x19, 0x81, 0xD9, 0x1F, 0x04,
++                /* 0128 */    0x89, 0x71, 0x66, 0xD0, 0x61, 0xC1, 0x32, 0x40,
++                /* 0130 */    0x64, 0x44, 0xD0, 0x68, 0xD8, 0x59, 0xC0, 0xC3,
++                /* 0138 */    0xF1, 0x4C, 0x9A, 0x9F, 0x98, 0x06, 0x67, 0x82,
++                /* 0140 */    0xB1, 0x21, 0xA4, 0x01, 0x42, 0xA2, 0x0E, 0x0E,
++                /* 0148 */    0x94, 0xC0, 0x52, 0x06, 0x4E, 0x6C, 0x8F, 0x4B,
++                /* 0150 */    0xE3, 0x3B, 0xE3, 0xA8, 0x21, 0x4E, 0xFD, 0xCC,
++                /* 0158 */    0xFC, 0x8F, 0xF0, 0x16, 0x7C, 0x04, 0xE0, 0x63,
++                /* 0160 */    0xF0, 0x60, 0x0F, 0x21, 0xE0, 0x11, 0xB2, 0x33,
++                /* 0168 */    0x80, 0x01, 0xF1, 0xDE, 0x27, 0x4D, 0xE6, 0xE2,
++                /* 0170 */    0xB3, 0x00, 0x8C, 0xE1, 0xC3, 0x35, 0x3E, 0x0A,
++                /* 0178 */    0x8D, 0x87, 0x9D, 0x0F, 0xD8, 0xB8, 0x38, 0xBC,
++                /* 0180 */    0x0F, 0x05, 0x27, 0x5C, 0x2C, 0x88, 0x02, 0x40,
++                /* 0188 */    0x48, 0xD6, 0xF9, 0x00, 0x3D, 0xEB, 0x63, 0x0B,
++                /* 0190 */    0xF8, 0x30, 0xD0, 0xEC, 0x1D, 0x82, 0x10, 0xBC,
++                /* 0198 */    0x08, 0xF8, 0xE8, 0xE0, 0xE3, 0x86, 0xC7, 0xFD,
++                /* 01A0 */    0xBC, 0x01, 0x86, 0xC3, 0x81, 0x87, 0xE3, 0xD3,
++                /* 01A8 */    0x06, 0x70, 0x19, 0x01, 0x97, 0xF6, 0xA4, 0x30,
++                /* 01B0 */    0x81, 0x24, 0x3F, 0x01, 0x24, 0x06, 0x06, 0x75,
++                /* 01B8 */    0x20, 0xF0, 0xC1, 0x02, 0xAE, 0x24, 0x38, 0xD4,
++                /* 01C0 */    0xF0, 0x3C, 0xB1, 0x07, 0x84, 0xFF, 0xFF, 0x51,
++                /* 01C8 */    0x9E, 0xC8, 0x8B, 0x81, 0xA7, 0xFF, 0x18, 0x00,
++                /* 01D0 */    0xE3, 0x80, 0xE0, 0x69, 0x9D, 0x94, 0x6F, 0x1E,
++                /* 01D8 */    0x0F, 0x12, 0x1E, 0x54, 0x98, 0x04, 0x3E, 0x25,
++                /* 01E0 */    0x30, 0x34, 0x7E, 0xDC, 0x00, 0xEB, 0xA8, 0xF1,
++                /* 01E8 */    0x07, 0x04, 0x78, 0x27, 0x89, 0xF3, 0xEB, 0x73,
++                /* 01F0 */    0x00, 0x3A, 0x34, 0x9C, 0x22, 0x03, 0x79, 0x0D,
++                /* 01F8 */    0x38, 0xE9, 0x53, 0xF2, 0xF8, 0x12, 0xF8, 0xCC,
++                /* 0200 */    0x01, 0xFB, 0x6E, 0x70, 0x18, 0x07, 0x13, 0x22,
++                /* 0208 */    0xC2, 0x7B, 0xC0, 0x53, 0x87, 0xEF, 0x1A, 0x8F,
++                /* 0210 */    0x02, 0x81, 0x22, 0xF4, 0x76, 0xE6, 0xA0, 0xA7,
++                /* 0218 */    0x10, 0xA3, 0x44, 0x3B, 0xAB, 0x30, 0x0F, 0x1C,
++                /* 0220 */    0x51, 0x7C, 0xE4, 0x30, 0xC2, 0xBB, 0x87, 0xEF,
++                /* 0228 */    0x04, 0x0F, 0x20, 0xAD, 0x4D, 0x4E, 0xB8, 0x81,
++                /* 0230 */    0x9E, 0x39, 0x58, 0xB4, 0x33, 0x8B, 0x2C, 0x80,
++                /* 0238 */    0x28, 0xD2, 0x68, 0x50, 0x67, 0x04, 0x9F, 0x06,
++                /* 0240 */    0x3C, 0xAD, 0xA7, 0x18, 0x1F, 0x25, 0x0C, 0x72,
++                /* 0248 */    0x86, 0x07, 0xF6, 0x9C, 0xF0, 0x18, 0xE0, 0x01,
++                /* 0250 */    0xB3, 0xFB, 0x81, 0x8F, 0x13, 0x3E, 0x17, 0xE0,
++                /* 0258 */    0x5D, 0x03, 0x6A, 0x86, 0x3E, 0x6C, 0xC0, 0x39,
++                /* 0260 */    0x74, 0xE0, 0x4F, 0x13, 0xF8, 0x83, 0x05, 0x7E,
++                /* 0268 */    0x3C, 0xBE, 0xE6, 0xB0, 0x09, 0x27, 0xB0, 0xFC,
++                /* 0270 */    0x41, 0xA0, 0x46, 0x66, 0x68, 0xCF, 0xF2, 0xB4,
++                /* 0278 */    0x5E, 0x03, 0x7C, 0xDA, 0x31, 0x81, 0xCF, 0x1B,
++                /* 0280 */    0xFE, 0xFF, 0xFF, 0x73, 0x3C, 0x1E, 0xF0, 0x2B,
++                /* 0288 */    0x3E, 0x5D, 0x90, 0xBB, 0x82, 0xE7, 0xEB, 0xB3,
++                /* 0290 */    0x0B, 0xB3, 0x31, 0x1E, 0xD4, 0x28, 0x7C, 0xC0,
++                /* 0298 */    0xC1, 0x9D, 0x5D, 0x7C, 0x04, 0xF0, 0xD9, 0x05,
++                /* 02A0 */    0x78, 0x4E, 0xE2, 0x59, 0x02, 0xBC, 0x87, 0x00,
++                /* 02A8 */    0x9F, 0x48, 0xE2, 0x3D, 0x6C, 0xC1, 0x18, 0x31,
++                /* 02B0 */    0x1E, 0xF2, 0x8C, 0xAB, 0x1E, 0x86, 0x2E, 0x02,
++                /* 02B8 */    0x56, 0x77, 0x5F, 0x41, 0x1D, 0xBD, 0xC0, 0x04,
++                /* 02C0 */    0xF5, 0x9A, 0x81, 0x3B, 0xBD, 0x00, 0x9F, 0x53,
++                /* 02C8 */    0x16, 0xBC, 0xFF, 0xFF, 0x29, 0x0B, 0xB8, 0x5F,
++                /* 02D0 */    0x15, 0xF8, 0x11, 0x05, 0x0C, 0x90, 0x9D, 0x9D,
++                /* 02D8 */    0x4E, 0x84, 0xF0, 0x5E, 0xF2, 0x1C, 0xE2, 0xDB,
++                /* 02E0 */    0x95, 0x0F, 0x26, 0x41, 0x9E, 0x03, 0x22, 0x3C,
++                /* 02E8 */    0x65, 0xF1, 0xFB, 0x40, 0x94, 0x98, 0x07, 0x14,
++                /* 02F0 */    0x29, 0x8A, 0x11, 0x83, 0x3C, 0x61, 0xF9, 0x7A,
++                /* 02F8 */    0x12, 0xC3, 0xD0, 0xC1, 0xC2, 0x85, 0x8F, 0xF0,
++                /* 0300 */    0x94, 0x05, 0x58, 0xBC, 0x64, 0x61, 0x4E, 0x59,
++                /* 0308 */    0x30, 0xDF, 0x06, 0x3E, 0x65, 0x81, 0xE3, 0xFF,
++                /* 0310 */    0x7F, 0xCA, 0x02, 0xD7, 0xB8, 0x9F, 0xB2, 0x80,
++                /* 0318 */    0x99, 0xF4, 0xA7, 0x80, 0x4F, 0x35, 0x7E, 0x02,
++                /* 0320 */    0x28, 0xFA, 0xC1, 0x82, 0xC2, 0xF8, 0x94, 0x05,
++                /* 0328 */    0xB8, 0x92, 0x77, 0x40, 0x00, 0xCD, 0xD9, 0xC9,
++                /* 0330 */    0xB7, 0x05, 0x83, 0x1D, 0xB3, 0x2F, 0x19, 0x3E,
++                /* 0338 */    0x25, 0x82, 0xE1, 0x90, 0xE1, 0x3B, 0xD5, 0xA1,
++                /* 0340 */    0x3C, 0x72, 0x3C, 0x05, 0xF8, 0x88, 0x05, 0xF6,
++                /* 0348 */    0x38, 0xC7, 0x00, 0x1D, 0x57, 0x7C, 0xC4, 0xF2,
++                /* 0350 */    0xFF, 0xFF, 0x88, 0x05, 0x70, 0xE3, 0x00, 0x82,
++                /* 0358 */    0x3F, 0x75, 0xC0, 0xBA, 0x07, 0x84, 0xF5, 0xA1,
++                /* 0360 */    0x03, 0x78, 0xC8, 0x7E, 0x08, 0xE8, 0x0C, 0x63,
++                /* 0368 */    0xC9, 0x20, 0xB2, 0x71, 0xAE, 0xA1, 0x63, 0xB4,
++                /* 0370 */    0xF8, 0x85, 0xEA, 0xA6, 0x10, 0xFB, 0x60, 0xB8,
++                /* 0378 */    0x6C, 0x20, 0x81, 0x7A, 0xB8, 0x16, 0x4C, 0x21,
++                /* 0380 */    0x51, 0x34, 0x1A, 0x8D, 0x81, 0x09, 0x8C, 0xE0,
++                /* 0388 */    0x0C, 0x62, 0x40, 0x67, 0x84, 0xD0, 0xA1, 0x0C,
++                /* 0390 */    0xA7, 0xE2, 0x3C, 0x84, 0xFA, 0xFF, 0x13, 0x0C,
++                /* 0398 */    0x75, 0x63, 0xA2, 0xB3, 0xF3, 0xFC, 0xF9, 0x6D,
++                /* 03A0 */    0xC4, 0x27, 0x02, 0x03, 0xFB, 0x0A, 0xF1, 0x96,
++                /* 03A8 */    0x01, 0x96, 0x61, 0x79, 0x71, 0x4F, 0x00, 0xC7,
++                /* 03B0 */    0x78, 0x92, 0x09, 0xAA, 0x39, 0xD6, 0xA0, 0xE6,
++                /* 03B8 */    0xE0, 0xAB, 0xC0, 0x1B, 0x99, 0x09, 0x7C, 0x05,
++                /* 03C0 */    0x03, 0xDB, 0x69, 0x06, 0xA3, 0xEF, 0x4E, 0x00,
++                /* 03C8 */    0x0A, 0x20, 0x1F, 0x05, 0x7C, 0x5F, 0x7E, 0x1B,
++                /* 03D0 */    0x60, 0xB3, 0x78, 0x65, 0x36, 0x9A, 0xCF, 0x9F,
++                /* 03D8 */    0x88, 0xA1, 0xA3, 0xC4, 0x0C, 0x9D, 0x82, 0x78,
++                /* 03E0 */    0xE8, 0x0E, 0x3A, 0x74, 0xF4, 0x71, 0xC0, 0x27,
++                /* 03E8 */    0x2B, 0x5C, 0xB0, 0xC3, 0x17, 0xB4, 0xC9, 0x1D,
++                /* 03F0 */    0xED, 0x89, 0x79, 0x16, 0x9E, 0x27, 0x6E, 0xEE,
++                /* 03F8 */    0x60, 0x3A, 0x22, 0xC1, 0x18, 0x3C, 0x66, 0xF2,
++                /* 0400 */    0x60, 0x16, 0x38, 0x79, 0x50, 0xFC, 0xFF, 0x27,
++                /* 0408 */    0x0F, 0x13, 0x1E, 0x13, 0xF6, 0x70, 0x48, 0x0F,
++                /* 0410 */    0x1D, 0x1E, 0x19, 0x1F, 0xA7, 0x4F, 0x3F, 0x0C,
++                /* 0418 */    0xFB, 0x74, 0xCE, 0xA5, 0xE8, 0x19, 0xE9, 0x8E,
++                /* 0420 */    0xF1, 0xCC, 0x85, 0x81, 0xF5, 0xC8, 0x39, 0xAC,
++                /* 0428 */    0xD1, 0xC2, 0x1E, 0xF0, 0x73, 0x88, 0xEF, 0x30,
++                /* 0430 */    0x3E, 0xF0, 0x30, 0x58, 0x9F, 0x5E, 0xC0, 0x71,
++                /* 0438 */    0xFC, 0x82, 0x7F, 0x1A, 0x00, 0xCF, 0x01, 0xC4,
++                /* 0440 */    0x63, 0x78, 0x01, 0xE1, 0x04, 0x73, 0x9D, 0xA6,
++                /* 0448 */    0x50, 0xF1, 0x4F, 0x53, 0x80, 0xF6, 0xFF, 0xFF,
++                /* 0450 */    0x69, 0x0A, 0xE6, 0x61, 0xD0, 0x67, 0x08, 0x4F,
++                /* 0458 */    0x25, 0xC8, 0xEB, 0xD3, 0xAB, 0xA0, 0x31, 0x9E,
++                /* 0460 */    0x1B, 0x1E, 0xA8, 0x8E, 0x27, 0x4A, 0x88, 0x50,
++                /* 0468 */    0x91, 0xCE, 0xE0, 0x55, 0x8A, 0x1F, 0xA4, 0xA2,
++                /* 0470 */    0x04, 0x09, 0xF5, 0x1A, 0xF0, 0x34, 0xE8, 0x2B,
++                /* 0478 */    0x44, 0x94, 0xA8, 0x21, 0x23, 0xBE, 0x58, 0xF9,
++                /* 0480 */    0x34, 0xC5, 0x22, 0x9D, 0xA6, 0x00, 0x9A, 0x9C,
++                /* 0488 */    0x18, 0xF0, 0xA7, 0x29, 0x58, 0xB7, 0x04, 0xCF,
++                /* 0490 */    0xEE, 0x11, 0x83, 0x9F, 0xA7, 0xC0, 0xFD, 0xFF,
++                /* 0498 */    0x3F, 0x4F, 0xE1, 0xF2, 0x9C, 0xA7, 0x68, 0x96,
++                /* 04A0 */    0xF3, 0x14, 0xEA, 0x7C, 0xE1, 0x24, 0x4B, 0x15,
++                /* 04A8 */    0xFE, 0x23, 0x85, 0x11, 0x8E, 0x87, 0x13, 0x58,
++                /* 04B0 */    0xFF, 0x89, 0x0A, 0xA5, 0x9C, 0x42, 0xCA, 0xCE,
++                /* 04B8 */    0x41, 0x28, 0x2D, 0xE7, 0x20, 0x0A, 0xE2, 0x73,
++                /* 04C0 */    0x10, 0x9C, 0x13, 0x15, 0x36, 0xD9, 0x89, 0x0A,
++                /* 04C8 */    0xFA, 0x15, 0x07, 0x77, 0x41, 0x86, 0x3D, 0x2F,
++                /* 04D0 */    0xB6, 0xBE, 0x77, 0x2A, 0xC0, 0x92, 0xBC, 0xC9,
++                /* 04D8 */    0xA3, 0x04, 0x4D, 0x9E, 0x82, 0x78, 0xF2, 0xBE,
++                /* 04E0 */    0x0D, 0xF9, 0x4E, 0x05, 0x37, 0xDC, 0x9D, 0x0A,
++                /* 04E8 */    0x14, 0xC3, 0x07, 0xC3, 0xFF, 0x7F, 0xF8, 0xB0,
++                /* 04F0 */    0x6F, 0x55, 0x80, 0x9B, 0xE0, 0xB7, 0x2A, 0x40,
++                /* 04F8 */    0xCF, 0x00, 0x9F, 0x07, 0xC0, 0x72, 0x0D, 0xE1,
++                /* 0500 */    0xD7, 0x2A, 0xDF, 0x08, 0x30, 0x07, 0x82, 0x67,
++                /* 0508 */    0x1E, 0x63, 0x62, 0x2E, 0x33, 0x7A, 0x2B, 0xF8,
++                /* 0510 */    0x0A, 0xE5, 0x25, 0x4A, 0x1E, 0x0C, 0xEA, 0x6E,
++                /* 0518 */    0x05, 0xF6, 0xFF, 0xFF, 0xDD, 0x0A, 0xD8, 0x5E,
++                /* 0520 */    0xB4, 0xC1, 0x73, 0x57, 0x78, 0x14, 0xF2, 0xA1,
++                /* 0528 */    0xC0, 0x37, 0x2B, 0xF8, 0xC3, 0x38, 0x82, 0xC3,
++                /* 0530 */    0x8F, 0xF0, 0xDC, 0x6B, 0x84, 0xE7, 0x2A, 0x5F,
++                /* 0538 */    0x7B, 0xC1, 0x1D, 0xFB, 0x39, 0xA2, 0x43, 0x80,
++                /* 0540 */    0x6F, 0x56, 0x80, 0xE9, 0xFF, 0xFF, 0xCD, 0x0A,
++                /* 0548 */    0xAC, 0x6F, 0x10, 0x9F, 0x6B, 0xE0, 0x06, 0x3E,
++                /* 0550 */    0x97, 0xD0, 0xEB, 0x3F, 0xF0, 0xBC, 0x30, 0x82,
++                /* 0558 */    0xE7, 0x18, 0xE1, 0xDB, 0x28, 0xEE, 0x84, 0x03,
++                /* 0560 */    0x36, 0xA3, 0x27, 0x1C, 0x04, 0x38, 0xFE, 0x66,
++                /* 0568 */    0x06, 0x6B, 0x0C, 0x7D, 0xA2, 0xE8, 0x8C, 0x81,
++                /* 0570 */    0xBB, 0x9A, 0x01, 0x8F, 0x1B, 0x91, 0x87, 0xC0,
++                /* 0578 */    0x4F, 0x13, 0x1E, 0x02, 0x1F, 0x40, 0xAB, 0xD3,
++                /* 0580 */    0x23, 0x67, 0x9F, 0x53, 0xC2, 0x1D, 0x07, 0xF8,
++                /* 0588 */    0x94, 0x70, 0x03, 0xE0, 0xFF, 0x7F, 0x82, 0x01,
++                /* 0590 */    0x6E, 0x9C, 0xA8, 0xE8, 0x37, 0x4E, 0x80, 0x10,
++                /* 0598 */    0x20, 0x11, 0x5E, 0x35, 0x7D, 0x88, 0x79, 0xD0,
++                /* 05A0 */    0xF4, 0x60, 0xDE, 0x62, 0x8C, 0xF3, 0xD6, 0xF0,
++                /* 05A8 */    0xB2, 0xE9, 0x83, 0x8C, 0xF1, 0xC2, 0x44, 0x39,
++                /* 05B0 */    0x86, 0x43, 0x8A, 0x19, 0xC5, 0x88, 0x41, 0x42,
++                /* 05B8 */    0xBC, 0x71, 0x1A, 0xC3, 0xA8, 0xC1, 0xC2, 0x45,
++                /* 05C0 */    0x8F, 0xF0, 0x20, 0xC3, 0xE2, 0xDC, 0x38, 0x01,
++                /* 05C8 */    0x21, 0xFF, 0xFF, 0x83, 0x0C, 0x60, 0xE5, 0x68,
++                /* 05D0 */    0xE6, 0x83, 0x08, 0xFC, 0xE3, 0xC3, 0x9B, 0x42,
++                /* 05D8 */    0xF0, 0xA7, 0x10, 0x60, 0x22, 0xFE, 0xBE, 0x49,
++                /* 05E0 */    0x85, 0xDF, 0x37, 0x51, 0x63, 0xB4, 0xF8, 0x85,
++                /* 05E8 */    0xEA, 0xFA, 0xEC, 0xB9, 0x78, 0xDA, 0x96, 0x7D,
++                /* 05F0 */    0xDB, 0x44, 0x09, 0xA6, 0x90, 0xA8, 0x13, 0x22,
++                /* 05F8 */    0x4A, 0xC6, 0x09, 0x91, 0x82, 0x18, 0xD0, 0x19,
++                /* 0600 */    0x6F, 0x9B, 0x90, 0x43, 0xDD, 0x36, 0xA1, 0xDF,
++                /* 0608 */    0x1E, 0x9E, 0xE1, 0xC1, 0x79, 0xD6, 0x04, 0xDB,
++                /* 0610 */    0xFF, 0xFF, 0xAC, 0x09, 0x4C, 0xA5, 0x0D, 0x1D,
++                /* 0618 */    0x25, 0x66, 0xE8, 0x14, 0xC4, 0xF7, 0x56, 0x38,
++                /* 0620 */    0x87, 0x28, 0x7C, 0xB0, 0xB3, 0x26, 0x28, 0x4E,
++                /* 0628 */    0x4C, 0xE0, 0x99, 0x3B, 0xF6, 0xA4, 0x09, 0xD8,
++                /* 0630 */    0x89, 0x7C, 0xD2, 0x04, 0x82, 0xFF, 0xFF, 0xE3,
++                /* 0638 */    0x18, 0xD8, 0x8F, 0x54, 0xB8, 0xD3, 0x00, 0xDC,
++                /* 0640 */    0x03, 0x88, 0xC7, 0x70, 0x9C, 0xEF, 0x4F, 0x06,
++                /* 0648 */    0x79, 0x1E, 0xF1, 0x81, 0xC0, 0x47, 0x19, 0xA6,
++                /* 0650 */    0xD0, 0xA6, 0x4F, 0x8D, 0x46, 0xAD, 0x1A, 0x94,
++                /* 0658 */    0xA9, 0x51, 0xA6, 0x41, 0xAD, 0x3E, 0x95, 0x1A,
++                /* 0660 */    0x33, 0x76, 0xC0, 0xB0, 0x88, 0xB5, 0x6A, 0xB0,
++                /* 0668 */    0x0E, 0xB5, 0x5E, 0x81, 0x58, 0xD2, 0x13, 0x43,
++                /* 0670 */    0x20, 0x16, 0xE5, 0x01, 0x84, 0xC5, 0x35, 0x01,
++                /* 0678 */    0xC2, 0x84, 0xAF, 0x4A, 0x20, 0x8E, 0x0D, 0x42,
++                /* 0680 */    0xC5, 0xEA, 0x80, 0x68, 0x64, 0x88, 0x06, 0x11,
++                /* 0688 */    0x90, 0x43, 0xF8, 0x00, 0x62, 0x91, 0x40, 0x04,
++                /* 0690 */    0xE4, 0xC8, 0x4A, 0x40, 0x98, 0x60, 0x27, 0x20,
++                /* 0698 */    0x2C, 0xF3, 0xAB, 0x4A, 0x80, 0x16, 0x60, 0x05,
++                /* 06A0 */    0x88, 0xE9, 0xD1, 0x02, 0xC4, 0xD4, 0x81, 0x08,
++                /* 06A8 */    0xC8, 0x29, 0xCC, 0x80, 0x30, 0x0D, 0xAB, 0x12,
++                /* 06B0 */    0x88, 0xF3, 0x83, 0xD0, 0xD4, 0x76, 0x40, 0x98,
++                /* 06B8 */    0x66, 0x3D, 0x20, 0x2C, 0xA9, 0x1F, 0x70, 0x16,
++                /* 06C0 */    0x1B, 0x44, 0x40, 0x56, 0x60, 0x08, 0x88, 0xE9,
++                /* 06C8 */    0x01, 0x11, 0x90, 0xFF, 0xFF
++            })
++
++            Method (WMBD, 3, Serialized)
++            {
++                INIT (1)
++                GUID (100)
++                INST (Arg0)
++                MTID (Arg1)
++                IBUF (Arg2)
++                EXEC ()
++                Return (OBUF())
++            }
++
++        }
++    }
++
++    /*  Wire GPE events to notify OEM 
++     *  added value events.
++     */
++    Scope (\_GPE)
++    {
++        Method (_L18, 0, Serialized)
++        {
++            Notify (\_SB.AMW0, 0xD0) 
++        }
++    }
++}
++
+diff
+--- /dev/null 
++++ b/tools/firmware/hvmloader/acpi/ssdt_hp_6930p_elitebook.asl        2009-04-01 16:35:21.000000000 -0400
+@@ -0,0 +1,1309 @@
++/*
++ * ssdt_hp_6930p_elitebook.asl
++ *
++ * Copyright (c) 2009  Kamala Narasimhan
++ * Copyright (c) 2009  Citrix Systems, Inc.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++ */
++
++/* SSDT for exposing HP 6930p elitebook specific value add functionalities like  
++ * hotkeys, special buttons (e.g., wireless button, presentation button etc.).
++ */
++
++/* IMPLEMENTATION DETAILS:  OEM value add features are generally exposed through
++ * WMI psuedo device objects.  For our guests to benefit from such value add, we
++ * expose a psuedo device object in our vACPI layer also.  This psuedo object is 
++ * similar to the underlying base firmware object in the sense we expose the 
++ * same _WDG method which describes the WMI methods, data objects and events 
++ * provided by the WMI psuedo object.  Guest wmi wrapper driver which automatically
++ * gets loaded upon identifying this WMI pseudo device object, calls _WDG to get 
++ * known entry points and calls those entry points for further information exchange.
++ * Reference - http://www.microsoft.com/whdc/system/pnppwr/wmi/wmi-acpi.mspx
++ */
++
++/* COMMUNICATION DETAILS -
++ * Command port - 0x96 
++ *                Writes to this port describe what type of information is about
++ *                to be exchanged.  E.g., guid, input argument transfer etc.
++ * Data Port    - 0x98 and 0x9A for byte and dword data transfer respectively.
++ *                Communicates data to and from the backend.  E.g. Input buffer values
++ *                get written to this port and output buffer values are read from this 
++ *                port.
++ */
++
++DefinitionBlock ("SSDT_HP_6930P_ELITEBOOK.aml", "SSDT", 2, "Xen", "HVM", 0)
++{
++    Scope (\_SB)
++    {
++
++        OperationRegion (HP1, SystemIO, 0x96, 0x01)
++        Field (HP1, ByteAcc, NoLock, Preserve)
++        {
++            P96,   8
++        }
++
++        OperationRegion (HP2, SystemIO, 0x98, 0x01)
++        Field (HP2, ByteAcc, NoLock, Preserve)
++        {
++            P98,  8
++        }
++
++        OperationRegion (HP3, SystemIO, 0x9A, 0x04)
++        Field (HP3, DWordAcc, NoLock, Preserve)
++        {
++            P9A,  32
++        }
++
++        Device (WMID)
++        {
++            /* Exposing a pseudo device with HID PNP0C14 will 
++             * result in Windows guest loading their WMI wrapper
++             * driver - wmiacpi.sys
++             */ 
++            Name (_HID, EisaId ("PNP0C14"))
++            Name (_UID, 0x00)
++
++            /* Following list of data blocks exposed by _WDG is same as the 
++             * one provided by the underlying firmware.  Refer to -
++             * http://www.microsoft.com/whdc/system/pnppwr/wmi/wmi-acpi.mspx
++             * for further information about _WDG and what it exposes.
++             */ 
++            Name (_WDG, Buffer (0xF0)
++            {
++                /* Data Block 1 */
++                /* GUID */
++                0x34, 0xF0, 0xB7, 0x5F, 0x63, 0x2C, 0xE9, 0x45, 
++                0xBE, 0x91, 0x3D, 0x44, 0xE2, 0xC7, 0x07, 0xE4, 
++                0x41, 0x41, /* Object ID - WMAA */ 
++                0x01, /* Instance count */
++                0x02, /* Flag - Method */
++
++                /* Data Block 2 */
++                /* GUID */
++                0x79, 0x42, 0xF2, 0x95, 0x7B, 0x4D, 0x34, 0x43,
++                0x93, 0x87, 0xAC, 0xCD,  0xC6, 0x7E, 0xF6, 0x1C,
++                0x80, 0x00, /* Event notification ID */
++                0x01, /* Instance count */
++                0x08, /* Flag - Event */
++
++                /* Data Block 3 */
++                /* GUID */
++                0x18, 0x43, 0x81, 0x2B, 0xE8, 0x4B, 0x07, 0x47,
++                0x9D, 0x84, 0xA1, 0x90, 0xA8, 0x59, 0xB5, 0xD0,
++                0xA0, 0x00, /* Event notification ID */
++                0x01, /* Instance count */
++                0x08, /* Flag - Event */
++
++                /* Data Block 4 */
++                /* GUID */
++                0x21, 0x12, 0x90, 0x05, 0x66, 0xD5, 0xD1, 0x11, 
++                0xB2, 0xF0, 0x00, 0xA0, 0xC9, 0x06, 0x29, 0x10,
++                0x41, 0x42, /* Object ID - WQAB */
++                0x01, /* Instance count */
++                0x00, /* Flag - Data */
++
++                /* Data Block 5 */
++                /* GUID */
++                0xEB, 0x91, 0x4C, 0x1F, 0x5C, 0xDC, 0x0B, 0x46,
++                0x95, 0x1D, 0xC7, 0xCB, 0x9B, 0x4B, 0x8D, 0x5E,
++                0x42, 0x41, /* Object ID - WMBA */
++                0x01, /* Instance count */
++                0x02, /* Flag - Method */
++
++                /* Data Block 6 */
++                /* GUID */
++                0x49, 0x4B, 0x11, 0x2D, 0xFB, 0x2D, 0x30, 0x41,
++                0xB8, 0xFE, 0x4A, 0x3C, 0x09, 0xE7, 0x51, 0x33, 
++                0x42, 0x43, /* Object ID - WQBC */
++                0x74, /* Instance count */
++                0x00, /* Flag - Data */ 
++
++                /* Data Block 7 */
++                /* GUID */
++                0xE3, 0x08, 0x8D, 0x98, 0xF4, 0x68, 0x35, 0x4C,
++                0xAF, 0x3E, 0x6A, 0x1B, 0x81, 0x06, 0xF8, 0x3C,
++                0x42, 0x44, /* Object ID - WQBD */
++                0x19, /* Instance count */
++                0x00, /* Flag - Data */ 
++
++                /* Data Block 8 */
++                /* GUID */
++                0x46, 0x97, 0xEA, 0x14, 0x1F, 0xCE, 0x98, 0x40,
++                0xA0, 0xE0, 0x70, 0x45, 0xCB, 0x4D, 0xA7, 0x45,
++                0x42, 0x45, /* Object ID - WQBE */
++                0x01, /* Instance count */
++                0x00, /* Flag - Data */
++
++                /* Data Block 9 */
++                /* GUID */
++                0x28, 0x20, 0x2F, 0x32, 0x84, 0x0F, 0x01, 0x49,
++                0x98, 0x8E, 0x01, 0x51, 0x76, 0x04, 0x9E, 0x2D,
++                0x42, 0x46, /* Object ID - WQBF */
++                0x01, /* Instance count */
++                0x00, /* Flag  Data */
++
++                /* Data Block 10 */
++                /* GUID */
++                0x3D, 0xDE, 0x32, 0x82, 0x3D, 0x66, 0x27, 0x43,
++                0xA8, 0xF4, 0xE2, 0x93, 0xAD, 0xB9, 0xBF, 0x05,
++                0x42, 0x47, /* Object ID - WQBG */
++                0x01, /* Instance count */
++                0x00, /* Flag - Data */
++
++                /* Data Block 11 */
++                /* GUID */
++                0x36, 0x64, 0x1F, 0x8F, 0x42, 0x9F, 0xC8, 0x42, 
++                0xBA, 0xDC, 0x0E, 0x94, 0x24, 0xF2, 0x0C, 0x9A,
++                0x42, 0x48, /* Object ID - WQBH */
++                0x00, /* Instance count */
++                0x00, /* Flag - Data */
++
++                /* Data Block 12 */
++                /* GUID */
++                0x35, 0x64, 0x1F, 0x8F, 0x42, 0x9F, 0xC8, 0x42,
++                0xBA, 0xDC, 0x0E, 0x94, 0x24, 0xF2, 0x0C, 0x9A,
++                0x42, 0x49, /* Object ID - WQBI */
++                0x00, /* Instance count */
++                0x00 /* Flag - Data */
++            })
++
++            /* Initialize cmd port and communicate invocation type
++             * i.e., method execution or query or set object 
++             */
++            Method (INIT, 1, Serialized)
++            {
++                Store (100, P96)
++                Store (Arg0, P98)
++            }
++
++            /* Pass the guid pertaining to the operation */
++            Method (GUID, 1, Serialized)
++            {
++                Store (101, P96)
++                Store (0x0, Local0)
++                Store (Arg0, Local1)
++
++                While ( LLess(Local0,16) ) 
++                {
++                    Add(Local1, Local0, Local2)
++                    Store (DerefOf(Index (_WDG, Local2)), P98 ) 
++                    Increment( Local0 )
++                }
++            }
++
++            /* Pass instance # for the associated object pertaining
++             * to the invocation.
++             */
++            Method (INST, 1, Serialized)
++            {
++                Store(102, P96)
++                Store(Arg0, P9A)
++            }
++
++            /* Pass method id relevant to the method about to be
++             * executed.
++             */
++            Method (MTID, 1, Serialized)
++            {
++                Store(103, P96)
++                Store(Arg0, P9A)
++            }
++
++            /* Pass input buffer pertaining to the current operation */
++            Method (IBUF, 1, Serialized)
++            {
++                Store (105, P96) 
++                Store (SizeOf(Arg0), Local0)
++                Store (Local0, P9A)
++                ToBuffer (Arg0, Local1)
++                Store (0, Local2)
++                Store (104, P96)
++                While ( LLess(Local2,Local0) )
++                {
++                    Store (DerefOf(Index (Local1, Local2)), P98)
++                    Increment (Local2)
++                }
++            }
++
++            /* Now that the input arguments are passed, execute the command */
++            Method (EXEC, 0, Serialized)
++            {
++                Store (106, P96)
++            }
++
++            /* Get the output buffer pertaining to the just executed command */
++            Method (OBUF, 0, Serialized)
++            {
++                Store (108, P96)
++                Store (P9A, Local0)
++                Store (Buffer(Local0) {}, Local2)
++                Store (0, Local1)
++                Store (107, P96)
++                While ( LLess(Local1, Local0) )
++                {
++                    Store (P98, Index(Local2, Local1)) 
++                    Increment (Local1)
++                }
++                Return (Local2)
++            }
++
++            /* Get event data */
++            Method (_WED, 1, Serialized)
++            {
++                INIT (4)
++                Store (109, P96)
++                Store (Arg0, P98)
++                EXEC ()
++                Return (OBUF())
++            }
++
++            /*  Following are well know entry points as supplied by 
++             *  _WDG.
++             *  @TODO:  Though current testing suggest that defining
++             *  a method for seralized execution is enough to prevent
++             *  synchronization issues, consider using explicit mutexes
++             *  for further protection.
++             */
++            Method (WMAA, 3, Serialized)
++            {
++                INIT (1)
++                GUID (0)
++                INST (Arg0)
++                MTID (Arg1)
++                IBUF (Arg2) 
++                EXEC () 
++                Return (OBUF())
++            }
++
++            Method (WMBA, 3, Serialized)
++            {
++                INIT (1)
++                GUID (80)
++                INST (Arg0)
++                MTID (Arg1)
++                IBUF (Arg2)
++                EXEC ()
++                Return (OBUF())
++            }
++
++            /* Like all other well know entry points, we could delegate
++             * the below to the base firmware also.  But, why ask for a 
++             * static list (that too this big) and go through layer after
++             * layer to get it?  Also, port i/o is not a good idea for this
++             * much data transfer.  Luckily, this is the only place that appear
++             * to transfer so much data.
++             */ 
++            Name (WQAB, Buffer (0x1C53)
++            {
++                /* 0000 */    0x46, 0x4F, 0x4D, 0x42, 0x01, 0x00, 0x00, 0x00,
++                /* 0008 */    0x43, 0x1C, 0x00, 0x00, 0xEA, 0xB4, 0x00, 0x00,
++                /* 0010 */    0x44, 0x53, 0x00, 0x01, 0x1A, 0x7D, 0xDA, 0x54,
++                /* 0018 */    0x98, 0x2D, 0x96, 0x00, 0x01, 0x06, 0x18, 0x42,
++                /* 0020 */    0x10, 0x47, 0x10, 0x92, 0x46, 0x62, 0x02, 0x89,
++                /* 0028 */    0x80, 0x90, 0x18, 0x18, 0x14, 0x81, 0x85, 0x00,
++                /* 0030 */    0x49, 0x02, 0x88, 0xC4, 0x41, 0xE1, 0x20, 0xD4,
++                /* 0038 */    0x9F, 0x40, 0x7E, 0x05, 0x20, 0x74, 0x28, 0x40,
++                /* 0040 */    0xA6, 0x00, 0x83, 0x02, 0x9C, 0x22, 0x88, 0xA0,
++                /* 0048 */    0x57, 0x01, 0x36, 0x05, 0x98, 0x14, 0x60, 0x51,
++                /* 0050 */    0x80, 0x76, 0x01, 0x96, 0x05, 0xE8, 0x16, 0x20,
++                /* 0058 */    0x1D, 0x96, 0x88, 0x04, 0x47, 0x89, 0x01, 0x47,
++                /* 0060 */    0xE9, 0xC4, 0x16, 0x6E, 0xD8, 0xE0, 0x85, 0xA2,
++                /* 0068 */    0x68, 0x06, 0x51, 0x12, 0x94, 0x8B, 0x20, 0x5D,
++                /* 0070 */    0x10, 0x52, 0x2E, 0xC0, 0x37, 0x82, 0x06, 0x10,
++                /* 0078 */    0xA5, 0x77, 0x01, 0xB6, 0x05, 0x98, 0x86, 0x27,
++                /* 0080 */    0xD2, 0x20, 0xE4, 0x60, 0x08, 0x54, 0xCE, 0x80,
++                /* 0088 */    0x20, 0x69, 0x44, 0x21, 0x1E, 0xA7, 0x44, 0x08,
++                /* 0090 */    0x0A, 0x84, 0x90, 0xD4, 0xF1, 0xA0, 0xA0, 0x71,
++                /* 0098 */    0x88, 0xAD, 0xCE, 0x46, 0x93, 0xA9, 0x74, 0x7E,
++                /* 00A0 */    0x48, 0x82, 0x70, 0xC6, 0x2A, 0x7E, 0x3A, 0x9A,
++                /* 00A8 */    0xD0, 0xD9, 0x9C, 0x60, 0xE7, 0x18, 0x72, 0x3C,
++                /* 00B0 */    0x48, 0xF4, 0x20, 0xB8, 0x00, 0x0F, 0x1C, 0x2C,
++                /* 00B8 */    0x34, 0x84, 0x22, 0x6B, 0x80, 0xC1, 0x8C, 0xDD,
++                /* 00C0 */    0x63, 0xB1, 0x0B, 0x4E, 0x0A, 0xEC, 0x61, 0xB3,
++                /* 00C8 */    0x01, 0x19, 0xA2, 0x24, 0x38, 0xD4, 0x11, 0xC0,
++                /* 00D0 */    0x12, 0x05, 0x98, 0x1F, 0x87, 0x0C, 0x0F, 0x95,
++                /* 00D8 */    0x8C, 0x25, 0x24, 0x1B, 0xAB, 0x87, 0xC2, 0xA5,
++                /* 00E0 */    0x40, 0x68, 0x6C, 0x27, 0xED, 0x19, 0x45, 0x2C,
++                /* 00E8 */    0x79, 0x4A, 0x82, 0x49, 0xE0, 0x51, 0x44, 0x36,
++                /* 00F0 */    0x1A, 0x27, 0x28, 0x1B, 0x1A, 0x25, 0x03, 0x42,
++                /* 00F8 */    0x9E, 0x05, 0x58, 0x07, 0x26, 0x04, 0x76, 0x2F,
++                /* 0100 */    0xC0, 0x9A, 0x00, 0x73, 0xB3, 0x90, 0xB1, 0xB9,
++                /* 0108 */    0xE8, 0xFF, 0x0F, 0x71, 0xB0, 0x31, 0xDA, 0x9A,
++                /* 0110 */    0xAE, 0x90, 0xC2, 0xC4, 0x88, 0x12, 0x2C, 0x5E,
++                /* 0118 */    0xC5, 0xC3, 0x10, 0xCA, 0x93, 0x42, 0xA8, 0x48,
++                /* 0120 */    0x95, 0xA1, 0x68, 0xB4, 0x51, 0x2A, 0x14, 0xE0,
++                /* 0128 */    0x4C, 0x80, 0x30, 0x5C, 0x1D, 0x03, 0x82, 0x46,
++                /* 0130 */    0x88, 0x15, 0x29, 0x56, 0xFB, 0x83, 0x20, 0xF1,
++                /* 0138 */    0x2D, 0x40, 0x54, 0x01, 0xA2, 0x48, 0xA3, 0x41,
++                /* 0140 */    0x9D, 0x03, 0x3C, 0x5C, 0x0F, 0xF5, 0xF0, 0x3D,
++                /* 0148 */    0xF6, 0x93, 0x0C, 0x72, 0x90, 0x67, 0xF1, 0xA8,
++                /* 0150 */    0x70, 0x9C, 0x06, 0x49, 0xE0, 0x0B, 0x80, 0x4F,
++                /* 0158 */    0x08, 0x1E, 0x38, 0xDE, 0x35, 0xA0, 0x66, 0x7C,
++                /* 0160 */    0xBC, 0x4C, 0x10, 0x1C, 0x6A, 0x88, 0x1E, 0x68,
++                /* 0168 */    0xB8, 0x13, 0x38, 0x44, 0x06, 0xE8, 0x49, 0x3D,
++                /* 0170 */    0x52, 0x60, 0x07, 0x77, 0x32, 0xEF, 0x01, 0xAF,
++                /* 0178 */    0x0A, 0xCD, 0x5E, 0x12, 0x08, 0xC1, 0xF1, 0xF8,
++                /* 0180 */    0x7E, 0xC0, 0x26, 0x9C, 0xC0, 0xF2, 0x07, 0x81,
++                /* 0188 */    0x1A, 0x99, 0xA1, 0x3D, 0xCA, 0xD3, 0x8A, 0x19,
++                /* 0190 */    0xF2, 0x31, 0xC1, 0x04, 0x16, 0x0B, 0x21, 0x05,
++                /* 0198 */    0x10, 0x1A, 0x0F, 0xF8, 0x6F, 0x00, 0x8F, 0x17,
++                /* 01A0 */    0xBE, 0x12, 0xC4, 0xF6, 0x80, 0x12, 0x0C, 0x0B,
++                /* 01A8 */    0x21, 0x23, 0xAB, 0xF0, 0x78, 0xE8, 0x28, 0x7C,
++                /* 01B0 */    0x95, 0x38, 0x9C, 0xD3, 0x8A, 0x67, 0x82, 0xE1,
++                /* 01B8 */    0x20, 0xF4, 0x05, 0x90, 0x00, 0x51, 0xE7, 0x0C,
++                /* 01C0 */    0xD4, 0x61, 0xC1, 0xE7, 0x04, 0x76, 0x33, 0x38,
++                /* 01C8 */    0x83, 0x47, 0x00, 0x8F, 0xE4, 0x84, 0xFC, 0x2B,
++                /* 01D0 */    0xF1, 0xC0, 0xE0, 0x03, 0xE2, 0xEF, 0x1F, 0xA7,
++                /* 01D8 */    0xEC, 0x11, 0x9C, 0xA9, 0x01, 0x7D, 0x1C, 0xF0,
++                /* 01E0 */    0xFF, 0x7F, 0x28, 0x7C, 0x88, 0x1E, 0xDF, 0x29,
++                /* 01E8 */    0x1F, 0xAF, 0x4F, 0x17, 0x96, 0x35, 0x4E, 0xE8,
++                /* 01F0 */    0x77, 0x08, 0x9F, 0x38, 0x7C, 0x64, 0x71, 0x44,
++                /* 01F8 */    0x08, 0x39, 0x39, 0x05, 0xA0, 0x81, 0x4F, 0xF7,
++                /* 0200 */    0xEC, 0x22, 0x9C, 0xAE, 0x27, 0xE5, 0x40, 0xC3,
++                /* 0208 */    0xA0, 0xE3, 0x04, 0xC7, 0x79, 0x00, 0x1C, 0xE3,
++                /* 0210 */    0x84, 0x7F, 0x2E, 0x80, 0x3F, 0x40, 0x7E, 0xCA,
++                /* 0218 */    0x78, 0xC5, 0x48, 0xE0, 0x98, 0x23, 0x44, 0x9F,
++                /* 0220 */    0x6B, 0x3C, 0x42, 0x2C, 0xFC, 0x53, 0x45, 0xE1,
++                /* 0228 */    0x03, 0x21, 0x63, 0x04, 0x17, 0xA0, 0xC7, 0x08,
++                /* 0230 */    0x7C, 0x03, 0x8E, 0x11, 0x7D, 0x94, 0xE0, 0xEA,
++                /* 0238 */    0x0F, 0x1A, 0x74, 0x80, 0xB8, 0xFF, 0xFF, 0x00,
++                /* 0240 */    0xE1, 0x83, 0x7A, 0x80, 0xC0, 0x37, 0xFA, 0xD1,
++                /* 0248 */    0x03, 0x3D, 0x2E, 0x8B, 0x3E, 0x0F, 0xC8, 0xF8,
++                /* 0250 */    0x89, 0x46, 0xF3, 0xE2, 0xA7, 0x03, 0x7E, 0xF8,
++                /* 0258 */    0x00, 0x0F, 0xA8, 0x87, 0x84, 0x03, 0xC5, 0x4C,
++                /* 0260 */    0x9B, 0x83, 0x3E, 0xBB, 0x1C, 0x3A, 0x76, 0xB8,
++                /* 0268 */    0xE0, 0x3F, 0x81, 0x80, 0x4B, 0xDE, 0x21, 0x0C,
++                /* 0270 */    0x14, 0x23, 0xC6, 0x9F, 0x83, 0x7C, 0x0A, 0x03,
++                /* 0278 */    0xFF, 0xFF, 0xFF, 0x14, 0x06, 0xFE, 0xE1, 0xF0,
++                /* 0280 */    0x20, 0x4F, 0x07, 0x9F, 0xB6, 0xA8, 0x74, 0x18,
++                /* 0288 */    0xD4, 0x81, 0x0B, 0xB0, 0x32, 0x89, 0x08, 0xCF,
++                /* 0290 */    0x12, 0xB5, 0x41, 0xE8, 0xD4, 0xF0, 0x36, 0xF1,
++                /* 0298 */    0xB6, 0xE5, 0x5B, 0x40, 0x9C, 0xD3, 0xEC, 0xED,
++                /* 02A0 */    0xC0, 0x45, 0x30, 0x22, 0xD4, 0x0C, 0x45, 0x4E,
++                /* 02A8 */    0x5A, 0x11, 0x63, 0x44, 0x79, 0xDC, 0x32, 0xCA,
++                /* 02B0 */    0xDB, 0xD6, 0x0B, 0x40, 0xBC, 0x13, 0x7B, 0xDE,
++                /* 02B8 */    0x32, 0x46, 0xF0, 0xC8, 0x0F, 0x5C, 0x2C, 0xC6,
++                /* 02C0 */    0xEA, 0xF5, 0x5F, 0xF3, 0x81, 0x0B, 0x70, 0xF6,
++                /* 02C8 */    0xFF, 0x3F, 0x70, 0x01, 0x1C, 0x0A, 0x7A, 0x18,
++                /* 02D0 */    0x42, 0x0F, 0xC3, 0x53, 0x39, 0x97, 0x87, 0xC8,
++                /* 02D8 */    0x53, 0x89, 0x18, 0x35, 0x4C, 0xD4, 0x67, 0x28,
++                /* 02E0 */    0xDF, 0x2D, 0x7C, 0x20, 0x02, 0xDF, 0x99, 0x0B,
++                /* 02E8 */    0xF8, 0xFD, 0xFF, 0x0F, 0x44, 0x70, 0x8E, 0x29,
++                /* 02F0 */    0xB8, 0x33, 0x0D, 0x78, 0x7C, 0xCE, 0x40, 0x20,
++                /* 02F8 */    0xA7, 0xE2, 0x43, 0x0D, 0x60, 0x41, 0xF4, 0x13,
++                /* 0300 */    0xC2, 0x27, 0x1A, 0x2A, 0x13, 0x06, 0x75, 0xA8,
++                /* 0308 */    0x01, 0xAC, 0x5C, 0x61, 0x9E, 0x46, 0xCF, 0xF9,
++                /* 0310 */    0x59, 0xC6, 0xA7, 0x1A, 0x1F, 0x4A, 0x8D, 0x63,
++                /* 0318 */    0x88, 0x97, 0x99, 0x87, 0x1A, 0x1F, 0x0B, 0x5E,
++                /* 0320 */    0x49, 0x7D, 0xA8, 0x31, 0x54, 0x9C, 0x87, 0x1A,
++                /* 0328 */    0x0F, 0x37, 0x50, 0xD4, 0x37, 0x9B, 0x67, 0x1B,
++                /* 0330 */    0xA3, 0xC7, 0xF7, 0x0D, 0xD5, 0x10, 0x0F, 0x35,
++                /* 0338 */    0x4C, 0xF2, 0x4A, 0x35, 0x16, 0x1F, 0x6A, 0xC0,
++                /* 0340 */    0xF1, 0xFF, 0x3F, 0xD4, 0x00, 0xFC, 0xFF, 0xFF,
++                /* 0348 */    0x1F, 0x6A, 0x00, 0x47, 0x47, 0x03, 0x38, 0x47,
++                /* 0350 */    0x46, 0xDC, 0xD1, 0x00, 0x5C, 0x87, 0x52, 0xE0,
++                /* 0358 */    0x70, 0x34, 0x00, 0x1E, 0x47, 0x21, 0x30, 0x5F,
++                /* 0360 */    0x68, 0x7C, 0x14, 0x02, 0x16, 0xFF, 0xFF, 0xA3,
++                /* 0368 */    0x10, 0xF8, 0x65, 0x9F, 0x83, 0x50, 0x42, 0x8F,
++                /* 0370 */    0x42, 0x80, 0xA0, 0xDB, 0xCF, 0x53, 0xC4, 0xB3,
++                /* 0378 */    0x8F, 0x2F, 0x3F, 0x0F, 0x04, 0x11, 0x5E, 0xF3,
++                /* 0380 */    0x7D, 0x0A, 0xF2, 0x21, 0xDF, 0x47, 0x21, 0x06,
++                /* 0388 */    0x63, 0x28, 0x5F, 0x83, 0x7C, 0x14, 0x62, 0x50,
++                /* 0390 */    0xAF, 0x41, 0xBE, 0xEF, 0x1B, 0xE4, 0xF1, 0x22,
++                /* 0398 */    0x48, 0xEC, 0x67, 0x02, 0x1F, 0x85, 0x98, 0xE8,
++                /* 03A0 */    0xA3, 0x10, 0xA0, 0xF0, 0xFF, 0x7F, 0x14, 0x02,
++                /* 03A8 */    0xF8, 0xFF, 0xFF, 0x3F, 0x0A, 0x01, 0xCE, 0x02,
++                /* 03B0 */    0x1C, 0x0D, 0x40, 0x37, 0xAD, 0x47, 0x21, 0xF0,
++                /* 03B8 */    0xDE, 0x59, 0x4E, 0xFB, 0x04, 0x7C, 0x16, 0x02,
++                /* 03C0 */    0xCC, 0xFE, 0xFF, 0xCF, 0x42, 0xC0, 0xEC, 0x28,
++                /* 03C8 */    0x74, 0x14, 0x67, 0xF9, 0x2A, 0xF4, 0x04, 0xF0,
++                /* 03D0 */    0x02, 0x10, 0x23, 0xCC, 0x3B, 0xD0, 0x4B, 0x26,
++                /* 03D8 */    0xBB, 0x8B, 0x1B, 0xE7, 0xC9, 0xE5, 0x2C, 0x9E,
++                /* 03E0 */    0xC4, 0x7D, 0x09, 0xF2, 0x81, 0xE2, 0x59, 0xC8,
++                /* 03E8 */    0x50, 0xA7, 0x1B, 0xF4, 0x8D, 0xDC, 0x03, 0x8B,
++                /* 03F0 */    0x19, 0x3F, 0xC4, 0xF3, 0x90, 0x21, 0x9E, 0x85,
++                /* 03F8 */    0x00, 0x76, 0xFD, 0xFF, 0xCF, 0x42, 0x00, 0xFF,
++                /* 0400 */    0xFF, 0xFF, 0x47, 0x03, 0xF8, 0x2F, 0x00, 0x9F,
++                /* 0408 */    0x85, 0x80, 0xE7, 0x09, 0xE0, 0x41, 0xDB, 0x67,
++                /* 0410 */    0x21, 0x80, 0x33, 0x87, 0xCB, 0xF3, 0x7F, 0x05,
++                /* 0418 */    0x3A, 0x96, 0xF7, 0x08, 0xCF, 0xFA, 0x24, 0x5F,
++                /* 0420 */    0x2F, 0x3D, 0xD3, 0x87, 0x82, 0x67, 0x21, 0x86,
++                /* 0428 */    0x75, 0x18, 0x3E, 0x0B, 0x31, 0x88, 0x17, 0x4D,
++                /* 0430 */    0x43, 0xBC, 0x70, 0xFA, 0x30, 0xE0, 0xFF, 0x3F,
++                /* 0438 */    0x5E, 0xE0, 0x57, 0x4E, 0x03, 0x05, 0x09, 0xF4,
++                /* 0440 */    0x2C, 0x04, 0x30, 0xFE, 0xFF, 0x7F, 0x16, 0x02,
++                /* 0448 */    0xC8, 0xB8, 0x46, 0x9D, 0x85, 0x80, 0xE5, 0x6D,
++                /* 0450 */    0xE5, 0x19, 0xDB, 0xA7, 0x95, 0x04, 0xFF, 0xFF,
++                /* 0458 */    0x67, 0x21, 0xC0, 0x41, 0x2E, 0x23, 0x07, 0x21,
++                /* 0460 */    0x4C, 0xC4, 0x87, 0x83, 0x8F, 0x99, 0x80, 0x9E,
++                /* 0468 */    0x29, 0xBE, 0xB8, 0x1B, 0xE3, 0x09, 0xE0, 0x45,
++                /* 0470 */    0xE2, 0x31, 0x93, 0x1D, 0x35, 0x0D, 0xF3, 0x2C,
++                /* 0478 */    0x64, 0xBC, 0xB3, 0x78, 0x0D, 0x78, 0x82, 0xF7,
++                /* 0480 */    0xE4, 0x9F, 0x85, 0x18, 0xD8, 0x61, 0x05, 0x7B,
++                /* 0488 */    0x14, 0x32, 0xA8, 0xC1, 0x63, 0x87, 0x08, 0x13,
++                /* 0490 */    0xE8, 0x59, 0x88, 0xC5, 0x7D, 0xAE, 0xE8, 0x3C,
++                /* 0498 */    0xE1, 0xB3, 0x10, 0xF0, 0xFE, 0xFF, 0x9F, 0x25,
++                /* 04A0 */    0xE0, 0x5E, 0x0D, 0x9E, 0x85, 0x00, 0x13, 0x87,
++                /* 04A8 */    0x0D, 0x9F, 0x35, 0xC0, 0x33, 0x7C, 0x8F, 0xEA,
++                /* 04B0 */    0x1C, 0x1E, 0x8F, 0x81, 0x7F, 0x56, 0x1D, 0xE7,
++                /* 04B8 */    0x04, 0x96, 0x7B, 0xD1, 0xB2, 0x71, 0xA0, 0xA1,
++                /* 04C0 */    0x23, 0xB2, 0x3A, 0x20, 0x8D, 0x0D, 0x73, 0x29,
++                /* 04C8 */    0x89, 0x7C, 0x72, 0x6C, 0xD4, 0x56, 0x04, 0xA7,
++                /* 04D0 */    0x33, 0x93, 0x4F, 0x00, 0xD6, 0x42, 0x21, 0x05,
++                /* 04D8 */    0x34, 0x1A, 0x8B, 0xE1, 0x9D, 0xF9, 0xE8, 0x44,
++                /* 04E0 */    0x41, 0x0C, 0xE8, 0xE3, 0x90, 0x6D, 0x1C, 0x0A,
++                /* 04E8 */    0x50, 0x7B, 0xD1, 0x14, 0xC8, 0x39, 0x07, 0xA3,
++                /* 04F0 */    0x7F, 0x76, 0x74, 0x36, 0xBE, 0x13, 0x70, 0x0D,
++                /* 04F8 */    0x10, 0x3A, 0x25, 0x18, 0xDA, 0x6A, 0x04, 0xFC,
++                /* 0500 */    0xFF, 0x67, 0x89, 0x01, 0x33, 0xFE, 0x53, 0x8C,
++                /* 0508 */    0x09, 0x7C, 0x8E, 0xC1, 0x1F, 0x0C, 0xF0, 0x03,
++                /* 0510 */    0x7F, 0x31, 0xA8, 0xFA, 0x5E, 0xA0, 0xFB, 0x82,
++                /* 0518 */    0xD5, 0xDD, 0x64, 0x20, 0xCC, 0xC8, 0x04, 0xF5,
++                /* 0520 */    0x9D, 0x0E, 0x40, 0x01, 0xE4, 0x0B, 0x81, 0xCF,
++                /* 0528 */    0x51, 0x0F, 0x05, 0x6C, 0x22, 0x21, 0xC2, 0x44,
++                /* 0530 */    0x33, 0x3A, 0x62, 0xC2, 0xA8, 0xE8, 0x13, 0xA6,
++                /* 0538 */    0x20, 0x9E, 0xB0, 0x63, 0x4D, 0x18, 0x3D, 0x13,
++                /* 0540 */    0x5F, 0x74, 0xD8, 0x88, 0x31, 0x21, 0xAE, 0x1E,
++                /* 0548 */    0xD0, 0x26, 0x18, 0xD4, 0x97, 0x22, 0x58, 0x43,
++                /* 0550 */    0xE6, 0x63, 0xF1, 0x05, 0x02, 0x37, 0x65, 0x30,
++                /* 0558 */    0xCE, 0x89, 0x5D, 0x13, 0x7C, 0xD9, 0xC1, 0xCD,
++                /* 0560 */    0x19, 0x8C, 0xF0, 0x98, 0xBB, 0x18, 0xBF, 0x3A,
++                /* 0568 */    0x79, 0x74, 0xFC, 0xA0, 0xE0, 0x1B, 0x0E, 0xC3,
++                /* 0570 */    0x7E, 0x32, 0xF3, 0x8C, 0xDE, 0xCB, 0x7C, 0x8D,
++                /* 0578 */    0xC3, 0xC0, 0x7A, 0xBC, 0x1C, 0xD6, 0x68, 0x61,
++                /* 0580 */    0x0F, 0xED, 0x3D, 0xC4, 0xFF, 0xFF, 0x43, 0x8C,
++                /* 0588 */    0xCF, 0x13, 0xC6, 0x08, 0xEB, 0xDB, 0x0B, 0x38,
++                /* 0590 */    0xEE, 0x59, 0xF0, 0xEF, 0x1A, 0xE0, 0xB9, 0x84,
++                /* 0598 */    0xF8, 0xAE, 0x01, 0x30, 0xF0, 0xFF, 0x7F, 0xD7,
++                /* 05A0 */    0x00, 0x4E, 0xD7, 0x04, 0xDF, 0x35, 0x80, 0xF7,
++                /* 05A8 */    0xD0, 0x7D, 0xD7, 0x00, 0xAE, 0xD9, 0xEF, 0x1A,
++                /* 05B0 */    0xA8, 0x63, 0x80, 0x15, 0xDE, 0x35, 0xA0, 0x5D,
++                /* 05B8 */    0xD9, 0xDE, 0xD7, 0x9E, 0xB0, 0xAC, 0xE9, 0xB2,
++                /* 05C0 */    0x81, 0x52, 0x73, 0xD9, 0x00, 0x14, 0xFC, 0xFF,
++                /* 05C8 */    0x2F, 0x1B, 0x80, 0x01, 0x29, 0x13, 0x46, 0x85,
++                /* 05D0 */    0x9F, 0x30, 0x05, 0xF1, 0x84, 0x1D, 0xEC, 0xB2,
++                /* 05D8 */    0x01, 0x8A, 0x18, 0x97, 0x0D, 0xD0, 0x8F, 0xED,
++                /* 05E0 */    0x65, 0x03, 0x18, 0xDC, 0x13, 0xF8, 0x6D, 0x03,
++                /* 05E8 */    0x78, 0x43, 0xFA, 0xB6, 0x01, 0xD6, 0xFF, 0xFF,
++                /* 05F0 */    0x6D, 0x03, 0xAC, 0xF9, 0x6F, 0x1B, 0x28, 0x0E,
++                /* 05F8 */    0xAB, 0xBC, 0x6D, 0x40, 0x3C, 0xC9, 0x33, 0x02,
++                /* 0600 */    0xAB, 0xBA, 0x6E, 0xA0, 0xF4, 0x5C, 0x37, 0x00,
++                /* 0608 */    0x12, 0x88, 0x99, 0x30, 0x2A, 0xFE, 0x84, 0x29,
++                /* 0610 */    0x88, 0x27, 0xEC, 0x68, 0xD7, 0x0D, 0x50, 0x04,
++                /* 0618 */    0xB9, 0x6E, 0x80, 0x7E, 0x5E, 0x09, 0xFE, 0xFF,
++                /* 0620 */    0xAF, 0x1B, 0xC0, 0xE0, 0xA2, 0x80, 0xB9, 0x6F,
++                /* 0628 */    0x00, 0x6F, 0x58, 0x7E, 0xDF, 0x00, 0x7C, 0xDC,
++                /* 0630 */    0xC4, 0x31, 0xF7, 0x0D, 0xC0, 0xCC, 0xFF, 0xFF,
++                /* 0638 */    0xBE, 0x01, 0xB0, 0xE7, 0xA2, 0x80, 0xBB, 0x6F,
++                /* 0640 */    0x00, 0xEF, 0x8B, 0xB4, 0xEF, 0x1B, 0x60, 0xFE,
++                /* 0648 */    0xFF, 0xDF, 0x37, 0xC0, 0x28, 0x6D, 0xFD, 0x1E,
++                /* 0650 */    0x1C, 0x3D, 0x21, 0x78, 0x7C, 0xB8, 0xFB, 0xA5,
++                /* 0658 */    0xC7, 0xE7, 0xBB, 0x39, 0x38, 0x06, 0x79, 0x8C,
++                /* 0660 */    0x87, 0x76, 0xC0, 0xAF, 0xEF, 0x9E, 0x98, 0xEF,
++                /* 0668 */    0xE6, 0xC0, 0xFF, 0x4C, 0x70, 0x3C, 0x18, 0x68,
++                /* 0670 */    0x1C, 0x62, 0xAB, 0x97, 0x06, 0x72, 0x34, 0x38,
++                /* 0678 */    0x3F, 0xDC, 0x19, 0x81, 0x61, 0x15, 0x7F, 0xF2,
++                /* 0680 */    0x47, 0x38, 0xC7, 0xD0, 0xD9, 0xE1, 0x20, 0xB1,
++                /* 0688 */    0x83, 0xE0, 0xC1, 0x56, 0x6D, 0x02, 0x85, 0x86,
++                /* 0690 */    0x50, 0x14, 0x18, 0x14, 0x8B, 0x0F, 0x18, 0xF8,
++                /* 0698 */    0x61, 0xB3, 0xB3, 0x00, 0x93, 0x04, 0x87, 0x3A,
++                /* 06A0 */    0x02, 0xF8, 0x3E, 0xD1, 0xFC, 0x38, 0x74, 0x37,
++                /* 06A8 */    0x38, 0x54, 0x8F, 0xE5, 0xA1, 0x80, 0x9E, 0x01,
++                /* 06B0 */    0x71, 0xC7, 0x0C, 0x32, 0x69, 0xCF, 0x28, 0xE2,
++                /* 06B8 */    0x53, 0xC2, 0x29, 0x85, 0x49, 0xE0, 0xF3, 0x03,
++                /* 06C0 */    0x43, 0xE3, 0x04, 0xAF, 0x0D, 0xA1, 0xF9, 0xFF,
++                /* 06C8 */    0xFF, 0xA4, 0xC0, 0x3C, 0xDF, 0x31, 0x04, 0x6C,
++                /* 06D0 */    0x02, 0xBB, 0xBF, 0x64, 0xC8, 0xDA, 0xC0, 0x75,
++                /* 06D8 */    0x4B, 0x32, 0x44, 0x6F, 0x38, 0xB2, 0x85, 0xA2,
++                /* 06E0 */    0xE9, 0x44, 0x79, 0xDF, 0x88, 0x62, 0x67, 0x08,
++                /* 06E8 */    0xC2, 0x88, 0x12, 0x2C, 0xC8, 0xA3, 0x42, 0xAC,
++                /* 06F0 */    0x28, 0x2F, 0x05, 0x46, 0x88, 0x18, 0xE2, 0x95,
++                /* 06F8 */    0x23, 0xD0, 0x09, 0x87, 0x0F, 0xF2, 0xD8, 0x14,
++                /* 0700 */    0xA7, 0xFD, 0x41, 0x90, 0x58, 0x4F, 0x02, 0x8D,
++                /* 0708 */    0xC5, 0x91, 0x46, 0x83, 0x3A, 0x07, 0x78, 0xB8,
++                /* 0710 */    0x3E, 0xC4, 0x78, 0xF8, 0x0F, 0x21, 0x06, 0x39,
++                /* 0718 */    0xC8, 0x73, 0x7B, 0x54, 0x38, 0x4E, 0x5F, 0x25,
++                /* 0720 */    0x4C, 0xF0, 0x02, 0xE0, 0x83, 0x0A, 0x1C, 0xD7,
++                /* 0728 */    0x80, 0x9A, 0xF1, 0x33, 0x06, 0x58, 0x8E, 0xE3,
++                /* 0730 */    0x3E, 0xA9, 0xC0, 0x1D, 0x8F, 0xEF, 0x07, 0x6C,
++                /* 0738 */    0xC2, 0x09, 0x2C, 0x7F, 0x10, 0xA8, 0xE3, 0x0C,
++                /* 0740 */    0x9F, 0xE7, 0x0B, 0x8B, 0x21, 0x1F, 0x13, 0x4C,
++                /* 0748 */    0x60, 0xB1, 0x27, 0x1B, 0x3A, 0x1E, 0xF0, 0xDF,
++                /* 0750 */    0x63, 0x1E, 0x2F, 0x7C, 0x32, 0xF1, 0x7C, 0x4D,
++                /* 0758 */    0x30, 0x22, 0x84, 0x9C, 0x8C, 0x07, 0x7D, 0x87,
++                /* 0760 */    0xC0, 0x5C, 0x6F, 0xD8, 0xB9, 0x85, 0x8B, 0x3A,
++                /* 0768 */    0x68, 0xA0, 0x4E, 0x0B, 0x3E, 0x28, 0xB0, 0x9B,
++                /* 0770 */    0x11, 0xE6, 0xB8, 0xCE, 0xCF, 0x2A, 0x60, 0xF8,
++                /* 0778 */    0xFF, 0x9F, 0x55, 0x60, 0x8F, 0x10, 0xFE, 0xED,
++                /* 0780 */    0xC1, 0xF3, 0xF2, 0x95, 0xE1, 0xD5, 0x21, 0x81,
++                /* 0788 */    0x43, 0x8E, 0x10, 0x3D, 0x2E, 0x8F, 0x10, 0x73,
++                /* 0790 */    0x3E, 0xC2, 0x0C, 0x11, 0x5C, 0x67, 0x01, 0x70,
++                /* 0798 */    0x0C, 0x11, 0xF8, 0x1C, 0x70, 0xC0, 0x71, 0x69,
++                /* 07A0 */    0xE2, 0x03, 0xF5, 0x01, 0x07, 0x70, 0x70, 0x4D,
++                /* 07A8 */    0xC3, 0x1D, 0x70, 0xC0, 0x71, 0x16, 0x60, 0xFF,
++                /* 07B0 */    0xFF, 0xC3, 0x0D, 0x2C, 0x49, 0x26, 0x0E, 0x23,
++                /* 07B8 */    0x18, 0x11, 0x30, 0x28, 0x02, 0x02, 0xA4, 0xB3,
++                /* 07C0 */    0x80, 0x0F, 0x29, 0x00, 0x1F, 0xAE, 0x0C, 0x0F,
++                /* 07C8 */    0x29, 0xD8, 0x93, 0x86, 0x07, 0x8E, 0x1B, 0x85,
++                /* 07D0 */    0x07, 0x8D, 0x0B, 0x30, 0x68, 0x7A, 0xE2, 0x80,
++                /* 07D8 */    0x7F, 0x4C, 0xF0, 0x19, 0x05, 0x1C, 0xE3, 0x06,
++                /* 07E0 */    0xDF, 0x2A, 0x0C, 0xFC, 0xFF, 0x3F, 0x30, 0xCC,
++                /* 07E8 */    0xE1, 0xC2, 0x63, 0x39, 0x8A, 0xA0, 0x07, 0x1E,
++                /* 07F0 */    0xD4, 0xF7, 0x8C, 0x33, 0xF7, 0x24, 0x8F, 0xD1,
++                /* 07F8 */    0x51, 0x0F, 0x27, 0xF4, 0xE4, 0x85, 0x3B, 0x57,
++                /* 0800 */    0xF9, 0x0A, 0x71, 0x14, 0x18, 0xB8, 0x77, 0x29,
++                /* 0808 */    0x8F, 0xCF, 0x17, 0x2B, 0xC3, 0x63, 0x46, 0xFB,
++                /* 0810 */    0x1E, 0x72, 0xD6, 0x11, 0x02, 0xE2, 0x2F, 0x75,
++                /* 0818 */    0x6C, 0xC0, 0x60, 0x39, 0x18, 0x00, 0x87, 0x01,
++                /* 0820 */    0xE3, 0x13, 0x0D, 0x58, 0x67, 0x1B, 0x3C, 0xF4,
++                /* 0828 */    0x69, 0x31, 0xC4, 0xE3, 0x0B, 0xFB, 0x56, 0x61,
++                /* 0830 */    0x82, 0xEA, 0x41, 0x75, 0x12, 0xF4, 0xD0, 0xC0,
++                /* 0838 */    0x01, 0xE8, 0xA1, 0xC1, 0x3F, 0xB9, 0x90, 0xFB,
++                /* 0840 */    0x2B, 0x1D, 0x82, 0xB5, 0xE2, 0x69, 0xDE, 0x47,
++                /* 0848 */    0x1E, 0xF3, 0xDC, 0xA2, 0xBC, 0x0D, 0x3C, 0x07,
++                /* 0850 */    0xF0, 0xD3, 0x82, 0x87, 0xE3, 0x63, 0x81, 0xC7,
++                /* 0858 */    0xE9, 0x4B, 0x58, 0x82, 0xF7, 0x1A, 0x9F, 0x6C,
++                /* 0860 */    0x1E, 0x5C, 0x58, 0xB2, 0x21, 0xA0, 0x06, 0xEB,
++                /* 0868 */    0x21, 0x60, 0xA6, 0x9A, 0xC0, 0x49, 0x46, 0x80,
++                /* 0870 */    0xCA, 0x00, 0xA1, 0x1B, 0xCB, 0xE9, 0x3E, 0x8B,
++                /* 0878 */    0x84, 0x38, 0xCD, 0x47, 0x99, 0xC7, 0x02, 0x8F,
++                /* 0880 */    0xF5, 0xC1, 0xC0, 0xFF, 0x7F, 0xCD, 0x23, 0xD4,
++                /* 0888 */    0x7D, 0xCD, 0x33, 0x7B, 0x3A, 0xC0, 0xAC, 0x22,
++                /* 0890 */    0xDC, 0x7B, 0xCE, 0x1B, 0x86, 0xD1, 0x9E, 0x2D,
++                /* 0898 */    0x7C, 0xCD, 0x78, 0xD6, 0x34, 0x42, 0x38, 0x76,
++                /* 08A0 */    0x83, 0xF3, 0x48, 0x8C, 0xF0, 0x82, 0xC0, 0x4E,
++                /* 08A8 */    0x0C, 0x0F, 0x30, 0xC6, 0x39, 0x79, 0xC3, 0xFA,
++                /* 08B0 */    0xC2, 0xCB, 0x40, 0x83, 0x19, 0xDB, 0x97, 0x01,
++                /* 08B8 */    0x36, 0x2A, 0xDF, 0x88, 0xC0, 0x97, 0xFC, 0x62,
++                /* 08C0 */    0x00, 0x65, 0x16, 0xBE, 0x9E, 0xF8, 0xA0, 0xC4,
++                /* 08C8 */    0x2E, 0x06, 0x2C, 0xE5, 0xC5, 0x00, 0x54, 0x37,
++                /* 08D0 */    0x0C, 0x5F, 0x0C, 0xE0, 0x5F, 0x89, 0x5E, 0x0C,
++                /* 08D8 */    0xC0, 0x70, 0x71, 0xF2, 0x3D, 0xC0, 0x1E, 0xEE,
++                /* 08E0 */    0xA3, 0x74, 0x9C, 0xBE, 0xFD, 0xBD, 0x19, 0xF8,
++                /* 08E8 */    0x6C, 0xC0, 0x60, 0x3C, 0xC3, 0x30, 0xC6, 0x08,
++                /* 08F0 */    0xE3, 0x51, 0x86, 0x31, 0xC1, 0xDC, 0xB7, 0x03,
++                /* 08F8 */    0xE8, 0x39, 0x87, 0x81, 0x4A, 0x78, 0x3B, 0x80,
++                /* 0900 */    0x72, 0x0E, 0xE8, 0xF2, 0x68, 0x42, 0x4F, 0x01,
++                /* 0908 */    0x4F, 0x07, 0x3E, 0x29, 0x1A, 0xA2, 0xAF, 0xB1,
++                /* 0910 */    0x0A, 0x26, 0x50, 0xC4, 0x07, 0x0D, 0x3E, 0xB5,
++                /* 0918 */    0x28, 0x3E, 0x15, 0x78, 0x2D, 0xCF, 0x4E, 0xE1,
++                /* 0920 */    0xE2, 0x9C, 0x89, 0xA7, 0x6A, 0x38, 0x03, 0xBD,
++                /* 0928 */    0xE6, 0x86, 0x63, 0xFF, 0x7F, 0x38, 0xFC, 0xA9,
++                /* 0930 */    0xE0, 0x35, 0x80, 0x1D, 0x24, 0x3D, 0x2D, 0x23,
++                /* 0938 */    0xC2, 0x38, 0xA4, 0x3C, 0x32, 0xF8, 0xB6, 0x18,
++                /* 0940 */    0xC7, 0x90, 0x0F, 0x91, 0xBE, 0x13, 0x18, 0xF2,
++                /* 0948 */    0x21, 0xEF, 0x79, 0xC7, 0xC0, 0xAF, 0x08, 0x71,
++                /* 0950 */    0x9E, 0xB2, 0x7C, 0x67, 0xF0, 0x65, 0x01, 0x7C,
++                /* 0958 */    0x91, 0x2E, 0x0B, 0x68, 0x68, 0x9F, 0x64, 0x7C,
++                /* 0960 */    0x41, 0x30, 0xEC, 0x89, 0xB3, 0x00, 0x77, 0x05,
++                /* 0968 */    0x50, 0x81, 0xFA, 0xAE, 0x00, 0xFF, 0x42, 0xF0,
++                /* 0970 */    0xAE, 0x00, 0x86, 0x79, 0xF9, 0x56, 0xC0, 0x35,
++                /* 0978 */    0x1D, 0x4A, 0xD0, 0x67, 0x12, 0x5F, 0x17, 0x70,
++                /* 0980 */    0x53, 0x64, 0xA9, 0x8E, 0x0A, 0xD0, 0x53, 0x4C,
++                /* 0988 */    0x02, 0x75, 0x47, 0xF7, 0x51, 0x01, 0xC6, 0x4D,
++                /* 0990 */    0xD9, 0x07, 0x54, 0x76, 0x5A, 0x60, 0x67, 0x21,
++                /* 0998 */    0x76, 0x1D, 0xC1, 0x5D, 0x49, 0x18, 0xCA, 0xB3,
++                /* 09A0 */    0x81, 0x2F, 0x59, 0xFC, 0x70, 0x00, 0x03, 0xDC,
++                /* 09A8 */    0xB3, 0x38, 0xC4, 0x08, 0xB1, 0xD9, 0x81, 0xEB,
++                /* 09B0 */    0x75, 0xD2, 0x70, 0x2F, 0x44, 0xEC, 0xFF, 0x7F,
++                /* 09B8 */    0x32, 0x00, 0xE3, 0x51, 0x1B, 0x1C, 0x27, 0x9D,
++                /* 09C0 */    0xF0, 0x91, 0x9E, 0x59, 0xF8, 0x49, 0x19, 0x30,
++                /* 09C8 */    0x71, 0xF2, 0x03, 0xE3, 0xC9, 0x1A, 0xC6, 0x00,
++                /* 09D0 */    0xB8, 0xBC, 0x57, 0x95, 0x81, 0xFC, 0x43, 0x90,
++                /* 09D8 */    0x20, 0x18, 0xD4, 0x29, 0x19, 0x38, 0x1C, 0xC5,
++                /* 09E0 */    0x70, 0xA7, 0x64, 0x78, 0x50, 0xF8, 0xC3, 0x00,
++                /* 09E8 */    0xE6, 0x46, 0xE8, 0x7B, 0x82, 0xA1, 0xDE, 0x93,
++                /* 09F0 */    0x0E, 0xE3, 0x91, 0xD0, 0x04, 0x3E, 0x2D, 0xC3,
++                /* 09F8 */    0xFA, 0xFF, 0x9F, 0x96, 0xF9, 0x39, 0x21, 0xFE,
++                /* 0A00 */    0x53, 0xCE, 0xFB, 0xC5, 0x83, 0xB2, 0x31, 0xA2,
++                /* 0A08 */    0xBC, 0x2A, 0xFB, 0x9C, 0x69, 0x14, 0x76, 0x4B,
++                /* 0A10 */    0x7E, 0x73, 0x78, 0x55, 0xF6, 0x69, 0xF9, 0xDC,
++                /* 0A18 */    0x22, 0xBD, 0x2F, 0x7B, 0xE4, 0x31, 0xE3, 0xC4,
++                /* 0A20 */    0x0A, 0x12, 0xE8, 0x7D, 0x23, 0x4A, 0xD8, 0x18,
++                /* 0A28 */    0xE1, 0x02, 0x3D, 0x2D, 0xB3, 0x63, 0xBB, 0x87,
++                /* 0A30 */    0xEC, 0xB3, 0x02, 0xEE, 0xEC, 0x00, 0x77, 0x7A,
++                /* 0A38 */    0xFC, 0xF4, 0x00, 0x38, 0x01, 0x7A, 0x7A, 0x00,
++                /* 0A40 */    0xDB, 0x79, 0x03, 0xEE, 0x81, 0x00, 0x71, 0xFC,
++                /* 0A48 */    0x47, 0x05, 0xBF, 0xB2, 0x50, 0x38, 0x7E, 0x6C,
++                /* 0A50 */    0xE7, 0xC7, 0x12, 0xDC, 0xE1, 0xC0, 0x47, 0x06,
++                /* 0A58 */    0x1F, 0x20, 0x71, 0x43, 0xF1, 0xA1, 0x02, 0x79,
++                /* 0A60 */    0x16, 0x00, 0xC5, 0xE8, 0xD9, 0x08, 0xD8, 0x0D,
++                /* 0A68 */    0xE6, 0xA5, 0x25, 0xCA, 0xFF, 0xFF, 0xBD, 0x81,
++                /* 0A70 */    0x9D, 0x52, 0x70, 0x07, 0x01, 0xF0, 0x1D, 0x03,
++                /* 0A78 */    0xC0, 0x3B, 0x18, 0x2E, 0x6B, 0xCC, 0x28, 0x21,
++                /* 0A80 */    0x30, 0x1A, 0x33, 0xEE, 0x10, 0xC2, 0x4F, 0x04,
++                /* 0A88 */    0xB8, 0x31, 0x7B, 0xDC, 0x1E, 0x33, 0xEE, 0x38,
++                /* 0A90 */    0xCB, 0x47, 0xF5, 0x94, 0x11, 0xCA, 0x07, 0x0E,
++                /* 0A98 */    0x76, 0xCE, 0x78, 0x23, 0xE0, 0x43, 0x07, 0x1E,
++                /* 0AA0 */    0x07, 0x18, 0xDC, 0x91, 0x02, 0x8C, 0x97, 0x03,
++                /* 0AA8 */    0x36, 0x76, 0x70, 0x07, 0x21, 0xA7, 0x40, 0x96,
++                /* 0AB0 */    0x0E, 0xA3, 0xB1, 0xE3, 0x64, 0x03, 0xE9, 0x18,
++                /* 0AB8 */    0xE3, 0x43, 0xAE, 0xC7, 0x8E, 0x1B, 0xAC, 0xC7,
++                /* 0AC0 */    0x8E, 0x3B, 0xBE, 0x60, 0xFF, 0xFF, 0xC7, 0x17,
++                /* 0AC8 */    0x30, 0x8C, 0x81, 0x8B, 0x1F, 0x06, 0xFA, 0xE6,
++                /* 0AD0 */    0xE7, 0xD1, 0x19, 0xDC, 0xC3, 0xF6, 0x09, 0x26,
++                /* 0AD8 */    0xC6, 0x1B, 0x4C, 0x88, 0x47, 0x96, 0x97, 0x96,
++                /* 0AE0 */    0x08, 0x0F, 0x2D, 0xBE, 0xB9, 0xBC, 0xB4, 0xF8,
++                /* 0AE8 */    0x16, 0x63, 0x94, 0x10, 0x11, 0x0E, 0x26, 0xCE,
++                /* 0AF0 */    0x13, 0x8C, 0x11, 0x0E, 0x3C, 0x8A, 0x21, 0x22,
++                /* 0AF8 */    0x9C, 0x40, 0x88, 0x93, 0x3E, 0xD9, 0x20, 0xE1,
++                /* 0B00 */    0x63, 0x84, 0x8D, 0x16, 0xE5, 0x09, 0x86, 0x8D,
++                /* 0B08 */    0x85, 0x9F, 0x57, 0x3C, 0x78, 0x7E, 0x5A, 0xF3,
++                /* 0B10 */    0x5D, 0xD0, 0x93, 0x39, 0xC7, 0x87, 0x2C, 0x4F,
++                /* 0B18 */    0xED, 0x71, 0xD2, 0x87, 0x59, 0xDC, 0xA0, 0x1E,
++                /* 0B20 */    0x1C, 0xD9, 0x5D, 0xC7, 0xC7, 0x6B, 0xEC, 0x29,
++                /* 0B28 */    0xC8, 0x43, 0xE0, 0x27, 0x02, 0x5F, 0x10, 0x3D,
++                /* 0B30 */    0x59, 0xDF, 0xF5, 0xD8, 0xBD, 0xCC, 0x18, 0xD5,
++                /* 0B38 */    0x4F, 0x01, 0x75, 0x4C, 0x39, 0x83, 0x57, 0x08,
++                /* 0B40 */    0x76, 0xCF, 0xF3, 0x21, 0xDB, 0x77, 0x49, 0x36,
++                /* 0B48 */    0x0A, 0xDC, 0x21, 0xC1, 0x67, 0x24, 0x7E, 0xAA,
++                /* 0B50 */    0xF0, 0x30, 0x3C, 0x0A, 0x18, 0x33, 0x78, 0x47,
++                /* 0B58 */    0x38, 0xB4, 0x10, 0x07, 0xFC, 0xBE, 0xCB, 0x86,
++                /* 0B60 */    0x1A, 0xE3, 0xF4, 0x7C, 0xFE, 0x60, 0x83, 0x80,
++                /* 0B68 */    0x0F, 0x75, 0xA8, 0x1E, 0xE6, 0x51, 0xBD, 0x14,
++                /* 0B70 */    0x32, 0x9C, 0xB3, 0x83, 0x3B, 0x08, 0xEC, 0xF1,
++                /* 0B78 */    0xC3, 0x83, 0xE0, 0x37, 0x4B, 0x3E, 0x08, 0x76,
++                /* 0B80 */    0xBE, 0x79, 0x83, 0x33, 0xC8, 0xFF, 0xFF, 0x18,
++                /* 0B88 */    0x60, 0x9F, 0xA9, 0x7C, 0x34, 0x41, 0x1C, 0x01,
++                /* 0B90 */    0xD1, 0xE7, 0x0F, 0x8F, 0xE1, 0x4D, 0x8E, 0x0F,
++                /* 0B98 */    0x07, 0x7B, 0xF4, 0xC0, 0x9D, 0x44, 0xE0, 0x1E,
++                /* 0BA0 */    0xBB, 0x0E, 0xDA, 0xD7, 0x38, 0x5F, 0xB4, 0x60,
++                /* 0BA8 */    0xDC, 0xF7, 0x9E, 0x45, 0xC0, 0x8F, 0xF1, 0xD8,
++                /* 0BB0 */    0x02, 0x8E, 0x43, 0x09, 0xB8, 0x83, 0x1D, 0xD7,
++                /* 0BB8 */    0x38, 0x84, 0xA2, 0xC0, 0xE8, 0x50, 0x82, 0x8B,
++                /* 0BC0 */    0x01, 0x24, 0x18, 0xC7, 0x38, 0xA3, 0xA1, 0x2F,
++                /* 0BC8 */    0x91, 0x3E, 0xA4, 0xC1, 0x19, 0x34, 0xEC, 0x79,
++                /* 0BD0 */    0x3E, 0xA1, 0x70, 0x7B, 0x02, 0x14, 0x9D, 0x50,
++                /* 0BD8 */    0x40, 0x86, 0xFB, 0x0C, 0x82, 0x3D, 0x21, 0xF0,
++                /* 0BE0 */    0x33, 0x08, 0xFB, 0xFF, 0x1F, 0x1C, 0x3D, 0xEE,
++                /* 0BE8 */    0xF7, 0x46, 0x9F, 0x1A, 0xD9, 0xDC, 0x1F, 0x02,
++                /* 0BF0 */    0x4E, 0xE0, 0xDC, 0xD9, 0xA9, 0x19, 0x77, 0x66,
++                /* 0BF8 */    0xC0, 0x9E, 0x3F, 0x3C, 0x04, 0x7E, 0x2E, 0xF0,
++                /* 0C00 */    0xF0, 0x3D, 0x04, 0xFC, 0xE0, 0x1F, 0x98, 0x0D,
++                /* 0C08 */    0x0E, 0xC6, 0x53, 0x84, 0xAF, 0x1D, 0x1C, 0x9C,
++                /* 0C10 */    0x9F, 0x06, 0x0C, 0xCE, 0x5F, 0xA1, 0x3E, 0xCF,
++                /* 0C18 */    0x33, 0x70, 0xEC, 0xA9, 0xD7, 0xF7, 0x0E, 0xCF,
++                /* 0C20 */    0xD7, 0x87, 0x0A, 0xFC, 0x4D, 0xCF, 0x87, 0x0A,
++                /* 0C28 */    0x70, 0x1C, 0x1E, 0xF8, 0x61, 0x85, 0x0D, 0xE1,
++                /* 0C30 */    0x51, 0x00, 0x7F, 0x6A, 0xF1, 0xF1, 0x2F, 0xCE,
++                /* 0C38 */    0x53, 0x04, 0xBB, 0x8D, 0x60, 0x0F, 0x17, 0x80,
++                /* 0C40 */    0xA3, 0x68, 0x67, 0x31, 0x54, 0x98, 0xB3, 0x18,
++                /* 0C48 */    0xF9, 0xFF, 0x9F, 0xA3, 0x50, 0x67, 0x31, 0x7A,
++                /* 0C50 */    0xB8, 0x00, 0x5C, 0x08, 0x3E, 0x1E, 0x80, 0xE6,
++                /* 0C58 */    0x20, 0xF0, 0xB8, 0xE0, 0x0B, 0xC1, 0x91, 0x1C,
++                /* 0C60 */    0xC8, 0xD3, 0x01, 0xE0, 0x53, 0x1E, 0x09, 0x3D,
++                /* 0C68 */    0x1F, 0x59, 0x10, 0x0C, 0xEA, 0x7C, 0xE0, 0x13,
++                /* 0C70 */    0x8A, 0x8F, 0x1D, 0xFC, 0x6C, 0xE0, 0x1B, 0xB9,
++                /* 0C78 */    0x87, 0xCA, 0x4F, 0xCD, 0x3E, 0x69, 0xF3, 0xE0,
++                /* 0C80 */    0x3F, 0x69, 0xD9, 0x80, 0x51, 0xA0, 0x61, 0xA0,
++                /* 0C88 */    0x46, 0xE4, 0x23, 0xD2, 0xFF, 0xFF, 0xB9, 0x0D,
++                /* 0C90 */    0x1B, 0x60, 0x68, 0xF4, 0x1C, 0x0E, 0xE3, 0x80,
++                /* 0C98 */    0xEB, 0x73, 0x38, 0x76, 0x40, 0x3E, 0x87, 0xC3,
++                /* 0CA0 */    0x3F, 0x47, 0xC3, 0x1F, 0x1B, 0x3B, 0xDD, 0xF3,
++                /* 0CA8 */    0x81, 0xC1, 0xBA, 0x7E, 0x63, 0x06, 0x06, 0xB6,
++                /* 0CB0 */    0x6F, 0x91, 0x07, 0x06, 0x1C, 0x51, 0xCF, 0xC6,
++                /* 0CB8 */    0x57, 0x08, 0x0F, 0x0C, 0x6C, 0x80, 0x1E, 0x18,
++                /* 0CC0 */    0xF0, 0x89, 0x05, 0x21, 0x27, 0x03, 0x43, 0x9D,
++                /* 0CC8 */    0x32, 0x8C, 0x1C, 0xF3, 0x89, 0xC3, 0xC3, 0xF0,
++                /* 0CD0 */    0xA1, 0x22, 0xEA, 0x33, 0xC0, 0x23, 0x1E, 0x1B,
++                /* 0CD8 */    0x1B, 0xFB, 0xFF, 0x8F, 0x0D, 0x2C, 0xC7, 0x16,
++                /* 0CE0 */    0x8F, 0x0D, 0xFC, 0x47, 0x78, 0xFC, 0xD8, 0xE0,
++                /* 0CE8 */    0x8C, 0xE5, 0xD1, 0xC4, 0x97, 0x99, 0x23, 0x3B,
++                /* 0CF0 */    0x8D, 0x33, 0x7B, 0x0D, 0xF1, 0xD1, 0xEE, 0xF1,
++                /* 0CF8 */    0xDB, 0x63, 0x03, 0x97, 0x85, 0xB1, 0x01, 0xA5,
++                /* 0D00 */    0x90, 0x63, 0x43, 0x1F, 0x52, 0x7C, 0x0A, 0xB0,
++                /* 0D08 */    0x71, 0x54, 0x32, 0x0F, 0x1F, 0xAF, 0x7C, 0x62,
++                /* 0D10 */    0x38, 0xBA, 0x20, 0x6F, 0xE8, 0xBE, 0x5C, 0xF8,
++                /* 0D18 */    0x48, 0x63, 0x30, 0x5F, 0x5A, 0x7C, 0x06, 0xE5,
++                /* 0D20 */    0x43, 0x04, 0x97, 0x86, 0x21, 0x02, 0xA5, 0x50,
++                /* 0D28 */    0x43, 0x44, 0x8F, 0xE7, 0xFF, 0xFF, 0x08, 0xE6,
++                /* 0D30 */    0x21, 0xB2, 0xA1, 0x81, 0xF7, 0x1B, 0xA3, 0xA1,
++                /* 0D38 */    0x01, 0xA1, 0x70, 0x43, 0x43, 0x1F, 0xD6, 0x7C,
++                /* 0D40 */    0x08, 0x60, 0x10, 0xBE, 0x0D, 0xB0, 0xAB, 0x80,
++                /* 0D48 */    0xAF, 0x42, 0x1E, 0xE0, 0x93, 0x28, 0x1B, 0x1E,
++                /* 0D50 */    0xF8, 0x06, 0xE5, 0xE1, 0x01, 0x9F, 0xF0, 0xC0,
++                /* 0D58 */    0x5E, 0x85, 0x87, 0x47, 0xCF, 0x4A, 0x1E, 0x1E,
++                /* 0D60 */    0x3C, 0x90, 0xC7, 0x08, 0x76, 0x0E, 0xF1, 0xE0,
++                /* 0D68 */    0xC0, 0x61, 0x62, 0x70, 0xA0, 0x38, 0xFA, 0xE3,
++                /* 0D70 */    0x86, 0xC0, 0x2E, 0xB3, 0x9E, 0x38, 0xBF, 0xB2,
++                /* 0D78 */    0x78, 0x50, 0xF8, 0xFF, 0xFF, 0x11, 0x00, 0xD6,
++                /* 0D80 */    0x71, 0x06, 0x7C, 0xC1, 0x0E, 0x07, 0xE8, 0x63,
++                /* 0D88 */    0x22, 0x1B, 0xC3, 0x43, 0xC4, 0x83, 0xAB, 0x07,
++                /* 0D90 */    0xE2, 0x6B, 0xC7, 0x6B, 0x31, 0xEE, 0x68, 0x00,
++                /* 0D98 */    0x2E, 0x15, 0x47, 0x03, 0xA0, 0x74, 0xB0, 0x05,
++                /* 0DA0 */    0xC7, 0x3D, 0xCD, 0x47, 0x3B, 0xCC, 0x1C, 0x3D,
++                /* 0DA8 */    0x80, 0xE7, 0x37, 0x8F, 0x96, 0x9F, 0xDF, 0x00,
++                /* 0DB0 */    0x47, 0x41, 0x0F, 0xB6, 0x74, 0xE0, 0x8E, 0x06,
++                /* 0DB8 */    0x83, 0x3A, 0xBF, 0x61, 0xFE, 0xFF, 0xE7, 0x37,
++                /* 0DC0 */    0x30, 0x44, 0x00, 0xD7, 0x99, 0xC6, 0xE7, 0x17,
++                /* 0DC8 */    0x38, 0x43, 0x3D, 0x68, 0x5F, 0x13, 0x3C, 0x6B,
++                /* 0DD0 */    0xDF, 0xB8, 0xD8, 0x39, 0x01, 0x5C, 0x03, 0xF2,
++                /* 0DD8 */    0x49, 0x07, 0x38, 0x02, 0x9F, 0xC4, 0x03, 0xFE,
++                /* 0DE0 */    0xA1, 0x81, 0x79, 0x58, 0x1E, 0x1A, 0xF0, 0x39,
++                /* 0DE8 */    0x1A, 0xE0, 0x4E, 0x14, 0xE0, 0xB9, 0x8D, 0xE0,
++                /* 0DF0 */    0x0E, 0x14, 0xC0, 0xE2, 0xFF, 0x7F, 0xA0, 0x00,
++                /* 0DF8 */    0x56, 0x47, 0x7C, 0x8F, 0x8B, 0x43, 0xE3, 0x10,
++                /* 0E00 */    0x1F, 0xD2, 0xCE, 0xD9, 0xE7, 0xAF, 0x33, 0xC5,
++                /* 0E08 */    0x9D, 0x45, 0xC0, 0x70, 0xA2, 0x47, 0xBC, 0xD3,
++                /* 0E10 */    0x0C, 0xE4, 0x07, 0x86, 0x84, 0xC0, 0xA0, 0x4E,
++                /* 0E18 */    0x40, 0x1E, 0x8A, 0x0F, 0x06, 0x1C, 0xD8, 0x47,
++                /* 0E20 */    0x04, 0x76, 0x2E, 0x60, 0x07, 0x28, 0xC3, 0xF1,
++                /* 0E28 */    0xB3, 0x80, 0x4F, 0x09, 0x0F, 0x35, 0xC7, 0xF1,
++                /* 0E30 */    0xB8, 0xE9, 0xBB, 0x99, 0x21, 0xD9, 0xD5, 0xE0,
++                /* 0E38 */    0xF9, 0x07, 0x7B, 0xDA, 0x85, 0x73, 0xC4, 0x05,
++                /* 0E40 */    0x17, 0x81, 0xCF, 0x3A, 0x1E, 0x05, 0x3F, 0x3D,
++                /* 0E48 */    0x78, 0x8E, 0x6F, 0x0C, 0x3E, 0x3D, 0x30, 0xF7,
++                /* 0E50 */    0x02, 0xCC, 0x1D, 0xBA, 0x85, 0x70, 0x4C, 0xAF,
++                /* 0E58 */    0x0F, 0x31, 0x8E, 0xFA, 0xB1, 0xA1, 0x2D, 0x01,
++                /* 0E60 */    0xDA, 0x50, 0x74, 0x07, 0x78, 0x19, 0x88, 0x12,
++                /* 0E68 */    0xE2, 0x08, 0x22, 0xB5, 0x86, 0xA2, 0x99, 0x47,
++                /* 0E70 */    0x8A, 0x12, 0x30, 0x9E, 0x61, 0x1A, 0x9B, 0x8C,
++                /* 0E78 */    0x20, 0x63, 0x84, 0x8E, 0x13, 0x2C, 0x4A, 0xB4,
++                /* 0E80 */    0x57, 0x80, 0xF6, 0x47, 0xCB, 0x56, 0xAC, 0xB1,
++                /* 0E88 */    0x38, 0xD2, 0xC9, 0x12, 0x3D, 0x6C, 0x1F, 0xB3,
++                /* 0E90 */    0xF1, 0xA7, 0x55, 0xCC, 0xFF, 0x9F, 0xE0, 0x55,
++                /* 0E98 */    0xC5, 0x07, 0x05, 0x1F, 0x00, 0xF0, 0x2E, 0x01,
++                /* 0EA0 */    0x75, 0x75, 0xF4, 0xB8, 0x7D, 0xDE, 0x00, 0xFF,
++                /* 0EA8 */    0xF5, 0x02, 0x4B, 0x50, 0xFE, 0x20, 0x50, 0x23,
++                /* 0EB0 */    0x33, 0xB4, 0xC7, 0xF9, 0x36, 0x63, 0xC8, 0x27,
++                /* 0EB8 */    0x27, 0x13, 0x58, 0xEC, 0x09, 0x15, 0x68, 0x0C,
++                /* 0EC0 */    0xFE, 0x69, 0xC3, 0xD7, 0x76, 0xCF, 0xD7, 0xE7,
++                /* 0EC8 */    0x38, 0x80, 0x0F, 0xFF, 0xFF, 0x73, 0x1C, 0x60,
++                /* 0ED0 */    0x68, 0x38, 0xB8, 0xA3, 0x0F, 0xDC, 0x2B, 0x09,
++                /* 0ED8 */    0x3F, 0xFC, 0x00, 0xCE, 0x80, 0x1E, 0x7E, 0xC0,
++                /* 0EE0 */    0x3E, 0x54, 0xDC, 0x10, 0x78, 0x84, 0x15, 0xD1,
++                /* 0EE8 */    0xC3, 0x80, 0x45, 0xC3, 0xA0, 0xCE, 0x6B, 0xD8,
++                /* 0EF0 */    0xFF, 0xFF, 0x79, 0x0D, 0xB6, 0x38, 0x70, 0x1D,
++                /* 0EF8 */    0x54, 0x7D, 0x36, 0x86, 0x33, 0xA8, 0xD3, 0xEE,
++                /* 0F00 */    0xFD, 0xAE, 0x40, 0x2E, 0x22, 0x1E, 0xF4, 0xF9,
++                /* 0F08 */    0x3C, 0x3B, 0xB0, 0x03, 0x1B, 0xF0, 0x1F, 0x1B,
++                /* 0F10 */    0x9C, 0x1B, 0xC0, 0x53, 0x74, 0x84, 0x63, 0x03,
++                /* 0F18 */    0xFB, 0x89, 0x0D, 0x38, 0x9D, 0xED, 0xE0, 0x5C,
++                /* 0F20 */    0xA1, 0xD8, 0x6D, 0x1F, 0x37, 0x34, 0xB0, 0xD9,
++                /* 0F28 */    0x18, 0x1A, 0xC8, 0xFE, 0xFF, 0x87, 0x4F, 0xE0,
++                /* 0F30 */    0x75, 0xE8, 0xE2, 0x97, 0x8A, 0xE7, 0x2F, 0x7E,
++                /* 0F38 */    0xB8, 0x03, 0x9C, 0x4B, 0x3B, 0xD9, 0xA1, 0xC4,
++                /* 0F40 */    0x1C, 0xEE, 0x00, 0x29, 0xFF, 0xFF, 0xC3, 0x1D,
++                /* 0F48 */    0xB8, 0xEE, 0x72, 0xEF, 0x0C, 0x2F, 0x0D, 0x9E,
++                /* 0F50 */    0xD3, 0xBB, 0x9D, 0x31, 0x5E, 0xEA, 0x8C, 0x10,
++                /* 0F58 */    0x85, 0xDD, 0x06, 0xA2, 0xD9, 0xDB, 0xE1, 0x8E,
++                /* 0F60 */    0x9C, 0xF0, 0x38, 0x66, 0xA4, 0x27, 0xBD, 0x60,
++                /* 0F68 */    0x91, 0x22, 0x1E, 0x4E, 0x94, 0x10, 0xC1, 0x5E,
++                /* 0F70 */    0x27, 0x9E, 0xF2, 0x1E, 0xEE, 0x98, 0x90, 0xC3,
++                /* 0F78 */    0x1D, 0xD0, 0x71, 0x7D, 0xB8, 0x03, 0x2A, 0x27,
++                /* 0F80 */    0x2A, 0xFC, 0xE1, 0x0E, 0x30, 0xFB, 0xFF, 0x3F,
++                /* 0F88 */    0xDC, 0x01, 0x8C, 0x3A, 0xA3, 0xE1, 0x0E, 0x77,
++                /* 0F90 */    0x60, 0x3B, 0xFD, 0x00, 0xE7, 0xFF, 0xFF, 0xE9,
++                /* 0F98 */    0x07, 0x78, 0x8F, 0x15, 0xC6, 0x18, 0x78, 0xB4,
++                /* 0FA0 */    0x25, 0x51, 0x20, 0x87, 0x81, 0x41, 0x11, 0x38,
++                /* 0FA8 */    0xC8, 0xA1, 0x8E, 0x06, 0x3B, 0xBD, 0x40, 0x99,
++                /* 0FB0 */    0xCB, 0x81, 0x9E, 0xC2, 0x33, 0x82, 0x0F, 0x60,
++                /* 0FB8 */    0x60, 0x3F, 0xD5, 0x01, 0x87, 0x53, 0x03, 0x3E,
++                /* 0FC0 */    0xD0, 0x09, 0x05, 0x3D, 0x0A, 0x9F, 0x4D, 0xC0,
++                /* 0FC8 */    0x7B, 0xA4, 0x03, 0x36, 0xFF, 0xFF, 0xB3, 0x09,
++                /* 0FD0 */    0x7B, 0x35, 0xFA, 0x6C, 0x82, 0x63, 0x31, 0xEA,
++                /* 0FD8 */    0x1B, 0xC4, 0x21, 0xBE, 0x74, 0xF8, 0xDC, 0xF8,
++                /* 0FE0 */    0x4E, 0xE3, 0x4B, 0x00, 0xE6, 0xFA, 0x61, 0x82,
++                /* 0FE8 */    0x31, 0x21, 0xF4, 0xC9, 0xF2, 0xA9, 0x0E, 0x38,
++                /* 0FF0 */    0x1D, 0x4E, 0xE0, 0x8D, 0x1E, 0x77, 0x5A, 0xF0,
++                /* 0FF8 */    0x70, 0x38, 0xB8, 0x67, 0xF3, 0x2C, 0xF1, 0x44,
++                /* 1000 */    0xE4, 0x71, 0xF8, 0x74, 0x02, 0xBC, 0x0E, 0x18,
++                /* 1008 */    0x98, 0x19, 0x84, 0x7F, 0x08, 0x61, 0xA7, 0x4F,
++                /* 1010 */    0x1F, 0x99, 0x3C, 0xF7, 0x77, 0x23, 0x9F, 0x4E,
++                /* 1018 */    0x00, 0x5F, 0xFF, 0xFF, 0xA3, 0x1E, 0xB0, 0x90,
++                /* 1020 */    0xA8, 0xE1, 0x9C, 0x87, 0x11, 0x05, 0x83, 0x3A,
++                /* 1028 */    0xEA, 0x01, 0xD6, 0x2E, 0x7A, 0x36, 0x86, 0xA0,
++                /* 1030 */    0x8B, 0xC0, 0x19, 0x84, 0x78, 0xBC, 0x7B, 0xC5,
++                /* 1038 */    0x8B, 0xE4, 0x3B, 0x40, 0x9C, 0x47, 0x3D, 0x83,
++                /* 1040 */    0xBD, 0x7D, 0x3C, 0x48, 0x44, 0x89, 0xF3, 0xA8,
++                /* 1048 */    0xE7, 0xD1, 0x87, 0xF2, 0xE4, 0x43, 0x9D, 0x7E,
++                /* 1050 */    0xAC, 0xB0, 0x81, 0x9E, 0xF8, 0x5E, 0xF4, 0x42,
++                /* 1058 */    0x1A, 0xE1, 0x51, 0x8F, 0x09, 0x7A, 0x79, 0xE8,
++                /* 1060 */    0x70, 0xE5, 0xA3, 0x1E, 0x60, 0xE5, 0xFF, 0x7F,
++                /* 1068 */    0xD4, 0x03, 0xF8, 0xFF, 0xFF, 0x3F, 0xEA, 0x81,
++                /* 1070 */    0xF9, 0xF4, 0x04, 0xF8, 0x3F, 0xD6, 0xE0, 0x8E,
++                /* 1078 */    0x8A, 0x60, 0x3B, 0x3F, 0x01, 0x2E, 0xFE, 0xFF,
++                /* 1080 */    0xE7, 0x27, 0x30, 0x0D, 0xDD, 0xE7, 0x27, 0x30,
++                /* 1088 */    0x8F, 0x16, 0xE6, 0x01, 0x01, 0x71, 0x56, 0x44,
++                /* 1090 */    0x85, 0x7F, 0xC8, 0x18, 0x0E, 0x15, 0x1C, 0x48,
++                /* 1098 */    0xBF, 0x28, 0x1F, 0x01, 0x81, 0xCB, 0x51, 0x11,
++                /* 10A0 */    0x38, 0x9C, 0x59, 0xF0, 0x42, 0x4E, 0x1D, 0xE8,
++                /* 10A8 */    0xF1, 0x18, 0xF4, 0x95, 0xC3, 0x57, 0x02, 0x7E,
++                /* 10B0 */    0xE4, 0x60, 0xA1, 0x8F, 0x1C, 0xA0, 0x3A, 0x2C,
++                /* 10B8 */    0x82, 0xEF, 0xC8, 0x01, 0x8E, 0xEB, 0x55, 0x60,
++                /* 10C0 */    0xFE, 0xFF, 0x07, 0x66, 0xB7, 0x83, 0xD7, 0x4F,
++                /* 10C8 */    0x4F, 0xE2, 0x31, 0xEA, 0x38, 0x43, 0x14, 0x8E,
++                /* 10D0 */    0x49, 0x0E, 0x06, 0x91, 0xDE, 0xC1, 0xD8, 0x00,
++                /* 10D8 */    0x5F, 0x5E, 0x7C, 0xA8, 0xF2, 0x31, 0x10, 0x18,
++                /* 10E0 */    0x42, 0x9C, 0x0D, 0x3F, 0x5D, 0x18, 0xF3, 0x74,
++                /* 10E8 */    0xF8, 0x31, 0x10, 0xB0, 0x2E, 0xF5, 0x0C, 0x88,
++                /* 10F0 */    0x12, 0x77, 0x0C, 0x04, 0x52, 0xFF, 0xFF, 0x63,
++                /* 10F8 */    0x20, 0x70, 0xBD, 0x04, 0x7A, 0xCC, 0x67, 0xFC,
++                /* 1100 */    0xE6, 0xF7, 0xE4, 0x17, 0xA5, 0xB6, 0xEB, 0x9F,
++                /* 1108 */    0xEE, 0x06, 0xC6, 0x7A, 0x08, 0x78, 0x02, 0xF4,
++                /* 1110 */    0xFD, 0xCF, 0xC7, 0x8A, 0x28, 0x01, 0xA3, 0xC4,
++                /* 1118 */    0x7A, 0x11, 0x34, 0x66, 0x8C, 0x60, 0xEF, 0x80,
++                /* 1120 */    0x31, 0x1F, 0x09, 0x3D, 0xC2, 0x68, 0xC1, 0x0D,
++                /* 1128 */    0xF4, 0x18, 0xC8, 0x84, 0x1D, 0x03, 0x01, 0x12,
++                /* 1130 */    0xFD, 0xFF, 0x8F, 0x81, 0x00, 0x23, 0x4F, 0x50,
++                /* 1138 */    0xC0, 0xF6, 0xFF, 0x7F, 0x82, 0x02, 0x0C, 0x1D,
++                /* 1140 */    0x05, 0xC1, 0x7C, 0x86, 0x02, 0xAC, 0x1D, 0x05,
++                /* 1148 */    0xC1, 0x3E, 0x5A, 0x98, 0xA3, 0xE0, 0x82, 0x5E,
++                /* 1150 */    0x1E, 0x06, 0xA2, 0x12, 0x24, 0xFC, 0xFF, 0x8F,
++                /* 1158 */    0x82, 0xD8, 0xF8, 0x6B, 0x13, 0x8C, 0x43, 0x9D,
++                /* 1160 */    0x5E, 0xD0, 0x07, 0x05, 0x0F, 0xFB, 0xA9, 0xC0,
++                /* 1168 */    0x93, 0x38, 0x55, 0x5F, 0x0B, 0x8E, 0xE2, 0x09,
++                /* 1170 */    0xC0, 0x87, 0x41, 0xE0, 0x3F, 0x34, 0x58, 0x93,
++                /* 1178 */    0x28, 0x7E, 0x68, 0xA0, 0x3E, 0x7B, 0x80, 0x6F,
++                /* 1180 */    0x68, 0xE0, 0x88, 0x7A, 0xC6, 0x41, 0x9F, 0x88,
++                /* 1188 */    0x7C, 0x36, 0x88, 0xF9, 0xE6, 0x11, 0xE1, 0xC9,
++                /* 1190 */    0xC3, 0xD7, 0x07, 0x76, 0xF2, 0xF4, 0xA9, 0x29,
++                /* 1198 */    0x50, 0x94, 0xF7, 0x0D, 0x1E, 0xE7, 0x94, 0x03,
++                /* 11A0 */    0xAA, 0xC3, 0x2F, 0x38, 0x0E, 0xBC, 0x30, 0xFE,
++                /* 11A8 */    0xFF, 0x07, 0x5E, 0x76, 0x9C, 0xF2, 0xB1, 0x04,
++                /* 11B0 */    0x7C, 0x67, 0x52, 0x38, 0x37, 0x17, 0xDF, 0xF1,
++                /* 11B8 */    0xD8, 0x69, 0x00, 0x6C, 0x3A, 0x4E, 0x03, 0x40,
++                /* 11C0 */    0xE9, 0x58, 0xC5, 0xCF, 0x93, 0x60, 0x82, 0x39,
++                /* 11C8 */    0x98, 0xF7, 0x6B, 0x7B, 0x3F, 0xDE, 0xD0, 0xD3,
++                /* 11D0 */    0x24, 0xE0, 0xF8, 0xFF, 0x7F, 0x9A, 0x84, 0x21,
++                /* 11D8 */    0xE2, 0x28, 0x89, 0x8A, 0xFD, 0x90, 0xF2, 0x69,
++                /* 11E0 */    0x12, 0x90, 0x77, 0x67, 0x30, 0xC2, 0xF9, 0x87,
++                /* 11E8 */    0x78, 0x80, 0x08, 0xF1, 0x20, 0x69, 0x90, 0x38,
++                /* 11F0 */    0x41, 0x5E, 0x06, 0x9E, 0x26, 0x7D, 0x99, 0x8C,
++                /* 11F8 */    0xF3, 0x40, 0x19, 0xE5, 0x75, 0xD2, 0x08, 0x47,
++                /* 1200 */    0x1F, 0xCF, 0x40, 0x2F, 0x92, 0x21, 0x5E, 0x25,
++                /* 1208 */    0x1F, 0x2C, 0xDF, 0x27, 0x8D, 0x16, 0x2B, 0xF8,
++                /* 1210 */    0x31, 0x3E, 0x4D, 0xB2, 0xC8, 0x2B, 0xD6, 0x69,
++                /* 1218 */    0x12, 0xB0, 0xF9, 0xFF, 0x3F, 0x4D, 0x02, 0xFC,
++                /* 1220 */    0xFF, 0xFF, 0x9F, 0x1D, 0xD8, 0xC1, 0x0A, 0x38,
++                /* 1228 */    0x1E, 0xC3, 0xC0, 0x71, 0xB0, 0x02, 0x2E, 0xE7,
++                /* 1230 */    0x79, 0xF0, 0x1C, 0x1F, 0x61, 0x1C, 0x99, 0x00,
++                /* 1238 */    0xD7, 0xFF, 0xFF, 0xB1, 0xC2, 0x18, 0x03, 0x4F,
++                /* 1240 */    0xF6, 0x34, 0xA0, 0xC7, 0x01, 0x8B, 0x3A, 0x30,
++                /* 1248 */    0x09, 0x86, 0xB3, 0xF8, 0xB0, 0xE0, 0x23, 0x02,
++                /* 1250 */    0x3F, 0x2C, 0x78, 0x04, 0x15, 0x8F, 0x93, 0x1E,
++                /* 1258 */    0x8B, 0x7C, 0x98, 0x64, 0x87, 0x04, 0x1F, 0x42,
++                /* 1260 */    0x3C, 0x48, 0x9F, 0x50, 0xC1, 0x73, 0xB0, 0x82,
++                /* 1268 */    0x77, 0x5D, 0x82, 0x73, 0x2A, 0x00, 0xDC, 0x68,
++                /* 1270 */    0x57, 0x71, 0xBA, 0x60, 0x01, 0x0E, 0x60, 0xB2,
++                /* 1278 */    0x71, 0x0C, 0xA1, 0x1C, 0x8E, 0xF9, 0xF6, 0xD0,
++                /* 1280 */    0x34, 0xD9, 0x91, 0x0C, 0x66, 0x2C, 0x48, 0x9D,
++                /* 1288 */    0x04, 0x3C, 0x00, 0x07, 0x82, 0x91, 0x76, 0x12,
++                /* 1290 */    0x8D, 0xC6, 0x70, 0x56, 0x0B, 0x23, 0x38, 0x83,
++                /* 1298 */    0xF8, 0x38, 0xE2, 0x5C, 0x47, 0x2A, 0xF4, 0x6E,
++                /* 12A0 */    0x74, 0x9C, 0x42, 0x05, 0xB9, 0x97, 0xD0, 0x79,
++                /* 12A8 */    0xFB, 0x6E, 0xC0, 0xDF, 0x69, 0x1E, 0x8B, 0x81,
++                /* 12B0 */    0x7D, 0x43, 0xF0, 0xFF, 0xFF, 0x76, 0x02, 0x7F,
++                /* 12B8 */    0x2E, 0x56, 0x03, 0x8A, 0x1A, 0x80, 0xD1, 0x30,
++                /* 12C0 */    0xA7, 0x80, 0xA7, 0x12, 0x70, 0x05, 0x9B, 0x1B,
++                /* 12C8 */    0xFA, 0xC2, 0x62, 0xAD, 0x53, 0xD1, 0xF1, 0xE9,
++                /* 12D0 */    0x7D, 0xE0, 0xE0, 0x80, 0xC7, 0xEC, 0x3D, 0x38,
++                /* 12D8 */    0x58, 0x68, 0x1E, 0x1C, 0xD8, 0xB2, 0x0D, 0x0E,
++                /* 12E0 */    0xAD, 0xE4, 0x2E, 0x42, 0x0E, 0x1F, 0xF8, 0xD9,
++                /* 12E8 */    0x01, 0x07, 0x40, 0xCF, 0x0E, 0x16, 0x92, 0x67,
++                /* 12F0 */    0x07, 0x36, 0x7D, 0x67, 0x11, 0x50, 0x00, 0xF9,
++                /* 12F8 */    0xDE, 0xE1, 0x73, 0xCB, 0xFF, 0xFF, 0xD9, 0x83,
++                /* 1300 */    0x8D, 0xE1, 0xD1, 0xC5, 0x68, 0x46, 0xE7, 0x9A,
++                /* 1308 */    0x6E, 0x13, 0x28, 0x15, 0xB7, 0x09, 0x0A, 0xE2,
++                /* 1310 */    0x1B, 0x80, 0x13, 0xD2, 0xE8, 0x9E, 0x86, 0x9B,
++                /* 1318 */    0x89, 0xF1, 0x1F, 0x31, 0x7C, 0x44, 0x38, 0xA4,
++                /* 1320 */    0xB3, 0x35, 0xC1, 0x3C, 0x90, 0x7A, 0x3F, 0xFA,
++                /* 1328 */    0xB2, 0x87, 0x9F, 0x7D, 0xC8, 0x07, 0x17, 0x4F,
++                /* 1330 */    0xC3, 0xD7, 0x1B, 0x72, 0xEF, 0xA0, 0xD3, 0xF6,
++                /* 1338 */    0x99, 0x01, 0x73, 0x42, 0xF6, 0x75, 0x2A, 0x81,
++                /* 1340 */    0x65, 0x5D, 0x25, 0xA8, 0x87, 0x0B, 0x08, 0xBD,
++                /* 1348 */    0xD0, 0xF8, 0x5E, 0x98, 0xE0, 0xE1, 0xCC, 0xB7,
++                /* 1350 */    0xB3, 0xF7, 0x12, 0x76, 0x38, 0x4C, 0xF0, 0x6E,
++                /* 1358 */    0x98, 0x60, 0xDE, 0x41, 0xA0, 0x46, 0xE5, 0x41,
++                /* 1360 */    0x60, 0x2E, 0xFF, 0x2C, 0xDF, 0x18, 0x50, 0xC9,
++                /* 1368 */    0x2E, 0x5A, 0xF4, 0x0C, 0xF3, 0x0E, 0xE3, 0x4B,
++                /* 1370 */    0x82, 0xAF, 0x1F, 0x3E, 0xB7, 0x78, 0x01, 0xAF,
++                /* 1378 */    0x5B, 0x30, 0x08, 0x9E, 0x81, 0x5E, 0x5D, 0x7C,
++                /* 1380 */    0xCB, 0x37, 0xF0, 0xAB, 0xC0, 0x1B, 0x4D, 0x88,
++                /* 1388 */    0x60, 0x86, 0x3D, 0xFC, 0xB7, 0x7D, 0xA3, 0xFA,
++                /* 1390 */    0xA6, 0x63, 0xAC, 0xD7, 0x11, 0x8F, 0x94, 0x1F,
++                /* 1398 */    0x5B, 0x0E, 0x28, 0xD2, 0x5B, 0x9F, 0x27, 0xE0,
++                /* 13A0 */    0xB3, 0x8C, 0x8F, 0x83, 0x27, 0xE5, 0x7B, 0xA5,
++                /* 13A8 */    0xD1, 0x5F, 0x21, 0x7C, 0xF8, 0x31, 0xB2, 0xCF,
++                /* 13B0 */    0x39, 0xEC, 0x60, 0xC8, 0x06, 0xC5, 0x11, 0x1F,
++                /* 13B8 */    0x18, 0x5E, 0x6A, 0x3C, 0x15, 0x76, 0xEE, 0x82,
++                /* 13C0 */    0x71, 0x70, 0x60, 0xC7, 0x22, 0xCC, 0x51, 0x0F,
++                /* 13C8 */    0x5C, 0x27, 0x1B, 0x03, 0xB3, 0xFF, 0xFF, 0xC9,
++                /* 13D0 */    0x01, 0x9C, 0xF0, 0x98, 0x13, 0xB3, 0xCF, 0x1B,
++                /* 13D8 */    0xBE, 0x19, 0x78, 0x5C, 0xFC, 0xC8, 0xE1, 0xE3,
++                /* 13E0 */    0x1D, 0xC3, 0x3E, 0x4D, 0x1F, 0x8D, 0x5E, 0xDE,
++                /* 13E8 */    0x7C, 0x7A, 0xC1, 0xC0, 0xFA, 0xD2, 0xC0, 0x61,
++                /* 13F0 */    0x8D, 0x16, 0xF6, 0x31, 0xE0, 0xCC, 0x7D, 0x21,
++                /* 13F8 */    0xC2, 0x9D, 0x3A, 0xC1, 0x02, 0x88, 0xBF, 0x95,
++                /* 1400 */    0x3C, 0x72, 0x78, 0x02, 0x06, 0x64, 0xB9, 0xD7,
++                /* 1408 */    0xA5, 0x03, 0x11, 0x3F, 0xE5, 0x59, 0xDD, 0x81,
++                /* 1410 */    0x08, 0x81, 0xF1, 0x38, 0xFA, 0xF8, 0xE1, 0xD9,
++                /* 1418 */    0xF8, 0x28, 0xE0, 0x63, 0x94, 0x67, 0x7E, 0x46,
++                /* 1420 */    0x91, 0x5E, 0x19, 0xAC, 0xE5, 0x44, 0x84, 0x52,
++                /* 1428 */    0x01, 0xA3, 0xC0, 0x34, 0xBA, 0x73, 0xF0, 0x88,
++                /* 1430 */    0x30, 0x82, 0x33, 0x88, 0x47, 0xEB, 0x9B, 0x0B,
++                /* 1438 */    0x30, 0x3D, 0x13, 0x01, 0x97, 0xEB, 0xA5, 0x71,
++                /* 1440 */    0xFD, 0xFF, 0xBF, 0x2C, 0x62, 0xA7, 0x6D, 0xDC,
++                /* 1448 */    0x57, 0x54, 0x9F, 0x8E, 0x3D, 0xF1, 0xD3, 0x86,
++                /* 1450 */    0x71, 0x32, 0x02, 0x7C, 0xDC, 0x75, 0x00, 0xFE,
++                /* 1458 */    0xFC, 0xFF, 0xEF, 0x3A, 0x00, 0xB7, 0xEE, 0x0F,
++                /* 1460 */    0xBE, 0xEB, 0x00, 0xD7, 0x48, 0xAB, 0xA2, 0x22,
++                /* 1468 */    0x7E, 0x0B, 0x0A, 0x01, 0x83, 0x1A, 0x9D, 0xAF,
++                /* 1470 */    0x15, 0xF8, 0x63, 0x09, 0x23, 0xF8, 0xFF, 0x07,
++                /* 1478 */    0xF7, 0x79, 0xC5, 0x70, 0x7C, 0xE0, 0x1E, 0xDF,
++                /* 1480 */    0xEB, 0xCA, 0x69, 0x3D, 0x1B, 0xF8, 0xC6, 0x62,
++                /* 1488 */    0x48, 0x76, 0x41, 0xC5, 0xDD, 0x2F, 0x7C, 0xA3,
++                /* 1490 */    0xF6, 0x54, 0x5F, 0x14, 0xDE, 0x13, 0x7C, 0x47,
++                /* 1498 */    0x60, 0x50, 0x30, 0xEE, 0xA8, 0x98, 0x03, 0x2A,
++                /* 14A0 */    0x1C, 0x82, 0x33, 0x3E, 0x0A, 0xCC, 0x20, 0x7D,
++                /* 14A8 */    0x48, 0x79, 0x3D, 0xF0, 0x60, 0x99, 0xFB, 0xE3,
++                /* 14B0 */    0x86, 0x2E, 0x11, 0x0F, 0x1B, 0x4F, 0x06, 0xCD,
++                /* 14B8 */    0xA1, 0xE8, 0x4C, 0x70, 0x0A, 0x6D, 0x0D, 0x4B,
++                /* 14C0 */    0x38, 0xEF, 0x1B, 0x21, 0xA2, 0x04, 0x7B, 0xE1,
++                /* 14C8 */    0x78, 0x63, 0x78, 0x9A, 0x8D, 0x12, 0x2F, 0x52,
++                /* 14D0 */    0xC0, 0x68, 0x51, 0x82, 0xF5, 0x06, 0x21, 0xD0,
++                /* 14D8 */    0x48, 0x21, 0x02, 0x86, 0x28, 0x0E, 0x4B, 0x70,
++                /* 14E0 */    0xD1, 0xDB, 0xBF, 0xC6, 0xB3, 0x37, 0x81, 0x8E,
++                /* 14E8 */    0x32, 0x8E, 0x74, 0xDC, 0x41, 0x0F, 0xDB, 0x37,
++                /* 14F0 */    0x56, 0x7E, 0xBE, 0xF7, 0xB8, 0x7C, 0x01, 0xC5,
++                /* 14F8 */    0x10, 0xBC, 0x66, 0xF8, 0x0B, 0xE0, 0x03, 0x00,
++                /* 1500 */    0xDE, 0x35, 0xA0, 0x66, 0xFE, 0x78, 0x00, 0x96,
++                /* 1508 */    0xEB, 0x35, 0xF8, 0xE4, 0x0F, 0x02, 0x75, 0x99,
++                /* 1510 */    0xE1, 0x67, 0x0F, 0xDF, 0x5C, 0x7D, 0x0F, 0x38,
++                /* 1518 */    0x2C, 0x76, 0xEB, 0xE6, 0xE3, 0x01, 0xFF, 0xFF,
++                /* 1520 */    0x7F, 0xE8, 0x2F, 0xBD, 0x3E, 0x54, 0x78, 0xBE,
++                /* 1528 */    0xBE, 0xFA, 0xFA, 0xF6, 0x0D, 0xDE, 0xCB, 0x31,
++                /* 1530 */    0x60, 0x4F, 0xF0, 0x0D, 0x1C, 0xE4, 0xE3, 0x05,
++                /* 1538 */    0xC3, 0x38, 0xB8, 0x72, 0x12, 0x7A, 0x2C, 0xB0,
++                /* 1540 */    0x56, 0x18, 0xD4, 0x2D, 0x1C, 0x5C, 0x9A, 0xC0,
++                /* 1548 */    0x75, 0x55, 0xF6, 0xA1, 0xC6, 0x87, 0x60, 0xFC,
++                /* 1550 */    0xF9, 0x02, 0x17, 0x60, 0xC8, 0xF4, 0x54, 0x06,
++                /* 1558 */    0xE3, 0x9A, 0xE2, 0x53, 0x19, 0xFB, 0xFF, 0x9F,
++                /* 1560 */    0xCA, 0x7C, 0x77, 0xF0, 0x80, 0x7C, 0xC4, 0x00,
++                /* 1568 */    0x3E, 0xAB, 0xF0, 0xC0, 0x70, 0xA7, 0x05, 0xDF,
++                /* 1570 */    0x94, 0x0C, 0x7A, 0x8E, 0x41, 0x7D, 0xE4, 0x39,
++                /* 1578 */    0x79, 0xDF, 0x13, 0x1E, 0x27, 0x1C, 0xF5, 0x1C,
++                /* 1580 */    0x44, 0xC7, 0x06, 0x8E, 0xE3, 0x06, 0x38, 0x0E,
++                /* 1588 */    0x37, 0xB8, 0x73, 0x1E, 0x1B, 0x17, 0x06, 0xEE,
++                /* 1590 */    0xB9, 0xC0, 0xC3, 0xF0, 0x4D, 0xC7, 0x23, 0xC2,
++                /* 1598 */    0x8C, 0xFF, 0x51, 0xCF, 0x08, 0x01, 0xF1, 0x17,
++                /* 15A0 */    0x23, 0x36, 0x60, 0x30, 0xDE, 0xDA, 0x7C, 0x7D,
++                /* 15A8 */    0xC3, 0x0D, 0xD8, 0x57, 0x07, 0x5F, 0x30, 0x7C,
++                /* 15B0 */    0x02, 0x33, 0xFA, 0x0B, 0xCC, 0x93, 0x98, 0x8F,
++                /* 15B8 */    0x0D, 0xE4, 0x02, 0x47, 0x07, 0x0C, 0x0E, 0x40,
++                /* 15C0 */    0x0F, 0x18, 0xFE, 0xE1, 0xE2, 0x5D, 0x0E, 0x0C,
++                /* 15C8 */    0x57, 0x41, 0xFF, 0xFF, 0x8F, 0x0B, 0x3E, 0xF6,
++                /* 15D0 */    0x58, 0xD1, 0x5D, 0x0E, 0x7D, 0x93, 0x33, 0x4C,
++                /* 15D8 */    0x1C, 0x43, 0xBC, 0x81, 0xB1, 0xBB, 0x04, 0x39,
++                /* 15E0 */    0xCC, 0x41, 0xBD, 0x4B, 0x78, 0x0E, 0xFC, 0x6C,
++                /* 15E8 */    0xE1, 0x13, 0x9C, 0x6F, 0x3E, 0x21, 0x4E, 0xF5,
++                /* 15F0 */    0xD1, 0xEA, 0x3D, 0xC0, 0x47, 0x8F, 0xF7, 0x2E,
++                /* 15F8 */    0x9F, 0x9D, 0xD8, 0x45, 0xC0, 0x47, 0x2E, 0xE3,
++                /* 1600 */    0x78, 0x9A, 0xBE, 0x02, 0x7A, 0xC8, 0x06, 0x7B,
++                /* 1608 */    0xD5, 0xF0, 0x09, 0xCC, 0x47, 0x37, 0xDC, 0x31,
++                /* 1610 */    0xCA, 0x33, 0xF1, 0xF4, 0x7D, 0x07, 0x61, 0x47,
++                /* 1618 */    0x92, 0xA3, 0x0E, 0x75, 0x4D, 0x8F, 0x28, 0x27,
++                /* 1620 */    0x74, 0x20, 0xBE, 0xB5, 0x81, 0x33, 0xDA, 0xFD,
++                /* 1628 */    0x03, 0xBD, 0x4D, 0x8F, 0x0C, 0x73, 0x34, 0x80,
++                /* 1630 */    0x75, 0x09, 0x01, 0xD7, 0x1D, 0xC3, 0x97, 0x10,
++                /* 1638 */    0xE0, 0x13, 0xF4, 0x12, 0x81, 0xBE, 0x66, 0x78,
++                /* 1640 */    0x74, 0x8F, 0x00, 0x98, 0x2B, 0x06, 0x3B, 0x16,
++                /* 1648 */    0xF8, 0xB0, 0xE1, 0x6B, 0x00, 0xBB, 0x17, 0x38,
++                /* 1650 */    0xCC, 0x3D, 0x02, 0xE2, 0xFF, 0x7F, 0x78, 0x30,
++                /* 1658 */    0x40, 0x3D, 0x3C, 0xF8, 0x6A, 0xEF, 0x11, 0xA0,
++                /* 1660 */    0x38, 0x59, 0xFA, 0xD0, 0xE0, 0x81, 0x5A, 0xD5,
++                /* 1668 */    0x19, 0x13, 0xCA, 0x11, 0x93, 0x43, 0x45, 0x63,
++                /* 1670 */    0xB7, 0x02, 0x76, 0xBB, 0xF4, 0x4D, 0x02, 0x6E,
++                /* 1678 */    0x9E, 0x59, 0xA0, 0x92, 0xDC, 0x24, 0xA0, 0xC3,
++                /* 1680 */    0x74, 0x79, 0x99, 0xA1, 0xF3, 0x3F, 0x70, 0xDF,
++                /* 1688 */    0xEA, 0x3C, 0x42, 0x1F, 0x22, 0x18, 0xCA, 0x7B,
++                /* 1690 */    0x9E, 0x4F, 0x61, 0xFC, 0x0C, 0xE1, 0x03, 0x26,
++                /* 1698 */    0x3B, 0x53, 0xF0, 0xB3, 0x26, 0xEE, 0x0E, 0x60,
++                /* 16A0 */    0x94, 0x37, 0x4F, 0x4F, 0x80, 0x9D, 0x3F, 0x8D,
++                /* 16A8 */    0xFC, 0x6E, 0xF0, 0x2E, 0xE0, 0xE9, 0xFB, 0x5E,
++                /* 16B0 */    0xC4, 0x4F, 0x14, 0xE0, 0x0B, 0x76, 0xA7, 0x83,
++                /* 16B8 */    0x02, 0x7D, 0x42, 0x1E, 0x91, 0x51, 0x7D, 0x44,
++                /* 16C0 */    0xE0, 0x97, 0x24, 0x30, 0x1E, 0x49, 0x7C, 0xA0,
++                /* 16C8 */    0x00, 0xC3, 0xFF, 0xFF, 0x40, 0x01, 0xBA, 0x7B,
++                /* 16D0 */    0x01, 0xEA, 0xF4, 0xC1, 0x0F, 0xCF, 0xBE, 0xA0,
++                /* 16D8 */    0x1A, 0xF3, 0xDD, 0xEA, 0x11, 0xCE, 0x93, 0xC3,
++                /* 16E0 */    0x5C, 0x0E, 0x58, 0x9C, 0x6B, 0x12, 0xA8, 0x8E,
++                /* 16E8 */    0xBB, 0x7C, 0x74, 0x70, 0xAF, 0xAD, 0xF8, 0xC1,
++                /* 16F0 */    0xBD, 0xB3, 0xBC, 0xF3, 0x19, 0xCA, 0x83, 0x04,
++                /* 16F8 */    0xDF, 0xB5, 0x15, 0x1C, 0x57, 0x35, 0x18, 0xC7,
++                /* 1700 */    0x16, 0x7E, 0xC9, 0x03, 0xEC, 0x0C, 0x8B, 0x0B,
++                /* 1708 */    0xFE, 0x7B, 0x18, 0x88, 0x4A, 0x84, 0x41, 0x11,
++                /* 1710 */    0x58, 0x9E, 0x81, 0xFF, 0xFF, 0xB9, 0x80, 0xC1,
++                /* 1718 */    0x1F, 0x32, 0x18, 0x6F, 0x0A, 0x7C, 0xD2, 0xD8,
++                /* 1720 */    0x51, 0x03, 0x76, 0x86, 0x8A, 0xBB, 0x29, 0x82,
++                /* 1728 */    0x75, 0xAA, 0x98, 0x21, 0xF0, 0x60, 0x0F, 0x00,
++                /* 1730 */    0x9F, 0xAF, 0x7C, 0x06, 0x50, 0x14, 0x18, 0xD4,
++                /* 1738 */    0xA1, 0x1D, 0xCE, 0x6D, 0x18, 0x70, 0x30, 0x62,
++                /* 1740 */    0xDC, 0xC1, 0xE0, 0xFF, 0xFF, 0x52, 0x08, 0x73,
++                /* 1748 */    0xCA, 0xEF, 0x28, 0xB1, 0x9F, 0xCB, 0xD9, 0x74,
++                /* 1750 */    0x71, 0x57, 0x73, 0x9F, 0x4E, 0xD8, 0x05, 0x19,
++                /* 1758 */    0xC6, 0x59, 0xE0, 0x11, 0xE0, 0xD5, 0x9C, 0x5F,
++                /* 1760 */    0x90, 0x5F, 0x88, 0x5F, 0x08, 0xDE, 0x90, 0x7D,
++                /* 1768 */    0x53, 0x7A, 0x36, 0x78, 0xD9, 0x89, 0xF1, 0x6E,
++                /* 1770 */    0xEC, 0x53, 0xB2, 0xCF, 0x3B, 0x2F, 0xC8, 0xC6,
++                /* 1778 */    0x38, 0x9A, 0x88, 0x51, 0xCE, 0xED, 0x61, 0xE0,
++                /* 1780 */    0x35, 0xD9, 0x28, 0xEF, 0x27, 0x2F, 0x04, 0x11,
++                /* 1788 */    0xA3, 0x19, 0x22, 0x68, 0x8C, 0x40, 0xEF, 0xCB,
++                /* 1790 */    0xC6, 0x7B, 0x41, 0x66, 0x02, 0xDF, 0x0A, 0x3A,
++                /* 1798 */    0xB8, 0xF8, 0x82, 0x0C, 0xF0, 0xE3, 0x64, 0x04,
++                /* 17A0 */    0xB6, 0xFF, 0xFF, 0xC9, 0x08, 0x30, 0x74, 0xE2,
++                /* 17A8 */    0xC0, 0x5D, 0xAA, 0xC1, 0x77, 0xB2, 0x01, 0x9C,
++                /* 17B0 */    0x0D, 0xDD, 0x27, 0x1B, 0x70, 0x8F, 0x16, 0xDE,
++                /* 17B8 */    0xD1, 0x04, 0x71, 0xB2, 0xA1, 0x40, 0x0E, 0xEE,
++                /* 17C0 */    0xE0, 0xFF, 0x7F, 0x68, 0xC2, 0x86, 0x3E, 0x89,
++                /* 17C8 */    0xD0, 0xA3, 0x93, 0x8F, 0x92, 0xB8, 0x33, 0x83,
++                /* 17D0 */    0x27, 0xF2, 0xCE, 0xE2, 0x51, 0xBC, 0x0C, 0xFA,
++                /* 17D8 */    0x5E, 0x70, 0x22, 0xAF, 0x0F, 0x96, 0x73, 0x8C,
++                /* 17E0 */    0x04, 0xD5, 0x48, 0x7C, 0x7C, 0x80, 0x7F, 0x7D,
++                /* 17E8 */    0xF1, 0x31, 0x12, 0x3E, 0x9F, 0x7F, 0x58, 0x1E,
++                /* 17F0 */    0x8C, 0x21, 0x7D, 0x8A, 0xE4, 0x20, 0xCF, 0x2E,
++                /* 17F8 */    0x8F, 0x21, 0xFC, 0x02, 0x09, 0xF7, 0x34, 0x73,
++                /* 1800 */    0x00, 0x18, 0x59, 0x97, 0x47, 0xF4, 0xD9, 0x91,
++                /* 1808 */    0x63, 0xC4, 0xF5, 0x45, 0xD1, 0x57, 0x60, 0x1F,
++                /* 1810 */    0x04, 0xCE, 0xE7, 0x39, 0x11, 0xAC, 0xA3, 0xE6,
++                /* 1818 */    0x47, 0x1B, 0x3E, 0x7E, 0x0E, 0xFE, 0x56, 0xF0,
++                /* 1820 */    0x40, 0xE9, 0x63, 0x51, 0x88, 0x47, 0x24, 0x7E,
++                /* 1828 */    0x4E, 0x04, 0x97, 0x89, 0x73, 0x22, 0x90, 0x18,
++                /* 1830 */    0x9C, 0xFF, 0xFF, 0x87, 0x5E, 0xEC, 0x69, 0x01,
++                /* 1838 */    0x37, 0x10, 0x9F, 0x29, 0xB1, 0x53, 0x3E, 0x11,
++                /* 1840 */    0x76, 0x2E, 0xC1, 0x8C, 0x0E, 0x5C, 0x97, 0x7B,
++                /* 1848 */    0x8F, 0x0E, 0xFC, 0x27, 0x01, 0x3C, 0xD6, 0xE3,
++                /* 1850 */    0x1D, 0xF8, 0x4E, 0xEA, 0xBE, 0x9B, 0xF8, 0x22,
++                /* 1858 */    0xE3, 0x43, 0xD1, 0xF3, 0x1D, 0xE0, 0x3F, 0x9C,
++                /* 1860 */    0x84, 0xFF, 0xFF, 0xE1, 0x0E, 0x13, 0xE7, 0x7C,
++                /* 1868 */    0x07, 0x50, 0xE3, 0x6C, 0xFD, 0x7C, 0x07, 0x76,
++                /* 1870 */    0x91, 0xE7, 0x3B, 0x40, 0xCC, 0xFF, 0xFF, 0x7C,
++                /* 1878 */    0x07, 0xB0, 0xEB, 0x8C, 0x86, 0x3B, 0xDF, 0x81,
++                /* 1880 */    0xED, 0x68, 0x03, 0x3C, 0xFF, 0xFF, 0x47, 0x1B,
++                /* 1888 */    0x60, 0x34, 0x8D, 0x47, 0x1B, 0x70, 0x0F, 0x17,
++                /* 1890 */    0xF6, 0x30, 0xB8, 0x42, 0x9B, 0x3E, 0x35, 0x1A,
++                /* 1898 */    0xB5, 0x6A, 0x50, 0xA6, 0x46, 0x99, 0x06, 0xB5,
++                /* 18A0 */    0xFA, 0x54, 0x6A, 0xCC, 0x98, 0x84, 0xD3, 0x8D,
++                /* 18A8 */    0x02, 0x3E, 0x2A, 0x34, 0x36, 0xCB, 0xA3, 0x10,
++                /* 18B0 */    0x88, 0xC5, 0xBC, 0x1A, 0x04, 0xE2, 0xB0, 0x20,
++                /* 18B8 */    0x34, 0xD2, 0x2B, 0x47, 0x20, 0x96, 0xFC, 0xEC,
++                /* 18C0 */    0x17, 0x88, 0xE5, 0xBE, 0x19, 0x04, 0xE2, 0x80,
++                /* 18C8 */    0x6F, 0x30, 0x81, 0x93, 0x87, 0x95, 0xC0, 0xC9,
++                /* 18D0 */    0xBB, 0x41, 0x20, 0x8E, 0x0C, 0x42, 0x85, 0xEA,
++                /* 18D8 */    0x00, 0x61, 0x31, 0x41, 0x68, 0x28, 0x1F, 0x20,
++                /* 18E0 */    0x4C, 0xFA, 0x23, 0x41, 0x80, 0xC4, 0x08, 0x08,
++                /* 18E8 */    0x0B, 0xF7, 0xFE, 0x12, 0x88, 0xA5, 0xBD, 0x27,
++                /* 18F0 */    0x04, 0x62, 0x21, 0x56, 0x40, 0x58, 0x5C, 0x10,
++                /* 18F8 */    0x1A, 0x4E, 0x0B, 0x08, 0x93, 0x64, 0x06, 0x84,
++                /* 1900 */    0x05, 0x02, 0xA1, 0xF2, 0xD5, 0x80, 0x30, 0x91,
++                /* 1908 */    0x6E, 0x00, 0xE9, 0xEA, 0x05, 0xE2, 0x20, 0x7A,
++                /* 1910 */    0x40, 0x98, 0x0C, 0x3F, 0x20, 0x2C, 0x34, 0x08,
++                /* 1918 */    0x8D, 0xF6, 0xC0, 0x10, 0x20, 0x31, 0x04, 0xC2,
++                /* 1920 */    0xE2, 0x3B, 0x02, 0x61, 0xE2, 0x5F, 0x45, 0x02,
++                /* 1928 */    0x71, 0x7E, 0x4B, 0x10, 0x37, 0xA5, 0x21, 0xD6,
++                /* 1930 */    0x04, 0xC4, 0x34, 0x78, 0x02, 0x62, 0x8A, 0x40,
++                /* 1938 */    0x04, 0xE4, 0xD8, 0x4F, 0x0F, 0x01, 0x59, 0x83,
++                /* 1940 */    0x29, 0x20, 0xFF, 0xFF, 0x09, 0x46, 0x07, 0x11,
++                /* 1948 */    0x90, 0x85, 0xA8, 0x02, 0x62, 0x79, 0x5D, 0x01,
++                /* 1950 */    0xB1, 0xF0, 0x20, 0x02, 0x72, 0xE6, 0x97, 0x9F,
++                /* 1958 */    0x80, 0xAC, 0xE0, 0xA5, 0xF3, 0x10, 0xC0, 0xDE,
++                /* 1960 */    0x10, 0x81, 0x48, 0x72, 0x10, 0x01, 0x39, 0xB0,
++                /* 1968 */    0x2F, 0x20, 0x16, 0x1F, 0x44, 0x40, 0xCE, 0xFA,
++                /* 1970 */    0x28, 0x14, 0x90, 0x83, 0x83, 0x68, 0x10, 0xE4,
++                /* 1978 */    0x6B, 0x26, 0x20, 0xA7, 0x07, 0x11, 0x10, 0xF9,
++                /* 1980 */    0x04, 0x05, 0x21, 0x6A, 0xBD, 0x81, 0x30, 0x3D,
++                /* 1988 */    0x8F, 0x42, 0x0D, 0x85, 0x80, 0x50, 0xE5, 0xEA,
++                /* 1990 */    0xCE, 0x31, 0x2C, 0x07, 0x08, 0xCD, 0x05, 0x22,
++                /* 1998 */    0x30, 0xAB, 0x70, 0x07, 0xC4, 0x54, 0x81, 0x08,
++                /* 19A0 */    0xC8, 0x09, 0x80, 0x68, 0x2A, 0x10, 0x9A, 0x12,
++                /* 19A8 */    0x8C, 0xEA, 0x92, 0x07, 0xC4, 0x12, 0x80, 0xD0,
++                /* 19B0 */    0x54, 0x20, 0x34, 0x25, 0x88, 0x00, 0xAD, 0xCA,
++                /* 19B8 */    0x1E, 0x10, 0x53, 0x0A, 0x42, 0x95, 0x83, 0xD0,
++                /* 19C0 */    0x74, 0x20, 0x54, 0xB6, 0xBE, 0xC3, 0x02, 0x05,
++                /* 19C8 */    0x11, 0x90, 0xA3, 0x83, 0x50, 0xE1, 0xFE, 0x40,
++                /* 19D0 */    0x98, 0xDE, 0x97, 0x86, 0x00, 0x9D, 0x0E, 0x44,
++                /* 19D8 */    0x40, 0x4E, 0x0C, 0x42, 0x15, 0x7C, 0x32, 0x82,
++                /* 19E0 */    0x10, 0xB1, 0x20, 0x54, 0xC1, 0x27, 0x23, 0x28,
++                /* 19E8 */    0xD1, 0xF2, 0xB2, 0x13, 0x90, 0xF5, 0x81, 0x50,
++                /* 19F0 */    0xBD, 0x20, 0x02, 0x73, 0x36, 0x20, 0x9A, 0x17,
++                /* 19F8 */    0x84, 0xE6, 0x07, 0xA3, 0x5A, 0x8D, 0x02, 0x31,
++                /* 1A00 */    0xFD, 0x20, 0x34, 0x0F, 0x88, 0xC0, 0xAC, 0xE0,
++                /* 1A08 */    0xF9, 0x71, 0xC0, 0x0C, 0x84, 0xAA, 0x04, 0x11,
++                /* 1A10 */    0x98, 0x73, 0x01, 0xD1, 0xAC, 0x20, 0x34, 0x3B,
++                /* 1A18 */    0x18, 0xD5, 0xFE, 0x0F, 0xD1, 0x00, 0x08, 0x08,
++                /* 1A20 */    0xCD, 0x07, 0xA2, 0xC3, 0x00, 0x79, 0x96, 0x09,
++                /* 1A28 */    0xC8, 0x1A, 0x41, 0xC8, 0xFF, 0x9F, 0xA0, 0x66,
++                /* 1A30 */    0x10, 0x1D, 0x0F, 0x08, 0x10, 0xCD, 0x0F, 0x42,
++                /* 1A38 */    0xF5, 0xFC, 0x4D, 0x82, 0x91, 0x0C, 0x20, 0x02,
++                /* 1A40 */    0xB2, 0x96, 0x27, 0x68, 0x20, 0xA2, 0x1F, 0x44,
++                /* 1A48 */    0x40, 0xCE, 0x04, 0x42, 0x33, 0x82, 0x51, 0xB5,
++                /* 1A50 */    0x6F, 0x1D, 0x1D, 0x07, 0x08, 0x08, 0x4D, 0x04,
++                /* 1A58 */    0xA2, 0xE1, 0x91, 0x77, 0xCF, 0xE1, 0x31, 0x10,
++                /* 1A60 */    0xAA, 0x12, 0x44, 0x60, 0xD6, 0xF8, 0x74, 0x11,
++                /* 1A68 */    0x88, 0x13, 0x82, 0x50, 0xF5, 0x76, 0x0F, 0x0C,
++                /* 1A70 */    0x54, 0xEF, 0x20, 0xA8, 0xE0, 0x41, 0x50, 0x10,
++                /* 1A78 */    0x9A, 0x08, 0x44, 0x87, 0x0C, 0xF2, 0x3E, 0x13,
++                /* 1A80 */    0x90, 0x75, 0x81, 0x50, 0x9D, 0x20, 0x1A, 0x32,
++                /* 1A88 */    0x01, 0xA2, 0x59, 0x41, 0x68, 0x76, 0x30, 0x9A,
++                /* 1A90 */    0xFD, 0x9B, 0xA4, 0x61, 0x90, 0xEF, 0x95, 0x0E,
++                /* 1A98 */    0x0C, 0xE4, 0x11, 0x17, 0x84, 0x28, 0xFA, 0x18,
++                /* 1AA0 */    0x09, 0xC4, 0xB9, 0xDF, 0x40, 0x1A, 0x28, 0x79,
++                /* 1AA8 */    0xCC, 0x04, 0x21, 0xDA, 0x40, 0x04, 0xE6, 0x1C,
++                /* 1AB0 */    0x40, 0x34, 0x1B, 0x08, 0xCD, 0x0A, 0x46, 0xB3,
++                /* 1AB8 */    0xAA, 0x3E, 0x62, 0xD0, 0x9F, 0xCD, 0xA1, 0xB1,
++                /* 1AC0 */    0xE7, 0x95, 0x40, 0xAC, 0xE4, 0x65, 0xF3, 0x68,
++                /* 1AC8 */    0xC1, 0x7E, 0xB6, 0x02, 0x21, 0xC6, 0x81, 0xE9,
++                /* 1AD0 */    0xF7, 0x46, 0xC7, 0x00, 0x02, 0x42, 0xF5, 0xFC,
++                /* 1AD8 */    0xAE, 0x74, 0x04, 0x20, 0x20, 0x3A, 0x02, 0x10,
++                /* 1AE0 */    0x10, 0x9A, 0x11, 0x84, 0x66, 0x07, 0xA1, 0xBA,
++                /* 1AE8 */    0xDE, 0x6B, 0x02, 0xB5, 0x36, 0xEF, 0x20, 0x2C,
++                /* 1AF0 */    0x19, 0x08, 0x55, 0x2D, 0x1E, 0x84, 0x29, 0x7E,
++                /* 1AF8 */    0xB0, 0x69, 0x98, 0x44, 0xFD, 0x21, 0x80, 0x3E,
++                /* 1B00 */    0xCF, 0x04, 0x6E, 0xDD, 0x20, 0x34, 0x07, 0x88,
++                /* 1B08 */    0x06, 0x4A, 0x80, 0xA8, 0x96, 0x2F, 0x9D, 0x06,
++                /* 1B10 */    0x4A, 0x40, 0x04, 0xE6, 0x4C, 0x40, 0xE4, 0xFF,
++                /* 1B18 */    0x4F, 0x30, 0x27, 0x08, 0x55, 0xA1, 0x7F, 0x18,
++                /* 1B20 */    0x14, 0x44, 0x40, 0x4E, 0x01, 0x42, 0x53, 0x81,
++                /* 1B28 */    0xD1, 0x54, 0x05, 0x40, 0x98, 0xA6, 0x04, 0x03,
++                /* 1B30 */    0xA6, 0x20, 0x34, 0x6B, 0x03, 0x40, 0x1A, 0xE1,
++                /* 1B38 */    0xF8, 0x43, 0x3B, 0x80, 0xB3, 0xF8, 0x20, 0x54,
++                /* 1B40 */    0x52, 0x88, 0x03, 0x0B, 0xD3, 0x07, 0x22, 0x40,
++                /* 1B48 */    0x47, 0x01, 0x11, 0x98, 0x63, 0x81, 0xD0, 0xA8,
++                /* 1B50 */    0x80, 0x34, 0x37, 0x20, 0x55, 0x59, 0x02, 0x8C,
++                /* 1B58 */    0x29, 0x06, 0xA1, 0x29, 0x40, 0x04, 0xE8, 0x48,
++                /* 1B60 */    0x20, 0x02, 0xB4, 0xE0, 0x14, 0x60, 0x4C, 0x3E,
++                /* 1B68 */    0x08, 0x8D, 0x09, 0x42, 0x53, 0xB5, 0x00, 0x65,
++                /* 1B70 */    0x19, 0x41, 0x34, 0x68, 0x12, 0xE3, 0xA0, 0x42,
++                /* 1B78 */    0x41, 0x68, 0x1E, 0x10, 0x9A, 0x0F, 0x84, 0x0A,
++                /* 1B80 */    0xAF, 0x01, 0xC2, 0x42, 0x80, 0xD0, 0x60, 0x20,
++                /* 1B88 */    0x1A, 0x80, 0x53, 0x82, 0x68, 0x00, 0x16, 0x97,
++                /* 1B90 */    0x03, 0x8C, 0x09, 0x05, 0xA1, 0xE2, 0x41, 0x04,
++                /* 1B98 */    0xE8, 0x24, 0x20, 0x02, 0xB4, 0xCE, 0x1E, 0x60,
++                /* 1BA0 */    0x4C, 0x35, 0x08, 0x4D, 0x07, 0x42, 0xC3, 0x04,
++                /* 1BA8 */    0x01, 0x65, 0xD1, 0x40, 0x74, 0x68, 0x22, 0x45,
++                /* 1BB0 */    0xC0, 0x98, 0x60, 0x10, 0x1A, 0x03, 0x84, 0xC6,
++                /* 1BB8 */    0x02, 0xA1, 0x92, 0x9B, 0x1C, 0x81, 0x28, 0x08,
++                /* 1BC0 */    0x8D, 0x5C, 0x05, 0x8C, 0xC9, 0xC8, 0x02, 0xC2,
++                /* 1BC8 */    0x64, 0x81, 0xE8, 0xB0, 0x44, 0x80, 0x68, 0x38,
++                /* 1BD0 */    0x10, 0x1A, 0x16, 0x90, 0x77, 0x01, 0xA4, 0x20,
++                /* 1BD8 */    0x02, 0x24, 0x20, 0x34, 0x2C, 0x08, 0x55, 0x15,
++                /* 1BE0 */    0xE6, 0xC0, 0x43, 0x41, 0x74, 0x88, 0x20, 0x65,
++                /* 1BE8 */    0x8E, 0x34, 0x14, 0x84, 0xFC, 0xFF, 0x8F, 0x14,
++                /* 1BF0 */    0x02, 0xD1, 0xD1, 0x81, 0x00, 0x51, 0x2D, 0x69,
++                /* 1BF8 */    0x8E, 0x0E, 0x14, 0x84, 0x06, 0x01, 0xA1, 0x3A,
++                /* 1C00 */    0xDB, 0x1C, 0x6F, 0x28, 0x88, 0x8E, 0x37, 0x04,
++                /* 1C08 */    0x84, 0xE6, 0x07, 0xA3, 0xAA, 0x9F, 0x84, 0x02,
++                /* 1C10 */    0x72, 0x12, 0x10, 0x9A, 0x13, 0x44, 0x87, 0x07,
++                /* 1C18 */    0x52, 0x08, 0x84, 0x25, 0x02, 0xA1, 0xCA, 0x13,
++                /* 1C20 */    0x1D, 0x0C, 0xE8, 0x9B, 0x53, 0x87, 0x0B, 0x02,
++                /* 1C28 */    0x42, 0x73, 0x80, 0xD0, 0xA4, 0x20, 0x54, 0x55,
++                /* 1C30 */    0x25, 0x50, 0x96, 0x04, 0x44, 0x07, 0x01, 0x02,
++                /* 1C38 */    0x42, 0xD3, 0x82, 0x51, 0x8D, 0x99, 0x06, 0x40,
++                /* 1C40 */    0x41, 0x68, 0x0E, 0x10, 0x81, 0x39, 0x71, 0x29,
++                /* 1C48 */    0x10, 0xA6, 0x37, 0xD5, 0xA1, 0x89, 0xB6, 0x02,
++                /* 1C50 */    0x61, 0xFF, 0x7F
++            })
++
++            /* Rename the below method to WQAB if we choose not to
++             * go with the above buffer.
++             */
++            Method (XQAB, 1, Serialized)
++            {
++                INIT (2)
++                GUID (60)
++                INST (Arg0)
++                EXEC ()
++                Return (OBUF()) 
++            }
++
++            Method (WQBC, 1, Serialized)
++            {
++                INIT (2)
++                GUID (100)
++                INST (Arg0)
++                EXEC ()
++                Return (OBUF())
++            }
++
++            Method (WQBD, 1, Serialized)
++            {
++                INIT (2)
++                GUID (120)
++                INST (Arg0)
++                EXEC ()
++                Return (OBUF())
++            }
++
++            Method (WQBE, 1, Serialized)
++            {
++                INIT (2)
++                GUID (140)
++                INST (Arg0)
++                EXEC ()
++                Return (OBUF())
++            }
++
++            Method (WQBF, 1, Serialized)
++            {
++                INIT (2)
++                GUID (160)
++                INST (Arg0)
++                EXEC ()
++                Return (OBUF())
++            }
++
++            Method (WQBG, 1, Serialized)
++            {
++                INIT (2)
++                GUID (180)
++                INST (Arg0)
++                EXEC ()
++                Return (OBUF())
++            }
++
++            Method (WQBH, 1, Serialized)
++            {
++                INIT (2)
++                GUID (200)
++                INST (Arg0)
++                EXEC ()
++                Return (OBUF())
++            }
++
++            Method (WQBI, 1, Serialized)
++            {
++                INIT (2)
++                GUID (220)
++                INST (Arg0)
++                EXEC ()
++                Return (OBUF())
++            }
++        }
++    }
++
++    /*  Wire GPE events to notify OEM 
++     *  special buttons press like wireless or
++     *  presentation button. 
++     */
++    Scope (\_GPE)
++    {
++        Method (_L18, 0, Serialized)
++        {
++            Notify (\_SB.WMID, 0x80) 
++        }
++    }
++}
++
+diff
+--- /dev/null 
++++ b/tools/firmware/hvmloader/acpi/ssdt_lenovo_t_and_x_series.asl     2009-04-01 16:35:28.000000000 -0400
+@@ -0,0 +1,616 @@
++/*
++ * ssdt_lenovo_t_and_x_series.asl
++ *
++ * Copyright (c) 2009  Kamala Narasimhan
++ * Copyright (c) 2009  Citrix Systems, Inc.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++ */
++
++/* SSDT for exposing Lenovo T and X series specific value add functionalities like  
++ * hotkeys, special buttons.
++ */
++
++/* IMPLEMENTATION DETAILS:  OEM value add features are generally exposed through
++ * WMI psuedo device objects.  For our guests to benefit from such value add, we
++ * expose a psuedo device object in our vACPI layer also.  This psuedo object is 
++ * similar to the underlying base firmware object in the sense we expose the 
++ * same _WDG method which describes the WMI methods, data objects and events 
++ * provided by the WMI psuedo object.  Guest wmi wrapper driver which automatically
++ * gets loaded upon identifying this WMI pseudo device object, calls _WDG to get 
++ * known entry points and calls those entry points for further information exchange.
++ * Reference - http://www.microsoft.com/whdc/system/pnppwr/wmi/wmi-acpi.mspx
++ */
++
++/* COMMUNICATION DETAILS -
++ * Command port - 0x96 
++ *                Writes to this port describe what type of information is about
++ *                to be exchanged.  E.g., guid, input argument transfer etc.
++ * Data Port    - 0x98 and 0x9A for byte and dword data transfer respectively.
++ *                Communicates data to and from the backend.  E.g. Input buffer values
++ *                get written to this port and output buffer values are read from this 
++ *                port.
++ */
++
++DefinitionBlock ("SSDT_LENOVO_T_AND_X_SERIES.aml", "SSDT", 2, "Xen", "HVM", 0)
++{
++    Scope (\_SB)
++    {
++
++        OperationRegion (LEN1, SystemIO, 0x96, 0x01)
++        Field (LEN1, ByteAcc, NoLock, Preserve)
++        {
++            P96,   8
++        }
++
++        OperationRegion (LEN2, SystemIO, 0x98, 0x01)
++        Field (LEN2, ByteAcc, NoLock, Preserve)
++        {
++            P98,  8
++        }
++
++        OperationRegion (LEN3, SystemIO, 0x9A, 0x04)
++        Field (LEN3, DWordAcc, NoLock, Preserve)
++        {
++            P9A,  32
++        }
++
++        Device (WMI1)
++        {
++            /* Exposing a pseudo device with HID PNP0C14 will 
++             * result in Windows guest loading their WMI wrapper
++             * driver - wmiacpi.sys
++             */
++            Name (_HID, EisaId ("PNP0C14"))
++            Name (_UID, 0x01)
++
++            /* Following list of data blocks exposed by _WDG is same as the 
++             * one provided by the underlying firmware.  Refer to -
++             * http://www.microsoft.com/whdc/system/pnppwr/wmi/wmi-acpi.mspx
++             * for further information about _WDG and what it exposes.
++             */ 
++            Name (_WDG, Buffer (0xA0)
++            {
++                /* Data Block 1 */
++                /* GUID */
++                0x0E, 0x23, 0xF5, 0x51, 0x77, 0x96, 0xCD, 0x46,
++                0xA1, 0xCF, 0xC0, 0xB2, 0x3E, 0xE3, 0x4D, 0xB7,
++                0x41, 0x30, /* Object ID - WQA0 */ 
++                0x5A, /* Instance count */
++                0x05, /* Flag -  String block & Expensive */
++
++                /* Data Block 2 */
++                /* GUID */
++                0x64, 0x9A, 0x47, 0x98, 0xF5, 0x33, 0x33, 0x4E,
++                0xA7, 0x07, 0x8E, 0x25, 0x1E, 0xBB, 0xC3, 0xA1,
++                0x41, 0x31, /*Object ID - WMA1 */ 
++                0x01, /* Instance count */
++                0x06, /* Flag - Method & string block */
++
++                /* Data Block 3 */
++                /* GUID */
++                0xEF, 0x54, 0x4B, 0x6A, 0xED, 0xA5, 0x33, 0x4D,
++                0x94, 0x55, 0xB0, 0xD9, 0xB4, 0x8D, 0xF4, 0xB3,
++                0x41, 0x32, /* Object ID - WMA2 */
++                0x01, /* Instance count */
++                0x06, /* Flag - Method & string block */
++
++                /* Data Block 4 */
++                /* GUID */
++                0xB6, 0xEB, 0xF1, 0x74, 0x7A, 0x92, 0x7D, 0x4C,
++                0x95, 0xDF, 0x69, 0x8E, 0x21, 0xE8, 0x0E, 0xB5,
++                0x41, 0x33, /* Object ID - WMA3 */
++                0x01, /* Instance count */
++                0x06, /* Flag - Method & string block */
++
++                /* Data Block 5 */
++                /* GUID */
++                0xFF, 0x04, 0xEF, 0x7E, 0x28, 0x43, 0x7C, 0x44,
++                0xB5, 0xBB, 0xD4, 0x49, 0x92, 0x5D, 0x53, 0x8D,
++                0x41, 0x34, /* Object ID - WMA4 */
++                0x01, /* Instance count */
++                0x06, /* Flag - Method & string block*/
++
++                /* Data Block 6 */
++                /* GUID */
++                0x9E, 0x15, 0xDB, 0x8A, 0x32, 0x1E, 0x5C, 0x45,
++                0xBC, 0x93, 0x30, 0x8A, 0x7E, 0xD9, 0x82, 0x46,
++                0x41, 0x35, /* Object ID - WQA5 */
++                0x01, /* Instance count */
++                0x01, /* Flag - Expensive */
++
++                /* Data Block 7 */
++                /* GUID */
++                0xFD, 0xD9, 0x51, 0x26, 0x1C, 0x91, 0x69, 0x4B,
++                0xB9, 0x4E, 0xD0, 0xDE, 0xD5, 0x96, 0x3B, 0xD7,
++                0x41, 0x36, /* Object ID - WMA6 */
++                0x01, /* Instance count */
++                0x06, /* Flag - Method & string block */
++
++                /* Data Block 6 */
++                /* GUID */
++                0x21, 0x12, 0x90, 0x05, 0x66, 0xD5, 0xD1, 0x11,
++                0xB2, 0xF0, 0x00, 0xA0, 0xC9, 0x06, 0x29, 0x10,
++                0x42, 0x41, /* Object ID - WQBA */
++                0x01, /* Instance count */
++                0x00, /* Flag - Expensive */
++
++            })
++
++            /* Initialize cmd port and communicate invocation type
++             * i.e., method execution or query or set object 
++             */
++            Method (INIT, 1, Serialized)
++            {
++                Store (100, P96)
++                Store (Arg0, P98)
++            }
++
++            /* Pass the guid pertaining to the operation */
++            Method (GUID, 1, Serialized)
++            {
++                Store (101, P96)
++                Store (0x0, Local0)
++                Store (Arg0, Local1)
++
++                While ( LLess(Local0,16) ) 
++                {
++                    Add(Local1, Local0, Local2)
++                    Store (DerefOf(Index (_WDG, Local2)), P98 ) 
++                    Increment( Local0 )
++                }
++            }
++
++            /* Pass instance # for the associated object pertaining
++             * to the invocation.
++             */
++            Method (INST, 1, Serialized)
++            {
++                Store(102, P96)
++                Store(Arg0, P9A)
++            }
++
++            /* Pass method id relevant to the method about to be
++             * executed.
++             */
++            Method (MTID, 1, Serialized)
++            {
++                Store(103, P96)
++                Store(Arg0, P9A)
++            }
++
++            /* Pass input buffer pertaining to the current operation */
++            Method (IBUF, 1, Serialized)
++            {
++                Store (105, P96) 
++                Store (SizeOf(Arg0), Local0)
++                Store (Local0, P9A)
++                ToBuffer (Arg0, Local1)
++                Store (0, Local2)
++                Store (104, P96)
++                While ( LLess(Local2,Local0) )
++                {
++                    Store (DerefOf(Index (Local1, Local2)), P98)
++                    Increment (Local2)
++                }
++            }
++
++            /* Now that the input arguments are passed, execute the command */
++            Method (EXEC, 0, Serialized)
++            {
++                Store (106, P96)
++            }
++
++            /* Get the output buffer pertaining to the just executed command */
++            Method (OBUF, 0, Serialized)
++            {
++                Store (108, P96)
++                Store (P9A, Local0)
++                Store (Buffer(Local0) {}, Local2)
++                Store (0, Local1)
++                Store (107, P96)
++                While ( LLess(Local1, Local0) )
++                {
++                    Store (P98, Index(Local2, Local1)) 
++                    Increment (Local1)
++                }
++                Return (Local2)
++            }
++
++            /* Get event data */
++            Method (_WED, 1, Serialized)
++            {
++                INIT (4)
++                Store (109, P96)
++                Store (Arg0, P98)
++                EXEC ()
++                Return (OBUF())
++            }
++
++            /*  Following are well know entry points as supplied by 
++             *  _WDG.
++             *  @TODO:  Though current testing suggest that defining
++             *  a method for seralized execution is enough to prevent
++             *  synchronization issues, consider using explicit mutexes
++             *  for further protection.
++             */
++            Method (WQA0, 1, Serialized)
++            {
++                INIT (2)
++                GUID (0)
++                INST (Arg0)
++                EXEC () 
++                Return (OBUF())
++            }
++
++            Method (WMA1, 3, Serialized)
++            {
++                INIT (1)
++                GUID (20)
++                INST (Arg0)
++                MTID (Arg1)
++                IBUF (Arg2)
++                EXEC ()
++                Return (OBUF())
++            }
++
++            Method (WMA2, 3, Serialized)
++            {
++                INIT (1)
++                GUID (40)
++                INST (Arg0)
++                MTID (Arg1)
++                IBUF (Arg2)
++                EXEC ()
++                Return (OBUF())
++            }
++
++            Method (WMA3, 3, Serialized)
++            {
++                INIT (1)
++                GUID (60)
++                INST (Arg0)
++                MTID (Arg1)
++                IBUF (Arg2)
++                EXEC ()
++                Return (OBUF())
++            }
++
++            Method (WMA4, 3, Serialized)
++            {
++                INIT (1)
++                GUID (80)
++                INST (Arg0)
++                MTID (Arg1)
++                IBUF (Arg2)
++                EXEC ()
++                Return (OBUF())
++            }
++
++            Method (WQA5, 1, Serialized)
++            {
++                INIT (2)
++                GUID (100)
++                INST (Arg0)
++                EXEC ()
++                Return (OBUF())
++            }
++
++            Method (WMA6, 3, Serialized)
++            {
++                INIT (1)
++                GUID (120)
++                INST (Arg0)
++                MTID (Arg1)
++                IBUF (Arg2)
++                EXEC ()
++                Return (OBUF())
++            }
++
++            Method (WQBC, 1, Serialized)
++            {
++                INIT (2)
++                GUID (60)
++                INST (Arg0)
++                EXEC ()
++                Return (OBUF())
++            }
++
++            /* Like all other well know entry points, we could delegate
++             * the below to the base firmware also.  But, why ask for a 
++             * static list (that too this big) and go through layer after
++             * layer to get it?  Also, port i/o is not a good idea for this
++             * much data transfer.  Luckily, this is the only place that appear
++             * to transfer so much data.
++             */ 
++
++            Method (WMBD, 3, Serialized)
++            {
++                INIT (1)
++                GUID (100)
++                INST (Arg0)
++                MTID (Arg1)
++                IBUF (Arg2)
++                EXEC ()
++                Return (OBUF())
++            }
++
++            Name (WQBA, Buffer (0x07C1)
++            {
++                /* 0000 */    0x46, 0x4F, 0x4D, 0x42, 0x01, 0x00, 0x00, 0x00, 
++                /* 0008 */    0xB1, 0x07, 0x00, 0x00, 0x5A, 0x30, 0x00, 0x00, 
++                /* 0010 */    0x44, 0x53, 0x00, 0x01, 0x1A, 0x7D, 0xDA, 0x54, 
++                /* 0018 */    0x98, 0x51, 0x97, 0x00, 0x01, 0x06, 0x18, 0x42, 
++                /* 0020 */    0x10, 0x11, 0x10, 0x0A, 0x0D, 0x21, 0x02, 0x0B, 
++                /* 0028 */    0x83, 0x50, 0x4C, 0x18, 0x14, 0xA0, 0x45, 0x41, 
++                /* 0030 */    0xC8, 0x05, 0x14, 0x95, 0x02, 0x21, 0xC3, 0x02, 
++                /* 0038 */    0x14, 0x0B, 0x70, 0x2E, 0x40, 0xBA, 0x00, 0xE5, 
++                /* 0040 */    0x28, 0x72, 0x0C, 0x22, 0x02, 0xF7, 0xEF, 0x0F, 
++                /* 0048 */    0x31, 0x0E, 0x88, 0x14, 0x40, 0x48, 0xE6, 0x28, 
++                /* 0050 */    0x28, 0x81, 0x85, 0xC0, 0x11, 0x82, 0x7E, 0x05, 
++                /* 0058 */    0x20, 0x74, 0x88, 0x26, 0x83, 0x02, 0x9C, 0x22, 
++                /* 0060 */    0x08, 0xD2, 0x96, 0x05, 0xE8, 0x16, 0xE0, 0x5B, 
++                /* 0068 */    0x80, 0x76, 0x08, 0xA1, 0x55, 0x28, 0xC0, 0xA4, 
++                /* 0070 */    0x00, 0x9F, 0x60, 0xB2, 0x28, 0x40, 0x36, 0x98, 
++                /* 0078 */    0x6C, 0xC3, 0x91, 0x61, 0x30, 0x91, 0x63, 0x40, 
++                /* 0080 */    0x89, 0x19, 0x03, 0x4A, 0xE7, 0x14, 0x64, 0x13, 
++                /* 0088 */    0x58, 0xD0, 0x85, 0xA2, 0x68, 0x1A, 0x51, 0x12, 
++                /* 0090 */    0x1C, 0xD4, 0x31, 0x44, 0x08, 0x5E, 0xAE, 0x00, 
++                /* 0098 */    0xC9, 0x13, 0x90, 0xE6, 0x79, 0xC9, 0xFA, 0x20, 
++                /* 00A0 */    0x34, 0x04, 0x36, 0x02, 0x1E, 0x45, 0x02, 0x08, 
++                /* 00A8 */    0x8B, 0xB1, 0x4C, 0x89, 0x87, 0x41, 0x79, 0x00, 
++                /* 00B0 */    0x91, 0x9C, 0xA1, 0xA2, 0x80, 0xED, 0x75, 0x22, 
++                /* 00B8 */    0x1A, 0xD6, 0x71, 0x32, 0x49, 0x70, 0xA8, 0x51, 
++                /* 00C0 */    0x5A, 0xA2, 0x00, 0xF3, 0x23, 0xD3, 0x44, 0x8E, 
++                /* 00C8 */    0xAD, 0xE9, 0x11, 0x0B, 0x92, 0x49, 0x1B, 0x0A, 
++                /* 00D0 */    0x6A, 0xE8, 0x9E, 0xD6, 0x49, 0x79, 0xA2, 0x11, 
++                /* 00D8 */    0x0F, 0xCA, 0x30, 0x09, 0x3C, 0x0A, 0x86, 0xC6, 
++                /* 00E0 */    0x09, 0xCA, 0x82, 0x90, 0x83, 0x81, 0xA2, 0x00, 
++                /* 00E8 */    0x4F, 0xC2, 0x73, 0x2C, 0x5E, 0x80, 0xF0, 0x19, 
++                /* 00F0 */    0x93, 0xA3, 0x40, 0x8C, 0x04, 0x3E, 0x12, 0x78, 
++                /* 00F8 */    0x34, 0xC7, 0x8C, 0x05, 0x0A, 0x17, 0xF0, 0x7C, 
++                /* 0100 */    0x8E, 0x21, 0x72, 0xDC, 0x43, 0x8D, 0x71, 0x14, 
++                /* 0108 */    0x91, 0x13, 0xBC, 0x03, 0x44, 0x31, 0x5A, 0x41, 
++                /* 0110 */    0xF3, 0x16, 0x62, 0xB0, 0x68, 0x06, 0xEB, 0x19, 
++                /* 0118 */    0x9C, 0x0C, 0x3A, 0xC1, 0xFF, 0xFF, 0x08, 0xB8, 
++                /* 0120 */    0x0C, 0x08, 0x79, 0x14, 0x60, 0x75, 0x50, 0x9A, 
++                /* 0128 */    0x86, 0x09, 0xBA, 0x17, 0x60, 0x4D, 0x80, 0x31, 
++                /* 0130 */    0x01, 0x1A, 0x31, 0xA4, 0x4C, 0x80, 0xB3, 0xFB, 
++                /* 0138 */    0x82, 0x66, 0xD4, 0x96, 0x00, 0x73, 0x02, 0xB4, 
++                /* 0140 */    0x09, 0xF0, 0x86, 0x20, 0x94, 0xF3, 0x8C, 0x72, 
++                /* 0148 */    0x2C, 0xA7, 0x18, 0xE5, 0x61, 0x20, 0xE6, 0xCB, 
++                /* 0150 */    0x40, 0xD0, 0x28, 0x31, 0x62, 0x9E, 0x4B, 0x5C, 
++                /* 0158 */    0xC3, 0x46, 0x88, 0x11, 0xF2, 0x14, 0x02, 0xC5, 
++                /* 0160 */    0x6D, 0x7F, 0x10, 0x64, 0xD0, 0xB8, 0xD1, 0xFB, 
++                /* 0168 */    0xB4, 0x70, 0x56, 0x27, 0x70, 0xF4, 0x4F, 0x0A, 
++                /* 0170 */    0x26, 0xF0, 0x94, 0x0F, 0xEC, 0xD9, 0xE0, 0x04, 
++                /* 0178 */    0x8E, 0x35, 0x6A, 0x8C, 0x53, 0x49, 0xE0, 0xD8, 
++                /* 0180 */    0x0F, 0x08, 0x69, 0x00, 0x51, 0x24, 0x78, 0xD4, 
++                /* 0188 */    0x69, 0xC1, 0xE7, 0x02, 0x0F, 0xED, 0xA0, 0x3D, 
++                /* 0190 */    0xC7, 0x13, 0x08, 0x72, 0x08, 0x47, 0xF0, 0xC4, 
++                /* 0198 */    0xF0, 0x40, 0xE0, 0x31, 0xB0, 0x9B, 0x82, 0x8F, 
++                /* 01A0 */    0x00, 0x3E, 0x21, 0xE0, 0x5D, 0x03, 0xEA, 0x6A, 
++                /* 01A8 */    0xF0, 0x60, 0xC0, 0x06, 0x1D, 0x0E, 0x33, 0x5E, 
++                /* 01B0 */    0x0F, 0x3F, 0xDC, 0x09, 0x9C, 0xE4, 0x03, 0x06, 
++                /* 01B8 */    0x3F, 0x6C, 0x78, 0x70, 0xB8, 0x79, 0x9E, 0xCC, 
++                /* 01C0 */    0x91, 0x95, 0x2A, 0xC0, 0xEC, 0xE1, 0x40, 0x07, 
++                /* 01C8 */    0x09, 0x9F, 0x36, 0xD8, 0x19, 0x00, 0x23, 0x7F, 
++                /* 01D0 */    0x10, 0xA8, 0x91, 0x19, 0xDA, 0xE3, 0x7E, 0xE9, 
++                /* 01D8 */    0x30, 0xE4, 0x73, 0xC2, 0x61, 0x31, 0xB1, 0xA7, 
++                /* 01E0 */    0x0E, 0x3A, 0x1E, 0xF0, 0x5F, 0x46, 0x9E, 0x33, 
++                /* 01E8 */    0x3C, 0x7D, 0xCF, 0xD7, 0x04, 0xC3, 0x0E, 0x1C, 
++                /* 01F0 */    0x3D, 0x10, 0x43, 0x3F, 0x6C, 0x1C, 0xC6, 0x69, 
++                /* 01F8 */    0xF8, 0xFE, 0xE1, 0xF3, 0x02, 0x8C, 0x53, 0x80, 
++                /* 0200 */    0x47, 0xEE, 0xFF, 0xFF, 0x21, 0xC5, 0xA7, 0x09, 
++                /* 0208 */    0x7E, 0xB4, 0xF0, 0x69, 0x82, 0x5D, 0x0F, 0x4E, 
++                /* 0210 */    0xE3, 0x39, 0xC0, 0xC3, 0x39, 0x2B, 0x1F, 0x26, 
++                /* 0218 */    0xC0, 0x76, 0x3F, 0x61, 0x23, 0x7A, 0xB7, 0xF0, 
++                /* 0220 */    0x68, 0xB0, 0xA7, 0x00, 0xF0, 0x9D, 0x5F, 0xC0, 
++                /* 0228 */    0x79, 0xD7, 0x60, 0x83, 0x85, 0x71, 0x7E, 0x01, 
++                /* 0230 */    0x1E, 0x27, 0x04, 0x0F, 0x81, 0x1F, 0x24, 0x3C, 
++                /* 0238 */    0x04, 0x3E, 0x80, 0xE7, 0x8F, 0x33, 0xB4, 0xD2, 
++                /* 0240 */    0x79, 0x21, 0x07, 0x06, 0xEF, 0x9C, 0x03, 0x63, 
++                /* 0248 */    0x14, 0x3C, 0xCF, 0x63, 0xC3, 0x04, 0x0A, 0xF2, 
++                /* 0250 */    0x1A, 0x50, 0xA8, 0x67, 0x01, 0x85, 0xF1, 0xA9, 
++                /* 0258 */    0x06, 0x78, 0xFD, 0xFF, 0x4F, 0x35, 0xC0, 0xE5, 
++                /* 0260 */    0x70, 0x80, 0x3B, 0x39, 0xC0, 0xBD, 0x17, 0xB0, 
++                /* 0268 */    0x8B, 0xC3, 0x73, 0x0D, 0x5C, 0xD1, 0xE7, 0x1A, 
++                /* 0270 */    0xA8, 0xF7, 0x96, 0xE2, 0xC6, 0xA8, 0x6B, 0x4C, 
++                /* 0278 */    0x90, 0x47, 0x81, 0x47, 0x9A, 0x28, 0xCF, 0x33, 
++                /* 0280 */    0xEF, 0x32, 0x11, 0x9E, 0x6D, 0x7C, 0xAD, 0xF1, 
++                /* 0288 */    0x14, 0xE2, 0xF8, 0x5A, 0x63, 0xC4, 0x97, 0x89, 
++                /* 0290 */    0x77, 0x1B, 0xE3, 0x1E, 0xDC, 0x63, 0xCD, 0x43, 
++                /* 0298 */    0x8E, 0x41, 0x8E, 0x26, 0xC2, 0x8B, 0x41, 0xC0, 
++                /* 02A0 */    0xC7, 0x1B, 0x1F, 0x6B, 0xC0, 0x2B, 0xE6, 0x85, 
++                /* 02A8 */    0x22, 0x0B, 0xC7, 0x1A, 0x40, 0xE3, 0xFF, 0xFF, 
++                /* 02B0 */    0x58, 0x03, 0xDC, 0xB0, 0x1E, 0x50, 0xC0, 0x77, 
++                /* 02B8 */    0x64, 0x60, 0x37, 0x14, 0x78, 0x27, 0x14, 0xC0, 
++                /* 02C0 */    0x4F, 0xE2, 0x17, 0x80, 0x8E, 0x1C, 0x4E, 0x0B, 
++                /* 02C8 */    0x22, 0x1B, 0x6F, 0x00, 0x9F, 0x02, 0xA8, 0x1A, 
++                /* 02D0 */    0x20, 0x4D, 0x13, 0x36, 0xC1, 0xF4, 0xE4, 0x82, 
++                /* 02D8 */    0xF7, 0x91, 0xC0, 0xB9, 0x49, 0x94, 0x7C, 0x58, 
++                /* 02E0 */    0x14, 0xCE, 0x59, 0x0F, 0x22, 0x14, 0xC4, 0x80, 
++                /* 02E8 */    0x0E, 0x72, 0x9C, 0x40, 0x9F, 0x51, 0x7C, 0x10, 
++                /* 02F0 */    0x39, 0xD1, 0x27, 0x42, 0x0F, 0xCA, 0xC3, 0x78, 
++                /* 02F8 */    0x47, 0x61, 0x27, 0x10, 0x1F, 0x26, 0x3C, 0x76, 
++                /* 0300 */    0x1F, 0x13, 0xF8, 0x3F, 0xC6, 0xB3, 0x31, 0xBA, 
++                /* 0308 */    0xD5, 0x60, 0xE8, 0xFF, 0x7F, 0x4E, 0xE1, 0x60, 
++                /* 0310 */    0x3E, 0x88, 0x70, 0x82, 0x8F, 0x46, 0xDD, 0x24, 
++                /* 0318 */    0x40, 0xA5, 0xEF, 0xA8, 0x00, 0x0A, 0x20, 0xDF, 
++                /* 0320 */    0x0B, 0x7C, 0x0E, 0x78, 0x36, 0x60, 0x63, 0x78, 
++                /* 0328 */    0x14, 0x30, 0x9A, 0xD1, 0x79, 0xF8, 0xC9, 0xA2, 
++                /* 0330 */    0xE2, 0x4E, 0x96, 0x82, 0x78, 0xB2, 0x8E, 0x32, 
++                /* 0338 */    0x59, 0xF4, 0x4C, 0x7C, 0xAF, 0xF0, 0x8C, 0xDE, 
++                /* 0340 */    0xB4, 0x3C, 0x47, 0x4F, 0xD8, 0xF7, 0x10, 0x58, 
++                /* 0348 */    0x87, 0x81, 0x90, 0x0F, 0x06, 0x9E, 0x86, 0xE1, 
++                /* 0350 */    0x3C, 0x59, 0x0E, 0xE7, 0xC9, 0xF2, 0xB1, 0xF8, 
++                /* 0358 */    0x1A, 0x02, 0x3E, 0x81, 0xB3, 0x05, 0x39, 0x3C, 
++                /* 0360 */    0x26, 0xD6, 0xA8, 0xE8, 0x55, 0xC8, 0xC3, 0xE3, 
++                /* 0368 */    0x97, 0x03, 0xCF, 0xE7, 0x19, 0xE1, 0x28, 0x9F, 
++                /* 0370 */    0x24, 0x70, 0x18, 0xCF, 0x24, 0x1E, 0xA2, 0x6F, 
++                /* 0378 */    0x45, 0xB0, 0x26, 0x72, 0xD2, 0xBE, 0x2D, 0x9C, 
++                /* 0380 */    0x6C, 0xD0, 0xD7, 0x33, 0xCC, 0xAD, 0x08, 0xF6, 
++                /* 0388 */    0xFF, 0xFF, 0x56, 0x04, 0xE7, 0x82, 0x06, 0x33, 
++                /* 0390 */    0xD3, 0xBD, 0x0A, 0x15, 0xEB, 0x5E, 0x05, 0x88, 
++                /* 0398 */    0x1D, 0xD6, 0x6B, 0x8F, 0x0F, 0x56, 0x70, 0xEF, 
++                /* 03A0 */    0x55, 0x70, 0x2F, 0x55, 0xCF, 0x0A, 0xC7, 0x18, 
++                /* 03A8 */    0xFE, 0x61, 0x2A, 0xC6, 0x29, 0xBD, 0x76, 0x1A, 
++                /* 03B0 */    0x28, 0x4C, 0x94, 0x78, 0xEF, 0x55, 0x1E, 0xE3, 
++                /* 03B8 */    0x7B, 0x15, 0xBB, 0x42, 0x85, 0x89, 0xF5, 0x72, 
++                /* 03C0 */    0x65, 0xD4, 0xD7, 0x89, 0x70, 0x81, 0x82, 0x44, 
++                /* 03C8 */    0x7A, 0xB5, 0x8A, 0x12, 0x39, 0xBE, 0x21, 0xDF, 
++                /* 03D0 */    0xAB, 0xC0, 0x2B, 0xE7, 0x5E, 0x05, 0xB2, 0xFF, 
++                /* 03D8 */    0xFF, 0xBD, 0x0A, 0x30, 0x8F, 0xF6, 0x5E, 0x05, 
++                /* 03E0 */    0xC6, 0x6B, 0x03, 0xBB, 0x21, 0xC1, 0x02, 0x7A, 
++                /* 03E8 */    0xB1, 0x02, 0x0C, 0x65, 0xBE, 0x58, 0xD1, 0xBC, 
++                /* 03F0 */    0x17, 0x2B, 0xC4, 0xFF, 0xFF, 0x5C, 0xC2, 0xF4, 
++                /* 03F8 */    0x5C, 0xAC, 0xC8, 0x3C, 0xE1, 0xDF, 0xAC, 0x00, 
++                /* 0400 */    0x4E, 0xFF, 0xFF, 0x6F, 0x56, 0x80, 0xB1, 0x7B, 
++                /* 0408 */    0x11, 0xE6, 0x68, 0x05, 0x2F, 0xE5, 0xCD, 0x8A, 
++                /* 0410 */    0xC6, 0x59, 0x86, 0x02, 0x2E, 0x88, 0xC2, 0xF8, 
++                /* 0418 */    0x66, 0x05, 0x38, 0xBA, 0xAE, 0xE0, 0x86, 0x0C, 
++                /* 0420 */    0x17, 0x2C, 0x4A, 0x30, 0x1F, 0x42, 0x3C, 0x9D, 
++                /* 0428 */    0x23, 0x7E, 0x48, 0x78, 0x09, 0x78, 0xCC, 0xF1, 
++                /* 0430 */    0x80, 0x1F, 0x08, 0x7C, 0xB9, 0x02, 0xD3, 0xFF, 
++                /* 0438 */    0x9F, 0xC0, 0x27, 0xDF, 0xB3, 0x7C, 0x9B, 0x7A, 
++                /* 0440 */    0xEF, 0xE5, 0x07, 0xAC, 0xF7, 0x2A, 0x1F, 0x7E, 
++                /* 0448 */    0x63, 0xBD, 0x33, 0xBC, 0x5C, 0x79, 0x24, 0x51, 
++                /* 0450 */    0x4E, 0x22, 0x94, 0xEF, 0x56, 0xEF, 0x55, 0x46, 
++                /* 0458 */    0x89, 0xF8, 0x42, 0xEC, 0x53, 0xB0, 0xA1, 0x8D, 
++                /* 0460 */    0xF2, 0x54, 0x11, 0xDD, 0x78, 0x2F, 0x57, 0xE0, 
++                /* 0468 */    0x95, 0x74, 0xB9, 0x02, 0x68, 0x32, 0xFC, 0x97, 
++                /* 0470 */    0x2B, 0xF0, 0xDD, 0x1C, 0xB0, 0xD7, 0x24, 0x38, 
++                /* 0478 */    0xFF, 0xFF, 0x6B, 0x12, 0xBF, 0x5E, 0x01, 0x7E, 
++                /* 0480 */    0xB2, 0x5F, 0xAF, 0x68, 0xEE, 0xEB, 0x15, 0x4A, 
++                /* 0488 */    0x14, 0x84, 0x14, 0x01, 0x69, 0xA6, 0xE0, 0xB9, 
++                /* 0490 */    0x5F, 0x01, 0x9C, 0xF8, 0xFF, 0xDF, 0xAF, 0x00, 
++                /* 0498 */    0xCB, 0xE1, 0xEE, 0x57, 0x40, 0xEF, 0x76, 0x04, 
++                /* 04A0 */    0x5E, 0x94, 0xB7, 0x23, 0xEC, 0x15, 0x0B, 0x9F, 
++                /* 04A8 */    0xF1, 0x8A, 0x45, 0xC3, 0xAC, 0x44, 0xF1, 0xD6, 
++                /* 04B0 */    0x44, 0x61, 0x7C, 0xC5, 0x02, 0x26, 0xFF, 0xFF, 
++                /* 04B8 */    0x2B, 0x16, 0x30, 0x3B, 0x88, 0xE2, 0x46, 0x0D, 
++                /* 04C0 */    0xF7, 0xE2, 0xE4, 0x5B, 0x8F, 0xE7, 0x1B, 0xD1, 
++                /* 04C8 */    0x77, 0x18, 0xCC, 0x09, 0x0B, 0xC6, 0x0D, 0x0B, 
++                /* 04D0 */    0xFE, 0x90, 0x1E, 0x86, 0x7D, 0x92, 0x78, 0xC7, 
++                /* 04D8 */    0xF2, 0xD1, 0xCA, 0x20, 0x6F, 0xC0, 0x4F, 0x56, 
++                /* 04E0 */    0x0F, 0x56, 0x51, 0x8C, 0x10, 0xF0, 0x78, 0xDE, 
++                /* 04E8 */    0x85, 0x7D, 0xB4, 0x7A, 0xD3, 0x32, 0x4A, 0xEC, 
++                /* 04F0 */    0x58, 0xBE, 0x50, 0x3D, 0x6B, 0xF9, 0x9A, 0x65, 
++                /* 04F8 */    0x88, 0xB8, 0x0F, 0xC4, 0xBE, 0x61, 0x01, 0xB6, 
++                /* 0500 */    0xFF, 0xFF, 0x37, 0x2C, 0xC0, 0xD1, 0xC5, 0x81, 
++                /* 0508 */    0x1F, 0x1C, 0xB0, 0x37, 0x2C, 0xC0, 0xE7, 0x4C, 
++                /* 0510 */    0xC1, 0x73, 0xC3, 0x02, 0x36, 0xFF, 0xFF, 0x1B, 
++                /* 0518 */    0x16, 0xC0, 0xFF, 0xFF, 0xFF, 0x0D, 0x0B, 0x38, 
++                /* 0520 */    0xDC, 0xAE, 0xB0, 0xB7, 0x2C, 0xEC, 0xED, 0x85, 
++                /* 0528 */    0xAC, 0x82, 0x86, 0x5A, 0x89, 0x82, 0x7F, 0xAF, 
++                /* 0530 */    0x0C, 0x43, 0x6F, 0x58, 0x80, 0xA3, 0x71, 0x7B, 
++                /* 0538 */    0xD4, 0xE0, 0x38, 0x1B, 0x3C, 0x49, 0x60, 0xCE, 
++                /* 0540 */    0xD5, 0xB8, 0xD9, 0x1C, 0x5C, 0xE0, 0x08, 0xBD, 
++                /* 0548 */    0x83, 0x6A, 0xEE, 0xEC, 0x92, 0x02, 0xE3, 0x96, 
++                /* 0550 */    0x05, 0xF7, 0x52, 0xF5, 0xD0, 0x10, 0xE5, 0x20, 
++                /* 0558 */    0x5E, 0x85, 0x1F, 0xAC, 0x1E, 0xA5, 0x8E, 0xEC, 
++                /* 0560 */    0xF1, 0xEA, 0x69, 0xD8, 0xC7, 0x2C, 0xDF, 0xB2, 
++                /* 0568 */    0x0C, 0x15, 0xE1, 0x2D, 0x8B, 0x9D, 0x21, 0xE2, 
++                /* 0570 */    0xC5, 0x8A, 0x12, 0xE2, 0xBD, 0x22, 0xB4, 0xEF, 
++                /* 0578 */    0x5C, 0x06, 0x7F, 0x34, 0x36, 0x6A, 0xD0, 0x97, 
++                /* 0580 */    0xE3, 0xB7, 0x2C, 0x78, 0xFF, 0xFF, 0x5B, 0x16, 
++                /* 0588 */    0x7C, 0x91, 0x7F, 0x15, 0x9D, 0x08, 0x7C, 0xCB, 
++                /* 0590 */    0x02, 0xF8, 0x11, 0x0C, 0x42, 0x4E, 0x06, 0x8E, 
++                /* 0598 */    0x3E, 0x2F, 0xE0, 0x07, 0xF0, 0x30, 0xE2, 0x21, 
++                /* 05A0 */    0xB1, 0x00, 0x03, 0xA7, 0xF7, 0x25, 0x9F, 0x29, 
++                /* 05A8 */    0xF8, 0x01, 0xC3, 0x67, 0x0A, 0x76, 0x3D, 0x88, 
++                /* 05B0 */    0xFE, 0x18, 0xE0, 0x73, 0x09, 0x66, 0x70, 0xE0, 
++                /* 05B8 */    0xBF, 0x56, 0x1C, 0xBA, 0x47, 0xF1, 0xFA, 0x60, 
++                /* 05C0 */    0x02, 0x0F, 0x8E, 0xFF, 0xFF, 0x07, 0x07, 0xF7, 
++                /* 05C8 */    0xCE, 0x70, 0x44, 0xBE, 0xC3, 0x78, 0x70, 0x60, 
++                /* 05D0 */    0x3B, 0x08, 0x00, 0x87, 0xC1, 0xE1, 0x43, 0x0D, 
++                /* 05D8 */    0x0E, 0x3D, 0x1E, 0x03, 0x87, 0xF4, 0x79, 0x8C, 
++                /* 05E0 */    0x5D, 0x18, 0x1E, 0x72, 0x3C, 0x34, 0xB0, 0x01, 
++                /* 05E8 */    0x7A, 0x68, 0xC0, 0x72, 0x12, 0x4F, 0x21, 0x87, 
++                /* 05F0 */    0x06, 0x66, 0x09, 0x43, 0x03, 0x4A, 0xF1, 0x86, 
++                /* 05F8 */    0x46, 0xFF, 0xFF, 0x43, 0xE3, 0x43, 0xF2, 0x61, 
++                /* 0600 */    0x21, 0xE6, 0x53, 0x4E, 0x84, 0xF7, 0x05, 0x9F, 
++                /* 0608 */    0xA0, 0x18, 0xFA, 0x6B, 0x8A, 0x6F, 0x17, 0xBE, 
++                /* 0610 */    0x09, 0xE2, 0xC6, 0x07, 0xAE, 0x4B, 0xA7, 0xC7, 
++                /* 0618 */    0x07, 0x7C, 0x8E, 0x5C, 0x1E, 0x1F, 0xEE, 0xE8, 
++                /* 0620 */    0xE4, 0xF1, 0xC1, 0x70, 0x79, 0x95, 0x21, 0x47, 
++                /* 0628 */    0x13, 0x1F, 0xAD, 0xD8, 0xF0, 0xC0, 0x76, 0xD3, 
++                /* 0630 */    0xF3, 0xF0, 0x80, 0xCF, 0x75, 0x13, 0x8C, 0x57, 
++                /* 0638 */    0x48, 0x7E, 0x2D, 0x81, 0x71, 0x82, 0xC2, 0x5F, 
++                /* 0640 */    0x37, 0xC1, 0xFB, 0xFF, 0xBF, 0x6E, 0x02, 0xCF, 
++                /* 0648 */    0x51, 0x70, 0xAD, 0x97, 0x6C, 0x1A, 0xE4, 0x95, 
++                /* 0650 */    0xA3, 0x58, 0x2F, 0x02, 0x0A, 0xE3, 0x33, 0x1B, 
++                /* 0658 */    0xE0, 0x68, 0xAC, 0xCF, 0x6C, 0x60, 0xB9, 0x17, 
++                /* 0660 */    0xB0, 0x1B, 0x1B, 0xDC, 0xD3, 0x1A, 0xEC, 0xBB, 
++                /* 0668 */    0xC3, 0xC3, 0xD9, 0x63, 0xDA, 0xA3, 0xDA, 0x03, 
++                /* 0670 */    0x9A, 0x8F, 0xD8, 0x31, 0xDE, 0xD2, 0x82, 0xC4, 
++                /* 0678 */    0x89, 0xF0, 0x3A, 0xF0, 0xB4, 0xE6, 0x4B, 0x46, 
++                /* 0680 */    0xBC, 0x40, 0x4F, 0x6B, 0xC6, 0x88, 0xF3, 0xD2, 
++                /* 0688 */    0x66, 0xC4, 0x57, 0x8A, 0x10, 0x0F, 0x6B, 0x3E, 
++                /* 0690 */    0xB9, 0x19, 0xEF, 0x61, 0x22, 0x5C, 0x98, 0x17, 
++                /* 0698 */    0xB6, 0xA7, 0x35, 0x70, 0xFC, 0xFF, 0x4F, 0x6B, 
++                /* 06A0 */    0x70, 0xE4, 0x5C, 0xB1, 0x01, 0x9A, 0x5C, 0xF4, 
++                /* 06A8 */    0x71, 0x87, 0x14, 0xB0, 0x5C, 0x1B, 0xD8, 0x2D, 
++                /* 06B0 */    0x05, 0xDE, 0x05, 0x1B, 0x38, 0xFF, 0xFF, 0x8F, 
++                /* 06B8 */    0x28, 0xE0, 0xCB, 0x72, 0xC1, 0xA6, 0x39, 0x2E, 
++                /* 06C0 */    0xD8, 0x28, 0x0E, 0xAB, 0x01, 0xD2, 0x3C, 0xE1, 
++                /* 06C8 */    0x5F, 0xAF, 0xC1, 0x3F, 0x09, 0x5F, 0xAF, 0x01, 
++                /* 06D0 */    0xDB, 0xB7, 0x58, 0xDC, 0xF5, 0x1A, 0x58, 0xFD, 
++                /* 06D8 */    0xFF, 0xAF, 0xD7, 0xC0, 0x52, 0xF0, 0x48, 0xE9, 
++                /* 06E0 */    0x9D, 0x1A, 0x5C, 0x37, 0x6D, 0x3C, 0xE8, 0x9B, 
++                /* 06E8 */    0x36, 0x4C, 0x85, 0x36, 0x7D, 0x6A, 0x34, 0x6A, 
++                /* 06F0 */    0xD5, 0xA0, 0x4C, 0x8D, 0x32, 0x0D, 0x6A, 0xF5, 
++                /* 06F8 */    0xA9, 0xD4, 0x98, 0xB1, 0xA1, 0x5A, 0xDA, 0x5D, 
++                /* 0700 */    0x82, 0x8A, 0x59, 0x8C, 0x46, 0xE3, 0x28, 0x20, 
++                /* 0708 */    0x54, 0xF6, 0x1F, 0x50, 0x20, 0x0E, 0xF9, 0xD1, 
++                /* 0710 */    0x11, 0xA0, 0x83, 0x7D, 0xA7, 0x74, 0x0B, 0x27, 
++                /* 0718 */    0x6B, 0x13, 0x88, 0xE3, 0x9B, 0x80, 0x68, 0x04, 
++                /* 0720 */    0x44, 0x5A, 0x54, 0x00, 0xB1, 0xDC, 0x20, 0x02, 
++                /* 0728 */    0xB2, 0x8A, 0x35, 0x09, 0xC8, 0x9A, 0xBF, 0x2F, 
++                /* 0730 */    0x02, 0xB7, 0x4E, 0x1D, 0x40, 0x2C, 0x25, 0x08, 
++                /* 0738 */    0x4D, 0xB4, 0x70, 0x81, 0x3A, 0x1E, 0x88, 0x06, 
++                /* 0740 */    0x43, 0x68, 0x04, 0xE4, 0x60, 0x14, 0x02, 0xB2, 
++                /* 0748 */    0x8C, 0xCF, 0x9D, 0xC0, 0x2D, 0xC0, 0x0A, 0x10, 
++                /* 0750 */    0x93, 0x0F, 0x42, 0x05, 0x7B, 0x01, 0x65, 0xEA, 
++                /* 0758 */    0x41, 0x04, 0x64, 0xA5, 0x6B, 0x15, 0x90, 0x75, 
++                /* 0760 */    0x83, 0x08, 0xC8, 0x59, 0xCD, 0x80, 0xB3, 0x8C, 
++                /* 0768 */    0x6E, 0x80, 0x98, 0xC2, 0x87, 0x82, 0x40, 0xAC, 
++                /* 0770 */    0x49, 0x0F, 0x28, 0x13, 0x08, 0xA2, 0x0B, 0x07, 
++                /* 0778 */    0xF1, 0x03, 0xC4, 0xA4, 0x81, 0x08, 0xC8, 0x71, 
++                /* 0780 */    0x7E, 0x25, 0x02, 0x77, 0x1C, 0x45, 0x80, 0xD4, 
++                /* 0788 */    0xD1, 0x70, 0x29, 0x08, 0x15, 0xFF, 0x09, 0x13, 
++                /* 0790 */    0xC8, 0xFF, 0xFF, 0xFD, 0x44, 0x96, 0xC0, 0x28, 
++                /* 0798 */    0x08, 0x8D, 0xA0, 0x09, 0x84, 0xC9, 0xF3, 0x04, 
++                /* 07A0 */    0xC2, 0x42, 0xFD, 0xFD, 0x34, 0x04, 0x07, 0x51, 
++                /* 07A8 */    0x35, 0x44, 0xEA, 0x0A, 0x84, 0x05, 0x7E, 0x18, 
++                /* 07B0 */    0x68, 0x30, 0x4E, 0x0F, 0x22, 0x20, 0x27, 0x7D, 
++                /* 07B8 */    0x52, 0x05, 0x22, 0xB9, 0x41, 0x04, 0xE4, 0xFF, 
++                /* 07C0 */    0x3F
++            })
++        }
++    }
++
++    /*  Wire GPE events to notify OEM 
++     *  added value events.
++     */
++    Scope (\_GPE)
++    {
++        Method (_L18, 0, Serialized)
++        {
++            Notify (\_SB.WMI1, 0xD0) 
++        }
++    }
++}
++
+diff -Nur a/tools/xenpmd/acpi-events.c b/tools/xenpmd/acpi-events.c
+--- a/tools/xenpmd/acpi-events.c       2009-04-01 16:30:52.000000000 -0400
++++ b/tools/xenpmd/acpi-events.c       2009-04-01 16:51:29.000000000 -0400
+@@ -41,6 +41,7 @@
+ #define XS_LID_EVENT_PATH           "/pm/events/lidstatechanged"
+ #define XS_PBTN_EVENT_PATH          "/pm/events/powerbuttonpressed"
+ #define XS_SBTN_EVENT_PATH          "/pm/events/sleepbuttonpressed"
++#define XS_OEM_EVENT_PATH           "/oem/event"
+ static int socket_fd;
+ static pthread_t acpi_thread;  
+@@ -97,6 +98,11 @@
+     xs_write(xs, XBT_NULL, XS_SBTN_EVENT_PATH, "1", 1);
+ }
++void handle_oem_event(void)
++{
++    xs_write(xs, XBT_NULL, XS_OEM_EVENT_PATH, "1", 1);
++}
++
+ void process_acpi_message(char *acpi_buffer)
+ {
+     if ( strstr(acpi_buffer, "ac_adapter") )
+@@ -119,7 +125,14 @@
+     }
+     if ( strstr(acpi_buffer, "SBTN") )
++    {
+         handle_sbtn_pressed_event();
++        return;
++    }
++
++    if ( (strstr(acpi_buffer, "WMID")) ||
++         (strstr(acpi_buffer, "AMW0")) )
++        handle_oem_event();
+ }
+ static void *acpi_events_thread(void *arg)
diff --git a/xen-3.4/power-management-enhancement b/xen-3.4/power-management-enhancement
new file mode 100644 (file)
index 0000000..6551000
--- /dev/null
@@ -0,0 +1,673 @@
+diff -Nur a/tools/firmware/hvmloader/acpi/build.c b/tools/firmware/hvmloader/acpi/build.c
+--- a/tools/firmware/hvmloader/acpi/build.c    2009-04-01 10:29:52.000000000 -0400
++++ b/tools/firmware/hvmloader/acpi/build.c    2009-04-01 14:01:47.000000000 -0400
+@@ -50,7 +50,13 @@
+ static uint8_t battery_port_exists(void)
+ {
+-    return (inb(0x88) == 0x1F);
++    uint8_t val;
++
++    val = inb(0x88);
++    if ( (val == 0xff) || (val == 0x0) )
++        return 0;
++
++    return 1;
+ }
+ static int construct_madt(struct acpi_20_madt *madt)
+diff -Nur a/tools/firmware/hvmloader/acpi/Makefile b/tools/firmware/hvmloader/acpi/Makefile
+--- a/tools/firmware/hvmloader/acpi/Makefile   2009-04-01 10:29:52.000000000 -0400
++++ b/tools/firmware/hvmloader/acpi/Makefile   2009-04-01 14:01:47.000000000 -0400
+@@ -19,17 +19,30 @@
+ include $(XEN_ROOT)/tools/firmware/Rules.mk
+ C_SRC = build.c dsdt.c static_tables.c
+-H_SRC = $(wildcard *.h)
++H_SRC = $(wildcard *.h) ssdt_pm.h ssdt_tpm.h
+ OBJS  = $(patsubst %.c,%.o,$(C_SRC))
++build.o: $(H_SRC) build.c
++
++IASL_VER = acpica-unix-20080729
++IASL_URL = http://acpica.org/download/$(IASL_VER).tar.gz
++
+ CFLAGS += -I. -I.. $(CFLAGS_include)
+ vpath iasl $(PATH)
+ all: acpi.a
+-ssdt_pm.h ssdt_tpm.h: %.h: %.asl
++ssdt_pm.h: ssdt_pm.asl
++      $(MAKE) iasl
++      iasl -tc $<
++      sed -i'' -re 's/AmlCode/AmlCode_PM/g' $*.hex
++      mv $*.hex $@
++      rm -f *.aml
++
++ssdt_tpm.h: ssdt_tpm.asl
+       $(MAKE) iasl
+       iasl -tc $<
++      sed -i'' -re 's/AmlCode/AmlCode_TPM/g' $*.hex
+       mv $*.hex $@
+       rm -f *.aml
+@@ -42,21 +55,23 @@
+ iasl:
+       @echo
+-      @echo "ACPI ASL compiler (iasl) is needed"
+-      @echo "Download and install Intel ACPI CA from"
++      @echo "ACPI ASL compiler(iasl) is needed"
++      @echo "Download Intel ACPI CA"
++      @echo "If wget failed, please download and compile manually from"
+       @echo "http://acpica.org/downloads/"
+       @echo 
+-      @exit 1
++      wget $(IASL_URL)
++      tar xzf $(IASL_VER).tar.gz
++      make -C $(IASL_VER)/compiler
++      $(INSTALL_PROG) $(IASL_VER)/compiler/iasl /$(BINDIR)/iasl
++
++%.o: %.c
++      $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
+ acpi.a: $(OBJS)
+       $(AR) rc $@ $(OBJS)
+-%.o: %.c $(H_SRC)
+-      $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
+-
+ clean:
+-      rm -rf *.a *.o $(IASL_VER) $(IASL_VER).tar.gz $(DEPS)
++      rm -rf *.a *.o dsdt.c ssdt_pm.h ssdt_tpm.h $(IASL_VER) $(IASL_VER).tar.gz
+ install: all
+-
+--include $(DEPS)
+diff -Nur a/tools/firmware/hvmloader/acpi/ssdt_pm.asl b/tools/firmware/hvmloader/acpi/ssdt_pm.asl
+--- a/tools/firmware/hvmloader/acpi/ssdt_pm.asl        2009-04-01 10:29:52.000000000 -0400
++++ b/tools/firmware/hvmloader/acpi/ssdt_pm.asl        2009-04-01 14:01:47.000000000 -0400
+@@ -95,6 +95,13 @@
+             P88,  8
+         }
++        /* OperationRegion for Power Button */
++        OperationRegion (PBOP, SystemIO, 0x200, 0x01)
++        Field (PBOP, ByteAcc, NoLock, WriteAsZeros)
++        {
++            SLP, 1,
++            WAK, 1
++        }
+         Mutex (SYNC, 0x01)
+         Name (BUF0, Buffer (0x0100) {})
+@@ -291,8 +298,99 @@
+             Release (SYNC)
+         }
+-        /* Future patches will extend AC object to better account for
+-         * AC to DC transition and more. */
++        Method (E0, 0, NotSerialized)
++        {
++            If (\_SB.SLP)
++            {
++                Store (One, \_SB.SLP)
++                Notify (\_SB.SLPB, 0x80)
++            }
++
++            if (\_SB.WAK)
++            {
++                Store (One, \_SB.WAK)
++                Notify (\_SB.SLPB, 0x2)
++            }
++        }
++
++        Method (E1, 0, NotSerialized)
++        {
++            If (\_SB.SLP)
++            {
++                Store (One, \_SB.SLP)
++                Notify (\_SB.PBTN, 0x80)
++            }
++
++            if (\_SB.WAK)
++            {
++                Store (One, \_SB.WAK)
++                Notify (\_SB.PBTN, 0x2)
++            }
++        }
++
++        Method (E1C, 0, NotSerialized)
++        {
++            Notify (\_SB.AC, 0x80)
++        }
++
++        Method (E17, 0, NotSerialized)
++        {
++            Notify (\_SB.LID, 0x80)
++        }
++
++        Device (LID)
++        {
++            Name (_HID, EisaId ("PNP0C0D"))
++            Method (_LID, 0, NotSerialized)
++            {
++                Store (\_SB.P88, Local0)
++                If (And (Local0, 0x4))
++                {
++                    Return (0x1)
++                }
++
++                Return (0x0)
++            }
++
++            Name (_PRW, Package (0x02)
++            {
++                0x17,
++                0x03
++            })
++
++            Method (_PSW, 1, NotSerialized)
++            {
++                Store (\_SB.P88, Local0)
++                If (And (Local0, 0x4))
++                {
++                    Return (0x1)
++                }
++                Return (0x0)
++            }
++        }
++
++        Device (PBTN)
++        {
++            Name (_HID, EisaId ("PNP0C0C"))
++
++            Name (_PRW, Package (0x02)
++            {
++                0x01,
++                0x04 
++            })
++        }
++
++        Device (SLPB)
++        {
++            Name (_HID, EisaId ("PNP0C0E"))
++
++            Name (_PRW, Package (0x02)
++            {
++                0x01,
++                0x04 
++            })
++        }
++
+         Device (AC)
+         {
+             Name (_HID, "ACPI0003")
+@@ -304,6 +402,12 @@
+             })
+             Method (_PSR, 0, NotSerialized)
+             {
++                Store (\_SB.P88, Local0)
++                If (And (Local0, 0x1))
++                {
++                    Return (0x1)
++                }
++
+                 Return (0x0)
+             }
+@@ -348,11 +452,16 @@
+                 \_SB
+             })
+-            /* Always returns 0x1f indicating battery present. */
++            /* Returning 0x1F indicates battery present */
+             Method (_STA, 0, NotSerialized)
+             {
+                 Store (\_SB.P88, Local0)
+-                Return ( Local0 )
++                If (And (Local0, 0x2))
++                {
++                    Return (0x1F)
++                }
++
++                Return (0x0F)
+             }
+             /* Battery generic info: design capacity, voltage, model # etc. */
+@@ -367,7 +476,7 @@
+             /* Battery status including battery charging/discharging rate. */
+             Method (_BST, 0, NotSerialized)
+             {
+-                Store (1, \_SB.DBG1)
++                /* Store (1, \_SB.DBG1) */
+                 ACQR ()
+                 INIT (0x02)
+                 INIT (0x01)
+@@ -378,7 +487,7 @@
+                 Store (HLP7 (), Index (BST0, 0x02))
+                 Store (HLP7 (), Index (BST0, 0x03))
+                 REL ()
+-                Store (2, \_SB.DBG1)
++                /* Store (2, \_SB.DBG1) */ 
+                 Return (BST0)
+             }
+         }
+@@ -419,5 +528,31 @@
+             }
+         }
+     }
++
++    /*  Wire GPE events to notify power state
++     *  changes like ac power to battery use etc.
++     */
++    Scope (\_GPE)
++    {
++        Method (_L00, 0, NotSerialized)
++        {
++            \_SB.E0()
++        }
++
++        Method (_L01, 0, NotSerialized)
++        {
++            \_SB.E1()
++        }
++
++        Method (_L1C, 0, NotSerialized)
++        {
++            \_SB.E1C()
++        }
++
++        Method (_L17, 0, NotSerialized)
++        {
++            \_SB.E17()
++        }
++    }
+ }
+diff -Nur 
+--- /dev/null 
++++ b/tools/xenpmd/acpi-events.c       2009-04-01 14:01:47.000000000 -0400
+@@ -0,0 +1,167 @@
++/*
++ * acpi-events.c
++ *
++ * Register for and monitor acpi events and communicate relevant
++ * events to ioemu by triggering xenstore events. 
++ *
++ * Copyright (c) 2008  Kamala Narasimhan
++ * Copyright (c) 2008  Citrix Systems, Inc.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++ */
++
++#include <stdio.h>
++#include <string.h>
++#include <pthread.h>
++#include <sys/socket.h>
++#include <sys/un.h>
++#include <unistd.h>
++#include <xs.h>
++
++#define AC_ADAPTER_STATE_FILE_PATH "/proc/acpi/ac_adapter/AC/state"
++#define LID_STATE_FILE_PATH "/proc/acpi/button/lid/LID/state"
++#define ACPID_SOCKET_PATH "/var/run/acpid.socket"
++
++#define XS_AC_ADAPTER_STATE_PATH "/pm/ac_adapter"
++#define XS_LID_STATE_PATH "/pm/lid_state"
++
++#define XS_AC_ADAPTER_EVENT_PATH    "/pm/events/acadapterstatechanged"
++#define XS_LID_EVENT_PATH           "/pm/events/lidstatechanged"
++#define XS_PBTN_EVENT_PATH          "/pm/events/powerbuttonpressed"
++#define XS_SBTN_EVENT_PATH          "/pm/events/sleepbuttonpressed"
++
++static int socket_fd;
++static pthread_t acpi_thread;  
++extern struct xs_handle *xs;
++
++void write_state_info_in_xenstore(char *file_path, char *xenstore_path, 
++             char *search_str, char *default_value, char *alternate_value)
++{
++    FILE *file;
++    char file_data[1024];
++
++    xs_write(xs, XBT_NULL, xenstore_path, default_value, strlen(default_value));
++    file = fopen(file_path, "r");
++    if ( file == NULL )
++        return;
++
++    memset(file_data, 0, 1024);
++    fgets(file_data, 1024, file);
++    if ( strstr(file_data, search_str) )
++        xs_write(xs, XBT_NULL, xenstore_path, alternate_value,
++                 strlen(alternate_value));
++    fclose(file);
++}
++
++void initialize_system_state_info(void)
++{
++    write_state_info_in_xenstore(AC_ADAPTER_STATE_FILE_PATH, 
++                                XS_AC_ADAPTER_STATE_PATH, "off-line", "1", "0");
++    write_state_info_in_xenstore(LID_STATE_FILE_PATH, XS_LID_STATE_PATH, 
++                                "closed", "1", "0");
++}
++
++void handle_ac_adapter_state_change(void)
++{
++    write_state_info_in_xenstore(AC_ADAPTER_STATE_FILE_PATH, 
++                     XS_AC_ADAPTER_STATE_PATH, "off-line", "1", "0");
++    xs_write(xs, XBT_NULL, XS_AC_ADAPTER_EVENT_PATH, "1", 1);
++}
++
++void handle_lid_state_change(void)
++{
++    write_state_info_in_xenstore(LID_STATE_FILE_PATH, XS_LID_STATE_PATH, 
++                                "closed", "1", "0");
++    xs_write(xs, XBT_NULL, XS_LID_EVENT_PATH, "1", 1);
++}
++
++void handle_pbtn_pressed_event(void)
++{
++    xs_write(xs, XBT_NULL, XS_PBTN_EVENT_PATH, "1", 1);
++}
++
++void handle_sbtn_pressed_event(void)
++{
++    xs_write(xs, XBT_NULL, XS_SBTN_EVENT_PATH, "1", 1);
++}
++
++void process_acpi_message(char *acpi_buffer)
++{
++    if ( strstr(acpi_buffer, "ac_adapter") )
++    {
++        handle_ac_adapter_state_change();
++        return;
++    }
++
++    if ( strstr(acpi_buffer, "LID") )
++    {
++        handle_lid_state_change();
++        return;
++    }
++
++    if ( (strstr(acpi_buffer, "PBTN")) ||
++         (strstr(acpi_buffer, "PWRF")) )
++    {
++        handle_pbtn_pressed_event();
++        return;
++    }
++
++    if ( strstr(acpi_buffer, "SBTN") )
++        handle_sbtn_pressed_event();
++}
++
++static void *acpi_events_thread(void *arg)
++{
++    int ret;
++    struct sockaddr_un addr;
++    char acpi_buffer[1024];
++
++    socket_fd = socket(PF_UNIX, SOCK_STREAM, 0);
++    if ( socket_fd == -1)
++        return (void *)socket_fd;
++
++    addr.sun_family = AF_UNIX;
++    strncpy(addr.sun_path, ACPID_SOCKET_PATH, strlen(ACPID_SOCKET_PATH)); 
++    addr.sun_path[strlen(ACPID_SOCKET_PATH)] = '\0';
++    ret = connect(socket_fd, (struct sockaddr *)&addr, sizeof(addr)); 
++    if ( ret == -1 )
++        return (void *)ret; 
++
++    while( 1 )
++    {
++        memset(acpi_buffer, 0, sizeof(acpi_buffer));
++        ret = recv(socket_fd, acpi_buffer, sizeof(acpi_buffer), 0);
++        if ( ret == 0 )
++            continue;
++
++        process_acpi_message(acpi_buffer);
++    }
++
++    return (void *)1;
++}
++
++void monitor_acpi_events(void)
++{
++    pthread_create(&acpi_thread, NULL, &acpi_events_thread, NULL);
++}
++
++void acpi_events_cleanup(void)
++{
++    if ( socket_fd != -1 )
++        close(socket_fd);
++
++    pthread_cancel(acpi_thread);
++}
++
+diff -Nur a/tools/xenpmd/Makefile b/tools/xenpmd/Makefile
+--- a/tools/xenpmd/Makefile    2009-04-01 10:29:53.000000000 -0400
++++ b/tools/xenpmd/Makefile    2009-04-01 14:01:47.000000000 -0400
+@@ -10,6 +10,8 @@
+ .PHONY: all
+ all: $(BIN)
++$(BIN): xenpmd.o acpi-events.o
++
+ .PHONY: install
+ install: all
+       $(INSTALL_DIR) $(DESTDIR)$(SBINDIR)
+@@ -17,6 +19,4 @@
+ .PHONY: clean
+ clean:
+-      $(RM) -f $(BIN) $(DEPS)
+-
+--include $(DEPS)
++      $(RM) -f $(BIN) *.o
+diff -Nur a/tools/xenpmd/xenpmd.c b/tools/xenpmd/xenpmd.c
+--- a/tools/xenpmd/xenpmd.c    2009-04-01 10:29:53.000000000 -0400
++++ b/tools/xenpmd/xenpmd.c    2009-04-01 14:02:11.000000000 -0400
+@@ -40,10 +40,11 @@
+ #include <dirent.h>
+ #include <unistd.h>
+ #include <sys/stat.h>
++#include <pthread.h>
+ #include <xs.h>
+ /* #define RUN_STANDALONE */
+-#define RUN_IN_SIMULATE_MODE
++/* #define RUN_IN_SIMULATE_MODE */
+ enum BATTERY_INFO_TYPE {
+     BIF, 
+@@ -84,7 +85,12 @@
+     unsigned long           present_voltage;
+ };
+-static struct xs_handle *xs;
++struct xs_handle *xs;
++static pthread_t worker_thread;
++
++extern void initialize_system_state_info(void);
++extern void monitor_acpi_events(void);
++extern void acpi_events_cleanup(void);
+ #ifdef RUN_IN_SIMULATE_MODE
+     #define BATTERY_DIR_PATH "/tmp/battery"
+@@ -216,13 +222,21 @@
+                                   char *attrib_value,
+                                   struct battery_status *status)
+ {
+-    if ( strstr(attrib_name, "charging state") ) 
++    if ( strstr(attrib_name, "charging state") )
+     {
+-        /* Check this, below is half baked */
+-        if ( strstr(attrib_value, "charged") ) 
+-            status->state = 0;
+-        else 
+-            status->state = 1;
++        if ( strstr(attrib_value, "charging/discharging") )
++            status->state |= 0x3;
++        else if ( strstr(attrib_value, "discharging") )
++            status->state |= 0x1;
++        else if ( strstr(attrib_value, "charging") )
++            status->state |= 0x2;
++        return;
++    }
++
++    if ( strstr(attrib_name, "capacity state") )
++    {
++        if ( strstr(attrib_value, "ok") )
++            status->state |= 4;
+         return;
+     }
+@@ -297,6 +311,7 @@
+     if  ( !info_or_status )
+         return 0;
++    memset(line_info, 0, 256);
+     if (type == BIF) 
+         memset(info_or_status, 0, sizeof(struct battery_info));
+     else 
+@@ -306,8 +321,11 @@
+     if ( !file )
+         return 0;
+-    while ( fgets(line_info, sizeof(line_info), file) != NULL ) 
++    while ( fgets(line_info, 1024, file) != NULL ) 
++    {
+         parse_battery_info_or_status(line_info, type, info_or_status);
++        memset(line_info, 0, 256);
++    }
+     fclose(file);
+     return 1;
+@@ -317,14 +335,14 @@
+ void print_battery_info(struct battery_info *info)
+ {
+     printf("present:                %d\n", info->present);
+-    printf("design capacity:        %d\n", info->design_capacity);
+-    printf("last full capacity:     %d\n", info->last_full_capacity);
++    printf("design capacity:        %d\n", (int) info->design_capacity);
++    printf("last full capacity:     %d\n", (int) info->last_full_capacity);
+     printf("battery technology:     %d\n", info->battery_technology);
+-    printf("design voltage:         %d\n", info->design_voltage);
+-    printf("design capacity warning:%d\n", info->design_capacity_warning);
+-    printf("design capacity low:    %d\n", info->design_capacity_low);
+-    printf("capacity granularity 1: %d\n", info->capacity_granularity_1);
+-    printf("capacity granularity 2: %d\n", info->capacity_granularity_2);
++    printf("design voltage:         %d\n", (int) info->design_voltage);
++    printf("design capacity warning:%d\n", (int) info->design_capacity_warning);
++    printf("design capacity low:    %d\n", (int) info->design_capacity_low);
++    printf("capacity granularity 1: %d\n", (int) info->capacity_granularity_1);
++    printf("capacity granularity 2: %d\n", (int) info->capacity_granularity_2);
+     printf("model number:           %s\n", info->model_number);
+     printf("serial number:          %s\n", info->serial_number);
+     printf("battery type:           %s\n", info->battery_type);
+@@ -369,7 +387,7 @@
+              (unsigned int)strlen(info->serial_number), info->serial_number,
+              (unsigned int)strlen(info->battery_type), info->battery_type,
+              (unsigned int)strlen(info->oem_info), info->oem_info);
+-    strncat(val+73, string_info, 1024-73-1);
++    strncat(val+73, string_info, 1024);
+     xs_write(xs, XBT_NULL, "/pm/bif", 
+              val, 73+8+strlen(info->model_number)+strlen(info->serial_number)+
+              strlen(info->battery_type)+strlen(info->oem_info)+1);
+@@ -406,10 +424,11 @@
+ void print_battery_status(struct battery_status *status)
+ {
+     printf("present:                     %d\n", status->present);
+-    printf("Battery state                %d\n", status->state);
+-    printf("Battery present rate         %d\n", status->present_rate);
+-    printf("Battery remining capacity    %d\n", status->remaining_capacity);
+-    printf("Battery present voltage      %d\n", status->present_voltage);
++    printf("Battery state                %d\n", (int) status->state);
++    printf("Battery present rate         %d\n", (int) status->present_rate);
++    printf("Battery remining capacity    %d\n", 
++            (int) status->remaining_capacity);
++    printf("Battery present voltage      %d\n", (int) status->present_voltage);
+ }
+ #endif /*RUN_STANDALONE*/
+@@ -469,6 +488,7 @@
+     return ret;
+ }
++#ifndef RUN_STANDALONE
+ /* Borrowed daemonize from xenstored - Initially written by Stevens. */
+ static void daemonize(void)
+ {
+@@ -493,24 +513,51 @@
+     umask(0);
+ }
++#endif /* RUN_STANDALONE */
+-int main(int argc, char *argv[])
++/*
++ * IMPORTANT: From the child process, we create a new thread
++ * to monitor acpid events.  However, due to a bug in uClibc,
++ * the child process main thread does not get time slice
++ * after spawning a new thread.  To work around this, we create
++ * a worker thread and then create an acpid monitor thread from
++ * this worker thread.  This way both the worker thread and acpid
++ * thread will get time slices.  This workaround will be removed
++ * once uClibc bug is fixed.
++ */
++static void *worker_thread_routine(void *arg)
+ {
+-#ifndef RUN_STANDALONE
+-    daemonize();
+-#endif
+     xs = (struct xs_handle *)xs_daemon_open();
+-    if ( xs == NULL ) 
+-        return -1;
++    if ( xs == NULL )
++        return 0;
+-    if ( write_one_time_battery_info() == 0 ) 
++    initialize_system_state_info();
++    monitor_acpi_events();
++    if ( write_one_time_battery_info() == 0 )
+     {
+         xs_daemon_close(xs);
+-        return -1;
++        return 0;
+     }
+     wait_for_and_update_battery_status_request();
++    acpi_events_cleanup();
+     xs_daemon_close(xs);
+     return 0;
+ }
++int main(int argc, char *argv[])
++{
++#ifndef RUN_STANDALONE
++    daemonize();
++#endif
++
++    /* Refer to worker_thread_routine for why we create additional thread */
++    pthread_create(&worker_thread, NULL, &worker_thread_routine, NULL);
++
++    /* below won't get a time slice because of uClibc bug. */
++    while ( 1 ) 
++        sleep(60);
++
++    return 0;
++}
++
diff --git a/xen-3.4/series b/xen-3.4/series
new file mode 100644 (file)
index 0000000..097522e
--- /dev/null
@@ -0,0 +1,6 @@
+fix_compilation
+power-management-enhancement
+smbios
+acpi-slic
+oem-features
+thermal-management
diff --git a/xen-3.4/smbios b/xen-3.4/smbios
new file mode 100644 (file)
index 0000000..972f8f6
--- /dev/null
@@ -0,0 +1,786 @@
+diff
+--- /dev/null
++++ b/oem/dell-960-optiplex-smbios.patch       2009-04-01 14:15:16.000000000 -0400
+@@ -0,0 +1,49 @@
++diff -Nur a/tools/firmware/hvmloader/markers.h b/tools/firmware/hvmloader/markers.h
++--- a/tools/firmware/hvmloader/markers.h      2008-11-25 12:47:54.000000000 -0500
+++++ b/tools/firmware/hvmloader/markers.h      2008-11-25 12:53:27.000000000 -0500
++@@ -17,22 +17,22 @@
++ struct bios_vendor_struct {
++     char marker[65];
++     char value[65];
++-} bios_vendor = {BIOS_VENDOR_MARKER, "Xen"};
+++} bios_vendor = {BIOS_VENDOR_MARKER, "Dell Inc."};
++ 
++ struct bios_version_struct {
++     char marker[65];
++     char value[65];
++-} bios_version = {BIOS_VERSION_MARKER, ""};
+++} bios_version = {BIOS_VERSION_MARKER, "X20"};
++ 
++ struct sys_manufacturer_struct {
++     char marker[65];
++     char value[65];
++-} sys_manufacturer = {SYS_MANUFACTURER_MARKER, "Xen"};
+++} sys_manufacturer = {SYS_MANUFACTURER_MARKER, "Dell Inc."};
++ 
++ struct sys_product_name_struct {
++     char marker[65];
++     char value[65];
++-} sys_product_name = {SYS_PRODUCT_NAME_MARKER, "HVM domU"};
+++} sys_product_name = {SYS_PRODUCT_NAME_MARKER, "OptiPlex 960"};
++ 
++ struct sys_product_version_struct {
++     char marker[65];
++@@ -57,15 +57,15 @@
++ struct sys_enclosure_manufacturer_struct {
++     char marker[65];
++     char value[65];
++-} sys_enclosure_manufacturer = {SYS_ENCLOSURE_MANUFACTURER_MARKER, "Xen"};
+++} sys_enclosure_manufacturer = {SYS_ENCLOSURE_MANUFACTURER_MARKER, "Dell Inc."};
++ 
++ struct sys_enclosure_serial_struct {
++     char marker[65];
++     char value[65];
++ } sys_enclosure_serial = {SYS_ENCLOSURE_SERIAL_MARKER, ""};
++ 
++-const char *oem_strings_array[1] = {
++-    NULL
+++const char *oem_strings_array[2] = {
+++    "www.dell.com", NULL
++ };
++ 
++ #endif /* __HVMLOADER_MARKERS_H__ */
+diff
+--- /dev/null 
++++ b/oem/dell-e6500-latitude-smbios.patch     2009-04-01 14:15:16.000000000 -0400
+@@ -0,0 +1,49 @@
++diff -Nur a/tools/firmware/hvmloader/markers.h b/tools/firmware/hvmloader/markers.h
++--- a/tools/firmware/hvmloader/markers.h      2008-12-15 14:44:08.000000000 -0500
+++++ b/tools/firmware/hvmloader/markers.h      2008-12-15 14:56:51.000000000 -0500
++@@ -17,22 +17,22 @@
++ struct bios_vendor_struct {
++     char marker[65];
++     char value[65];
++-} bios_vendor = {BIOS_VENDOR_MARKER, "Xen"};
+++} bios_vendor = {BIOS_VENDOR_MARKER, "Dell Inc."};
++ 
++ struct bios_version_struct {
++     char marker[65];
++     char value[65];
++-} bios_version = {BIOS_VERSION_MARKER, ""};
+++} bios_version = {BIOS_VERSION_MARKER, "A09"};
++ 
++ struct sys_manufacturer_struct {
++     char marker[65];
++     char value[65];
++-} sys_manufacturer = {SYS_MANUFACTURER_MARKER, "Xen"};
+++} sys_manufacturer = {SYS_MANUFACTURER_MARKER, "Dell Inc."};
++ 
++ struct sys_product_name_struct {
++     char marker[65];
++     char value[65];
++-} sys_product_name = {SYS_PRODUCT_NAME_MARKER, "HVM domU"};
+++} sys_product_name = {SYS_PRODUCT_NAME_MARKER, "Latitude E6500"};
++ 
++ struct sys_product_version_struct {
++     char marker[65];
++@@ -57,15 +57,15 @@
++ struct sys_enclosure_manufacturer_struct {
++     char marker[65];
++     char value[65];
++-} sys_enclosure_manufacturer = {SYS_ENCLOSURE_MANUFACTURER_MARKER, "Xen"};
+++} sys_enclosure_manufacturer = {SYS_ENCLOSURE_MANUFACTURER_MARKER, "Dell Inc."};
++ 
++ struct sys_enclosure_serial_struct {
++     char marker[65];
++     char value[65];
++ } sys_enclosure_serial = {SYS_ENCLOSURE_SERIAL_MARKER, ""};
++ 
++-const char *oem_strings_array[1] = {
++-    NULL
+++const char *oem_strings_array[4] = {
+++    "Dell System", "5[0031]", "13[PP04X]", NULL
++ };
++ 
++ #endif /* __HVMLOADER_MARKERS_H__ */
+diff 
+--- /dev/null 
++++ b/oem/hp-6930p-elitebook-smbios.patch      2009-04-01 14:15:16.000000000 -0400
+@@ -0,0 +1,67 @@
++diff -Nur a/tools/firmware/hvmloader/markers.h b/tools/firmware/hvmloader/markers.h
++--- a/tools/firmware/hvmloader/markers.h      2008-11-25 12:47:54.000000000 -0500
+++++ b/tools/firmware/hvmloader/markers.h      2008-11-25 12:46:41.000000000 -0500
++@@ -17,27 +17,27 @@
++ struct bios_vendor_struct {
++     char marker[65];
++     char value[65];
++-} bios_vendor = {BIOS_VENDOR_MARKER, "Xen"};
+++} bios_vendor = {BIOS_VENDOR_MARKER, "Hewlett-Packard"};
++ 
++ struct bios_version_struct {
++     char marker[65];
++     char value[65];
++-} bios_version = {BIOS_VERSION_MARKER, ""};
+++} bios_version = {BIOS_VERSION_MARKER, "68PCU Ver. F.0B"};
++ 
++ struct sys_manufacturer_struct {
++     char marker[65];
++     char value[65];
++-} sys_manufacturer = {SYS_MANUFACTURER_MARKER, "Xen"};
+++} sys_manufacturer = {SYS_MANUFACTURER_MARKER, "Hewlett-Packard"};
++ 
++ struct sys_product_name_struct {
++     char marker[65];
++     char value[65];
++-} sys_product_name = {SYS_PRODUCT_NAME_MARKER, "HVM domU"};
+++} sys_product_name = {SYS_PRODUCT_NAME_MARKER, "HP EliteBook 6930p"};
++ 
++ struct sys_product_version_struct {
++     char marker[65];
++     char value[65];
++-} sys_product_version = {SYS_PRODUCT_VERSION_MARKER, ""};
+++} sys_product_version = {SYS_PRODUCT_VERSION_MARKER, "F.0B"};
++ 
++ struct sys_product_serial_struct {
++     char marker[65];
++@@ -47,25 +47,25 @@
++ struct sys_product_sku_struct {
++     char marker[65];
++     char value[65];
++-} sys_product_sku = {SYS_PRODUCT_SKU_MARKER, ""};
+++} sys_product_sku = {SYS_PRODUCT_SKU_MARKER, "GB996EA#ABU"};
++ 
++ struct sys_product_family_struct {
++     char marker[65];
++     char value[65];
++-} sys_product_family = {SYS_PRODUCT_FAMILY_MARKER, ""};
+++} sys_product_family = {SYS_PRODUCT_FAMILY_MARKER, "103C_5336AN"};
++ 
++ struct sys_enclosure_manufacturer_struct {
++     char marker[65];
++     char value[65];
++-} sys_enclosure_manufacturer = {SYS_ENCLOSURE_MANUFACTURER_MARKER, "Xen"};
+++} sys_enclosure_manufacturer = {SYS_ENCLOSURE_MANUFACTURER_MARKER, "Hewlett-Packard"};
++ 
++ struct sys_enclosure_serial_struct {
++     char marker[65];
++     char value[65];
++ } sys_enclosure_serial = {SYS_ENCLOSURE_SERIAL_MARKER, ""};
++ 
++-const char *oem_strings_array[1] = {
++-    NULL
+++const char *oem_strings_array[4] = {
+++    "ABS 70/71 79 7A 7B 7C", "CSM v01.24", "www.hp.com", NULL
++ };
++ 
++ #endif /* __HVMLOADER_MARKERS_H__ */
+diff 
+--- /dev/null 
++++ b/oem/lenovo-x200-thinkpad-smbios.patch    2009-04-01 14:15:16.000000000 -0400
+@@ -0,0 +1,61 @@
++diff -Nur a/tools/firmware/hvmloader/markers.h b/tools/firmware/hvmloader/markers.h
++--- a/tools/firmware/hvmloader/markers.h      2008-12-15 14:44:08.000000000 -0500
+++++ b/tools/firmware/hvmloader/markers.h      2008-12-16 10:09:53.000000000 -0500
++@@ -17,27 +17,27 @@
++ struct bios_vendor_struct {
++     char marker[65];
++     char value[65];
++-} bios_vendor = {BIOS_VENDOR_MARKER, "Xen"};
+++} bios_vendor = {BIOS_VENDOR_MARKER, "LENOVO"};
++ 
++ struct bios_version_struct {
++     char marker[65];
++     char value[65];
++-} bios_version = {BIOS_VERSION_MARKER, ""};
+++} bios_version = {BIOS_VERSION_MARKER, "6DET33WW (1.10 )"};
++ 
++ struct sys_manufacturer_struct {
++     char marker[65];
++     char value[65];
++-} sys_manufacturer = {SYS_MANUFACTURER_MARKER, "Xen"};
+++} sys_manufacturer = {SYS_MANUFACTURER_MARKER, "LENOVO"};
++ 
++ struct sys_product_name_struct {
++     char marker[65];
++     char value[65];
++-} sys_product_name = {SYS_PRODUCT_NAME_MARKER, "HVM domU"};
+++} sys_product_name = {SYS_PRODUCT_NAME_MARKER, "74542NU"};
++ 
++ struct sys_product_version_struct {
++     char marker[65];
++     char value[65];
++-} sys_product_version = {SYS_PRODUCT_VERSION_MARKER, ""};
+++} sys_product_version = {SYS_PRODUCT_VERSION_MARKER, "ThinkPad X200"};
++ 
++ struct sys_product_serial_struct {
++     char marker[65];
++@@ -52,20 +52,20 @@
++ struct sys_product_family_struct {
++     char marker[65];
++     char value[65];
++-} sys_product_family = {SYS_PRODUCT_FAMILY_MARKER, ""};
+++} sys_product_family = {SYS_PRODUCT_FAMILY_MARKER, "ThinkPad X200"};
++ 
++ struct sys_enclosure_manufacturer_struct {
++     char marker[65];
++     char value[65];
++-} sys_enclosure_manufacturer = {SYS_ENCLOSURE_MANUFACTURER_MARKER, "Xen"};
+++} sys_enclosure_manufacturer = {SYS_ENCLOSURE_MANUFACTURER_MARKER, "LENOVO"};
++ 
++ struct sys_enclosure_serial_struct {
++     char marker[65];
++     char value[65];
++ } sys_enclosure_serial = {SYS_ENCLOSURE_SERIAL_MARKER, ""};
++ 
++-const char *oem_strings_array[1] = {
++-    NULL
+++const char *oem_strings_array[2] = {
+++    "IBM ThinkPad Embedded Controller -[7XHT21WW-1.03    ]-", NULL
++ };
++ 
++ #endif /* __HVMLOADER_MARKERS_H__ */
+diff
+--- /dev/null 
++++ b/tools/firmware/hvmloader/markers.h       2009-04-01 14:15:17.000000000 -0400
+@@ -0,0 +1,71 @@
++#ifndef __HVMLOADER_MARKERS_H__
++#define __HVMLOADER_MARKERS_H__
++
++#define BIOS_VENDOR_MARKER "##############################################BIOS_VENDOR_MARKER"
++#define BIOS_VERSION_MARKER "#############################################BIOS_VERSION_MARKER"
++
++#define SYS_MANUFACTURER_MARKER "#########################################SYS_MANUFACTURER_MARKER"
++#define SYS_PRODUCT_NAME_MARKER "#########################################SYS_PRODUCT_NAME_MARKER"
++#define SYS_PRODUCT_VERSION_MARKER "######################################SYS_PRODUCT_VERSION_MARKER"
++#define SYS_PRODUCT_SERIAL_MARKER "#######################################SYS_PRODUCT_SERIAL_MARKER"
++#define SYS_PRODUCT_SKU_MARKER "##########################################SYS_PRODUCT_SKU_MARKER"
++#define SYS_PRODUCT_FAMILY_MARKER "#######################################SYS_PRODUCT_FAMILY_MARKER"
++
++#define SYS_ENCLOSURE_MANUFACTURER_MARKER "###############################SYS_ENCLOSURE_MANUFACTURER_MARKER"
++#define SYS_ENCLOSURE_SERIAL_MARKER "#####################################SYS_ENCLOSURE_SERIAL_MARKER"
++
++struct bios_vendor_struct {
++    char marker[65];
++    char value[65];
++} bios_vendor = {BIOS_VENDOR_MARKER, "Xen"};
++
++struct bios_version_struct {
++    char marker[65];
++    char value[65];
++} bios_version = {BIOS_VERSION_MARKER, ""};
++
++struct sys_manufacturer_struct {
++    char marker[65];
++    char value[65];
++} sys_manufacturer = {SYS_MANUFACTURER_MARKER, "Xen"};
++
++struct sys_product_name_struct {
++    char marker[65];
++    char value[65];
++} sys_product_name = {SYS_PRODUCT_NAME_MARKER, "HVM domU"};
++
++struct sys_product_version_struct {
++    char marker[65];
++    char value[65];
++} sys_product_version = {SYS_PRODUCT_VERSION_MARKER, ""};
++
++struct sys_product_serial_struct {
++    char marker[65];
++    char value[65];
++} sys_product_serial = {SYS_PRODUCT_SERIAL_MARKER, ""};
++
++struct sys_product_sku_struct {
++    char marker[65];
++    char value[65];
++} sys_product_sku = {SYS_PRODUCT_SKU_MARKER, ""};
++
++struct sys_product_family_struct {
++    char marker[65];
++    char value[65];
++} sys_product_family = {SYS_PRODUCT_FAMILY_MARKER, ""};
++
++struct sys_enclosure_manufacturer_struct {
++    char marker[65];
++    char value[65];
++} sys_enclosure_manufacturer = {SYS_ENCLOSURE_MANUFACTURER_MARKER, "Xen"};
++
++struct sys_enclosure_serial_struct {
++    char marker[65];
++    char value[65];
++} sys_enclosure_serial = {SYS_ENCLOSURE_SERIAL_MARKER, ""};
++
++const char *oem_strings_array[1] = {
++    NULL
++};
++
++#endif /* __HVMLOADER_MARKERS_H__ */
+diff -Nur a/tools/firmware/hvmloader/smbios.c b/tools/firmware/hvmloader/smbios.c
+--- a/tools/firmware/hvmloader/smbios.c        2009-04-01 14:06:28.000000000 -0400
++++ b/tools/firmware/hvmloader/smbios.c        2009-04-01 15:34:18.000000000 -0400
+@@ -27,6 +27,7 @@
+ #include "util.h"
+ #include "hypercall.h"
+ #include "e820.h"
++#include "markers.h"
+ static int
+ write_smbios_tables(void *start,
+@@ -54,6 +55,8 @@
+ smbios_type_4_init(void *start, unsigned int cpu_number,
+                    char *cpu_manufacturer);
+ static void *
++smbios_type_11_init(void *start);
++static void *
+ smbios_type_16_init(void *start, uint32_t memory_size_mb, int nr_mem_devs);
+ static void *
+ smbios_type_17_init(void *start, uint32_t memory_size_mb, int instance);
+@@ -112,6 +115,7 @@
+     do_struct(smbios_type_3_init(p));
+     for ( cpu_num = 1; cpu_num <= vcpus; cpu_num++ )
+         do_struct(smbios_type_4_init(p, cpu_num, cpu_manufacturer));
++    do_struct(smbios_type_11_init(p));
+     /* Each 'memory device' covers up to 16GB of address space. */
+     nr_mem_devs = (memsize + 0x3fff) >> 14;
+@@ -127,6 +131,8 @@
+     }
+     do_struct(smbios_type_32_init(p));
++    /* NOTE: future enhancement - vendor specific structures (range 128 - 256) would be 
++       processed and added here */
+     do_struct(smbios_type_127_init(p));
+ #undef do_struct
+@@ -280,9 +286,33 @@
+ smbios_type_0_init(void *start, const char *xen_version,
+                    uint32_t xen_major_version, uint32_t xen_minor_version)
+ {
+-    struct smbios_type_0 *p = (struct smbios_type_0 *)start;
+     static const char *smbios_release_date = __SMBIOS_DATE__;
++    struct smbios_type_0 *p = (struct smbios_type_0 *)start;
++    struct hvm_sminfo_table *pa_sm;
++    struct hvm_smtable_header *header;
++
++    /* if passed a struct, use it */
++    pa_sm = get_hvm_sminfo_table();
++    while (pa_sm != NULL) {
++        header = get_sminfo_by_type(pa_sm, 0);
++        if (header == NULL)
++            break;
++        if (header->sm_length < sizeof(struct smbios_type_0))
++            break;
++        memcpy(start, ((uint8_t*)header + sizeof(struct hvm_smtable_header)), header->sm_length);
++
++        /* fix up some bits */
++        p->header.handle = 0;
++        p->starting_address_segment = 0xe800;
++        p->rom_size = 0;
++        p->characteristics[0] = 0x80; /* PCI is supported */
++        p->characteristics[2] = 0x08; /* EDD is supported */
++        p->characteristics_extension_bytes[1] = 0x04; /* Enable Targeted Content Distribution. */
++        return (start + header->sm_length);
++    }
++
++    /* fall back to building our own */
+     memset(p, 0, sizeof(*p));
+     p->header.type = 0;
+@@ -295,6 +325,7 @@
+     p->release_date_str = 3;
+     p->rom_size = 0;
++    memset(p->characteristics, 0, 8);
+     /* BIOS Characteristics. */
+     p->characteristics[0] = 0x80; /* PCI is supported */
+     p->characteristics[2] = 0x08; /* EDD is supported */
+@@ -308,10 +339,16 @@
+     p->embedded_controller_minor = 0xff;
+     start += sizeof(struct smbios_type_0);
+-    strcpy((char *)start, "Xen");
+-    start += strlen("Xen") + 1;
+-    strcpy((char *)start, xen_version);
+-    start += strlen(xen_version) + 1;
++    strcpy((char *)start, bios_vendor.value);
++    start += strlen(bios_vendor.value) + 1;
++    
++    if ( strlen(bios_version.value) == 0 ) {
++        strncpy(bios_version.value, xen_version, sizeof(bios_version.value));
++    }
++    
++    strcpy((char *)start, bios_version.value);
++    start += strlen(bios_version.value) + 1;
++
+     strcpy((char *)start, smbios_release_date);
+     start += strlen(smbios_release_date) + 1;
+@@ -326,7 +363,27 @@
+ {
+     char uuid_str[37];
+     struct smbios_type_1 *p = (struct smbios_type_1 *)start;
++    int next = 5;
++    struct hvm_sminfo_table *pa_sm;
++    struct hvm_smtable_header *header;
++
++    /* if passed a struct, use it */
++    pa_sm = get_hvm_sminfo_table();
++    while (pa_sm != NULL) {
++        header = get_sminfo_by_type(pa_sm, 1);
++        if (header == NULL)
++            break;
++        if (header->sm_length < sizeof(struct smbios_type_1))
++            break;
++        memcpy(start, ((uint8_t*)header + sizeof(struct hvm_smtable_header)), header->sm_length);
++
++        /* fix up some bits */
++        p->header.handle = 0x100;
++
++        return (start + header->sm_length);
++    }
++    /* fall back to building our own */
+     memset(p, 0, sizeof(*p));
+     p->header.type = 1;
+@@ -341,20 +398,46 @@
+     memcpy(p->uuid, uuid, 16);
+     p->wake_up_type = 0x06; /* power switch */
+-    p->sku_str = 0;
+-    p->family_str = 0;
+     start += sizeof(struct smbios_type_1);
++
++    strcpy((char *)start, sys_manufacturer.value);
++    start += strlen(sys_manufacturer.value) + 1;
++    strcpy((char *)start, sys_product_name.value);
++    start += strlen(sys_product_name.value) + 1;
++
++    if ( strlen(sys_product_version.value) == 0 ) {
++        strncpy(sys_product_version.value, xen_version, sizeof(sys_product_version.value));
++    }
++    
++    strcpy((char *)start, sys_product_version.value);
++    start += strlen(sys_product_version.value) + 1;
++
++    if ( strlen(sys_product_serial.value) == 0 ) {
++        uuid_to_string(uuid_str, uuid); 
++        strncpy(sys_product_serial.value, uuid_str, sizeof(sys_product_serial.value));
++    }
+     
+-    strcpy((char *)start, "Xen");
+-    start += strlen("Xen") + 1;
+-    strcpy((char *)start, "HVM domU");
+-    start += strlen("HVM domU") + 1;
+-    strcpy((char *)start, xen_version);
+-    start += strlen(xen_version) + 1;
+-    uuid_to_string(uuid_str, uuid); 
+-    strcpy((char *)start, uuid_str);
+-    start += strlen(uuid_str) + 1;
++    strcpy((char *)start, sys_product_serial.value);
++    start += strlen(sys_product_serial.value) + 1;
++
++    /* no internal defaults for these if the value is not set */
++    if ( strlen(sys_product_sku.value) != 0 ) {
++        strcpy((char *)start, sys_product_sku.value);
++        start += strlen(sys_product_sku.value) + 1;
++        p->sku_str = next++;
++    }
++    else
++        p->sku_str = 0;
++
++    if ( strlen(sys_product_family.value) != 0 ) {
++        strcpy((char *)start, sys_product_family.value);
++        start += strlen(sys_product_family.value) + 1;
++        p->family_str = next++;
++    }
++    else
++        p->family_str = 0;
++
+     *((uint8_t *)start) = 0;
+     
+     return start+1; 
+@@ -365,7 +448,26 @@
+ smbios_type_3_init(void *start)
+ {
+     struct smbios_type_3 *p = (struct smbios_type_3 *)start;
+-    
++    struct hvm_sminfo_table *pa_sm;
++    struct hvm_smtable_header *header;
++
++    /* if passed a struct, use it */
++    pa_sm = get_hvm_sminfo_table();
++    while (pa_sm != NULL) {
++        header = get_sminfo_by_type(pa_sm, 3);
++        if (header == NULL)
++            break;
++        if (header->sm_length < sizeof(struct smbios_type_3))
++            break;
++        memcpy(start, ((uint8_t*)header + sizeof(struct hvm_smtable_header)), header->sm_length);
++
++        /* fix up some bits */
++        p->header.handle = 0x300;
++
++        return (start + header->sm_length);
++    }
++
++    /* fall back to building our own */
+     memset(p, 0, sizeof(*p));
+     p->header.type = 3;
+@@ -384,8 +486,18 @@
+     start += sizeof(struct smbios_type_3);
+     
+-    strcpy((char *)start, "Xen");
+-    start += strlen("Xen") + 1;
++    strcpy((char *)start, sys_enclosure_manufacturer.value);
++    start += strlen(sys_enclosure_manufacturer.value) + 1;
++
++    /* no internal defaults for this if the value is not set */
++    if ( strlen(sys_enclosure_serial.value) != 0 ) {
++        strcpy((char *)start, sys_enclosure_serial.value);
++        start += strlen(sys_enclosure_serial.value) + 1;
++        p->serial_number_str = 2;
++    }
++    else
++        p->serial_number_str = 0;
++
+     *((uint8_t *)start) = 0;
+     return start+1;
+ }
+@@ -440,6 +552,52 @@
+     return start+1;
+ }
++/* Type 11 -- OEM Strings */
++static void *
++smbios_type_11_init(void *start) 
++{
++    struct smbios_type_11 *p = (struct smbios_type_11 *)start;
++    int i = 0;
++    struct hvm_sminfo_table *pa_sm;
++    struct hvm_smtable_header *header;
++
++    /* if passed a struct, use it */
++    pa_sm = get_hvm_sminfo_table();
++    while (pa_sm != NULL) {
++        header = get_sminfo_by_type(pa_sm, 11);
++        if (header == NULL)
++            break;
++        if (header->sm_length < sizeof(struct smbios_type_11))
++            break;
++        memcpy(start, ((uint8_t*)header + sizeof(struct hvm_smtable_header)), header->sm_length);
++
++        /* fix up some bits */
++        p->header.handle = 0xB00;
++
++        return (start + header->sm_length);
++    }
++
++    /* fall back to building our own */
++    
++    if ( oem_strings_array[0] == NULL )
++        return start; /* no OEM strings to add */
++
++    p->header.type = 11;
++    p->header.length = sizeof(struct smbios_type_11);
++    p->header.handle = 0xB00;
++    start += sizeof(struct smbios_type_11);
++
++    while ( oem_strings_array[i] != NULL ) {
++        strcpy((char *)start, oem_strings_array[i]);
++        start += strlen(oem_strings_array[i]) + 1;
++        i++;
++    }
++      p->count = i;
++    *((uint8_t *)start) = 0;
++
++    return start+1;
++}
++
+ /* Type 16 -- Physical Memory Array */
+ static void *
+ smbios_type_16_init(void *start, uint32_t memsize, int nr_mem_devs)
+diff -Nur a/tools/firmware/hvmloader/smbios_types.h b/tools/firmware/hvmloader/smbios_types.h
+--- a/tools/firmware/hvmloader/smbios_types.h  2009-04-01 14:06:28.000000000 -0400
++++ b/tools/firmware/hvmloader/smbios_types.h  2009-04-01 15:28:52.000000000 -0400
+@@ -115,6 +115,12 @@
+       uint8_t upgrade;
+ } __attribute__ ((packed));
++/* SMBIOS type 11 - OEM Strings */
++struct smbios_type_11 {
++      struct smbios_structure_header header;
++      uint8_t count;
++} __attribute__ ((packed));
++
+ /* SMBIOS type 16 - Physical Memory Array
+  *   Associated with one type 17 (Memory Device).
+  */
+diff -Nur a/tools/firmware/hvmloader/util.c b/tools/firmware/hvmloader/util.c
+--- a/tools/firmware/hvmloader/util.c  2009-04-01 14:06:28.000000000 -0400
++++ b/tools/firmware/hvmloader/util.c  2009-04-01 14:50:01.000000000 -0400
+@@ -542,32 +542,32 @@
+         asm volatile ( "ud2" );
+ }
+-static void validate_hvm_info(struct hvm_info_table *t)
++static int validate_hvm_info_table(uint8_t *table, uint32_t table_length, const char *table_sig, const char *sig, uint32_t sig_length)
+ {
+-    uint8_t *ptr = (uint8_t *)t;
+     uint8_t sum = 0;
+     int i;
+-    if ( strncmp(t->signature, "HVM INFO", 8) )
+-    {
+-        printf("Bad hvm info signature\n");
+-        BUG();
++    if (table_length == 0) {
++        printf("Empty HVM info table: %.*s\n", sig_length, sig);
+     }
+-    if ( t->length < sizeof(struct hvm_info_table) )
++    /* NOTE removed BUG() checking during xc merge because not all xc tables
++       are present - do a BUG() in get_hvm_info_table() only */
++
++    /* strncmp(t->signature, signature, sig_length) */
++    for ( i = 0; i < sig_length; i++ )
+     {
+-        printf("Bad hvm info length\n");
+-        BUG();
++        if ( table_sig[i] != sig[i] )
++        {
++            printf("Bad HVM info signature for: %.*s\n", sig_length, sig);
++            return 0;
++        }
+     }
+-    for ( i = 0; i < t->length; i++ )
+-        sum += ptr[i];
++    for ( i = 0; i < table_length; i++ )
++        sum += table[i];
+-    if ( sum != 0 )
+-    {
+-        printf("Bad hvm info checksum\n");
+-        BUG();
+-    }
++    return (sum == 0);
+ }
+ struct hvm_info_table *get_hvm_info_table(void)
+@@ -580,7 +580,11 @@
+     t = (struct hvm_info_table *)HVM_INFO_PADDR;
+-    validate_hvm_info(t);
++    if ( !validate_hvm_info_table((uint8_t*)t, t->length, t->signature, "HVM INFO", 8) )
++    {
++        printf("Bad HVM info table\n");
++        BUG();
++    }
+     table = t;
+@@ -650,6 +654,52 @@
+     return ((hpet_id >> 16) == 0x8086);
+ }
++struct hvm_sminfo_table *get_hvm_sminfo_table(void)
++{
++    static struct hvm_sminfo_table *table = NULL;
++    static int validated = 0;
++    struct hvm_sminfo_table *t;
++
++    if ( validated )
++        return table;
++
++    t = (struct hvm_sminfo_table *)HVM_SMINFO_PADDR;
++
++    if ( (t->total_length == 0) && (t->sm_count == 0) ) {
++        printf("Empty HVM SMBIOS info table\n");
++        validated = 1;
++        return table;
++    }
++
++    if ( validate_hvm_info_table((uint8_t*)t, t->total_length + sizeof(struct hvm_sminfo_table), t->signature, "SM INFO", 7) )
++        table = t;
++    else
++        printf("Bad or missing HVM SMBIOS info table\n");
++    validated = 1;
++
++    return table;
++}
++
++struct hvm_smtable_header * get_sminfo_by_type(struct hvm_sminfo_table *pa_sm, uint8_t type)
++{
++    struct hvm_smtable_header *header = 
++        (struct hvm_smtable_header*)((uint8_t*)pa_sm + sizeof(struct hvm_sminfo_table));
++    uint32_t count;
++    uint8_t *ptr;
++
++    for (count = 0; count < pa_sm->sm_count; count++) {
++        if (header->sm_length == 0) {
++            printf("Invalid SMINFO tables passed to HVM loader.");
++            return NULL;
++        }
++        ptr = ((uint8_t*)header + sizeof(struct hvm_smtable_header));
++        if (ptr[0] == type)
++            return header;
++        header = (struct hvm_smtable_header*)(ptr + header->sm_length);
++    }
++    return NULL;
++}
++
+ /*
+  * Local variables:
+  * mode: C
+diff -Nur a/tools/firmware/hvmloader/util.h b/tools/firmware/hvmloader/util.h
+--- a/tools/firmware/hvmloader/util.h  2009-04-01 14:06:28.000000000 -0400
++++ b/tools/firmware/hvmloader/util.h  2009-04-01 14:50:19.000000000 -0400
+@@ -111,6 +111,10 @@
+ struct hvm_info_table *get_hvm_info_table(void);
+ #define hvm_info (get_hvm_info_table())
++/* HVM-build SMBIOS/ACPI info extensions */
++struct hvm_sminfo_table *get_hvm_sminfo_table(void);
++struct hvm_smtable_header * get_sminfo_by_type(struct hvm_sminfo_table *pa_sm, uint8_t type);
++
+ /* String and memory functions */
+ int strcmp(const char *cs, const char *ct);
+ int strncmp(const char *s1, const char *s2, uint32_t n);
+diff -Nur a/xen/include/public/hvm/hvm_info_table.h b/xen/include/public/hvm/hvm_info_table.h
+--- a/xen/include/public/hvm/hvm_info_table.h  2009-04-01 14:06:32.000000000 -0400
++++ b/xen/include/public/hvm/hvm_info_table.h  2009-04-01 14:24:54.000000000 -0400
+@@ -28,6 +28,12 @@
+ #define HVM_INFO_PFN         0x09F
+ #define HVM_INFO_OFFSET      0x800
+ #define HVM_INFO_PADDR       ((HVM_INFO_PFN << 12) + HVM_INFO_OFFSET)
++#define HVM_INFO_MAX         0x400
++#define HVM_SMINFO_OFFSET    0x0
++#define HVM_SMINFO_PADDR     ((HVM_INFO_PFN << 12) + HVM_SMINFO_OFFSET)
++#define HVM_SMINFO_MAX       0x800
++
++#define HVM_SMINFO_EXTENSIONS 1
+ struct hvm_info_table {
+     char        signature[8]; /* "HVM INFO" */
+@@ -66,4 +72,15 @@
+     uint32_t    high_mem_pgend;
+ };
++struct hvm_sminfo_table {
++    char        signature[7]; /* "SM INFO" */
++    uint8_t     checksum;
++    uint32_t    total_length; /* beginning after this stucture */
++    uint32_t    sm_count;
++};
++
++struct hvm_smtable_header {
++    uint32_t    sm_length; /* beginning after this stucture, includes fixed table, string list, and terminator */
++};
++
+ #endif /* __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__ */
diff --git a/xen-3.4/status b/xen-3.4/status
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/xen-3.4/thermal-management b/xen-3.4/thermal-management
new file mode 100644 (file)
index 0000000..519e235
--- /dev/null
@@ -0,0 +1,296 @@
+diff -Nur a/tools/firmware/hvmloader/acpi/ssdt_pm.asl b/tools/firmware/hvmloader/acpi/ssdt_pm.asl
+--- a/tools/firmware/hvmloader/acpi/ssdt_pm.asl        2009-04-01 17:16:42.000000000 -0400
++++ b/tools/firmware/hvmloader/acpi/ssdt_pm.asl        2009-04-01 17:18:03.000000000 -0400
+@@ -95,6 +95,14 @@
+             P88,  8
+         }
++        /*OperationRegion for thermal zone */
++        OperationRegion (PRT4, SystemIO, 0x90, 0x04)
++        Field (PRT4, WordAcc, NoLock, Preserve)
++        {
++            P90,  16,
++            P92,  16
++        }
++
+         /* OperationRegion for Power Button */
+         OperationRegion (PBOP, SystemIO, 0x200, 0x01)
+         Field (PBOP, ByteAcc, NoLock, WriteAsZeros)
+@@ -529,6 +537,24 @@
+         }
+     }
++    Scope (\_TZ)
++    {
++        ThermalZone (THM)
++        {
++            Method (_CRT, 0, NotSerialized)
++            {
++                Store(\_SB.P92, Local0)
++                Return (Local0)
++            }
++
++            Method (_TMP, 0, NotSerialized)
++            {
++                Store(\_SB.P90, Local0)
++                Return (Local0)
++            }
++        }
++    }
++
+     /*  Wire GPE events to notify power state
+      *  changes like ac power to battery use etc.
+      */
+diff -Nur a/tools/xenpmd/xenpmd.c b/tools/xenpmd/xenpmd.c
+--- a/tools/xenpmd/xenpmd.c    2009-04-01 17:16:42.000000000 -0400
++++ b/tools/xenpmd/xenpmd.c    2009-04-01 17:22:49.000000000 -0400
+@@ -93,13 +93,17 @@
+ extern void acpi_events_cleanup(void);
+ #ifdef RUN_IN_SIMULATE_MODE
+-    #define BATTERY_DIR_PATH "/tmp/battery"
+-    #define BATTERY_INFO_FILE_PATH "/tmp/battery/%s/info" 
+-    #define BATTERY_STATE_FILE_PATH "/tmp/battery/%s/state"
++    #define BATTERY_DIR_PATH            "/tmp/battery"
++    #define BATTERY_INFO_FILE_PATH      "/tmp/battery/%s/info" 
++    #define BATTERY_STATE_FILE_PATH     "/tmp/battery/%s/state"
++    #define THERMAL_TRIP_POINTS_FILE    "/tmp/thermal_zone/%s/trip_points"
++    #define THERMAL_TEMPERATURE_FILE    "/tmp/thermal_zone/%s/temperature"
+ #else
+-    #define BATTERY_DIR_PATH "/proc/acpi/battery"
+-    #define BATTERY_INFO_FILE_PATH "/proc/acpi/battery/%s/info"
+-    #define BATTERY_STATE_FILE_PATH "/proc/acpi/battery/%s/state"
++    #define BATTERY_DIR_PATH            "/proc/acpi/battery"
++    #define BATTERY_INFO_FILE_PATH      "/proc/acpi/battery/%s/info"
++    #define BATTERY_STATE_FILE_PATH     "/proc/acpi/battery/%s/state"
++    #define THERMAL_TRIP_POINTS_FILE    "/proc/acpi/thermal_zone/%s/trip_points"
++    #define THERMAL_TEMPERATURE_FILE    "/proc/acpi/thermal_zone/%s/temperature"
+ #endif
+ FILE *get_next_battery_file(DIR *battery_dir, 
+@@ -448,44 +452,188 @@
+     xs_write(xs, XBT_NULL, "/pm/bst", val, 35);
+ }
+-int wait_for_and_update_battery_status_request(void)
++void update_battery_status(void)
+ {
+     DIR *dir;
+-    int ret = 0;
+-    unsigned int count;
+     struct battery_status status;
+-    while ( true )
+-    {
+-        /* KN:@TODO - It is rather inefficient to not cache the file handle.
+-         *  Switch to caching file handle. 
+-         */
+-        dir = opendir(BATTERY_DIR_PATH);
+-        if ( !dir )
+-            return 0;
++    /* KN:@TODO - It is rather inefficient to not cache the file handle.
++     *  Switch to caching file handle. 
++     */
++    dir = opendir(BATTERY_DIR_PATH);
++    if ( !dir )
++        return;
+-        while ( get_next_battery_info_or_status(dir, BST, (void *)&status) ) 
+-        {
++    while ( get_next_battery_info_or_status(dir, BST, (void *)&status) ) 
++    {
+ #ifdef RUN_STANDALONE
+-            print_battery_status(&status);
++        print_battery_status(&status);
+ #endif
+-            if ( status.present == YES ) 
+-            {
+-                write_battery_status_to_xenstore(&status);
+-                ret = 1;
+-                /* rethink this; though I have never seen, there might be
+-                 * systems out there with more than one battery device 
+-                 * present
+-                 */
+-                break;
+-            }
++        if ( status.present == YES ) 
++        {
++            write_battery_status_to_xenstore(&status);
++            /* rethink this; though I have never seen, there might be
++             * systems out there with more than one battery device 
++             * present
++             */
++            break;
+         }
+-        closedir(dir);
+-        xs_watch(xs, "/pm/events", "refreshbatterystatus");
+-        xs_read_watch(xs, &count); 
+     }
+-    return ret;
++    closedir(dir);
++    return;
++}
++
++int open_thermal_files(char *subdir, FILE **trip_points_file, FILE **temp_file)
++{
++    char trip_points_file_name[64];
++    char temperature_file_name[64];
++
++    snprintf(trip_points_file_name, 64, THERMAL_TRIP_POINTS_FILE, subdir);
++    snprintf(temperature_file_name, 64, THERMAL_TEMPERATURE_FILE, subdir);
++
++    *trip_points_file = fopen(trip_points_file_name, "r");
++    *temp_file = fopen(temperature_file_name, "r");
++
++    if ( *trip_points_file == NULL || *temp_file == NULL )
++    {
++        if ( *trip_points_file )
++        {
++            fclose(*trip_points_file);
++            *trip_points_file = NULL;
++        }
++
++        if ( *temp_file )
++        {
++            fclose(*temp_file);
++            *temp_file = NULL;
++        }
++        return 0;
++    }
++     
++    return 1;
++}
++
++/* Note:  Below is the simplest approach based on studying the 
++ * different thermal zones exposed by the OEMs at this point.
++ * In specific Dell E6*00, Lenovo T400, HP 6930p was taken into
++ * consideration before arriving at which thermal zone to expose
++ * to the guest.  But, if we choose to expand our thermal zone
++ * implementation to be closer to the underlying firmware, we
++ * should revisit the below.
++ */
++void get_thermal_files(FILE **trip_points_file, FILE **temp_file)
++{
++    if ( open_thermal_files("/THM", trip_points_file, temp_file) )
++        return;
++
++    if ( open_thermal_files("/CPUZ", trip_points_file, temp_file) )
++        return;
++
++    if ( open_thermal_files("/THM1", trip_points_file, temp_file) )
++        return;
++
++    open_thermal_files("/THM0", trip_points_file, temp_file);
++}
++
++/* @TODO: KN: There is similar code in one other place.
++ * consolidate it to one place.
++ */
++int get_attribute_value(char *line_info, char *attribute_name)
++{
++    char attrib_name[64];
++    char attrib_value[64];
++    char *delimiter;
++    unsigned long length;
++
++    length = strlen(line_info);
++    delimiter = (char *) strchr( line_info, ':');
++    if ( (!delimiter) || (delimiter == line_info) ||
++         (delimiter == line_info + length) )
++        return 0;
++
++    strncpy(attrib_name, line_info, delimiter-line_info);
++    if ( !strstr(attrib_name, attribute_name) )
++        return 0;
++
++    while ( *(delimiter+1) == ' ' )
++    {
++        delimiter++;
++        if ( delimiter+1 == line_info + length)
++            return 0;
++    }
++
++    strncpy(attrib_value, delimiter+1,
++            (unsigned long)line_info + length -(unsigned long)delimiter);
++    return strtoull(attrib_value, NULL, 10);
++}
++
++int get_thermalzone_value(FILE *file, char *attribute_name)
++{
++    char line_info[256];
++    int attribute_value;
++
++    memset(line_info, 0, 256);
++    while ( fgets(line_info, 1024, file) != NULL )
++    {
++        attribute_value = get_attribute_value(line_info, attribute_name);
++        if ( attribute_value > 0 )
++            return attribute_value;
++        memset(line_info, 0, 256);
++    }
++
++    return 0;
++}
++
++void update_thermal_info(void)
++{
++    char buffer[32];
++    int current_temp, critical_trip_point;
++    FILE *trip_points_file = NULL, *temp_file = NULL;
++
++    get_thermal_files(&trip_points_file, &temp_file);
++    if ( trip_points_file == NULL || temp_file == NULL )
++        return; 
++
++    current_temp = get_thermalzone_value(temp_file, "temperature");
++    critical_trip_point = get_thermalzone_value(trip_points_file, "critical");
++
++    fclose(trip_points_file);
++    fclose(temp_file);
++
++    if ( current_temp <= 0 || critical_trip_point <= 0 )
++        return;
++
++    snprintf(buffer, 32, "%d", current_temp);
++    xs_write(xs, XBT_NULL, "/pm/current_temperature", buffer, strlen(buffer));
++
++    snprintf(buffer, 32, "%d", critical_trip_point);
++    xs_write(xs, XBT_NULL, "/pm/critical_temperature", buffer, strlen(buffer));    
++}
++
++void wait_for_and_update_power_mgmt_info(void)
++{
++    char **buffer;
++    unsigned int count;
++
++    update_battery_status();
++    update_thermal_info();
++
++    xs_watch(xs, "/pm/events", "refreshbatterystatus");
++    xs_watch(xs, "/pm/events", "refreshthermalinfo");
++
++    while ( true )
++    {
++        buffer = xs_read_watch(xs, &count);
++        if ( buffer == NULL )
++            continue;
++        if (!strcmp(buffer[XS_WATCH_TOKEN], "refreshbatterystatus")) {
++            update_battery_status(); 
++        } else if (!strcmp(buffer[XS_WATCH_TOKEN], "refreshthermalinfo")) {
++            update_thermal_info();
++        }
++        free(buffer);
++    }
+ }
+ #ifndef RUN_STANDALONE
+@@ -539,7 +687,7 @@
+         return 0;
+     }
+-    wait_for_and_update_battery_status_request();
++    wait_for_and_update_power_mgmt_info();
+     acpi_events_cleanup();
+     xs_daemon_close(xs);
+     return 0;