[Scummvm-git-logs] scummvm master -> fe756f69219d91c2f2d84f9cb07d2ee24345cc9c

sev- sev at scummvm.org
Fri Nov 6 18:35:17 UTC 2020


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
7a2a0542fc SCUMM: Support variation of Korean postpositions
fe756f6921 SCUMM: Optimize Korean final consonant table


Commit: 7a2a0542fc1351154140f7a85116c00f6de058b3
    https://github.com/scummvm/scummvm/commit/7a2a0542fc1351154140f7a85116c00f6de058b3
Author: wonst719 (wonst719 at gmail.com)
Date: 2020-11-06T19:35:12+01:00

Commit Message:
SCUMM: Support variation of Korean postpositions

Changed paths:
  A engines/scumm/ks_check.cpp
  A engines/scumm/ks_check.h
    engines/scumm/module.mk
    engines/scumm/scumm.cpp
    engines/scumm/scumm.h
    engines/scumm/string.cpp


diff --git a/engines/scumm/ks_check.cpp b/engines/scumm/ks_check.cpp
new file mode 100644
index 0000000000..0829a452b4
--- /dev/null
+++ b/engines/scumm/ks_check.cpp
@@ -0,0 +1,123 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "scumm/ks_check.h"
+
+namespace Scumm {
+	
+	// TODO: optimize table
+	static unsigned char TGConvTbl[] = {
+		0x61, 0x62, 0x65, 0x68, 0x69, 0x6a, 0x6b, 0x71, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7b, 0x7c, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa2, 0xa5, 0xa9, 0xb5, 0xb7, 0xc1, 0xc5,
+		0xc9, 0xe1, 0xe2, 0xe5, 0xe8, 0xe9, 0xeb, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0xf8, 0xfb, 0xfc, 0xfd, 0x41, 0x45, 0x49, 0x51, 0x53, 0x55, 0x56, 0x57, 0x61, 0x62, 0x63, 0x65, 0x68, 0x69, 0x71, 0x73, 0x75, 0x76, 0x77,
+		0x7b, 0x81, 0x85, 0x89, 0x93, 0x95, 0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xab, 0xad, 0xb0, 0xb1, 0xb3, 0xb5, 0xb7, 0xb8, 0xc1, 0xc2, 0xc5, 0xc9, 0xcb, 0xd1, 0xd3, 0xd5, 0xd7, 0xe1, 0xe5, 0xe9, 0xf1, 0xf6, 0xf7, 0x41,
+		0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x65, 0x69, 0x73, 0x75, 0x81, 0x82, 0x85, 0x88, 0x89, 0x8a, 0x8b, 0x90, 0x91, 0x93, 0x95, 0x97, 0x98, 0xa1, 0xa2, 0xa5, 0xa9, 0xb6, 0xb7, 0xc1, 0xd5, 0xe1, 0xe2,
+		0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0x41, 0x45, 0x49, 0x61, 0x62, 0x65, 0x68, 0x69, 0x6a, 0x71, 0x73, 0x75, 0x77, 0x81, 0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xab, 0xb1, 0xb3, 0xb5, 0xb7, 0xb8, 0xbc, 0x61, 0x62, 0x63, 0x65,
+		0x69, 0x6b, 0x71, 0x73, 0x75, 0x76, 0x77, 0x7b, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa2, 0xa9, 0xe1, 0xe2, 0xe3, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0x41, 0x42, 0x45, 0x51, 0x55,
+		0x57, 0x61, 0x65, 0x69, 0x75, 0x76, 0x7b, 0x81, 0xa1, 0xa2, 0xa5, 0xa7, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xb8, 0xb9, 0xc1, 0xc2, 0xc9, 0xd6, 0xd7, 0xe1, 0xe2, 0xf7, 0x41, 0x45, 0x49, 0x51, 0x53, 0x57, 0x61, 0x81,
+		0x82, 0x85, 0x89, 0x90, 0x91, 0x93, 0x95, 0x97, 0x98, 0xa1, 0xa9, 0xb6, 0xb7, 0xc1, 0xc2, 0xc5, 0xc9, 0xd1, 0xd3, 0xd6, 0xe1, 0xe5, 0xe9, 0xf1, 0xf3, 0x41, 0x61, 0x62, 0x65, 0x67, 0x69, 0x6b, 0x70, 0x71, 0x73,
+		0x75, 0x77, 0x7b, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0x61, 0x62, 0x63, 0x65, 0x68, 0x69, 0x6a, 0x6b, 0x71, 0x73, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7b, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95,
+		0x96, 0x97, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb7, 0xe1, 0xe2, 0xe4, 0xe5, 0xe9, 0xeb, 0xec, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0xfd, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x56, 0x57, 0x61, 0x62, 0x65, 0x69, 0x71,
+		0x73, 0x76, 0x77, 0x7a, 0x81, 0x85, 0xa1, 0xa2, 0xa5, 0xa9, 0xab, 0xb1, 0xb3, 0xb5, 0xb7, 0xbc, 0xbd, 0xc1, 0xc5, 0xc9, 0xd6, 0x41, 0x45, 0x49, 0x51, 0x53, 0x55, 0x61, 0x62, 0x65, 0x69, 0x73, 0x75, 0x77, 0x81,
+		0x82, 0x85, 0x88, 0x89, 0x91, 0x93, 0x95, 0x97, 0xa1, 0xb6, 0xc1, 0xe1, 0xe5, 0xe9, 0xf1, 0xf3, 0x41, 0x42, 0x49, 0x51, 0x53, 0x57, 0x61, 0x62, 0x65, 0x69, 0x6a, 0x6b, 0x71, 0x73, 0x75, 0x77, 0x78, 0x7c, 0x81,
+		0x85, 0x89, 0xa1, 0xa2, 0xa5, 0xa9, 0xaf, 0xb1, 0xb3, 0xb5, 0xb7, 0xbc, 0x61, 0x62, 0x63, 0x65, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x70, 0x71, 0x73, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91,
+		0x93, 0x95, 0x96, 0x97, 0xa1, 0xe1, 0xe2, 0xe3, 0xe5, 0xe8, 0xe9, 0xeb, 0xec, 0xf1, 0xf3, 0xf5, 0xf7, 0xf9, 0xfc, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x56, 0x57, 0x61, 0x65, 0x69, 0x76, 0x77, 0x81, 0x85,
+		0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xab, 0xad, 0xb1, 0xb3, 0xb5, 0xb7, 0xb9, 0xbb, 0xc1, 0xc5, 0xc9, 0xe1, 0xf6, 0x41, 0x45, 0x49, 0x51, 0x53, 0x55, 0x61, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x97, 0xa1, 0xb6,
+		0xc1, 0xd7, 0xe1, 0xe5, 0xe9, 0xf3, 0xf5, 0xf7, 0x41, 0x45, 0x49, 0x51, 0x57, 0x61, 0x62, 0x65, 0x68, 0x69, 0x6b, 0x71, 0x73, 0x75, 0x77, 0x81, 0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xb1, 0xb3, 0xb5, 0xb6, 0xb7, 0xb8,
+		0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x76, 0x77, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xe1, 0xe2, 0xe5, 0xe9, 0xeb, 0xec, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0xfd, 0x41, 0x42, 0x45, 0x49,
+		0x51, 0x53, 0x55, 0x56, 0x57, 0x61, 0x76, 0xa1, 0xa2, 0xa5, 0xa9, 0xb7, 0xc1, 0xc9, 0xe1, 0x41, 0x45, 0x81, 0x82, 0x85, 0x89, 0x90, 0x91, 0x97, 0xc1, 0xe1, 0xe5, 0xe9, 0xf1, 0xf3, 0xf7, 0x61, 0x62, 0x65, 0x68,
+		0x69, 0x71, 0x73, 0x75, 0x81, 0x85, 0x89, 0x91, 0x93, 0xa1, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x76, 0x77, 0x78, 0x7c, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95,
+		0x96, 0x97, 0xa1, 0xa2, 0xa5, 0xb5, 0xb7, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0xfd, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x76, 0x77, 0x81,
+		0x85, 0x93, 0x95, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xc1, 0xc5, 0xd7, 0xf6, 0x41, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x65, 0x69, 0x73, 0x75, 0x77, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95,
+		0x97, 0xa1, 0xb6, 0xc1, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf5, 0xf7, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x77, 0x78, 0x7b, 0x7c, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1,
+		0xb3, 0xb5, 0xb7, 0x61, 0x62, 0x65, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x71, 0x73, 0x75, 0x77, 0x78, 0x7b, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0x98, 0xa1, 0xa2, 0xa9, 0xb7, 0xe1, 0xe2, 0xe5,
+		0xe9, 0xeb, 0xf1, 0xf3, 0xf5, 0xf7, 0xf8, 0xfd, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x56, 0x57, 0x61, 0x62, 0x65, 0x69, 0x75, 0x76, 0x77, 0x79, 0x81, 0xa1, 0xa2, 0xa4, 0xa5, 0xa9, 0xab, 0xb1, 0xb3, 0xb5,
+		0xb7, 0xc1, 0xc5, 0xd6, 0xd7, 0x41, 0x45, 0x49, 0x53, 0x55, 0x57, 0x61, 0x65, 0x69, 0x73, 0x75, 0x81, 0x82, 0x83, 0x85, 0x88, 0x89, 0x8a, 0x8b, 0x91, 0x93, 0x95, 0x97, 0x9b, 0x9d, 0xa1, 0xa5, 0xa9, 0xb3, 0xb5,
+		0xc1, 0xe1, 0xe5, 0xe9, 0x41, 0x45, 0x49, 0x51, 0x55, 0x61, 0x65, 0x69, 0x71, 0x75, 0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xab, 0xb1, 0xb3, 0xb5, 0xb6, 0xb7, 0xb9, 0xbb, 0x61, 0x62, 0x63, 0x64, 0x65, 0x68, 0x69, 0x6a,
+		0x6b, 0x6c, 0x71, 0x73, 0x75, 0x77, 0x7b, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0x9b, 0xa1, 0xa2, 0xa5, 0xb3, 0xe1, 0xe2, 0xe5, 0xe8, 0xe9, 0xeb, 0xf1, 0xf3, 0xf5, 0xf7, 0xf8, 0x41, 0x42, 0x45,
+		0x48, 0x49, 0x51, 0x53, 0x55, 0x56, 0x57, 0x61, 0x62, 0x65, 0x69, 0x73, 0x75, 0x76, 0x77, 0x7b, 0x81, 0x85, 0xa1, 0xa2, 0xa3, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xc1, 0xc5, 0xd6, 0xe1, 0xf6, 0x41, 0x42, 0x45,
+		0x49, 0x51, 0x53, 0x61, 0x65, 0x81, 0x82, 0x85, 0x88, 0x89, 0x8a, 0x8b, 0x91, 0x93, 0x95, 0x97, 0x9b, 0x9c, 0xa1, 0xa9, 0xb6, 0xc1, 0xe1, 0xe2, 0xe5, 0xe9, 0xf7, 0x41, 0x45, 0x49, 0x51, 0x55, 0x57, 0x61, 0x62,
+		0x65, 0x69, 0x71, 0x73, 0x75, 0xa1, 0xa2, 0xa5, 0xa9, 0xab, 0xb1, 0xb3, 0xb5, 0xb7, 0xb8, 0xb9, 0x61, 0x62, 0x65, 0x69, 0x6b, 0x71, 0x73, 0x75, 0x76, 0x77, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96,
+		0x97, 0xa1, 0xa2, 0xb1, 0xe1, 0xe2, 0xe5, 0xe8, 0xe9, 0xf1, 0xf5, 0xf6, 0xf7, 0x41, 0x57, 0x61, 0x62, 0x71, 0x73, 0x75, 0x76, 0x77, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb7, 0x41, 0x61, 0x77, 0x81, 0x82, 0x85,
+		0x89, 0x91, 0x95, 0x97, 0x41, 0x57, 0x61, 0x65, 0x69, 0x71, 0x73, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0x61, 0x62, 0x64, 0x65, 0x68, 0x69, 0x6a, 0x6b, 0x71, 0x73, 0x75, 0x76, 0x77, 0x7b, 0x81, 0x82,
+		0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xc1, 0xc5, 0xc9, 0xd1, 0xd7, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe8, 0xe9, 0xeb, 0xec, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0xfc,
+		0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x56, 0x57, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x76, 0x77, 0x81, 0x85, 0x89, 0x97, 0xa1, 0xa2, 0xa3, 0xa5, 0xa9, 0xab, 0xb1, 0xb3, 0xb5, 0xb7, 0xbb, 0xc1, 0xc2,
+		0xc5, 0xc9, 0xd7, 0xe1, 0xe5, 0xe9, 0xf1, 0xf5, 0xf6, 0x41, 0x45, 0x49, 0x51, 0x53, 0x55, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x77, 0x81, 0x82, 0x85, 0x88, 0x89, 0x91, 0x93, 0x95, 0x97, 0x99, 0x9b, 0x9c,
+		0xa1, 0xb6, 0xc1, 0xc2, 0xc5, 0xc9, 0xd1, 0xd7, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf7, 0x41, 0x42, 0x49, 0x51, 0x55, 0x57, 0x61, 0x62, 0x65, 0x69, 0x6a, 0x71, 0x73, 0x75, 0x77, 0xa1, 0xa2, 0xa5, 0xa8,
+		0xa9, 0xb0, 0xb1, 0xb3, 0xb5, 0xb7, 0xbc, 0x61, 0x62, 0x64, 0x65, 0x69, 0x71, 0x73, 0x76, 0x77, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x96, 0x97, 0xb7, 0xe1, 0xe2, 0xe5, 0xe9, 0xeb, 0xf1, 0xf3, 0xf6, 0xf7,
+		0x41, 0x45, 0x49, 0x57, 0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xab, 0xb1, 0xb3, 0xb7, 0xc1, 0xc2, 0xc5, 0xd6, 0xe1, 0xf6, 0x41, 0x45, 0x49, 0x51, 0x53, 0x61, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x97, 0xa1, 0xb6, 0xc1,
+		0xe1, 0xe5, 0x57, 0x61, 0x62, 0x65, 0x69, 0x6b, 0x70, 0x71, 0x73, 0x81, 0x85, 0x89, 0x91, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0x61, 0x62, 0x65, 0x66, 0x67, 0x69, 0x6a, 0x6b, 0x70, 0x71, 0x73, 0x75,
+		0x76, 0x77, 0x7b, 0x7c, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa2, 0xa5, 0xa9, 0xac, 0xb1, 0xb3, 0xb5, 0xb7, 0xbb, 0xbd, 0xc1, 0xc5, 0xc9, 0xd3, 0xe1, 0xe2, 0xe5, 0xe6, 0xe8, 0xe9, 0xea,
+		0xeb, 0xf1, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xfa, 0xfc, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x62, 0x63, 0x65, 0x69, 0x6b, 0x6c, 0x71, 0x73, 0x74, 0x75, 0x76, 0x77, 0x7b, 0x7c, 0x7d, 0x81,
+		0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0xa1, 0xa2, 0xa5, 0xa9, 0xaa, 0xab, 0xad, 0xb0, 0xb1, 0xb3, 0xb5, 0xb7, 0xb9, 0xc1, 0xc2, 0xc5, 0xc9, 0xd1, 0xd3, 0xd5, 0xd6, 0xd7, 0xe1, 0xe2, 0xe5, 0xf1, 0xf5, 0xf7, 0x41,
+		0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x77, 0x81, 0x82, 0x85, 0x89, 0x8a, 0x8b, 0x91, 0x93, 0x95, 0x97, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb6, 0xb7, 0xc1, 0xc2,
+		0xc5, 0xc9, 0xd1, 0xd3, 0xd7, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf7, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x59, 0x61, 0x62, 0x65, 0x69, 0x6f, 0x71, 0x73, 0x75, 0x77, 0x78, 0x79, 0x7a, 0x7b,
+		0x7c, 0x7d, 0x81, 0x85, 0x89, 0x91, 0x95, 0xa1, 0xa2, 0xa5, 0xa9, 0xaa, 0xab, 0xb0, 0xb1, 0xb3, 0xb5, 0xb6, 0xb7, 0xb8, 0xbc, 0x61, 0x62, 0x65, 0x67, 0x68, 0x69, 0x6b, 0x71, 0x73, 0x75, 0x76, 0x77, 0x78, 0x81,
+		0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa2, 0xa5, 0xa7, 0xa9, 0xb1, 0xb7, 0xc1, 0xc5, 0xc9, 0xe1, 0xe2, 0xe5, 0xe9, 0xeb, 0xf1, 0xf3, 0xf5, 0xf7, 0xf8, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55,
+		0x57, 0x61, 0x65, 0x69, 0x71, 0x73, 0x76, 0x77, 0x81, 0xa1, 0xa2, 0xa5, 0xa9, 0xab, 0xb1, 0xb3, 0xb5, 0xb7, 0xb8, 0xb9, 0xbd, 0xc1, 0xc2, 0xc9, 0xd3, 0xd5, 0xd7, 0xe1, 0xf6, 0xf7, 0x41, 0x45, 0x49, 0x51, 0x53,
+		0x55, 0x57, 0x61, 0x62, 0x65, 0x77, 0x81, 0x82, 0x85, 0x89, 0x8a, 0x8b, 0x91, 0x93, 0x95, 0x97, 0xa1, 0xb6, 0xc1, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0x41, 0x45, 0x49, 0x51, 0x61, 0x62, 0x65, 0x69, 0x71,
+		0x73, 0x75, 0x77, 0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xab, 0xb1, 0xb3, 0xb5, 0xb7, 0xb8, 0xbb, 0xbc, 0x61, 0x62, 0x65, 0x67, 0x69, 0x6c, 0x71, 0x73, 0x75, 0x76, 0x77, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96,
+		0x97, 0xa1, 0xa5, 0xb7, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0x41, 0x57, 0x61, 0x76, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xb9, 0xc1, 0xc2, 0xc9, 0xd6, 0xe1, 0xf6, 0x41, 0x45, 0x49,
+		0x51, 0x53, 0x77, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x97, 0xa1, 0xb6, 0xb7, 0xe1, 0x41, 0x61, 0x71, 0x75, 0x77, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb7, 0xb8, 0xbd, 0x61, 0x62, 0x65, 0x67, 0x69, 0x71, 0x73,
+		0x75, 0x76, 0x77, 0x78, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa5, 0xa7, 0xa9, 0xb1, 0xb7, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55,
+		0x57, 0x61, 0x65, 0x76, 0x81, 0x85, 0x97, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xc1, 0xc5, 0xc9, 0xd7, 0x41, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x71, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95,
+		0x97, 0xa1, 0xb6, 0xc1, 0xc5, 0xe1, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf7, 0x41, 0x45, 0x49, 0x51, 0x57, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x77, 0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xaa, 0xb1, 0xb3, 0xb5, 0xb7,
+		0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x77, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa2, 0xb7, 0xe1, 0xe2, 0xe5, 0xe8, 0xe9, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0x41, 0x42, 0x45, 0x49, 0x51,
+		0x53, 0x55, 0x57, 0x61, 0x65, 0x69, 0x71, 0x73, 0x75, 0x76, 0x77, 0x81, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xc1, 0xc2, 0xc5, 0xc9, 0xd1, 0xd7, 0xe1, 0xf7, 0x41, 0x49, 0x61, 0x81, 0x82, 0x85, 0x89,
+		0x91, 0x93, 0x95, 0x97, 0xa1, 0xa5, 0xa9, 0xb7, 0xc1, 0xd7, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf7, 0x41, 0x45, 0x49, 0x51, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x77, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3,
+		0xb5, 0xb7, 0x61, 0x62, 0x65, 0x69, 0x6a, 0x71, 0x73, 0x75, 0x76, 0x77, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xb7, 0xe1, 0xe2, 0xe5, 0xe9, 0xeb, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0x41, 0x42,
+		0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x65, 0x76, 0x81, 0x85, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xbc, 0xc1, 0xc5, 0xe1, 0x41, 0x45, 0x55, 0x57, 0x61, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95,
+		0x97, 0xa1, 0xb6, 0xc1, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf7, 0x41, 0x45, 0x49, 0x51, 0x57, 0x61, 0x62, 0x65, 0x68, 0x69, 0x6b, 0x71, 0x73, 0x75, 0x81, 0x85, 0x89, 0x91, 0x93, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1,
+		0xb3, 0xb5, 0xb7, 0x61, 0x62, 0x63, 0x65, 0x69, 0x6b, 0x71, 0x73, 0x75, 0x76, 0x77, 0x7b, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa2, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7,
+		0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x65, 0x69, 0x71, 0x73, 0x76, 0x77, 0x81, 0x89, 0x93, 0x95, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xc1, 0xd7, 0x41, 0x45, 0x61, 0x65, 0x69, 0x73,
+		0x75, 0x81, 0x82, 0x85, 0x88, 0x89, 0x8b, 0x91, 0x93, 0x95, 0x97, 0xa1, 0xb7, 0xe1, 0xe5, 0xe9, 0xf1, 0xf5, 0x41, 0x45, 0x49, 0x51, 0x55, 0x57, 0x61, 0x65, 0x69, 0x71, 0x73, 0x75, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1,
+		0xb3, 0xb5, 0xb7, 0x61, 0x62, 0x65, 0x69, 0x6e, 0x71, 0x73, 0x75, 0x77, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xb7, 0xe1, 0xe2, 0xe5, 0xe9, 0xeb, 0xf1, 0xf3, 0xf5, 0xf7, 0x41, 0x42, 0x45,
+		0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x76, 0x77, 0x81, 0x85, 0x89, 0x93, 0xa1, 0xa2, 0xa5, 0xa9, 0xae, 0xb1, 0xb3, 0xb5, 0xb7, 0xbb, 0xc1, 0xc2, 0xc5, 0xc9, 0xd5, 0xd7, 0xe1,
+		0xe2, 0xe5, 0xf5, 0xf7, 0x41, 0x42, 0x45, 0x49, 0x53, 0x55, 0x57, 0x61, 0x65, 0x69, 0x73, 0x75, 0x81, 0x82, 0x85, 0x89, 0x8e, 0x91, 0x95, 0x97, 0xa1, 0xa5, 0xa9, 0xb1, 0xb7, 0xc1, 0xc2, 0xc5, 0xc9, 0xd7, 0xe1,
+		0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf7, 0x41, 0x42, 0x45, 0x49, 0x51, 0x55, 0x57, 0x61, 0x62, 0x65, 0x67, 0x68, 0x69, 0x6a, 0x71, 0x73, 0x75, 0x77, 0x7b, 0x81, 0x85, 0x89, 0x91, 0x93, 0x97, 0xa1, 0xa2, 0xa5,
+		0xa9, 0xb1, 0xb3, 0xb5, 0xb7,
+	};
+	
+	// final consonant table
+	const char JongsungTbl[32] = { 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 0, 0 };
+	
+	int checkHangul(byte hi, byte lo)
+	{
+		// hi: xx
+		// lo: yy
+		if ((0xA1 > lo) || (0xFE < lo)) {
+			return 0;
+		}
+		if ((hi >= 0xB0) && (hi <= 0xC8)) {
+			return 1;
+		}
+		return 0;
+	}
+
+	// check for jongsung (final consonant)
+	byte checkJongsung(byte hi, byte lo)
+	{
+		uint16 index = ((hi  - 0xb0) * 94 + lo - 0xa1);
+		
+		return JongsungTbl[TGConvTbl[index] & 0x1F];
+	}
+	
+} // End of namespace Scumm
diff --git a/engines/scumm/ks_check.h b/engines/scumm/ks_check.h
new file mode 100644
index 0000000000..289fbcc4f6
--- /dev/null
+++ b/engines/scumm/ks_check.h
@@ -0,0 +1,35 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef SCUMM_KS_CEHCK_H
+#define SCUMM_KS_CEHCK_H
+
+#include "common/scummsys.h"
+
+namespace Scumm {
+	
+	int checkHangul(byte hi, byte lo);
+	byte checkJongsung(byte hi, byte lo);
+	
+} // End of namespace Scumm
+
+#endif
diff --git a/engines/scumm/module.mk b/engines/scumm/module.mk
index 8f82add778..b12597be23 100644
--- a/engines/scumm/module.mk
+++ b/engines/scumm/module.mk
@@ -34,6 +34,7 @@ MODULE_OBJS := \
 	imuse/drivers/mac_m68k.o \
 	imuse/drivers/pcspk.o \
 	input.o \
