From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41218) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eOlGx-0002jq-1n for qemu-devel@nongnu.org; Tue, 12 Dec 2017 09:11:09 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eOlGt-0001QU-Rt for qemu-devel@nongnu.org; Tue, 12 Dec 2017 09:11:03 -0500 Received: from mx1.redhat.com ([209.132.183.28]:37588) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eOlGt-0001OO-It for qemu-devel@nongnu.org; Tue, 12 Dec 2017 09:10:59 -0500 From: "Daniel P. Berrange" Date: Tue, 12 Dec 2017 14:10:42 +0000 Message-Id: <20171212141044.2582-3-berrange@redhat.com> In-Reply-To: <20171212141044.2582-1-berrange@redhat.com> References: <20171212141044.2582-1-berrange@redhat.com> Subject: [Qemu-devel] [PATCH v6 2/4] hw: convert ps2 device to keycodemapdb List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Gerd Hoffmann , Paolo Bonzini , Stefano Stabellini , Anthony Perard , xen-devel@lists.xenproject.org, "Daniel P. Berrange" Replace the qcode_to_keycode_set1, qcode_to_keycode_set2, and qcode_to_keycode_set3 tables with automatically generated tables. Missing entries in qcode_to_keycode_set1 now fixed: - Q_KEY_CODE_SYSRQ -> 0x54 - Q_KEY_CODE_PRINT -> 0x54 (NB ignored due to special case) - Q_KEY_CODE_AGAIN -> 0xe005 - Q_KEY_CODE_PROPS -> 0xe006 - Q_KEY_CODE_UNDO -> 0xe007 - Q_KEY_CODE_FRONT -> 0xe00c - Q_KEY_CODE_COPY -> 0xe078 - Q_KEY_CODE_OPEN -> 0x64 - Q_KEY_CODE_PASTE -> 0x65 - Q_KEY_CODE_CUT -> 0xe03c - Q_KEY_CODE_LF -> 0x5b - Q_KEY_CODE_HELP -> 0xe075 - Q_KEY_CODE_COMPOSE -> 0xe05d - Q_KEY_CODE_PAUSE -> 0xe046 - Q_KEY_CODE_KP_EQUALS -> 0x59 And some mistakes corrected: - Q_KEY_CODE_HIRAGANA was mapped to 0x70 (Katakanahiragana) instead of of 0x77 (Hirigana) - Q_KEY_CODE_MENU was incorrectly mapped to the compose scancode (0xe05d) and is now mapped to 0xe01e - Q_KEY_CODE_FIND was mapped to 0xe065 (Search) instead of to 0xe041 (Find) - Q_KEY_CODE_POWER, SLEEP & WAKE had 0x0e instead of 0xe0 as the prefix Missing entries in qcode_to_keycode_set2 now fixed: - Q_KEY_CODE_PRINT -> 0x7f (NB ignored due to special case) - Q_KEY_CODE_COMPOSE -> 0xe02f - Q_KEY_CODE_PAUSE -> 0xe077 - Q_KEY_CODE_KP_EQUALS -> 0x0f And some mistakes corrected: - Q_KEY_CODE_HIRAGANA was mapped to 0x13 (Katakanahiragana) instead of of 0x62 (Hirigana) - Q_KEY_CODE_MENU was incorrectly mapped to the compose scancode (0xe02f) and is now not mapped - Q_KEY_CODE_FIND was mapped to 0xe010 (Search) and is now not mapped. - Q_KEY_CODE_POWER, SLEEP & WAKE had 0x0e instead of 0xe0 as the prefix Missing entries in qcode_to_keycode_set3 now fixed: - Q_KEY_CODE_ASTERISK -> 0x7e - Q_KEY_CODE_SYSRQ -> 0x57 - Q_KEY_CODE_LESS -> 0x13 - Q_KEY_CODE_STOP -> 0x0a - Q_KEY_CODE_AGAIN -> 0x0b - Q_KEY_CODE_PROPS -> 0x0c - Q_KEY_CODE_UNDO -> 0x10 - Q_KEY_CODE_COPY -> 0x18 - Q_KEY_CODE_OPEN -> 0x20 - Q_KEY_CODE_PASTE -> 0x28 - Q_KEY_CODE_FIND -> 0x30 - Q_KEY_CODE_CUT -> 0x38 - Q_KEY_CODE_HELP -> 0x09 - Q_KEY_CODE_COMPOSE -> 0x8d - Q_KEY_CODE_AUDIONEXT -> 0x93 - Q_KEY_CODE_AUDIOPREV -> 0x94 - Q_KEY_CODE_AUDIOSTOP -> 0x98 - Q_KEY_CODE_AUDIOMUTE -> 0x9c - Q_KEY_CODE_VOLUMEUP -> 0x95 - Q_KEY_CODE_VOLUMEDOWN -> 0x9d - Q_KEY_CODE_CALCULATOR -> 0xa3 - Q_KEY_CODE_AC_HOME -> 0x97 And some mistakes corrected: - Q_KEY_CODE_MENU was incorrectly mapped to the compose scancode (0x8d) and is now 0x91 Signed-off-by: Daniel P. Berrange --- Makefile | 3 + hw/input/ps2.c | 406 +---------------------------------------------------- include/ui/input.h | 9 ++ ui/input-keymap.c | 3 + 4 files changed, 22 insertions(+), 399 deletions(-) diff --git a/Makefile b/Makefile index 5aaff5fe1e..1e4237fd2f 100644 --- a/Makefile +++ b/Makefile @@ -227,6 +227,9 @@ KEYCODEMAP_CSV = $(SRC_PATH)/ui/keycodemapdb/data/keymaps.csv KEYCODEMAP_FILES = \ ui/input-keymap-linux-to-qcode.c \ + ui/input-keymap-qcode-to-atset1.c \ + ui/input-keymap-qcode-to-atset2.c \ + ui/input-keymap-qcode-to-atset3.c \ ui/input-keymap-qcode-to-linux.c \ ui/input-keymap-qcode-to-qnum.c \ ui/input-keymap-qnum-to-qcode.c \ diff --git a/hw/input/ps2.c b/hw/input/ps2.c index f388a23c8e..9eca6a4356 100644 --- a/hw/input/ps2.c +++ b/hw/input/ps2.c @@ -124,401 +124,6 @@ typedef struct { uint8_t mouse_buttons; } PS2MouseState; -/* Table to convert from QEMU codes to scancodes. */ -static const uint16_t qcode_to_keycode_set1[Q_KEY_CODE__MAX] = { - [0 ... Q_KEY_CODE__MAX - 1] = 0, - - [Q_KEY_CODE_A] = 0x1e, - [Q_KEY_CODE_B] = 0x30, - [Q_KEY_CODE_C] = 0x2e, - [Q_KEY_CODE_D] = 0x20, - [Q_KEY_CODE_E] = 0x12, - [Q_KEY_CODE_F] = 0x21, - [Q_KEY_CODE_G] = 0x22, - [Q_KEY_CODE_H] = 0x23, - [Q_KEY_CODE_I] = 0x17, - [Q_KEY_CODE_J] = 0x24, - [Q_KEY_CODE_K] = 0x25, - [Q_KEY_CODE_L] = 0x26, - [Q_KEY_CODE_M] = 0x32, - [Q_KEY_CODE_N] = 0x31, - [Q_KEY_CODE_O] = 0x18, - [Q_KEY_CODE_P] = 0x19, - [Q_KEY_CODE_Q] = 0x10, - [Q_KEY_CODE_R] = 0x13, - [Q_KEY_CODE_S] = 0x1f, - [Q_KEY_CODE_T] = 0x14, - [Q_KEY_CODE_U] = 0x16, - [Q_KEY_CODE_V] = 0x2f, - [Q_KEY_CODE_W] = 0x11, - [Q_KEY_CODE_X] = 0x2d, - [Q_KEY_CODE_Y] = 0x15, - [Q_KEY_CODE_Z] = 0x2c, - [Q_KEY_CODE_0] = 0x0b, - [Q_KEY_CODE_1] = 0x02, - [Q_KEY_CODE_2] = 0x03, - [Q_KEY_CODE_3] = 0x04, - [Q_KEY_CODE_4] = 0x05, - [Q_KEY_CODE_5] = 0x06, - [Q_KEY_CODE_6] = 0x07, - [Q_KEY_CODE_7] = 0x08, - [Q_KEY_CODE_8] = 0x09, - [Q_KEY_CODE_9] = 0x0a, - [Q_KEY_CODE_GRAVE_ACCENT] = 0x29, - [Q_KEY_CODE_MINUS] = 0x0c, - [Q_KEY_CODE_EQUAL] = 0x0d, - [Q_KEY_CODE_BACKSLASH] = 0x2b, - [Q_KEY_CODE_BACKSPACE] = 0x0e, - [Q_KEY_CODE_SPC] = 0x39, - [Q_KEY_CODE_TAB] = 0x0f, - [Q_KEY_CODE_CAPS_LOCK] = 0x3a, - [Q_KEY_CODE_SHIFT] = 0x2a, - [Q_KEY_CODE_CTRL] = 0x1d, - [Q_KEY_CODE_META_L] = 0xe05b, - [Q_KEY_CODE_ALT] = 0x38, - [Q_KEY_CODE_SHIFT_R] = 0x36, - [Q_KEY_CODE_CTRL_R] = 0xe01d, - [Q_KEY_CODE_META_R] = 0xe05c, - [Q_KEY_CODE_ALT_R] = 0xe038, - [Q_KEY_CODE_MENU] = 0xe05d, - [Q_KEY_CODE_RET] = 0x1c, - [Q_KEY_CODE_ESC] = 0x01, - [Q_KEY_CODE_F1] = 0x3b, - [Q_KEY_CODE_F2] = 0x3c, - [Q_KEY_CODE_F3] = 0x3d, - [Q_KEY_CODE_F4] = 0x3e, - [Q_KEY_CODE_F5] = 0x3f, - [Q_KEY_CODE_F6] = 0x40, - [Q_KEY_CODE_F7] = 0x41, - [Q_KEY_CODE_F8] = 0x42, - [Q_KEY_CODE_F9] = 0x43, - [Q_KEY_CODE_F10] = 0x44, - [Q_KEY_CODE_F11] = 0x57, - [Q_KEY_CODE_F12] = 0x58, - /* special handling for Q_KEY_CODE_PRINT */ - [Q_KEY_CODE_SCROLL_LOCK] = 0x46, - /* special handling for Q_KEY_CODE_PAUSE */ - [Q_KEY_CODE_BRACKET_LEFT] = 0x1a, - [Q_KEY_CODE_INSERT] = 0xe052, - [Q_KEY_CODE_HOME] = 0xe047, - [Q_KEY_CODE_PGUP] = 0xe049, - [Q_KEY_CODE_DELETE] = 0xe053, - [Q_KEY_CODE_END] = 0xe04f, - [Q_KEY_CODE_PGDN] = 0xe051, - [Q_KEY_CODE_UP] = 0xe048, - [Q_KEY_CODE_LEFT] = 0xe04b, - [Q_KEY_CODE_DOWN] = 0xe050, - [Q_KEY_CODE_RIGHT] = 0xe04d, - [Q_KEY_CODE_NUM_LOCK] = 0x45, - [Q_KEY_CODE_KP_DIVIDE] = 0xe035, - [Q_KEY_CODE_KP_MULTIPLY] = 0x37, - [Q_KEY_CODE_KP_SUBTRACT] = 0x4a, - [Q_KEY_CODE_KP_ADD] = 0x4e, - [Q_KEY_CODE_KP_ENTER] = 0xe01c, - [Q_KEY_CODE_KP_DECIMAL] = 0x53, - [Q_KEY_CODE_KP_0] = 0x52, - [Q_KEY_CODE_KP_1] = 0x4f, - [Q_KEY_CODE_KP_2] = 0x50, - [Q_KEY_CODE_KP_3] = 0x51, - [Q_KEY_CODE_KP_4] = 0x4b, - [Q_KEY_CODE_KP_5] = 0x4c, - [Q_KEY_CODE_KP_6] = 0x4d, - [Q_KEY_CODE_KP_7] = 0x47, - [Q_KEY_CODE_KP_8] = 0x48, - [Q_KEY_CODE_KP_9] = 0x49, - [Q_KEY_CODE_BRACKET_RIGHT] = 0x1b, - [Q_KEY_CODE_SEMICOLON] = 0x27, - [Q_KEY_CODE_APOSTROPHE] = 0x28, - [Q_KEY_CODE_COMMA] = 0x33, - [Q_KEY_CODE_DOT] = 0x34, - [Q_KEY_CODE_SLASH] = 0x35, - - [Q_KEY_CODE_POWER] = 0x0e5e, - [Q_KEY_CODE_SLEEP] = 0x0e5f, - [Q_KEY_CODE_WAKE] = 0x0e63, - - [Q_KEY_CODE_AUDIONEXT] = 0xe019, - [Q_KEY_CODE_AUDIOPREV] = 0xe010, - [Q_KEY_CODE_AUDIOSTOP] = 0xe024, - [Q_KEY_CODE_AUDIOPLAY] = 0xe022, - [Q_KEY_CODE_AUDIOMUTE] = 0xe020, - [Q_KEY_CODE_VOLUMEUP] = 0xe030, - [Q_KEY_CODE_VOLUMEDOWN] = 0xe02e, - [Q_KEY_CODE_MEDIASELECT] = 0xe06d, - [Q_KEY_CODE_MAIL] = 0xe06c, - [Q_KEY_CODE_CALCULATOR] = 0xe021, - [Q_KEY_CODE_COMPUTER] = 0xe06b, - [Q_KEY_CODE_FIND] = 0xe065, - [Q_KEY_CODE_AC_HOME] = 0xe032, - [Q_KEY_CODE_AC_BACK] = 0xe06a, - [Q_KEY_CODE_AC_FORWARD] = 0xe069, - [Q_KEY_CODE_STOP] = 0xe068, - [Q_KEY_CODE_AC_REFRESH] = 0xe067, - [Q_KEY_CODE_AC_BOOKMARKS] = 0xe066, - - [Q_KEY_CODE_ASTERISK] = 0x37, - [Q_KEY_CODE_LESS] = 0x56, - [Q_KEY_CODE_RO] = 0x73, - [Q_KEY_CODE_HIRAGANA] = 0x70, - [Q_KEY_CODE_HENKAN] = 0x79, - [Q_KEY_CODE_YEN] = 0x7d, - [Q_KEY_CODE_KP_COMMA] = 0x7e, -}; - -static const uint16_t qcode_to_keycode_set2[Q_KEY_CODE__MAX] = { - [0 ... Q_KEY_CODE__MAX - 1] = 0, - - [Q_KEY_CODE_A] = 0x1c, - [Q_KEY_CODE_B] = 0x32, - [Q_KEY_CODE_C] = 0x21, - [Q_KEY_CODE_D] = 0x23, - [Q_KEY_CODE_E] = 0x24, - [Q_KEY_CODE_F] = 0x2b, - [Q_KEY_CODE_G] = 0x34, - [Q_KEY_CODE_H] = 0x33, - [Q_KEY_CODE_I] = 0x43, - [Q_KEY_CODE_J] = 0x3b, - [Q_KEY_CODE_K] = 0x42, - [Q_KEY_CODE_L] = 0x4b, - [Q_KEY_CODE_M] = 0x3a, - [Q_KEY_CODE_N] = 0x31, - [Q_KEY_CODE_O] = 0x44, - [Q_KEY_CODE_P] = 0x4d, - [Q_KEY_CODE_Q] = 0x15, - [Q_KEY_CODE_R] = 0x2d, - [Q_KEY_CODE_S] = 0x1b, - [Q_KEY_CODE_T] = 0x2c, - [Q_KEY_CODE_U] = 0x3c, - [Q_KEY_CODE_V] = 0x2a, - [Q_KEY_CODE_W] = 0x1d, - [Q_KEY_CODE_X] = 0x22, - [Q_KEY_CODE_Y] = 0x35, - [Q_KEY_CODE_Z] = 0x1a, - [Q_KEY_CODE_0] = 0x45, - [Q_KEY_CODE_1] = 0x16, - [Q_KEY_CODE_2] = 0x1e, - [Q_KEY_CODE_3] = 0x26, - [Q_KEY_CODE_4] = 0x25, - [Q_KEY_CODE_5] = 0x2e, - [Q_KEY_CODE_6] = 0x36, - [Q_KEY_CODE_7] = 0x3d, - [Q_KEY_CODE_8] = 0x3e, - [Q_KEY_CODE_9] = 0x46, - [Q_KEY_CODE_GRAVE_ACCENT] = 0x0e, - [Q_KEY_CODE_MINUS] = 0x4e, - [Q_KEY_CODE_EQUAL] = 0x55, - [Q_KEY_CODE_BACKSLASH] = 0x5d, - [Q_KEY_CODE_BACKSPACE] = 0x66, - [Q_KEY_CODE_SPC] = 0x29, - [Q_KEY_CODE_TAB] = 0x0d, - [Q_KEY_CODE_CAPS_LOCK] = 0x58, - [Q_KEY_CODE_SHIFT] = 0x12, - [Q_KEY_CODE_CTRL] = 0x14, - [Q_KEY_CODE_META_L] = 0xe01f, - [Q_KEY_CODE_ALT] = 0x11, - [Q_KEY_CODE_SHIFT_R] = 0x59, - [Q_KEY_CODE_CTRL_R] = 0xe014, - [Q_KEY_CODE_META_R] = 0xe027, - [Q_KEY_CODE_ALT_R] = 0xe011, - [Q_KEY_CODE_MENU] = 0xe02f, - [Q_KEY_CODE_RET] = 0x5a, - [Q_KEY_CODE_ESC] = 0x76, - [Q_KEY_CODE_F1] = 0x05, - [Q_KEY_CODE_F2] = 0x06, - [Q_KEY_CODE_F3] = 0x04, - [Q_KEY_CODE_F4] = 0x0c, - [Q_KEY_CODE_F5] = 0x03, - [Q_KEY_CODE_F6] = 0x0b, - [Q_KEY_CODE_F7] = 0x83, - [Q_KEY_CODE_F8] = 0x0a, - [Q_KEY_CODE_F9] = 0x01, - [Q_KEY_CODE_F10] = 0x09, - [Q_KEY_CODE_F11] = 0x78, - [Q_KEY_CODE_F12] = 0x07, - /* special handling for Q_KEY_CODE_PRINT */ - [Q_KEY_CODE_SCROLL_LOCK] = 0x7e, - /* special handling for Q_KEY_CODE_PAUSE */ - [Q_KEY_CODE_BRACKET_LEFT] = 0x54, - [Q_KEY_CODE_INSERT] = 0xe070, - [Q_KEY_CODE_HOME] = 0xe06c, - [Q_KEY_CODE_PGUP] = 0xe07d, - [Q_KEY_CODE_DELETE] = 0xe071, - [Q_KEY_CODE_END] = 0xe069, - [Q_KEY_CODE_PGDN] = 0xe07a, - [Q_KEY_CODE_UP] = 0xe075, - [Q_KEY_CODE_LEFT] = 0xe06b, - [Q_KEY_CODE_DOWN] = 0xe072, - [Q_KEY_CODE_RIGHT] = 0xe074, - [Q_KEY_CODE_NUM_LOCK] = 0x77, - [Q_KEY_CODE_KP_DIVIDE] = 0xe04a, - [Q_KEY_CODE_KP_MULTIPLY] = 0x7c, - [Q_KEY_CODE_KP_SUBTRACT] = 0x7b, - [Q_KEY_CODE_KP_ADD] = 0x79, - [Q_KEY_CODE_KP_ENTER] = 0xe05a, - [Q_KEY_CODE_KP_DECIMAL] = 0x71, - [Q_KEY_CODE_KP_0] = 0x70, - [Q_KEY_CODE_KP_1] = 0x69, - [Q_KEY_CODE_KP_2] = 0x72, - [Q_KEY_CODE_KP_3] = 0x7a, - [Q_KEY_CODE_KP_4] = 0x6b, - [Q_KEY_CODE_KP_5] = 0x73, - [Q_KEY_CODE_KP_6] = 0x74, - [Q_KEY_CODE_KP_7] = 0x6c, - [Q_KEY_CODE_KP_8] = 0x75, - [Q_KEY_CODE_KP_9] = 0x7d, - [Q_KEY_CODE_BRACKET_RIGHT] = 0x5b, - [Q_KEY_CODE_SEMICOLON] = 0x4c, - [Q_KEY_CODE_APOSTROPHE] = 0x52, - [Q_KEY_CODE_COMMA] = 0x41, - [Q_KEY_CODE_DOT] = 0x49, - [Q_KEY_CODE_SLASH] = 0x4a, - - [Q_KEY_CODE_POWER] = 0x0e37, - [Q_KEY_CODE_SLEEP] = 0x0e3f, - [Q_KEY_CODE_WAKE] = 0x0e5e, - - [Q_KEY_CODE_AUDIONEXT] = 0xe04d, - [Q_KEY_CODE_AUDIOPREV] = 0xe015, - [Q_KEY_CODE_AUDIOSTOP] = 0xe03b, - [Q_KEY_CODE_AUDIOPLAY] = 0xe034, - [Q_KEY_CODE_AUDIOMUTE] = 0xe023, - [Q_KEY_CODE_VOLUMEUP] = 0xe032, - [Q_KEY_CODE_VOLUMEDOWN] = 0xe021, - [Q_KEY_CODE_MEDIASELECT] = 0xe050, - [Q_KEY_CODE_MAIL] = 0xe048, - [Q_KEY_CODE_CALCULATOR] = 0xe02b, - [Q_KEY_CODE_COMPUTER] = 0xe040, - [Q_KEY_CODE_FIND] = 0xe010, - [Q_KEY_CODE_AC_HOME] = 0xe03a, - [Q_KEY_CODE_AC_BACK] = 0xe038, - [Q_KEY_CODE_AC_FORWARD] = 0xe030, - [Q_KEY_CODE_STOP] = 0xe028, - [Q_KEY_CODE_AC_REFRESH] = 0xe020, - [Q_KEY_CODE_AC_BOOKMARKS] = 0xe018, - - [Q_KEY_CODE_ASTERISK] = 0x7c, - [Q_KEY_CODE_LESS] = 0x61, - [Q_KEY_CODE_SYSRQ] = 0x7f, - [Q_KEY_CODE_RO] = 0x51, - [Q_KEY_CODE_HIRAGANA] = 0x13, - [Q_KEY_CODE_HENKAN] = 0x64, - [Q_KEY_CODE_YEN] = 0x6a, - [Q_KEY_CODE_KP_COMMA] = 0x6d, -}; - -static const uint16_t qcode_to_keycode_set3[Q_KEY_CODE__MAX] = { - [0 ... Q_KEY_CODE__MAX - 1] = 0, - - [Q_KEY_CODE_A] = 0x1c, - [Q_KEY_CODE_B] = 0x32, - [Q_KEY_CODE_C] = 0x21, - [Q_KEY_CODE_D] = 0x23, - [Q_KEY_CODE_E] = 0x24, - [Q_KEY_CODE_F] = 0x2b, - [Q_KEY_CODE_G] = 0x34, - [Q_KEY_CODE_H] = 0x33, - [Q_KEY_CODE_I] = 0x43, - [Q_KEY_CODE_J] = 0x3b, - [Q_KEY_CODE_K] = 0x42, - [Q_KEY_CODE_L] = 0x4b, - [Q_KEY_CODE_M] = 0x3a, - [Q_KEY_CODE_N] = 0x31, - [Q_KEY_CODE_O] = 0x44, - [Q_KEY_CODE_P] = 0x4d, - [Q_KEY_CODE_Q] = 0x15, - [Q_KEY_CODE_R] = 0x2d, - [Q_KEY_CODE_S] = 0x1b, - [Q_KEY_CODE_T] = 0x2c, - [Q_KEY_CODE_U] = 0x3c, - [Q_KEY_CODE_V] = 0x2a, - [Q_KEY_CODE_W] = 0x1d, - [Q_KEY_CODE_X] = 0x22, - [Q_KEY_CODE_Y] = 0x35, - [Q_KEY_CODE_Z] = 0x1a, - [Q_KEY_CODE_0] = 0x45, - [Q_KEY_CODE_1] = 0x16, - [Q_KEY_CODE_2] = 0x1e, - [Q_KEY_CODE_3] = 0x26, - [Q_KEY_CODE_4] = 0x25, - [Q_KEY_CODE_5] = 0x2e, - [Q_KEY_CODE_6] = 0x36, - [Q_KEY_CODE_7] = 0x3d, - [Q_KEY_CODE_8] = 0x3e, - [Q_KEY_CODE_9] = 0x46, - [Q_KEY_CODE_GRAVE_ACCENT] = 0x0e, - [Q_KEY_CODE_MINUS] = 0x4e, - [Q_KEY_CODE_EQUAL] = 0x55, - [Q_KEY_CODE_BACKSLASH] = 0x5c, - [Q_KEY_CODE_BACKSPACE] = 0x66, - [Q_KEY_CODE_SPC] = 0x29, - [Q_KEY_CODE_TAB] = 0x0d, - [Q_KEY_CODE_CAPS_LOCK] = 0x14, - [Q_KEY_CODE_SHIFT] = 0x12, - [Q_KEY_CODE_CTRL] = 0x11, - [Q_KEY_CODE_META_L] = 0x8b, - [Q_KEY_CODE_ALT] = 0x19, - [Q_KEY_CODE_SHIFT_R] = 0x59, - [Q_KEY_CODE_CTRL_R] = 0x58, - [Q_KEY_CODE_META_R] = 0x8c, - [Q_KEY_CODE_ALT_R] = 0x39, - [Q_KEY_CODE_MENU] = 0x8d, - [Q_KEY_CODE_RET] = 0x5a, - [Q_KEY_CODE_ESC] = 0x08, - [Q_KEY_CODE_F1] = 0x07, - [Q_KEY_CODE_F2] = 0x0f, - [Q_KEY_CODE_F3] = 0x17, - [Q_KEY_CODE_F4] = 0x1f, - [Q_KEY_CODE_F5] = 0x27, - [Q_KEY_CODE_F6] = 0x2f, - [Q_KEY_CODE_F7] = 0x37, - [Q_KEY_CODE_F8] = 0x3f, - [Q_KEY_CODE_F9] = 0x47, - [Q_KEY_CODE_F10] = 0x4f, - [Q_KEY_CODE_F11] = 0x56, - [Q_KEY_CODE_F12] = 0x5e, - [Q_KEY_CODE_PRINT] = 0x57, - [Q_KEY_CODE_SCROLL_LOCK] = 0x5f, - [Q_KEY_CODE_PAUSE] = 0x62, - [Q_KEY_CODE_BRACKET_LEFT] = 0x54, - [Q_KEY_CODE_INSERT] = 0x67, - [Q_KEY_CODE_HOME] = 0x6e, - [Q_KEY_CODE_PGUP] = 0x6f, - [Q_KEY_CODE_DELETE] = 0x64, - [Q_KEY_CODE_END] = 0x65, - [Q_KEY_CODE_PGDN] = 0x6d, - [Q_KEY_CODE_UP] = 0x63, - [Q_KEY_CODE_LEFT] = 0x61, - [Q_KEY_CODE_DOWN] = 0x60, - [Q_KEY_CODE_RIGHT] = 0x6a, - [Q_KEY_CODE_NUM_LOCK] = 0x76, - [Q_KEY_CODE_KP_DIVIDE] = 0x4a, - [Q_KEY_CODE_KP_MULTIPLY] = 0x7e, - [Q_KEY_CODE_KP_SUBTRACT] = 0x4e, - [Q_KEY_CODE_KP_ADD] = 0x7c, - [Q_KEY_CODE_KP_ENTER] = 0x79, - [Q_KEY_CODE_KP_DECIMAL] = 0x71, - [Q_KEY_CODE_KP_0] = 0x70, - [Q_KEY_CODE_KP_1] = 0x69, - [Q_KEY_CODE_KP_2] = 0x72, - [Q_KEY_CODE_KP_3] = 0x7a, - [Q_KEY_CODE_KP_4] = 0x6b, - [Q_KEY_CODE_KP_5] = 0x73, - [Q_KEY_CODE_KP_6] = 0x74, - [Q_KEY_CODE_KP_7] = 0x6c, - [Q_KEY_CODE_KP_8] = 0x75, - [Q_KEY_CODE_KP_9] = 0x7d, - [Q_KEY_CODE_BRACKET_RIGHT] = 0x5b, - [Q_KEY_CODE_SEMICOLON] = 0x4c, - [Q_KEY_CODE_APOSTROPHE] = 0x52, - [Q_KEY_CODE_COMMA] = 0x41, - [Q_KEY_CODE_DOT] = 0x49, - [Q_KEY_CODE_SLASH] = 0x4a, - - [Q_KEY_CODE_HIRAGANA] = 0x87, - [Q_KEY_CODE_HENKAN] = 0x86, - [Q_KEY_CODE_YEN] = 0x5d, -}; - static uint8_t translate_table[256] = { 0xff, 0x43, 0x41, 0x3f, 0x3d, 0x3b, 0x3c, 0x58, 0x64, 0x44, 0x42, 0x40, 0x3e, 0x0f, 0x29, 0x59, @@ -624,7 +229,7 @@ static void ps2_keyboard_event(DeviceState *dev, QemuConsole *src, PS2KbdState *s = (PS2KbdState *)dev; InputKeyEvent *key = evt->u.key.data; int qcode; - uint16_t keycode; + uint16_t keycode = 0; int mod; qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER); @@ -706,7 +311,8 @@ static void ps2_keyboard_event(DeviceState *dev, QemuConsole *src, } } } else { - keycode = qcode_to_keycode_set1[qcode]; + if (qcode < qemu_input_map_qcode_to_atset1_len) + keycode = qemu_input_map_qcode_to_atset1[qcode]; if (keycode) { if (keycode & 0xff00) { ps2_put_keycode(s, keycode >> 8); @@ -799,7 +405,8 @@ static void ps2_keyboard_event(DeviceState *dev, QemuConsole *src, } } } else { - keycode = qcode_to_keycode_set2[qcode]; + if (qcode < qemu_input_map_qcode_to_atset2_len) + keycode = qemu_input_map_qcode_to_atset2[qcode]; if (keycode) { if (keycode & 0xff00) { ps2_put_keycode(s, keycode >> 8); @@ -814,7 +421,8 @@ static void ps2_keyboard_event(DeviceState *dev, QemuConsole *src, } } } else if (s->scancode_set == 3) { - keycode = qcode_to_keycode_set3[qcode]; + if (qcode < qemu_input_map_qcode_to_atset3_len) + keycode = qemu_input_map_qcode_to_atset3[qcode]; if (keycode) { /* FIXME: break code should be configured on a key by key basis */ if (!key->down) { diff --git a/include/ui/input.h b/include/ui/input.h index 6f56d868c7..76235ba97a 100644 --- a/include/ui/input.h +++ b/include/ui/input.h @@ -71,6 +71,15 @@ void qemu_remove_mouse_mode_change_notifier(Notifier *notify); extern const guint qemu_input_map_linux_to_qcode_len; extern const guint16 qemu_input_map_linux_to_qcode[]; +extern const guint qemu_input_map_qcode_to_atset1_len; +extern const guint16 qemu_input_map_qcode_to_atset1[]; + +extern const guint qemu_input_map_qcode_to_atset2_len; +extern const guint16 qemu_input_map_qcode_to_atset2[]; + +extern const guint qemu_input_map_qcode_to_atset3_len; +extern const guint16 qemu_input_map_qcode_to_atset3[]; + extern const guint qemu_input_map_qcode_to_linux_len; extern const guint16 qemu_input_map_qcode_to_linux[]; diff --git a/ui/input-keymap.c b/ui/input-keymap.c index 6e543d651f..d90f6a16f7 100644 --- a/ui/input-keymap.c +++ b/ui/input-keymap.c @@ -6,6 +6,9 @@ #include "standard-headers/linux/input.h" #include "ui/input-keymap-linux-to-qcode.c" +#include "ui/input-keymap-qcode-to-atset1.c" +#include "ui/input-keymap-qcode-to-atset2.c" +#include "ui/input-keymap-qcode-to-atset3.c" #include "ui/input-keymap-qcode-to-linux.c" #include "ui/input-keymap-qcode-to-qnum.c" #include "ui/input-keymap-qnum-to-qcode.c" -- 2.14.3 From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Daniel P. Berrange" Subject: [PATCH v6 2/4] hw: convert ps2 device to keycodemapdb Date: Tue, 12 Dec 2017 14:10:42 +0000 Message-ID: <20171212141044.2582-3-berrange@redhat.com> References: <20171212141044.2582-1-berrange@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eOlGv-0004Zv-IX for xen-devel@lists.xenproject.org; Tue, 12 Dec 2017 14:11:01 +0000 In-Reply-To: <20171212141044.2582-1-berrange@redhat.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: qemu-devel@nongnu.org Cc: Stefano Stabellini , "Daniel P. Berrange" , Gerd Hoffmann , xen-devel@lists.xenproject.org, Anthony Perard , Paolo Bonzini List-Id: xen-devel@lists.xenproject.org UmVwbGFjZSB0aGUgcWNvZGVfdG9fa2V5Y29kZV9zZXQxLCBxY29kZV90b19rZXljb2RlX3NldDIs CmFuZCBxY29kZV90b19rZXljb2RlX3NldDMgdGFibGVzIHdpdGggYXV0b21hdGljYWxseQpnZW5l cmF0ZWQgdGFibGVzLgoKTWlzc2luZyBlbnRyaWVzIGluIHFjb2RlX3RvX2tleWNvZGVfc2V0MSBu b3cgZml4ZWQ6CgogLSBRX0tFWV9DT0RFX1NZU1JRIC0+IDB4NTQKIC0gUV9LRVlfQ09ERV9QUklO VCAtPiAweDU0IChOQiBpZ25vcmVkIGR1ZSB0byBzcGVjaWFsIGNhc2UpCiAtIFFfS0VZX0NPREVf QUdBSU4gLT4gMHhlMDA1CiAtIFFfS0VZX0NPREVfUFJPUFMgLT4gMHhlMDA2CiAtIFFfS0VZX0NP REVfVU5ETyAtPiAweGUwMDcKIC0gUV9LRVlfQ09ERV9GUk9OVCAtPiAweGUwMGMKIC0gUV9LRVlf Q09ERV9DT1BZIC0+IDB4ZTA3OAogLSBRX0tFWV9DT0RFX09QRU4gLT4gMHg2NAogLSBRX0tFWV9D T0RFX1BBU1RFIC0+IDB4NjUKIC0gUV9LRVlfQ09ERV9DVVQgLT4gMHhlMDNjCiAtIFFfS0VZX0NP REVfTEYgLT4gMHg1YgogLSBRX0tFWV9DT0RFX0hFTFAgLT4gMHhlMDc1CiAtIFFfS0VZX0NPREVf Q09NUE9TRSAtPiAweGUwNWQKIC0gUV9LRVlfQ09ERV9QQVVTRSAtPiAweGUwNDYKIC0gUV9LRVlf Q09ERV9LUF9FUVVBTFMgLT4gMHg1OQoKQW5kIHNvbWUgbWlzdGFrZXMgY29ycmVjdGVkOgoKIC0g UV9LRVlfQ09ERV9ISVJBR0FOQSB3YXMgbWFwcGVkIHRvIDB4NzAgKEthdGFrYW5haGlyYWdhbmEp CiAgIGluc3RlYWQgb2Ygb2YgMHg3NyAoSGlyaWdhbmEpCiAtIFFfS0VZX0NPREVfTUVOVSB3YXMg aW5jb3JyZWN0bHkgbWFwcGVkIHRvIHRoZSBjb21wb3NlCiAgIHNjYW5jb2RlICgweGUwNWQpIGFu ZCBpcyBub3cgbWFwcGVkIHRvIDB4ZTAxZQogLSBRX0tFWV9DT0RFX0ZJTkQgd2FzIG1hcHBlZCB0 byAweGUwNjUgKFNlYXJjaCkgaW5zdGVhZAogICBvZiB0byAweGUwNDEgKEZpbmQpCiAtIFFfS0VZ X0NPREVfUE9XRVIsIFNMRUVQICYgV0FLRSBoYWQgMHgwZSBpbnN0ZWFkIG9mIDB4ZTAKICAgYXMg dGhlIHByZWZpeAoKTWlzc2luZyBlbnRyaWVzIGluIHFjb2RlX3RvX2tleWNvZGVfc2V0MiBub3cg Zml4ZWQ6CgogLSBRX0tFWV9DT0RFX1BSSU5UIC0+IDB4N2YgKE5CIGlnbm9yZWQgZHVlIHRvIHNw ZWNpYWwgY2FzZSkKIC0gUV9LRVlfQ09ERV9DT01QT1NFIC0+IDB4ZTAyZgogLSBRX0tFWV9DT0RF X1BBVVNFIC0+IDB4ZTA3NwogLSBRX0tFWV9DT0RFX0tQX0VRVUFMUyAtPiAweDBmCgpBbmQgc29t ZSBtaXN0YWtlcyBjb3JyZWN0ZWQ6CgogLSBRX0tFWV9DT0RFX0hJUkFHQU5BIHdhcyBtYXBwZWQg dG8gMHgxMyAoS2F0YWthbmFoaXJhZ2FuYSkKICAgaW5zdGVhZCBvZiBvZiAweDYyIChIaXJpZ2Fu YSkKIC0gUV9LRVlfQ09ERV9NRU5VIHdhcyBpbmNvcnJlY3RseSBtYXBwZWQgdG8gdGhlIGNvbXBv c2UKICAgc2NhbmNvZGUgKDB4ZTAyZikgYW5kIGlzIG5vdyBub3QgbWFwcGVkCiAtIFFfS0VZX0NP REVfRklORCB3YXMgbWFwcGVkIHRvIDB4ZTAxMCAoU2VhcmNoKSBhbmQgaXMgbm93CiAgIG5vdCBt YXBwZWQuCiAtIFFfS0VZX0NPREVfUE9XRVIsIFNMRUVQICYgV0FLRSBoYWQgMHgwZSBpbnN0ZWFk IG9mIDB4ZTAKICAgYXMgdGhlIHByZWZpeAoKTWlzc2luZyBlbnRyaWVzIGluIHFjb2RlX3RvX2tl eWNvZGVfc2V0MyBub3cgZml4ZWQ6CgogLSBRX0tFWV9DT0RFX0FTVEVSSVNLIC0+IDB4N2UKIC0g UV9LRVlfQ09ERV9TWVNSUSAtPiAweDU3CiAtIFFfS0VZX0NPREVfTEVTUyAtPiAweDEzCiAtIFFf S0VZX0NPREVfU1RPUCAtPiAweDBhCiAtIFFfS0VZX0NPREVfQUdBSU4gLT4gMHgwYgogLSBRX0tF WV9DT0RFX1BST1BTIC0+IDB4MGMKIC0gUV9LRVlfQ09ERV9VTkRPIC0+IDB4MTAKIC0gUV9LRVlf Q09ERV9DT1BZIC0+IDB4MTgKIC0gUV9LRVlfQ09ERV9PUEVOIC0+IDB4MjAKIC0gUV9LRVlfQ09E RV9QQVNURSAtPiAweDI4CiAtIFFfS0VZX0NPREVfRklORCAtPiAweDMwCiAtIFFfS0VZX0NPREVf Q1VUIC0+IDB4MzgKIC0gUV9LRVlfQ09ERV9IRUxQIC0+IDB4MDkKIC0gUV9LRVlfQ09ERV9DT01Q T1NFIC0+IDB4OGQKIC0gUV9LRVlfQ09ERV9BVURJT05FWFQgLT4gMHg5MwogLSBRX0tFWV9DT0RF X0FVRElPUFJFViAtPiAweDk0CiAtIFFfS0VZX0NPREVfQVVESU9TVE9QIC0+IDB4OTgKIC0gUV9L RVlfQ09ERV9BVURJT01VVEUgLT4gMHg5YwogLSBRX0tFWV9DT0RFX1ZPTFVNRVVQIC0+IDB4OTUK IC0gUV9LRVlfQ09ERV9WT0xVTUVET1dOIC0+IDB4OWQKIC0gUV9LRVlfQ09ERV9DQUxDVUxBVE9S IC0+IDB4YTMKIC0gUV9LRVlfQ09ERV9BQ19IT01FIC0+IDB4OTcKCkFuZCBzb21lIG1pc3Rha2Vz IGNvcnJlY3RlZDoKCiAtIFFfS0VZX0NPREVfTUVOVSB3YXMgaW5jb3JyZWN0bHkgbWFwcGVkIHRv IHRoZSBjb21wb3NlCiAgIHNjYW5jb2RlICgweDhkKSBhbmQgaXMgbm93IDB4OTEKClNpZ25lZC1v ZmYtYnk6IERhbmllbCBQLiBCZXJyYW5nZSA8YmVycmFuZ2VAcmVkaGF0LmNvbT4KLS0tCiBNYWtl ZmlsZSAgICAgICAgICAgfCAgIDMgKwogaHcvaW5wdXQvcHMyLmMgICAgIHwgNDA2ICstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBpbmNsdWRlL3Vp L2lucHV0LmggfCAgIDkgKysKIHVpL2lucHV0LWtleW1hcC5jICB8ICAgMyArCiA0IGZpbGVzIGNo YW5nZWQsIDIyIGluc2VydGlvbnMoKyksIDM5OSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9N YWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IDVhYWZmNWZlMWUuLjFlNDIzN2ZkMmYgMTAwNjQ0Ci0t LSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0yMjcsNiArMjI3LDkgQEAgS0VZQ09ERU1B UF9DU1YgPSAkKFNSQ19QQVRIKS91aS9rZXljb2RlbWFwZGIvZGF0YS9rZXltYXBzLmNzdgogCiBL RVlDT0RFTUFQX0ZJTEVTID0gXAogCQkgdWkvaW5wdXQta2V5bWFwLWxpbnV4LXRvLXFjb2RlLmMg XAorCQkgdWkvaW5wdXQta2V5bWFwLXFjb2RlLXRvLWF0c2V0MS5jIFwKKwkJIHVpL2lucHV0LWtl eW1hcC1xY29kZS10by1hdHNldDIuYyBcCisJCSB1aS9pbnB1dC1rZXltYXAtcWNvZGUtdG8tYXRz ZXQzLmMgXAogCQkgdWkvaW5wdXQta2V5bWFwLXFjb2RlLXRvLWxpbnV4LmMgXAogCQkgdWkvaW5w dXQta2V5bWFwLXFjb2RlLXRvLXFudW0uYyBcCiAJCSB1aS9pbnB1dC1rZXltYXAtcW51bS10by1x Y29kZS5jIFwKZGlmZiAtLWdpdCBhL2h3L2lucHV0L3BzMi5jIGIvaHcvaW5wdXQvcHMyLmMKaW5k ZXggZjM4OGEyM2M4ZS4uOWVjYTZhNDM1NiAxMDA2NDQKLS0tIGEvaHcvaW5wdXQvcHMyLmMKKysr IGIvaHcvaW5wdXQvcHMyLmMKQEAgLTEyNCw0MDEgKzEyNCw2IEBAIHR5cGVkZWYgc3RydWN0IHsK ICAgICB1aW50OF90IG1vdXNlX2J1dHRvbnM7CiB9IFBTMk1vdXNlU3RhdGU7CiAKLS8qIFRhYmxl IHRvIGNvbnZlcnQgZnJvbSBRRU1VIGNvZGVzIHRvIHNjYW5jb2Rlcy4gICovCi1zdGF0aWMgY29u c3QgdWludDE2X3QgcWNvZGVfdG9fa2V5Y29kZV9zZXQxW1FfS0VZX0NPREVfX01BWF0gPSB7Ci0g ICAgWzAgLi4uIFFfS0VZX0NPREVfX01BWCAtIDFdID0gMCwKLQotICAgIFtRX0tFWV9DT0RFX0Fd ID0gMHgxZSwKLSAgICBbUV9LRVlfQ09ERV9CXSA9IDB4MzAsCi0gICAgW1FfS0VZX0NPREVfQ10g PSAweDJlLAotICAgIFtRX0tFWV9DT0RFX0RdID0gMHgyMCwKLSAgICBbUV9LRVlfQ09ERV9FXSA9 IDB4MTIsCi0gICAgW1FfS0VZX0NPREVfRl0gPSAweDIxLAotICAgIFtRX0tFWV9DT0RFX0ddID0g MHgyMiwKLSAgICBbUV9LRVlfQ09ERV9IXSA9IDB4MjMsCi0gICAgW1FfS0VZX0NPREVfSV0gPSAw eDE3LAotICAgIFtRX0tFWV9DT0RFX0pdID0gMHgyNCwKLSAgICBbUV9LRVlfQ09ERV9LXSA9IDB4 MjUsCi0gICAgW1FfS0VZX0NPREVfTF0gPSAweDI2LAotICAgIFtRX0tFWV9DT0RFX01dID0gMHgz MiwKLSAgICBbUV9LRVlfQ09ERV9OXSA9IDB4MzEsCi0gICAgW1FfS0VZX0NPREVfT10gPSAweDE4 LAotICAgIFtRX0tFWV9DT0RFX1BdID0gMHgxOSwKLSAgICBbUV9LRVlfQ09ERV9RXSA9IDB4MTAs Ci0gICAgW1FfS0VZX0NPREVfUl0gPSAweDEzLAotICAgIFtRX0tFWV9DT0RFX1NdID0gMHgxZiwK LSAgICBbUV9LRVlfQ09ERV9UXSA9IDB4MTQsCi0gICAgW1FfS0VZX0NPREVfVV0gPSAweDE2LAot ICAgIFtRX0tFWV9DT0RFX1ZdID0gMHgyZiwKLSAgICBbUV9LRVlfQ09ERV9XXSA9IDB4MTEsCi0g ICAgW1FfS0VZX0NPREVfWF0gPSAweDJkLAotICAgIFtRX0tFWV9DT0RFX1ldID0gMHgxNSwKLSAg ICBbUV9LRVlfQ09ERV9aXSA9IDB4MmMsCi0gICAgW1FfS0VZX0NPREVfMF0gPSAweDBiLAotICAg IFtRX0tFWV9DT0RFXzFdID0gMHgwMiwKLSAgICBbUV9LRVlfQ09ERV8yXSA9IDB4MDMsCi0gICAg W1FfS0VZX0NPREVfM10gPSAweDA0LAotICAgIFtRX0tFWV9DT0RFXzRdID0gMHgwNSwKLSAgICBb UV9LRVlfQ09ERV81XSA9IDB4MDYsCi0gICAgW1FfS0VZX0NPREVfNl0gPSAweDA3LAotICAgIFtR X0tFWV9DT0RFXzddID0gMHgwOCwKLSAgICBbUV9LRVlfQ09ERV84XSA9IDB4MDksCi0gICAgW1Ff S0VZX0NPREVfOV0gPSAweDBhLAotICAgIFtRX0tFWV9DT0RFX0dSQVZFX0FDQ0VOVF0gPSAweDI5 LAotICAgIFtRX0tFWV9DT0RFX01JTlVTXSA9IDB4MGMsCi0gICAgW1FfS0VZX0NPREVfRVFVQUxd ID0gMHgwZCwKLSAgICBbUV9LRVlfQ09ERV9CQUNLU0xBU0hdID0gMHgyYiwKLSAgICBbUV9LRVlf Q09ERV9CQUNLU1BBQ0VdID0gMHgwZSwKLSAgICBbUV9LRVlfQ09ERV9TUENdID0gMHgzOSwKLSAg ICBbUV9LRVlfQ09ERV9UQUJdID0gMHgwZiwKLSAgICBbUV9LRVlfQ09ERV9DQVBTX0xPQ0tdID0g MHgzYSwKLSAgICBbUV9LRVlfQ09ERV9TSElGVF0gPSAweDJhLAotICAgIFtRX0tFWV9DT0RFX0NU UkxdID0gMHgxZCwKLSAgICBbUV9LRVlfQ09ERV9NRVRBX0xdID0gMHhlMDViLAotICAgIFtRX0tF WV9DT0RFX0FMVF0gPSAweDM4LAotICAgIFtRX0tFWV9DT0RFX1NISUZUX1JdID0gMHgzNiwKLSAg ICBbUV9LRVlfQ09ERV9DVFJMX1JdID0gMHhlMDFkLAotICAgIFtRX0tFWV9DT0RFX01FVEFfUl0g PSAweGUwNWMsCi0gICAgW1FfS0VZX0NPREVfQUxUX1JdID0gMHhlMDM4LAotICAgIFtRX0tFWV9D T0RFX01FTlVdID0gMHhlMDVkLAotICAgIFtRX0tFWV9DT0RFX1JFVF0gPSAweDFjLAotICAgIFtR X0tFWV9DT0RFX0VTQ10gPSAweDAxLAotICAgIFtRX0tFWV9DT0RFX0YxXSA9IDB4M2IsCi0gICAg W1FfS0VZX0NPREVfRjJdID0gMHgzYywKLSAgICBbUV9LRVlfQ09ERV9GM10gPSAweDNkLAotICAg IFtRX0tFWV9DT0RFX0Y0XSA9IDB4M2UsCi0gICAgW1FfS0VZX0NPREVfRjVdID0gMHgzZiwKLSAg ICBbUV9LRVlfQ09ERV9GNl0gPSAweDQwLAotICAgIFtRX0tFWV9DT0RFX0Y3XSA9IDB4NDEsCi0g ICAgW1FfS0VZX0NPREVfRjhdID0gMHg0MiwKLSAgICBbUV9LRVlfQ09ERV9GOV0gPSAweDQzLAot ICAgIFtRX0tFWV9DT0RFX0YxMF0gPSAweDQ0LAotICAgIFtRX0tFWV9DT0RFX0YxMV0gPSAweDU3 LAotICAgIFtRX0tFWV9DT0RFX0YxMl0gPSAweDU4LAotICAgIC8qIHNwZWNpYWwgaGFuZGxpbmcg Zm9yIFFfS0VZX0NPREVfUFJJTlQgKi8KLSAgICBbUV9LRVlfQ09ERV9TQ1JPTExfTE9DS10gPSAw eDQ2LAotICAgIC8qIHNwZWNpYWwgaGFuZGxpbmcgZm9yIFFfS0VZX0NPREVfUEFVU0UgKi8KLSAg ICBbUV9LRVlfQ09ERV9CUkFDS0VUX0xFRlRdID0gMHgxYSwKLSAgICBbUV9LRVlfQ09ERV9JTlNF UlRdID0gMHhlMDUyLAotICAgIFtRX0tFWV9DT0RFX0hPTUVdID0gMHhlMDQ3LAotICAgIFtRX0tF WV9DT0RFX1BHVVBdID0gMHhlMDQ5LAotICAgIFtRX0tFWV9DT0RFX0RFTEVURV0gPSAweGUwNTMs Ci0gICAgW1FfS0VZX0NPREVfRU5EXSA9IDB4ZTA0ZiwKLSAgICBbUV9LRVlfQ09ERV9QR0ROXSA9 IDB4ZTA1MSwKLSAgICBbUV9LRVlfQ09ERV9VUF0gPSAweGUwNDgsCi0gICAgW1FfS0VZX0NPREVf TEVGVF0gPSAweGUwNGIsCi0gICAgW1FfS0VZX0NPREVfRE9XTl0gPSAweGUwNTAsCi0gICAgW1Ff S0VZX0NPREVfUklHSFRdID0gMHhlMDRkLAotICAgIFtRX0tFWV9DT0RFX05VTV9MT0NLXSA9IDB4 NDUsCi0gICAgW1FfS0VZX0NPREVfS1BfRElWSURFXSA9IDB4ZTAzNSwKLSAgICBbUV9LRVlfQ09E RV9LUF9NVUxUSVBMWV0gPSAweDM3LAotICAgIFtRX0tFWV9DT0RFX0tQX1NVQlRSQUNUXSA9IDB4 NGEsCi0gICAgW1FfS0VZX0NPREVfS1BfQUREXSA9IDB4NGUsCi0gICAgW1FfS0VZX0NPREVfS1Bf RU5URVJdID0gMHhlMDFjLAotICAgIFtRX0tFWV9DT0RFX0tQX0RFQ0lNQUxdID0gMHg1MywKLSAg ICBbUV9LRVlfQ09ERV9LUF8wXSA9IDB4NTIsCi0gICAgW1FfS0VZX0NPREVfS1BfMV0gPSAweDRm LAotICAgIFtRX0tFWV9DT0RFX0tQXzJdID0gMHg1MCwKLSAgICBbUV9LRVlfQ09ERV9LUF8zXSA9 IDB4NTEsCi0gICAgW1FfS0VZX0NPREVfS1BfNF0gPSAweDRiLAotICAgIFtRX0tFWV9DT0RFX0tQ XzVdID0gMHg0YywKLSAgICBbUV9LRVlfQ09ERV9LUF82XSA9IDB4NGQsCi0gICAgW1FfS0VZX0NP REVfS1BfN10gPSAweDQ3LAotICAgIFtRX0tFWV9DT0RFX0tQXzhdID0gMHg0OCwKLSAgICBbUV9L RVlfQ09ERV9LUF85XSA9IDB4NDksCi0gICAgW1FfS0VZX0NPREVfQlJBQ0tFVF9SSUdIVF0gPSAw eDFiLAotICAgIFtRX0tFWV9DT0RFX1NFTUlDT0xPTl0gPSAweDI3LAotICAgIFtRX0tFWV9DT0RF X0FQT1NUUk9QSEVdID0gMHgyOCwKLSAgICBbUV9LRVlfQ09ERV9DT01NQV0gPSAweDMzLAotICAg IFtRX0tFWV9DT0RFX0RPVF0gPSAweDM0LAotICAgIFtRX0tFWV9DT0RFX1NMQVNIXSA9IDB4MzUs Ci0KLSAgICBbUV9LRVlfQ09ERV9QT1dFUl0gPSAweDBlNWUsCi0gICAgW1FfS0VZX0NPREVfU0xF RVBdID0gMHgwZTVmLAotICAgIFtRX0tFWV9DT0RFX1dBS0VdID0gMHgwZTYzLAotCi0gICAgW1Ff S0VZX0NPREVfQVVESU9ORVhUXSA9IDB4ZTAxOSwKLSAgICBbUV9LRVlfQ09ERV9BVURJT1BSRVZd ID0gMHhlMDEwLAotICAgIFtRX0tFWV9DT0RFX0FVRElPU1RPUF0gPSAweGUwMjQsCi0gICAgW1Ff S0VZX0NPREVfQVVESU9QTEFZXSA9IDB4ZTAyMiwKLSAgICBbUV9LRVlfQ09ERV9BVURJT01VVEVd ID0gMHhlMDIwLAotICAgIFtRX0tFWV9DT0RFX1ZPTFVNRVVQXSA9IDB4ZTAzMCwKLSAgICBbUV9L RVlfQ09ERV9WT0xVTUVET1dOXSA9IDB4ZTAyZSwKLSAgICBbUV9LRVlfQ09ERV9NRURJQVNFTEVD VF0gPSAweGUwNmQsCi0gICAgW1FfS0VZX0NPREVfTUFJTF0gPSAweGUwNmMsCi0gICAgW1FfS0VZ X0NPREVfQ0FMQ1VMQVRPUl0gPSAweGUwMjEsCi0gICAgW1FfS0VZX0NPREVfQ09NUFVURVJdID0g MHhlMDZiLAotICAgIFtRX0tFWV9DT0RFX0ZJTkRdID0gMHhlMDY1LAotICAgIFtRX0tFWV9DT0RF X0FDX0hPTUVdID0gMHhlMDMyLAotICAgIFtRX0tFWV9DT0RFX0FDX0JBQ0tdID0gMHhlMDZhLAot ICAgIFtRX0tFWV9DT0RFX0FDX0ZPUldBUkRdID0gMHhlMDY5LAotICAgIFtRX0tFWV9DT0RFX1NU T1BdID0gMHhlMDY4LAotICAgIFtRX0tFWV9DT0RFX0FDX1JFRlJFU0hdID0gMHhlMDY3LAotICAg IFtRX0tFWV9DT0RFX0FDX0JPT0tNQVJLU10gPSAweGUwNjYsCi0KLSAgICBbUV9LRVlfQ09ERV9B U1RFUklTS10gPSAweDM3LAotICAgIFtRX0tFWV9DT0RFX0xFU1NdID0gMHg1NiwKLSAgICBbUV9L RVlfQ09ERV9ST10gPSAweDczLAotICAgIFtRX0tFWV9DT0RFX0hJUkFHQU5BXSA9IDB4NzAsCi0g ICAgW1FfS0VZX0NPREVfSEVOS0FOXSA9IDB4NzksCi0gICAgW1FfS0VZX0NPREVfWUVOXSA9IDB4 N2QsCi0gICAgW1FfS0VZX0NPREVfS1BfQ09NTUFdID0gMHg3ZSwKLX07Ci0KLXN0YXRpYyBjb25z dCB1aW50MTZfdCBxY29kZV90b19rZXljb2RlX3NldDJbUV9LRVlfQ09ERV9fTUFYXSA9IHsKLSAg ICBbMCAuLi4gUV9LRVlfQ09ERV9fTUFYIC0gMV0gPSAwLAotCi0gICAgW1FfS0VZX0NPREVfQV0g PSAweDFjLAotICAgIFtRX0tFWV9DT0RFX0JdID0gMHgzMiwKLSAgICBbUV9LRVlfQ09ERV9DXSA9 IDB4MjEsCi0gICAgW1FfS0VZX0NPREVfRF0gPSAweDIzLAotICAgIFtRX0tFWV9DT0RFX0VdID0g MHgyNCwKLSAgICBbUV9LRVlfQ09ERV9GXSA9IDB4MmIsCi0gICAgW1FfS0VZX0NPREVfR10gPSAw eDM0LAotICAgIFtRX0tFWV9DT0RFX0hdID0gMHgzMywKLSAgICBbUV9LRVlfQ09ERV9JXSA9IDB4 NDMsCi0gICAgW1FfS0VZX0NPREVfSl0gPSAweDNiLAotICAgIFtRX0tFWV9DT0RFX0tdID0gMHg0 MiwKLSAgICBbUV9LRVlfQ09ERV9MXSA9IDB4NGIsCi0gICAgW1FfS0VZX0NPREVfTV0gPSAweDNh LAotICAgIFtRX0tFWV9DT0RFX05dID0gMHgzMSwKLSAgICBbUV9LRVlfQ09ERV9PXSA9IDB4NDQs Ci0gICAgW1FfS0VZX0NPREVfUF0gPSAweDRkLAotICAgIFtRX0tFWV9DT0RFX1FdID0gMHgxNSwK LSAgICBbUV9LRVlfQ09ERV9SXSA9IDB4MmQsCi0gICAgW1FfS0VZX0NPREVfU10gPSAweDFiLAot ICAgIFtRX0tFWV9DT0RFX1RdID0gMHgyYywKLSAgICBbUV9LRVlfQ09ERV9VXSA9IDB4M2MsCi0g ICAgW1FfS0VZX0NPREVfVl0gPSAweDJhLAotICAgIFtRX0tFWV9DT0RFX1ddID0gMHgxZCwKLSAg ICBbUV9LRVlfQ09ERV9YXSA9IDB4MjIsCi0gICAgW1FfS0VZX0NPREVfWV0gPSAweDM1LAotICAg IFtRX0tFWV9DT0RFX1pdID0gMHgxYSwKLSAgICBbUV9LRVlfQ09ERV8wXSA9IDB4NDUsCi0gICAg W1FfS0VZX0NPREVfMV0gPSAweDE2LAotICAgIFtRX0tFWV9DT0RFXzJdID0gMHgxZSwKLSAgICBb UV9LRVlfQ09ERV8zXSA9IDB4MjYsCi0gICAgW1FfS0VZX0NPREVfNF0gPSAweDI1LAotICAgIFtR X0tFWV9DT0RFXzVdID0gMHgyZSwKLSAgICBbUV9LRVlfQ09ERV82XSA9IDB4MzYsCi0gICAgW1Ff S0VZX0NPREVfN10gPSAweDNkLAotICAgIFtRX0tFWV9DT0RFXzhdID0gMHgzZSwKLSAgICBbUV9L RVlfQ09ERV85XSA9IDB4NDYsCi0gICAgW1FfS0VZX0NPREVfR1JBVkVfQUNDRU5UXSA9IDB4MGUs Ci0gICAgW1FfS0VZX0NPREVfTUlOVVNdID0gMHg0ZSwKLSAgICBbUV9LRVlfQ09ERV9FUVVBTF0g PSAweDU1LAotICAgIFtRX0tFWV9DT0RFX0JBQ0tTTEFTSF0gPSAweDVkLAotICAgIFtRX0tFWV9D T0RFX0JBQ0tTUEFDRV0gPSAweDY2LAotICAgIFtRX0tFWV9DT0RFX1NQQ10gPSAweDI5LAotICAg IFtRX0tFWV9DT0RFX1RBQl0gPSAweDBkLAotICAgIFtRX0tFWV9DT0RFX0NBUFNfTE9DS10gPSAw eDU4LAotICAgIFtRX0tFWV9DT0RFX1NISUZUXSA9IDB4MTIsCi0gICAgW1FfS0VZX0NPREVfQ1RS TF0gPSAweDE0LAotICAgIFtRX0tFWV9DT0RFX01FVEFfTF0gPSAweGUwMWYsCi0gICAgW1FfS0VZ X0NPREVfQUxUXSA9IDB4MTEsCi0gICAgW1FfS0VZX0NPREVfU0hJRlRfUl0gPSAweDU5LAotICAg IFtRX0tFWV9DT0RFX0NUUkxfUl0gPSAweGUwMTQsCi0gICAgW1FfS0VZX0NPREVfTUVUQV9SXSA9 IDB4ZTAyNywKLSAgICBbUV9LRVlfQ09ERV9BTFRfUl0gPSAweGUwMTEsCi0gICAgW1FfS0VZX0NP REVfTUVOVV0gPSAweGUwMmYsCi0gICAgW1FfS0VZX0NPREVfUkVUXSA9IDB4NWEsCi0gICAgW1Ff S0VZX0NPREVfRVNDXSA9IDB4NzYsCi0gICAgW1FfS0VZX0NPREVfRjFdID0gMHgwNSwKLSAgICBb UV9LRVlfQ09ERV9GMl0gPSAweDA2LAotICAgIFtRX0tFWV9DT0RFX0YzXSA9IDB4MDQsCi0gICAg W1FfS0VZX0NPREVfRjRdID0gMHgwYywKLSAgICBbUV9LRVlfQ09ERV9GNV0gPSAweDAzLAotICAg IFtRX0tFWV9DT0RFX0Y2XSA9IDB4MGIsCi0gICAgW1FfS0VZX0NPREVfRjddID0gMHg4MywKLSAg ICBbUV9LRVlfQ09ERV9GOF0gPSAweDBhLAotICAgIFtRX0tFWV9DT0RFX0Y5XSA9IDB4MDEsCi0g ICAgW1FfS0VZX0NPREVfRjEwXSA9IDB4MDksCi0gICAgW1FfS0VZX0NPREVfRjExXSA9IDB4Nzgs Ci0gICAgW1FfS0VZX0NPREVfRjEyXSA9IDB4MDcsCi0gICAgLyogc3BlY2lhbCBoYW5kbGluZyBm b3IgUV9LRVlfQ09ERV9QUklOVCAqLwotICAgIFtRX0tFWV9DT0RFX1NDUk9MTF9MT0NLXSA9IDB4 N2UsCi0gICAgLyogc3BlY2lhbCBoYW5kbGluZyBmb3IgUV9LRVlfQ09ERV9QQVVTRSAqLwotICAg IFtRX0tFWV9DT0RFX0JSQUNLRVRfTEVGVF0gPSAweDU0LAotICAgIFtRX0tFWV9DT0RFX0lOU0VS VF0gPSAweGUwNzAsCi0gICAgW1FfS0VZX0NPREVfSE9NRV0gPSAweGUwNmMsCi0gICAgW1FfS0VZ X0NPREVfUEdVUF0gPSAweGUwN2QsCi0gICAgW1FfS0VZX0NPREVfREVMRVRFXSA9IDB4ZTA3MSwK LSAgICBbUV9LRVlfQ09ERV9FTkRdID0gMHhlMDY5LAotICAgIFtRX0tFWV9DT0RFX1BHRE5dID0g MHhlMDdhLAotICAgIFtRX0tFWV9DT0RFX1VQXSA9IDB4ZTA3NSwKLSAgICBbUV9LRVlfQ09ERV9M RUZUXSA9IDB4ZTA2YiwKLSAgICBbUV9LRVlfQ09ERV9ET1dOXSA9IDB4ZTA3MiwKLSAgICBbUV9L RVlfQ09ERV9SSUdIVF0gPSAweGUwNzQsCi0gICAgW1FfS0VZX0NPREVfTlVNX0xPQ0tdID0gMHg3 NywKLSAgICBbUV9LRVlfQ09ERV9LUF9ESVZJREVdID0gMHhlMDRhLAotICAgIFtRX0tFWV9DT0RF X0tQX01VTFRJUExZXSA9IDB4N2MsCi0gICAgW1FfS0VZX0NPREVfS1BfU1VCVFJBQ1RdID0gMHg3 YiwKLSAgICBbUV9LRVlfQ09ERV9LUF9BRERdID0gMHg3OSwKLSAgICBbUV9LRVlfQ09ERV9LUF9F TlRFUl0gPSAweGUwNWEsCi0gICAgW1FfS0VZX0NPREVfS1BfREVDSU1BTF0gPSAweDcxLAotICAg IFtRX0tFWV9DT0RFX0tQXzBdID0gMHg3MCwKLSAgICBbUV9LRVlfQ09ERV9LUF8xXSA9IDB4Njks Ci0gICAgW1FfS0VZX0NPREVfS1BfMl0gPSAweDcyLAotICAgIFtRX0tFWV9DT0RFX0tQXzNdID0g MHg3YSwKLSAgICBbUV9LRVlfQ09ERV9LUF80XSA9IDB4NmIsCi0gICAgW1FfS0VZX0NPREVfS1Bf NV0gPSAweDczLAotICAgIFtRX0tFWV9DT0RFX0tQXzZdID0gMHg3NCwKLSAgICBbUV9LRVlfQ09E RV9LUF83XSA9IDB4NmMsCi0gICAgW1FfS0VZX0NPREVfS1BfOF0gPSAweDc1LAotICAgIFtRX0tF WV9DT0RFX0tQXzldID0gMHg3ZCwKLSAgICBbUV9LRVlfQ09ERV9CUkFDS0VUX1JJR0hUXSA9IDB4 NWIsCi0gICAgW1FfS0VZX0NPREVfU0VNSUNPTE9OXSA9IDB4NGMsCi0gICAgW1FfS0VZX0NPREVf QVBPU1RST1BIRV0gPSAweDUyLAotICAgIFtRX0tFWV9DT0RFX0NPTU1BXSA9IDB4NDEsCi0gICAg W1FfS0VZX0NPREVfRE9UXSA9IDB4NDksCi0gICAgW1FfS0VZX0NPREVfU0xBU0hdID0gMHg0YSwK LQotICAgIFtRX0tFWV9DT0RFX1BPV0VSXSA9IDB4MGUzNywKLSAgICBbUV9LRVlfQ09ERV9TTEVF UF0gPSAweDBlM2YsCi0gICAgW1FfS0VZX0NPREVfV0FLRV0gPSAweDBlNWUsCi0KLSAgICBbUV9L RVlfQ09ERV9BVURJT05FWFRdID0gMHhlMDRkLAotICAgIFtRX0tFWV9DT0RFX0FVRElPUFJFVl0g PSAweGUwMTUsCi0gICAgW1FfS0VZX0NPREVfQVVESU9TVE9QXSA9IDB4ZTAzYiwKLSAgICBbUV9L RVlfQ09ERV9BVURJT1BMQVldID0gMHhlMDM0LAotICAgIFtRX0tFWV9DT0RFX0FVRElPTVVURV0g PSAweGUwMjMsCi0gICAgW1FfS0VZX0NPREVfVk9MVU1FVVBdID0gMHhlMDMyLAotICAgIFtRX0tF WV9DT0RFX1ZPTFVNRURPV05dID0gMHhlMDIxLAotICAgIFtRX0tFWV9DT0RFX01FRElBU0VMRUNU XSA9IDB4ZTA1MCwKLSAgICBbUV9LRVlfQ09ERV9NQUlMXSA9IDB4ZTA0OCwKLSAgICBbUV9LRVlf Q09ERV9DQUxDVUxBVE9SXSA9IDB4ZTAyYiwKLSAgICBbUV9LRVlfQ09ERV9DT01QVVRFUl0gPSAw eGUwNDAsCi0gICAgW1FfS0VZX0NPREVfRklORF0gPSAweGUwMTAsCi0gICAgW1FfS0VZX0NPREVf QUNfSE9NRV0gPSAweGUwM2EsCi0gICAgW1FfS0VZX0NPREVfQUNfQkFDS10gPSAweGUwMzgsCi0g ICAgW1FfS0VZX0NPREVfQUNfRk9SV0FSRF0gPSAweGUwMzAsCi0gICAgW1FfS0VZX0NPREVfU1RP UF0gPSAweGUwMjgsCi0gICAgW1FfS0VZX0NPREVfQUNfUkVGUkVTSF0gPSAweGUwMjAsCi0gICAg W1FfS0VZX0NPREVfQUNfQk9PS01BUktTXSA9IDB4ZTAxOCwKLQotICAgIFtRX0tFWV9DT0RFX0FT VEVSSVNLXSA9IDB4N2MsCi0gICAgW1FfS0VZX0NPREVfTEVTU10gPSAweDYxLAotICAgIFtRX0tF WV9DT0RFX1NZU1JRXSA9IDB4N2YsCi0gICAgW1FfS0VZX0NPREVfUk9dID0gMHg1MSwKLSAgICBb UV9LRVlfQ09ERV9ISVJBR0FOQV0gPSAweDEzLAotICAgIFtRX0tFWV9DT0RFX0hFTktBTl0gPSAw eDY0LAotICAgIFtRX0tFWV9DT0RFX1lFTl0gPSAweDZhLAotICAgIFtRX0tFWV9DT0RFX0tQX0NP TU1BXSA9IDB4NmQsCi19OwotCi1zdGF0aWMgY29uc3QgdWludDE2X3QgcWNvZGVfdG9fa2V5Y29k ZV9zZXQzW1FfS0VZX0NPREVfX01BWF0gPSB7Ci0gICAgWzAgLi4uIFFfS0VZX0NPREVfX01BWCAt IDFdID0gMCwKLQotICAgIFtRX0tFWV9DT0RFX0FdID0gMHgxYywKLSAgICBbUV9LRVlfQ09ERV9C XSA9IDB4MzIsCi0gICAgW1FfS0VZX0NPREVfQ10gPSAweDIxLAotICAgIFtRX0tFWV9DT0RFX0Rd ID0gMHgyMywKLSAgICBbUV9LRVlfQ09ERV9FXSA9IDB4MjQsCi0gICAgW1FfS0VZX0NPREVfRl0g PSAweDJiLAotICAgIFtRX0tFWV9DT0RFX0ddID0gMHgzNCwKLSAgICBbUV9LRVlfQ09ERV9IXSA9 IDB4MzMsCi0gICAgW1FfS0VZX0NPREVfSV0gPSAweDQzLAotICAgIFtRX0tFWV9DT0RFX0pdID0g MHgzYiwKLSAgICBbUV9LRVlfQ09ERV9LXSA9IDB4NDIsCi0gICAgW1FfS0VZX0NPREVfTF0gPSAw eDRiLAotICAgIFtRX0tFWV9DT0RFX01dID0gMHgzYSwKLSAgICBbUV9LRVlfQ09ERV9OXSA9IDB4 MzEsCi0gICAgW1FfS0VZX0NPREVfT10gPSAweDQ0LAotICAgIFtRX0tFWV9DT0RFX1BdID0gMHg0 ZCwKLSAgICBbUV9LRVlfQ09ERV9RXSA9IDB4MTUsCi0gICAgW1FfS0VZX0NPREVfUl0gPSAweDJk LAotICAgIFtRX0tFWV9DT0RFX1NdID0gMHgxYiwKLSAgICBbUV9LRVlfQ09ERV9UXSA9IDB4MmMs Ci0gICAgW1FfS0VZX0NPREVfVV0gPSAweDNjLAotICAgIFtRX0tFWV9DT0RFX1ZdID0gMHgyYSwK LSAgICBbUV9LRVlfQ09ERV9XXSA9IDB4MWQsCi0gICAgW1FfS0VZX0NPREVfWF0gPSAweDIyLAot ICAgIFtRX0tFWV9DT0RFX1ldID0gMHgzNSwKLSAgICBbUV9LRVlfQ09ERV9aXSA9IDB4MWEsCi0g ICAgW1FfS0VZX0NPREVfMF0gPSAweDQ1LAotICAgIFtRX0tFWV9DT0RFXzFdID0gMHgxNiwKLSAg ICBbUV9LRVlfQ09ERV8yXSA9IDB4MWUsCi0gICAgW1FfS0VZX0NPREVfM10gPSAweDI2LAotICAg IFtRX0tFWV9DT0RFXzRdID0gMHgyNSwKLSAgICBbUV9LRVlfQ09ERV81XSA9IDB4MmUsCi0gICAg W1FfS0VZX0NPREVfNl0gPSAweDM2LAotICAgIFtRX0tFWV9DT0RFXzddID0gMHgzZCwKLSAgICBb UV9LRVlfQ09ERV84XSA9IDB4M2UsCi0gICAgW1FfS0VZX0NPREVfOV0gPSAweDQ2LAotICAgIFtR X0tFWV9DT0RFX0dSQVZFX0FDQ0VOVF0gPSAweDBlLAotICAgIFtRX0tFWV9DT0RFX01JTlVTXSA9 IDB4NGUsCi0gICAgW1FfS0VZX0NPREVfRVFVQUxdID0gMHg1NSwKLSAgICBbUV9LRVlfQ09ERV9C QUNLU0xBU0hdID0gMHg1YywKLSAgICBbUV9LRVlfQ09ERV9CQUNLU1BBQ0VdID0gMHg2NiwKLSAg ICBbUV9LRVlfQ09ERV9TUENdID0gMHgyOSwKLSAgICBbUV9LRVlfQ09ERV9UQUJdID0gMHgwZCwK LSAgICBbUV9LRVlfQ09ERV9DQVBTX0xPQ0tdID0gMHgxNCwKLSAgICBbUV9LRVlfQ09ERV9TSElG VF0gPSAweDEyLAotICAgIFtRX0tFWV9DT0RFX0NUUkxdID0gMHgxMSwKLSAgICBbUV9LRVlfQ09E RV9NRVRBX0xdID0gMHg4YiwKLSAgICBbUV9LRVlfQ09ERV9BTFRdID0gMHgxOSwKLSAgICBbUV9L RVlfQ09ERV9TSElGVF9SXSA9IDB4NTksCi0gICAgW1FfS0VZX0NPREVfQ1RSTF9SXSA9IDB4NTgs Ci0gICAgW1FfS0VZX0NPREVfTUVUQV9SXSA9IDB4OGMsCi0gICAgW1FfS0VZX0NPREVfQUxUX1Jd ID0gMHgzOSwKLSAgICBbUV9LRVlfQ09ERV9NRU5VXSA9IDB4OGQsCi0gICAgW1FfS0VZX0NPREVf UkVUXSA9IDB4NWEsCi0gICAgW1FfS0VZX0NPREVfRVNDXSA9IDB4MDgsCi0gICAgW1FfS0VZX0NP REVfRjFdID0gMHgwNywKLSAgICBbUV9LRVlfQ09ERV9GMl0gPSAweDBmLAotICAgIFtRX0tFWV9D T0RFX0YzXSA9IDB4MTcsCi0gICAgW1FfS0VZX0NPREVfRjRdID0gMHgxZiwKLSAgICBbUV9LRVlf Q09ERV9GNV0gPSAweDI3LAotICAgIFtRX0tFWV9DT0RFX0Y2XSA9IDB4MmYsCi0gICAgW1FfS0VZ X0NPREVfRjddID0gMHgzNywKLSAgICBbUV9LRVlfQ09ERV9GOF0gPSAweDNmLAotICAgIFtRX0tF WV9DT0RFX0Y5XSA9IDB4NDcsCi0gICAgW1FfS0VZX0NPREVfRjEwXSA9IDB4NGYsCi0gICAgW1Ff S0VZX0NPREVfRjExXSA9IDB4NTYsCi0gICAgW1FfS0VZX0NPREVfRjEyXSA9IDB4NWUsCi0gICAg W1FfS0VZX0NPREVfUFJJTlRdID0gMHg1NywKLSAgICBbUV9LRVlfQ09ERV9TQ1JPTExfTE9DS10g PSAweDVmLAotICAgIFtRX0tFWV9DT0RFX1BBVVNFXSA9IDB4NjIsCi0gICAgW1FfS0VZX0NPREVf QlJBQ0tFVF9MRUZUXSA9IDB4NTQsCi0gICAgW1FfS0VZX0NPREVfSU5TRVJUXSA9IDB4NjcsCi0g ICAgW1FfS0VZX0NPREVfSE9NRV0gPSAweDZlLAotICAgIFtRX0tFWV9DT0RFX1BHVVBdID0gMHg2 ZiwKLSAgICBbUV9LRVlfQ09ERV9ERUxFVEVdID0gMHg2NCwKLSAgICBbUV9LRVlfQ09ERV9FTkRd ID0gMHg2NSwKLSAgICBbUV9LRVlfQ09ERV9QR0ROXSA9IDB4NmQsCi0gICAgW1FfS0VZX0NPREVf VVBdID0gMHg2MywKLSAgICBbUV9LRVlfQ09ERV9MRUZUXSA9IDB4NjEsCi0gICAgW1FfS0VZX0NP REVfRE9XTl0gPSAweDYwLAotICAgIFtRX0tFWV9DT0RFX1JJR0hUXSA9IDB4NmEsCi0gICAgW1Ff S0VZX0NPREVfTlVNX0xPQ0tdID0gMHg3NiwKLSAgICBbUV9LRVlfQ09ERV9LUF9ESVZJREVdID0g MHg0YSwKLSAgICBbUV9LRVlfQ09ERV9LUF9NVUxUSVBMWV0gPSAweDdlLAotICAgIFtRX0tFWV9D T0RFX0tQX1NVQlRSQUNUXSA9IDB4NGUsCi0gICAgW1FfS0VZX0NPREVfS1BfQUREXSA9IDB4N2Ms Ci0gICAgW1FfS0VZX0NPREVfS1BfRU5URVJdID0gMHg3OSwKLSAgICBbUV9LRVlfQ09ERV9LUF9E RUNJTUFMXSA9IDB4NzEsCi0gICAgW1FfS0VZX0NPREVfS1BfMF0gPSAweDcwLAotICAgIFtRX0tF WV9DT0RFX0tQXzFdID0gMHg2OSwKLSAgICBbUV9LRVlfQ09ERV9LUF8yXSA9IDB4NzIsCi0gICAg W1FfS0VZX0NPREVfS1BfM10gPSAweDdhLAotICAgIFtRX0tFWV9DT0RFX0tQXzRdID0gMHg2YiwK LSAgICBbUV9LRVlfQ09ERV9LUF81XSA9IDB4NzMsCi0gICAgW1FfS0VZX0NPREVfS1BfNl0gPSAw eDc0LAotICAgIFtRX0tFWV9DT0RFX0tQXzddID0gMHg2YywKLSAgICBbUV9LRVlfQ09ERV9LUF84 XSA9IDB4NzUsCi0gICAgW1FfS0VZX0NPREVfS1BfOV0gPSAweDdkLAotICAgIFtRX0tFWV9DT0RF X0JSQUNLRVRfUklHSFRdID0gMHg1YiwKLSAgICBbUV9LRVlfQ09ERV9TRU1JQ09MT05dID0gMHg0 YywKLSAgICBbUV9LRVlfQ09ERV9BUE9TVFJPUEhFXSA9IDB4NTIsCi0gICAgW1FfS0VZX0NPREVf Q09NTUFdID0gMHg0MSwKLSAgICBbUV9LRVlfQ09ERV9ET1RdID0gMHg0OSwKLSAgICBbUV9LRVlf Q09ERV9TTEFTSF0gPSAweDRhLAotCi0gICAgW1FfS0VZX0NPREVfSElSQUdBTkFdID0gMHg4NywK LSAgICBbUV9LRVlfQ09ERV9IRU5LQU5dID0gMHg4NiwKLSAgICBbUV9LRVlfQ09ERV9ZRU5dID0g MHg1ZCwKLX07Ci0KIHN0YXRpYyB1aW50OF90IHRyYW5zbGF0ZV90YWJsZVsyNTZdID0gewogICAg IDB4ZmYsIDB4NDMsIDB4NDEsIDB4M2YsIDB4M2QsIDB4M2IsIDB4M2MsIDB4NTgsCiAgICAgMHg2 NCwgMHg0NCwgMHg0MiwgMHg0MCwgMHgzZSwgMHgwZiwgMHgyOSwgMHg1OSwKQEAgLTYyNCw3ICsy MjksNyBAQCBzdGF0aWMgdm9pZCBwczJfa2V5Ym9hcmRfZXZlbnQoRGV2aWNlU3RhdGUgKmRldiwg UWVtdUNvbnNvbGUgKnNyYywKICAgICBQUzJLYmRTdGF0ZSAqcyA9IChQUzJLYmRTdGF0ZSAqKWRl djsKICAgICBJbnB1dEtleUV2ZW50ICprZXkgPSBldnQtPnUua2V5LmRhdGE7CiAgICAgaW50IHFj b2RlOwotICAgIHVpbnQxNl90IGtleWNvZGU7CisgICAgdWludDE2X3Qga2V5Y29kZSA9IDA7CiAg ICAgaW50IG1vZDsKIAogICAgIHFlbXVfc3lzdGVtX3dha2V1cF9yZXF1ZXN0KFFFTVVfV0FLRVVQ X1JFQVNPTl9PVEhFUik7CkBAIC03MDYsNyArMzExLDggQEAgc3RhdGljIHZvaWQgcHMyX2tleWJv YXJkX2V2ZW50KERldmljZVN0YXRlICpkZXYsIFFlbXVDb25zb2xlICpzcmMsCiAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAga2V5 Y29kZSA9IHFjb2RlX3RvX2tleWNvZGVfc2V0MVtxY29kZV07CisgICAgICAgICAgICBpZiAocWNv ZGUgPCBxZW11X2lucHV0X21hcF9xY29kZV90b19hdHNldDFfbGVuKQorICAgICAgICAgICAgICAg IGtleWNvZGUgPSBxZW11X2lucHV0X21hcF9xY29kZV90b19hdHNldDFbcWNvZGVdOwogICAgICAg ICAgICAgaWYgKGtleWNvZGUpIHsKICAgICAgICAgICAgICAgICBpZiAoa2V5Y29kZSAmIDB4ZmYw MCkgewogICAgICAgICAgICAgICAgICAgICBwczJfcHV0X2tleWNvZGUocywga2V5Y29kZSA+PiA4 KTsKQEAgLTc5OSw3ICs0MDUsOCBAQCBzdGF0aWMgdm9pZCBwczJfa2V5Ym9hcmRfZXZlbnQoRGV2 aWNlU3RhdGUgKmRldiwgUWVtdUNvbnNvbGUgKnNyYywKICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBrZXljb2RlID0gcWNvZGVf dG9fa2V5Y29kZV9zZXQyW3Fjb2RlXTsKKyAgICAgICAgICAgIGlmIChxY29kZSA8IHFlbXVfaW5w dXRfbWFwX3Fjb2RlX3RvX2F0c2V0Ml9sZW4pCisgICAgICAgICAgICAgICAga2V5Y29kZSA9IHFl bXVfaW5wdXRfbWFwX3Fjb2RlX3RvX2F0c2V0MltxY29kZV07CiAgICAgICAgICAgICBpZiAoa2V5 Y29kZSkgewogICAgICAgICAgICAgICAgIGlmIChrZXljb2RlICYgMHhmZjAwKSB7CiAgICAgICAg ICAgICAgICAgICAgIHBzMl9wdXRfa2V5Y29kZShzLCBrZXljb2RlID4+IDgpOwpAQCAtODE0LDcg KzQyMSw4IEBAIHN0YXRpYyB2b2lkIHBzMl9rZXlib2FyZF9ldmVudChEZXZpY2VTdGF0ZSAqZGV2 LCBRZW11Q29uc29sZSAqc3JjLAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNl IGlmIChzLT5zY2FuY29kZV9zZXQgPT0gMykgewotICAgICAgICBrZXljb2RlID0gcWNvZGVfdG9f a2V5Y29kZV9zZXQzW3Fjb2RlXTsKKyAgICAgICAgaWYgKHFjb2RlIDwgcWVtdV9pbnB1dF9tYXBf cWNvZGVfdG9fYXRzZXQzX2xlbikKKyAgICAgICAgICAgIGtleWNvZGUgPSBxZW11X2lucHV0X21h cF9xY29kZV90b19hdHNldDNbcWNvZGVdOwogICAgICAgICBpZiAoa2V5Y29kZSkgewogICAgICAg ICAgICAgLyogRklYTUU6IGJyZWFrIGNvZGUgc2hvdWxkIGJlIGNvbmZpZ3VyZWQgb24gYSBrZXkg Ynkga2V5IGJhc2lzICovCiAgICAgICAgICAgICBpZiAoIWtleS0+ZG93bikgewpkaWZmIC0tZ2l0 IGEvaW5jbHVkZS91aS9pbnB1dC5oIGIvaW5jbHVkZS91aS9pbnB1dC5oCmluZGV4IDZmNTZkODY4 YzcuLjc2MjM1YmE5N2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWkvaW5wdXQuaAorKysgYi9pbmNs dWRlL3VpL2lucHV0LmgKQEAgLTcxLDYgKzcxLDE1IEBAIHZvaWQgcWVtdV9yZW1vdmVfbW91c2Vf bW9kZV9jaGFuZ2Vfbm90aWZpZXIoTm90aWZpZXIgKm5vdGlmeSk7CiBleHRlcm4gY29uc3QgZ3Vp bnQgcWVtdV9pbnB1dF9tYXBfbGludXhfdG9fcWNvZGVfbGVuOwogZXh0ZXJuIGNvbnN0IGd1aW50 MTYgcWVtdV9pbnB1dF9tYXBfbGludXhfdG9fcWNvZGVbXTsKIAorZXh0ZXJuIGNvbnN0IGd1aW50 IHFlbXVfaW5wdXRfbWFwX3Fjb2RlX3RvX2F0c2V0MV9sZW47CitleHRlcm4gY29uc3QgZ3VpbnQx NiBxZW11X2lucHV0X21hcF9xY29kZV90b19hdHNldDFbXTsKKworZXh0ZXJuIGNvbnN0IGd1aW50 IHFlbXVfaW5wdXRfbWFwX3Fjb2RlX3RvX2F0c2V0Ml9sZW47CitleHRlcm4gY29uc3QgZ3VpbnQx NiBxZW11X2lucHV0X21hcF9xY29kZV90b19hdHNldDJbXTsKKworZXh0ZXJuIGNvbnN0IGd1aW50 IHFlbXVfaW5wdXRfbWFwX3Fjb2RlX3RvX2F0c2V0M19sZW47CitleHRlcm4gY29uc3QgZ3VpbnQx NiBxZW11X2lucHV0X21hcF9xY29kZV90b19hdHNldDNbXTsKKwogZXh0ZXJuIGNvbnN0IGd1aW50 IHFlbXVfaW5wdXRfbWFwX3Fjb2RlX3RvX2xpbnV4X2xlbjsKIGV4dGVybiBjb25zdCBndWludDE2 IHFlbXVfaW5wdXRfbWFwX3Fjb2RlX3RvX2xpbnV4W107CiAKZGlmZiAtLWdpdCBhL3VpL2lucHV0 LWtleW1hcC5jIGIvdWkvaW5wdXQta2V5bWFwLmMKaW5kZXggNmU1NDNkNjUxZi4uZDkwZjZhMTZm NyAxMDA2NDQKLS0tIGEvdWkvaW5wdXQta2V5bWFwLmMKKysrIGIvdWkvaW5wdXQta2V5bWFwLmMK QEAgLTYsNiArNiw5IEBACiAjaW5jbHVkZSAic3RhbmRhcmQtaGVhZGVycy9saW51eC9pbnB1dC5o IgogCiAjaW5jbHVkZSAidWkvaW5wdXQta2V5bWFwLWxpbnV4LXRvLXFjb2RlLmMiCisjaW5jbHVk ZSAidWkvaW5wdXQta2V5bWFwLXFjb2RlLXRvLWF0c2V0MS5jIgorI2luY2x1ZGUgInVpL2lucHV0 LWtleW1hcC1xY29kZS10by1hdHNldDIuYyIKKyNpbmNsdWRlICJ1aS9pbnB1dC1rZXltYXAtcWNv ZGUtdG8tYXRzZXQzLmMiCiAjaW5jbHVkZSAidWkvaW5wdXQta2V5bWFwLXFjb2RlLXRvLWxpbnV4 LmMiCiAjaW5jbHVkZSAidWkvaW5wdXQta2V5bWFwLXFjb2RlLXRvLXFudW0uYyIKICNpbmNsdWRl ICJ1aS9pbnB1dC1rZXltYXAtcW51bS10by1xY29kZS5jIgotLSAKMi4xNC4zCgoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcg bGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9q ZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA==