From b3947fc0263f2301d29d26742539751ba2cc1b28 Mon Sep 17 00:00:00 2001 From: Pete Batard Date: Mon, 17 Nov 2014 23:41:46 +0000 Subject: [PATCH] [grub] add Grub 2.0 support * Also moves secondary Grub boot record as a resource * Also fix a typo in README.txt and update signtool path * Closes #340 --- README.txt | 2 +- _sign.cmd | 2 +- res/grub/grldr.mbr | Bin 0 -> 9216 bytes res/grub/readme.txt | 10 + res/grub2/boot.img | Bin 0 -> 512 bytes res/grub2/core.img | Bin 0 -> 31724 bytes res/grub2/readme.txt | 16 + src/format.c | 43 ++- src/iso.c | 8 + src/ms-sys/br.c | 4 +- src/ms-sys/inc/file.h | 2 +- src/ms-sys/inc/mbr_grub.h | 734 +------------------------------------ src/ms-sys/inc/mbr_grub2.h | 9 +- src/resource.h | 2 + src/rufus.c | 9 +- src/rufus.h | 2 + src/rufus.rc | 20 +- 17 files changed, 105 insertions(+), 758 deletions(-) create mode 100644 res/grub/grldr.mbr create mode 100644 res/grub/readme.txt create mode 100644 res/grub2/boot.img create mode 100644 res/grub2/core.img create mode 100644 res/grub2/readme.txt diff --git a/README.txt b/README.txt index c6f05414..61b27270 100644 --- a/README.txt +++ b/README.txt @@ -15,7 +15,7 @@ Compilation: Use either Visual Studio 2013, WDK 7.1 (Windows Driver Kit) or MinGW and then invoke the .sln, wdk_build.cmd or configure/make respectively. - Note that, since Rufus is a OSI compliant Open Source project, you are entitled to + Note that, since Rufus is an OSI compliant Open Source project, you are entitled to download and use the *freely available* Visual Studio 2013 Community Edition to build, run or develop for Rufus. As per the Visual Studio Community Edition license this applies regardless of whether you are an individual or a corporate user. diff --git a/_sign.cmd b/_sign.cmd index b876207d..dbde3c04 100644 --- a/_sign.cmd +++ b/_sign.cmd @@ -1,6 +1,6 @@ :retry @set /p password=Please enter PFX password: -@"C:\Program Files (x86)\Windows Kits\8.0\bin\x64\signtool" sign /v /f D:\Secured\akeo\akeo.p12 /p %password% /tr http://timestamp.comodoca.com/rfc3161 %1 %2 %3 %4 +@"C:\Program Files (x86)\Windows Kits\8.1\bin\x64\signtool" sign /v /f D:\Secured\akeo\akeo.p12 /p %password% /tr http://timestamp.comodoca.com/rfc3161 %1 %2 %3 %4 @if ERRORLEVEL 1 goto retry @set password= @exit diff --git a/res/grub/grldr.mbr b/res/grub/grldr.mbr new file mode 100644 index 0000000000000000000000000000000000000000..69c013abfee3f7d4d1ea8b68d85e409afc488d71 GIT binary patch literal 9216 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 RbmPt6ILZHMfI~Ff{1^B37?J=0 literal 0 HcmV?d00001 diff --git a/res/grub/readme.txt b/res/grub/readme.txt new file mode 100644 index 00000000..74038ad9 --- /dev/null +++ b/res/grub/readme.txt @@ -0,0 +1,10 @@ +grldr.mbr was compiled on Linux Debian 7.7.0 x64, using gcc-multilib 4.7.2, +from https://github.com/chenall/grub4dos/commit/8549aae. + +Note that, for convenience reasons, the first 512 bytes from this grldr.mbr are +*not* the ones that Rufus processes when writing the actual MBR (first 512 bytes). +Instead, the byte array from src/ms-sys/inc/mbr_grub.h (whose content is identical) +is what Rufus uses. If you have modified this file, and the MBR section is +altered, be mindful that you also need to update the array in mbr_grub.h. + +For details, see src/format.c. diff --git a/res/grub2/boot.img b/res/grub2/boot.img new file mode 100644 index 0000000000000000000000000000000000000000..f266642287063fa6c391b81e3204d0e91e42cbd3 GIT binary patch literal 512 zcmaEzJb{5mpn(x;@c&;ECVV^8P{R7{P(caPriNFQH4F@f2l{UGUD(5*@Owc@jm`fO zrjA2F`x%(Sgz-Ag4|99#=hHz z-}W;!^d0;2d8vHjf3>KZeQmX`nfFbtePP0|Z&vLKJ%+Oqum8CRg*quPxToglGI%5w zr6{;$7H2aAr6#5@D7Y3C6gQ(ait=}&&d$9Z*Q&PfwRJH wT|6x(OZoTRs(o?k|LZw!Ir#+zl?({SZDrWT0CeD$ZH!y}Uw;1wGAVQw0GeF0cmMzZ literal 0 HcmV?d00001 diff --git a/res/grub2/core.img b/res/grub2/core.img new file mode 100644 index 0000000000000000000000000000000000000000..63098ba6c928d99d7e99eca912c549a97dd6e9b6 GIT binary patch literal 31724 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 0x200)) { + uprintf(using_msg, "Grub4DOS"); + // -0x200 to remove the MBR part + r = (write_data(&fake_fd, 512, &buf[0x200], (uint64_t)(size - 0x200)) != 0); + } + } else if ((dt == DT_GRUB2) || ((dt == DT_ISO) && (iso_report.has_grub2))) { + buf = GetResource(hMainInstance, MAKEINTRESOURCEA(IDR_GR_GRUB2_CORE_IMG), _RT_RCDATA, "core.img", &size, FALSE); + if (buf != NULL) { + uprintf(using_msg, "Grub 2.0"); + // TODO: test what happens for 4096 bytes sectors + r = (write_data(&fake_fd, 512, buf, (uint64_t)size) != 0); + } + } else { + // No need to write secondary block + r = TRUE; + } + return r; +} + /* * Process the Partition Boot Record */ @@ -1505,7 +1540,7 @@ DWORD WINAPI FormatThread(void* param) // Thanks to Microsoft, we must fix the MBR AFTER the drive has been formatted if (pt == PARTITION_STYLE_MBR) { PrintStatus(0, TRUE, MSG_228); // "Writing master boot record..." - if (!WriteMBR(hPhysicalDrive)) { + if ((!WriteMBR(hPhysicalDrive)) || (!WriteSBR(hPhysicalDrive))) { if (!IS_ERROR(FormatStatus)) FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_WRITE_FAULT; goto out; @@ -1540,8 +1575,8 @@ DWORD WINAPI FormatThread(void* param) FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_INSTALL_FAILURE; goto out; } - } else if ((((dt == DT_WINME) || (dt == DT_FREEDOS) || (dt == DT_GRUB4DOS) || (dt == DT_REACTOS)) && - (!use_large_fat32)) || ((dt == DT_ISO) && ((fs == FS_NTFS)||(iso_report.has_kolibrios||iso_report.has_grub4dos)))) { + } else if ((((dt == DT_WINME) || (dt == DT_FREEDOS) || (dt == DT_GRUB4DOS) || (dt == DT_GRUB2) || (dt == DT_REACTOS)) && + (!use_large_fat32)) || ((dt == DT_ISO) && ((fs == FS_NTFS)||(iso_report.has_kolibrios||IS_GRUB(iso_report))))) { // We still have a lock, which we need to modify the volume boot record // => no need to reacquire the lock... hLogicalVolume = GetLogicalHandle(DriveIndex, TRUE, FALSE); diff --git a/src/iso.c b/src/iso.c index d35d2ee6..54cded8b 100644 --- a/src/iso.c +++ b/src/iso.c @@ -62,6 +62,7 @@ static const char* grldr_name = "grldr"; static const char* ldlinux_name = "ldlinux.sys"; static const char* ldlinux_c32 = "ldlinux.c32"; static const char* efi_dirname = "/efi/boot"; +static const char* grub_dirname = "/boot/grub"; // NB: We don't support nonstandard config dir such as AROS' "/boot/pc/grub/" static const char* syslinux_cfg[] = { "isolinux.cfg", "syslinux.cfg", "extlinux.conf"}; static const char dot_isolinux_bin[] = ".\\isolinux.bin"; static const char* isolinux_bin = &dot_isolinux_bin[2]; @@ -166,6 +167,13 @@ static BOOL check_iso_props(const char* psz_dirname, BOOL* is_syslinux_cfg, BOOL if (safe_stricmp(psz_dirname, efi_dirname) == 0) iso_report.has_efi = TRUE; + // Check for the Grub boot directory + // TODO: If there is a need to point to a different config file, as we do with Syslinux, + // see http://www.gnu.org/software/grub/manual/grub.html#Embedded-configuration + // However, this allegedly requires normal.mod (105 KB!) to be in core.img... + if (safe_stricmp(psz_dirname, grub_dirname) == 0) + iso_report.has_grub2 = TRUE; + // Check for PE (XP) specific files in "/i386" or "/minint" for (i=0; i /* Max valid value of uiLen for contains_data */ -#define MAX_DATA_LEN 16384 +#define MAX_DATA_LEN 32768 /* Checks if a file contains a data pattern of length Len at position Position. The file pointer will change when calling this function! */ diff --git a/src/ms-sys/inc/mbr_grub.h b/src/ms-sys/inc/mbr_grub.h index e9298d59..d5d9f131 100644 --- a/src/ms-sys/inc/mbr_grub.h +++ b/src/ms-sys/inc/mbr_grub.h @@ -1,4 +1,6 @@ -/* First 432 bytes of MBR from Grub4DOS */ +/* + * First 432 bytes of MBR from Grub4DOS (Converted from res/grub4dos/grldr.mbr) + */ unsigned char mbr_grub_0x0[] = { 0xEB, 0x5E, 0x80, 0x00, 0x20, 0x39, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -37,733 +39,3 @@ unsigned char mbr_grub_0x0[] = { 0x6E, 0x67, 0x20, 0x4D, 0x42, 0x52, 0x2D, 0x68, 0x65, 0x6C, 0x70, 0x65, 0x72, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - -/* Remaining 8704 bytes from the higher GRUB MBR data */ -unsigned char mbr_grub_0x200[] = { - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0xB2, 0x7F, - 0xE9, 0x91, 0xFD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEB, 0x58, 0x90, 0x47, - 0x52, 0x4C, 0x44, 0x52, 0x20, 0x20, 0x20, 0x00, 0x02, 0x01, 0x01, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x12, 0x00, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x29, 0x63, 0xAF, 0xC4, 0x0A, 0x4E, 0x4F, 0x20, 0x4E, 0x41, - 0x4D, 0x45, 0x20, 0x20, 0x20, 0x20, 0x46, 0x41, 0x54, 0x33, 0x32, 0x20, - 0x20, 0x20, 0xFA, 0xFC, 0xB6, 0xFF, 0x80, 0xFE, 0xFF, 0x75, 0x02, 0xB2, - 0x00, 0x31, 0xC0, 0xBD, 0x00, 0x7C, 0x8E, 0xD0, 0x8D, 0x66, 0xE0, 0xFB, - 0x89, 0x56, 0x40, 0x16, 0xB4, 0x41, 0xBB, 0xAA, 0x55, 0xCD, 0x13, 0x1F, - 0x72, 0x10, 0x81, 0xFB, 0x55, 0xAA, 0x75, 0x0A, 0xF6, 0xC1, 0x01, 0x74, - 0x05, 0xC6, 0x06, 0x90, 0x7D, 0x42, 0x16, 0x07, 0x66, 0x31, 0xC0, 0x66, - 0x89, 0x46, 0x44, 0x8B, 0x46, 0x0E, 0x66, 0x03, 0x46, 0x1C, 0x66, 0x89, - 0x46, 0x48, 0x66, 0x89, 0x46, 0x4C, 0x66, 0x8B, 0x46, 0x10, 0x66, 0xF7, - 0x66, 0x24, 0x66, 0x01, 0x46, 0x4C, 0x66, 0x8B, 0x46, 0x2C, 0x66, 0x50, - 0xE8, 0x8B, 0x00, 0xBE, 0xBD, 0x7D, 0x0F, 0x82, 0x2F, 0x01, 0xC4, 0x9E, - 0xE8, 0x01, 0xE8, 0x99, 0x00, 0x31, 0xFF, 0xB9, 0x0B, 0x00, 0xBE, 0xC0, - 0x7D, 0xF3, 0xA6, 0x74, 0x15, 0x83, 0xC7, 0x20, 0x83, 0xE7, 0xE0, 0x3B, - 0x7E, 0x0B, 0x75, 0xEB, 0x4A, 0x75, 0xDF, 0x66, 0x58, 0xE8, 0x2A, 0x00, - 0xEB, 0xCC, 0x26, 0xFF, 0x75, 0x09, 0x26, 0xFF, 0x75, 0x0F, 0x66, 0x58, - 0x31, 0xDB, 0x66, 0x50, 0xE8, 0x4B, 0x00, 0x73, 0x08, 0x8B, 0x56, 0x40, - 0x52, 0xFF, 0xAE, 0xE8, 0x01, 0xE8, 0x5A, 0x00, 0x4A, 0x75, 0xFA, 0x66, - 0x58, 0xE8, 0x02, 0x00, 0xEB, 0xE4, 0x06, 0x53, 0x66, 0xC1, 0xE0, 0x02, - 0x66, 0x0F, 0xB7, 0x5E, 0x0B, 0x66, 0xF7, 0xF3, 0x66, 0x03, 0x46, 0x48, - 0xBB, 0x60, 0x00, 0x8E, 0xC3, 0x31, 0xDB, 0x66, 0x3B, 0x46, 0x44, 0x74, - 0x07, 0x66, 0x89, 0x46, 0x44, 0xE8, 0x2A, 0x00, 0x26, 0x67, 0x80, 0x62, - 0x03, 0x0F, 0x26, 0x67, 0x66, 0x8B, 0x02, 0x5B, 0x07, 0xC3, 0x66, 0x3D, - 0xF8, 0xFF, 0xFF, 0x0F, 0xF5, 0x72, 0x12, 0x66, 0x48, 0x66, 0x48, 0x66, - 0x0F, 0xB6, 0x56, 0x0D, 0x52, 0x66, 0xF7, 0xE2, 0x5A, 0x66, 0x03, 0x46, - 0x4C, 0xC3, 0x66, 0x60, 0x66, 0x31, 0xD2, 0x66, 0x52, 0x66, 0x50, 0x06, - 0x53, 0x6A, 0x01, 0x6A, 0x10, 0x66, 0x31, 0xC9, 0x66, 0xFF, 0x76, 0x18, - 0x59, 0x66, 0xF7, 0xF1, 0x42, 0x59, 0x52, 0x31, 0xD2, 0x66, 0xF7, 0xF1, - 0x86, 0xD6, 0x59, 0x86, 0xC5, 0xC0, 0xE4, 0x06, 0x08, 0xE1, 0xB8, 0x01, - 0x02, 0x89, 0xE6, 0x8A, 0x56, 0x40, 0x06, 0x1E, 0xCD, 0x13, 0x1F, 0x07, - 0x61, 0x66, 0x61, 0x72, 0x4D, 0x66, 0x40, 0x03, 0x5E, 0x0B, 0x73, 0x09, - 0x52, 0x8C, 0xC2, 0x80, 0xC6, 0x10, 0x8E, 0xC2, 0x5A, 0xC3, 0x64, 0x69, - 0x73, 0x6B, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x00, 0x4E, 0x6F, 0x20, - 0x47, 0x52, 0x4C, 0x44, 0x52, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xC0, 0x59, 0xBE, 0xB2, - 0x7D, 0xAC, 0xB4, 0x0E, 0xCD, 0x10, 0x3C, 0x00, 0x75, 0xF7, 0xEB, 0xFE, - 0x00, 0x00, 0x55, 0xAA, 0xEB, 0x3C, 0x90, 0x47, 0x52, 0x4C, 0x44, 0x52, - 0x20, 0x20, 0x20, 0x00, 0x02, 0x01, 0x01, 0x00, 0x02, 0xE0, 0x00, 0x40, - 0x0B, 0xF0, 0x09, 0x00, 0x12, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x63, 0xAF, 0xC4, 0x0A, 0x4E, - 0x4F, 0x20, 0x4E, 0x41, 0x4D, 0x45, 0x20, 0x20, 0x20, 0x20, 0x46, 0x41, - 0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0xFA, 0xFC, 0xB6, 0xFF, 0x80, 0xFE, - 0xFF, 0x75, 0x02, 0xB2, 0x00, 0x31, 0xC0, 0xBD, 0x00, 0x7C, 0x8E, 0xD0, - 0x8D, 0x66, 0xE0, 0xFB, 0x89, 0x56, 0x24, 0x60, 0xB4, 0x41, 0xBB, 0xAA, - 0x55, 0x52, 0xCD, 0x13, 0x5A, 0x16, 0x1F, 0x72, 0x14, 0x81, 0xFB, 0x55, - 0xAA, 0x75, 0x0E, 0xF6, 0xC1, 0x01, 0x74, 0x09, 0x84, 0xD2, 0x79, 0x05, - 0xC6, 0x06, 0x98, 0x7D, 0x42, 0x61, 0x8E, 0xC0, 0x8B, 0x76, 0x1C, 0x8B, - 0x7E, 0x1E, 0x03, 0x76, 0x0E, 0x11, 0xC7, 0x89, 0x76, 0x28, 0x89, 0x7E, - 0x2A, 0x8A, 0x46, 0x10, 0xF7, 0x66, 0x16, 0x01, 0xC6, 0x11, 0xD7, 0x89, - 0x76, 0x2C, 0x89, 0x7E, 0x2E, 0x8B, 0x5E, 0x0B, 0xB1, 0x05, 0xD3, 0xEB, - 0x8B, 0x46, 0x11, 0x01, 0xD8, 0x48, 0xF7, 0xF3, 0x99, 0x89, 0x46, 0x26, - 0x01, 0xC6, 0x11, 0xD7, 0x89, 0x76, 0x30, 0x89, 0x7E, 0x32, 0xC7, 0x46, - 0x36, 0xFF, 0xFF, 0x8B, 0x46, 0x16, 0xF7, 0x66, 0x0B, 0x72, 0x03, 0x89, - 0x46, 0x36, 0x8B, 0x46, 0x2C, 0x8B, 0x56, 0x2E, 0x8B, 0x4E, 0x26, 0xC4, - 0x9E, 0xE8, 0x01, 0xE8, 0x8D, 0x00, 0xC4, 0xBE, 0xE8, 0x01, 0xBE, 0xC3, - 0x7D, 0xB1, 0x0B, 0x57, 0xF3, 0xA6, 0x5F, 0x74, 0x10, 0x83, 0xC7, 0x20, - 0x74, 0x05, 0x26, 0x38, 0x2D, 0x75, 0xEB, 0xBE, 0xC0, 0x7D, 0xE9, 0xF8, - 0x00, 0x26, 0xFF, 0x75, 0x1A, 0x8B, 0x4E, 0x16, 0x8B, 0x46, 0x28, 0x8B, - 0x56, 0x2A, 0x06, 0xE8, 0x5D, 0x00, 0x1F, 0x58, 0x1E, 0x16, 0x07, 0xBF, - 0x00, 0x20, 0xAB, 0x89, 0xC6, 0x5A, 0x52, 0x01, 0xF6, 0x73, 0x03, 0x80, - 0xC6, 0x10, 0x81, 0x7E, 0x36, 0x01, 0x18, 0x73, 0x13, 0x01, 0xC6, 0xD1, - 0xEE, 0xAD, 0x73, 0x04, 0xB1, 0x04, 0xD3, 0xE8, 0x80, 0xE4, 0x0F, 0x3D, - 0xF7, 0x0F, 0xEB, 0x06, 0x8E, 0xDA, 0xAD, 0x83, 0xF8, 0xF7, 0x76, 0xD2, - 0x31, 0xC0, 0xAB, 0x07, 0x16, 0x1F, 0xBE, 0x00, 0x20, 0xAD, 0x83, 0xE8, - 0x02, 0x72, 0x10, 0x8A, 0x4E, 0x0D, 0xF7, 0xE1, 0x03, 0x46, 0x30, 0x13, - 0x56, 0x32, 0xE8, 0x0A, 0x00, 0xEB, 0xEA, 0x8B, 0x56, 0x24, 0x52, 0xFF, - 0xAE, 0xE8, 0x01, 0x9C, 0x60, 0x31, 0xC9, 0x51, 0x51, 0x52, 0x50, 0x06, - 0x53, 0x41, 0x51, 0xB1, 0x10, 0x51, 0x91, 0x53, 0x52, 0x8B, 0x46, 0x18, - 0x89, 0xC3, 0xF7, 0x66, 0x1A, 0x91, 0x5A, 0xF7, 0xF1, 0x92, 0xF6, 0xF3, - 0x86, 0xC4, 0x40, 0x92, 0x91, 0x86, 0xCD, 0xD0, 0xC9, 0xD0, 0xC9, 0x08, - 0xD1, 0x5B, 0xB8, 0x01, 0x02, 0x89, 0xE6, 0x8A, 0x56, 0x24, 0x06, 0x1E, - 0xCD, 0x13, 0x1F, 0x72, 0x49, 0x5B, 0x8D, 0x5F, 0x20, 0x8E, 0xC3, 0x61, - 0x61, 0x9D, 0x40, 0x75, 0x01, 0x42, 0xE2, 0xB3, 0xC3, 0x64, 0x69, 0x73, - 0x6B, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x00, 0x4E, 0x6F, 0x20, 0x47, - 0x52, 0x4C, 0x44, 0x52, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x20, 0xC3, 0x59, 0xBE, 0xB5, 0x7D, 0xAC, 0xB4, 0x0E, - 0xCD, 0x10, 0x3C, 0x00, 0x75, 0xF7, 0xEB, 0xFE, 0x00, 0x00, 0x55, 0xAA, - 0xEB, 0x2E, 0x02, 0x49, 0x2F, 0x4F, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, - 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x12, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0B, 0x00, 0x00, - 0x00, 0xFF, 0x80, 0x00, 0x00, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0xFC, 0x31, 0xC0, 0x90, 0x8E, 0xD0, 0xBC, 0x00, 0x7C, 0x89, 0xE5, 0x50, - 0xBB, 0x00, 0x10, 0x53, 0x50, 0x88, 0x56, 0x24, 0x16, 0xB4, 0x41, 0xBB, - 0xAA, 0x55, 0xCD, 0x13, 0x1F, 0x72, 0x09, 0xD0, 0xD9, 0x73, 0x05, 0xC6, - 0x06, 0xC5, 0x7D, 0x42, 0x66, 0x31, 0xC0, 0xB0, 0x02, 0x57, 0x16, 0x9C, - 0x66, 0x48, 0x66, 0x99, 0x66, 0xF7, 0x76, 0x28, 0x66, 0x52, 0x66, 0x99, - 0x66, 0xC1, 0xE0, 0x05, 0x66, 0xF7, 0x76, 0x0E, 0x52, 0x66, 0x03, 0x46, - 0x2C, 0xE8, 0x0B, 0x01, 0x5E, 0x66, 0x58, 0x8B, 0x56, 0x26, 0x66, 0xF7, - 0xE2, 0x66, 0xF7, 0x76, 0x0E, 0x52, 0x66, 0x03, 0x40, 0x08, 0xE8, 0xF6, - 0x00, 0x5E, 0x01, 0xDE, 0x16, 0x07, 0x8D, 0x7F, 0xA8, 0xB1, 0x2C, 0xF3, - 0xA5, 0x66, 0x89, 0x4D, 0xB4, 0x66, 0x8B, 0x45, 0xAC, 0x66, 0x48, 0x66, - 0xF7, 0x76, 0x0E, 0x66, 0x40, 0x66, 0x89, 0x45, 0xB0, 0x66, 0xAD, 0x66, - 0x85, 0xC0, 0x74, 0x1B, 0xB7, 0x80, 0xE8, 0xC7, 0x00, 0x66, 0xAD, 0x66, - 0x85, 0xC0, 0x74, 0x0F, 0xB7, 0xC0, 0xE8, 0xBB, 0x00, 0x66, 0xAD, 0x66, - 0x85, 0xC0, 0x74, 0x03, 0xE8, 0xB4, 0x00, 0x66, 0x8B, 0x5D, 0xB4, 0x66, - 0x83, 0xEB, 0x0C, 0x72, 0x4F, 0x53, 0x66, 0x2B, 0x5E, 0x14, 0x58, 0x73, - 0x05, 0x80, 0xC4, 0x1C, 0xEB, 0x41, 0x66, 0x53, 0x66, 0x2B, 0x5E, 0x10, - 0x72, 0x1C, 0x66, 0x58, 0x66, 0x93, 0x66, 0xF7, 0x76, 0x10, 0x66, 0x52, - 0x66, 0x85, 0xD2, 0x75, 0x0D, 0xC1, 0xE0, 0x02, 0x93, 0x66, 0x8B, 0x01, - 0xBB, 0x00, 0xC0, 0xE8, 0x76, 0x00, 0x66, 0x58, 0x66, 0x99, 0x66, 0xF7, - 0x76, 0x14, 0x52, 0x85, 0xD2, 0x75, 0x0F, 0xC1, 0xE0, 0x02, 0x93, 0x66, - 0x8B, 0x81, 0x00, 0xB0, 0xBB, 0x00, 0x80, 0xE8, 0x5A, 0x00, 0x58, 0x93, - 0xC1, 0xE3, 0x02, 0x66, 0x8B, 0x01, 0x9D, 0x5B, 0x07, 0x9C, 0xE8, 0x4E, - 0x00, 0x9D, 0x06, 0x53, 0x9C, 0x72, 0x2D, 0x31, 0xF6, 0x16, 0x07, 0x1E, - 0x8E, 0xDF, 0xBF, 0xE3, 0x7D, 0x56, 0x66, 0xAD, 0x66, 0x50, 0xAD, 0x92, - 0xAD, 0xFE, 0xCC, 0x91, 0xF3, 0xA6, 0x75, 0x02, 0x91, 0xAE, 0x66, 0x58, - 0x5E, 0x8C, 0xDF, 0x1F, 0xF9, 0x0F, 0x84, 0xF8, 0xFE, 0x01, 0xD6, 0x3B, - 0x76, 0x0E, 0x72, 0xD7, 0x66, 0xFF, 0x45, 0xB4, 0x66, 0xFF, 0x4D, 0xB0, - 0x0F, 0x85, 0x5B, 0xFF, 0xBE, 0xE0, 0x7D, 0x73, 0x76, 0x8B, 0x56, 0x24, - 0x52, 0x57, 0x16, 0xCB, 0x16, 0x07, 0xF9, 0x72, 0x08, 0xC4, 0x5E, 0xFC, - 0x75, 0x03, 0xC4, 0x5E, 0xFA, 0x66, 0x0F, 0xB6, 0x4E, 0x0D, 0x66, 0xF7, - 0xE1, 0x66, 0x03, 0x46, 0x1C, 0x66, 0x60, 0x66, 0x52, 0x66, 0x50, 0x06, - 0x53, 0x6A, 0x01, 0x6A, 0x10, 0x66, 0xFF, 0x76, 0x18, 0x59, 0x66, 0xF7, - 0xF1, 0x42, 0x59, 0x52, 0x31, 0xD2, 0x66, 0xF7, 0xF1, 0x86, 0xD6, 0x59, - 0x86, 0xC5, 0xC0, 0xE4, 0x06, 0x08, 0xE1, 0x40, 0xB4, 0x02, 0x89, 0xE6, - 0x8A, 0x56, 0x24, 0x06, 0x1E, 0xCD, 0x13, 0x1F, 0x5B, 0x72, 0x1D, 0x8D, - 0x5F, 0x20, 0x8E, 0xC3, 0x61, 0x66, 0x61, 0x66, 0x40, 0xE2, 0xBE, 0xC3, - 0x4E, 0x6F, 0x20, 0x67, 0x72, 0x6C, 0x64, 0x72, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xE3, 0x51, 0xBE, 0x03, 0x7C, 0xAC, 0xB4, 0x0E, 0xCD, 0x10, - 0x3C, 0x00, 0x75, 0xF7, 0xEB, 0xFE, 0x55, 0xAA, 0xEB, 0x52, 0x90, 0x4E, - 0x54, 0x46, 0x53, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xFF, 0x00, 0x3F, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFC, 0xB6, 0xFF, - 0x31, 0xC0, 0xBD, 0x00, 0x7C, 0x8E, 0xD0, 0x8D, 0x66, 0xE0, 0xFB, 0x89, - 0x56, 0xFE, 0x50, 0xB4, 0x41, 0xBB, 0xAA, 0x55, 0xCD, 0x13, 0x1F, 0x72, - 0x10, 0x81, 0xFB, 0x55, 0xAA, 0x75, 0x0A, 0xF6, 0xC1, 0x01, 0x74, 0x05, - 0xC6, 0x86, 0xAA, 0x01, 0x42, 0x16, 0x07, 0x66, 0x81, 0xBE, 0xFC, 0x07, - 0x47, 0x52, 0x55, 0x42, 0x74, 0x13, 0xBB, 0x00, 0x7E, 0x66, 0x8B, 0x86, - 0x1C, 0x00, 0x66, 0x40, 0xE8, 0xE1, 0x00, 0xE8, 0xDE, 0x00, 0xE8, 0xDB, - 0x00, 0x66, 0x31, 0xC0, 0x8B, 0x46, 0x0B, 0x89, 0x46, 0xFC, 0xE8, 0x8C, - 0x00, 0x88, 0xCB, 0x8A, 0x46, 0x0D, 0xE8, 0x84, 0x00, 0x88, 0xCD, 0x00, - 0xDD, 0x80, 0xED, 0x09, 0x88, 0x6E, 0xFB, 0x8A, 0x46, 0x44, 0xE8, 0x65, - 0x00, 0x80, 0xF9, 0x03, 0x76, 0x05, 0xB0, 0x01, 0xE9, 0xFB, 0x00, 0x88, - 0x4E, 0xF9, 0x8A, 0x46, 0x40, 0xE8, 0x52, 0x00, 0x80, 0xF9, 0x01, 0x75, - 0xED, 0x88, 0x4E, 0xFA, 0x66, 0x8B, 0x46, 0x30, 0x88, 0xE9, 0x66, 0xD3, - 0xE0, 0x66, 0x03, 0x86, 0x1C, 0x00, 0x66, 0x89, 0x46, 0xF4, 0xBA, 0x01, - 0x00, 0x8A, 0x4E, 0xFA, 0xD3, 0xE2, 0x89, 0xD1, 0xBB, 0x00, 0x20, 0x53, - 0xE8, 0x79, 0x00, 0xE2, 0xFB, 0x5B, 0x81, 0x3F, 0x46, 0x49, 0x75, 0x6C, - 0x89, 0xD1, 0xE8, 0x34, 0x00, 0x89, 0xDF, 0xB0, 0x80, 0xE8, 0x40, 0x02, - 0x72, 0x5E, 0xBB, 0x00, 0x38, 0x66, 0x31, 0xC0, 0xB0, 0x05, 0xE8, 0x8A, - 0x03, 0x89, 0xDF, 0xE9, 0xD6, 0x00, 0x08, 0xC0, 0x78, 0x04, 0x88, 0xE9, - 0xEB, 0x09, 0xF6, 0xD8, 0x2C, 0x09, 0x88, 0xC1, 0xC3, 0x30, 0xC9, 0xFE, - 0xC1, 0x66, 0xD1, 0xE8, 0x73, 0xF9, 0xFE, 0xC9, 0xC3, 0x53, 0x57, 0x89, - 0xDF, 0x8B, 0x47, 0x06, 0x48, 0x89, 0xC3, 0xF7, 0x66, 0xFC, 0xC1, 0xE1, - 0x09, 0x39, 0xC1, 0x75, 0x1F, 0x89, 0xD9, 0x89, 0xFB, 0x03, 0x5F, 0x04, - 0x8B, 0x07, 0x83, 0xEF, 0x02, 0x03, 0x7E, 0xFC, 0x83, 0xC3, 0x02, 0x3B, - 0x05, 0x75, 0x09, 0x8B, 0x17, 0x89, 0x15, 0xE2, 0xF0, 0x5F, 0x5B, 0xC3, - 0xB0, 0x02, 0xEB, 0x4E, 0x66, 0x60, 0x66, 0x31, 0xD2, 0x66, 0x52, 0x66, - 0x50, 0x06, 0x53, 0x6A, 0x01, 0x6A, 0x10, 0x66, 0x31, 0xC9, 0x66, 0xFF, - 0x76, 0x18, 0x59, 0x66, 0xF7, 0xF1, 0x42, 0x59, 0x52, 0x31, 0xD2, 0x66, - 0xF7, 0xF1, 0x86, 0xD6, 0x59, 0x86, 0xC5, 0xC0, 0xE4, 0x06, 0x08, 0xE1, - 0xB8, 0x01, 0x02, 0x89, 0xE6, 0x8A, 0x56, 0xFE, 0xCD, 0x13, 0x61, 0x66, - 0x61, 0x72, 0x37, 0x66, 0x40, 0x03, 0x5E, 0x0B, 0x73, 0x09, 0x52, 0x8C, - 0xC2, 0x80, 0xC6, 0x10, 0x8E, 0xC2, 0x5A, 0xC3, 0x30, 0x00, 0x00, 0x86, - 0xC8, 0x01, 0xEB, 0x1E, 0x4E, 0x6F, 0x20, 0x67, 0x72, 0x6C, 0x64, 0x72, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xD3, 0xA1, 0xBE, 0xC8, - 0x7D, 0xAC, 0xB4, 0x0E, 0xCD, 0x10, 0x3C, 0x00, 0x75, 0xF7, 0xEB, 0xFE, - 0x00, 0x00, 0x55, 0xAA, 0xE8, 0x6F, 0x01, 0xB0, 0x90, 0xE8, 0x85, 0x01, - 0x0F, 0x82, 0xBE, 0x00, 0x66, 0x81, 0x7C, 0x08, 0x00, 0x04, 0x18, 0x00, - 0x75, 0xEF, 0x03, 0x74, 0x14, 0x80, 0x3C, 0x30, 0x75, 0xE7, 0x83, 0xC6, - 0x10, 0x03, 0x34, 0xE8, 0xF5, 0x00, 0x0F, 0x83, 0xA7, 0x00, 0xE8, 0x45, - 0x01, 0xB0, 0xB0, 0xE8, 0x5B, 0x01, 0x0F, 0x82, 0x94, 0x00, 0x8B, 0x5C, - 0x09, 0x80, 0xFB, 0x04, 0x75, 0xF1, 0x80, 0x7C, 0x08, 0x00, 0x75, 0x09, - 0xFF, 0x74, 0x10, 0x03, 0x74, 0x14, 0x56, 0xEB, 0x1B, 0xFF, 0x74, 0x30, - 0x66, 0x31, 0xD2, 0x66, 0x8B, 0x4C, 0x28, 0x81, 0xF9, 0x00, 0x10, 0x77, - 0x6D, 0x66, 0xC1, 0xE9, 0x09, 0xBB, 0x00, 0x60, 0x53, 0xE8, 0xB9, 0x02, - 0xB0, 0xA0, 0xE8, 0xEB, 0x00, 0x72, 0x5B, 0x66, 0x81, 0x7C, 0x08, 0x01, - 0x04, 0x40, 0x00, 0x75, 0xF1, 0x8A, 0x4E, 0xF9, 0x66, 0x31, 0xDB, 0xB3, - 0x01, 0x66, 0xD3, 0xE3, 0x66, 0x31, 0xD2, 0x5E, 0x59, 0x51, 0xAC, 0xB9, - 0x08, 0x00, 0x51, 0x50, 0xA8, 0x01, 0x74, 0x2A, 0x56, 0x66, 0x52, 0x66, - 0x53, 0x66, 0x89, 0xD9, 0xBB, 0x00, 0x50, 0xE8, 0x3A, 0x02, 0x72, 0x26, - 0x81, 0x3F, 0x49, 0x4E, 0x75, 0x20, 0xE8, 0x98, 0xFE, 0x89, 0xDE, 0x83, - 0xC6, 0x18, 0x03, 0x34, 0xE8, 0x64, 0x00, 0x73, 0x18, 0x66, 0x5B, 0x66, - 0x5A, 0x5E, 0x66, 0x01, 0xDA, 0x58, 0xD0, 0xE8, 0x59, 0xE2, 0xC7, 0x59, - 0xE2, 0xBF, 0x8D, 0xB6, 0xD0, 0x01, 0xE9, 0x20, 0xFF, 0x83, 0x7C, 0x04, - 0x00, 0x0F, 0x85, 0xF1, 0xFD, 0x66, 0x8B, 0x04, 0x89, 0xFB, 0xE8, 0xCE, - 0x01, 0xB0, 0x80, 0xE8, 0x72, 0x00, 0x72, 0x2E, 0x80, 0x7C, 0x08, 0x01, - 0x74, 0x0E, 0x8B, 0x4C, 0x10, 0xC4, 0xBE, 0xE8, 0x01, 0x03, 0x74, 0x14, - 0xF3, 0xA4, 0xEB, 0x12, 0x66, 0x31, 0xD2, 0x66, 0x8B, 0x4C, 0x28, 0x66, - 0xC1, 0xE9, 0x09, 0xC4, 0x9E, 0xE8, 0x01, 0xE8, 0x13, 0x02, 0x8B, 0x56, - 0xFE, 0x52, 0xFF, 0xAE, 0xE8, 0x01, 0xB0, 0x04, 0xE9, 0xAF, 0xFE, 0x89, - 0xF3, 0xF6, 0x47, 0x0C, 0x02, 0x74, 0x02, 0xF9, 0xC3, 0x30, 0xED, 0x56, - 0x8D, 0xB6, 0xD3, 0x01, 0x83, 0xC3, 0x52, 0x8A, 0x4F, 0xFE, 0xAC, 0x8A, - 0x27, 0x80, 0xFC, 0x41, 0x72, 0x08, 0x80, 0xFC, 0x5A, 0x77, 0x03, 0x80, - 0xC4, 0x20, 0x38, 0xE0, 0x75, 0x0C, 0x43, 0x43, 0xE2, 0xE8, 0x80, 0x3C, - 0x00, 0x75, 0x03, 0x5E, 0xF8, 0xC3, 0x5E, 0x03, 0x74, 0x08, 0xEB, 0xC3, - 0xE8, 0x17, 0x00, 0xE8, 0x2F, 0x00, 0x72, 0x11, 0xF6, 0x05, 0x04, 0x75, - 0x0B, 0xE8, 0x25, 0x00, 0x73, 0xF6, 0xE8, 0x05, 0x00, 0xE8, 0x1D, 0x00, - 0xF8, 0xC3, 0x50, 0x31, 0xC0, 0x89, 0x05, 0x89, 0x45, 0x06, 0x8B, 0x45, - 0x14, 0x01, 0xF8, 0x89, 0x45, 0x04, 0x58, 0x81, 0xFF, 0x00, 0x20, 0x75, - 0x03, 0x80, 0x0D, 0x02, 0xC3, 0x8B, 0x5D, 0x04, 0xF6, 0x05, 0x04, 0x75, - 0x66, 0x89, 0xDE, 0x80, 0x3C, 0xFF, 0x74, 0x16, 0x80, 0x3C, 0x20, 0x75, - 0x03, 0x89, 0x75, 0x06, 0x03, 0x5F, 0x04, 0x38, 0x04, 0x75, 0xEA, 0x89, - 0x5D, 0x04, 0x89, 0x75, 0x02, 0xC3, 0x83, 0x7D, 0x06, 0x01, 0x72, 0xF9, - 0x8B, 0x75, 0x06, 0x80, 0x7C, 0x08, 0x00, 0x75, 0x0A, 0x89, 0xF3, 0x03, - 0x5F, 0x14, 0x03, 0x74, 0x04, 0xEB, 0x22, 0x66, 0x8B, 0x4C, 0x28, 0x66, - 0xC1, 0xE9, 0x09, 0x83, 0xF9, 0x08, 0x0F, 0x87, 0x9E, 0xFD, 0x8D, 0x9D, - 0x00, 0x08, 0x50, 0x66, 0x31, 0xD2, 0xE8, 0x3C, 0x01, 0x58, 0x72, 0xC9, - 0x8B, 0x74, 0x30, 0x01, 0xDE, 0x89, 0x75, 0x06, 0x80, 0x0D, 0x04, 0xF6, - 0x05, 0x02, 0x74, 0x03, 0xE8, 0x5C, 0x00, 0x89, 0xDE, 0x3B, 0x5D, 0x06, - 0x72, 0x02, 0xF9, 0xC3, 0x03, 0x5F, 0x04, 0x38, 0x04, 0x75, 0xF0, 0x50, - 0x06, 0x1E, 0x07, 0x89, 0x75, 0x02, 0x89, 0x5D, 0x04, 0x66, 0x8B, 0x44, - 0x10, 0x8D, 0x9D, 0x00, 0x04, 0xF6, 0x05, 0x02, 0x75, 0x05, 0xE8, 0x8A, - 0x00, 0xEB, 0x1A, 0x53, 0xE8, 0x51, 0xFD, 0x66, 0x8B, 0x44, 0x14, 0xE8, - 0x4A, 0xFD, 0x5B, 0x81, 0x3F, 0x46, 0x49, 0x0F, 0x85, 0x3D, 0xFD, 0xB9, - 0x02, 0x00, 0xE8, 0x04, 0xFD, 0x07, 0x58, 0x03, 0x5F, 0x14, 0x80, 0x3F, - 0xFF, 0x74, 0xB7, 0x38, 0x07, 0x74, 0x05, 0x03, 0x5F, 0x04, 0xEB, 0xF2, - 0x89, 0xDE, 0xC3, 0x50, 0x80, 0x0D, 0x08, 0x3B, 0x5D, 0x06, 0x0F, 0x83, - 0x16, 0xFD, 0x38, 0x07, 0x74, 0x05, 0x03, 0x5F, 0x04, 0xEB, 0xF0, 0x89, - 0x5D, 0x02, 0x66, 0x8B, 0x46, 0xF4, 0x66, 0x89, 0x47, 0x10, 0x66, 0x40, - 0x66, 0x89, 0x47, 0x14, 0x03, 0x5F, 0x04, 0x3B, 0x5D, 0x06, 0x73, 0x23, - 0x80, 0x3F, 0x80, 0x75, 0x1E, 0x66, 0x8B, 0x57, 0x10, 0x8A, 0x4E, 0xFA, - 0x66, 0xD3, 0xE2, 0xE8, 0x46, 0x00, 0x66, 0x09, 0xC0, 0x0F, 0x84, 0xDB, - 0xFC, 0x66, 0x89, 0x47, 0x10, 0x66, 0x89, 0x57, 0x14, 0xEB, 0xD5, 0x8B, - 0x5D, 0x02, 0x80, 0x25, 0xF7, 0x58, 0xC3, 0x57, 0xBF, 0x00, 0x20, 0x8A, - 0x4E, 0xFA, 0x66, 0xD3, 0xE0, 0x66, 0x89, 0xC2, 0x66, 0xB8, 0x01, 0x00, - 0x00, 0x00, 0x66, 0xD3, 0xE0, 0x66, 0x89, 0xC1, 0xE8, 0x11, 0x00, 0x0F, - 0x82, 0xA9, 0xFC, 0x81, 0x3F, 0x46, 0x49, 0x0F, 0x85, 0xA1, 0xFC, 0xE8, - 0x6B, 0xFC, 0x5F, 0xC3, 0xFF, 0x75, 0x02, 0x66, 0x52, 0x66, 0x51, 0x53, - 0x8B, 0x75, 0x02, 0x8A, 0x04, 0xF6, 0x05, 0x04, 0x74, 0x1E, 0x89, 0xF3, - 0x8A, 0x4E, 0xFB, 0x66, 0xD3, 0xEA, 0x3B, 0x5D, 0x06, 0x73, 0x11, 0x38, - 0x07, 0x75, 0x0D, 0x66, 0x39, 0x57, 0x08, 0x77, 0x07, 0x89, 0xDE, 0x03, - 0x5F, 0x04, 0xEB, 0xEA, 0x89, 0x75, 0x04, 0xE8, 0x7B, 0xFE, 0x5B, 0x66, - 0x59, 0x66, 0x5A, 0x72, 0x04, 0xE8, 0x05, 0x00, 0xF8, 0x8F, 0x45, 0x02, - 0xC3, 0x51, 0x53, 0xF6, 0x44, 0x08, 0x01, 0x0F, 0x84, 0x4D, 0xFC, 0x8A, - 0x44, 0x0C, 0x24, 0x01, 0x08, 0x05, 0x66, 0x89, 0x4D, 0x1C, 0x8A, 0x4E, - 0xFB, 0x66, 0x89, 0xD0, 0x66, 0xD3, 0xE8, 0x66, 0x89, 0x45, 0x18, 0x66, - 0xD3, 0xE0, 0x66, 0x29, 0xC2, 0x66, 0x89, 0x55, 0x20, 0x31, 0xD2, 0x66, - 0x89, 0x55, 0x10, 0x66, 0x8B, 0x54, 0x10, 0x03, 0x74, 0x20, 0xE8, 0xC7, - 0x00, 0x66, 0x3B, 0x55, 0x18, 0x76, 0xF7, 0x8A, 0x4E, 0xFB, 0x66, 0x09, - 0xC0, 0x74, 0x47, 0x66, 0x8B, 0x45, 0x18, 0x66, 0x2B, 0x45, 0x08, 0x66, - 0x03, 0x45, 0x10, 0x66, 0xD3, 0xE0, 0x66, 0x03, 0x45, 0x20, 0xF6, 0x05, - 0x08, 0x74, 0x2A, 0x66, 0x50, 0x66, 0x40, 0x66, 0x2B, 0x55, 0x08, 0x66, - 0x03, 0x55, 0x10, 0x66, 0xD3, 0xE2, 0x66, 0x39, 0xC2, 0x75, 0x0C, 0x51, - 0xE8, 0x89, 0x00, 0x59, 0x66, 0x8B, 0x45, 0x10, 0x66, 0xD3, 0xE0, 0x66, - 0x89, 0xC2, 0x66, 0x58, 0x66, 0x03, 0x96, 0x1C, 0x00, 0x66, 0x03, 0x86, - 0x1C, 0x00, 0xF6, 0x05, 0x08, 0x75, 0x4A, 0x66, 0x53, 0x66, 0x89, 0xD3, - 0x66, 0x2B, 0x5D, 0x18, 0x66, 0xD3, 0xE3, 0x66, 0x89, 0xD9, 0x66, 0x5B, - 0x66, 0x2B, 0x4D, 0x20, 0x66, 0xC7, 0x45, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x66, 0x3B, 0x4D, 0x1C, 0x76, 0x04, 0x66, 0x8B, 0x4D, 0x1C, 0x66, 0x51, - 0x66, 0x09, 0xC0, 0x75, 0x05, 0xE8, 0xC7, 0x00, 0xEB, 0x05, 0xE8, 0x8F, - 0xFB, 0xE2, 0xFB, 0x66, 0x59, 0x66, 0x29, 0x4D, 0x1C, 0x76, 0x0A, 0x66, - 0x89, 0x55, 0x18, 0xE8, 0x26, 0x00, 0xE9, 0x62, 0xFF, 0x5B, 0x59, 0xC3, - 0x66, 0x31, 0xC0, 0x84, 0xC9, 0x74, 0x13, 0x51, 0xAC, 0x66, 0xC1, 0xC8, - 0x08, 0xFE, 0xC9, 0x75, 0xF7, 0x59, 0xF6, 0xD9, 0x80, 0xC1, 0x04, 0xC0, - 0xE1, 0x03, 0xC3, 0xB0, 0x03, 0xE9, 0xA6, 0xFB, 0xAC, 0x88, 0xC1, 0x88, - 0xCD, 0x80, 0xE1, 0x0F, 0x74, 0x1D, 0xC0, 0xED, 0x04, 0xE8, 0xD0, 0xFF, - 0x66, 0xD3, 0xE8, 0x66, 0x89, 0x55, 0x08, 0x66, 0x01, 0xC2, 0x88, 0xE9, - 0xE8, 0xC1, 0xFF, 0x66, 0xD3, 0xF8, 0x66, 0x01, 0x45, 0x10, 0xC3, 0xF6, - 0x05, 0x04, 0x74, 0xCF, 0x66, 0x52, 0x53, 0x8B, 0x75, 0x02, 0x8A, 0x04, - 0xE8, 0x32, 0xFD, 0x72, 0xC2, 0x80, 0x7C, 0x08, 0x00, 0x74, 0xBC, 0x66, - 0xC7, 0x45, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5B, 0x66, 0x5A, 0x03, 0x74, - 0x20, 0xEB, 0xB1, 0x55, 0x89, 0xE5, 0x66, 0x31, 0xC0, 0x87, 0x46, 0x06, - 0x66, 0xC1, 0xE0, 0x04, 0x66, 0x03, 0x46, 0x04, 0x5D, 0xC2, 0x04, 0x00, - 0x55, 0x89, 0xE5, 0x66, 0xC1, 0x66, 0x04, 0x0C, 0xC1, 0x6E, 0x04, 0x0C, - 0x5D, 0xC3, 0x1E, 0x56, 0xE8, 0xD8, 0xFF, 0x66, 0x50, 0xE8, 0xE8, 0xFF, - 0x5E, 0x1F, 0x06, 0x57, 0xE8, 0xCC, 0xFF, 0x66, 0x50, 0xE8, 0xDC, 0xFF, - 0x5F, 0x07, 0xC3, 0x57, 0x66, 0x52, 0x66, 0xC1, 0xE1, 0x09, 0xF6, 0x05, - 0x01, 0x74, 0x43, 0x66, 0x31, 0xD2, 0x8A, 0x55, 0x18, 0x80, 0xE2, 0x0F, - 0x74, 0x38, 0x89, 0xDF, 0x51, 0x8A, 0x4E, 0xFB, 0x80, 0xC1, 0x09, 0x66, - 0xD3, 0xE2, 0x06, 0x57, 0xE8, 0x9C, 0xFF, 0x66, 0x29, 0xD0, 0x66, 0xC7, - 0x46, 0xF0, 0x10, 0x00, 0x00, 0x00, 0x66, 0xD3, 0x66, 0xF0, 0x59, 0x66, - 0x01, 0xD1, 0x66, 0x2B, 0x4E, 0xF0, 0x66, 0x51, 0xE8, 0x39, 0x00, 0x66, - 0x59, 0x66, 0x03, 0x4E, 0xF0, 0x67, 0xE3, 0x2A, 0x89, 0xFB, 0x89, 0xDF, - 0x66, 0x89, 0xCA, 0x66, 0x31, 0xC0, 0x66, 0x89, 0xC1, 0xE8, 0x96, 0xFF, - 0xB9, 0x00, 0x80, 0x66, 0x39, 0xD1, 0x76, 0x02, 0x89, 0xD1, 0x51, 0xC1, - 0xE9, 0x02, 0x66, 0xF3, 0xAB, 0xE8, 0x82, 0xFF, 0x59, 0x66, 0x29, 0xCA, - 0x75, 0xE6, 0x89, 0xFB, 0x66, 0x5A, 0x5F, 0xC3, 0x1E, 0x56, 0xFC, 0x66, - 0x50, 0xE8, 0x54, 0xFF, 0x5E, 0x1F, 0x66, 0x8B, 0x56, 0xF0, 0x66, 0x01, - 0xD0, 0x66, 0x50, 0xE8, 0x46, 0xFF, 0x5F, 0x07, 0x06, 0x57, 0x1E, 0x56, - 0x66, 0x31, 0xC9, 0xB9, 0x00, 0x80, 0x66, 0x39, 0xD1, 0x76, 0x02, 0x89, - 0xD1, 0x51, 0xC1, 0xE9, 0x02, 0x66, 0xF3, 0xA5, 0xE8, 0x37, 0xFF, 0x59, - 0x66, 0x29, 0xCA, 0x75, 0xE6, 0x5F, 0x07, 0x5E, 0x1F, 0x66, 0x31, 0xD2, - 0xAD, 0xF6, 0xC4, 0x80, 0x75, 0x0A, 0xB9, 0x00, 0x08, 0xF3, 0xA5, 0xBA, - 0x00, 0x10, 0xEB, 0x5D, 0x89, 0xC1, 0x81, 0xE1, 0xFF, 0x0F, 0x41, 0x01, - 0xF1, 0x30, 0xFF, 0x81, 0xFA, 0x00, 0x10, 0x77, 0x5E, 0x08, 0xFF, 0x75, - 0x05, 0xAC, 0x88, 0xC3, 0xB7, 0x08, 0xF6, 0xC3, 0x01, 0x74, 0x34, 0x89, - 0xD0, 0x48, 0x51, 0x53, 0xB1, 0x0C, 0x83, 0xF8, 0x10, 0x72, 0x06, 0xD1, - 0xE8, 0xFE, 0xC9, 0xEB, 0xF5, 0xAD, 0x89, 0xC3, 0xD3, 0xEB, 0x52, 0xBA, - 0x01, 0x00, 0xD3, 0xE2, 0x4A, 0x21, 0xD0, 0x5A, 0x83, 0xC0, 0x03, 0x89, - 0xC1, 0xF7, 0xDB, 0x4B, 0x26, 0x8A, 0x01, 0xAA, 0x42, 0xE2, 0xF9, 0x5B, - 0x59, 0xEB, 0x02, 0xA4, 0x42, 0xD0, 0xEB, 0xFE, 0xCF, 0x39, 0xCE, 0x72, - 0xAE, 0xE8, 0xBA, 0xFE, 0x66, 0x29, 0x56, 0xF0, 0x74, 0x06, 0x81, 0xFA, - 0x00, 0x10, 0x74, 0x81, 0x5E, 0x1F, 0xC3, 0x16, 0x1F, 0xB0, 0x05, 0xE9, - 0xD8, 0xF9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x47, 0x52, 0x55, 0x42, 0xE8, 0x00, 0x00, 0x5B, 0x8C, 0xC8, 0xC1, 0xEB, - 0x04, 0x01, 0xC3, 0x53, 0x68, 0x10, 0x00, 0xCB, 0x66, 0x31, 0xC0, 0x89, - 0xD8, 0x66, 0xC1, 0xE0, 0x04, 0x66, 0x05, 0x60, 0x00, 0x00, 0x00, 0x2E, - 0x66, 0xA3, 0x62, 0x00, 0xBB, 0x00, 0x20, 0x8E, 0xC3, 0x8C, 0xDB, 0xFA, - 0x2E, 0x0F, 0x01, 0x16, 0x60, 0x00, 0x0F, 0x20, 0xC0, 0x0C, 0x01, 0x0F, - 0x22, 0xC0, 0xBE, 0x08, 0x00, 0x8E, 0xDE, 0x66, 0x31, 0xF6, 0x66, 0x31, - 0xFF, 0x66, 0xB9, 0x00, 0x24, 0x00, 0x00, 0xFC, 0x66, 0xF3, 0xA5, 0xBE, - 0x10, 0x00, 0x8E, 0xDE, 0x24, 0xFE, 0x0F, 0x22, 0xC0, 0x8E, 0xDB, 0xEA, - 0x4F, 0x01, 0x00, 0x20, 0x17, 0x00, 0x60, 0x12, 0x02, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0x00, 0x00, 0x20, 0x92, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, - 0x00, 0x92, 0x00, 0x00, 0xFB, 0x0E, 0x1F, 0x68, 0x00, 0x0D, 0x07, 0x1E, - 0x06, 0x66, 0x60, 0x9C, 0x2E, 0xF6, 0x06, 0x02, 0x00, 0x0C, 0x74, 0x19, - 0x06, 0x31, 0xC0, 0x8E, 0xC0, 0xBF, 0xFC, 0x05, 0x66, 0xB8, 0x44, 0x55, - 0x43, 0x45, 0x2E, 0xA0, 0x02, 0x00, 0x24, 0x0C, 0x0C, 0x40, 0x66, 0xAB, - 0x07, 0x2E, 0xF6, 0x06, 0x02, 0x00, 0x80, 0x75, 0x24, 0x2E, 0x80, 0x3E, - 0x03, 0x00, 0x00, 0x74, 0x12, 0xBE, 0xA9, 0x1D, 0xE8, 0xCF, 0xEE, 0xBE, - 0xE8, 0x1F, 0xE8, 0xC9, 0xEE, 0xBE, 0xB2, 0x1D, 0xE8, 0xC3, 0xEE, 0xE8, - 0xFB, 0x08, 0x72, 0x2D, 0xE8, 0x00, 0x08, 0xEB, 0x28, 0x2E, 0x80, 0x3E, - 0x03, 0x00, 0x00, 0x74, 0x12, 0xBE, 0xA9, 0x1D, 0xE8, 0xAB, 0xEE, 0xBE, - 0xE8, 0x1F, 0xE8, 0xA5, 0xEE, 0xBE, 0xE9, 0x1D, 0xE8, 0x9F, 0xEE, 0xE8, - 0xD7, 0x08, 0x73, 0x09, 0x2E, 0x80, 0x26, 0x02, 0x00, 0x7F, 0xE8, 0xD6, - 0x07, 0xC7, 0x06, 0xD1, 0x12, 0xEB, 0x32, 0x2E, 0x80, 0x0E, 0x02, 0x00, - 0x80, 0x9D, 0x66, 0x61, 0x07, 0x1F, 0x1E, 0x06, 0x66, 0x60, 0x9C, 0xC6, - 0x06, 0x00, 0x00, 0x02, 0xB4, 0x41, 0xBB, 0xAA, 0x55, 0xE8, 0x23, 0xEE, - 0x72, 0x10, 0x81, 0xFB, 0x55, 0xAA, 0x75, 0x0A, 0xF6, 0xC1, 0x01, 0x74, - 0x05, 0xC6, 0x06, 0x00, 0x00, 0x42, 0x9D, 0x66, 0x61, 0x07, 0x1F, 0x1E, - 0x06, 0x66, 0x60, 0x9C, 0x60, 0x81, 0xFE, 0xC2, 0x01, 0x75, 0x0C, 0xC7, - 0x06, 0xBC, 0x01, 0xFF, 0xFF, 0xC7, 0x06, 0xBA, 0x01, 0xFE, 0x01, 0x52, - 0x1E, 0x06, 0xE8, 0x1A, 0x0A, 0x07, 0x1F, 0x84, 0xD2, 0x79, 0x15, 0x81, - 0xFE, 0xF2, 0x01, 0x77, 0x0F, 0x66, 0x8B, 0x44, 0x04, 0x66, 0x89, 0x44, - 0x08, 0x66, 0x31, 0xC0, 0x66, 0x89, 0x44, 0x04, 0x60, 0x83, 0x3E, 0x08, - 0x00, 0xFF, 0x75, 0x1B, 0xC7, 0x06, 0x08, 0x00, 0x3F, 0xFE, 0xB4, 0x08, - 0x1E, 0x06, 0xCD, 0x13, 0x07, 0x1F, 0x72, 0x0B, 0x80, 0xE1, 0x3F, 0x74, - 0x06, 0x88, 0xF5, 0x89, 0x0E, 0x08, 0x00, 0x61, 0x66, 0x31, 0xDB, 0x84, - 0xD2, 0x79, 0x0E, 0x66, 0x8B, 0x5C, 0x04, 0x66, 0x03, 0x5C, 0x08, 0x66, - 0x85, 0xDB, 0xF9, 0x74, 0x5A, 0x80, 0x3E, 0x00, 0x00, 0x42, 0x74, 0x3C, - 0xBD, 0x00, 0x00, 0xA1, 0x08, 0x00, 0x89, 0xC2, 0xB6, 0x00, 0x89, 0x16, - 0x18, 0x00, 0x88, 0xE2, 0x42, 0x89, 0x16, 0x1A, 0x00, 0x58, 0x50, 0xA2, - 0x24, 0x00, 0xFF, 0x36, 0xA3, 0x07, 0xC7, 0x06, 0xA3, 0x07, 0xEB, 0x00, - 0x06, 0x66, 0x53, 0x66, 0x53, 0x31, 0xDB, 0xB9, 0x21, 0x00, 0x58, 0x5A, - 0xE8, 0x88, 0xF3, 0x66, 0x5B, 0x07, 0x8F, 0x06, 0xA3, 0x07, 0xEB, 0x17, - 0x58, 0x50, 0x31, 0xD2, 0x52, 0x52, 0x66, 0x53, 0x06, 0x52, 0x6A, 0x3F, - 0x6A, 0x10, 0x92, 0xB4, 0x42, 0x89, 0xE6, 0xE8, 0x41, 0xED, 0x61, 0x5A, - 0x61, 0x58, 0x66, 0x61, 0x07, 0x1F, 0x1E, 0x06, 0x66, 0x60, 0x9C, 0x56, - 0x9C, 0x06, 0x1E, 0x07, 0xFC, 0x31, 0xC0, 0x84, 0xD2, 0x79, 0x10, 0xFF, - 0x06, 0xBC, 0x01, 0xA1, 0xBC, 0x01, 0x3C, 0x04, 0x72, 0x05, 0xC6, 0x06, - 0x22, 0x01, 0xFC, 0x50, 0xBF, 0x37, 0x1F, 0x88, 0xD0, 0xC0, 0xE8, 0x07, - 0xD0, 0xE0, 0x05, 0x66, 0x64, 0xAB, 0x88, 0xD0, 0x24, 0x7F, 0xD4, 0x0A, - 0x84, 0xE4, 0x74, 0x06, 0x80, 0xC4, 0x30, 0x88, 0x25, 0x47, 0x04, 0x30, - 0xAA, 0x58, 0x84, 0xD2, 0x79, 0x13, 0xC6, 0x05, 0x2C, 0x47, 0xD4, 0x0A, - 0x84, 0xE4, 0x74, 0x06, 0x80, 0xC4, 0x30, 0x88, 0x25, 0x47, 0x04, 0x30, - 0xAA, 0x66, 0xC7, 0x05, 0x29, 0x3A, 0x20, 0x00, 0xBE, 0x30, 0x1F, 0xE8, - 0x1C, 0xED, 0x07, 0x9D, 0x0F, 0x82, 0x58, 0x04, 0x31, 0xF6, 0x06, 0x1F, - 0x81, 0x3E, 0x38, 0x04, 0x53, 0xEF, 0x0F, 0x85, 0x2C, 0x01, 0x66, 0x31, - 0xC0, 0x66, 0x39, 0x06, 0x00, 0x04, 0x0F, 0x84, 0x20, 0x01, 0x66, 0x39, - 0x06, 0x04, 0x04, 0x0F, 0x84, 0x17, 0x01, 0x66, 0x39, 0x06, 0x20, 0x04, - 0x0F, 0x84, 0x0E, 0x01, 0x66, 0x39, 0x06, 0x28, 0x04, 0x0F, 0x84, 0x05, - 0x01, 0x66, 0xA1, 0x14, 0x04, 0x89, 0xC3, 0x66, 0xD1, 0xE8, 0x0F, 0x85, - 0xF8, 0x00, 0x66, 0x8B, 0x0E, 0x18, 0x04, 0x66, 0x83, 0xF9, 0x04, 0x0F, - 0x87, 0xEB, 0x00, 0xF7, 0xD9, 0x11, 0xC3, 0x4B, 0x0F, 0x85, 0xE2, 0x00, - 0xB8, 0x80, 0x00, 0x2E, 0xA3, 0x26, 0x08, 0x66, 0x8B, 0x0E, 0x4C, 0x04, - 0x67, 0xE3, 0x29, 0xA1, 0x58, 0x04, 0x85, 0xC0, 0x0F, 0x84, 0xCA, 0x00, - 0x50, 0x52, 0x8A, 0x0E, 0x18, 0x04, 0x80, 0xC1, 0x0A, 0x31, 0xD2, 0x42, - 0xD3, 0xE2, 0x91, 0x92, 0x31, 0xD2, 0xF7, 0xF1, 0x85, 0xD2, 0x5A, 0x58, - 0x0F, 0x85, 0xAE, 0x00, 0x2E, 0xA3, 0x26, 0x08, 0xFC, 0xBE, 0x00, 0x08, - 0x31, 0xFF, 0xB9, 0x00, 0x02, 0x2E, 0xF3, 0xA5, 0x84, 0xD2, 0x79, 0x08, - 0xBF, 0x25, 0x00, 0x2E, 0xA1, 0xBC, 0x01, 0xAA, 0x5E, 0x56, 0x66, 0x31, - 0xC0, 0x84, 0xD2, 0x79, 0x0A, 0x2E, 0x66, 0x8B, 0x44, 0x04, 0x2E, 0x66, - 0x03, 0x44, 0x08, 0x26, 0x66, 0x89, 0x47, 0x1C, 0x2E, 0x8A, 0x07, 0x26, - 0x88, 0x47, 0x02, 0x26, 0x8A, 0x0E, 0x18, 0x04, 0x66, 0xB8, 0x02, 0x00, - 0x00, 0x00, 0xD3, 0xE0, 0x26, 0x88, 0x47, 0x0D, 0xC1, 0xE0, 0x09, 0x26, - 0x89, 0x47, 0x0E, 0xC1, 0xE8, 0x02, 0x26, 0x66, 0x89, 0x47, 0x14, 0x80, - 0xC1, 0x08, 0x66, 0xD3, 0xE0, 0x26, 0x66, 0x89, 0x47, 0x10, 0x2E, 0x8B, - 0x47, 0x08, 0x83, 0xF8, 0xFF, 0x74, 0x0C, 0x26, 0x88, 0x47, 0x18, 0xC1, - 0xE8, 0x08, 0x40, 0x26, 0x89, 0x47, 0x1A, 0x26, 0x66, 0xA1, 0x28, 0x04, - 0x26, 0x66, 0x89, 0x47, 0x28, 0x26, 0x66, 0xA1, 0x14, 0x04, 0x40, 0x26, - 0x66, 0x89, 0x47, 0x2C, 0xBE, 0xFC, 0x01, 0x89, 0xF7, 0xAD, 0x3D, 0xEB, - 0xFE, 0x75, 0x09, 0x48, 0xAA, 0xB8, 0x10, 0x84, 0xAB, 0x31, 0xC0, 0xAB, - 0xBE, 0x42, 0x1F, 0xE8, 0xE0, 0xEB, 0xF8, 0xE9, 0x25, 0x03, 0x84, 0xD2, - 0x78, 0x4D, 0x2E, 0xC6, 0x06, 0xBC, 0x01, 0xFF, 0x66, 0xA1, 0x1C, 0x40, - 0x66, 0x83, 0xF8, 0x20, 0x75, 0x3D, 0x31, 0xDB, 0xBF, 0xC6, 0x01, 0xB9, - 0x04, 0x00, 0xFC, 0x66, 0xAF, 0x75, 0x06, 0x46, 0x2E, 0x88, 0x1E, 0xBC, - 0x01, 0x83, 0xC7, 0x0C, 0x43, 0xE2, 0xEF, 0x4E, 0x75, 0x21, 0xB0, 0x00, - 0xBF, 0x0B, 0x00, 0xB9, 0x4F, 0x00, 0xFC, 0xF3, 0xAE, 0x75, 0x14, 0xBE, - 0x0B, 0x40, 0xBF, 0x0B, 0x00, 0xB9, 0x4F, 0x00, 0xFC, 0xF3, 0xA5, 0x86, - 0x06, 0x1C, 0x00, 0x01, 0x06, 0x0E, 0x00, 0x31, 0xF6, 0x81, 0x7C, 0x0B, - 0x00, 0x02, 0x0F, 0x85, 0xA2, 0x01, 0x8A, 0x44, 0x0D, 0x84, 0xC0, 0x0F, - 0x84, 0x99, 0x01, 0x88, 0xC1, 0xB8, 0x80, 0x00, 0xF6, 0xF1, 0x84, 0xE4, - 0x0F, 0x85, 0x8C, 0x01, 0x8B, 0x44, 0x18, 0x85, 0xC0, 0x0F, 0x84, 0x83, - 0x01, 0x83, 0xF8, 0x3F, 0x0F, 0x87, 0x7C, 0x01, 0x8B, 0x44, 0x1A, 0x48, - 0x84, 0xE4, 0x0F, 0x85, 0x72, 0x01, 0x80, 0x7C, 0x15, 0xF0, 0x0F, 0x82, - 0x6A, 0x01, 0x2E, 0x80, 0x3E, 0x00, 0x00, 0x42, 0x75, 0x04, 0xC6, 0x44, - 0x02, 0x0E, 0xFC, 0xBB, 0x00, 0x06, 0xB9, 0x3C, 0x00, 0x8A, 0x44, 0x10, - 0x3C, 0x02, 0x0F, 0x87, 0x4E, 0x01, 0x8B, 0x44, 0x11, 0x85, 0xC0, 0x0F, - 0x85, 0xC0, 0x00, 0x8B, 0x44, 0x13, 0x85, 0xC0, 0x0F, 0x85, 0x3C, 0x01, - 0x8B, 0x44, 0x16, 0x85, 0xC0, 0x0F, 0x85, 0x33, 0x01, 0x8A, 0x44, 0x10, - 0x84, 0xC0, 0x74, 0x22, 0x66, 0x8B, 0x44, 0x20, 0x66, 0x85, 0xC0, 0x0F, - 0x84, 0x21, 0x01, 0x66, 0x8B, 0x44, 0x24, 0x66, 0x85, 0xC0, 0x0F, 0x84, - 0x16, 0x01, 0xBB, 0x00, 0x04, 0xB9, 0x58, 0x00, 0xBE, 0x51, 0x1F, 0xE9, - 0xA0, 0x00, 0x66, 0x8B, 0x44, 0x20, 0x66, 0x85, 0xC0, 0x0F, 0x85, 0xFF, - 0x00, 0x8B, 0x44, 0x0E, 0x85, 0xC0, 0x0F, 0x85, 0xF6, 0x00, 0x2E, 0x8B, - 0x44, 0x08, 0x83, 0xF8, 0xFF, 0x74, 0x0A, 0x88, 0x44, 0x18, 0xC1, 0xE8, - 0x08, 0x40, 0x89, 0x44, 0x1A, 0x5E, 0x56, 0x66, 0x31, 0xC0, 0x84, 0xD2, - 0x79, 0x0A, 0x2E, 0x66, 0x8B, 0x44, 0x04, 0x2E, 0x66, 0x03, 0x44, 0x08, - 0x66, 0xA3, 0x1C, 0x00, 0x88, 0x16, 0x24, 0x00, 0xBE, 0x49, 0x1F, 0xE8, - 0xA0, 0xEA, 0xBB, 0x00, 0x0A, 0xB9, 0x52, 0x00, 0x0E, 0x1F, 0x89, 0xDE, - 0x31, 0xFF, 0xAD, 0xAB, 0x01, 0xCE, 0x01, 0xCF, 0xB9, 0x00, 0x08, 0x29, - 0xF9, 0xF3, 0xA4, 0x26, 0xA0, 0x01, 0x00, 0x04, 0x05, 0x98, 0x97, 0xA0, - 0xBC, 0x01, 0xAA, 0xBF, 0xFA, 0x01, 0x26, 0x8B, 0x05, 0x3D, 0xEB, 0xFE, - 0x75, 0x09, 0x48, 0xAA, 0xB8, 0x10, 0x84, 0xAB, 0x31, 0xC0, 0xAB, 0xF8, - 0xE9, 0xAC, 0x01, 0x31, 0xF6, 0x8A, 0x44, 0x10, 0x84, 0xC0, 0x74, 0x7C, - 0x8B, 0x44, 0x16, 0x85, 0xC0, 0x74, 0x75, 0xBE, 0x59, 0x1F, 0x83, 0xF8, - 0x0C, 0x77, 0x03, 0xBE, 0x61, 0x1F, 0x53, 0x51, 0xE8, 0x43, 0xEA, 0x59, - 0x5B, 0x31, 0xF6, 0x2E, 0x8B, 0x44, 0x08, 0x83, 0xF8, 0xFF, 0x74, 0x0A, - 0x88, 0x44, 0x18, 0xC1, 0xE8, 0x08, 0x40, 0x89, 0x44, 0x1A, 0x5F, 0x57, - 0x66, 0x31, 0xC0, 0x84, 0xD2, 0x79, 0x0A, 0x2E, 0x66, 0x8B, 0x45, 0x04, - 0x2E, 0x66, 0x03, 0x45, 0x08, 0x66, 0xA3, 0x1C, 0x00, 0x0E, 0x1F, 0x89, - 0xDE, 0x31, 0xFF, 0xAD, 0xAB, 0x01, 0xCE, 0x01, 0xCF, 0xB9, 0x00, 0x02, - 0x29, 0xF9, 0xF3, 0xA4, 0x26, 0xA0, 0x01, 0x00, 0x04, 0x05, 0x98, 0x97, - 0xA0, 0xBC, 0x01, 0xAA, 0xBF, 0xFA, 0x01, 0x26, 0x8B, 0x05, 0x3D, 0xEB, - 0xFE, 0x75, 0x09, 0x48, 0xAA, 0xB8, 0x10, 0x84, 0xAB, 0x31, 0xC0, 0xAB, - 0xF8, 0xE9, 0x27, 0x01, 0x0E, 0x07, 0x5E, 0x56, 0x26, 0x80, 0x3C, 0x05, - 0x74, 0x22, 0x26, 0x80, 0x3C, 0x0F, 0x74, 0x1C, 0x26, 0x80, 0x3C, 0x15, - 0x74, 0x16, 0x26, 0x80, 0x3C, 0x1F, 0x74, 0x10, 0x26, 0x80, 0x3C, 0x85, - 0x74, 0x0A, 0xBE, 0x69, 0x1F, 0xE8, 0xB6, 0xE9, 0xF9, 0xE9, 0xFB, 0x00, - 0x81, 0xFE, 0xFE, 0x01, 0x72, 0x05, 0x26, 0xFF, 0x0E, 0xBC, 0x01, 0xBE, - 0x77, 0x1F, 0xE8, 0xA1, 0xE9, 0xBE, 0xBE, 0x01, 0xB9, 0x04, 0x00, 0x66, - 0x8B, 0x04, 0x3B, 0x44, 0x02, 0x75, 0x16, 0x38, 0xC4, 0x75, 0x12, 0x66, - 0x39, 0x44, 0x04, 0x75, 0x0C, 0x66, 0x39, 0x44, 0x08, 0x75, 0x06, 0x66, - 0x39, 0x44, 0x0C, 0x74, 0x30, 0x8A, 0x04, 0xD0, 0xE0, 0x0F, 0x85, 0xB7, - 0x00, 0x8A, 0x44, 0x02, 0x24, 0x3F, 0x0F, 0x84, 0xAE, 0x00, 0x8A, 0x44, - 0x06, 0x24, 0x3F, 0x0F, 0x84, 0xA5, 0x00, 0x66, 0x8B, 0x44, 0x08, 0x66, - 0x85, 0xC0, 0x0F, 0x84, 0x9A, 0x00, 0x66, 0x8B, 0x44, 0x0C, 0x66, 0x85, - 0xC0, 0x0F, 0x84, 0x8F, 0x00, 0x83, 0xC6, 0x10, 0xE2, 0xAD, 0x81, 0x3C, - 0x55, 0xAA, 0x0F, 0x85, 0x82, 0x00, 0xBE, 0xBE, 0x01, 0xB9, 0x04, 0x00, - 0x5B, 0x53, 0x66, 0x8B, 0x04, 0x3B, 0x44, 0x02, 0x75, 0x16, 0x38, 0xC4, - 0x75, 0x12, 0x66, 0x39, 0x44, 0x04, 0x75, 0x0C, 0x66, 0x39, 0x44, 0x08, - 0x75, 0x06, 0x66, 0x39, 0x44, 0x0C, 0x74, 0x54, 0x26, 0x8B, 0x3E, 0xBA, - 0x01, 0x81, 0xFF, 0xF0, 0x83, 0x77, 0x49, 0x81, 0xFF, 0xFE, 0x03, 0x75, - 0x08, 0xBF, 0x00, 0x7E, 0x26, 0x89, 0x3E, 0xBA, 0x01, 0x26, 0x83, 0x06, - 0xBA, 0x01, 0x10, 0x66, 0xAD, 0x66, 0xAB, 0x66, 0xAD, 0x66, 0xAB, 0x92, - 0x66, 0xAD, 0x66, 0x92, 0x3C, 0x05, 0x74, 0x15, 0x3C, 0x0F, 0x74, 0x11, - 0x3C, 0x15, 0x74, 0x0D, 0x3C, 0x1F, 0x74, 0x09, 0x3C, 0x85, 0x74, 0x05, - 0x26, 0x66, 0x03, 0x57, 0x04, 0x66, 0x92, 0x66, 0xAB, 0x66, 0xAD, 0x26, - 0x66, 0x8B, 0x47, 0x08, 0x66, 0xAB, 0xEB, 0x03, 0x83, 0xC6, 0x10, 0xE2, - 0x89, 0xF9, 0xEB, 0x07, 0xBE, 0x82, 0x1F, 0xE8, 0xB8, 0xE8, 0xF9, 0x5E, - 0x9C, 0x0E, 0x1F, 0x0E, 0x07, 0x56, 0x81, 0xFE, 0x02, 0x02, 0x75, 0x37, - 0xBF, 0xFE, 0x01, 0xBE, 0x0E, 0x02, 0xB9, 0xF8, 0x00, 0xFC, 0xF3, 0xA5, - 0xBF, 0xEE, 0x03, 0xBE, 0x00, 0x7E, 0xB9, 0x08, 0x00, 0xFC, 0xF3, 0xA5, - 0xBF, 0x00, 0x7E, 0xBE, 0x10, 0x7E, 0xB9, 0xF8, 0x02, 0xFC, 0xF3, 0xA5, - 0x81, 0x3E, 0xBA, 0x01, 0x10, 0x7E, 0x75, 0x06, 0xC7, 0x06, 0xBA, 0x01, - 0x0E, 0x04, 0x83, 0x2E, 0xBA, 0x01, 0x10, 0x5E, 0xB8, 0xFE, 0x01, 0xBF, - 0x25, 0x01, 0x89, 0x05, 0x81, 0xFE, 0xB2, 0x31, 0x0F, 0x84, 0x2B, 0x01, - 0xFF, 0x05, 0x39, 0x06, 0xBA, 0x01, 0x0F, 0x85, 0x35, 0x01, 0xFF, 0x0D, - 0x81, 0xFE, 0xF2, 0x01, 0x77, 0x0D, 0x0F, 0x82, 0x29, 0x01, 0x83, 0x3E, - 0xBC, 0x01, 0x03, 0x0F, 0x87, 0x20, 0x01, 0x31, 0xC0, 0x8E, 0xD8, 0x8A, - 0x36, 0x75, 0x04, 0x0E, 0x1F, 0x80, 0xCE, 0x80, 0x89, 0xE5, 0x8A, 0x56, - 0x18, 0x73, 0x17, 0xE8, 0x2C, 0xE8, 0xBE, 0xC5, 0x1E, 0x88, 0xD0, 0x24, - 0x7F, 0xD4, 0x0A, 0x05, 0x30, 0x30, 0x86, 0xC4, 0x89, 0x44, 0x20, 0xE8, - 0x18, 0xE8, 0x42, 0x38, 0xF2, 0x0F, 0x83, 0xDA, 0x00, 0x53, 0xB4, 0x08, - 0xE8, 0xC0, 0xE7, 0x72, 0x19, 0x80, 0xE1, 0x3F, 0xF9, 0x74, 0x13, 0x5B, - 0x88, 0xD5, 0x51, 0xB8, 0x01, 0x02, 0xBB, 0x00, 0x7E, 0xB9, 0x01, 0x00, - 0x30, 0xF6, 0xE8, 0xA6, 0xE7, 0xFB, 0x5B, 0xBE, 0xA7, 0x1E, 0x72, 0xB9, - 0x84, 0xE4, 0xF9, 0x75, 0xB4, 0xBE, 0xBE, 0x7F, 0xBF, 0xBE, 0x01, 0x81, - 0xFF, 0xFE, 0x01, 0x73, 0x73, 0x66, 0x31, 0xC9, 0x66, 0xAD, 0x66, 0xAB, - 0x66, 0x09, 0xC1, 0x66, 0xAD, 0x66, 0xAB, 0x66, 0x09, 0xC1, 0x66, 0xAD, - 0x66, 0xAB, 0x66, 0x09, 0xC1, 0x66, 0xAD, 0x66, 0xAB, 0x66, 0x09, 0xC1, - 0x67, 0xE3, 0xD8, 0x8A, 0x44, 0xF0, 0xD0, 0xE0, 0xF9, 0x96, 0xBE, 0xEA, - 0x1E, 0x0F, 0x85, 0x78, 0xFF, 0x96, 0x8A, 0x44, 0xF2, 0x24, 0x3F, 0xF9, - 0x96, 0xBE, 0xEA, 0x1E, 0x0F, 0x84, 0x69, 0xFF, 0x96, 0x8A, 0x44, 0xF6, - 0x24, 0x3F, 0xF9, 0x96, 0xBE, 0xEA, 0x1E, 0x0F, 0x84, 0x5A, 0xFF, 0x96, - 0x66, 0x8B, 0x44, 0xF8, 0x66, 0x85, 0xC0, 0xF9, 0x96, 0xBE, 0xEA, 0x1E, - 0x0F, 0x84, 0x49, 0xFF, 0x96, 0x66, 0x8B, 0x44, 0xFC, 0x66, 0x85, 0xC0, - 0xF9, 0x96, 0xBE, 0xEA, 0x1E, 0x0F, 0x84, 0x38, 0xFF, 0x96, 0xEB, 0x87, - 0x81, 0x3C, 0x55, 0xAA, 0xF9, 0x96, 0xBE, 0xEA, 0x1E, 0x0F, 0x85, 0x28, - 0xFF, 0x96, 0x89, 0x5E, 0x0C, 0xC7, 0x46, 0x08, 0xB2, 0x01, 0xC6, 0x06, - 0x20, 0x01, 0xE8, 0xC7, 0x06, 0x21, 0x01, 0x78, 0x19, 0xC7, 0x06, 0xBC, - 0x01, 0xFF, 0xFF, 0xC7, 0x06, 0xBA, 0x01, 0xFE, 0x01, 0xEB, 0x14, 0xC6, - 0x06, 0x37, 0x01, 0xE9, 0xC7, 0x06, 0x38, 0x01, 0x74, 0x19, 0xA0, 0x02, - 0x00, 0x24, 0x01, 0x28, 0x06, 0x25, 0x01, 0x58, 0x9D, 0x9F, 0xC0, 0xE4, - 0x02, 0xC1, 0xC8, 0x02, 0x9E, 0x72, 0x23, 0x66, 0x61, 0x66, 0x60, 0x9C, - 0x2E, 0x80, 0x3E, 0x06, 0x00, 0xFF, 0x74, 0x15, 0x2E, 0x8A, 0x36, 0xBC, - 0x01, 0x84, 0xD2, 0x78, 0x02, 0xB6, 0xFF, 0x2E, 0x3B, 0x16, 0x06, 0x00, - 0x74, 0x03, 0x9D, 0xF9, 0x9C, 0x9D, 0x66, 0x61, 0x07, 0x1F, 0xC3, 0x83, - 0xC6, 0x0C, 0x89, 0xE8, 0x88, 0xE2, 0xC7, 0x06, 0x20, 0x01, 0x83, 0xC6, - 0xC6, 0x06, 0x22, 0x01, 0x0C, 0xC3, 0x2E, 0x80, 0x3E, 0x06, 0x00, 0xFF, - 0x74, 0x19, 0x2E, 0xC6, 0x06, 0x06, 0x00, 0xFF, 0xB2, 0x7F, 0xF9, 0x68, - 0x1C, 0x01, 0x0E, 0x68, 0x00, 0x0D, 0x66, 0x60, 0x9C, 0x9C, 0x0E, 0x07, - 0xE9, 0x78, 0xFE, 0x31, 0xC0, 0x8E, 0xC0, 0x8E, 0xD8, 0xB8, 0x02, 0x02, - 0xBB, 0x00, 0x7A, 0xB9, 0x01, 0x00, 0xBA, 0x80, 0x00, 0xE8, 0x5B, 0xE6, - 0xFB, 0x0F, 0x82, 0xB6, 0x00, 0x84, 0xE4, 0x0F, 0x85, 0xB0, 0x00, 0x81, - 0x3E, 0xFE, 0x7D, 0x55, 0xAA, 0x0F, 0x85, 0xA6, 0x00, 0x81, 0x3E, 0xFE, - 0x7B, 0x55, 0xAA, 0x0F, 0x85, 0x9C, 0x00, 0xBE, 0xBE, 0x7D, 0x81, 0xFE, - 0xFE, 0x7D, 0x73, 0x31, 0xB9, 0x04, 0x00, 0x89, 0xF7, 0x66, 0xAD, 0x66, - 0xF7, 0xD8, 0x72, 0x04, 0xE2, 0xF7, 0xEB, 0xEA, 0x89, 0xFE, 0xAD, 0xD0, - 0xE0, 0x75, 0x19, 0xAD, 0x24, 0x3F, 0x74, 0x14, 0xAD, 0xAD, 0x24, 0x3F, - 0x74, 0x0E, 0x66, 0xAD, 0x66, 0xF7, 0xD8, 0x73, 0x07, 0x66, 0xAD, 0x66, - 0xF7, 0xD8, 0x72, 0xCA, 0xF9, 0x9C, 0x2E, 0xF6, 0x06, 0x02, 0x00, 0x02, - 0x74, 0x04, 0x9D, 0x72, 0x56, 0x9C, 0x9D, 0x72, 0x0C, 0xBE, 0xB8, 0x7B, - 0xBF, 0xB8, 0x7D, 0xB9, 0x24, 0x00, 0xFC, 0xF3, 0xA5, 0x2E, 0xF6, 0x06, - 0x02, 0x00, 0x80, 0x74, 0x30, 0xBE, 0xF2, 0x1E, 0xE8, 0x23, 0xE6, 0xBE, - 0xD3, 0x0B, 0xE8, 0x1D, 0xE6, 0xBE, 0x97, 0x1D, 0x2E, 0xC7, 0x06, 0x04, - 0x00, 0x20, 0x39, 0x2E, 0xC6, 0x06, 0x03, 0x00, 0x0F, 0xE8, 0x0A, 0xE6, - 0xBE, 0x6B, 0x1E, 0xE8, 0x04, 0xE6, 0xE8, 0x3C, 0x00, 0x2E, 0xC6, 0x06, - 0x03, 0x00, 0xFF, 0x72, 0xF5, 0x66, 0xC7, 0x06, 0xFC, 0x05, 0x00, 0x00, - 0x00, 0x00, 0xEA, 0x00, 0x7C, 0x00, 0x00, 0x2E, 0xF6, 0x06, 0x02, 0x00, - 0x80, 0x75, 0x0A, 0xBE, 0x33, 0x1E, 0xE8, 0xDD, 0xE5, 0xE8, 0x15, 0x00, - 0xC3, 0xBE, 0xF2, 0x1E, 0xE8, 0xD3, 0xE5, 0xBE, 0xD3, 0x0B, 0xE8, 0xCD, - 0xE5, 0xBE, 0x01, 0x1F, 0xE8, 0xC7, 0xE5, 0xEB, 0xFE, 0x1E, 0x66, 0x56, - 0x66, 0x52, 0x66, 0xBA, 0xFF, 0xFF, 0xFF, 0xFF, 0x2E, 0x66, 0x0F, 0xB6, - 0x06, 0x03, 0x00, 0x3C, 0xFF, 0x74, 0x09, 0x66, 0xBA, 0x12, 0x00, 0x00, - 0x00, 0xF7, 0xE2, 0x92, 0x31, 0xC0, 0x8E, 0xD8, 0x66, 0xA1, 0x6C, 0x04, - 0x66, 0x89, 0xC1, 0x66, 0x85, 0xD2, 0x78, 0x2C, 0x66, 0x01, 0xD0, 0x66, - 0x50, 0x2E, 0x66, 0x0F, 0xB6, 0x06, 0x03, 0x00, 0x66, 0x09, 0xC0, 0x74, - 0x10, 0xBE, 0x20, 0x1E, 0x66, 0x50, 0xE8, 0x7D, 0xE5, 0x66, 0x58, 0xBE, - 0x2C, 0x1E, 0xE8, 0xCF, 0x00, 0x66, 0x89, 0xCE, 0x66, 0x83, 0xC6, 0x12, - 0x66, 0x58, 0xEB, 0x06, 0x66, 0x89, 0xD0, 0x66, 0x89, 0xD6, 0x66, 0x8B, - 0x1E, 0x6C, 0x04, 0x66, 0x39, 0xCB, 0x73, 0x0C, 0x66, 0x31, 0xC9, 0x66, - 0x89, 0xD0, 0x66, 0xBE, 0x12, 0x00, 0x00, 0x00, 0x66, 0x50, 0xB4, 0x01, - 0xCD, 0x16, 0x50, 0x9C, 0xB4, 0x11, 0xCD, 0x16, 0x75, 0x3F, 0x9D, 0x75, - 0x3D, 0x58, 0x66, 0x58, 0x66, 0x39, 0xF3, 0x72, 0x29, 0x66, 0x56, 0x66, - 0x50, 0x66, 0x52, 0x66, 0x29, 0xF0, 0x66, 0x31, 0xD2, 0x66, 0xBE, 0x12, - 0x00, 0x00, 0x00, 0x66, 0xF7, 0xF6, 0xBE, 0x2C, 0x1E, 0x66, 0x53, 0xE8, - 0x72, 0x00, 0x66, 0x5B, 0x66, 0x5A, 0x66, 0x58, 0x66, 0x5E, 0x66, 0x83, - 0xC6, 0x12, 0x66, 0x39, 0xC3, 0x76, 0xA3, 0x66, 0x5A, 0x66, 0x5E, 0x1F, - 0xC3, 0x9D, 0x2E, 0x33, 0x06, 0x04, 0x00, 0x58, 0x74, 0x0D, 0x2E, 0x33, - 0x06, 0x04, 0x00, 0x75, 0x0B, 0xB4, 0x00, 0xCD, 0x16, 0xEB, 0x04, 0xB4, - 0x10, 0xCD, 0x16, 0xF9, 0x66, 0x58, 0x66, 0x5A, 0x66, 0x5E, 0x1F, 0xC3, - 0x66, 0x52, 0x66, 0x51, 0x53, 0x66, 0xB9, 0x0A, 0x00, 0x00, 0x00, 0x89, - 0xF3, 0x66, 0x31, 0xD2, 0x66, 0xF7, 0xF1, 0x80, 0xC2, 0x30, 0x2E, 0x88, - 0x14, 0x46, 0x66, 0x09, 0xC0, 0x75, 0xEE, 0x56, 0x4E, 0x39, 0xDE, 0x76, - 0x0C, 0x2E, 0x8A, 0x04, 0x2E, 0x86, 0x07, 0x2E, 0x88, 0x04, 0x43, 0xEB, - 0xEF, 0x5E, 0x5B, 0x66, 0x59, 0x66, 0x5A, 0xC3, 0x56, 0xE8, 0xC4, 0xFF, - 0x2E, 0x80, 0x3C, 0x08, 0x74, 0x07, 0x2E, 0xC6, 0x04, 0x20, 0x46, 0xEB, - 0xF3, 0x5E, 0xE8, 0x91, 0xE4, 0xC3, 0x56, 0x53, 0x66, 0x50, 0xB8, 0x03, - 0x00, 0xCD, 0x10, 0xBE, 0x00, 0x02, 0x89, 0xF7, 0xB9, 0x00, 0x3E, 0xFC, - 0xF3, 0xA5, 0x66, 0x58, 0x5B, 0x5E, 0xC3, 0x1E, 0x06, 0x66, 0x60, 0x8C, - 0xC3, 0xFA, 0x0F, 0x01, 0x16, 0x60, 0x12, 0x0F, 0x20, 0xC0, 0x0C, 0x01, - 0x0F, 0x22, 0xC0, 0xBE, 0x08, 0x00, 0x8E, 0xC6, 0x66, 0x31, 0xF6, 0x66, - 0x31, 0xFF, 0x66, 0xB9, 0x00, 0x24, 0x00, 0x00, 0xFC, 0x66, 0xF3, 0xA5, - 0xBE, 0x10, 0x00, 0x8E, 0xC6, 0x24, 0xFE, 0x0F, 0x22, 0xC0, 0x8E, 0xC3, - 0xB9, 0x00, 0x04, 0x31, 0xF6, 0x56, 0xBF, 0x00, 0x7C, 0x57, 0x06, 0x1F, - 0x56, 0x07, 0xFC, 0xF3, 0xA5, 0xBF, 0x10, 0x84, 0xBE, 0x00, 0x12, 0xB9, - 0x1E, 0x00, 0xFC, 0x2E, 0x66, 0xF3, 0xA5, 0x06, 0x1F, 0xFB, 0xCB, 0x84, - 0xD2, 0x79, 0x06, 0x81, 0xFE, 0xC2, 0x01, 0x75, 0x21, 0xC7, 0x06, 0x08, - 0x00, 0xFF, 0xFF, 0x80, 0x3E, 0x00, 0x00, 0x42, 0x74, 0x14, 0xF6, 0x06, - 0x02, 0x00, 0x08, 0x75, 0x0D, 0x66, 0x81, 0x3E, 0xFC, 0x23, 0x47, 0x52, - 0x55, 0xAA, 0x0F, 0x84, 0x6A, 0x02, 0xC3, 0x0D, 0x0A, 0x50, 0x72, 0x65, - 0x73, 0x73, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x62, 0x61, 0x72, - 0x00, 0x0D, 0x0A, 0x50, 0x72, 0x65, 0x73, 0x73, 0x20, 0x00, 0x20, 0x74, - 0x6F, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x47, 0x52, 0x55, 0x42, - 0x2C, 0x20, 0x61, 0x6E, 0x79, 0x20, 0x6F, 0x74, 0x68, 0x65, 0x72, 0x20, - 0x6B, 0x65, 0x79, 0x20, 0x74, 0x6F, 0x20, 0x62, 0x6F, 0x6F, 0x74, 0x20, - 0x70, 0x72, 0x65, 0x76, 0x69, 0x6F, 0x75, 0x73, 0x20, 0x4D, 0x42, 0x52, - 0x20, 0x2E, 0x2E, 0x2E, 0x00, 0x20, 0x74, 0x6F, 0x20, 0x62, 0x6F, 0x6F, - 0x74, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6F, 0x75, 0x73, 0x20, 0x4D, - 0x42, 0x52, 0x2C, 0x20, 0x61, 0x6E, 0x79, 0x20, 0x6F, 0x74, 0x68, 0x65, - 0x72, 0x20, 0x6B, 0x65, 0x79, 0x20, 0x74, 0x6F, 0x20, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x20, 0x47, 0x52, 0x55, 0x42, 0x20, 0x2E, 0x2E, 0x2E, 0x00, - 0x0D, 0x0A, 0x54, 0x69, 0x6D, 0x65, 0x6F, 0x75, 0x74, 0x3A, 0x20, 0x00, - 0x20, 0x20, 0x20, 0x08, 0x08, 0x08, 0x00, 0x0D, 0x0A, 0x49, 0x6E, 0x76, - 0x61, 0x6C, 0x69, 0x64, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6F, 0x75, - 0x73, 0x20, 0x4D, 0x42, 0x52, 0x2E, 0x20, 0x50, 0x72, 0x65, 0x73, 0x73, - 0x20, 0x61, 0x6E, 0x79, 0x20, 0x6B, 0x65, 0x79, 0x20, 0x74, 0x6F, 0x20, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x47, 0x52, 0x55, 0x42, 0x20, 0x2E, - 0x2E, 0x2E, 0x00, 0x20, 0x74, 0x6F, 0x20, 0x68, 0x6F, 0x6C, 0x64, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6E, 0x2C, 0x20, - 0x61, 0x6E, 0x79, 0x20, 0x6F, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6B, 0x65, - 0x79, 0x20, 0x74, 0x6F, 0x20, 0x62, 0x6F, 0x6F, 0x74, 0x20, 0x70, 0x72, - 0x65, 0x76, 0x69, 0x6F, 0x75, 0x73, 0x20, 0x4D, 0x42, 0x52, 0x20, 0x2E, - 0x2E, 0x2E, 0x00, 0x0D, 0x0A, 0x45, 0x72, 0x72, 0x6F, 0x72, 0x20, 0x77, - 0x68, 0x69, 0x6C, 0x65, 0x20, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6E, 0x67, - 0x20, 0x4D, 0x42, 0x52, 0x20, 0x6F, 0x66, 0x20, 0x00, 0x20, 0x69, 0x6E, - 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x74, - 0x61, 0x62, 0x6C, 0x65, 0x20, 0x6F, 0x66, 0x20, 0x64, 0x72, 0x69, 0x76, - 0x65, 0x20, 0x28, 0x68, 0x64, 0x30, 0x20, 0x29, 0x20, 0x00, 0x0D, 0x0A, - 0x45, 0x72, 0x72, 0x6F, 0x72, 0x00, 0x0D, 0x0A, 0x43, 0x61, 0x6E, 0x6E, - 0x6F, 0x74, 0x20, 0x66, 0x69, 0x6E, 0x64, 0x20, 0x00, 0x20, 0x69, 0x6E, - 0x20, 0x61, 0x6C, 0x6C, 0x20, 0x64, 0x72, 0x69, 0x76, 0x65, 0x73, 0x2E, - 0x20, 0x50, 0x72, 0x65, 0x73, 0x73, 0x20, 0x43, 0x74, 0x72, 0x6C, 0x2B, - 0x41, 0x6C, 0x74, 0x2B, 0x44, 0x65, 0x6C, 0x20, 0x74, 0x6F, 0x20, 0x72, - 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2E, 0x00, 0x0D, 0x0A, 0x54, 0x72, - 0x79, 0x20, 0x28, 0x68, 0x64, 0x30, 0x2C, 0x30, 0x20, 0x29, 0x20, 0x3A, - 0x20, 0x00, 0x45, 0x58, 0x54, 0x32, 0x3A, 0x20, 0x00, 0x4E, 0x54, 0x46, - 0x53, 0x35, 0x3A, 0x20, 0x00, 0x46, 0x41, 0x54, 0x33, 0x32, 0x3A, 0x20, - 0x00, 0x46, 0x41, 0x54, 0x31, 0x36, 0x3A, 0x20, 0x00, 0x46, 0x41, 0x54, - 0x31, 0x32, 0x3A, 0x20, 0x00, 0x6E, 0x6F, 0x6E, 0x2D, 0x4D, 0x53, 0x3A, - 0x20, 0x73, 0x6B, 0x69, 0x70, 0x20, 0x00, 0x45, 0x78, 0x74, 0x65, 0x6E, - 0x64, 0x65, 0x64, 0x3A, 0x20, 0x00, 0x69, 0x6E, 0x76, 0x61, 0x6C, 0x69, - 0x64, 0x20, 0x6F, 0x72, 0x20, 0x6E, 0x75, 0x6C, 0x6C, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x6F, 0x74, 0x2D, 0x6B, 0x65, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xB5, 0x00, 0x04, 0x00, 0x05, 0x4D, 0xCB, 0x93, - 0x60, 0x66, 0x31, 0xC0, 0x2E, 0x66, 0xA3, 0x14, 0x23, 0x2E, 0x66, 0xA3, - 0x18, 0x23, 0xB4, 0x08, 0xCD, 0x13, 0x72, 0x14, 0xF6, 0xC1, 0x3F, 0x74, - 0x0F, 0x80, 0xE1, 0x3F, 0x2E, 0x88, 0x0E, 0x14, 0x23, 0xFE, 0xC6, 0x2E, - 0x88, 0x36, 0x18, 0x23, 0x61, 0x2E, 0x0F, 0xB6, 0x0E, 0x14, 0x23, 0x51, - 0x2E, 0x0F, 0xB6, 0x0E, 0x18, 0x23, 0x51, 0x0F, 0xB6, 0xCA, 0x51, 0x68, - 0xD2, 0x22, 0xE8, 0x21, 0x02, 0x83, 0xC4, 0x08, 0x2E, 0x8B, 0x0E, 0x14, - 0x23, 0xE8, 0x1F, 0x00, 0x73, 0x02, 0x31, 0xC9, 0x83, 0xF9, 0x3F, 0x73, - 0x2D, 0x41, 0xE8, 0x12, 0x00, 0x72, 0x07, 0x83, 0xF9, 0x3F, 0x72, 0xF0, - 0xEB, 0x20, 0x49, 0x80, 0xF9, 0x02, 0x73, 0x1A, 0xB4, 0x01, 0xC3, 0xB8, - 0x00, 0x50, 0x8E, 0xC0, 0x8E, 0xD8, 0x31, 0xDB, 0xB8, 0x01, 0x02, 0xB6, - 0x00, 0x60, 0x89, 0xDE, 0x89, 0xDF, 0xCD, 0x13, 0x61, 0xC3, 0x83, 0xF9, - 0x3F, 0x76, 0x03, 0xB9, 0x3F, 0x00, 0x2E, 0x89, 0x0E, 0x1C, 0x23, 0x2E, - 0x8A, 0x36, 0x18, 0x23, 0x84, 0xF6, 0x74, 0x09, 0xE8, 0x92, 0x00, 0x0F, - 0x82, 0x8B, 0x00, 0x77, 0x0F, 0xB6, 0x01, 0xE8, 0x87, 0x00, 0x0F, 0x82, - 0x80, 0x00, 0x77, 0x04, 0xFE, 0xC6, 0x75, 0xF3, 0xFE, 0xCE, 0x2E, 0x88, - 0x36, 0x1E, 0x23, 0x80, 0xFE, 0xFF, 0x75, 0x12, 0x2E, 0x8A, 0x36, 0x18, - 0x23, 0x84, 0xF6, 0x75, 0x02, 0xFE, 0xCE, 0xFE, 0xCE, 0x2E, 0x88, 0x36, - 0x1E, 0x23, 0x2E, 0x8A, 0x0E, 0x14, 0x23, 0xE8, 0xEF, 0x00, 0x72, 0x52, - 0x77, 0x18, 0xB1, 0x08, 0xE8, 0xE6, 0x00, 0x72, 0x49, 0x77, 0x0F, 0x41, - 0x2E, 0x3A, 0x0E, 0x1C, 0x23, 0x72, 0xF1, 0x80, 0xF9, 0x3F, 0x76, 0x02, - 0xB1, 0x3F, 0x2E, 0x88, 0x0E, 0x1C, 0x23, 0x2E, 0x0F, 0xB6, 0x0E, 0x1C, - 0x23, 0x51, 0x2E, 0x0F, 0xB6, 0x0E, 0x1E, 0x23, 0x41, 0x51, 0x0F, 0xB6, - 0xCA, 0x51, 0x68, 0xF3, 0x22, 0xE8, 0x52, 0x01, 0x83, 0xC4, 0x08, 0x2E, - 0x8B, 0x0E, 0x1C, 0x23, 0x2E, 0x8A, 0x36, 0x1E, 0x23, 0x2E, 0x88, 0x0E, - 0x08, 0x00, 0x2E, 0x88, 0x36, 0x09, 0x00, 0xB4, 0x00, 0xC3, 0xB4, 0x01, - 0xC3, 0xB5, 0x00, 0xB1, 0x01, 0xB4, 0x02, 0x2E, 0xA0, 0x1C, 0x23, 0xBB, - 0x00, 0x50, 0x8E, 0xC3, 0x8E, 0xDB, 0x31, 0xDB, 0x60, 0x89, 0xDE, 0x89, - 0xDF, 0xCD, 0x13, 0x61, 0xFE, 0xC5, 0x72, 0x48, 0xFE, 0xCD, 0xB1, 0x01, - 0xB4, 0x02, 0x2E, 0xA0, 0x1C, 0x23, 0xBB, 0x00, 0x58, 0x8E, 0xC3, 0x8E, - 0xDB, 0x31, 0xDB, 0x60, 0x89, 0xDE, 0x89, 0xDF, 0xB6, 0x00, 0xCD, 0x13, - 0x61, 0x72, 0x37, 0xFE, 0xC5, 0xE8, 0x34, 0x00, 0x74, 0x22, 0xB1, 0x01, - 0xB4, 0x02, 0x2E, 0xA0, 0x1C, 0x23, 0xBB, 0x00, 0x58, 0x8E, 0xC3, 0x8E, - 0xDB, 0x31, 0xDB, 0x60, 0x89, 0xDE, 0x89, 0xDF, 0xB6, 0x00, 0xCD, 0x13, - 0x61, 0x72, 0x13, 0xE8, 0x12, 0x00, 0x75, 0x0B, 0x80, 0xFD, 0x05, 0x72, - 0x96, 0x80, 0xFE, 0x00, 0x74, 0x04, 0xC3, 0x38, 0xF6, 0xC3, 0xF9, 0xC3, - 0x51, 0x56, 0x57, 0x2E, 0x8B, 0x0E, 0x1C, 0x23, 0xC1, 0xE1, 0x07, 0xB8, - 0x00, 0x50, 0x8E, 0xD8, 0xB8, 0x00, 0x58, 0x8E, 0xC0, 0x31, 0xF6, 0x31, - 0xFF, 0xFC, 0x66, 0xF3, 0xA7, 0x5F, 0x5E, 0x59, 0xC3, 0x2E, 0xC7, 0x06, - 0x20, 0x23, 0x10, 0x00, 0xB5, 0x00, 0xB6, 0x00, 0xB8, 0x01, 0x02, 0xBB, - 0x00, 0x58, 0x8E, 0xC3, 0x8E, 0xDB, 0x31, 0xDB, 0x60, 0xB1, 0x01, 0x89, - 0xDE, 0x89, 0xDF, 0xCD, 0x13, 0x61, 0x72, 0x5C, 0xB8, 0x02, 0x02, 0xBB, - 0x00, 0x50, 0x8E, 0xC3, 0x8E, 0xDB, 0x31, 0xDB, 0x60, 0x89, 0xDE, 0x89, - 0xDF, 0xCD, 0x13, 0x61, 0x9C, 0x2E, 0x3A, 0x36, 0x1E, 0x23, 0x72, 0x04, - 0xB6, 0xFF, 0xFE, 0xC5, 0xFE, 0xC6, 0x9D, 0x72, 0x22, 0xE8, 0x36, 0x00, - 0x74, 0x1D, 0xB8, 0x01, 0x02, 0xBB, 0x00, 0x58, 0x8E, 0xC3, 0x8E, 0xDB, - 0x31, 0xDB, 0x60, 0x89, 0xDE, 0x89, 0xDF, 0xB1, 0x01, 0xCD, 0x13, 0x61, - 0x72, 0x1A, 0xE8, 0x19, 0x00, 0x75, 0x12, 0x2E, 0xFF, 0x0E, 0x20, 0x23, - 0x74, 0x05, 0x80, 0xFD, 0x07, 0x72, 0x95, 0x80, 0xF9, 0x01, 0x76, 0x04, - 0xC3, 0x38, 0xC9, 0xC3, 0xF9, 0xC3, 0x51, 0x56, 0x57, 0xB9, 0x80, 0x00, - 0xB8, 0x20, 0x50, 0x8E, 0xD8, 0xB8, 0x00, 0x58, 0x8E, 0xC0, 0x31, 0xF6, - 0x31, 0xFF, 0xFC, 0x66, 0xF3, 0xA7, 0x5F, 0x5E, 0x59, 0xC3, 0x60, 0x89, - 0xE5, 0x83, 0xC5, 0x12, 0x8B, 0x76, 0x00, 0x83, 0xC5, 0x02, 0x2E, 0xAC, - 0x84, 0xC0, 0x74, 0x5C, 0x3C, 0x25, 0x75, 0x50, 0x2E, 0xAC, 0x84, 0xC0, - 0x74, 0x52, 0x3C, 0x64, 0xBB, 0x0A, 0x00, 0x74, 0x0B, 0x3C, 0x78, 0x74, - 0x04, 0x3C, 0x58, 0x75, 0xE1, 0xBB, 0x10, 0x00, 0x66, 0x57, 0x66, 0x31, - 0xFF, 0x31, 0xC9, 0x8B, 0x46, 0x00, 0x31, 0xD2, 0xF7, 0xF3, 0x89, 0xD7, - 0x66, 0xC1, 0xCF, 0x04, 0x41, 0x85, 0xC0, 0x75, 0xF1, 0x31, 0xDB, 0x66, - 0xC1, 0xC7, 0x04, 0x89, 0xF8, 0x24, 0x0F, 0x3C, 0x09, 0x76, 0x02, 0x04, - 0x07, 0x04, 0x30, 0xB4, 0x0E, 0xCD, 0x10, 0xE2, 0xEA, 0x66, 0x5F, 0x83, - 0xC5, 0x02, 0xEB, 0xA6, 0x31, 0xDB, 0xB4, 0x0E, 0xCD, 0x10, 0xEB, 0x9E, - 0x61, 0xC3, 0x0D, 0x0A, 0x42, 0x49, 0x4F, 0x53, 0x3A, 0x20, 0x44, 0x72, - 0x69, 0x76, 0x65, 0x3D, 0x30, 0x78, 0x25, 0x58, 0x2C, 0x20, 0x48, 0x3D, - 0x25, 0x64, 0x2C, 0x20, 0x53, 0x3D, 0x25, 0x64, 0x0D, 0x0A, 0x00, 0x54, - 0x55, 0x4E, 0x45, 0x3A, 0x20, 0x44, 0x72, 0x69, 0x76, 0x65, 0x3D, 0x30, - 0x78, 0x25, 0x58, 0x2C, 0x20, 0x48, 0x3D, 0x25, 0x64, 0x2C, 0x20, 0x53, - 0x3D, 0x25, 0x64, 0x0D, 0x0A, 0x00, 0x66, 0x90, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, - 0x47, 0x52, 0x55, 0xAA -}; diff --git a/src/ms-sys/inc/mbr_grub2.h b/src/ms-sys/inc/mbr_grub2.h index be359dd8..fce22789 100644 --- a/src/ms-sys/inc/mbr_grub2.h +++ b/src/ms-sys/inc/mbr_grub2.h @@ -1,13 +1,12 @@ /* * First 432 bytes of MBR from Grub2 (boot.img), with 2 bytes NOPed @0x66 * as per grub2's setup.c comments: - * - * If DEST_DRIVE is a hard disk, enable the workaround, which is - * for buggy BIOSes which don't pass boot drive correctly. Instead, - * they pass 0x00 or 0x01 even when booted from 0x80. + * If DEST_DRIVE is a hard disk, enable the workaround, which is + * for buggy BIOSes which don't pass boot drive correctly. Instead, + * they pass 0x00 or 0x01 even when booted from 0x80. */ -unsigned char mbr_grub2_0x0[432] = { +unsigned char mbr_grub2_0x0[] = { 0xEB, 0x63, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, diff --git a/src/resource.h b/src/resource.h index a18a81ae..5d6888f3 100644 --- a/src/resource.h +++ b/src/resource.h @@ -69,6 +69,8 @@ #define IDR_SL_LDLINUX_V6_BSS 402 #define IDR_SL_LDLINUX_V6_SYS 403 #define IDR_SL_MBOOT_C32 404 +#define IDR_GR_GRUB_GRLDR_MBR 450 +#define IDR_GR_GRUB2_CORE_IMG 451 #define IDR_LC_RUFUS_LOC 500 #define IDR_XT_HOGGER 501 #define IDC_DEVICE 1001 diff --git a/src/rufus.c b/src/rufus.c index 2a79d3ff..e3891426 100644 --- a/src/rufus.c +++ b/src/rufus.c @@ -937,6 +937,7 @@ static void DisplayISOProps(void) uprintf(" Has a >4GB file: %s", YesNo(iso_report.has_4GB_file)); uprintf(" Uses Bootmgr: %s", YesNo(iso_report.has_bootmgr)); uprintf(" Uses EFI: %s%s", YesNo(iso_report.has_efi || iso_report.has_win7_efi), (iso_report.has_win7_efi && (!iso_report.has_efi)) ? " (win7_x64)" : ""); + uprintf(" Uses Grub 2: %s", YesNo(iso_report.has_grub2)); uprintf(" Uses Grub4DOS: %s", YesNo(iso_report.has_grub4dos)); uprintf(" Uses isolinux: %s", isolinux_str); if (HAS_SYSLINUX(iso_report) && (SL_MAJOR(iso_report.sl_version) < 5)) { @@ -975,7 +976,7 @@ DWORD WINAPI ISOScanThread(LPVOID param) } else { DisplayISOProps(); } - if ( (!iso_report.has_bootmgr) && (!HAS_SYSLINUX(iso_report)) && (!IS_WINPE(iso_report.winpe)) && (!iso_report.has_grub4dos) + if ( (!iso_report.has_bootmgr) && (!HAS_SYSLINUX(iso_report)) && (!IS_WINPE(iso_report.winpe)) && (!IS_GRUB(iso_report)) && (!iso_report.has_efi) && (!IS_REACTOS(iso_report) && (!iso_report.has_kolibrios) && (!iso_report.is_bootable_img)) ) { MessageBoxU(hMainDialog, lmprintf(MSG_082), lmprintf(MSG_081), MB_OK|MB_ICONINFORMATION|MB_IS_RTL); safe_free(image_path); @@ -1135,7 +1136,7 @@ static BOOL BootCheck(void) ShellExecuteA(hMainDialog, "open", SEVENZIP_URL, NULL, NULL, SW_SHOWNORMAL); return FALSE; } - } else if ((fs == FS_NTFS) && (!iso_report.has_bootmgr) && (!IS_WINPE(iso_report.winpe)) && (!iso_report.has_grub4dos)) { + } else if ((fs == FS_NTFS) && (!iso_report.has_bootmgr) && (!IS_WINPE(iso_report.winpe)) && (!IS_GRUB(iso_report))) { if (HAS_SYSLINUX(iso_report)) { // Only FAT/FAT32 is supported for this type of ISO MessageBoxU(hMainDialog, lmprintf(MSG_096), lmprintf(MSG_092), MB_OK|MB_ICONERROR|MB_IS_RTL); @@ -1149,7 +1150,7 @@ static BOOL BootCheck(void) MessageBoxU(hMainDialog, lmprintf(MSG_189), lmprintf(MSG_099), MB_OK|MB_ICONERROR|MB_IS_RTL); return FALSE; } else if (((fs == FS_FAT16)||(fs == FS_FAT32)) && (!HAS_SYSLINUX(iso_report)) && - (!IS_REACTOS(iso_report)) && (!iso_report.has_kolibrios) && (!iso_report.has_grub4dos)) { + (!IS_REACTOS(iso_report)) && (!iso_report.has_kolibrios) && (!IS_GRUB(iso_report))) { // FAT/FAT32 can only be used for isolinux based ISO images or when the Target Type is UEFI MessageBoxU(hMainDialog, lmprintf(MSG_098), lmprintf(MSG_090), MB_OK|MB_ICONERROR|MB_IS_RTL); return FALSE; @@ -1555,7 +1556,7 @@ void SetBoot(int fs, int bt) static_sprintf(tmp, "Syslinux %s", embedded_sl_version_str[1]); IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, tmp), DT_SYSLINUX_V6)); IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, "ReactOS"), DT_REACTOS)); -// IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, "Grub 2.0"), DT_GRUB2)); + IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, "Grub 2.0"), DT_GRUB2)); IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, "Grub4DOS"), DT_GRUB4DOS)); } if ((!advanced_mode) && (selection_default >= DT_SYSLINUX_V4)) { diff --git a/src/rufus.h b/src/rufus.h index 0fc2a11a..c67e7451 100644 --- a/src/rufus.h +++ b/src/rufus.h @@ -231,6 +231,7 @@ typedef struct { #define IS_WINPE(r) (((r&WINPE_MININT) == WINPE_MININT)||((r&WINPE_I386) == WINPE_I386)) #define IS_EFI(r) ((r.has_efi) || (r.has_win7_efi)) #define IS_REACTOS(r) (r.reactos_path[0] != 0) +#define IS_GRUB(r) ((r.has_grub2) || (r.has_grub4dos)) typedef struct { char label[192]; /* 3*64 to account for UTF-8 */ @@ -251,6 +252,7 @@ typedef struct { BOOL has_old_vesamenu; BOOL has_efi_syslinux; BOOL has_grub4dos; + BOOL has_grub2; BOOL has_kolibrios; BOOL uses_minint; BOOL is_bootable_img; diff --git a/src/rufus.rc b/src/rufus.rc index 2092fa00..4498fa3a 100644 --- a/src/rufus.rc +++ b/src/rufus.rc @@ -32,7 +32,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL IDD_DIALOG DIALOGEX 12, 12, 227, 329 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Rufus 1.5.0.542" +CAPTION "Rufus 1.5.0.543" FONT 8, "Segoe UI", 400, 0, 0x1 BEGIN DEFPUSHBUTTON "Start",IDC_START,113,291,50,14 @@ -164,7 +164,7 @@ END IDD_DIALOG_XP DIALOGEX 12, 12, 227, 329 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Rufus 1.5.0.542" +CAPTION "Rufus 1.5.0.543" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN DEFPUSHBUTTON "Start",IDC_START,113,291,50,14 @@ -297,7 +297,7 @@ END IDD_DIALOG_RTL DIALOGEX 12, 12, 227, 329 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL -CAPTION "Rufus 1.5.0.542" +CAPTION "Rufus 1.5.0.543" FONT 8, "Segoe UI", 400, 0, 0x1 BEGIN DEFPUSHBUTTON "Start",IDC_START,113,291,50,14 @@ -437,7 +437,7 @@ END IDD_DIALOG_RTL_XP DIALOGEX 12, 12, 227, 329 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL -CAPTION "Rufus 1.5.0.542" +CAPTION "Rufus 1.5.0.543" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN DEFPUSHBUTTON "Start",IDC_START,113,291,50,14 @@ -610,6 +610,8 @@ BEGIN "IDR_SL_LDLINUX_V6_BSS RCDATA ""../res/syslinux/ldlinux_v6.bss""\r\n" "IDR_SL_LDLINUX_V6_SYS RCDATA ""../res/syslinux/ldlinux_v6.sys""\r\n" "IDR_SL_MBOOT_C32 RCDATA ""../res/syslinux/mboot.c32""\r\n" + "IDR_GR_GRUB_GRLDR_MBR RCDATA ""../res/grub/grldr.mbr""\r\n" + "IDR_GR_GRUB2_CORE_IMG RCDATA ""../res/grub2/core.img""\r\n" "IDR_FD_COMMAND_COM RCDATA ""../res/freedos/COMMAND.COM""\r\n" "IDR_FD_KERNEL_SYS RCDATA ""../res/freedos/KERNEL.SYS""\r\n" "IDR_FD_DISPLAY_EXE RCDATA ""../res/freedos/DISPLAY.EXE""\r\n" @@ -699,8 +701,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,5,0,542 - PRODUCTVERSION 1,5,0,542 + FILEVERSION 1,5,0,543 + PRODUCTVERSION 1,5,0,543 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -717,13 +719,13 @@ BEGIN BEGIN VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)" VALUE "FileDescription", "Rufus" - VALUE "FileVersion", "1.5.0.542" + VALUE "FileVersion", "1.5.0.543" VALUE "InternalName", "Rufus" VALUE "LegalCopyright", "© 2011-2014 Pete Batard (GPL v3)" VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html" VALUE "OriginalFilename", "rufus.exe" VALUE "ProductName", "Rufus" - VALUE "ProductVersion", "1.5.0.542" + VALUE "ProductVersion", "1.5.0.543" END END BLOCK "VarFileInfo" @@ -764,6 +766,8 @@ IDR_SL_LDLINUX_V4_SYS RCDATA "../res/syslinux/ldlinux_v4.sys" IDR_SL_LDLINUX_V6_BSS RCDATA "../res/syslinux/ldlinux_v6.bss" IDR_SL_LDLINUX_V6_SYS RCDATA "../res/syslinux/ldlinux_v6.sys" IDR_SL_MBOOT_C32 RCDATA "../res/syslinux/mboot.c32" +IDR_GR_GRUB_GRLDR_MBR RCDATA "../res/grub/grldr.mbr" +IDR_GR_GRUB2_CORE_IMG RCDATA "../res/grub2/core.img" IDR_FD_COMMAND_COM RCDATA "../res/freedos/COMMAND.COM" IDR_FD_KERNEL_SYS RCDATA "../res/freedos/KERNEL.SYS" IDR_FD_DISPLAY_EXE RCDATA "../res/freedos/DISPLAY.EXE"