+	ks_check.o \
 	metaengine.o \
 	midiparser_ro.o \
 	object.o \
diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp
index 08759d67ea..d28b7fe6c8 100644
--- a/engines/scumm/scumm.cpp
+++ b/engines/scumm/scumm.cpp
@@ -324,6 +324,7 @@ ScummEngine::ScummEngine(OSystem *syst, const DetectorResult &dr)
 	_costumeLoader = NULL;
 	_costumeRenderer = NULL;
 	_2byteFontPtr = 0;
+	_krStrPost = 0;
 	_V1TalkingActor = 0;
 	for (int i = 0; i < 20; i++)
 		_2byteMultiFontPtr[i] = NULL;
diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h
index cb5ab69ea6..afc91eca12 100644
--- a/engines/scumm/scumm.h
+++ b/engines/scumm/scumm.h
@@ -1144,6 +1144,7 @@ public:
 
 	int _2byteHeight;
 	int _2byteWidth;
+	int _krStrPost;
 	byte _newLineCharacter;
 	byte *get2byteCharPtr(int idx);
 
diff --git a/engines/scumm/string.cpp b/engines/scumm/string.cpp
index 322731e800..ec15902fee 100644
--- a/engines/scumm/string.cpp
+++ b/engines/scumm/string.cpp
@@ -40,6 +40,8 @@
 #include "scumm/verbs.h"
 #include "scumm/he/sound_he.h"
 
