[PATCH v3 0/2] MR11209: windowscodecs: Fix decoding GIFs that fill the LZW code table.
Fixes loading of GIF images whose LZW stream fills the 4096-entry code table and then keeps emitting codes before a clear code (the "deferred clear code" region). ### Symptom Such a GIF fails to load with the builtin WIC GIF decoder. Through GDI+ (System.Drawing) it surfaces as "A generic error occurred in GDI+", and in a WinForms application as `System.ArgumentException: Parameter is not valid` at `System.Drawing.Image.get_FrameDimensionsList()`. Native Windows loads the same file. ### Cause In `DGifDecompressLine` (dlls/windowscodecs/ungif.c) a new dictionary entry is written at index `RunningCode - 2` for every code. `DGifDecompressInput` freezes `RunningCode` at `LZ_MAX_CODE + 2` once the table is full, so `RunningCode - 2` stays at 4095 and every later code overwrites the already-valid entry 4095. A subsequent code whose prefix chain runs through the corrupted entry then cycles, so the guard `if (j >= LZ_MAX_CODE || CrntPrefix > LZ_MAX_CODE)` returns `GIF_ERROR` and the whole image fails to load. ### Fix Only define a table entry while it is still empty (`NO_SUCH_CODE`), matching the corresponding upstream giflib change; this keeps the full table intact until a clear code arrives. ### Tests Adds a test to dlls/windowscodecs/tests/gifformat.c (a 64x64 GIF that fills the LZW table and then references the last code). It fails before the fix (`CopyPixels` returns E_FAIL) and passes after it. -- v3: windowscodecs/tests: Test decoding a GIF that fills the LZW code table. windowscodecs: Fix decoding GIFs that fill the LZW code table. https://gitlab.winehq.org/wine/wine/-/merge_requests/11209
From: Marius Kamm <marius.kamm@protonmail.com> The GIF LZW decompressor writes a new table entry at index RunningCode-2 for every code while LastCode != NO_SUCH_CODE. Once the table is full, DGifDecompressInput freezes RunningCode at LZ_MAX_CODE+2, so RunningCode-2 stays at 4095 and every subsequent code overwrites the already-valid entry 4095. For a GIF that fills the 4096-entry table and keeps emitting codes before a clear code, a later code whose prefix chain runs through the corrupted entry then produces CrntPrefix > LZ_MAX_CODE / j >= LZ_MAX_CODE, so DGifDecompressLine returns GIF_ERROR and the whole image fails to load. Native Windows decodes such files correctly. Only define a table entry while it is still empty, matching giflib, which keeps the full table intact until a clear code arrives. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=59887 --- dlls/windowscodecs/ungif.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dlls/windowscodecs/ungif.c b/dlls/windowscodecs/ungif.c index c994bad6bcb..6737958a574 100644 --- a/dlls/windowscodecs/ungif.c +++ b/dlls/windowscodecs/ungif.c @@ -740,7 +740,9 @@ DGifDecompressLine(GifFileType * GifFile, while (StackPtr != 0 && i < LineLen) Line[i++] = Stack[--StackPtr]; } - if (LastCode != NO_SUCH_CODE) { + if (LastCode != NO_SUCH_CODE && + Private->RunningCode - 2 < (LZ_MAX_CODE + 1) && + Prefix[Private->RunningCode - 2] == NO_SUCH_CODE) { Prefix[Private->RunningCode - 2] = LastCode; if (CrntCode == Private->RunningCode - 2) { -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/11209
From: Marius Kamm <marius.kamm@protonmail.com> Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=59887 --- dlls/windowscodecs/tests/gifformat.c | 453 +++++++++++++++++++++++++++ 1 file changed, 453 insertions(+) diff --git a/dlls/windowscodecs/tests/gifformat.c b/dlls/windowscodecs/tests/gifformat.c index 08f8ba1c12b..2be0e75da74 100644 --- a/dlls/windowscodecs/tests/gifformat.c +++ b/dlls/windowscodecs/tests/gifformat.c @@ -632,6 +632,457 @@ static void test_gif_notrailer(void) IWICImagingFactory_Release(factory); } +/* GIF whose single frame's LZW stream fills the 4096-entry code table and then + * references the last code (the "deferred clear code" case). The decoder must keep + * the full table intact; a buggy decoder that overwrites entry LZ_MAX_CODE corrupts + * the table and fails to decode the frame. */ +static const BYTE gif_full_table[] = { + 0x47,0x49,0x46,0x38,0x39,0x61,0x40,0x00,0x40,0x00,0x87,0x00,0x00,0x00,0x00,0x00, + 0x01,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x05,0x05,0x06, + 0x06,0x06,0x07,0x07,0x07,0x08,0x08,0x08,0x09,0x09,0x09,0x0a,0x0a,0x0a,0x0b,0x0b, + 0x0b,0x0c,0x0c,0x0c,0x0d,0x0d,0x0d,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x10,0x10,0x10, + 0x11,0x11,0x11,0x12,0x12,0x12,0x13,0x13,0x13,0x14,0x14,0x14,0x15,0x15,0x15,0x16, + 0x16,0x16,0x17,0x17,0x17,0x18,0x18,0x18,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1b,0x1b, + 0x1b,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x20,0x20,0x20, + 0x21,0x21,0x21,0x22,0x22,0x22,0x23,0x23,0x23,0x24,0x24,0x24,0x25,0x25,0x25,0x26, + 0x26,0x26,0x27,0x27,0x27,0x28,0x28,0x28,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2b,0x2b, + 0x2b,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x30,0x30,0x30, + 0x31,0x31,0x31,0x32,0x32,0x32,0x33,0x33,0x33,0x34,0x34,0x34,0x35,0x35,0x35,0x36, + 0x36,0x36,0x37,0x37,0x37,0x38,0x38,0x38,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3b,0x3b, + 0x3b,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x40,0x40,0x40, + 0x41,0x41,0x41,0x42,0x42,0x42,0x43,0x43,0x43,0x44,0x44,0x44,0x45,0x45,0x45,0x46, + 0x46,0x46,0x47,0x47,0x47,0x48,0x48,0x48,0x49,0x49,0x49,0x4a,0x4a,0x4a,0x4b,0x4b, + 0x4b,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e,0x4f,0x4f,0x4f,0x50,0x50,0x50, + 0x51,0x51,0x51,0x52,0x52,0x52,0x53,0x53,0x53,0x54,0x54,0x54,0x55,0x55,0x55,0x56, + 0x56,0x56,0x57,0x57,0x57,0x58,0x58,0x58,0x59,0x59,0x59,0x5a,0x5a,0x5a,0x5b,0x5b, + 0x5b,0x5c,0x5c,0x5c,0x5d,0x5d,0x5d,0x5e,0x5e,0x5e,0x5f,0x5f,0x5f,0x60,0x60,0x60, + 0x61,0x61,0x61,0x62,0x62,0x62,0x63,0x63,0x63,0x64,0x64,0x64,0x65,0x65,0x65,0x66, + 0x66,0x66,0x67,0x67,0x67,0x68,0x68,0x68,0x69,0x69,0x69,0x6a,0x6a,0x6a,0x6b,0x6b, + 0x6b,0x6c,0x6c,0x6c,0x6d,0x6d,0x6d,0x6e,0x6e,0x6e,0x6f,0x6f,0x6f,0x70,0x70,0x70, + 0x71,0x71,0x71,0x72,0x72,0x72,0x73,0x73,0x73,0x74,0x74,0x74,0x75,0x75,0x75,0x76, + 0x76,0x76,0x77,0x77,0x77,0x78,0x78,0x78,0x79,0x79,0x79,0x7a,0x7a,0x7a,0x7b,0x7b, + 0x7b,0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x80, + 0x81,0x81,0x81,0x82,0x82,0x82,0x83,0x83,0x83,0x84,0x84,0x84,0x85,0x85,0x85,0x86, + 0x86,0x86,0x87,0x87,0x87,0x88,0x88,0x88,0x89,0x89,0x89,0x8a,0x8a,0x8a,0x8b,0x8b, + 0x8b,0x8c,0x8c,0x8c,0x8d,0x8d,0x8d,0x8e,0x8e,0x8e,0x8f,0x8f,0x8f,0x90,0x90,0x90, + 0x91,0x91,0x91,0x92,0x92,0x92,0x93,0x93,0x93,0x94,0x94,0x94,0x95,0x95,0x95,0x96, + 0x96,0x96,0x97,0x97,0x97,0x98,0x98,0x98,0x99,0x99,0x99,0x9a,0x9a,0x9a,0x9b,0x9b, + 0x9b,0x9c,0x9c,0x9c,0x9d,0x9d,0x9d,0x9e,0x9e,0x9e,0x9f,0x9f,0x9f,0xa0,0xa0,0xa0, + 0xa1,0xa1,0xa1,0xa2,0xa2,0xa2,0xa3,0xa3,0xa3,0xa4,0xa4,0xa4,0xa5,0xa5,0xa5,0xa6, + 0xa6,0xa6,0xa7,0xa7,0xa7,0xa8,0xa8,0xa8,0xa9,0xa9,0xa9,0xaa,0xaa,0xaa,0xab,0xab, + 0xab,0xac,0xac,0xac,0xad,0xad,0xad,0xae,0xae,0xae,0xaf,0xaf,0xaf,0xb0,0xb0,0xb0, + 0xb1,0xb1,0xb1,0xb2,0xb2,0xb2,0xb3,0xb3,0xb3,0xb4,0xb4,0xb4,0xb5,0xb5,0xb5,0xb6, + 0xb6,0xb6,0xb7,0xb7,0xb7,0xb8,0xb8,0xb8,0xb9,0xb9,0xb9,0xba,0xba,0xba,0xbb,0xbb, + 0xbb,0xbc,0xbc,0xbc,0xbd,0xbd,0xbd,0xbe,0xbe,0xbe,0xbf,0xbf,0xbf,0xc0,0xc0,0xc0, + 0xc1,0xc1,0xc1,0xc2,0xc2,0xc2,0xc3,0xc3,0xc3,0xc4,0xc4,0xc4,0xc5,0xc5,0xc5,0xc6, + 0xc6,0xc6,0xc7,0xc7,0xc7,0xc8,0xc8,0xc8,0xc9,0xc9,0xc9,0xca,0xca,0xca,0xcb,0xcb, + 0xcb,0xcc,0xcc,0xcc,0xcd,0xcd,0xcd,0xce,0xce,0xce,0xcf,0xcf,0xcf,0xd0,0xd0,0xd0, + 0xd1,0xd1,0xd1,0xd2,0xd2,0xd2,0xd3,0xd3,0xd3,0xd4,0xd4,0xd4,0xd5,0xd5,0xd5,0xd6, + 0xd6,0xd6,0xd7,0xd7,0xd7,0xd8,0xd8,0xd8,0xd9,0xd9,0xd9,0xda,0xda,0xda,0xdb,0xdb, + 0xdb,0xdc,0xdc,0xdc,0xdd,0xdd,0xdd,0xde,0xde,0xde,0xdf,0xdf,0xdf,0xe0,0xe0,0xe0, + 0xe1,0xe1,0xe1,0xe2,0xe2,0xe2,0xe3,0xe3,0xe3,0xe4,0xe4,0xe4,0xe5,0xe5,0xe5,0xe6, + 0xe6,0xe6,0xe7,0xe7,0xe7,0xe8,0xe8,0xe8,0xe9,0xe9,0xe9,0xea,0xea,0xea,0xeb,0xeb, + 0xeb,0xec,0xec,0xec,0xed,0xed,0xed,0xee,0xee,0xee,0xef,0xef,0xef,0xf0,0xf0,0xf0, + 0xf1,0xf1,0xf1,0xf2,0xf2,0xf2,0xf3,0xf3,0xf3,0xf4,0xf4,0xf4,0xf5,0xf5,0xf5,0xf6, + 0xf6,0xf6,0xf7,0xf7,0xf7,0xf8,0xf8,0xf8,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfb,0xfb, + 0xfb,0xfc,0xfc,0xfc,0xfd,0xfd,0xfd,0xfe,0xfe,0xfe,0xff,0xff,0xff,0x2c,0x00,0x00, + 0x00,0x00,0x40,0x00,0x40,0x00,0x00,0x08,0xff,0x00,0x01,0x04,0x10,0x30,0x80,0x40, + 0x01,0x03,0x07,0x10,0x24,0x50,0xb0,0x80,0x41,0x03,0x07,0x0f,0x20,0x44,0x90,0x30, + 0x81,0x42,0x05,0x0b,0x17,0x30,0x64,0xd0,0xb0,0x81,0x43,0x07,0x0f,0x1f,0x40,0x84, + 0x10,0x31,0x82,0x44,0x09,0x13,0x27,0x50,0xa4,0x50,0xb1,0x82,0x45,0x0b,0x17,0x2f, + 0x60,0xc4,0x90,0x31,0x83,0x46,0x0d,0x1b,0x37,0x70,0xe4,0xd0,0xb1,0x83,0x47,0x0f, + 0x1f,0x3f,0x80,0x04,0x11,0x32,0x84,0x48,0x11,0x23,0x47,0x90,0x24,0x51,0xb2,0x84, + 0x49,0x13,0x27,0x4f,0xa0,0x44,0x91,0x32,0x85,0x4a,0x15,0x2b,0x57,0xb0,0x64,0xd1, + 0xb2,0x85,0x4b,0x17,0x2f,0x5f,0xc0,0x84,0x11,0x33,0x86,0x4c,0x19,0x33,0x67,0xd0, + 0xa4,0x51,0xb3,0x86,0x4d,0x1b,0x37,0x6f,0xe0,0xc4,0x91,0x33,0x87,0x4e,0x1d,0x3b, + 0x77,0xf0,0xe4,0xd1,0xb3,0x87,0x4f,0x1f,0x3f,0x7f,0x00,0x05,0x12,0x34,0x88,0x50, + 0x21,0x43,0x87,0x10,0x25,0x52,0xb4,0x88,0x51,0x23,0x47,0x8f,0x20,0x45,0x92,0x34, + 0x89,0x52,0x25,0x4b,0x97,0x30,0x65,0xd2,0xb4,0x89,0x53,0x27,0x4f,0x9f,0x40,0x85, + 0x12,0x35,0x8a,0x54,0x29,0x53,0xa7,0x50,0xa5,0x52,0xb5,0x8a,0x55,0x2b,0x57,0xaf, + 0x60,0xc5,0x92,0x35,0x8b,0x56,0x2d,0x5b,0xb7,0x70,0xe5,0xd2,0xb5,0x8b,0x57,0x2f, + 0x5f,0xbf,0x80,0x05,0x13,0x36,0x8c,0x58,0x31,0x63,0xc7,0x90,0x25,0x53,0xb6,0x8c, + 0x59,0x33,0x67,0xcf,0xa0,0x45,0x93,0x36,0x8d,0x5a,0x35,0x6b,0xd7,0xb0,0x65,0xd3, + 0xb6,0x8d,0x5b,0x37,0x6f,0xdf,0xc0,0x85,0xff,0x13,0x37,0x8e,0x5c,0x39,0x73,0xe7, + 0xd0,0xa5,0x53,0xb7,0x8e,0x5d,0x3b,0x77,0xef,0xe0,0xc5,0x93,0x37,0x8f,0x5e,0x3d, + 0x7b,0xf7,0xf0,0xe5,0xd3,0xb7,0x8f,0x5f,0x3f,0x7f,0xff,0x00,0x10,0x80,0x00,0x03, + 0x10,0x50,0x80,0x01,0x07,0x20,0x90,0x80,0x02,0x0b,0x30,0xd0,0x80,0x03,0x0f,0x40, + 0x10,0x81,0x04,0x13,0x50,0x50,0x81,0x05,0x17,0x60,0x90,0x81,0x06,0x1b,0x70,0xd0, + 0x81,0x07,0x1f,0x80,0x10,0x82,0x08,0x23,0x90,0x50,0x82,0x09,0x27,0xa0,0x90,0x82, + 0x0a,0x2b,0xb0,0xd0,0x82,0x0b,0x2f,0xc0,0x10,0x83,0x0c,0x33,0xd0,0x50,0x83,0x0d, + 0x37,0xe0,0x90,0x83,0x0e,0x3b,0xf0,0xd0,0x83,0x0f,0x3f,0x00,0x11,0x84,0x10,0x43, + 0x10,0x51,0x84,0x11,0x47,0x20,0x91,0x84,0x12,0x4b,0x30,0xd1,0x84,0x13,0x4f,0x40, + 0x11,0x85,0x14,0x53,0x50,0x51,0x85,0x15,0x57,0x60,0x91,0x85,0x16,0x5b,0x70,0xd1, + 0x85,0x17,0x5f,0x80,0x11,0x86,0x18,0x63,0x90,0x51,0x86,0x19,0x67,0xa0,0x91,0x86, + 0x1a,0x6b,0xb0,0xd1,0x86,0x1b,0x6f,0xc0,0x11,0x87,0x1c,0x73,0xd0,0x51,0x87,0x1d, + 0x77,0xe0,0x91,0x87,0x1e,0x7b,0xf0,0xd1,0x87,0x1f,0x7f,0x00,0x12,0x88,0x20,0x83, + 0x10,0x52,0x88,0x21,0x87,0x20,0x92,0x88,0x22,0x8b,0x30,0xd2,0x88,0x23,0x8f,0x40, + 0x12,0x89,0x24,0x93,0x50,0x52,0x89,0x25,0x97,0x60,0x92,0x89,0x26,0x9b,0x70,0xd2, + 0x89,0x27,0x9f,0x80,0x12,0x8a,0x28,0xa3,0x90,0x52,0x8a,0x29,0xa7,0xa0,0x92,0x8a, + 0x2a,0xab,0xb0,0xd2,0x8a,0x2b,0xaf,0xc0,0xff,0x12,0x8b,0x2c,0xb3,0xd0,0x52,0x8b, + 0x2d,0xb7,0xe0,0x92,0x8b,0x2e,0xbb,0xf0,0xd2,0x8b,0x2f,0xbf,0x00,0x13,0x8c,0x30, + 0xc3,0x10,0x53,0x8c,0x31,0xc7,0x20,0x93,0x8c,0x32,0xcb,0x30,0xd3,0x8c,0x33,0xcf, + 0x40,0x13,0x8d,0x34,0xd3,0x50,0x53,0x8d,0x35,0xd7,0x60,0x93,0x8d,0x36,0xdb,0x70, + 0xd3,0x8d,0x37,0xdf,0x80,0x13,0x8e,0x38,0xe3,0x90,0x53,0x8e,0x39,0xe7,0xa0,0x93, + 0x8e,0x3a,0xeb,0xb0,0xd3,0x8e,0x3b,0xef,0xc0,0x13,0x8f,0x3c,0xf3,0xd0,0x53,0x8f, + 0x3d,0xf7,0xe0,0x93,0x8f,0x3e,0xfb,0xf0,0xd3,0x8f,0x3f,0xff,0x00,0x10,0x80,0x00, + 0x03,0x10,0x50,0x80,0x01,0x07,0x20,0x90,0x80,0x02,0x0b,0x30,0xd0,0x80,0x03,0x0f, + 0x40,0x10,0x81,0x04,0x13,0x50,0x50,0x81,0x05,0x17,0x60,0x90,0x81,0x06,0x1b,0x70, + 0xd0,0x81,0x07,0x1f,0x80,0x10,0x82,0x08,0x23,0x90,0x50,0x82,0x09,0x27,0xa0,0x90, + 0x82,0x0a,0x2b,0xb0,0xd0,0x82,0x0b,0x2f,0xc0,0x10,0x83,0x0c,0x33,0xd0,0x50,0x83, + 0x0d,0x37,0xe0,0x90,0x83,0x0e,0x3b,0xf0,0xd0,0x83,0x0f,0x3f,0x00,0x11,0x84,0x10, + 0x43,0x10,0x51,0x84,0x11,0x47,0x20,0x91,0x84,0x12,0x4b,0x30,0xd1,0x84,0x13,0x4f, + 0x40,0x11,0x85,0x14,0x53,0x50,0x51,0x85,0x15,0x57,0x60,0x91,0x85,0x16,0x5b,0x70, + 0xd1,0x85,0x17,0x5f,0x80,0x11,0x86,0x18,0x63,0x90,0x51,0x86,0x19,0x67,0xa0,0x91, + 0x86,0x1a,0x6b,0xb0,0xd1,0x86,0x1b,0x6f,0xc0,0x11,0x87,0x1c,0x73,0xd0,0x51,0x87, + 0x1d,0x77,0xe0,0x91,0x87,0x1e,0x7b,0xf0,0xff,0xd1,0x87,0x1f,0x7f,0x00,0x12,0x88, + 0x20,0x83,0x10,0x52,0x88,0x21,0x87,0x20,0x92,0x88,0x22,0x8b,0x30,0xd2,0x88,0x23, + 0x8f,0x40,0x12,0x89,0x24,0x93,0x50,0x52,0x89,0x25,0x97,0x60,0x92,0x89,0x26,0x9b, + 0x70,0xd2,0x89,0x27,0x9f,0x80,0x12,0x8a,0x28,0xa3,0x90,0x52,0x8a,0x29,0xa7,0xa0, + 0x92,0x8a,0x2a,0xab,0xb0,0xd2,0x8a,0x2b,0xaf,0xc0,0x12,0x8b,0x2c,0xb3,0xd0,0x52, + 0x8b,0x2d,0xb7,0xe0,0x92,0x8b,0x2e,0xbb,0xf0,0xd2,0x8b,0x2f,0xbf,0x00,0x13,0x8c, + 0x30,0xc3,0x10,0x53,0x8c,0x31,0xc7,0x20,0x93,0x8c,0x32,0xcb,0x30,0xd3,0x8c,0x33, + 0xcf,0x40,0x13,0x8d,0x34,0xd3,0x50,0x53,0x8d,0x35,0xd7,0x60,0x93,0x8d,0x36,0xdb, + 0x70,0xd3,0x8d,0x37,0xdf,0x80,0x13,0x8e,0x38,0xe3,0x90,0x53,0x8e,0x39,0xe7,0xa0, + 0x93,0x8e,0x3a,0xeb,0xb0,0xd3,0x8e,0x3b,0xef,0xc0,0x13,0x8f,0x3c,0xf3,0xd0,0x53, + 0x8f,0x3d,0xf7,0xe0,0x93,0x8f,0x3e,0xfb,0xf0,0xd3,0x8f,0x3f,0xff,0x00,0x40,0x00, + 0x04,0x30,0x00,0x02,0x14,0xc0,0x00,0x07,0x40,0x40,0x02,0x14,0xb0,0x00,0x06,0x34, + 0xc0,0x01,0x0f,0x80,0x40,0x04,0x24,0x30,0x01,0x0a,0x54,0xc0,0x02,0x17,0xc0,0x40, + 0x06,0x34,0xb0,0x01,0x0e,0x74,0xc0,0x03,0x1f,0x00,0x41,0x08,0x44,0x30,0x02,0x12, + 0x94,0xc0,0x04,0x27,0x40,0x41,0x0a,0x54,0xb0,0x02,0x16,0xb4,0xc0,0x05,0x2f,0x80, + 0x41,0x0c,0x64,0x30,0x03,0x1a,0xd4,0xc0,0x06,0x37,0xc0,0x41,0x0e,0x74,0xb0,0x03, + 0x1e,0xf4,0xc0,0x07,0x3f,0x00,0x42,0x10,0xff,0x84,0x30,0x04,0x22,0x14,0xc1,0x08, + 0x47,0x40,0x42,0x12,0x94,0xb0,0x04,0x26,0x34,0xc1,0x09,0x4f,0x80,0x42,0x14,0xa4, + 0x30,0x05,0x2a,0x54,0xc1,0x0a,0x57,0xc0,0x42,0x16,0xb4,0xb0,0x05,0x2e,0x74,0xc1, + 0x0b,0x5f,0x00,0x43,0x18,0xc4,0x30,0x06,0x32,0x94,0xc1,0x0c,0x67,0x40,0x43,0x1a, + 0xd4,0xb0,0x06,0x36,0xb4,0xc1,0x0d,0x6f,0x80,0x43,0x1c,0xe4,0x30,0x07,0x3a,0xd4, + 0xc1,0x0e,0x77,0xc0,0x43,0x1e,0xf4,0xb0,0x07,0x3e,0xf4,0xc1,0x0f,0x7f,0x00,0x44, + 0x20,0x04,0x31,0x08,0x42,0x14,0xc2,0x10,0x87,0x40,0x44,0x22,0x14,0xb1,0x08,0x46, + 0x34,0xc2,0x11,0x8f,0x80,0x44,0x24,0x24,0x31,0x09,0x4a,0x54,0xc2,0x12,0x97,0xc0, + 0x44,0x26,0x34,0xb1,0x09,0x4e,0x74,0xc2,0x13,0x9f,0x00,0x45,0x28,0x44,0x31,0x0a, + 0x52,0x94,0xc2,0x14,0xa7,0x40,0x45,0x2a,0x54,0xb1,0x0a,0x56,0xb4,0xc2,0x15,0xaf, + 0x80,0x45,0x2c,0x64,0x31,0x0b,0x5a,0xd4,0xc2,0x16,0xb7,0xc0,0x45,0x2e,0x74,0xb1, + 0x0b,0x5e,0xf4,0xc2,0x17,0xbf,0x00,0x46,0x30,0x84,0x31,0x0c,0x62,0x14,0xc3,0x18, + 0xc7,0x40,0x46,0x32,0x94,0xb1,0x0c,0x66,0x34,0xc3,0x19,0xcf,0x80,0x46,0x34,0xa4, + 0x31,0x0d,0x6a,0x54,0xc3,0x1a,0xd7,0xc0,0x46,0x36,0xb4,0xb1,0x0d,0x6e,0x74,0xc3, + 0x1b,0xdf,0x00,0x47,0x38,0xc4,0x31,0x0e,0x72,0x94,0xc3,0x1c,0xe7,0x40,0x47,0x3a, + 0xd4,0xb1,0x0e,0x76,0xb4,0xc3,0x1d,0xef,0x80,0x47,0x3c,0xe4,0x31,0x0f,0x7a,0xd4, + 0xc3,0x1e,0xf7,0xc0,0x47,0x3e,0xf4,0xb1,0xff,0x0f,0x7e,0xf4,0xc3,0x1f,0xff,0x00, + 0x40,0x00,0x04,0x30,0x00,0x02,0x14,0xc0,0x00,0x07,0x40,0x40,0x02,0x14,0xb0,0x00, + 0x06,0x34,0xc0,0x01,0x0f,0x80,0x40,0x04,0x24,0x30,0x01,0x0a,0x54,0xc0,0x02,0x17, + 0xc0,0x40,0x06,0x34,0xb0,0x01,0x0e,0x74,0xc0,0x03,0x1f,0x00,0x41,0x08,0x44,0x30, + 0x02,0x12,0x94,0xc0,0x04,0x27,0x40,0x41,0x0a,0x54,0xb0,0x02,0x16,0xb4,0xc0,0x05, + 0x2f,0x80,0x41,0x0c,0x64,0x30,0x03,0x1a,0xd4,0xc0,0x06,0x37,0xc0,0x41,0x0e,0x74, + 0xb0,0x03,0x1e,0xf4,0xc0,0x07,0x3f,0x00,0x42,0x10,0x84,0x30,0x04,0x22,0x14,0xc1, + 0x08,0x47,0x40,0x42,0x12,0x94,0xb0,0x04,0x26,0x34,0xc1,0x09,0x4f,0x80,0x42,0x14, + 0xa4,0x30,0x05,0x2a,0x54,0xc1,0x0a,0x57,0xc0,0x42,0x16,0xb4,0xb0,0x05,0x2e,0x74, + 0xc1,0x0b,0x5f,0x00,0x43,0x18,0xc4,0x30,0x06,0x32,0x94,0xc1,0x0c,0x67,0x40,0x43, + 0x1a,0xd4,0xb0,0x06,0x36,0xb4,0xc1,0x0d,0x6f,0x80,0x43,0x1c,0xe4,0x30,0x07,0x3a, + 0xd4,0xc1,0x0e,0x77,0xc0,0x43,0x1e,0xf4,0xb0,0x07,0x3e,0xf4,0xc1,0x0f,0x7f,0x00, + 0x44,0x20,0x04,0x31,0x08,0x42,0x14,0xc2,0x10,0x87,0x40,0x44,0x22,0x14,0xb1,0x08, + 0x46,0x34,0xc2,0x11,0x8f,0x80,0x44,0x24,0x24,0x31,0x09,0x4a,0x54,0xc2,0x12,0x97, + 0xc0,0x44,0x26,0x34,0xb1,0x09,0x4e,0x74,0xc2,0x13,0x9f,0x00,0x45,0x28,0x44,0x31, + 0x0a,0x52,0x94,0xc2,0x14,0xa7,0x40,0x45,0x2a,0x54,0xb1,0x0a,0x56,0xb4,0xc2,0x15, + 0xaf,0x80,0x45,0x2c,0x64,0x31,0x0b,0x5a,0xff,0xd4,0xc2,0x16,0xb7,0xc0,0x45,0x2e, + 0x74,0xb1,0x0b,0x5e,0xf4,0xc2,0x17,0xbf,0x00,0x46,0x30,0x84,0x31,0x0c,0x62,0x14, + 0xc3,0x18,0xc7,0x40,0x46,0x32,0x94,0xb1,0x0c,0x66,0x34,0xc3,0x19,0xcf,0x80,0x46, + 0x34,0xa4,0x31,0x0d,0x6a,0x54,0xc3,0x1a,0xd7,0xc0,0x46,0x36,0xb4,0xb1,0x0d,0x6e, + 0x74,0xc3,0x1b,0xdf,0x00,0x47,0x38,0xc4,0x31,0x0e,0x72,0x94,0xc3,0x1c,0xe7,0x40, + 0x47,0x3a,0xd4,0xb1,0x0e,0x76,0xb4,0xc3,0x1d,0xef,0x80,0x47,0x3c,0xe4,0x31,0x0f, + 0x7a,0xd4,0xc3,0x1e,0xf7,0xc0,0x47,0x3e,0xf4,0xb1,0x0f,0x7e,0xf4,0xc3,0x1f,0xff, + 0x00,0x40,0x00,0x04,0x30,0x00,0x02,0x14,0xc0,0x00,0x07,0x40,0x40,0x02,0x14,0xb0, + 0x00,0x06,0x34,0xc0,0x01,0x0f,0x80,0x40,0x04,0x24,0x30,0x01,0x0a,0x54,0xc0,0x02, + 0x17,0xc0,0x40,0x06,0x34,0xb0,0x01,0x0e,0x74,0xc0,0x03,0x1f,0x00,0x41,0x08,0x44, + 0x30,0x02,0x12,0x94,0xc0,0x04,0x27,0x40,0x41,0x0a,0x54,0xb0,0x02,0x16,0xb4,0xc0, + 0x05,0x2f,0x80,0x41,0x0c,0x64,0x30,0x03,0x1a,0xd4,0xc0,0x06,0x37,0xc0,0x41,0x0e, + 0x74,0xb0,0x03,0x1e,0xf4,0xc0,0x07,0x3f,0x00,0x42,0x10,0x84,0x30,0x04,0x22,0x14, + 0xc1,0x08,0x47,0x40,0x42,0x12,0x94,0xb0,0x04,0x26,0x34,0xc1,0x09,0x4f,0x80,0x42, + 0x14,0xa4,0x30,0x05,0x2a,0x54,0xc1,0x0a,0x57,0xc0,0x42,0x16,0xb4,0xb0,0x05,0x2e, + 0x74,0xc1,0x0b,0x5f,0x00,0x43,0x18,0xc4,0x30,0x06,0x32,0x94,0xc1,0x0c,0x67,0x40, + 0x43,0x1a,0xd4,0xb0,0x06,0x36,0xb4,0xc1,0xff,0x0d,0x6f,0x80,0x43,0x1c,0xe4,0x30, + 0x07,0x3a,0xd4,0xc1,0x0e,0x77,0xc0,0x43,0x1e,0xf4,0xb0,0x07,0x3e,0xf4,0xc1,0x0f, + 0x7f,0x00,0x44,0x20,0x04,0x31,0x08,0x42,0x14,0xc2,0x10,0x87,0x40,0x44,0x22,0x14, + 0xb1,0x08,0x46,0x34,0xc2,0x11,0x8f,0x80,0x44,0x24,0x24,0x31,0x09,0x4a,0x54,0xc2, + 0x12,0x97,0xc0,0x44,0x26,0x34,0xb1,0x09,0x4e,0x74,0xc2,0x13,0x9f,0x00,0x45,0x28, + 0x44,0x31,0x0a,0x52,0x94,0xc2,0x14,0xa7,0x40,0x45,0x2a,0x54,0xb1,0x0a,0x56,0xb4, + 0xc2,0x15,0xaf,0x80,0x45,0x2c,0x64,0x31,0x0b,0x5a,0xd4,0xc2,0x16,0xb7,0xc0,0x45, + 0x2e,0x74,0xb1,0x0b,0x5e,0xf4,0xc2,0x17,0xbf,0x00,0x46,0x30,0x84,0x31,0x0c,0x62, + 0x14,0xc3,0x18,0xc7,0x40,0x46,0x32,0x94,0xb1,0x0c,0x66,0x34,0xc3,0x19,0xcf,0x80, + 0x46,0x34,0xa4,0x31,0x0d,0x6a,0x54,0xc3,0x1a,0xd7,0xc0,0x46,0x36,0xb4,0xb1,0x0d, + 0x6e,0x74,0xc3,0x1b,0xdf,0x00,0x47,0x38,0xc4,0x31,0x0e,0x72,0x94,0xc3,0x1c,0xe7, + 0x40,0x47,0x3a,0xd4,0xb1,0x0e,0x76,0xb4,0xc3,0x1d,0xef,0x80,0x47,0x3c,0xe4,0x31, + 0x0f,0x7a,0xd4,0xc3,0x1e,0xf7,0xc0,0x47,0x3e,0xf4,0xb1,0x0f,0x7e,0xf4,0xc3,0x1f, + 0xff,0x00,0x40,0x00,0x04,0x30,0x00,0x02,0x14,0xc0,0x00,0x07,0x40,0x40,0x02,0x14, + 0xb0,0x00,0x06,0x34,0xc0,0x01,0x0f,0x80,0x40,0x04,0x24,0x30,0x01,0x0a,0x54,0xc0, + 0x02,0x17,0xc0,0x40,0x06,0x34,0xb0,0x01,0x0e,0x74,0xc0,0x03,0x1f,0x00,0x41,0x08, + 0x44,0x30,0x02,0x12,0x94,0xc0,0x04,0x27,0xff,0x40,0x41,0x0a,0x54,0xb0,0x02,0x16, + 0xb4,0xc0,0x05,0x2f,0x80,0x41,0x0c,0x64,0x30,0x03,0x1a,0xd4,0xc0,0x06,0x37,0xc0, + 0x41,0x0e,0x74,0xb0,0x03,0x1e,0xf4,0xc0,0x07,0x3f,0x00,0x42,0x10,0x84,0x30,0x04, + 0x22,0x14,0xc1,0x08,0x47,0x40,0x42,0x12,0x94,0xb0,0x04,0x26,0x34,0xc1,0x09,0x4f, + 0x80,0x42,0x14,0xa4,0x30,0x05,0x2a,0x54,0xc1,0x0a,0x57,0xc0,0x42,0x16,0xb4,0xb0, + 0x05,0x2e,0x74,0xc1,0x0b,0x5f,0x00,0x43,0x18,0xc4,0x30,0x06,0x32,0x94,0xc1,0x0c, + 0x67,0x40,0x43,0x1a,0xd4,0xb0,0x06,0x36,0xb4,0xc1,0x0d,0x6f,0x80,0x43,0x1c,0xe4, + 0x30,0x07,0x3a,0xd4,0xc1,0x0e,0x77,0xc0,0x43,0x1e,0xf4,0xb0,0x07,0x3e,0xf4,0xc1, + 0x0f,0x7f,0x00,0x44,0x20,0x04,0x31,0x08,0x42,0x14,0xc2,0x10,0x87,0x40,0x44,0x22, + 0x14,0xb1,0x08,0x46,0x34,0xc2,0x11,0x8f,0x80,0x44,0x24,0x24,0x31,0x09,0x4a,0x54, + 0xc2,0x12,0x97,0xc0,0x44,0x26,0x34,0xb1,0x09,0x4e,0x74,0xc2,0x13,0x9f,0x00,0x45, + 0x28,0x44,0x31,0x0a,0x52,0x94,0xc2,0x14,0xa7,0x40,0x45,0x2a,0x54,0xb1,0x0a,0x56, + 0xb4,0xc2,0x15,0xaf,0x80,0x45,0x2c,0x64,0x31,0x0b,0x5a,0xd4,0xc2,0x16,0xb7,0xc0, + 0x45,0x2e,0x74,0xb1,0x0b,0x5e,0xf4,0xc2,0x17,0xbf,0x00,0x46,0x30,0x84,0x31,0x0c, + 0x62,0x14,0xc3,0x18,0xc7,0x40,0x46,0x32,0x94,0xb1,0x0c,0x66,0x34,0xc3,0x19,0xcf, + 0x80,0x46,0x34,0xa4,0x31,0x0d,0x6a,0x54,0xc3,0x1a,0xd7,0xc0,0x46,0x36,0xb4,0xb1, + 0x0d,0x6e,0x74,0xc3,0x1b,0xdf,0x00,0x47,0xff,0x38,0xc4,0x31,0x0e,0x72,0x94,0xc3, + 0x1c,0xe7,0x40,0x47,0x3a,0xd4,0xb1,0x0e,0x76,0xb4,0xc3,0x1d,0xef,0x80,0x47,0x3c, + 0xe4,0x31,0x0f,0x7a,0xd4,0xc3,0x1e,0xf7,0xc0,0x47,0x3e,0xf4,0xb1,0x0f,0x7e,0xf4, + 0xc3,0x1f,0xff,0x00,0x00,0x01,0x20,0x00,0x03,0x40,0x00,0x05,0x60,0x00,0x07,0x80, + 0x00,0x09,0xa0,0x00,0x0b,0xc0,0x00,0x0d,0xe0,0x00,0x0f,0x00,0x01,0x11,0x20,0x01, + 0x13,0x40,0x01,0x15,0x60,0x01,0x17,0x80,0x01,0x19,0xa0,0x01,0x1b,0xc0,0x01,0x1d, + 0xe0,0x01,0x1f,0x00,0x02,0x21,0x20,0x02,0x23,0x40,0x02,0x25,0x60,0x02,0x27,0x80, + 0x02,0x29,0xa0,0x02,0x2b,0xc0,0x02,0x2d,0xe0,0x02,0x2f,0x00,0x03,0x31,0x20,0x03, + 0x33,0x40,0x03,0x35,0x60,0x03,0x37,0x80,0x03,0x39,0xa0,0x03,0x3b,0xc0,0x03,0x3d, + 0xe0,0x03,0x3f,0x00,0x04,0x41,0x20,0x04,0x43,0x40,0x04,0x45,0x60,0x04,0x47,0x80, + 0x04,0x49,0xa0,0x04,0x4b,0xc0,0x04,0x4d,0xe0,0x04,0x4f,0x00,0x05,0x51,0x20,0x05, + 0x53,0x40,0x05,0x55,0x60,0x05,0x57,0x80,0x05,0x59,0xa0,0x05,0x5b,0xc0,0x05,0x5d, + 0xe0,0x05,0x5f,0x00,0x06,0x61,0x20,0x06,0x63,0x40,0x06,0x65,0x60,0x06,0x67,0x80, + 0x06,0x69,0xa0,0x06,0x6b,0xc0,0x06,0x6d,0xe0,0x06,0x6f,0x00,0x07,0x71,0x20,0x07, + 0x73,0x40,0x07,0x75,0x60,0x07,0x77,0x80,0x07,0x79,0xa0,0x07,0x7b,0xc0,0x07,0x7d, + 0xe0,0x07,0x7f,0x00,0x08,0x81,0x20,0x08,0x83,0x40,0x08,0x85,0x60,0x08,0x87,0x80, + 0x08,0x89,0xa0,0x08,0x8b,0xc0,0x08,0x8d,0xff,0xe0,0x08,0x8f,0x00,0x09,0x91,0x20, + 0x09,0x93,0x40,0x09,0x95,0x60,0x09,0x97,0x80,0x09,0x99,0xa0,0x09,0x9b,0xc0,0x09, + 0x9d,0xe0,0x09,0x9f,0x00,0x0a,0xa1,0x20,0x0a,0xa3,0x40,0x0a,0xa5,0x60,0x0a,0xa7, + 0x80,0x0a,0xa9,0xa0,0x0a,0xab,0xc0,0x0a,0xad,0xe0,0x0a,0xaf,0x00,0x0b,0xb1,0x20, + 0x0b,0xb3,0x40,0x0b,0xb5,0x60,0x0b,0xb7,0x80,0x0b,0xb9,0xa0,0x0b,0xbb,0xc0,0x0b, + 0xbd,0xe0,0x0b,0xbf,0x00,0x0c,0xc1,0x20,0x0c,0xc3,0x40,0x0c,0xc5,0x60,0x0c,0xc7, + 0x80,0x0c,0xc9,0xa0,0x0c,0xcb,0xc0,0x0c,0xcd,0xe0,0x0c,0xcf,0x00,0x0d,0xd1,0x20, + 0x0d,0xd3,0x40,0x0d,0xd5,0x60,0x0d,0xd7,0x80,0x0d,0xd9,0xa0,0x0d,0xdb,0xc0,0x0d, + 0xdd,0xe0,0x0d,0xdf,0x00,0x0e,0xe1,0x20,0x0e,0xe3,0x40,0x0e,0xe5,0x60,0x0e,0xe7, + 0x80,0x0e,0xe9,0xa0,0x0e,0xeb,0xc0,0x0e,0xed,0xe0,0x0e,0xef,0x00,0x0f,0xf1,0x20, + 0x0f,0xf3,0x40,0x0f,0xf5,0x60,0x0f,0xf7,0x80,0x0f,0xf9,0xa0,0x0f,0xfb,0xc0,0x0f, + 0xfd,0xe0,0x0f,0xff,0x00,0x00,0x01,0x20,0x00,0x03,0x40,0x00,0x05,0x60,0x00,0x07, + 0x80,0x00,0x09,0xa0,0x00,0x0b,0xc0,0x00,0x0d,0xe0,0x00,0x0f,0x00,0x01,0x11,0x20, + 0x01,0x13,0x40,0x01,0x15,0x60,0x01,0x17,0x80,0x01,0x19,0xa0,0x01,0x1b,0xc0,0x01, + 0x1d,0xe0,0x01,0x1f,0x00,0x02,0x21,0x20,0x02,0x23,0x40,0x02,0x25,0x60,0x02,0x27, + 0x80,0x02,0x29,0xa0,0x02,0x2b,0xc0,0x02,0x2d,0xe0,0x02,0x2f,0x00,0x03,0x31,0x20, + 0x03,0x33,0x40,0x03,0x35,0x60,0x03,0x37,0xff,0x80,0x03,0x39,0xa0,0x03,0x3b,0xc0, + 0x03,0x3d,0xe0,0x03,0x3f,0x00,0x04,0x41,0x20,0x04,0x43,0x40,0x04,0x45,0x60,0x04, + 0x47,0x80,0x04,0x49,0xa0,0x04,0x4b,0xc0,0x04,0x4d,0xe0,0x04,0x4f,0x00,0x05,0x51, + 0x20,0x05,0x53,0x40,0x05,0x55,0x60,0x05,0x57,0x80,0x05,0x59,0xa0,0x05,0x5b,0xc0, + 0x05,0x5d,0xe0,0x05,0x5f,0x00,0x06,0x61,0x20,0x06,0x63,0x40,0x06,0x65,0x60,0x06, + 0x67,0x80,0x06,0x69,0xa0,0x06,0x6b,0xc0,0x06,0x6d,0xe0,0x06,0x6f,0x00,0x07,0x71, + 0x20,0x07,0x73,0x40,0x07,0x75,0x60,0x07,0x77,0x80,0x07,0x79,0xa0,0x07,0x7b,0xc0, + 0x07,0x7d,0xe0,0x07,0x7f,0x00,0x08,0x81,0x20,0x08,0x83,0x40,0x08,0x85,0x60,0x08, + 0x87,0x80,0x08,0x89,0xa0,0x08,0x8b,0xc0,0x08,0x8d,0xe0,0x08,0x8f,0x00,0x09,0x91, + 0x20,0x09,0x93,0x40,0x09,0x95,0x60,0x09,0x97,0x80,0x09,0x99,0xa0,0x09,0x9b,0xc0, + 0x09,0x9d,0xe0,0x09,0x9f,0x00,0x0a,0xa1,0x20,0x0a,0xa3,0x40,0x0a,0xa5,0x60,0x0a, + 0xa7,0x80,0x0a,0xa9,0xa0,0x0a,0xab,0xc0,0x0a,0xad,0xe0,0x0a,0xaf,0x00,0x0b,0xb1, + 0x20,0x0b,0xb3,0x40,0x0b,0xb5,0x60,0x0b,0xb7,0x80,0x0b,0xb9,0xa0,0x0b,0xbb,0xc0, + 0x0b,0xbd,0xe0,0x0b,0xbf,0x00,0x0c,0xc1,0x20,0x0c,0xc3,0x40,0x0c,0xc5,0x60,0x0c, + 0xc7,0x80,0x0c,0xc9,0xa0,0x0c,0xcb,0xc0,0x0c,0xcd,0xe0,0x0c,0xcf,0x00,0x0d,0xd1, + 0x20,0x0d,0xd3,0x40,0x0d,0xd5,0x60,0x0d,0xd7,0x80,0x0d,0xd9,0xa0,0x0d,0xdb,0xc0, + 0x0d,0xdd,0xe0,0x0d,0xdf,0x00,0x0e,0xe1,0xff,0x20,0x0e,0xe3,0x40,0x0e,0xe5,0x60, + 0x0e,0xe7,0x80,0x0e,0xe9,0xa0,0x0e,0xeb,0xc0,0x0e,0xed,0xe0,0x0e,0xef,0x00,0x0f, + 0xf1,0x20,0x0f,0xf3,0x40,0x0f,0xf5,0x60,0x0f,0xf7,0x80,0x0f,0xf9,0xa0,0x0f,0xfb, + 0xc0,0x0f,0xfd,0xe0,0x0f,0xff,0x00,0x00,0x01,0x20,0x00,0x03,0x40,0x00,0x05,0x60, + 0x00,0x07,0x80,0x00,0x09,0xa0,0x00,0x0b,0xc0,0x00,0x0d,0xe0,0x00,0x0f,0x00,0x01, + 0x11,0x20,0x01,0x13,0x40,0x01,0x15,0x60,0x01,0x17,0x80,0x01,0x19,0xa0,0x01,0x1b, + 0xc0,0x01,0x1d,0xe0,0x01,0x1f,0x00,0x02,0x21,0x20,0x02,0x23,0x40,0x02,0x25,0x60, + 0x02,0x27,0x80,0x02,0x29,0xa0,0x02,0x2b,0xc0,0x02,0x2d,0xe0,0x02,0x2f,0x00,0x03, + 0x31,0x20,0x03,0x33,0x40,0x03,0x35,0x60,0x03,0x37,0x80,0x03,0x39,0xa0,0x03,0x3b, + 0xc0,0x03,0x3d,0xe0,0x03,0x3f,0x00,0x04,0x41,0x20,0x04,0x43,0x40,0x04,0x45,0x60, + 0x04,0x47,0x80,0x04,0x49,0xa0,0x04,0x4b,0xc0,0x04,0x4d,0xe0,0x04,0x4f,0x00,0x05, + 0x51,0x20,0x05,0x53,0x40,0x05,0x55,0x60,0x05,0x57,0x80,0x05,0x59,0xa0,0x05,0x5b, + 0xc0,0x05,0x5d,0xe0,0x05,0x5f,0x00,0x06,0x61,0x20,0x06,0x63,0x40,0x06,0x65,0x60, + 0x06,0x67,0x80,0x06,0x69,0xa0,0x06,0x6b,0xc0,0x06,0x6d,0xe0,0x06,0x6f,0x00,0x07, + 0x71,0x20,0x07,0x73,0x40,0x07,0x75,0x60,0x07,0x77,0x80,0x07,0x79,0xa0,0x07,0x7b, + 0xc0,0x07,0x7d,0xe0,0x07,0x7f,0x00,0x08,0x81,0x20,0x08,0x83,0x40,0x08,0x85,0x60, + 0x08,0x87,0x80,0x08,0x89,0xa0,0x08,0x8b,0xff,0xc0,0x08,0x8d,0xe0,0x08,0x8f,0x00, + 0x09,0x91,0x20,0x09,0x93,0x40,0x09,0x95,0x60,0x09,0x97,0x80,0x09,0x99,0xa0,0x09, + 0x9b,0xc0,0x09,0x9d,0xe0,0x09,0x9f,0x00,0x0a,0xa1,0x20,0x0a,0xa3,0x40,0x0a,0xa5, + 0x60,0x0a,0xa7,0x80,0x0a,0xa9,0xa0,0x0a,0xab,0xc0,0x0a,0xad,0xe0,0x0a,0xaf,0x00, + 0x0b,0xb1,0x20,0x0b,0xb3,0x40,0x0b,0xb5,0x60,0x0b,0xb7,0x80,0x0b,0xb9,0xa0,0x0b, + 0xbb,0xc0,0x0b,0xbd,0xe0,0x0b,0xbf,0x00,0x0c,0xc1,0x20,0x0c,0xc3,0x40,0x0c,0xc5, + 0x60,0x0c,0xc7,0x80,0x0c,0xc9,0xa0,0x0c,0xcb,0xc0,0x0c,0xcd,0xe0,0x0c,0xcf,0x00, + 0x0d,0xd1,0x20,0x0d,0xd3,0x40,0x0d,0xd5,0x60,0x0d,0xd7,0x80,0x0d,0xd9,0xa0,0x0d, + 0xdb,0xc0,0x0d,0xdd,0xe0,0x0d,0xdf,0x00,0x0e,0xe1,0x20,0x0e,0xe3,0x40,0x0e,0xe5, + 0x60,0x0e,0xe7,0x80,0x0e,0xe9,0xa0,0x0e,0xeb,0xc0,0x0e,0xed,0xe0,0x0e,0xef,0x00, + 0x0f,0xf1,0x20,0x0f,0xf3,0x40,0x0f,0xf5,0x60,0x0f,0xf7,0x80,0x0f,0xf9,0xa0,0x0f, + 0xfb,0xc0,0x0f,0xfd,0xe0,0x0f,0xff,0x00,0x00,0x01,0x20,0x00,0x03,0x40,0x00,0x05, + 0x60,0x00,0x07,0x80,0x00,0x09,0xa0,0x00,0x0b,0xc0,0x00,0x0d,0xe0,0x00,0x0f,0x00, + 0x01,0x11,0x20,0x01,0x13,0x40,0x01,0x15,0x60,0x01,0x17,0x80,0x01,0x19,0xa0,0x01, + 0x1b,0xc0,0x01,0x1d,0xe0,0x01,0x1f,0x00,0x02,0x21,0x20,0x02,0x23,0x40,0x02,0x25, + 0x60,0x02,0x27,0x80,0x02,0x29,0xa0,0x02,0x2b,0xc0,0x02,0x2d,0xe0,0x02,0x2f,0x00, + 0x03,0x31,0x20,0x03,0x33,0x40,0x03,0x35,0xff,0x60,0x03,0x37,0x80,0x03,0x39,0xa0, + 0x03,0x3b,0xc0,0x03,0x3d,0xe0,0x03,0x3f,0x00,0x04,0x41,0x20,0x04,0x43,0x40,0x04, + 0x45,0x60,0x04,0x47,0x80,0x04,0x49,0xa0,0x04,0x4b,0xc0,0x04,0x4d,0xe0,0x04,0x4f, + 0x00,0x05,0x51,0x20,0x05,0x53,0x40,0x05,0x55,0x60,0x05,0x57,0x80,0x05,0x59,0xa0, + 0x05,0x5b,0xc0,0x05,0x5d,0xe0,0x05,0x5f,0x00,0x06,0x61,0x20,0x06,0x63,0x40,0x06, + 0x65,0x60,0x06,0x67,0x80,0x06,0x69,0xa0,0x06,0x6b,0xc0,0x06,0x6d,0xe0,0x06,0x6f, + 0x00,0x07,0x71,0x20,0x07,0x73,0x40,0x07,0x75,0x60,0x07,0x77,0x80,0x07,0x79,0xa0, + 0x07,0x7b,0xc0,0x07,0x7d,0xe0,0x07,0x7f,0x00,0x08,0x81,0x20,0x08,0x83,0x40,0x08, + 0x85,0x60,0x08,0x87,0x80,0x08,0x89,0xa0,0x08,0x8b,0xc0,0x08,0x8d,0xe0,0x08,0x8f, + 0x00,0x09,0x91,0x20,0x09,0x93,0x40,0x09,0x95,0x60,0x09,0x97,0x80,0x09,0x99,0xa0, + 0x09,0x9b,0xc0,0x09,0x9d,0xe0,0x09,0x9f,0x00,0x0a,0xa1,0x20,0x0a,0xa3,0x40,0x0a, + 0xa5,0x60,0x0a,0xa7,0x80,0x0a,0xa9,0xa0,0x0a,0xab,0xc0,0x0a,0xad,0xe0,0x0a,0xaf, + 0x00,0x0b,0xb1,0x20,0x0b,0xb3,0x40,0x0b,0xb5,0x60,0x0b,0xb7,0x80,0x0b,0xb9,0xa0, + 0x0b,0xbb,0xc0,0x0b,0xbd,0xe0,0x0b,0xbf,0x00,0x0c,0xc1,0x20,0x0c,0xc3,0x40,0x0c, + 0xc5,0x60,0x0c,0xc7,0x80,0x0c,0xc9,0xa0,0x0c,0xcb,0xc0,0x0c,0xcd,0xe0,0x0c,0xcf, + 0x00,0x0d,0xd1,0x20,0x0d,0xd3,0x40,0x0d,0xd5,0x60,0x0d,0xd7,0x80,0x0d,0xd9,0xa0, + 0x0d,0xdb,0xc0,0x0d,0xdd,0xe0,0x0d,0xdf,0xff,0x00,0x0e,0xe1,0x20,0x0e,0xe3,0x40, + 0x0e,0xe5,0x60,0x0e,0xe7,0x80,0x0e,0xe9,0xa0,0x0e,0xeb,0xc0,0x0e,0xed,0xe0,0x0e, + 0xef,0x00,0x0f,0xf1,0x20,0x0f,0xf3,0x40,0x0f,0xf5,0x60,0x0f,0xf7,0x80,0x0f,0xf9, + 0xa0,0x0f,0xfb,0xc0,0x0f,0xfd,0xe0,0x0f,0xff,0x00,0x00,0x01,0x20,0x00,0x03,0x40, + 0x00,0x05,0x60,0x00,0x07,0x80,0x00,0x09,0xa0,0x00,0x0b,0xc0,0x00,0x0d,0xe0,0x00, + 0x0f,0x00,0x01,0x11,0x20,0x01,0x13,0x40,0x01,0x15,0x60,0x01,0x17,0x80,0x01,0x19, + 0xa0,0x01,0x1b,0xc0,0x01,0x1d,0xe0,0x01,0x1f,0x00,0x02,0x21,0x20,0x02,0x23,0x40, + 0x02,0x25,0x60,0x02,0x27,0x80,0x02,0x29,0xa0,0x02,0x2b,0xc0,0x02,0x2d,0xe0,0x02, + 0x2f,0x00,0x03,0x31,0x20,0x03,0x33,0x40,0x03,0x35,0x60,0x03,0x37,0x80,0x03,0x39, + 0xa0,0x03,0x3b,0xc0,0x03,0x3d,0xe0,0x03,0x3f,0x00,0x04,0x41,0x20,0x04,0x43,0x40, + 0x04,0x45,0x60,0x04,0x47,0x80,0x04,0x49,0xa0,0x04,0x4b,0xc0,0x04,0x4d,0xe0,0x04, + 0x4f,0x00,0x05,0x51,0x20,0x05,0x53,0x40,0x05,0x55,0x60,0x05,0x57,0x80,0x05,0x59, + 0xa0,0x05,0x5b,0xc0,0x05,0x5d,0xe0,0x05,0x5f,0x00,0x06,0x61,0x20,0x06,0x63,0x40, + 0x06,0x65,0x60,0x06,0x67,0x80,0x06,0x69,0xa0,0x06,0x6b,0xc0,0x06,0x6d,0xe0,0x06, + 0x6f,0x00,0x07,0x71,0x20,0x07,0x73,0x40,0x07,0x75,0x60,0x07,0x77,0x80,0x07,0x79, + 0xa0,0x07,0x7b,0xc0,0x07,0x7d,0xe0,0x07,0x7f,0x00,0x08,0x81,0x20,0x08,0x83,0x40, + 0x08,0x85,0x60,0x08,0x87,0x80,0x08,0x89,0xff,0xa0,0x08,0x8b,0xc0,0x08,0x8d,0xe0, + 0x08,0x8f,0x00,0x09,0x91,0x20,0x09,0x93,0x40,0x09,0x95,0x60,0x09,0x97,0x80,0x09, + 0x99,0xa0,0x09,0x9b,0xc0,0x09,0x9d,0xe0,0x09,0x9f,0x00,0x0a,0xa1,0x20,0x0a,0xa3, + 0x40,0x0a,0xa5,0x60,0x0a,0xa7,0x80,0x0a,0xa9,0xa0,0x0a,0xab,0xc0,0x0a,0xad,0xe0, + 0x0a,0xaf,0x00,0x0b,0xb1,0x20,0x0b,0xb3,0x40,0x0b,0xb5,0x60,0x0b,0xb7,0x80,0x0b, + 0xb9,0xa0,0x0b,0xbb,0xc0,0x0b,0xbd,0xe0,0x0b,0xbf,0x00,0x0c,0xc1,0x20,0x0c,0xc3, + 0x40,0x0c,0xc5,0x60,0x0c,0xc7,0x80,0x0c,0xc9,0xa0,0x0c,0xcb,0xc0,0x0c,0xcd,0xe0, + 0x0c,0xcf,0x00,0x0d,0xd1,0x20,0x0d,0xd3,0x40,0x0d,0xd5,0x60,0x0d,0xd7,0x80,0x0d, + 0xd9,0xa0,0x0d,0xdb,0xc0,0x0d,0xdd,0xe0,0x0d,0xdf,0x00,0x0e,0xe1,0x20,0x0e,0xe3, + 0x40,0x0e,0xe5,0x60,0x0e,0xe7,0x80,0x0e,0xe9,0xa0,0x0e,0xeb,0xc0,0x0e,0xed,0xe0, + 0x0e,0xef,0x00,0x0f,0xf1,0x20,0x0f,0xf3,0x40,0x0f,0xf5,0x60,0x0f,0xf7,0x80,0x0f, + 0xf9,0xa0,0x0f,0xfb,0xc0,0x0f,0xfd,0xe0,0x0f,0xff,0x00,0x00,0x01,0x20,0x00,0x03, + 0x40,0x00,0x05,0x60,0x00,0x07,0x80,0x00,0x09,0xa0,0x00,0x0b,0xc0,0x00,0x0d,0xe0, + 0x00,0x0f,0x00,0x01,0x11,0x20,0x01,0x13,0x40,0x01,0x15,0x60,0x01,0x17,0x80,0x01, + 0x19,0xa0,0x01,0x1b,0xc0,0x01,0x1d,0xe0,0x01,0x1f,0x00,0x02,0x21,0x20,0x02,0x23, + 0x40,0x02,0x25,0x60,0x02,0x27,0x80,0x02,0x29,0xa0,0x02,0x2b,0xc0,0x02,0x2d,0xe0, + 0x02,0x2f,0x00,0x03,0x31,0x20,0x03,0x33,0xff,0x40,0x03,0x35,0x60,0x03,0x37,0x80, + 0x03,0x39,0xa0,0x03,0x3b,0xc0,0x03,0x3d,0xe0,0x03,0x3f,0x00,0x04,0x41,0x20,0x04, + 0x43,0x40,0x04,0x45,0x60,0x04,0x47,0x80,0x04,0x49,0xa0,0x04,0x4b,0xc0,0x04,0x4d, + 0xe0,0x04,0x4f,0x00,0x05,0x51,0x20,0x05,0x53,0x40,0x05,0x55,0x60,0x05,0x57,0x80, + 0x05,0x59,0xa0,0x05,0x5b,0xc0,0x05,0x5d,0xe0,0x05,0x5f,0x00,0x06,0x61,0x20,0x06, + 0x63,0x40,0x06,0x65,0x60,0x06,0x67,0x80,0x06,0x69,0xa0,0x06,0x6b,0xc0,0x06,0x6d, + 0xe0,0x06,0x6f,0x00,0x07,0x71,0x20,0x07,0x73,0x40,0x07,0x75,0x60,0x07,0x77,0x80, + 0x07,0x79,0xa0,0x07,0x7b,0xc0,0x07,0x7d,0xe0,0x07,0x7f,0x00,0x08,0x81,0x20,0x08, + 0x83,0x40,0x08,0x85,0x60,0x08,0x87,0x80,0x08,0x89,0xa0,0x08,0x8b,0xc0,0x08,0x8d, + 0xe0,0x08,0x8f,0x00,0x09,0x91,0x20,0x09,0x93,0x40,0x09,0x95,0x60,0x09,0x97,0x80, + 0x09,0x99,0xa0,0x09,0x9b,0xc0,0x09,0x9d,0xe0,0x09,0x9f,0x00,0x0a,0xa1,0x20,0x0a, + 0xa3,0x40,0x0a,0xa5,0x60,0x0a,0xa7,0x80,0x0a,0xa9,0xa0,0x0a,0xab,0xc0,0x0a,0xad, + 0xe0,0x0a,0xaf,0x00,0x0b,0xb1,0x20,0x0b,0xb3,0x40,0x0b,0xb5,0x60,0x0b,0xb7,0x80, + 0x0b,0xb9,0xa0,0x0b,0xbb,0xc0,0x0b,0xbd,0xe0,0x0b,0xbf,0x00,0x0c,0xc1,0x20,0x0c, + 0xc3,0x40,0x0c,0xc5,0x60,0x0c,0xc7,0x80,0x0c,0xc9,0xa0,0x0c,0xcb,0xc0,0x0c,0xcd, + 0xe0,0x0c,0xcf,0x00,0x0d,0xd1,0x20,0x0d,0xd3,0x40,0x0d,0xd5,0x60,0x0d,0xd7,0x80, + 0x0d,0xd9,0xa0,0x0d,0xdb,0xc0,0x0d,0xdd,0xff,0xe0,0x0d,0xdf,0x00,0x0e,0xe1,0x20, + 0x0e,0xe3,0x40,0x0e,0xe5,0x60,0x0e,0xe7,0x80,0x0e,0xe9,0xa0,0x0e,0xeb,0xc0,0x0e, + 0xed,0xe0,0x0e,0xef,0x00,0x0f,0xf1,0x20,0x0f,0xf3,0x40,0x0f,0xf5,0x60,0x0f,0xf7, + 0x80,0x0f,0xf9,0xa0,0x0f,0xfb,0xc0,0x0f,0xfd,0xe0,0x0f,0xff,0x00,0x00,0x01,0x20, + 0x00,0x03,0x40,0x00,0x05,0x60,0x00,0x07,0x80,0x00,0x09,0xa0,0x00,0x0b,0xc0,0x00, + 0x0d,0xe0,0x00,0x0f,0x00,0x01,0x11,0x20,0x01,0x13,0x40,0x01,0x15,0x60,0x01,0x17, + 0x80,0x01,0x19,0xa0,0x01,0x1b,0xc0,0x01,0x1d,0xe0,0x01,0x1f,0x00,0x02,0x21,0x20, + 0x02,0x23,0x40,0x02,0x25,0x60,0x02,0x27,0x80,0x02,0x29,0xa0,0x02,0x2b,0xc0,0x02, + 0x2d,0xe0,0x02,0x2f,0x00,0x03,0x31,0x20,0x03,0x33,0x40,0x03,0x35,0x60,0x03,0x37, + 0x80,0x03,0x39,0xa0,0x03,0x3b,0xc0,0x03,0x3d,0xe0,0x03,0x3f,0x00,0x04,0x41,0x20, + 0x04,0x43,0x40,0x04,0x45,0x60,0x04,0x47,0x80,0x04,0x49,0xa0,0x04,0x4b,0xc0,0x04, + 0x4d,0xe0,0x04,0x4f,0x00,0x05,0x51,0x20,0x05,0x53,0x40,0x05,0x55,0x60,0x05,0x57, + 0x80,0x05,0x59,0xa0,0x05,0x5b,0xc0,0x05,0x5d,0xe0,0x05,0x5f,0x00,0x06,0x61,0x20, + 0x06,0x63,0x40,0x06,0x65,0x60,0x06,0x67,0x80,0x06,0x69,0xa0,0x06,0x6b,0xc0,0x06, + 0x6d,0xe0,0x06,0x6f,0x00,0x07,0x71,0x20,0x07,0x73,0x40,0x07,0x75,0x60,0x07,0x77, + 0x80,0x07,0x79,0xa0,0x07,0x7b,0xc0,0x07,0x7d,0xe0,0x07,0x7f,0x00,0x08,0x81,0x20, + 0x08,0x83,0x40,0x08,0x85,0x60,0x08,0x87,0xff,0x80,0x08,0x89,0xa0,0x08,0x8b,0xc0, + 0x08,0x8d,0xe0,0x08,0x8f,0x00,0x09,0x91,0x20,0x09,0x93,0x40,0x09,0x95,0x60,0x09, + 0x97,0x80,0x09,0x99,0xa0,0x09,0x9b,0xc0,0x09,0x9d,0xe0,0x09,0x9f,0x00,0x0a,0xa1, + 0x20,0x0a,0xa3,0x40,0x0a,0xa5,0x60,0x0a,0xa7,0x80,0x0a,0xa9,0xa0,0x0a,0xab,0xc0, + 0x0a,0xad,0xe0,0x0a,0xaf,0x00,0x0b,0xb1,0x20,0x0b,0xb3,0x40,0x0b,0xb5,0x60,0x0b, + 0xb7,0x80,0x0b,0xb9,0xa0,0x0b,0xbb,0xc0,0x0b,0xbd,0xe0,0x0b,0xbf,0x00,0x0c,0xc1, + 0x20,0x0c,0xc3,0x40,0x0c,0xc5,0x60,0x0c,0xc7,0x80,0x0c,0xc9,0xa0,0x0c,0xcb,0xc0, + 0x0c,0xcd,0xe0,0x0c,0xcf,0x00,0x0d,0xd1,0x20,0x0d,0xd3,0x40,0x0d,0xd5,0x60,0x0d, + 0xd7,0x80,0x0d,0xd9,0xa0,0x0d,0xdb,0xc0,0x0d,0xdd,0xe0,0x0d,0xdf,0x00,0x0e,0xe1, + 0x20,0x0e,0xe3,0x40,0x0e,0xe5,0x60,0x0e,0xe7,0x80,0x0e,0xe9,0xa0,0x0e,0xeb,0xc0, + 0x0e,0xed,0xe0,0x0e,0xef,0x00,0x0f,0xf1,0x20,0x0f,0xf3,0x40,0x0f,0xf5,0x60,0x0f, + 0xf7,0x80,0x0f,0xf9,0xa0,0x0f,0xfb,0xc0,0x0f,0xfd,0xe0,0x0f,0xff,0x00,0x00,0x01, + 0x20,0x00,0x03,0x40,0x00,0x05,0x60,0x00,0x07,0x80,0x00,0x09,0xa0,0x00,0x0b,0xc0, + 0x00,0x0d,0xe0,0x00,0x0f,0x00,0x01,0x11,0x20,0x01,0x13,0x40,0x01,0x15,0x60,0x01, + 0x17,0x80,0x01,0x19,0xa0,0x01,0x1b,0xc0,0x01,0x1d,0xe0,0x01,0x1f,0x00,0x02,0x21, + 0x20,0x02,0x23,0x40,0x02,0x25,0x60,0x02,0x27,0x80,0x02,0x29,0xa0,0x02,0x2b,0xc0, + 0x02,0x2d,0xe0,0x02,0x2f,0x00,0x03,0x31,0xff,0x20,0x03,0x33,0x40,0x03,0x35,0x60, + 0x03,0x37,0x80,0x03,0x39,0xa0,0x03,0x3b,0xc0,0x03,0x3d,0xe0,0x03,0x3f,0x00,0x04, + 0x41,0x20,0x04,0x43,0x40,0x04,0x45,0x60,0x04,0x47,0x80,0x04,0x49,0xa0,0x04,0x4b, + 0xc0,0x04,0x4d,0xe0,0x04,0x4f,0x00,0x05,0x51,0x20,0x05,0x53,0x40,0x05,0x55,0x60, + 0x05,0x57,0x80,0x05,0x59,0xa0,0x05,0x5b,0xc0,0x05,0x5d,0xe0,0x05,0x5f,0x00,0x06, + 0x61,0x20,0x06,0x63,0x40,0x06,0x65,0x60,0x06,0x67,0x80,0x06,0x69,0xa0,0x06,0x6b, + 0xc0,0x06,0x6d,0xe0,0x06,0x6f,0x00,0x07,0x71,0x20,0x07,0x73,0x40,0x07,0x75,0x60, + 0x07,0x77,0x80,0x07,0x79,0xa0,0x07,0x7b,0xc0,0x07,0x7d,0xe0,0x07,0x7f,0x00,0x08, + 0x81,0x20,0x08,0x83,0x40,0x08,0x85,0x60,0x08,0x87,0x80,0x08,0x89,0xa0,0x08,0x8b, + 0xc0,0x08,0x8d,0xe0,0x08,0x8f,0x00,0x09,0x91,0x20,0x09,0x93,0x40,0x09,0x95,0x60, + 0x09,0x97,0x80,0x09,0x99,0xa0,0x09,0x9b,0xc0,0x09,0x9d,0xe0,0x09,0x9f,0x00,0x0a, + 0xa1,0x20,0x0a,0xa3,0x40,0x0a,0xa5,0x60,0x0a,0xa7,0x80,0x0a,0xa9,0xa0,0x0a,0xab, + 0xc0,0x0a,0xad,0xe0,0x0a,0xaf,0x00,0x0b,0xb1,0x20,0x0b,0xb3,0x40,0x0b,0xb5,0x60, + 0x0b,0xb7,0x80,0x0b,0xb9,0xa0,0x0b,0xbb,0xc0,0x0b,0xbd,0xe0,0x0b,0xbf,0x00,0x0c, + 0xc1,0x20,0x0c,0xc3,0x40,0x0c,0xc5,0x60,0x0c,0xc7,0x80,0x0c,0xc9,0xa0,0x0c,0xcb, + 0xc0,0x0c,0xcd,0xe0,0x0c,0xcf,0x00,0x0d,0xd1,0x20,0x0d,0xd3,0x40,0x0d,0xd5,0x60, + 0x0d,0xd7,0x80,0x0d,0xd9,0xa0,0x0d,0xdb,0xff,0xc0,0x0d,0xdd,0xe0,0x0d,0xdf,0x00, + 0x0e,0xe1,0x20,0x0e,0xe3,0x40,0x0e,0xe5,0x60,0x0e,0xe7,0x80,0x0e,0xe9,0xa0,0x0e, + 0xeb,0xc0,0x0e,0xed,0xe0,0x0e,0xef,0x00,0x0f,0xf1,0x20,0x0f,0xf3,0x40,0x0f,0xf5, + 0x60,0x0f,0xf7,0x80,0x0f,0xf9,0xa0,0x0f,0xfb,0xc0,0x0f,0xfd,0xe0,0x0f,0xff,0xf0, + 0xff,0xff,0xff,0xff,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00, + 0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07, + 0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70, + 0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00, + 0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07, + 0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70, + 0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00, + 0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07, + 0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70, + 0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00, + 0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07, + 0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70, + 0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0xb5,0x70,0x00,0x07,0x70,0x00,0x07,0x70, + 0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00, + 0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07, + 0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70, + 0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00, + 0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07, + 0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70, + 0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00, + 0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07, + 0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70, + 0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00, + 0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x07,0x70,0x00,0x01,0x01,0x00,0x3b, +}; + +static void test_gif_full_table(void) +{ + IWICBitmapDecoder *decoder; + IWICBitmapFrameDecode *frame; + UINT count = 0, width = 0, height = 0; + BYTE buf[64 * 64]; + WICRect rc = { 0, 0, 64, 64 }; + HRESULT hr; + + decoder = create_decoder(gif_full_table, sizeof(gif_full_table)); + ok(decoder != 0, "Failed to load GIF image data\n"); + if (!decoder) return; + + hr = IWICBitmapDecoder_GetFrameCount(decoder, &count); + ok(hr == S_OK, "GetFrameCount error %#lx\n", hr); + ok(count == 1, "expected 1, got %u\n", count); + + hr = IWICBitmapDecoder_GetFrame(decoder, 0, &frame); + ok(hr == S_OK, "GetFrame error %#lx\n", hr); + + hr = IWICBitmapFrameDecode_GetSize(frame, &width, &height); + ok(hr == S_OK, "GetSize error %#lx\n", hr); + ok(width == 64 && height == 64, "expected 64x64, got %ux%u\n", width, height); + + hr = IWICBitmapFrameDecode_CopyPixels(frame, &rc, 64, sizeof(buf), buf); + ok(hr == S_OK, "CopyPixels error %#lx\n", hr); + + IWICBitmapFrameDecode_Release(frame); + IWICBitmapDecoder_Release(decoder); +} + START_TEST(gifformat) { HRESULT hr; @@ -647,6 +1098,7 @@ START_TEST(gifformat) test_local_gif_palette(); test_no_gif_palette(); test_gif_frame_sizes(); + test_gif_full_table(); test_gif_notrailer(); IWICImagingFactory_Release(factory); @@ -661,6 +1113,7 @@ START_TEST(gifformat) test_local_gif_palette(); test_no_gif_palette(); test_gif_frame_sizes(); + test_gif_full_table(); test_truncated_gif(); IWICImagingFactory_Release(factory); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/11209
How did you create the test image? -- https://gitlab.winehq.org/wine/wine/-/merge_requests/11209#note_143752
On Sat Jun 20 21:37:18 2026 +0000, Esme Povirk wrote:
How did you create the test image? The test image is deterministically hand-built (64x64, 256-color). I generated the raw LZW code stream directly: a clear code, then ~3840 single-pixel codes that fill the 4096-entry code table, then the highest code (4095) three times, then padding codes up to 64x64, followed by the end-of-information code.
Filling the table freezes `RunningCode` at `LZ_MAX_CODE + 2`, so `RunningCode - 2` stays at 4095. With the bug, decoding code 4095 repeatedly rewrites entry 4095 (`Prefix[4095] = LastCode`); after the third one the entry references itself, so the prefix walk runs until `j == LZ_MAX_CODE` and `DGifDecompressLine` returns `GIF_ERROR`. A correct decoder keeps the full table intact and decodes all 4096 pixels. Happy to add a comment describing this to the test, or to build the image in C within the test instead of embedding the blob - whichever you prefer. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/11209#note_143766
This merge request was approved by Esme Povirk. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/11209
participants (3)
-
Esme Povirk (@madewokherd) -
Marius Kamm -
Marius Kamm (@McMarius11)