+#include "scumm/ks_check.h"
+
 namespace Scumm {
 
 
@@ -1398,13 +1400,76 @@ int ScummEngine::convertIntMessage(byte *dst, int dstSize, int var) {
 int ScummEngine::convertVerbMessage(byte *dst, int dstSize, int var) {
 	int num, k;
 
+	bool isKorVerbGlue = false;
+
+	if (_language == Common::KO_KOR && _useCJKMode && var & (1 << 15)) {
+		isKorVerbGlue = true;
+		var &= ~(1 << 15);
+	}
+
 	num = readVar(var);
 	if (num) {
 		for (k = 1; k < _numVerbs; k++) {
 			// Fix ZAK FM-TOWNS bug #1013617 by emulating exact (inconsistant?) behavior of the original code
 			if (num == _verbs[k].verbid && !_verbs[k].type && (!_verbs[k].saveid || (_game.version == 3 && _game.platform == Common::kPlatformFMTowns))) {
-				const byte *ptr = getResourceAddress(rtVerb, k);
-				return convertMessageToString(ptr, dst, dstSize);
+				if (isKorVerbGlue) {
+					static const byte code0380[4] = {0xFF, 0x07, 0x03, 0x80};                                 // "eul/reul"
+					static const byte code0480[4] = {0xFF, 0x07, 0x04, 0x80};                                 // "wa/gwa"
+					static const byte codeWalkTo[9] = {0xFF, 0x07, 0x03, 0x80, 0x20, 0xC7, 0xE2, 0xC7, 0xD8}; // "eul/reul hyang-hae"
+					byte _transText[10];
+					memset(_transText, 0, sizeof(_transText));
+					// WORKAROUND: MI Korean verb parser
+					if (_game.id == GID_MONKEY_VGA) {
+						switch (_verbs[k].verbid) {
+							case 1:		// Open
+							case 2:		// Close
+							case 3:		// Give
+							case 4:		// Turn on
+							case 5:		// Turn off
+							case 6:		// Push
+							case 7:		// Pull
+							case 8:		// Use
+							case 9:		// Look at
+							case 10:	// Walk to
+								memcpy(_transText, codeWalkTo, 9);
+								break;
+							case 11:	// Pick up
+								memcpy(_transText, code0380, 4);
+								break;
+							case 13:	// Talk to
+								memcpy(_transText, code0480, 4);
+								break;
+						}
+						return convertMessageToString(_transText, dst, dstSize);
+					}
+					// WORKAROUND: MI2 Korean verb parser
+					if (_game.id == GID_MONKEY2) {
+						if (_verbs[k].verbid <= 11) {
+							switch (_verbs[k].verbid) {
+								case 2:		// Open
+								case 3:		// Close
+								case 4:		// Give
+								case 5:		// Push
+								case 6:		// Pull
+								case 7:		// Use
+								case 8:		// Look at
+								case 9:		// Pick up
+									memcpy(_transText, code0380, 4);
+									break;
+								case 10:	// Talk to
+									memcpy(_transText, code0480, 4);
+									break;
+								case 11:	// Walk to
+									memcpy(_transText, codeWalkTo, 9);
+									break;
+							}
+							return convertMessageToString(_transText, dst, dstSize);
+						}
+					}
+				} else {
+					const byte *ptr = getResourceAddress(rtVerb, k);
+					return convertMessageToString(ptr, dst, dstSize);
+				}
 			}
 		}
 	}
@@ -1418,7 +1483,26 @@ int ScummEngine::convertNameMessage(byte *dst, int dstSize, int var) {
 	if (num) {
 		const byte *ptr = getObjOrActorName(num);
 		if (ptr) {
-			return convertMessageToString(ptr, dst, dstSize);
+			int increment = convertMessageToString(ptr, dst, dstSize);
+			if (_language == Common::KO_KOR && _useCJKMode) {
+				_krStrPost = 0;
+				int len = resStrLen(ptr);
+				if (len >= 2) {
+					for (int i = len; i > 1; i--) {
+						byte k1 = ptr[i - 2];
+						byte k2 = ptr[i - 1];
+						if (checkHangul(k1, k2)) {
+							int jongsung = checkJongsung(k1, k2);
+							if (jongsung)
+								_krStrPost |= 1;
+							if (jongsung == 8) // 'ri-eul' final consonant
+								_krStrPost |= (1 << 1);
+							break;
+						}
+					}
+				}
+			}
+			return increment;
 		}
 	}
 	return 0;
@@ -1443,10 +1527,42 @@ int ScummEngine::convertStringMessage(byte *dst, int dstSize, int var) {
 	if (_game.version == 3 || (_game.version >= 6 && _game.heversion < 72))
 		var = readVar(var);
 
-	if (var) {
+	if (_language == Common::KO_KOR && _useCJKMode && (var & (1 << 15))) {
+		int idx;
+		static const byte codeIdx[] = {0x00, 0x00, 0xC0, 0xB8, 0x00, 0x00, 0xC0, 0xCC, 0xB0, 0xA1, 0xC0, 0xCC, 0xB8, 0xA6, 0xC0, 0xBB, 0xBF, 0xCD, 0xB0, 0xFA, 0xB4, 0xC2, 0xC0, 0xBA};
+
+		if ((var & ~(1 << 15)) == 0)
+			idx = (2 * (var & ~(1 << 15)) + (_krStrPost & 1) - bool(_krStrPost & 2)) * 2;
+		else
+			idx = (2 * (var & ~(1 << 15)) + (_krStrPost & 1)) * 2;
+
+		byte _transText[3];
+		const byte byteIdx[] = {codeIdx[idx], codeIdx[idx + 1]};
+
+		memset(_transText, 0, sizeof(_transText));
+		memcpy(_transText, byteIdx, 2);
+
+		return convertMessageToString(_transText, dst, dstSize);
+	} else if (var) {
 		ptr = getStringAddress(var);
 		if (ptr) {
-			return convertMessageToString(ptr, dst, dstSize);
+			int increment = convertMessageToString(ptr, dst, dstSize);
+			if (_language == Common::KO_KOR && _useCJKMode) {
+				_krStrPost = 0;
+				for (int i = resStrLen(ptr); i > 1; i--) {
+					byte k1 = ptr[i - 2];
+					byte k2 = ptr[i - 1];
+					if (checkHangul(k1, k2)) {
+						int jongsung = checkJongsung(k1, k2);
+						if (jongsung)
+							_krStrPost |= 1;
+						if (jongsung == 8)	// 'ri-eul' final consonant
+							_krStrPost |= (1 << 1);
+						break;
+					}
+				}
+			}
+			return increment;
 		}
 	}
 	return 0;


Commit: fe756f69219d91c2f2d84f9cb07d2ee24345cc9c
    https://github.com/scummvm/scummvm/commit/fe756f69219d91c2f2d84f9cb07d2ee24345cc9c
Author: wonst719 (wonst719 at gmail.com)
Date: 2020-11-06T19:35:12+01:00

Commit Message:
SCUMM: Optimize Korean final consonant table

Changed paths:
    engines/scumm/ks_check.cpp


diff --git a/engines/scumm/ks_check.cpp b/engines/scumm/ks_check.cpp
index 0829a452b4..5024b03352 100644
--- a/engines/scumm/ks_check.cpp
+++ b/engines/scumm/ks_check.cpp
@@ -23,101 +23,175 @@
 #include "scumm/ks_check.h"
 
 namespace Scumm {
-	
-	// TODO: optimize table
-	static unsigned char TGConvTbl[] = {
-		0x61, 0x62, 0x65, 0x68, 0x69, 0x6a, 0x6b, 0x71, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7b, 0x7c, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa2, 0xa5, 0xa9, 0xb5, 0xb7, 0xc1, 0xc5,
-		0xc9, 0xe1, 0xe2, 0xe5, 0xe8, 0xe9, 0xeb, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0xf8, 0xfb, 0xfc, 0xfd, 0x41, 0x45, 0x49, 0x51, 0x53, 0x55, 0x56, 0x57, 0x61, 0x62, 0x63, 0x65, 0x68, 0x69, 0x71, 0x73, 0x75, 0x76, 0x77,
-		0x7b, 0x81, 0x85, 0x89, 0x93, 0x95, 0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xab, 0xad, 0xb0, 0xb1, 0xb3, 0xb5, 0xb7, 0xb8, 0xc1, 0xc2, 0xc5, 0xc9, 0xcb, 0xd1, 0xd3, 0xd5, 0xd7, 0xe1, 0xe5, 0xe9, 0xf1, 0xf6, 0xf7, 0x41,
-		0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x65, 0x69, 0x73, 0x75, 0x81, 0x82, 0x85, 0x88, 0x89, 0x8a, 0x8b, 0x90, 0x91, 0x93, 0x95, 0x97, 0x98, 0xa1, 0xa2, 0xa5, 0xa9, 0xb6, 0xb7, 0xc1, 0xd5, 0xe1, 0xe2,
-		0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0x41, 0x45, 0x49, 0x61, 0x62, 0x65, 0x68, 0x69, 0x6a, 0x71, 0x73, 0x75, 0x77, 0x81, 0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xab, 0xb1, 0xb3, 0xb5, 0xb7, 0xb8, 0xbc, 0x61, 0x62, 0x63, 0x65,
-		0x69, 0x6b, 0x71, 0x73, 0x75, 0x76, 0x77, 0x7b, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa2, 0xa9, 0xe1, 0xe2, 0xe3, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0x41, 0x42, 0x45, 0x51, 0x55,
-		0x57, 0x61, 0x65, 0x69, 0x75, 0x76, 0x7b, 0x81, 0xa1, 0xa2, 0xa5, 0xa7, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xb8, 0xb9, 0xc1, 0xc2, 0xc9, 0xd6, 0xd7, 0xe1, 0xe2, 0xf7, 0x41, 0x45, 0x49, 0x51, 0x53, 0x57, 0x61, 0x81,
-		0x82, 0x85, 0x89, 0x90, 0x91, 0x93, 0x95, 0x97, 0x98, 0xa1, 0xa9, 0xb6, 0xb7, 0xc1, 0xc2, 0xc5, 0xc9, 0xd1, 0xd3, 0xd6, 0xe1, 0xe5, 0xe9, 0xf1, 0xf3, 0x41, 0x61, 0x62, 0x65, 0x67, 0x69, 0x6b, 0x70, 0x71, 0x73,
-		0x75, 0x77, 0x7b, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0x61, 0x62, 0x63, 0x65, 0x68, 0x69, 0x6a, 0x6b, 0x71, 0x73, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7b, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95,
-		0x96, 0x97, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb7, 0xe1, 0xe2, 0xe4, 0xe5, 0xe9, 0xeb, 0xec, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0xfd, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x56, 0x57, 0x61, 0x62, 0x65, 0x69, 0x71,
-		0x73, 0x76, 0x77, 0x7a, 0x81, 0x85, 0xa1, 0xa2, 0xa5, 0xa9, 0xab, 0xb1, 0xb3, 0xb5, 0xb7, 0xbc, 0xbd, 0xc1, 0xc5, 0xc9, 0xd6, 0x41, 0x45, 0x49, 0x51, 0x53, 0x55, 0x61, 0x62, 0x65, 0x69, 0x73, 0x75, 0x77, 0x81,
-		0x82, 0x85, 0x88, 0x89, 0x91, 0x93, 0x95, 0x97, 0xa1, 0xb6, 0xc1, 0xe1, 0xe5, 0xe9, 0xf1, 0xf3, 0x41, 0x42, 0x49, 0x51, 0x53, 0x57, 0x61, 0x62, 0x65, 0x69, 0x6a, 0x6b, 0x71, 0x73, 0x75, 0x77, 0x78, 0x7c, 0x81,
-		0x85, 0x89, 0xa1, 0xa2, 0xa5, 0xa9, 0xaf, 0xb1, 0xb3, 0xb5, 0xb7, 0xbc, 0x61, 0x62, 0x63, 0x65, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x70, 0x71, 0x73, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91,
-		0x93, 0x95, 0x96, 0x97, 0xa1, 0xe1, 0xe2, 0xe3, 0xe5, 0xe8, 0xe9, 0xeb, 0xec, 0xf1, 0xf3, 0xf5, 0xf7, 0xf9, 0xfc, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x56, 0x57, 0x61, 0x65, 0x69, 0x76, 0x77, 0x81, 0x85,
-		0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xab, 0xad, 0xb1, 0xb3, 0xb5, 0xb7, 0xb9, 0xbb, 0xc1, 0xc5, 0xc9, 0xe1, 0xf6, 0x41, 0x45, 0x49, 0x51, 0x53, 0x55, 0x61, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x97, 0xa1, 0xb6,
-		0xc1, 0xd7, 0xe1, 0xe5, 0xe9, 0xf3, 0xf5, 0xf7, 0x41, 0x45, 0x49, 0x51, 0x57, 0x61, 0x62, 0x65, 0x68, 0x69, 0x6b, 0x71, 0x73, 0x75, 0x77, 0x81, 0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xb1, 0xb3, 0xb5, 0xb6, 0xb7, 0xb8,
-		0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x76, 0x77, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xe1, 0xe2, 0xe5, 0xe9, 0xeb, 0xec, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0xfd, 0x41, 0x42, 0x45, 0x49,
-		0x51, 0x53, 0x55, 0x56, 0x57, 0x61, 0x76, 0xa1, 0xa2, 0xa5, 0xa9, 0xb7, 0xc1, 0xc9, 0xe1, 0x41, 0x45, 0x81, 0x82, 0x85, 0x89, 0x90, 0x91, 0x97, 0xc1, 0xe1, 0xe5, 0xe9, 0xf1, 0xf3, 0xf7, 0x61, 0x62, 0x65, 0x68,
-		0x69, 0x71, 0x73, 0x75, 0x81, 0x85, 0x89, 0x91, 0x93, 0xa1, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x76, 0x77, 0x78, 0x7c, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95,
-		0x96, 0x97, 0xa1, 0xa2, 0xa5, 0xb5, 0xb7, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0xfd, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x76, 0x77, 0x81,
-		0x85, 0x93, 0x95, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xc1, 0xc5, 0xd7, 0xf6, 0x41, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x65, 0x69, 0x73, 0x75, 0x77, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95,
-		0x97, 0xa1, 0xb6, 0xc1, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf5, 0xf7, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x77, 0x78, 0x7b, 0x7c, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1,
-		0xb3, 0xb5, 0xb7, 0x61, 0x62, 0x65, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x71, 0x73, 0x75, 0x77, 0x78, 0x7b, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0x98, 0xa1, 0xa2, 0xa9, 0xb7, 0xe1, 0xe2, 0xe5,
-		0xe9, 0xeb, 0xf1, 0xf3, 0xf5, 0xf7, 0xf8, 0xfd, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x56, 0x57, 0x61, 0x62, 0x65, 0x69, 0x75, 0x76, 0x77, 0x79, 0x81, 0xa1, 0xa2, 0xa4, 0xa5, 0xa9, 0xab, 0xb1, 0xb3, 0xb5,
-		0xb7, 0xc1, 0xc5, 0xd6, 0xd7, 0x41, 0x45, 0x49, 0x53, 0x55, 0x57, 0x61, 0x65, 0x69, 0x73, 0x75, 0x81, 0x82, 0x83, 0x85, 0x88, 0x89, 0x8a, 0x8b, 0x91, 0x93, 0x95, 0x97, 0x9b, 0x9d, 0xa1, 0xa5, 0xa9, 0xb3, 0xb5,
-		0xc1, 0xe1, 0xe5, 0xe9, 0x41, 0x45, 0x49, 0x51, 0x55, 0x61, 0x65, 0x69, 0x71, 0x75, 0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xab, 0xb1, 0xb3, 0xb5, 0xb6, 0xb7, 0xb9, 0xbb, 0x61, 0x62, 0x63, 0x64, 0x65, 0x68, 0x69, 0x6a,
-		0x6b, 0x6c, 0x71, 0x73, 0x75, 0x77, 0x7b, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0x9b, 0xa1, 0xa2, 0xa5, 0xb3, 0xe1, 0xe2, 0xe5, 0xe8, 0xe9, 0xeb, 0xf1, 0xf3, 0xf5, 0xf7, 0xf8, 0x41, 0x42, 0x45,
-		0x48, 0x49, 0x51, 0x53, 0x55, 0x56, 0x57, 0x61, 0x62, 0x65, 0x69, 0x73, 0x75, 0x76, 0x77, 0x7b, 0x81, 0x85, 0xa1, 0xa2, 0xa3, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xc1, 0xc5, 0xd6, 0xe1, 0xf6, 0x41, 0x42, 0x45,
-		0x49, 0x51, 0x53, 0x61, 0x65, 0x81, 0x82, 0x85, 0x88, 0x89, 0x8a, 0x8b, 0x91, 0x93, 0x95, 0x97, 0x9b, 0x9c, 0xa1, 0xa9, 0xb6, 0xc1, 0xe1, 0xe2, 0xe5, 0xe9, 0xf7, 0x41, 0x45, 0x49, 0x51, 0x55, 0x57, 0x61, 0x62,
-		0x65, 0x69, 0x71, 0x73, 0x75, 0xa1, 0xa2, 0xa5, 0xa9, 0xab, 0xb1, 0xb3, 0xb5, 0xb7, 0xb8, 0xb9, 0x61, 0x62, 0x65, 0x69, 0x6b, 0x71, 0x73, 0x75, 0x76, 0x77, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96,
-		0x97, 0xa1, 0xa2, 0xb1, 0xe1, 0xe2, 0xe5, 0xe8, 0xe9, 0xf1, 0xf5, 0xf6, 0xf7, 0x41, 0x57, 0x61, 0x62, 0x71, 0x73, 0x75, 0x76, 0x77, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb7, 0x41, 0x61, 0x77, 0x81, 0x82, 0x85,
-		0x89, 0x91, 0x95, 0x97, 0x41, 0x57, 0x61, 0x65, 0x69, 0x71, 0x73, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0x61, 0x62, 0x64, 0x65, 0x68, 0x69, 0x6a, 0x6b, 0x71, 0x73, 0x75, 0x76, 0x77, 0x7b, 0x81, 0x82,
-		0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xc1, 0xc5, 0xc9, 0xd1, 0xd7, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe8, 0xe9, 0xeb, 0xec, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0xfc,
-		0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x56, 0x57, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x76, 0x77, 0x81, 0x85, 0x89, 0x97, 0xa1, 0xa2, 0xa3, 0xa5, 0xa9, 0xab, 0xb1, 0xb3, 0xb5, 0xb7, 0xbb, 0xc1, 0xc2,
-		0xc5, 0xc9, 0xd7, 0xe1, 0xe5, 0xe9, 0xf1, 0xf5, 0xf6, 0x41, 0x45, 0x49, 0x51, 0x53, 0x55, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x77, 0x81, 0x82, 0x85, 0x88, 0x89, 0x91, 0x93, 0x95, 0x97, 0x99, 0x9b, 0x9c,
-		0xa1, 0xb6, 0xc1, 0xc2, 0xc5, 0xc9, 0xd1, 0xd7, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf7, 0x41, 0x42, 0x49, 0x51, 0x55, 0x57, 0x61, 0x62, 0x65, 0x69, 0x6a, 0x71, 0x73, 0x75, 0x77, 0xa1, 0xa2, 0xa5, 0xa8,
-		0xa9, 0xb0, 0xb1, 0xb3, 0xb5, 0xb7, 0xbc, 0x61, 0x62, 0x64, 0x65, 0x69, 0x71, 0x73, 0x76, 0x77, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x96, 0x97, 0xb7, 0xe1, 0xe2, 0xe5, 0xe9, 0xeb, 0xf1, 0xf3, 0xf6, 0xf7,
-		0x41, 0x45, 0x49, 0x57, 0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xab, 0xb1, 0xb3, 0xb7, 0xc1, 0xc2, 0xc5, 0xd6, 0xe1, 0xf6, 0x41, 0x45, 0x49, 0x51, 0x53, 0x61, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x97, 0xa1, 0xb6, 0xc1,
-		0xe1, 0xe5, 0x57, 0x61, 0x62, 0x65, 0x69, 0x6b, 0x70, 0x71, 0x73, 0x81, 0x85, 0x89, 0x91, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0x61, 0x62, 0x65, 0x66, 0x67, 0x69, 0x6a, 0x6b, 0x70, 0x71, 0x73, 0x75,
-		0x76, 0x77, 0x7b, 0x7c, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa2, 0xa5, 0xa9, 0xac, 0xb1, 0xb3, 0xb5, 0xb7, 0xbb, 0xbd, 0xc1, 0xc5, 0xc9, 0xd3, 0xe1, 0xe2, 0xe5, 0xe6, 0xe8, 0xe9, 0xea,
-		0xeb, 0xf1, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xfa, 0xfc, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x62, 0x63, 0x65, 0x69, 0x6b, 0x6c, 0x71, 0x73, 0x74, 0x75, 0x76, 0x77, 0x7b, 0x7c, 0x7d, 0x81,
-		0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0xa1, 0xa2, 0xa5, 0xa9, 0xaa, 0xab, 0xad, 0xb0, 0xb1, 0xb3, 0xb5, 0xb7, 0xb9, 0xc1, 0xc2, 0xc5, 0xc9, 0xd1, 0xd3, 0xd5, 0xd6, 0xd7, 0xe1, 0xe2, 0xe5, 0xf1, 0xf5, 0xf7, 0x41,
-		0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x77, 0x81, 0x82, 0x85, 0x89, 0x8a, 0x8b, 0x91, 0x93, 0x95, 0x97, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb6, 0xb7, 0xc1, 0xc2,
-		0xc5, 0xc9, 0xd1, 0xd3, 0xd7, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf7, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x59, 0x61, 0x62, 0x65, 0x69, 0x6f, 0x71, 0x73, 0x75, 0x77, 0x78, 0x79, 0x7a, 0x7b,
-		0x7c, 0x7d, 0x81, 0x85, 0x89, 0x91, 0x95, 0xa1, 0xa2, 0xa5, 0xa9, 0xaa, 0xab, 0xb0, 0xb1, 0xb3, 0xb5, 0xb6, 0xb7, 0xb8, 0xbc, 0x61, 0x62, 0x65, 0x67, 0x68, 0x69, 0x6b, 0x71, 0x73, 0x75, 0x76, 0x77, 0x78, 0x81,
-		0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa2, 0xa5, 0xa7, 0xa9, 0xb1, 0xb7, 0xc1, 0xc5, 0xc9, 0xe1, 0xe2, 0xe5, 0xe9, 0xeb, 0xf1, 0xf3, 0xf5, 0xf7, 0xf8, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55,
-		0x57, 0x61, 0x65, 0x69, 0x71, 0x73, 0x76, 0x77, 0x81, 0xa1, 0xa2, 0xa5, 0xa9, 0xab, 0xb1, 0xb3, 0xb5, 0xb7, 0xb8, 0xb9, 0xbd, 0xc1, 0xc2, 0xc9, 0xd3, 0xd5, 0xd7, 0xe1, 0xf6, 0xf7, 0x41, 0x45, 0x49, 0x51, 0x53,
-		0x55, 0x57, 0x61, 0x62, 0x65, 0x77, 0x81, 0x82, 0x85, 0x89, 0x8a, 0x8b, 0x91, 0x93, 0x95, 0x97, 0xa1, 0xb6, 0xc1, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0x41, 0x45, 0x49, 0x51, 0x61, 0x62, 0x65, 0x69, 0x71,
-		0x73, 0x75, 0x77, 0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xab, 0xb1, 0xb3, 0xb5, 0xb7, 0xb8, 0xbb, 0xbc, 0x61, 0x62, 0x65, 0x67, 0x69, 0x6c, 0x71, 0x73, 0x75, 0x76, 0x77, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96,
-		0x97, 0xa1, 0xa5, 0xb7, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0x41, 0x57, 0x61, 0x76, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xb9, 0xc1, 0xc2, 0xc9, 0xd6, 0xe1, 0xf6, 0x41, 0x45, 0x49,
-		0x51, 0x53, 0x77, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x97, 0xa1, 0xb6, 0xb7, 0xe1, 0x41, 0x61, 0x71, 0x75, 0x77, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb7, 0xb8, 0xbd, 0x61, 0x62, 0x65, 0x67, 0x69, 0x71, 0x73,
-		0x75, 0x76, 0x77, 0x78, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa5, 0xa7, 0xa9, 0xb1, 0xb7, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55,
-		0x57, 0x61, 0x65, 0x76, 0x81, 0x85, 0x97, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xc1, 0xc5, 0xc9, 0xd7, 0x41, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x71, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95,
-		0x97, 0xa1, 0xb6, 0xc1, 0xc5, 0xe1, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf7, 0x41, 0x45, 0x49, 0x51, 0x57, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x77, 0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xaa, 0xb1, 0xb3, 0xb5, 0xb7,
-		0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x77, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa2, 0xb7, 0xe1, 0xe2, 0xe5, 0xe8, 0xe9, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0x41, 0x42, 0x45, 0x49, 0x51,
-		0x53, 0x55, 0x57, 0x61, 0x65, 0x69, 0x71, 0x73, 0x75, 0x76, 0x77, 0x81, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xc1, 0xc2, 0xc5, 0xc9, 0xd1, 0xd7, 0xe1, 0xf7, 0x41, 0x49, 0x61, 0x81, 0x82, 0x85, 0x89,
-		0x91, 0x93, 0x95, 0x97, 0xa1, 0xa5, 0xa9, 0xb7, 0xc1, 0xd7, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf7, 0x41, 0x45, 0x49, 0x51, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x77, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3,
-		0xb5, 0xb7, 0x61, 0x62, 0x65, 0x69, 0x6a, 0x71, 0x73, 0x75, 0x76, 0x77, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xb7, 0xe1, 0xe2, 0xe5, 0xe9, 0xeb, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0x41, 0x42,
-		0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x65, 0x76, 0x81, 0x85, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xbc, 0xc1, 0xc5, 0xe1, 0x41, 0x45, 0x55, 0x57, 0x61, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95,
-		0x97, 0xa1, 0xb6, 0xc1, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf7, 0x41, 0x45, 0x49, 0x51, 0x57, 0x61, 0x62, 0x65, 0x68, 0x69, 0x6b, 0x71, 0x73, 0x75, 0x81, 0x85, 0x89, 0x91, 0x93, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1,
-		0xb3, 0xb5, 0xb7, 0x61, 0x62, 0x63, 0x65, 0x69, 0x6b, 0x71, 0x73, 0x75, 0x76, 0x77, 0x7b, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa2, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7,
-		0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x65, 0x69, 0x71, 0x73, 0x76, 0x77, 0x81, 0x89, 0x93, 0x95, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xc1, 0xd7, 0x41, 0x45, 0x61, 0x65, 0x69, 0x73,
-		0x75, 0x81, 0x82, 0x85, 0x88, 0x89, 0x8b, 0x91, 0x93, 0x95, 0x97, 0xa1, 0xb7, 0xe1, 0xe5, 0xe9, 0xf1, 0xf5, 0x41, 0x45, 0x49, 0x51, 0x55, 0x57, 0x61, 0x65, 0x69, 0x71, 0x73, 0x75, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1,
-		0xb3, 0xb5, 0xb7, 0x61, 0x62, 0x65, 0x69, 0x6e, 0x71, 0x73, 0x75, 0x77, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xb7, 0xe1, 0xe2, 0xe5, 0xe9, 0xeb, 0xf1, 0xf3, 0xf5, 0xf7, 0x41, 0x42, 0x45,
-		0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x76, 0x77, 0x81, 0x85, 0x89, 0x93, 0xa1, 0xa2, 0xa5, 0xa9, 0xae, 0xb1, 0xb3, 0xb5, 0xb7, 0xbb, 0xc1, 0xc2, 0xc5, 0xc9, 0xd5, 0xd7, 0xe1,
-		0xe2, 0xe5, 0xf5, 0xf7, 0x41, 0x42, 0x45, 0x49, 0x53, 0x55, 0x57, 0x61, 0x65, 0x69, 0x73, 0x75, 0x81, 0x82, 0x85, 0x89, 0x8e, 0x91, 0x95, 0x97, 0xa1, 0xa5, 0xa9, 0xb1, 0xb7, 0xc1, 0xc2, 0xc5, 0xc9, 0xd7, 0xe1,
-		0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf7, 0x41, 0x42, 0x45, 0x49, 0x51, 0x55, 0x57, 0x61, 0x62, 0x65, 0x67, 0x68, 0x69, 0x6a, 0x71, 0x73, 0x75, 0x77, 0x7b, 0x81, 0x85, 0x89, 0x91, 0x93, 0x97, 0xa1, 0xa2, 0xa5,
-		0xa9, 0xb1, 0xb3, 0xb5, 0xb7,
-	};
-	
-	// final consonant table
-	const char JongsungTbl[32] = { 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 0, 0 };
-	
-	int checkHangul(byte hi, byte lo)
-	{
-		// hi: xx
-		// lo: yy
-		if ((0xA1 > lo) || (0xFE < lo)) {
-			return 0;
-		}
-		if ((hi >= 0xB0) && (hi <= 0xC8)) {
-			return 1;
-		}
+
+// Korean CP949 final consonant table
+static byte jongsungTable[2350] = {
+	 0,  1,  4,  7,  8,  9, 10, 16, 17, 18, 19, 20, 21, 22, 23, 25,
+	26, 27,  0,  1,  4,  8, 16, 17, 19, 20, 21,  0,  1,  4,  8, 19,
+	21,  0,  4,  8,  0,  1,  4,  7,  8, 10, 16, 17, 19, 20, 21, 22,
+	25, 26, 27,  0,  4,  8, 16, 17, 19, 20, 21,  0,  1,  2,  4,  7,
+	 8, 16, 17, 19, 20, 21, 25,  0,  4,  8, 17, 19,  0,  1,  4,  7,
+	 8, 10, 12, 15, 16, 17, 19, 21, 22,  0,  1,  4,  8, 10, 16, 17,
+	19, 21,  0,  4,  8, 16, 20, 21,  0,  1,  4,  8, 16, 17, 19, 21,
+	 0,  4,  8, 17, 19,  0,  1,  4,  7,  8,  9, 10, 15, 16, 17, 19,
+	21, 22,  0,  1,  4,  8, 20, 21,  0, 19,  0,  1,  4,  8, 16, 17,
+	19,  0,  4,  8,  0,  1,  4,  7,  8,  9, 16, 17, 19, 21,  0,  0,
+	 1,  4,  7,  8, 10, 16, 17, 19, 21, 22, 26,  0,  1,  2,  4,  8,
+	10, 16, 17, 19, 20, 21, 25,  0,  1,  4,  8, 16, 17, 19, 20, 21,
+	 0,  1,  8,  0,  1,  2,  4,  8, 16, 17, 19, 20, 21,  0,  1,  4,
+	16, 19, 21,  0,  4,  8, 19, 20, 25,  0,  0,  1,  4,  6,  8, 16,
+	17, 19, 21, 22, 23,  0,  1,  8, 20, 21,  0,  1, 21,  0,  4,  8,
+	16, 17, 21,  0,  0,  1,  4,  8, 15, 16, 17, 19, 21, 22,  0,  8,
+	20, 21,  0,  1,  4,  8, 16, 17, 20,  0,  4,  8, 16, 17,  0,  0,
+	 1,  4,  6,  8, 10, 15, 16, 17, 19, 21, 25,  0,  1,  4,  8, 16,
+	17, 19, 21,  0,  1,  2,  4,  7,  8,  9, 10, 16, 17, 19, 20, 21,
+	22, 23, 25, 27,  0,  1,  4,  8, 16, 17, 19, 20, 21,  0,  1,  4,
+	 8, 16, 21,  0,  1,  3,  4,  8, 10, 11, 16, 17, 19, 20, 21, 27,
+	 0,  1,  4,  8, 16, 17, 19, 20, 21,  0,  1,  4,  8, 16, 17, 20,
+	21, 24,  0,  4,  0,  1,  4,  8, 10, 16, 17, 19, 21, 26, 27,  0,
+	 4,  8, 20,  0,  4,  8, 16, 17, 19,  0,  1,  4,  8, 17, 19, 21,
+	 0,  1,  4,  7,  8, 16, 17, 19, 21,  0, 20,  0,  0,  4,  8, 16,
+	17,  0,  1,  8, 16, 17, 21,  0,  1,  4,  8,  9, 10, 16, 17, 19,
+	21, 22, 26,  0,  4,  8,  0,  1,  4,  8, 14, 16, 17, 19, 21, 26,
+	 0,  1,  2,  4,  7,  8,  9, 10, 11, 15, 16, 17, 19, 20, 21, 22,
+	23, 27,  0,  1,  4,  8, 16, 17, 19, 20, 21,  0,  0,  1,  2,  4,
+	 7,  8, 10, 11, 16, 17, 19, 21, 23, 26,  0,  1,  4,  8, 16, 17,
+	19, 20, 21,  0,  4,  8, 20, 21,  0,  4,  0,  1,  4,  7,  8, 10,
+	12, 16, 17, 19, 21, 23, 25,  0,  4,  8,  0, 20,  0,  4,  8, 16,
+	17, 19,  0,  0,  1,  4,  8, 16, 17, 19, 21,  0, 20,  0, 21,  0,
+	 4,  8, 17, 19, 21,  0,  4,  8, 16, 21,  0,  1,  4,  7,  8, 10,
+	16, 17, 19, 21,  0,  0,  1,  4,  7,  8, 16, 17, 19, 20, 21, 22,
+	 0,  1,  4,  8, 16, 17, 19, 20, 21, 27,  0,  1,  4,  8, 16, 17,
+	19, 20, 21,  0,  1,  4,  8, 10, 11, 16, 17, 19, 20, 21, 27,  0,
+	 1,  4,  8, 16, 17, 19, 20, 21,  0, 20,  0,  1,  4,  8, 21,  0,
+	 8,  0,  0,  4,  0,  1,  4,  8, 15, 16, 21,  0,  0,  4,  8, 16,
+	17, 21,  0,  1,  4,  7,  8, 16, 17, 19,  0,  4,  8, 16, 17,  0,
+	 4,  8, 16, 17, 19, 21,  0,  1,  4,  8, 16, 17, 19, 20, 21, 22,
+	26, 27,  0,  1,  4,  8, 16, 17, 19, 20, 21,  0,  1,  4, 19, 21,
+	 0,  1,  4,  8, 16, 17, 19, 20, 21, 27,  0,  1,  4,  8, 16, 17,
+	19, 21,  0,  1,  4,  8, 16, 17, 19, 20, 21,  0,  4, 17, 19,  0,
+	 1,  4,  8, 16, 17, 19, 21,  0,  4, 21, 20,  0,  4,  8, 16, 17,
+	19, 21,  0,  4,  8, 17, 19, 21,  0,  1,  4,  8, 16, 17, 19, 21,
+	 0, 20,  0,  0,  1,  4,  8, 16, 19, 21,  0,  1,  4,  8, 16, 17,
+	19, 21,  0,  1,  4,  8, 16, 17, 19, 21, 22, 25, 26,  0,  1,  4,
+	 8, 16, 17, 19, 21,  0,  1,  4,  6,  7,  8,  9, 10, 16, 17, 19,
+	21, 22, 25, 27,  0,  1,  4,  8, 16, 17, 19, 20, 21, 22,  0,  1,
+	 8, 21,  0,  1,  4,  8, 10, 16, 17, 19, 21, 22, 27,  0,  1,  4,
+	 8, 16, 17, 19, 20, 21,  0,  1,  4,  8, 19, 20, 21, 23,  0,  0,
+	 1,  3,  4,  8, 10, 16, 17, 19, 21,  0,  4, 20, 21,  0,  4,  8,
+	17, 19, 21,  0,  4,  8, 17, 19,  0,  1,  2,  4,  7,  8,  9, 10,
+	16, 17, 19, 21, 25, 27,  0,  4,  8, 17, 19,  0,  0,  4,  8,  0,
+	 4,  8, 16, 19,  0,  4,  8, 16, 19,  0,  1,  4,  7,  8, 10, 16,
+	17, 19, 20, 21, 23, 25,  0,  1,  2,  3,  4,  7,  8,  9, 10, 11,
+	16, 17, 19, 21, 25,  0,  1,  4,  8, 16, 17, 19, 20, 21, 25,  0,
+	 1,  4, 17,  0,  1,  4,  7,  8, 10, 16, 17, 19, 21, 22,  0,  1,
+	 4,  7,  8, 16, 17, 19, 20, 21,  0,  1,  4,  8, 17, 19, 20, 21,
+	25,  0,  4,  0,  1,  2,  4,  8, 16, 17, 19, 21,  0,  4, 20,  0,
+	20,  0,  1,  4,  8, 16, 17,  0,  4,  0,  1,  4,  7,  8,  9, 10,
+	16, 17, 19, 21, 25, 26,  0,  8, 20,  0,  0,  1,  4,  8, 21,  0,
+	 4,  8, 16, 19, 21,  0,  1,  4,  8, 16, 17, 19,  0,  1,  4,  8,
+	10, 16, 17, 19, 21, 22, 23,  0,  1,  4,  8, 10, 16, 17, 19, 20,
+	21, 27,  0,  1,  4,  8, 16, 17, 19, 20, 21,  0,  1, 16,  0,  1,
+	 4,  7,  8, 16, 19, 20, 21,  0, 21,  0,  1, 16, 17, 19, 20, 21,
+	 0,  1,  4,  8, 16, 17, 21,  0,  0, 21,  0,  1,  4,  8, 16, 19,
+	21,  0, 21,  0,  4,  8, 16, 17,  0,  1,  4,  8, 16, 17, 19, 21,
+	 0,  1,  3,  4,  7,  8,  9, 10, 16, 17, 19, 20, 21, 25,  0,  1,
+	 4,  8, 16, 17, 19, 20, 21,  0,  1,  4,  8, 16, 17, 19, 21,  0,
+	 4,  8, 16, 21,  0,  1,  2,  3,  4,  7,  8, 10, 11, 16, 17, 19,
+	20, 21, 26,  0,  1,  4,  8, 16, 17, 19, 20, 21,  0,  1,  4,  8,
+	16, 17, 19, 20, 21,  0,  4,  8, 21,  0,  1,  2,  4,  8, 10, 16,
+	17, 19, 21, 25,  0,  1,  4,  8, 21,  0,  4,  8, 16, 19, 20,  0,
+	 4,  8, 16, 17, 19,  0,  1,  4,  8, 16, 17, 19, 21,  0,  1,  4,
+	 7,  8, 16, 17, 19, 21, 23, 25, 26,  0, 20,  0,  1,  4,  8, 16,
+	21,  0,  1,  4,  8, 16, 17, 19, 21,  0,  1,  8, 16, 19, 21,  0,
+	 1,  4,  8,  9, 16, 17, 19, 21,  0,  1,  4,  7,  8, 15, 16, 17,
+	19, 21, 26,  0,  1,  3,  4,  8, 16, 17, 20, 21, 27,  0,  1,  4,
+	 8, 16, 17, 20, 21, 21,  0,  1,  4,  8, 10, 16, 17, 20, 21,  0,
+	 4,  8, 21,  0,  1,  4,  7,  8, 10, 16, 17, 21,  0,  1,  4, 20,
+	 0, 20,  0,  4,  8, 16, 17,  0,  0,  1,  4,  8, 16, 17, 21,  0,
+	20,  0,  0,  4, 21,  0,  1,  4,  8, 10, 15, 16, 17,  0,  4,  8,
+	16,  0,  1,  4,  8, 16, 17, 19, 21,  0,  1,  4,  5,  6,  8,  9,
+	10, 15, 16, 17, 19, 20, 21, 25, 26,  0,  1,  4,  8, 16, 17, 19,
+	20, 21,  0,  1,  4,  8, 11, 16, 17, 19, 21, 25, 27,  0,  4,  8,
+	17,  0,  1,  4,  5,  7,  8,  9, 10, 16, 17, 18, 19, 20, 21, 22,
+	24, 26,  0,  1,  4,  8, 16, 17, 19, 21,  0,  1,  2,  4,  8, 10,
+	11, 16, 17, 18, 19, 20, 21, 25, 26, 27,  0,  4,  8, 16, 17, 19,
+	20,  0,  1,  4,  8,  9, 10, 12, 15, 16, 17, 19, 21, 23,  0,  1,
+	 4,  8, 16, 17, 19, 20, 21,  0,  1,  4, 16, 19, 21,  0,  1,  4,
+	 8, 16, 17, 19, 21,  0,  1,  4,  8, 16, 17, 19, 21,  0,  1,  4,
+	 8,  9, 10, 16, 17, 19, 21,  0,  1,  4,  8, 16, 17, 20, 21,  0,
+	 1,  4,  8, 16, 17, 21,  0,  1,  4,  8, 16, 17, 19, 21,  0,  1,
+	 4,  8, 16, 17, 19, 21, 23,  0,  1,  4,  8, 14, 16, 17, 19, 21,
+	22, 23, 24, 25, 26, 27,  0,  4,  8, 16, 19,  0,  1,  4,  8,  9,
+	10, 15, 16, 17, 19, 20, 21, 22, 26,  0,  1,  4,  6,  7,  8, 10,
+	16, 17, 19, 20, 21, 22,  0,  1,  4,  8, 16, 17, 19, 20, 21,  0,
+	 1,  4,  6,  8, 16, 21,  0,  4,  8,  0,  1,  4,  8, 10, 16, 17,
+	19, 21, 22,  0,  1,  4,  8, 16, 17, 19, 21,  0,  4,  8, 16, 17,
+	20, 21,  0,  0,  1,  4,  8, 10, 16, 17, 19, 21, 22, 23, 27,  0,
+	 1,  8, 17, 19, 21,  0, 20, 21,  0,  4,  8, 16, 17, 19, 21,  0,
+	 1,  4, 21,  0,  1,  4,  8,  9, 10, 16, 17, 19, 21,  0, 20,  0,
+	 0,  1,  4,  8, 16, 17, 19,  0,  4,  8, 16,  0,  1,  4,  8, 16,
+	17, 19, 21,  0,  1,  4,  7,  8, 10, 16, 17, 19, 21, 22, 25, 26,
+	 0,  1,  4,  6,  8, 11, 16, 17, 19, 20, 21,  0,  1,  4,  8, 16,
+	17, 19, 20, 21,  0,  4, 21,  0,  1,  4,  8, 16, 17, 19, 20, 21,
+	 0, 21,  0, 20,  0,  1,  4,  8, 16, 17, 19, 21, 23,  0,  1,  8,
+	20,  0, 20,  0,  4,  8, 16, 17, 21,  0,  1,  4,  8, 16, 17, 21,
+	 0, 20, 21,  0,  0,  0, 16, 19, 21,  0,  1,  4,  8, 16, 17, 21,
+	22, 27,  0,  1,  4,  6,  8, 16, 17, 19, 20, 21, 22,  0,  1,  4,
+	 8, 16, 17, 19, 20, 21,  0,  4,  6,  8, 16, 21,  0,  1,  4,  8,
+	16, 17, 19, 20, 21,  0,  1,  4,  8, 16, 17, 19, 21,  0,  4, 20,
+	 0,  4, 21,  0,  1,  4,  8, 16, 17, 19, 21,  0,  4,  8, 21,  0,
+	 4,  8, 16, 17, 19, 21,  0, 16,  0,  1,  4,  8, 16, 17, 19, 21,
+	 0, 20,  0,  4,  0,  4,  8, 16, 17, 19, 21,  0,  4,  8, 16, 21,
+	 0,  1,  4,  8, 16, 17, 19, 21,  0,  1,  4,  7,  8,  9, 16, 17,
+	19, 21,  0,  1,  4,  8, 16, 17, 19, 21,  0,  1,  4,  8, 16, 17,
+	19, 20, 21,  0,  1, 21,  0,  1,  4,  7,  8, 16, 17, 19, 20, 21,
+	 0,  1,  4,  8, 16, 17, 19, 21,  0,  4,  8, 16, 17, 19, 20, 21,
+	 0,  0,  1,  4,  8, 16, 17, 19, 21,  0,  1,  4,  8, 16, 21,  0,
+	21,  0,  8,  0,  0,  1,  4,  8, 16, 17, 19, 21,  0,  4,  8, 21,
+	 0, 21,  0,  1,  4,  8, 16, 17, 19, 21,  0,  4,  8, 16,  0,  1,
+	 4,  8, 16, 17, 21,  0,  1,  4,  8, 16, 17, 19, 21,  0,  1,  4,
+	 8,  9, 16, 17, 19, 20, 21,  0,  1,  4,  8, 16, 17, 19, 20, 21,
+	 0, 21,  0,  1,  4,  8, 10, 16, 17, 19, 20, 21,  0,  1,  4,  8,
+	16, 17, 19, 21,  0,  4, 20,  0,  4,  0,  1,  4,  8, 16, 17, 19,
+	21, 26,  0,  4,  0,  0,  4, 19, 21,  0,  0,  1,  4,  8, 16, 17,
+	19, 21,  0, 20,  0,  0,  1,  4,  8, 16, 17, 21,  0,  4,  8, 16,
+	21,  0,  1,  4,  7,  8, 10, 16, 17, 19,  0,  4,  8, 16, 17,  0,
+	 1,  4,  8, 16, 17, 19, 21,  0,  1,  2,  4,  8, 10, 16, 17, 19,
+	20, 21, 25,  0,  1,  4,  8, 16, 17, 19, 20, 21,  0,  1,  0,  1,
+	 4,  8, 16, 17, 19, 20, 21,  0,  1,  4,  8, 16, 17, 19, 21,  0,
+	 4,  8, 16, 17, 20, 21,  0,  8, 17, 19,  0,  1,  4,  8, 16, 17,
+	19, 21,  0, 21,  0,  4,  0,  4,  8, 17, 19,  0,  1,  4,  7,  8,
+	10, 16, 17, 19, 21,  0, 21,  0,  4,  8, 16, 19,  0,  4,  8, 16,
+	19, 21,  0,  4,  8, 16, 17, 19,  0,  1,  4,  8, 16, 17, 19, 21,
+	 0,  1,  4,  8, 13, 16, 17, 19, 21,  0,  1,  4,  8, 16, 17, 19,
+	20, 21,  0, 21,  0,  1,  4,  8, 10, 16, 17, 19, 21,  0,  1,  4,
+	 8, 16, 17, 19, 21,  0,  1,  4,  8, 16, 17, 19, 20, 21,  0,  4,
+	 8, 17,  0,  1,  4,  8, 13, 16, 17, 19, 21, 25,  0,  1,  4,  8,
+	19, 21,  0,  1,  4, 19, 21,  0,  1,  4,  8, 17, 19, 21,  0,  4,
+	 8, 17, 19,  0,  1,  4,  8, 13, 16, 19, 21,  0,  4,  8, 16, 21,
+	 0,  1,  4,  8, 21,  0,  1,  4,  8, 16, 17, 19, 21,  0,  1,  4,
+	 8, 16, 19, 21,  0,  1,  4,  6,  7,  8,  9, 16, 17, 19, 21, 25,
+	 0,  4,  8, 16, 17, 21,  0,  1,  4,  8, 16, 17, 19, 21
+};
+
+int checkHangul(byte hi, byte lo) {
+	// hi: xx
+	// lo: yy
+	if ((0xA1 > lo) || (0xFE < lo)) {
 		return 0;
 	}
-
-	// check for jongsung (final consonant)
-	byte checkJongsung(byte hi, byte lo)
-	{
-		uint16 index = ((hi  - 0xb0) * 94 + lo - 0xa1);
-		
-		return JongsungTbl[TGConvTbl[index] & 0x1F];
+	if ((hi >= 0xB0) && (hi <= 0xC8)) {
+		return 1;
 	}
-	
+	return 0;
+}
+
+// check for jongsung (final consonant)
+byte checkJongsung(byte hi, byte lo) {
+	uint16 index = ((hi - 0xb0) * 94 + lo - 0xa1);
+
+	return jongsungTable[index];
+}
+
 } // End of namespace Scumm




More information about the Scummvm-git-logs mailing list