diff options
author | Vladimir Glazounov <vg@openoffice.org> | 2003-04-24 11:26:04 +0000 |
---|---|---|
committer | Vladimir Glazounov <vg@openoffice.org> | 2003-04-24 11:26:04 +0000 |
commit | 5b58927e9af3abf4f728686b43d36d1cd0210a7a (patch) | |
tree | df342b2f20857dfc35d555a0a1aa80c9b7bc8e80 /i18nutil | |
parent | 6705b4531d1c483151a3251aaaa05a2200de7f94 (diff) |
cws_srx644_i18napi -> HEAD
Diffstat (limited to 'i18nutil')
-rw-r--r-- | i18nutil/inc/i18nutil/casefolding.hxx | 127 | ||||
-rw-r--r-- | i18nutil/inc/i18nutil/oneToOneMapping.hxx | 96 | ||||
-rw-r--r-- | i18nutil/inc/i18nutil/unicode.hxx | 98 | ||||
-rw-r--r-- | i18nutil/inc/i18nutil/widthfolding.hxx | 84 | ||||
-rw-r--r-- | i18nutil/inc/i18nutil/x_rtl_ustring.h | 115 | ||||
-rw-r--r-- | i18nutil/prj/build.lst | 3 | ||||
-rw-r--r-- | i18nutil/prj/d.lst | 20 | ||||
-rw-r--r-- | i18nutil/source/utility/casefolding.cxx | 182 | ||||
-rw-r--r-- | i18nutil/source/utility/casefolding_data.h | 845 | ||||
-rw-r--r-- | i18nutil/source/utility/makefile.mk | 87 | ||||
-rw-r--r-- | i18nutil/source/utility/oneToOneMapping.cxx | 138 | ||||
-rw-r--r-- | i18nutil/source/utility/unicode.cxx | 342 | ||||
-rw-r--r-- | i18nutil/source/utility/unicode_data.h | 1667 | ||||
-rw-r--r-- | i18nutil/source/utility/widthfolding.cxx | 236 | ||||
-rw-r--r-- | i18nutil/source/utility/widthfolding_data.h | 955 |
15 files changed, 4995 insertions, 0 deletions
diff --git a/i18nutil/inc/i18nutil/casefolding.hxx b/i18nutil/inc/i18nutil/casefolding.hxx new file mode 100644 index 000000000000..08593b43c28a --- /dev/null +++ b/i18nutil/inc/i18nutil/casefolding.hxx @@ -0,0 +1,127 @@ +/************************************************************************* + * + * $RCSfile: casefolding.hxx,v $ + * + * $Revision: 1.2 $ + * + * last change: $Author: vg $ $Date: 2003-04-24 12:25:58 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef INCLUDED_I18NUTIL_CASEFOLDING_HXX +#define INCLUDED_I18NUTIL_CASEFOLDING_HXX + +#ifndef _SAL_TYPES_H_ +#include <sal/types.h> +#endif + +#ifndef _COM_SUN_STAR_I18N_TRANSLITERATIONMODULES_HPP_ +#include <com/sun/star/i18n/TransliterationModules.hpp> +#endif +#ifndef _COM_SUN_STAR_LANG_LOCALE_HPP_ +#include <com/sun/star/lang/Locale.hpp> +#endif +#ifndef _COM_SUN_STAR_UNO_RUNTIMEEXCEPTION_HPP_ +#include <com/sun/star/uno/RuntimeException.hpp> +#endif + +namespace com { namespace sun { namespace star { namespace i18n { + +#define MappingTypeLowerToUpper 1 << 0 // Upper to Lower mapping +#define MappingTypeUpperToLower 1 << 1 // Lower to Upper mapping +#define MappingTypeToUpper 1 << 2 // to Upper mapping +#define MappingTypeToLower 1 << 3 // to Lower mapping +#define MappingTypeToTitle 1 << 4 // to Title mapping +#define MappingTypeSimpleFolding 1 << 5 // Simple Case Folding +#define MappingTypeFullFolding 1 << 6 // Full Case Folding +#define MappingTypeMask MappingTypeLowerToUpper|MappingTypeUpperToLower|\ + MappingTypeToUpper|MappingTypeToLower|MappingTypeToTitle|\ + MappingTypeSimpleFolding|MappingTypeFullFolding + +#define ValueTypeNotValue 1 << 7 // Value field is an address + +#define CasedLetter MappingTypeMask // for final sigmar + +struct Value +{ + sal_uInt8 type; + sal_uInt16 value; // value or address, depend on the type +}; + +struct Mapping +{ + sal_uInt8 type; + sal_Int8 nmap; +#define NMAPPINGMAX 3 + sal_Unicode map[NMAPPINGMAX]; +}; // for Unconditional mapping + +struct MappingElement +{ + MappingElement() {element.nmap = current = 0;}; + Mapping element; + sal_Int8 current; +}; + +class casefolding +{ +public: + static Mapping& getValue(const sal_Unicode* str, sal_Int32 pos, sal_Int32 len, com::sun::star::lang::Locale& aLocale, sal_uInt8 nMappingType) throw (com::sun::star::uno::RuntimeException); + static Mapping& getConditionalValue(const sal_Unicode* str, sal_Int32 pos, sal_Int32 len, com::sun::star::lang::Locale& aLocale, sal_uInt8 nMappingType) throw (com::sun::star::uno::RuntimeException); + static sal_Unicode getNextChar(const sal_Unicode *str, sal_Int32& idx, sal_Int32 len, MappingElement& e, com::sun::star::lang::Locale& aLocale,sal_uInt8 nMappingtype, TransliterationModules moduleLoaded) throw (com::sun::star::uno::RuntimeException); + +}; + +} } } } + +#endif diff --git a/i18nutil/inc/i18nutil/oneToOneMapping.hxx b/i18nutil/inc/i18nutil/oneToOneMapping.hxx new file mode 100644 index 000000000000..e70f39e83c57 --- /dev/null +++ b/i18nutil/inc/i18nutil/oneToOneMapping.hxx @@ -0,0 +1,96 @@ +/************************************************************************* + * + * $RCSfile: oneToOneMapping.hxx,v $ + * + * $Revision: 1.2 $ + * + * last change: $Author: vg $ $Date: 2003-04-24 12:25:59 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef INCLUDED_I18NUTIL_TRANSLITERATION_ONETOONEMAPPING_HXX +#define INCLUDED_I18NUTIL_TRANSLITERATION_ONETOONEMAPPING_HXX + +#include <utility> +#include <rtl/ustring.hxx> + +namespace com { namespace sun { namespace star { namespace i18n { + +typedef std::pair< sal_Unicode, sal_Unicode > OneToOneMappingTable_t; + +#define MAKE_PAIR(item1,item2) std::make_pair< sal_Unicode, sal_Unicode >((sal_Unicode)item1,(sal_Unicode)item2) + +class oneToOneMapping +{ +public: + oneToOneMapping(OneToOneMappingTable_t *_table, const size_t _bytes); + ~oneToOneMapping(); + + // make index for fast search + void makeIndex(); + // binary search / idex search + sal_Unicode find(const sal_Unicode key) const; + + // translator + sal_Unicode operator[] (const sal_Unicode key) const { return find (key); }; + +protected: + OneToOneMappingTable_t *table; + size_t max_size; + int *index[256]; + sal_Bool hasIndex; +}; + +} } } } + +#endif // _I18N_TRANSLITERATION_ONETOONEMAPPING_HXX_ diff --git a/i18nutil/inc/i18nutil/unicode.hxx b/i18nutil/inc/i18nutil/unicode.hxx new file mode 100644 index 000000000000..a2aed2734e45 --- /dev/null +++ b/i18nutil/inc/i18nutil/unicode.hxx @@ -0,0 +1,98 @@ +/************************************************************************* + * + * $RCSfile: unicode.hxx,v $ + * + * $Revision: 1.2 $ + * + * last change: $Author: vg $ $Date: 2003-04-24 12:25:59 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef INCLUDED_I18NUTIL_UNICODE_HXX +#define INCLUDED_I18NUTIL_UNICODE_HXX + +#include <com/sun/star/i18n/UnicodeScript.hpp> +#include <sal/types.h> + +typedef struct _ScriptTypeList { + sal_Int16 from; + sal_Int16 to; +} ScriptTypeList; + +class unicode +{ +public: + + static sal_Int16 SAL_CALL getUnicodeType( const sal_Unicode ch ); + static sal_Bool SAL_CALL isUnicodeScriptType( const sal_Unicode ch, sal_Int16 type); + static sal_Int16 SAL_CALL getUnicodeScriptType( const sal_Unicode ch, ScriptTypeList *typeList = NULL, sal_Int16 unknownType = 0 ); + static sal_uInt8 SAL_CALL getUnicodeDirection( const sal_Unicode ch ); + static sal_Int32 SAL_CALL getCharType( const sal_Unicode ch ); + static sal_Bool SAL_CALL isUpper( const sal_Unicode ch); + static sal_Bool SAL_CALL isLower( const sal_Unicode ch); + static sal_Bool SAL_CALL isTitle( const sal_Unicode ch); + static sal_Bool SAL_CALL isDigit( const sal_Unicode ch); + static sal_Bool SAL_CALL isControl( const sal_Unicode ch); + static sal_Bool SAL_CALL isPrint( const sal_Unicode ch); + static sal_Bool SAL_CALL isBase( const sal_Unicode ch); + static sal_Bool SAL_CALL isAlpha( const sal_Unicode ch); + static sal_Bool SAL_CALL isSpace( const sal_Unicode ch); + static sal_Bool SAL_CALL isWhiteSpace( const sal_Unicode ch); + static sal_Bool SAL_CALL isAlphaDigit( const sal_Unicode ch); + static sal_Bool SAL_CALL isPunctuation( const sal_Unicode ch); +}; + +#endif + + + diff --git a/i18nutil/inc/i18nutil/widthfolding.hxx b/i18nutil/inc/i18nutil/widthfolding.hxx new file mode 100644 index 000000000000..1680de550125 --- /dev/null +++ b/i18nutil/inc/i18nutil/widthfolding.hxx @@ -0,0 +1,84 @@ +/************************************************************************* + * + * $RCSfile: widthfolding.hxx,v $ + * + * $Revision: 1.2 $ + * + * last change: $Author: vg $ $Date: 2003-04-24 12:25:59 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef INCLUDED_I18NUTIL_WIDTHFOLDING_HXX +#define INCLUDED_I18NUTIL_WIDTHFOLDING_HXX + +#include <sal/types.h> +#include <com/sun/star/uno/Sequence.hxx> +#include <i18nutil/oneToOneMapping.hxx> + +namespace com { namespace sun { namespace star { namespace i18n { + +class widthfolding +{ +public: + static oneToOneMapping& getfull2halfTable(); + static oneToOneMapping& gethalf2fullTable(); + static rtl::OUString decompose_ja_voiced_sound_marks(const rtl::OUString& inStr, sal_Int32 startPos, sal_Int32 nCount, com::sun::star::uno::Sequence< sal_Int32 >& offset, sal_Bool useOffset); + static sal_Unicode decompose_ja_voiced_sound_marksChar2Char (sal_Unicode inChar); + static rtl::OUString compose_ja_voiced_sound_marks(const rtl::OUString& inStr, sal_Int32 startPos, sal_Int32 nCount, com::sun::star::uno::Sequence< sal_Int32 >& offset, sal_Bool useOffset); + static sal_Unicode getCompositionChar(sal_Unicode c1, sal_Unicode c2); +}; + + +} } } } + +#endif diff --git a/i18nutil/inc/i18nutil/x_rtl_ustring.h b/i18nutil/inc/i18nutil/x_rtl_ustring.h new file mode 100644 index 000000000000..3a9306230ea0 --- /dev/null +++ b/i18nutil/inc/i18nutil/x_rtl_ustring.h @@ -0,0 +1,115 @@ +/************************************************************************* + * + * $RCSfile: x_rtl_ustring.h,v $ + * + * $Revision: 1.2 $ + * + * last change: $Author: vg $ $Date: 2003-04-24 12:26:00 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef INCLUDED_I18NUTIL_X_RTL_USTRING_H +#define INCLUDED_I18NUTIL_X_RTL_USTRING_H + +#ifndef _RTL_STRING_HXX_ +#include <rtl/strbuf.hxx> +#endif + +#ifndef _RTL_MEMORY_H_ +#include <rtl/memory.h> +#endif +#include <rtl/alloc.h> + + +/** + * Allocates a new <code>rtl_uString</code> which can hold nLen + 1 characters. + * The reference count is 0. The characters of room is not cleared. + * This method is similar to rtl_uString_new_WithLength in rtl/ustring.h, but + * can allocate a new string more efficiently. You need to "acquire" by such as + * OUString( rtl_uString * value ) if you intend to use it for a while. + * @param [output] newStr + * @param [input] nLen + */ +inline void SAL_CALL x_rtl_uString_new_WithLength( rtl_uString ** newStr, sal_Int32 nLen, sal_Int32 _refCount = 0 ) +{ + *newStr = (rtl_uString*) rtl_allocateMemory ( sizeof(rtl_uString) + sizeof(sal_Unicode) * nLen); + (*newStr)->refCount = _refCount; + (*newStr)->length = nLen; + + // rtl_uString is defined in rtl/ustring.h as below: + //typedef struct _rtl_uString + //{ + // sal_Int32 refCount; + // sal_Int32 length; + // sal_Unicode buffer[1]; + //} rtl_uString; +} + +inline rtl_uString * SAL_CALL x_rtl_uString_new_WithLength( sal_Int32 nLen, sal_Int32 _refCount = 0 ) +{ + rtl_uString *newStr = (rtl_uString*) rtl_allocateMemory ( sizeof(rtl_uString) + sizeof(sal_Unicode) * nLen); + newStr->refCount = _refCount; + newStr->length = nLen; + return newStr; +} + +/** + * Release <code>rtl_uString</code> regardless its reference count. + */ +inline void SAL_CALL x_rtl_uString_release( rtl_uString * value ) +{ + rtl_freeMemory(value); +} + + +#endif // #ifndef _I18N_X_RTL_USTRING_H_ diff --git a/i18nutil/prj/build.lst b/i18nutil/prj/build.lst new file mode 100644 index 000000000000..58152feacdb2 --- /dev/null +++ b/i18nutil/prj/build.lst @@ -0,0 +1,3 @@ +inu i18nutil : sal cppu NULL +inu i18nutil usr1 - all inu_mkout NULL +inu i18nutil\source\utility nmake - all inu_utility NULL diff --git a/i18nutil/prj/d.lst b/i18nutil/prj/d.lst new file mode 100644 index 000000000000..a07cab08398a --- /dev/null +++ b/i18nutil/prj/d.lst @@ -0,0 +1,20 @@ + +mkdir: %_DEST%\inc%_EXT%\i18nutil + +..\inc\i18nutil\casefolding.hxx %_DEST%\inc%_EXT%\i18nutil\casefolding.hxx +..\inc\i18nutil\oneToOneMapping.hxx %_DEST%\inc%_EXT%\i18nutil\oneToOneMapping.hxx +..\inc\i18nutil\unicode.hxx %_DEST%\inc%_EXT%\i18nutil\unicode.hxx +..\inc\i18nutil\widthfolding.hxx %_DEST%\inc%_EXT%\i18nutil\widthfolding.hxx +..\inc\i18nutil\x_rtl_ustring.h %_DEST%\inc%_EXT%\i18nutil\x_rtl_ustring.h + +..\%__SRC%\bin\i18nutil*.dll %_DEST%\bin%_EXT%\i18nutil*.dll +..\%__SRC%\lib\libi18nutil*.so %_DEST%\lib%_EXT%\libi18nutil*.so +..\%__SRC%\lib\libi18nutil*.dylib %_DEST%\lib%_EXT%\libi18nutil*.dylib +..\%__SRC%\lib\ii18nutil.lib %_DEST%\lib%_EXT%\ii18nutil.lib + +..\%__SRC%\lib\lib*static*.dylib %_DEST%\lib%_EXT%\lib*static*.dylib +..\%__SRC%\misc\*staticdatamembers.cxx %_DEST%\inc%_EXT%\*staticdatamembers.cxx +..\%__SRC%\misc\*staticdatamembers.h* %_DEST%\inc%_EXT%\*staticdatamembers.h* + +dos: sh -c "if test %OS% = MACOSX; then create-bundle %_DEST%\lib%_EXT%\*.dylib; fi" +dos: sh -c "if test %OS% = MACOSX; then create-libstatic-link %_DEST%\lib%_EXT%; fi" diff --git a/i18nutil/source/utility/casefolding.cxx b/i18nutil/source/utility/casefolding.cxx new file mode 100644 index 000000000000..fe22c1cb3a4f --- /dev/null +++ b/i18nutil/source/utility/casefolding.cxx @@ -0,0 +1,182 @@ +/************************************************************************* + * + * $RCSfile: casefolding.cxx,v $ + * + * $Revision: 1.2 $ + * + * last change: $Author: vg $ $Date: 2003-04-24 12:26:02 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#include "i18nutil/casefolding.hxx" +#include "casefolding_data.h" +#include "i18nutil/widthfolding.hxx" + +using namespace com::sun::star::lang; +using namespace com::sun::star::uno; + +namespace com { namespace sun { namespace star { namespace i18n { + +static Mapping mapping_03a3[] = {{0, 1, 0x03c2, 0, 0 },{0, 1, 0x03c3, 0, 0}}; +static Mapping mapping_0307[] = {{0, 0, 0, 0, 0 },{0, 1, 0x0307, 0, 0}}; +static Mapping mapping_0049[] = {{0, 2, 0x0069, 0x0307, 0},{0, 1, 0x0131, 0, 0},{0, 1, 0x0069, 0, 0}}; +static Mapping mapping_004a[] = {{0, 2, 0x006a, 0x0307, 0},{0, 1, 0x006a, 0, 0}}; +static Mapping mapping_012e[] = {{0, 2, 0x012f, 0x0307, 0},{0, 1, 0x012f, 0, 0}}; +static Mapping mapping_00cc[] = {{0, 3, 0x0069, 0x0307, 0x0300},{0, 1, 0x00ec, 0, 0}}; +static Mapping mapping_00cd[] = {{0, 3, 0x0069, 0x0307, 0x0301},{0, 1, 0x00ed, 0, 0}}; +static Mapping mapping_0128[] = {{0, 3, 0x0069, 0x0307, 0x0303},{0, 1, 0x0129, 0, 0}}; +static Mapping mapping_0069[] = {{0, 1, 0x0130, 0, 0},{0, 1, 0x0049, 0, 0}}; + +#define langIs(lang) (aLocale.Language.compareToAscii(lang) == 0) + +// only check simple case, there is more complicated case need to be checked. +#define type_i(ch) (ch == 0x0069 || ch == 0x006a) + +#define cased_letter(ch) (CaseMappingIndex[ch>>8] >= 0 && (CaseMappingValue[(CaseMappingIndex[ch>>8] << 8) + (ch&0xff)].type & CasedLetter)) + +Mapping& casefolding::getConditionalValue(const sal_Unicode* str, sal_Int32 pos, sal_Int32 len, Locale& aLocale, sal_uInt8 nMappingType) throw (RuntimeException) +{ + switch(str[pos]) { + case 0x03a3: + // final_sigma (not followed by cased and preceded by cased character) + // DOES NOT check ignorable sequence yet (more complicated implementation). + return !(pos < len && cased_letter(str[pos+1])) && (pos > 0 && cased_letter(str[pos-1])) ? + mapping_03a3[0] : mapping_03a3[1]; + case 0x0307: + return ((nMappingType == MappingTypeLowerToUpper && langIs("lt") || + nMappingType == MappingTypeUpperToLower && (langIs("tr") || langIs("az"))) && + (pos > 0 && type_i(str[pos-1]))) ? // after_i + mapping_0307[0] : mapping_0307[1]; + case 0x0069: + return (langIs("tr") || langIs("az")) ? mapping_0069[0] : mapping_0069[1]; + case 0x0049: return langIs("lt") ? mapping_0049[0] : + (langIs("tr") || langIs("az")) ? mapping_0049[1] : mapping_0049[2]; + case 0x004a: return langIs("lt") ? mapping_004a[0] : mapping_004a[1]; + case 0x012e: return langIs("lt") ? mapping_012e[0] : mapping_012e[1]; + case 0x00cc: return langIs("lt") ? mapping_00cc[0] : mapping_00cc[1]; + case 0x00cd: return langIs("lt") ? mapping_00cd[0] : mapping_00cd[1]; + case 0x0128: return langIs("lt") ? mapping_0128[0] : mapping_0128[1]; + } +} + +Mapping& casefolding::getValue(const sal_Unicode* str, sal_Int32 pos, sal_Int32 len, Locale& aLocale, sal_uInt8 nMappingType) throw (RuntimeException) +{ + static Mapping dummy = { 0, 1, 0, 0, 0 }; + sal_Int16 address = CaseMappingIndex[str[pos] >> 8] << 8; + + dummy.map[0] = str[pos]; + + if (address >= 0 && (CaseMappingValue[address += (str[pos] & 0xFF)].type & nMappingType)) { + sal_uInt8 type = CaseMappingValue[address].type; + if (type & ValueTypeNotValue) { + if (CaseMappingValue[address].value == 0) + return getConditionalValue(str, pos, len, aLocale, nMappingType); + else { + for (int map = CaseMappingValue[address].value; + map < CaseMappingValue[address].value + MaxCaseMappingExtras; map++) { + if (CaseMappingExtra[map].type & nMappingType) { + if (CaseMappingExtra[map].type & ValueTypeNotValue) + return getConditionalValue(str, pos, len, aLocale, nMappingType); + else + return CaseMappingExtra[map]; + } + } + // Should not come here + throw RuntimeException(); + } + } else + dummy.map[0] = CaseMappingValue[address].value; + } + return dummy; +} + +inline sal_Bool SAL_CALL +is_ja_voice_sound_mark(sal_Unicode& current, sal_Unicode next) +{ + sal_Unicode c = 0; + + if ((next == 0x3099 || next == 0x309a) && (c = widthfolding::getCompositionChar(current, next))) + current = c; + return c != 0; +} + +sal_Unicode casefolding::getNextChar(const sal_Unicode *str, sal_Int32& idx, sal_Int32 len, MappingElement& e, Locale& aLocale, sal_uInt8 nMappingType, TransliterationModules moduleLoaded) throw (RuntimeException) +{ + sal_Unicode c; + if (moduleLoaded & TransliterationModules_IGNORE_CASE) { + if (e.current >= e.element.nmap && idx < len ) { + e.element = getValue(str, idx++, len, aLocale, nMappingType); + e.current = 0; + } + c = e.element.map[e.current++]; + } else { + c = *(str + idx++); + } + if (moduleLoaded & TransliterationModules_IGNORE_KANA) { + if (0x3040 <= c && c <= 0x3094 || 0x309d <= c && c <= 0x309f) + c += 0x60; + } + + // composition: KA + voice-mark --> GA. see halfwidthToFullwidth.cxx for detail + if (moduleLoaded & TransliterationModules_IGNORE_WIDTH) { + static oneToOneMapping& half2fullTable = widthfolding::gethalf2fullTable(); + c = half2fullTable[c]; + if (0x3040 <= c && c <= 0x30ff && idx < len && + is_ja_voice_sound_mark(c, half2fullTable[*(str + idx)])) + idx++; + } + return c; +} + +} } } } diff --git a/i18nutil/source/utility/casefolding_data.h b/i18nutil/source/utility/casefolding_data.h new file mode 100644 index 000000000000..bb285e251886 --- /dev/null +++ b/i18nutil/source/utility/casefolding_data.h @@ -0,0 +1,845 @@ +/************************************************************************* + * + * $RCSfile: casefolding_data.h,v $ + * + * $Revision: 1.2 $ + * + * last change: $Author: vg $ $Date: 2003-04-24 12:26:02 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef CASEFOLDING_DATA_H +#define CASEFOLDING_DATA_H + +#include <sal/types.h> + +namespace com { namespace sun { namespace star { namespace i18n { + +static sal_Int8 CaseMappingIndex[] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, -1, -1, // 0000 - 07ff + -1, -1, -1, -1, -1, -1, -1, -1, // 0800 - 0fff + -1, -1, -1, -1, -1, -1, -1, -1, // 1000 - 17ff + -1, -1, -1, -1, -1, -1, 0x06, 0x07, // 1800 - 1fff + -1, 0x08, -1, -1, 0x09, -1, -1, -1, // 2000 - 27ff + -1, -1, -1, -1, -1, -1, -1, -1, // 2800 - 2fff + -1, -1, -1, -1, -1, -1, -1, -1, // 3000 - 37ff + -1, -1, -1, -1, -1, -1, -1, -1, // 3800 - 3fff + -1, -1, -1, -1, -1, -1, -1, -1, // 4000 - 47ff + -1, -1, -1, -1, -1, -1, -1, -1, // 4800 - 4fff + -1, -1, -1, -1, -1, -1, -1, -1, // 5000 - 57ff + -1, -1, -1, -1, -1, -1, -1, -1, // 5800 - 5fff + -1, -1, -1, -1, -1, -1, -1, -1, // 6000 - 67ff + -1, -1, -1, -1, -1, -1, -1, -1, // 6800 - 6fff + -1, -1, -1, -1, -1, -1, -1, -1, // 7000 - 77ff + -1, -1, -1, -1, -1, -1, -1, -1, // 7800 - 7fff + -1, -1, -1, -1, -1, -1, -1, -1, // 8000 - 87ff + -1, -1, -1, -1, -1, -1, -1, -1, // 8800 - 8fff + -1, -1, -1, -1, -1, -1, -1, -1, // 9000 - 97ff + -1, -1, -1, -1, -1, -1, -1, -1, // 9800 - 9fff + -1, -1, -1, -1, -1, -1, -1, -1, // a000 - a7ff + -1, -1, -1, -1, -1, -1, -1, -1, // a800 - afff + -1, -1, -1, -1, -1, -1, -1, -1, // b000 - b7ff + -1, -1, -1, -1, -1, -1, -1, -1, // b800 - bfff + -1, -1, -1, -1, -1, -1, -1, -1, // c000 - c7ff + -1, -1, -1, -1, -1, -1, -1, -1, // c800 - cfff + -1, -1, -1, -1, -1, -1, -1, -1, // d000 - d7ff + -1, -1, -1, -1, -1, -1, -1, -1, // d800 - dfff + -1, -1, -1, -1, -1, -1, -1, -1, // e000 - e7ff + -1, -1, -1, -1, -1, -1, -1, -1, // e800 - efff + -1, -1, -1, -1, -1, -1, -1, -1, // f000 - f7ff + -1, -1, -1, 0x0a, -1, -1, -1, 0x0b, // f800 - ffff +}; + + +static Value CaseMappingValue[] = { + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0000 - 0007 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0008 - 000f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0010 - 0017 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0018 - 001f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0020 - 0027 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0028 - 002f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0030 - 0037 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0038 - 003f + {0x00, 0x0000}, {0x6a, 0x0061}, {0x6a, 0x0062}, {0x6a, 0x0063}, {0x6a, 0x0064}, {0x6a, 0x0065}, {0x6a, 0x0066}, {0x6a, 0x0067}, // 0040 - 0047 + {0x6a, 0x0068}, {0xea, 0x0001}, {0xea, 0x0003}, {0x6a, 0x006B}, {0x6a, 0x006C}, {0x6a, 0x006D}, {0x6a, 0x006E}, {0x6a, 0x006F}, // 0048 - 004f + {0x6a, 0x0070}, {0x6a, 0x0071}, {0x6a, 0x0072}, {0x6a, 0x0073}, {0x6a, 0x0074}, {0x6a, 0x0075}, {0x6a, 0x0076}, {0x6a, 0x0077}, // 0050 - 0057 + {0x6a, 0x0078}, {0x6a, 0x0079}, {0x6a, 0x007A}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0058 - 005f + {0x00, 0x0000}, {0x15, 0x0041}, {0x15, 0x0042}, {0x15, 0x0043}, {0x15, 0x0044}, {0x15, 0x0045}, {0x15, 0x0046}, {0x15, 0x0047}, // 0060 - 0067 + {0x15, 0x0048}, {0x95, 0x0000}, {0x15, 0x004A}, {0x15, 0x004B}, {0x15, 0x004C}, {0x15, 0x004D}, {0x15, 0x004E}, {0x15, 0x004F}, // 0068 - 006f + {0x15, 0x0050}, {0x15, 0x0051}, {0x15, 0x0052}, {0x15, 0x0053}, {0x15, 0x0054}, {0x15, 0x0055}, {0x15, 0x0056}, {0x15, 0x0057}, // 0070 - 0077 + {0x15, 0x0058}, {0x15, 0x0059}, {0x15, 0x005A}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0078 - 007f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0080 - 0087 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0088 - 008f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0090 - 0097 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0098 - 009f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 00a0 - 00a7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 00a8 - 00af + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0xf5, 0x0005}, {0x00, 0x0000}, {0x00, 0x0000}, // 00b0 - 00b7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 00b8 - 00bf + {0x6a, 0x00E0}, {0x6a, 0x00E1}, {0x6a, 0x00E2}, {0x6a, 0x00E3}, {0x6a, 0x00E4}, {0x6a, 0x00E5}, {0x6a, 0x00E6}, {0x6a, 0x00E7}, // 00c0 - 00c7 + {0x6a, 0x00E8}, {0x6a, 0x00E9}, {0x6a, 0x00EA}, {0x6a, 0x00EB}, {0xea, 0x0007}, {0xea, 0x0009}, {0x6a, 0x00EE}, {0x6a, 0x00EF}, // 00c8 - 00cf + {0x6a, 0x00F0}, {0x6a, 0x00F1}, {0x6a, 0x00F2}, {0x6a, 0x00F3}, {0x6a, 0x00F4}, {0x6a, 0x00F5}, {0x6a, 0x00F6}, {0x00, 0x0000}, // 00d0 - 00d7 + {0x6a, 0x00F8}, {0x6a, 0x00F9}, {0x6a, 0x00FA}, {0x6a, 0x00FB}, {0x6a, 0x00FC}, {0x6a, 0x00FD}, {0x6a, 0x00FE}, {0xd5, 0x000B}, // 00d8 - 00df + {0x15, 0x00C0}, {0x15, 0x00C1}, {0x15, 0x00C2}, {0x15, 0x00C3}, {0x15, 0x00C4}, {0x15, 0x00C5}, {0x15, 0x00C6}, {0x15, 0x00C7}, // 00e0 - 00e7 + {0x15, 0x00C8}, {0x15, 0x00C9}, {0x15, 0x00CA}, {0x15, 0x00CB}, {0x15, 0x00CC}, {0x15, 0x00CD}, {0x15, 0x00CE}, {0x15, 0x00CF}, // 00e8 - 00ef + {0x15, 0x00D0}, {0x15, 0x00D1}, {0x15, 0x00D2}, {0x15, 0x00D3}, {0x15, 0x00D4}, {0x15, 0x00D5}, {0x15, 0x00D6}, {0x00, 0x0000}, // 00f0 - 00f7 + {0x15, 0x00D8}, {0x15, 0x00D9}, {0x15, 0x00DA}, {0x15, 0x00DB}, {0x15, 0x00DC}, {0x15, 0x00DD}, {0x15, 0x00DE}, {0x15, 0x0178}, // 00f8 - 00ff + + {0x6a, 0x0101}, {0x15, 0x0100}, {0x6a, 0x0103}, {0x15, 0x0102}, {0x6a, 0x0105}, {0x15, 0x0104}, {0x6a, 0x0107}, {0x15, 0x0106}, // 0100 - 0107 + {0x6a, 0x0109}, {0x15, 0x0108}, {0x6a, 0x010B}, {0x15, 0x010A}, {0x6a, 0x010D}, {0x15, 0x010C}, {0x6a, 0x010F}, {0x15, 0x010E}, // 0108 - 010f + {0x6a, 0x0111}, {0x15, 0x0110}, {0x6a, 0x0113}, {0x15, 0x0112}, {0x6a, 0x0115}, {0x15, 0x0114}, {0x6a, 0x0117}, {0x15, 0x0116}, // 0110 - 0117 + {0x6a, 0x0119}, {0x15, 0x0118}, {0x6a, 0x011B}, {0x15, 0x011A}, {0x6a, 0x011D}, {0x15, 0x011C}, {0x6a, 0x011F}, {0x15, 0x011E}, // 0118 - 011f + {0x6a, 0x0121}, {0x15, 0x0120}, {0x6a, 0x0123}, {0x15, 0x0122}, {0x6a, 0x0125}, {0x15, 0x0124}, {0x6a, 0x0127}, {0x15, 0x0126}, // 0120 - 0127 + {0xea, 0x000E}, {0x15, 0x0128}, {0x6a, 0x012B}, {0x15, 0x012A}, {0x6a, 0x012D}, {0x15, 0x012C}, {0xea, 0x0010}, {0x15, 0x012E}, // 0128 - 012f + {0x6a, 0x0069}, {0xf5, 0x0012}, {0x6a, 0x0133}, {0x15, 0x0132}, {0x6a, 0x0135}, {0x15, 0x0134}, {0x6a, 0x0137}, {0x15, 0x0136}, // 0130 - 0137 + {0x00, 0x0000}, {0x6a, 0x013A}, {0x15, 0x0139}, {0x6a, 0x013C}, {0x15, 0x013B}, {0x6a, 0x013E}, {0x15, 0x013D}, {0x6a, 0x0140}, // 0138 - 013f + {0x15, 0x013F}, {0x6a, 0x0142}, {0x15, 0x0141}, {0x6a, 0x0144}, {0x15, 0x0143}, {0x6a, 0x0146}, {0x15, 0x0145}, {0x6a, 0x0148}, // 0140 - 0147 + {0x15, 0x0147}, {0xd5, 0x0014}, {0x6a, 0x014B}, {0x15, 0x014A}, {0x6a, 0x014D}, {0x15, 0x014C}, {0x6a, 0x014F}, {0x15, 0x014E}, // 0148 - 014f + {0x6a, 0x0151}, {0x15, 0x0150}, {0x6a, 0x0153}, {0x15, 0x0152}, {0x6a, 0x0155}, {0x15, 0x0154}, {0x6a, 0x0157}, {0x15, 0x0156}, // 0150 - 0157 + {0x6a, 0x0159}, {0x15, 0x0158}, {0x6a, 0x015B}, {0x15, 0x015A}, {0x6a, 0x015D}, {0x15, 0x015C}, {0x6a, 0x015F}, {0x15, 0x015E}, // 0158 - 015f + {0x6a, 0x0161}, {0x15, 0x0160}, {0x6a, 0x0163}, {0x15, 0x0162}, {0x6a, 0x0165}, {0x15, 0x0164}, {0x6a, 0x0167}, {0x15, 0x0166}, // 0160 - 0167 + {0x6a, 0x0169}, {0x15, 0x0168}, {0x6a, 0x016B}, {0x15, 0x016A}, {0x6a, 0x016D}, {0x15, 0x016C}, {0x6a, 0x016F}, {0x15, 0x016E}, // 0168 - 016f + {0x6a, 0x0171}, {0x15, 0x0170}, {0x6a, 0x0173}, {0x15, 0x0172}, {0x6a, 0x0175}, {0x15, 0x0174}, {0x6a, 0x0177}, {0x15, 0x0176}, // 0170 - 0177 + {0x6a, 0x00FF}, {0x6a, 0x017A}, {0x15, 0x0179}, {0x6a, 0x017C}, {0x15, 0x017B}, {0x6a, 0x017E}, {0x15, 0x017D}, {0xf5, 0x0016}, // 0178 - 017f + {0x00, 0x0000}, {0x6a, 0x0253}, {0x6a, 0x0183}, {0x15, 0x0182}, {0x6a, 0x0185}, {0x15, 0x0184}, {0x6a, 0x0254}, {0x6a, 0x0188}, // 0180 - 0187 + {0x15, 0x0187}, {0x6a, 0x0256}, {0x6a, 0x0257}, {0x6a, 0x018C}, {0x15, 0x018B}, {0x00, 0x0000}, {0x6a, 0x01DD}, {0x6a, 0x0259}, // 0188 - 018f + {0x6a, 0x025B}, {0x6a, 0x0192}, {0x15, 0x0191}, {0x6a, 0x0260}, {0x6a, 0x0263}, {0x15, 0x01F6}, {0x6a, 0x0269}, {0x6a, 0x0268}, // 0190 - 0197 + {0x6a, 0x0199}, {0x15, 0x0198}, {0x00, 0x0000}, {0x00, 0x0000}, {0x6a, 0x026F}, {0x6a, 0x0272}, {0x00, 0x0000}, {0x6a, 0x0275}, // 0198 - 019f + {0x6a, 0x01A1}, {0x15, 0x01A0}, {0x6a, 0x01A3}, {0x15, 0x01A2}, {0x6a, 0x01A5}, {0x15, 0x01A4}, {0x6a, 0x0280}, {0x6a, 0x01A8}, // 01a0 - 01a7 + {0x15, 0x01A7}, {0x6a, 0x0283}, {0x00, 0x0000}, {0x00, 0x0000}, {0x6a, 0x01AD}, {0x15, 0x01AC}, {0x6a, 0x0288}, {0x6a, 0x01B0}, // 01a8 - 01af + {0x15, 0x01AF}, {0x6a, 0x028A}, {0x6a, 0x028B}, {0x6a, 0x01B4}, {0x15, 0x01B3}, {0x6a, 0x01B6}, {0x15, 0x01B5}, {0x6a, 0x0292}, // 01b0 - 01b7 + {0x6a, 0x01B9}, {0x15, 0x01B8}, {0x00, 0x0000}, {0x00, 0x0000}, {0x6a, 0x01BD}, {0x15, 0x01BC}, {0x00, 0x0000}, {0x15, 0x01F7}, // 01b8 - 01bf + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0xfa, 0x0018}, {0xec, 0x001A}, {0x95, 0x001C}, {0xfa, 0x001E}, // 01c0 - 01c7 + {0xec, 0x0020}, {0x95, 0x0022}, {0xfa, 0x0024}, {0xec, 0x0026}, {0x95, 0x0028}, {0x6a, 0x01CE}, {0x15, 0x01CD}, {0x6a, 0x01D0}, // 01c8 - 01cf + {0x15, 0x01CF}, {0x6a, 0x01D2}, {0x15, 0x01D1}, {0x6a, 0x01D4}, {0x15, 0x01D3}, {0x6a, 0x01D6}, {0x15, 0x01D5}, {0x6a, 0x01D8}, // 01d0 - 01d7 + {0x15, 0x01D7}, {0x6a, 0x01DA}, {0x15, 0x01D9}, {0x6a, 0x01DC}, {0x15, 0x01DB}, {0x15, 0x018E}, {0x6a, 0x01DF}, {0x15, 0x01DE}, // 01d8 - 01df + {0x6a, 0x01E1}, {0x15, 0x01E0}, {0x6a, 0x01E3}, {0x15, 0x01E2}, {0x6a, 0x01E5}, {0x15, 0x01E4}, {0x6a, 0x01E7}, {0x15, 0x01E6}, // 01e0 - 01e7 + {0x6a, 0x01E9}, {0x15, 0x01E8}, {0x6a, 0x01EB}, {0x15, 0x01EA}, {0x6a, 0x01ED}, {0x15, 0x01EC}, {0x6a, 0x01EF}, {0x15, 0x01EE}, // 01e8 - 01ef + {0xd5, 0x002A}, {0xfa, 0x002C}, {0xec, 0x002E}, {0x95, 0x0030}, {0x6a, 0x01F5}, {0x15, 0x01F4}, {0x6a, 0x0195}, {0x6a, 0x01BF}, // 01f0 - 01f7 + {0x6a, 0x01F9}, {0x15, 0x01F8}, {0x6a, 0x01FB}, {0x15, 0x01FA}, {0x6a, 0x01FD}, {0x15, 0x01FC}, {0x6a, 0x01FF}, {0x15, 0x01FE}, // 01f8 - 01ff + + {0x6a, 0x0201}, {0x15, 0x0200}, {0x6a, 0x0203}, {0x15, 0x0202}, {0x6a, 0x0205}, {0x15, 0x0204}, {0x6a, 0x0207}, {0x15, 0x0206}, // 0200 - 0207 + {0x6a, 0x0209}, {0x15, 0x0208}, {0x6a, 0x020B}, {0x15, 0x020A}, {0x6a, 0x020D}, {0x15, 0x020C}, {0x6a, 0x020F}, {0x15, 0x020E}, // 0208 - 020f + {0x6a, 0x0211}, {0x15, 0x0210}, {0x6a, 0x0213}, {0x15, 0x0212}, {0x6a, 0x0215}, {0x15, 0x0214}, {0x6a, 0x0217}, {0x15, 0x0216}, // 0210 - 0217 + {0x6a, 0x0219}, {0x15, 0x0218}, {0x6a, 0x021B}, {0x15, 0x021A}, {0x6a, 0x021D}, {0x15, 0x021C}, {0x6a, 0x021F}, {0x15, 0x021E}, // 0218 - 021f + {0x00, 0x0000}, {0x00, 0x0000}, {0x6a, 0x0223}, {0x15, 0x0222}, {0x6a, 0x0225}, {0x15, 0x0224}, {0x6a, 0x0227}, {0x15, 0x0226}, // 0220 - 0227 + {0x6a, 0x0229}, {0x15, 0x0228}, {0x6a, 0x022B}, {0x15, 0x022A}, {0x6a, 0x022D}, {0x15, 0x022C}, {0x6a, 0x022F}, {0x15, 0x022E}, // 0228 - 022f + {0x6a, 0x0231}, {0x15, 0x0230}, {0x6a, 0x0233}, {0x15, 0x0232}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0230 - 0237 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0238 - 023f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0240 - 0247 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0248 - 024f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x15, 0x0181}, {0x15, 0x0186}, {0x00, 0x0000}, {0x15, 0x0189}, {0x15, 0x018A}, // 0250 - 0257 + {0x00, 0x0000}, {0x15, 0x018F}, {0x00, 0x0000}, {0x15, 0x0190}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0258 - 025f + {0x15, 0x0193}, {0x00, 0x0000}, {0x00, 0x0000}, {0x15, 0x0194}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0260 - 0267 + {0x15, 0x0197}, {0x15, 0x0196}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x15, 0x019C}, // 0268 - 026f + {0x00, 0x0000}, {0x00, 0x0000}, {0x15, 0x019D}, {0x00, 0x0000}, {0x00, 0x0000}, {0x15, 0x019F}, {0x00, 0x0000}, {0x00, 0x0000}, // 0270 - 0277 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0278 - 027f + {0x15, 0x01A6}, {0x00, 0x0000}, {0x00, 0x0000}, {0x15, 0x01A9}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0280 - 0287 + {0x15, 0x01AE}, {0x00, 0x0000}, {0x15, 0x01B1}, {0x15, 0x01B2}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0288 - 028f + {0x00, 0x0000}, {0x00, 0x0000}, {0x15, 0x01B7}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0290 - 0297 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0298 - 029f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 02a0 - 02a7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 02a8 - 02af + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 02b0 - 02b7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 02b8 - 02bf + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 02c0 - 02c7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 02c8 - 02cf + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 02d0 - 02d7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 02d8 - 02df + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 02e0 - 02e7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 02e8 - 02ef + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 02f0 - 02f7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 02f8 - 02ff + + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x9f, 0x0000}, // 0300 - 0307 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0308 - 030f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0310 - 0317 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0318 - 031f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0320 - 0327 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0328 - 032f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0330 - 0337 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0338 - 033f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0xf4, 0x0032}, {0x00, 0x0000}, {0x00, 0x0000}, // 0340 - 0347 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0348 - 034f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0350 - 0357 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0358 - 035f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0360 - 0367 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0368 - 036f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0370 - 0377 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0378 - 037f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x6a, 0x03AC}, {0x00, 0x0000}, // 0380 - 0387 + {0x6a, 0x03AD}, {0x6a, 0x03AE}, {0x6a, 0x03AF}, {0x00, 0x0000}, {0x6a, 0x03CC}, {0x00, 0x0000}, {0x6a, 0x03CD}, {0x6a, 0x03CE}, // 0388 - 038f + {0xd5, 0x0034}, {0x6a, 0x03B1}, {0x6a, 0x03B2}, {0x6a, 0x03B3}, {0x6a, 0x03B4}, {0x6a, 0x03B5}, {0x6a, 0x03B6}, {0x6a, 0x03B7}, // 0390 - 0397 + {0x6a, 0x03B8}, {0x6a, 0x03B9}, {0x6a, 0x03BA}, {0x6a, 0x03BB}, {0x6a, 0x03BC}, {0x6a, 0x03BD}, {0x6a, 0x03BE}, {0x6a, 0x03BF}, // 0398 - 039f + {0x6a, 0x03C0}, {0x6a, 0x03C1}, {0x00, 0x0000}, {0xea, 0x0036}, {0x6a, 0x03C4}, {0x6a, 0x03C5}, {0x6a, 0x03C6}, {0x6a, 0x03C7}, // 03a0 - 03a7 + {0x6a, 0x03C8}, {0x6a, 0x03C9}, {0x6a, 0x03CA}, {0x6a, 0x03CB}, {0x15, 0x0386}, {0x15, 0x0388}, {0x15, 0x0389}, {0x15, 0x038A}, // 03a8 - 03af + {0xd5, 0x0038}, {0x15, 0x0391}, {0x15, 0x0392}, {0x15, 0x0393}, {0x15, 0x0394}, {0x15, 0x0395}, {0x15, 0x0396}, {0x15, 0x0397}, // 03b0 - 03b7 + {0x15, 0x0398}, {0x15, 0x0399}, {0x15, 0x039A}, {0x15, 0x039B}, {0x15, 0x039C}, {0x15, 0x039D}, {0x15, 0x039E}, {0x15, 0x039F}, // 03b8 - 03bf + {0x15, 0x03A0}, {0x15, 0x03A1}, {0xf5, 0x003A}, {0x15, 0x03A3}, {0x15, 0x03A4}, {0x15, 0x03A5}, {0x15, 0x03A6}, {0x15, 0x03A7}, // 03c0 - 03c7 + {0x15, 0x03A8}, {0x15, 0x03A9}, {0x15, 0x03AA}, {0x15, 0x03AB}, {0x15, 0x038C}, {0x15, 0x038E}, {0x15, 0x038F}, {0x00, 0x0000}, // 03c8 - 03cf + {0xf5, 0x003C}, {0xf5, 0x003E}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0xf5, 0x0040}, {0xf5, 0x0042}, {0x00, 0x0000}, // 03d0 - 03d7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x6a, 0x03DB}, {0x15, 0x03DA}, {0x6a, 0x03DD}, {0x15, 0x03DC}, {0x6a, 0x03DF}, {0x15, 0x03DE}, // 03d8 - 03df + {0x6a, 0x03E1}, {0x15, 0x03E0}, {0x6a, 0x03E3}, {0x15, 0x03E2}, {0x6a, 0x03E5}, {0x15, 0x03E4}, {0x6a, 0x03E7}, {0x15, 0x03E6}, // 03e0 - 03e7 + {0x6a, 0x03E9}, {0x15, 0x03E8}, {0x6a, 0x03EB}, {0x15, 0x03EA}, {0x6a, 0x03ED}, {0x15, 0x03EC}, {0x6a, 0x03EF}, {0x15, 0x03EE}, // 03e8 - 03ef + {0xf5, 0x0044}, {0xf5, 0x0046}, {0xf5, 0x0048}, {0x00, 0x0000}, {0x6a, 0x03B8}, {0xf5, 0x004A}, {0x00, 0x0000}, {0x00, 0x0000}, // 03f0 - 03f7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 03f8 - 03ff + + {0x6a, 0x0450}, {0x6a, 0x0451}, {0x6a, 0x0452}, {0x6a, 0x0453}, {0x6a, 0x0454}, {0x6a, 0x0455}, {0x6a, 0x0456}, {0x6a, 0x0457}, // 0400 - 0407 + {0x6a, 0x0458}, {0x6a, 0x0459}, {0x6a, 0x045A}, {0x6a, 0x045B}, {0x6a, 0x045C}, {0x6a, 0x045D}, {0x6a, 0x045E}, {0x6a, 0x045F}, // 0408 - 040f + {0x6a, 0x0430}, {0x6a, 0x0431}, {0x6a, 0x0432}, {0x6a, 0x0433}, {0x6a, 0x0434}, {0x6a, 0x0435}, {0x6a, 0x0436}, {0x6a, 0x0437}, // 0410 - 0417 + {0x6a, 0x0438}, {0x6a, 0x0439}, {0x6a, 0x043A}, {0x6a, 0x043B}, {0x6a, 0x043C}, {0x6a, 0x043D}, {0x6a, 0x043E}, {0x6a, 0x043F}, // 0418 - 041f + {0x6a, 0x0440}, {0x6a, 0x0441}, {0x6a, 0x0442}, {0x6a, 0x0443}, {0x6a, 0x0444}, {0x6a, 0x0445}, {0x6a, 0x0446}, {0x6a, 0x0447}, // 0420 - 0427 + {0x6a, 0x0448}, {0x6a, 0x0449}, {0x6a, 0x044A}, {0x6a, 0x044B}, {0x6a, 0x044C}, {0x6a, 0x044D}, {0x6a, 0x044E}, {0x6a, 0x044F}, // 0428 - 042f + {0x15, 0x0410}, {0x15, 0x0411}, {0x15, 0x0412}, {0x15, 0x0413}, {0x15, 0x0414}, {0x15, 0x0415}, {0x15, 0x0416}, {0x15, 0x0417}, // 0430 - 0437 + {0x15, 0x0418}, {0x15, 0x0419}, {0x15, 0x041A}, {0x15, 0x041B}, {0x15, 0x041C}, {0x15, 0x041D}, {0x15, 0x041E}, {0x15, 0x041F}, // 0438 - 043f + {0x15, 0x0420}, {0x15, 0x0421}, {0x15, 0x0422}, {0x15, 0x0423}, {0x15, 0x0424}, {0x15, 0x0425}, {0x15, 0x0426}, {0x15, 0x0427}, // 0440 - 0447 + {0x15, 0x0428}, {0x15, 0x0429}, {0x15, 0x042A}, {0x15, 0x042B}, {0x15, 0x042C}, {0x15, 0x042D}, {0x15, 0x042E}, {0x15, 0x042F}, // 0448 - 044f + {0x15, 0x0400}, {0x15, 0x0401}, {0x15, 0x0402}, {0x15, 0x0403}, {0x15, 0x0404}, {0x15, 0x0405}, {0x15, 0x0406}, {0x15, 0x0407}, // 0450 - 0457 + {0x15, 0x0408}, {0x15, 0x0409}, {0x15, 0x040A}, {0x15, 0x040B}, {0x15, 0x040C}, {0x15, 0x040D}, {0x15, 0x040E}, {0x15, 0x040F}, // 0458 - 045f + {0x6a, 0x0461}, {0x15, 0x0460}, {0x6a, 0x0463}, {0x15, 0x0462}, {0x6a, 0x0465}, {0x15, 0x0464}, {0x6a, 0x0467}, {0x15, 0x0466}, // 0460 - 0467 + {0x6a, 0x0469}, {0x15, 0x0468}, {0x6a, 0x046B}, {0x15, 0x046A}, {0x6a, 0x046D}, {0x15, 0x046C}, {0x6a, 0x046F}, {0x15, 0x046E}, // 0468 - 046f + {0x6a, 0x0471}, {0x15, 0x0470}, {0x6a, 0x0473}, {0x15, 0x0472}, {0x6a, 0x0475}, {0x15, 0x0474}, {0x6a, 0x0477}, {0x15, 0x0476}, // 0470 - 0477 + {0x6a, 0x0479}, {0x15, 0x0478}, {0x6a, 0x047B}, {0x15, 0x047A}, {0x6a, 0x047D}, {0x15, 0x047C}, {0x6a, 0x047F}, {0x15, 0x047E}, // 0478 - 047f + {0x6a, 0x0481}, {0x15, 0x0480}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0480 - 0487 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x6a, 0x048D}, {0x15, 0x048C}, {0x6a, 0x048F}, {0x15, 0x048E}, // 0488 - 048f + {0x6a, 0x0491}, {0x15, 0x0490}, {0x6a, 0x0493}, {0x15, 0x0492}, {0x6a, 0x0495}, {0x15, 0x0494}, {0x6a, 0x0497}, {0x15, 0x0496}, // 0490 - 0497 + {0x6a, 0x0499}, {0x15, 0x0498}, {0x6a, 0x049B}, {0x15, 0x049A}, {0x6a, 0x049D}, {0x15, 0x049C}, {0x6a, 0x049F}, {0x15, 0x049E}, // 0498 - 049f + {0x6a, 0x04A1}, {0x15, 0x04A0}, {0x6a, 0x04A3}, {0x15, 0x04A2}, {0x6a, 0x04A5}, {0x15, 0x04A4}, {0x6a, 0x04A7}, {0x15, 0x04A6}, // 04a0 - 04a7 + {0x6a, 0x04A9}, {0x15, 0x04A8}, {0x6a, 0x04AB}, {0x15, 0x04AA}, {0x6a, 0x04AD}, {0x15, 0x04AC}, {0x6a, 0x04AF}, {0x15, 0x04AE}, // 04a8 - 04af + {0x6a, 0x04B1}, {0x15, 0x04B0}, {0x6a, 0x04B3}, {0x15, 0x04B2}, {0x6a, 0x04B5}, {0x15, 0x04B4}, {0x6a, 0x04B7}, {0x15, 0x04B6}, // 04b0 - 04b7 + {0x6a, 0x04B9}, {0x15, 0x04B8}, {0x6a, 0x04BB}, {0x15, 0x04BA}, {0x6a, 0x04BD}, {0x15, 0x04BC}, {0x6a, 0x04BF}, {0x15, 0x04BE}, // 04b8 - 04bf + {0x00, 0x0000}, {0x6a, 0x04C2}, {0x15, 0x04C1}, {0x6a, 0x04C4}, {0x15, 0x04C3}, {0x00, 0x0000}, {0x00, 0x0000}, {0x6a, 0x04C8}, // 04c0 - 04c7 + {0x15, 0x04C7}, {0x00, 0x0000}, {0x00, 0x0000}, {0x6a, 0x04CC}, {0x15, 0x04CB}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 04c8 - 04cf + {0x6a, 0x04D1}, {0x15, 0x04D0}, {0x6a, 0x04D3}, {0x15, 0x04D2}, {0x6a, 0x04D5}, {0x15, 0x04D4}, {0x6a, 0x04D7}, {0x15, 0x04D6}, // 04d0 - 04d7 + {0x6a, 0x04D9}, {0x15, 0x04D8}, {0x6a, 0x04DB}, {0x15, 0x04DA}, {0x6a, 0x04DD}, {0x15, 0x04DC}, {0x6a, 0x04DF}, {0x15, 0x04DE}, // 04d8 - 04df + {0x6a, 0x04E1}, {0x15, 0x04E0}, {0x6a, 0x04E3}, {0x15, 0x04E2}, {0x6a, 0x04E5}, {0x15, 0x04E4}, {0x6a, 0x04E7}, {0x15, 0x04E6}, // 04e0 - 04e7 + {0x6a, 0x04E9}, {0x15, 0x04E8}, {0x6a, 0x04EB}, {0x15, 0x04EA}, {0x6a, 0x04ED}, {0x15, 0x04EC}, {0x6a, 0x04EF}, {0x15, 0x04EE}, // 04e8 - 04ef + {0x6a, 0x04F1}, {0x15, 0x04F0}, {0x6a, 0x04F3}, {0x15, 0x04F2}, {0x6a, 0x04F5}, {0x15, 0x04F4}, {0x00, 0x0000}, {0x00, 0x0000}, // 04f0 - 04f7 + {0x6a, 0x04F9}, {0x15, 0x04F8}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 04f8 - 04ff + + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0500 - 0507 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0508 - 050f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0510 - 0517 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0518 - 051f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0520 - 0527 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0528 - 052f + {0x00, 0x0000}, {0x6a, 0x0561}, {0x6a, 0x0562}, {0x6a, 0x0563}, {0x6a, 0x0564}, {0x6a, 0x0565}, {0x6a, 0x0566}, {0x6a, 0x0567}, // 0530 - 0537 + {0x6a, 0x0568}, {0x6a, 0x0569}, {0x6a, 0x056A}, {0x6a, 0x056B}, {0x6a, 0x056C}, {0x6a, 0x056D}, {0x6a, 0x056E}, {0x6a, 0x056F}, // 0538 - 053f + {0x6a, 0x0570}, {0x6a, 0x0571}, {0x6a, 0x0572}, {0x6a, 0x0573}, {0x6a, 0x0574}, {0x6a, 0x0575}, {0x6a, 0x0576}, {0x6a, 0x0577}, // 0540 - 0547 + {0x6a, 0x0578}, {0x6a, 0x0579}, {0x6a, 0x057A}, {0x6a, 0x057B}, {0x6a, 0x057C}, {0x6a, 0x057D}, {0x6a, 0x057E}, {0x6a, 0x057F}, // 0548 - 054f + {0x6a, 0x0580}, {0x6a, 0x0581}, {0x6a, 0x0582}, {0x6a, 0x0583}, {0x6a, 0x0584}, {0x6a, 0x0585}, {0x6a, 0x0586}, {0x00, 0x0000}, // 0550 - 0557 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0558 - 055f + {0x00, 0x0000}, {0x15, 0x0531}, {0x15, 0x0532}, {0x15, 0x0533}, {0x15, 0x0534}, {0x15, 0x0535}, {0x15, 0x0536}, {0x15, 0x0537}, // 0560 - 0567 + {0x15, 0x0538}, {0x15, 0x0539}, {0x15, 0x053A}, {0x15, 0x053B}, {0x15, 0x053C}, {0x15, 0x053D}, {0x15, 0x053E}, {0x15, 0x053F}, // 0568 - 056f + {0x15, 0x0540}, {0x15, 0x0541}, {0x15, 0x0542}, {0x15, 0x0543}, {0x15, 0x0544}, {0x15, 0x0545}, {0x15, 0x0546}, {0x15, 0x0547}, // 0570 - 0577 + {0x15, 0x0548}, {0x15, 0x0549}, {0x15, 0x054A}, {0x15, 0x054B}, {0x15, 0x054C}, {0x15, 0x054D}, {0x15, 0x054E}, {0x15, 0x054F}, // 0578 - 057f + {0x15, 0x0550}, {0x15, 0x0551}, {0x15, 0x0552}, {0x15, 0x0553}, {0x15, 0x0554}, {0x15, 0x0555}, {0x15, 0x0556}, {0xd5, 0x004C}, // 0580 - 0587 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0588 - 058f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0590 - 0597 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0598 - 059f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 05a0 - 05a7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 05a8 - 05af + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 05b0 - 05b7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 05b8 - 05bf + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 05c0 - 05c7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 05c8 - 05cf + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 05d0 - 05d7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 05d8 - 05df + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 05e0 - 05e7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 05e8 - 05ef + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 05f0 - 05f7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 05f8 - 05ff + + {0x6a, 0x1E01}, {0x15, 0x1E00}, {0x6a, 0x1E03}, {0x15, 0x1E02}, {0x6a, 0x1E05}, {0x15, 0x1E04}, {0x6a, 0x1E07}, {0x15, 0x1E06}, // 1e00 - 1e07 + {0x6a, 0x1E09}, {0x15, 0x1E08}, {0x6a, 0x1E0B}, {0x15, 0x1E0A}, {0x6a, 0x1E0D}, {0x15, 0x1E0C}, {0x6a, 0x1E0F}, {0x15, 0x1E0E}, // 1e08 - 1e0f + {0x6a, 0x1E11}, {0x15, 0x1E10}, {0x6a, 0x1E13}, {0x15, 0x1E12}, {0x6a, 0x1E15}, {0x15, 0x1E14}, {0x6a, 0x1E17}, {0x15, 0x1E16}, // 1e10 - 1e17 + {0x6a, 0x1E19}, {0x15, 0x1E18}, {0x6a, 0x1E1B}, {0x15, 0x1E1A}, {0x6a, 0x1E1D}, {0x15, 0x1E1C}, {0x6a, 0x1E1F}, {0x15, 0x1E1E}, // 1e18 - 1e1f + {0x6a, 0x1E21}, {0x15, 0x1E20}, {0x6a, 0x1E23}, {0x15, 0x1E22}, {0x6a, 0x1E25}, {0x15, 0x1E24}, {0x6a, 0x1E27}, {0x15, 0x1E26}, // 1e20 - 1e27 + {0x6a, 0x1E29}, {0x15, 0x1E28}, {0x6a, 0x1E2B}, {0x15, 0x1E2A}, {0x6a, 0x1E2D}, {0x15, 0x1E2C}, {0x6a, 0x1E2F}, {0x15, 0x1E2E}, // 1e28 - 1e2f + {0x6a, 0x1E31}, {0x15, 0x1E30}, {0x6a, 0x1E33}, {0x15, 0x1E32}, {0x6a, 0x1E35}, {0x15, 0x1E34}, {0x6a, 0x1E37}, {0x15, 0x1E36}, // 1e30 - 1e37 + {0x6a, 0x1E39}, {0x15, 0x1E38}, {0x6a, 0x1E3B}, {0x15, 0x1E3A}, {0x6a, 0x1E3D}, {0x15, 0x1E3C}, {0x6a, 0x1E3F}, {0x15, 0x1E3E}, // 1e38 - 1e3f + {0x6a, 0x1E41}, {0x15, 0x1E40}, {0x6a, 0x1E43}, {0x15, 0x1E42}, {0x6a, 0x1E45}, {0x15, 0x1E44}, {0x6a, 0x1E47}, {0x15, 0x1E46}, // 1e40 - 1e47 + {0x6a, 0x1E49}, {0x15, 0x1E48}, {0x6a, 0x1E4B}, {0x15, 0x1E4A}, {0x6a, 0x1E4D}, {0x15, 0x1E4C}, {0x6a, 0x1E4F}, {0x15, 0x1E4E}, // 1e48 - 1e4f + {0x6a, 0x1E51}, {0x15, 0x1E50}, {0x6a, 0x1E53}, {0x15, 0x1E52}, {0x6a, 0x1E55}, {0x15, 0x1E54}, {0x6a, 0x1E57}, {0x15, 0x1E56}, // 1e50 - 1e57 + {0x6a, 0x1E59}, {0x15, 0x1E58}, {0x6a, 0x1E5B}, {0x15, 0x1E5A}, {0x6a, 0x1E5D}, {0x15, 0x1E5C}, {0x6a, 0x1E5F}, {0x15, 0x1E5E}, // 1e58 - 1e5f + {0x6a, 0x1E61}, {0x15, 0x1E60}, {0x6a, 0x1E63}, {0x15, 0x1E62}, {0x6a, 0x1E65}, {0x15, 0x1E64}, {0x6a, 0x1E67}, {0x15, 0x1E66}, // 1e60 - 1e67 + {0x6a, 0x1E69}, {0x15, 0x1E68}, {0x6a, 0x1E6B}, {0x15, 0x1E6A}, {0x6a, 0x1E6D}, {0x15, 0x1E6C}, {0x6a, 0x1E6F}, {0x15, 0x1E6E}, // 1e68 - 1e6f + {0x6a, 0x1E71}, {0x15, 0x1E70}, {0x6a, 0x1E73}, {0x15, 0x1E72}, {0x6a, 0x1E75}, {0x15, 0x1E74}, {0x6a, 0x1E77}, {0x15, 0x1E76}, // 1e70 - 1e77 + {0x6a, 0x1E79}, {0x15, 0x1E78}, {0x6a, 0x1E7B}, {0x15, 0x1E7A}, {0x6a, 0x1E7D}, {0x15, 0x1E7C}, {0x6a, 0x1E7F}, {0x15, 0x1E7E}, // 1e78 - 1e7f + {0x6a, 0x1E81}, {0x15, 0x1E80}, {0x6a, 0x1E83}, {0x15, 0x1E82}, {0x6a, 0x1E85}, {0x15, 0x1E84}, {0x6a, 0x1E87}, {0x15, 0x1E86}, // 1e80 - 1e87 + {0x6a, 0x1E89}, {0x15, 0x1E88}, {0x6a, 0x1E8B}, {0x15, 0x1E8A}, {0x6a, 0x1E8D}, {0x15, 0x1E8C}, {0x6a, 0x1E8F}, {0x15, 0x1E8E}, // 1e88 - 1e8f + {0x6a, 0x1E91}, {0x15, 0x1E90}, {0x6a, 0x1E93}, {0x15, 0x1E92}, {0x6a, 0x1E95}, {0x15, 0x1E94}, {0xd5, 0x004F}, {0xd5, 0x0051}, // 1e90 - 1e97 + {0xd5, 0x0053}, {0xd5, 0x0055}, {0xd5, 0x0057}, {0xf5, 0x0059}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 1e98 - 1e9f + {0x6a, 0x1EA1}, {0x15, 0x1EA0}, {0x6a, 0x1EA3}, {0x15, 0x1EA2}, {0x6a, 0x1EA5}, {0x15, 0x1EA4}, {0x6a, 0x1EA7}, {0x15, 0x1EA6}, // 1ea0 - 1ea7 + {0x6a, 0x1EA9}, {0x15, 0x1EA8}, {0x6a, 0x1EAB}, {0x15, 0x1EAA}, {0x6a, 0x1EAD}, {0x15, 0x1EAC}, {0x6a, 0x1EAF}, {0x15, 0x1EAE}, // 1ea8 - 1eaf + {0x6a, 0x1EB1}, {0x15, 0x1EB0}, {0x6a, 0x1EB3}, {0x15, 0x1EB2}, {0x6a, 0x1EB5}, {0x15, 0x1EB4}, {0x6a, 0x1EB7}, {0x15, 0x1EB6}, // 1eb0 - 1eb7 + {0x6a, 0x1EB9}, {0x15, 0x1EB8}, {0x6a, 0x1EBB}, {0x15, 0x1EBA}, {0x6a, 0x1EBD}, {0x15, 0x1EBC}, {0x6a, 0x1EBF}, {0x15, 0x1EBE}, // 1eb8 - 1ebf + {0x6a, 0x1EC1}, {0x15, 0x1EC0}, {0x6a, 0x1EC3}, {0x15, 0x1EC2}, {0x6a, 0x1EC5}, {0x15, 0x1EC4}, {0x6a, 0x1EC7}, {0x15, 0x1EC6}, // 1ec0 - 1ec7 + {0x6a, 0x1EC9}, {0x15, 0x1EC8}, {0x6a, 0x1ECB}, {0x15, 0x1ECA}, {0x6a, 0x1ECD}, {0x15, 0x1ECC}, {0x6a, 0x1ECF}, {0x15, 0x1ECE}, // 1ec8 - 1ecf + {0x6a, 0x1ED1}, {0x15, 0x1ED0}, {0x6a, 0x1ED3}, {0x15, 0x1ED2}, {0x6a, 0x1ED5}, {0x15, 0x1ED4}, {0x6a, 0x1ED7}, {0x15, 0x1ED6}, // 1ed0 - 1ed7 + {0x6a, 0x1ED9}, {0x15, 0x1ED8}, {0x6a, 0x1EDB}, {0x15, 0x1EDA}, {0x6a, 0x1EDD}, {0x15, 0x1EDC}, {0x6a, 0x1EDF}, {0x15, 0x1EDE}, // 1ed8 - 1edf + {0x6a, 0x1EE1}, {0x15, 0x1EE0}, {0x6a, 0x1EE3}, {0x15, 0x1EE2}, {0x6a, 0x1EE5}, {0x15, 0x1EE4}, {0x6a, 0x1EE7}, {0x15, 0x1EE6}, // 1ee0 - 1ee7 + {0x6a, 0x1EE9}, {0x15, 0x1EE8}, {0x6a, 0x1EEB}, {0x15, 0x1EEA}, {0x6a, 0x1EED}, {0x15, 0x1EEC}, {0x6a, 0x1EEF}, {0x15, 0x1EEE}, // 1ee8 - 1eef + {0x6a, 0x1EF1}, {0x15, 0x1EF0}, {0x6a, 0x1EF3}, {0x15, 0x1EF2}, {0x6a, 0x1EF5}, {0x15, 0x1EF4}, {0x6a, 0x1EF7}, {0x15, 0x1EF6}, // 1ef0 - 1ef7 + {0x6a, 0x1EF9}, {0x15, 0x1EF8}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 1ef8 - 1eff + + {0x15, 0x1F08}, {0x15, 0x1F09}, {0x15, 0x1F0A}, {0x15, 0x1F0B}, {0x15, 0x1F0C}, {0x15, 0x1F0D}, {0x15, 0x1F0E}, {0x15, 0x1F0F}, // 1f00 - 1f07 + {0x6a, 0x1F00}, {0x6a, 0x1F01}, {0x6a, 0x1F02}, {0x6a, 0x1F03}, {0x6a, 0x1F04}, {0x6a, 0x1F05}, {0x6a, 0x1F06}, {0x6a, 0x1F07}, // 1f08 - 1f0f + {0x15, 0x1F18}, {0x15, 0x1F19}, {0x15, 0x1F1A}, {0x15, 0x1F1B}, {0x15, 0x1F1C}, {0x15, 0x1F1D}, {0x00, 0x0000}, {0x00, 0x0000}, // 1f10 - 1f17 + {0x6a, 0x1F10}, {0x6a, 0x1F11}, {0x6a, 0x1F12}, {0x6a, 0x1F13}, {0x6a, 0x1F14}, {0x6a, 0x1F15}, {0x00, 0x0000}, {0x00, 0x0000}, // 1f18 - 1f1f + {0x15, 0x1F28}, {0x15, 0x1F29}, {0x15, 0x1F2A}, {0x15, 0x1F2B}, {0x15, 0x1F2C}, {0x15, 0x1F2D}, {0x15, 0x1F2E}, {0x15, 0x1F2F}, // 1f20 - 1f27 + {0x6a, 0x1F20}, {0x6a, 0x1F21}, {0x6a, 0x1F22}, {0x6a, 0x1F23}, {0x6a, 0x1F24}, {0x6a, 0x1F25}, {0x6a, 0x1F26}, {0x6a, 0x1F27}, // 1f28 - 1f2f + {0x15, 0x1F38}, {0x15, 0x1F39}, {0x15, 0x1F3A}, {0x15, 0x1F3B}, {0x15, 0x1F3C}, {0x15, 0x1F3D}, {0x15, 0x1F3E}, {0x15, 0x1F3F}, // 1f30 - 1f37 + {0x6a, 0x1F30}, {0x6a, 0x1F31}, {0x6a, 0x1F32}, {0x6a, 0x1F33}, {0x6a, 0x1F34}, {0x6a, 0x1F35}, {0x6a, 0x1F36}, {0x6a, 0x1F37}, // 1f38 - 1f3f + {0x15, 0x1F48}, {0x15, 0x1F49}, {0x15, 0x1F4A}, {0x15, 0x1F4B}, {0x15, 0x1F4C}, {0x15, 0x1F4D}, {0x00, 0x0000}, {0x00, 0x0000}, // 1f40 - 1f47 + {0x6a, 0x1F40}, {0x6a, 0x1F41}, {0x6a, 0x1F42}, {0x6a, 0x1F43}, {0x6a, 0x1F44}, {0x6a, 0x1F45}, {0x00, 0x0000}, {0x00, 0x0000}, // 1f48 - 1f4f + {0xd5, 0x005B}, {0x15, 0x1F59}, {0xd5, 0x005D}, {0x15, 0x1F5B}, {0xd5, 0x005F}, {0x15, 0x1F5D}, {0xd5, 0x0061}, {0x15, 0x1F5F}, // 1f50 - 1f57 + {0x00, 0x0000}, {0x6a, 0x1F51}, {0x00, 0x0000}, {0x6a, 0x1F53}, {0x00, 0x0000}, {0x6a, 0x1F55}, {0x00, 0x0000}, {0x6a, 0x1F57}, // 1f58 - 1f5f + {0x15, 0x1F68}, {0x15, 0x1F69}, {0x15, 0x1F6A}, {0x15, 0x1F6B}, {0x15, 0x1F6C}, {0x15, 0x1F6D}, {0x15, 0x1F6E}, {0x15, 0x1F6F}, // 1f60 - 1f67 + {0x6a, 0x1F60}, {0x6a, 0x1F61}, {0x6a, 0x1F62}, {0x6a, 0x1F63}, {0x6a, 0x1F64}, {0x6a, 0x1F65}, {0x6a, 0x1F66}, {0x6a, 0x1F67}, // 1f68 - 1f6f + {0x15, 0x1FBA}, {0x15, 0x1FBB}, {0x15, 0x1FC8}, {0x15, 0x1FC9}, {0x15, 0x1FCA}, {0x15, 0x1FCB}, {0x15, 0x1FDA}, {0x15, 0x1FDB}, // 1f70 - 1f77 + {0x15, 0x1FF8}, {0x15, 0x1FF9}, {0x15, 0x1FEA}, {0x15, 0x1FEB}, {0x15, 0x1FFA}, {0x15, 0x1FFB}, {0x00, 0x0000}, {0x00, 0x0000}, // 1f78 - 1f7f + {0xd5, 0x0063}, {0xd5, 0x0066}, {0xd5, 0x0069}, {0xd5, 0x006C}, {0xd5, 0x006F}, {0xd5, 0x0072}, {0xd5, 0x0075}, {0xd5, 0x0078}, // 1f80 - 1f87 + {0xec, 0x007B}, {0xec, 0x007E}, {0xec, 0x0081}, {0xec, 0x0084}, {0xec, 0x0087}, {0xec, 0x008A}, {0xec, 0x008D}, {0xec, 0x0090}, // 1f88 - 1f8f + {0xd5, 0x0093}, {0xd5, 0x0096}, {0xd5, 0x0099}, {0xd5, 0x009C}, {0xd5, 0x009F}, {0xd5, 0x00A2}, {0xd5, 0x00A5}, {0xd5, 0x00A8}, // 1f90 - 1f97 + {0xec, 0x00AB}, {0xec, 0x00AE}, {0xec, 0x00B1}, {0xec, 0x00B4}, {0xec, 0x00B7}, {0xec, 0x00BA}, {0xec, 0x00BD}, {0xec, 0x00C0}, // 1f98 - 1f9f + {0xd5, 0x00C3}, {0xd5, 0x00C6}, {0xd5, 0x00C9}, {0xd5, 0x00CC}, {0xd5, 0x00CF}, {0xd5, 0x00D2}, {0xd5, 0x00D5}, {0xd5, 0x00D8}, // 1fa0 - 1fa7 + {0xec, 0x00DB}, {0xec, 0x00DE}, {0xec, 0x00E1}, {0xec, 0x00E4}, {0xec, 0x00E7}, {0xec, 0x00EA}, {0xec, 0x00ED}, {0xec, 0x00F0}, // 1fa8 - 1faf + {0x15, 0x1FB8}, {0x15, 0x1FB9}, {0xd5, 0x00F3}, {0xd5, 0x00F6}, {0xd5, 0x00F9}, {0x00, 0x0000}, {0xd5, 0x00FC}, {0xd5, 0x00FE}, // 1fb0 - 1fb7 + {0x6a, 0x1FB0}, {0x6a, 0x1FB1}, {0x6a, 0x1F70}, {0x6a, 0x1F71}, {0xec, 0x0101}, {0x00, 0x0000}, {0xf5, 0x0104}, {0x00, 0x0000}, // 1fb8 - 1fbf + {0x00, 0x0000}, {0x00, 0x0000}, {0xd5, 0x0106}, {0xd5, 0x0109}, {0xd5, 0x010C}, {0x00, 0x0000}, {0xd5, 0x010F}, {0xd5, 0x0111}, // 1fc0 - 1fc7 + {0x6a, 0x1F72}, {0x6a, 0x1F73}, {0x6a, 0x1F74}, {0x6a, 0x1F75}, {0xec, 0x0114}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 1fc8 - 1fcf + {0x15, 0x1FD8}, {0x15, 0x1FD9}, {0xd5, 0x0117}, {0xd5, 0x0119}, {0x00, 0x0000}, {0x00, 0x0000}, {0xd5, 0x011B}, {0xd5, 0x011D}, // 1fd0 - 1fd7 + {0x6a, 0x1FD0}, {0x6a, 0x1FD1}, {0x6a, 0x1F76}, {0x6a, 0x1F77}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 1fd8 - 1fdf + {0x15, 0x1FE8}, {0x15, 0x1FE9}, {0xd5, 0x011F}, {0xd5, 0x0121}, {0xd5, 0x0123}, {0x15, 0x1FEC}, {0xd5, 0x0125}, {0xd5, 0x0127}, // 1fe0 - 1fe7 + {0x6a, 0x1FE0}, {0x6a, 0x1FE1}, {0x6a, 0x1F7A}, {0x6a, 0x1F7B}, {0x6a, 0x1FE5}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 1fe8 - 1fef + {0x00, 0x0000}, {0x00, 0x0000}, {0xd5, 0x0129}, {0xd5, 0x012C}, {0xd5, 0x012F}, {0x00, 0x0000}, {0xd5, 0x0132}, {0xd5, 0x0134}, // 1ff0 - 1ff7 + {0x6a, 0x1F78}, {0x6a, 0x1F79}, {0x6a, 0x1F7C}, {0x6a, 0x1F7D}, {0xec, 0x0137}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 1ff8 - 1fff + + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2100 - 2107 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2108 - 210f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2110 - 2117 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2118 - 211f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x6a, 0x03C9}, {0x00, 0x0000}, // 2120 - 2127 + {0x00, 0x0000}, {0x00, 0x0000}, {0x6a, 0x006B}, {0x6a, 0x00E5}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2128 - 212f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2130 - 2137 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2138 - 213f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2140 - 2147 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2148 - 214f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2150 - 2157 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2158 - 215f + {0x68, 0x2170}, {0x68, 0x2171}, {0x68, 0x2172}, {0x68, 0x2173}, {0x68, 0x2174}, {0x68, 0x2175}, {0x68, 0x2176}, {0x68, 0x2177}, // 2160 - 2167 + {0x68, 0x2178}, {0x68, 0x2179}, {0x68, 0x217A}, {0x68, 0x217B}, {0x68, 0x217C}, {0x68, 0x217D}, {0x68, 0x217E}, {0x68, 0x217F}, // 2168 - 216f + {0x14, 0x2160}, {0x14, 0x2161}, {0x14, 0x2162}, {0x14, 0x2163}, {0x14, 0x2164}, {0x14, 0x2165}, {0x14, 0x2166}, {0x14, 0x2167}, // 2170 - 2177 + {0x14, 0x2168}, {0x14, 0x2169}, {0x14, 0x216A}, {0x14, 0x216B}, {0x14, 0x216C}, {0x14, 0x216D}, {0x14, 0x216E}, {0x14, 0x216F}, // 2178 - 217f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2180 - 2187 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2188 - 218f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2190 - 2197 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2198 - 219f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 21a0 - 21a7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 21a8 - 21af + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 21b0 - 21b7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 21b8 - 21bf + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 21c0 - 21c7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 21c8 - 21cf + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 21d0 - 21d7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 21d8 - 21df + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 21e0 - 21e7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 21e8 - 21ef + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 21f0 - 21f7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 21f8 - 21ff + + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2400 - 2407 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2408 - 240f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2410 - 2417 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2418 - 241f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2420 - 2427 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2428 - 242f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2430 - 2437 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2438 - 243f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2440 - 2447 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2448 - 244f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2450 - 2457 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2458 - 245f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2460 - 2467 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2468 - 246f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2470 - 2477 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2478 - 247f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2480 - 2487 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2488 - 248f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2490 - 2497 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2498 - 249f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 24a0 - 24a7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 24a8 - 24af + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x68, 0x24D0}, {0x68, 0x24D1}, // 24b0 - 24b7 + {0x68, 0x24D2}, {0x68, 0x24D3}, {0x68, 0x24D4}, {0x68, 0x24D5}, {0x68, 0x24D6}, {0x68, 0x24D7}, {0x68, 0x24D8}, {0x68, 0x24D9}, // 24b8 - 24bf + {0x68, 0x24DA}, {0x68, 0x24DB}, {0x68, 0x24DC}, {0x68, 0x24DD}, {0x68, 0x24DE}, {0x68, 0x24DF}, {0x68, 0x24E0}, {0x68, 0x24E1}, // 24c0 - 24c7 + {0x68, 0x24E2}, {0x68, 0x24E3}, {0x68, 0x24E4}, {0x68, 0x24E5}, {0x68, 0x24E6}, {0x68, 0x24E7}, {0x68, 0x24E8}, {0x68, 0x24E9}, // 24c8 - 24cf + {0x14, 0x24B6}, {0x14, 0x24B7}, {0x14, 0x24B8}, {0x14, 0x24B9}, {0x14, 0x24BA}, {0x14, 0x24BB}, {0x14, 0x24BC}, {0x14, 0x24BD}, // 24d0 - 24d7 + {0x14, 0x24BE}, {0x14, 0x24BF}, {0x14, 0x24C0}, {0x14, 0x24C1}, {0x14, 0x24C2}, {0x14, 0x24C3}, {0x14, 0x24C4}, {0x14, 0x24C5}, // 24d8 - 24df + {0x14, 0x24C6}, {0x14, 0x24C7}, {0x14, 0x24C8}, {0x14, 0x24C9}, {0x14, 0x24CA}, {0x14, 0x24CB}, {0x14, 0x24CC}, {0x14, 0x24CD}, // 24e0 - 24e7 + {0x14, 0x24CE}, {0x14, 0x24CF}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 24e8 - 24ef + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 24f0 - 24f7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 24f8 - 24ff + + {0xd5, 0x013A}, {0xd5, 0x013D}, {0xd5, 0x0140}, {0xd5, 0x0143}, {0xd5, 0x0146}, {0xd5, 0x0149}, {0xd5, 0x014C}, {0x00, 0x0000}, // fb00 - fb07 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb08 - fb0f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0xd5, 0x014F}, {0xd5, 0x0152}, {0xd5, 0x0155}, {0xd5, 0x0158}, {0xd5, 0x015B}, // fb10 - fb17 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb18 - fb1f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb20 - fb27 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb28 - fb2f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb30 - fb37 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb38 - fb3f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb40 - fb47 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb48 - fb4f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb50 - fb57 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb58 - fb5f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb60 - fb67 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb68 - fb6f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb70 - fb77 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb78 - fb7f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb80 - fb87 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb88 - fb8f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb90 - fb97 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb98 - fb9f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fba0 - fba7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fba8 - fbaf + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fbb0 - fbb7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fbb8 - fbbf + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fbc0 - fbc7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fbc8 - fbcf + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fbd0 - fbd7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fbd8 - fbdf + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fbe0 - fbe7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fbe8 - fbef + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fbf0 - fbf7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fbf8 - fbff + + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ff00 - ff07 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ff08 - ff0f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ff10 - ff17 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ff18 - ff1f + {0x00, 0x0000}, {0x6a, 0xFF41}, {0x6a, 0xFF42}, {0x6a, 0xFF43}, {0x6a, 0xFF44}, {0x6a, 0xFF45}, {0x6a, 0xFF46}, {0x6a, 0xFF47}, // ff20 - ff27 + {0x6a, 0xFF48}, {0x6a, 0xFF49}, {0x6a, 0xFF4A}, {0x6a, 0xFF4B}, {0x6a, 0xFF4C}, {0x6a, 0xFF4D}, {0x6a, 0xFF4E}, {0x6a, 0xFF4F}, // ff28 - ff2f + {0x6a, 0xFF50}, {0x6a, 0xFF51}, {0x6a, 0xFF52}, {0x6a, 0xFF53}, {0x6a, 0xFF54}, {0x6a, 0xFF55}, {0x6a, 0xFF56}, {0x6a, 0xFF57}, // ff30 - ff37 + {0x6a, 0xFF58}, {0x6a, 0xFF59}, {0x6a, 0xFF5A}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ff38 - ff3f + {0x00, 0x0000}, {0x15, 0xFF21}, {0x15, 0xFF22}, {0x15, 0xFF23}, {0x15, 0xFF24}, {0x15, 0xFF25}, {0x15, 0xFF26}, {0x15, 0xFF27}, // ff40 - ff47 + {0x15, 0xFF28}, {0x15, 0xFF29}, {0x15, 0xFF2A}, {0x15, 0xFF2B}, {0x15, 0xFF2C}, {0x15, 0xFF2D}, {0x15, 0xFF2E}, {0x15, 0xFF2F}, // ff48 - ff4f + {0x15, 0xFF30}, {0x15, 0xFF31}, {0x15, 0xFF32}, {0x15, 0xFF33}, {0x15, 0xFF34}, {0x15, 0xFF35}, {0x15, 0xFF36}, {0x15, 0xFF37}, // ff50 - ff57 + {0x15, 0xFF38}, {0x15, 0xFF39}, {0x15, 0xFF3A}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ff58 - ff5f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ff60 - ff67 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ff68 - ff6f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ff70 - ff77 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ff78 - ff7f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ff80 - ff87 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ff88 - ff8f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ff90 - ff97 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ff98 - ff9f + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ffa0 - ffa7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ffa8 - ffaf + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ffb0 - ffb7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ffb8 - ffbf + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ffc0 - ffc7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ffc8 - ffcf + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ffd0 - ffd7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ffd8 - ffdf + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ffe0 - ffe7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ffe8 - ffef + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fff0 - fff7 + {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fff8 - ffff + +}; + + +#define MaxCaseMappingExtras 3 + +static Mapping CaseMappingExtra[] = { + {0x80, 0, 0x0000, 0x0000, 0x0000}, // 0x0000 (0 0x0) + {0x60, 1, 0x0069, 0x0000, 0x0000}, // 0x0049 (1 0x1) + {0x8a, 0, 0x0000, 0x0000, 0x0000}, // 0x0049 (2 0x2) + {0x60, 1, 0x006A, 0x0000, 0x0000}, // 0x004a (3 0x3) + {0x8a, 0, 0x0000, 0x0000, 0x0000}, // 0x004a (4 0x4) + {0x15, 1, 0x039C, 0x0000, 0x0000}, // 0x00b5 (5 0x5) + {0x60, 1, 0x03BC, 0x0000, 0x0000}, // 0x00b5 (6 0x6) + {0x60, 1, 0x00EC, 0x0000, 0x0000}, // 0x00cc (7 0x7) + {0x8a, 0, 0x0000, 0x0000, 0x0000}, // 0x00cc (8 0x8) + {0x60, 1, 0x00ED, 0x0000, 0x0000}, // 0x00cd (9 0x9) + {0x8a, 0, 0x0000, 0x0000, 0x0000}, // 0x00cd (10 0xa) + {0x05, 2, 0x0053, 0x0053, 0x0000}, // 0x00df (11 0xb) + {0x10, 2, 0x0053, 0x0073, 0x0000}, // 0x00df (12 0xc) + {0x40, 2, 0x0073, 0x0073, 0x0000}, // 0x00df (13 0xd) + {0x60, 1, 0x0129, 0x0000, 0x0000}, // 0x0128 (14 0xe) + {0x8a, 0, 0x0000, 0x0000, 0x0000}, // 0x0128 (15 0xf) + {0x60, 1, 0x012F, 0x0000, 0x0000}, // 0x012e (16 0x10) + {0x8a, 0, 0x0000, 0x0000, 0x0000}, // 0x012e (17 0x11) + {0x15, 1, 0x0049, 0x0000, 0x0000}, // 0x0131 (18 0x12) + {0x60, 1, 0x0069, 0x0000, 0x0000}, // 0x0131 (19 0x13) + {0x15, 2, 0x02BC, 0x004E, 0x0000}, // 0x0149 (20 0x14) + {0x40, 2, 0x02BC, 0x006E, 0x0000}, // 0x0149 (21 0x15) + {0x15, 1, 0x0053, 0x0000, 0x0000}, // 0x017f (22 0x16) + {0x60, 1, 0x0073, 0x0000, 0x0000}, // 0x017f (23 0x17) + {0x6a, 1, 0x01C6, 0x0000, 0x0000}, // 0x01c4 (24 0x18) + {0x10, 1, 0x01C5, 0x0000, 0x0000}, // 0x01c4 (25 0x19) + {0x68, 1, 0x01C6, 0x0000, 0x0000}, // 0x01c5 (26 0x1a) + {0x04, 1, 0x01C4, 0x0000, 0x0000}, // 0x01c5 (27 0x1b) + {0x05, 1, 0x01C4, 0x0000, 0x0000}, // 0x01c6 (28 0x1c) + {0x10, 1, 0x01C5, 0x0000, 0x0000}, // 0x01c6 (29 0x1d) + {0x6a, 1, 0x01C9, 0x0000, 0x0000}, // 0x01c7 (30 0x1e) + {0x10, 1, 0x01C8, 0x0000, 0x0000}, // 0x01c7 (31 0x1f) + {0x68, 1, 0x01C9, 0x0000, 0x0000}, // 0x01c8 (32 0x20) + {0x04, 1, 0x01C7, 0x0000, 0x0000}, // 0x01c8 (33 0x21) + {0x05, 1, 0x01C7, 0x0000, 0x0000}, // 0x01c9 (34 0x22) + {0x10, 1, 0x01C8, 0x0000, 0x0000}, // 0x01c9 (35 0x23) + {0x6a, 1, 0x01CC, 0x0000, 0x0000}, // 0x01ca (36 0x24) + {0x10, 1, 0x01CB, 0x0000, 0x0000}, // 0x01ca (37 0x25) + {0x68, 1, 0x01CC, 0x0000, 0x0000}, // 0x01cb (38 0x26) + {0x04, 1, 0x01CA, 0x0000, 0x0000}, // 0x01cb (39 0x27) + {0x05, 1, 0x01CA, 0x0000, 0x0000}, // 0x01cc (40 0x28) + {0x10, 1, 0x01CB, 0x0000, 0x0000}, // 0x01cc (41 0x29) + {0x15, 2, 0x004A, 0x030C, 0x0000}, // 0x01f0 (42 0x2a) + {0x40, 2, 0x006A, 0x030C, 0x0000}, // 0x01f0 (43 0x2b) + {0x6a, 1, 0x01F3, 0x0000, 0x0000}, // 0x01f1 (44 0x2c) + {0x10, 1, 0x01F2, 0x0000, 0x0000}, // 0x01f1 (45 0x2d) + {0x68, 1, 0x01F3, 0x0000, 0x0000}, // 0x01f2 (46 0x2e) + {0x04, 1, 0x01F1, 0x0000, 0x0000}, // 0x01f2 (47 0x2f) + {0x05, 1, 0x01F1, 0x0000, 0x0000}, // 0x01f3 (48 0x30) + {0x10, 1, 0x01F2, 0x0000, 0x0000}, // 0x01f3 (49 0x31) + {0x14, 1, 0x0399, 0x0000, 0x0000}, // 0x0345 (50 0x32) + {0x60, 1, 0x03B9, 0x0000, 0x0000}, // 0x0345 (51 0x33) + {0x15, 3, 0x0399, 0x0308, 0x0301}, // 0x0390 (52 0x34) + {0x40, 3, 0x03B9, 0x0308, 0x0301}, // 0x0390 (53 0x35) + {0x60, 1, 0x03C3, 0x0000, 0x0000}, // 0x03a3 (54 0x36) + {0x8a, 0, 0x0000, 0x0000, 0x0000}, // 0x03a3 (55 0x37) + {0x15, 3, 0x03A5, 0x0308, 0x0301}, // 0x03b0 (56 0x38) + {0x40, 3, 0x03C5, 0x0308, 0x0301}, // 0x03b0 (57 0x39) + {0x15, 1, 0x03A3, 0x0000, 0x0000}, // 0x03c2 (58 0x3a) + {0x60, 1, 0x03C3, 0x0000, 0x0000}, // 0x03c2 (59 0x3b) + {0x15, 1, 0x0392, 0x0000, 0x0000}, // 0x03d0 (60 0x3c) + {0x60, 1, 0x03B2, 0x0000, 0x0000}, // 0x03d0 (61 0x3d) + {0x15, 1, 0x0398, 0x0000, 0x0000}, // 0x03d1 (62 0x3e) + {0x60, 1, 0x03B8, 0x0000, 0x0000}, // 0x03d1 (63 0x3f) + {0x15, 1, 0x03A6, 0x0000, 0x0000}, // 0x03d5 (64 0x40) + {0x60, 1, 0x03C6, 0x0000, 0x0000}, // 0x03d5 (65 0x41) + {0x15, 1, 0x03A0, 0x0000, 0x0000}, // 0x03d6 (66 0x42) + {0x60, 1, 0x03C0, 0x0000, 0x0000}, // 0x03d6 (67 0x43) + {0x15, 1, 0x039A, 0x0000, 0x0000}, // 0x03f0 (68 0x44) + {0x60, 1, 0x03BA, 0x0000, 0x0000}, // 0x03f0 (69 0x45) + {0x15, 1, 0x03A1, 0x0000, 0x0000}, // 0x03f1 (70 0x46) + {0x60, 1, 0x03C1, 0x0000, 0x0000}, // 0x03f1 (71 0x47) + {0x15, 1, 0x03A3, 0x0000, 0x0000}, // 0x03f2 (72 0x48) + {0x60, 1, 0x03C3, 0x0000, 0x0000}, // 0x03f2 (73 0x49) + {0x15, 1, 0x0395, 0x0000, 0x0000}, // 0x03f5 (74 0x4a) + {0x60, 1, 0x03B5, 0x0000, 0x0000}, // 0x03f5 (75 0x4b) + {0x05, 2, 0x0535, 0x0552, 0x0000}, // 0x0587 (76 0x4c) + {0x10, 2, 0x0535, 0x0582, 0x0000}, // 0x0587 (77 0x4d) + {0x40, 2, 0x0565, 0x0582, 0x0000}, // 0x0587 (78 0x4e) + {0x15, 2, 0x0048, 0x0331, 0x0000}, // 0x1e96 (79 0x4f) + {0x40, 2, 0x0068, 0x0331, 0x0000}, // 0x1e96 (80 0x50) + {0x15, 2, 0x0054, 0x0308, 0x0000}, // 0x1e97 (81 0x51) + {0x40, 2, 0x0074, 0x0308, 0x0000}, // 0x1e97 (82 0x52) + {0x15, 2, 0x0057, 0x030A, 0x0000}, // 0x1e98 (83 0x53) + {0x40, 2, 0x0077, 0x030A, 0x0000}, // 0x1e98 (84 0x54) + {0x15, 2, 0x0059, 0x030A, 0x0000}, // 0x1e99 (85 0x55) + {0x40, 2, 0x0079, 0x030A, 0x0000}, // 0x1e99 (86 0x56) + {0x15, 2, 0x0041, 0x02BE, 0x0000}, // 0x1e9a (87 0x57) + {0x40, 2, 0x0061, 0x02BE, 0x0000}, // 0x1e9a (88 0x58) + {0x15, 1, 0x1E60, 0x0000, 0x0000}, // 0x1e9b (89 0x59) + {0x60, 1, 0x1E61, 0x0000, 0x0000}, // 0x1e9b (90 0x5a) + {0x15, 2, 0x03A5, 0x0313, 0x0000}, // 0x1f50 (91 0x5b) + {0x40, 2, 0x03C5, 0x0313, 0x0000}, // 0x1f50 (92 0x5c) + {0x15, 3, 0x03A5, 0x0313, 0x0300}, // 0x1f52 (93 0x5d) + {0x40, 3, 0x03C5, 0x0313, 0x0300}, // 0x1f52 (94 0x5e) + {0x15, 3, 0x03A5, 0x0313, 0x0301}, // 0x1f54 (95 0x5f) + {0x40, 3, 0x03C5, 0x0313, 0x0301}, // 0x1f54 (96 0x60) + {0x15, 3, 0x03A5, 0x0313, 0x0342}, // 0x1f56 (97 0x61) + {0x40, 3, 0x03C5, 0x0313, 0x0342}, // 0x1f56 (98 0x62) + {0x05, 2, 0x1F08, 0x0399, 0x0000}, // 0x1f80 (99 0x63) + {0x10, 1, 0x1F88, 0x0000, 0x0000}, // 0x1f80 (100 0x64) + {0x40, 2, 0x1F00, 0x03B9, 0x0000}, // 0x1f80 (101 0x65) + {0x05, 2, 0x1F09, 0x0399, 0x0000}, // 0x1f81 (102 0x66) + {0x10, 1, 0x1F89, 0x0000, 0x0000}, // 0x1f81 (103 0x67) + {0x40, 2, 0x1F01, 0x03B9, 0x0000}, // 0x1f81 (104 0x68) + {0x05, 2, 0x1F0A, 0x0399, 0x0000}, // 0x1f82 (105 0x69) + {0x10, 1, 0x1F8A, 0x0000, 0x0000}, // 0x1f82 (106 0x6a) + {0x40, 2, 0x1F02, 0x03B9, 0x0000}, // 0x1f82 (107 0x6b) + {0x05, 2, 0x1F0B, 0x0399, 0x0000}, // 0x1f83 (108 0x6c) + {0x10, 1, 0x1F8B, 0x0000, 0x0000}, // 0x1f83 (109 0x6d) + {0x40, 2, 0x1F03, 0x03B9, 0x0000}, // 0x1f83 (110 0x6e) + {0x05, 2, 0x1F0C, 0x0399, 0x0000}, // 0x1f84 (111 0x6f) + {0x10, 1, 0x1F8C, 0x0000, 0x0000}, // 0x1f84 (112 0x70) + {0x40, 2, 0x1F04, 0x03B9, 0x0000}, // 0x1f84 (113 0x71) + {0x05, 2, 0x1F0D, 0x0399, 0x0000}, // 0x1f85 (114 0x72) + {0x10, 1, 0x1F8D, 0x0000, 0x0000}, // 0x1f85 (115 0x73) + {0x40, 2, 0x1F05, 0x03B9, 0x0000}, // 0x1f85 (116 0x74) + {0x05, 2, 0x1F0E, 0x0399, 0x0000}, // 0x1f86 (117 0x75) + {0x10, 1, 0x1F8E, 0x0000, 0x0000}, // 0x1f86 (118 0x76) + {0x40, 2, 0x1F06, 0x03B9, 0x0000}, // 0x1f86 (119 0x77) + {0x05, 2, 0x1F0F, 0x0399, 0x0000}, // 0x1f87 (120 0x78) + {0x10, 1, 0x1F8F, 0x0000, 0x0000}, // 0x1f87 (121 0x79) + {0x40, 2, 0x1F07, 0x03B9, 0x0000}, // 0x1f87 (122 0x7a) + {0x28, 1, 0x1F80, 0x0000, 0x0000}, // 0x1f88 (123 0x7b) + {0x04, 2, 0x1F08, 0x0399, 0x0000}, // 0x1f88 (124 0x7c) + {0x40, 2, 0x1F00, 0x03B9, 0x0000}, // 0x1f88 (125 0x7d) + {0x28, 1, 0x1F81, 0x0000, 0x0000}, // 0x1f89 (126 0x7e) + {0x04, 2, 0x1F09, 0x0399, 0x0000}, // 0x1f89 (127 0x7f) + {0x40, 2, 0x1F01, 0x03B9, 0x0000}, // 0x1f89 (128 0x80) + {0x28, 1, 0x1F82, 0x0000, 0x0000}, // 0x1f8a (129 0x81) + {0x04, 2, 0x1F0A, 0x0399, 0x0000}, // 0x1f8a (130 0x82) + {0x40, 2, 0x1F02, 0x03B9, 0x0000}, // 0x1f8a (131 0x83) + {0x28, 1, 0x1F83, 0x0000, 0x0000}, // 0x1f8b (132 0x84) + {0x04, 2, 0x1F0B, 0x0399, 0x0000}, // 0x1f8b (133 0x85) + {0x40, 2, 0x1F03, 0x03B9, 0x0000}, // 0x1f8b (134 0x86) + {0x28, 1, 0x1F84, 0x0000, 0x0000}, // 0x1f8c (135 0x87) + {0x04, 2, 0x1F0C, 0x0399, 0x0000}, // 0x1f8c (136 0x88) + {0x40, 2, 0x1F04, 0x03B9, 0x0000}, // 0x1f8c (137 0x89) + {0x28, 1, 0x1F85, 0x0000, 0x0000}, // 0x1f8d (138 0x8a) + {0x04, 2, 0x1F0D, 0x0399, 0x0000}, // 0x1f8d (139 0x8b) + {0x40, 2, 0x1F05, 0x03B9, 0x0000}, // 0x1f8d (140 0x8c) + {0x28, 1, 0x1F86, 0x0000, 0x0000}, // 0x1f8e (141 0x8d) + {0x04, 2, 0x1F0E, 0x0399, 0x0000}, // 0x1f8e (142 0x8e) + {0x40, 2, 0x1F06, 0x03B9, 0x0000}, // 0x1f8e (143 0x8f) + {0x28, 1, 0x1F87, 0x0000, 0x0000}, // 0x1f8f (144 0x90) + {0x04, 2, 0x1F0F, 0x0399, 0x0000}, // 0x1f8f (145 0x91) + {0x40, 2, 0x1F07, 0x03B9, 0x0000}, // 0x1f8f (146 0x92) + {0x05, 2, 0x1F28, 0x0399, 0x0000}, // 0x1f90 (147 0x93) + {0x10, 1, 0x1F98, 0x0000, 0x0000}, // 0x1f90 (148 0x94) + {0x40, 2, 0x1F20, 0x03B9, 0x0000}, // 0x1f90 (149 0x95) + {0x05, 2, 0x1F29, 0x0399, 0x0000}, // 0x1f91 (150 0x96) + {0x10, 1, 0x1F99, 0x0000, 0x0000}, // 0x1f91 (151 0x97) + {0x40, 2, 0x1F21, 0x03B9, 0x0000}, // 0x1f91 (152 0x98) + {0x05, 2, 0x1F2A, 0x0399, 0x0000}, // 0x1f92 (153 0x99) + {0x10, 1, 0x1F9A, 0x0000, 0x0000}, // 0x1f92 (154 0x9a) + {0x40, 2, 0x1F22, 0x03B9, 0x0000}, // 0x1f92 (155 0x9b) + {0x05, 2, 0x1F2B, 0x0399, 0x0000}, // 0x1f93 (156 0x9c) + {0x10, 1, 0x1F9B, 0x0000, 0x0000}, // 0x1f93 (157 0x9d) + {0x40, 2, 0x1F23, 0x03B9, 0x0000}, // 0x1f93 (158 0x9e) + {0x05, 2, 0x1F2C, 0x0399, 0x0000}, // 0x1f94 (159 0x9f) + {0x10, 1, 0x1F9C, 0x0000, 0x0000}, // 0x1f94 (160 0xa0) + {0x40, 2, 0x1F24, 0x03B9, 0x0000}, // 0x1f94 (161 0xa1) + {0x05, 2, 0x1F2D, 0x0399, 0x0000}, // 0x1f95 (162 0xa2) + {0x10, 1, 0x1F9D, 0x0000, 0x0000}, // 0x1f95 (163 0xa3) + {0x40, 2, 0x1F25, 0x03B9, 0x0000}, // 0x1f95 (164 0xa4) + {0x05, 2, 0x1F2E, 0x0399, 0x0000}, // 0x1f96 (165 0xa5) + {0x10, 1, 0x1F9E, 0x0000, 0x0000}, // 0x1f96 (166 0xa6) + {0x40, 2, 0x1F26, 0x03B9, 0x0000}, // 0x1f96 (167 0xa7) + {0x05, 2, 0x1F2F, 0x0399, 0x0000}, // 0x1f97 (168 0xa8) + {0x10, 1, 0x1F9F, 0x0000, 0x0000}, // 0x1f97 (169 0xa9) + {0x40, 2, 0x1F27, 0x03B9, 0x0000}, // 0x1f97 (170 0xaa) + {0x28, 1, 0x1F90, 0x0000, 0x0000}, // 0x1f98 (171 0xab) + {0x04, 2, 0x1F28, 0x0399, 0x0000}, // 0x1f98 (172 0xac) + {0x40, 2, 0x1F20, 0x03B9, 0x0000}, // 0x1f98 (173 0xad) + {0x28, 1, 0x1F91, 0x0000, 0x0000}, // 0x1f99 (174 0xae) + {0x04, 2, 0x1F29, 0x0399, 0x0000}, // 0x1f99 (175 0xaf) + {0x40, 2, 0x1F21, 0x03B9, 0x0000}, // 0x1f99 (176 0xb0) + {0x28, 1, 0x1F92, 0x0000, 0x0000}, // 0x1f9a (177 0xb1) + {0x04, 2, 0x1F2A, 0x0399, 0x0000}, // 0x1f9a (178 0xb2) + {0x40, 2, 0x1F22, 0x03B9, 0x0000}, // 0x1f9a (179 0xb3) + {0x28, 1, 0x1F93, 0x0000, 0x0000}, // 0x1f9b (180 0xb4) + {0x04, 2, 0x1F2B, 0x0399, 0x0000}, // 0x1f9b (181 0xb5) + {0x40, 2, 0x1F23, 0x03B9, 0x0000}, // 0x1f9b (182 0xb6) + {0x28, 1, 0x1F94, 0x0000, 0x0000}, // 0x1f9c (183 0xb7) + {0x04, 2, 0x1F2C, 0x0399, 0x0000}, // 0x1f9c (184 0xb8) + {0x40, 2, 0x1F24, 0x03B9, 0x0000}, // 0x1f9c (185 0xb9) + {0x28, 1, 0x1F95, 0x0000, 0x0000}, // 0x1f9d (186 0xba) + {0x04, 2, 0x1F2D, 0x0399, 0x0000}, // 0x1f9d (187 0xbb) + {0x40, 2, 0x1F25, 0x03B9, 0x0000}, // 0x1f9d (188 0xbc) + {0x28, 1, 0x1F96, 0x0000, 0x0000}, // 0x1f9e (189 0xbd) + {0x04, 2, 0x1F2E, 0x0399, 0x0000}, // 0x1f9e (190 0xbe) + {0x40, 2, 0x1F26, 0x03B9, 0x0000}, // 0x1f9e (191 0xbf) + {0x28, 1, 0x1F97, 0x0000, 0x0000}, // 0x1f9f (192 0xc0) + {0x04, 2, 0x1F2F, 0x0399, 0x0000}, // 0x1f9f (193 0xc1) + {0x40, 2, 0x1F27, 0x03B9, 0x0000}, // 0x1f9f (194 0xc2) + {0x05, 2, 0x1F68, 0x0399, 0x0000}, // 0x1fa0 (195 0xc3) + {0x10, 1, 0x1FA8, 0x0000, 0x0000}, // 0x1fa0 (196 0xc4) + {0x40, 2, 0x1F60, 0x03B9, 0x0000}, // 0x1fa0 (197 0xc5) + {0x05, 2, 0x1F69, 0x0399, 0x0000}, // 0x1fa1 (198 0xc6) + {0x10, 1, 0x1FA9, 0x0000, 0x0000}, // 0x1fa1 (199 0xc7) + {0x40, 2, 0x1F61, 0x03B9, 0x0000}, // 0x1fa1 (200 0xc8) + {0x05, 2, 0x1F6A, 0x0399, 0x0000}, // 0x1fa2 (201 0xc9) + {0x10, 1, 0x1FAA, 0x0000, 0x0000}, // 0x1fa2 (202 0xca) + {0x40, 2, 0x1F62, 0x03B9, 0x0000}, // 0x1fa2 (203 0xcb) + {0x05, 2, 0x1F6B, 0x0399, 0x0000}, // 0x1fa3 (204 0xcc) + {0x10, 1, 0x1FAB, 0x0000, 0x0000}, // 0x1fa3 (205 0xcd) + {0x40, 2, 0x1F63, 0x03B9, 0x0000}, // 0x1fa3 (206 0xce) + {0x05, 2, 0x1F6C, 0x0399, 0x0000}, // 0x1fa4 (207 0xcf) + {0x10, 1, 0x1FAC, 0x0000, 0x0000}, // 0x1fa4 (208 0xd0) + {0x40, 2, 0x1F64, 0x03B9, 0x0000}, // 0x1fa4 (209 0xd1) + {0x05, 2, 0x1F6D, 0x0399, 0x0000}, // 0x1fa5 (210 0xd2) + {0x10, 1, 0x1FAD, 0x0000, 0x0000}, // 0x1fa5 (211 0xd3) + {0x40, 2, 0x1F65, 0x03B9, 0x0000}, // 0x1fa5 (212 0xd4) + {0x05, 2, 0x1F6E, 0x0399, 0x0000}, // 0x1fa6 (213 0xd5) + {0x10, 1, 0x1FAE, 0x0000, 0x0000}, // 0x1fa6 (214 0xd6) + {0x40, 2, 0x1F66, 0x03B9, 0x0000}, // 0x1fa6 (215 0xd7) + {0x05, 2, 0x1F6F, 0x0399, 0x0000}, // 0x1fa7 (216 0xd8) + {0x10, 1, 0x1FAF, 0x0000, 0x0000}, // 0x1fa7 (217 0xd9) + {0x40, 2, 0x1F67, 0x03B9, 0x0000}, // 0x1fa7 (218 0xda) + {0x28, 1, 0x1FA0, 0x0000, 0x0000}, // 0x1fa8 (219 0xdb) + {0x04, 2, 0x1F68, 0x0399, 0x0000}, // 0x1fa8 (220 0xdc) + {0x40, 2, 0x1F60, 0x03B9, 0x0000}, // 0x1fa8 (221 0xdd) + {0x28, 1, 0x1FA1, 0x0000, 0x0000}, // 0x1fa9 (222 0xde) + {0x04, 2, 0x1F69, 0x0399, 0x0000}, // 0x1fa9 (223 0xdf) + {0x40, 2, 0x1F61, 0x03B9, 0x0000}, // 0x1fa9 (224 0xe0) + {0x28, 1, 0x1FA2, 0x0000, 0x0000}, // 0x1faa (225 0xe1) + {0x04, 2, 0x1F6A, 0x0399, 0x0000}, // 0x1faa (226 0xe2) + {0x40, 2, 0x1F62, 0x03B9, 0x0000}, // 0x1faa (227 0xe3) + {0x28, 1, 0x1FA3, 0x0000, 0x0000}, // 0x1fab (228 0xe4) + {0x04, 2, 0x1F6B, 0x0399, 0x0000}, // 0x1fab (229 0xe5) + {0x40, 2, 0x1F63, 0x03B9, 0x0000}, // 0x1fab (230 0xe6) + {0x28, 1, 0x1FA4, 0x0000, 0x0000}, // 0x1fac (231 0xe7) + {0x04, 2, 0x1F6C, 0x0399, 0x0000}, // 0x1fac (232 0xe8) + {0x40, 2, 0x1F64, 0x03B9, 0x0000}, // 0x1fac (233 0xe9) + {0x28, 1, 0x1FA5, 0x0000, 0x0000}, // 0x1fad (234 0xea) + {0x04, 2, 0x1F6D, 0x0399, 0x0000}, // 0x1fad (235 0xeb) + {0x40, 2, 0x1F65, 0x03B9, 0x0000}, // 0x1fad (236 0xec) + {0x28, 1, 0x1FA6, 0x0000, 0x0000}, // 0x1fae (237 0xed) + {0x04, 2, 0x1F6E, 0x0399, 0x0000}, // 0x1fae (238 0xee) + {0x40, 2, 0x1F66, 0x03B9, 0x0000}, // 0x1fae (239 0xef) + {0x28, 1, 0x1FA7, 0x0000, 0x0000}, // 0x1faf (240 0xf0) + {0x04, 2, 0x1F6F, 0x0399, 0x0000}, // 0x1faf (241 0xf1) + {0x40, 2, 0x1F67, 0x03B9, 0x0000}, // 0x1faf (242 0xf2) + {0x05, 2, 0x1FBA, 0x0399, 0x0000}, // 0x1fb2 (243 0xf3) + {0x10, 2, 0x1FBA, 0x0345, 0x0000}, // 0x1fb2 (244 0xf4) + {0x40, 2, 0x1F70, 0x03B9, 0x0000}, // 0x1fb2 (245 0xf5) + {0x05, 2, 0x0391, 0x0399, 0x0000}, // 0x1fb3 (246 0xf6) + {0x10, 1, 0x1FBC, 0x0000, 0x0000}, // 0x1fb3 (247 0xf7) + {0x40, 2, 0x03B1, 0x03B9, 0x0000}, // 0x1fb3 (248 0xf8) + {0x05, 2, 0x0386, 0x0399, 0x0000}, // 0x1fb4 (249 0xf9) + {0x10, 2, 0x0386, 0x0345, 0x0000}, // 0x1fb4 (250 0xfa) + {0x40, 2, 0x03AC, 0x03B9, 0x0000}, // 0x1fb4 (251 0xfb) + {0x15, 2, 0x0391, 0x0342, 0x0000}, // 0x1fb6 (252 0xfc) + {0x40, 2, 0x03B1, 0x0342, 0x0000}, // 0x1fb6 (253 0xfd) + {0x05, 3, 0x0391, 0x0342, 0x0399}, // 0x1fb7 (254 0xfe) + {0x10, 3, 0x0391, 0x0342, 0x0345}, // 0x1fb7 (255 0xff) + {0x40, 3, 0x03B1, 0x0342, 0x03B9}, // 0x1fb7 (256 0x100) + {0x28, 1, 0x1FB3, 0x0000, 0x0000}, // 0x1fbc (257 0x101) + {0x04, 2, 0x0391, 0x0399, 0x0000}, // 0x1fbc (258 0x102) + {0x40, 2, 0x03B1, 0x03B9, 0x0000}, // 0x1fbc (259 0x103) + {0x15, 1, 0x0399, 0x0000, 0x0000}, // 0x1fbe (260 0x104) + {0x60, 1, 0x03B9, 0x0000, 0x0000}, // 0x1fbe (261 0x105) + {0x05, 2, 0x1FCA, 0x0399, 0x0000}, // 0x1fc2 (262 0x106) + {0x10, 2, 0x1FCA, 0x0345, 0x0000}, // 0x1fc2 (263 0x107) + {0x40, 2, 0x1F74, 0x03B9, 0x0000}, // 0x1fc2 (264 0x108) + {0x05, 2, 0x0397, 0x0399, 0x0000}, // 0x1fc3 (265 0x109) + {0x10, 1, 0x1FCC, 0x0000, 0x0000}, // 0x1fc3 (266 0x10a) + {0x40, 2, 0x03B7, 0x03B9, 0x0000}, // 0x1fc3 (267 0x10b) + {0x05, 2, 0x0389, 0x0399, 0x0000}, // 0x1fc4 (268 0x10c) + {0x10, 2, 0x0389, 0x0345, 0x0000}, // 0x1fc4 (269 0x10d) + {0x40, 2, 0x03AE, 0x03B9, 0x0000}, // 0x1fc4 (270 0x10e) + {0x15, 2, 0x0397, 0x0342, 0x0000}, // 0x1fc6 (271 0x10f) + {0x40, 2, 0x03B7, 0x0342, 0x0000}, // 0x1fc6 (272 0x110) + {0x05, 3, 0x0397, 0x0342, 0x0399}, // 0x1fc7 (273 0x111) + {0x10, 3, 0x0397, 0x0342, 0x0345}, // 0x1fc7 (274 0x112) + {0x40, 3, 0x03B7, 0x0342, 0x03B9}, // 0x1fc7 (275 0x113) + {0x28, 1, 0x1FC3, 0x0000, 0x0000}, // 0x1fcc (276 0x114) + {0x04, 2, 0x0397, 0x0399, 0x0000}, // 0x1fcc (277 0x115) + {0x40, 2, 0x03B7, 0x03B9, 0x0000}, // 0x1fcc (278 0x116) + {0x15, 3, 0x0399, 0x0308, 0x0300}, // 0x1fd2 (279 0x117) + {0x40, 3, 0x03B9, 0x0308, 0x0300}, // 0x1fd2 (280 0x118) + {0x15, 3, 0x0399, 0x0308, 0x0301}, // 0x1fd3 (281 0x119) + {0x40, 3, 0x03B9, 0x0308, 0x0301}, // 0x1fd3 (282 0x11a) + {0x15, 2, 0x0399, 0x0342, 0x0000}, // 0x1fd6 (283 0x11b) + {0x40, 2, 0x03B9, 0x0342, 0x0000}, // 0x1fd6 (284 0x11c) + {0x15, 3, 0x0399, 0x0308, 0x0342}, // 0x1fd7 (285 0x11d) + {0x40, 3, 0x03B9, 0x0308, 0x0342}, // 0x1fd7 (286 0x11e) + {0x15, 3, 0x03A5, 0x0308, 0x0300}, // 0x1fe2 (287 0x11f) + {0x40, 3, 0x03C5, 0x0308, 0x0300}, // 0x1fe2 (288 0x120) + {0x15, 3, 0x03A5, 0x0308, 0x0301}, // 0x1fe3 (289 0x121) + {0x40, 3, 0x03C5, 0x0308, 0x0301}, // 0x1fe3 (290 0x122) + {0x15, 2, 0x03A1, 0x0313, 0x0000}, // 0x1fe4 (291 0x123) + {0x40, 2, 0x03C1, 0x0313, 0x0000}, // 0x1fe4 (292 0x124) + {0x15, 2, 0x03A5, 0x0342, 0x0000}, // 0x1fe6 (293 0x125) + {0x40, 2, 0x03C5, 0x0342, 0x0000}, // 0x1fe6 (294 0x126) + {0x15, 3, 0x03A5, 0x0308, 0x0342}, // 0x1fe7 (295 0x127) + {0x40, 3, 0x03C5, 0x0308, 0x0342}, // 0x1fe7 (296 0x128) + {0x05, 2, 0x1FFA, 0x0399, 0x0000}, // 0x1ff2 (297 0x129) + {0x10, 2, 0x1FFA, 0x0345, 0x0000}, // 0x1ff2 (298 0x12a) + {0x40, 2, 0x1F7C, 0x03B9, 0x0000}, // 0x1ff2 (299 0x12b) + {0x05, 2, 0x03A9, 0x0399, 0x0000}, // 0x1ff3 (300 0x12c) + {0x10, 1, 0x1FFC, 0x0000, 0x0000}, // 0x1ff3 (301 0x12d) + {0x40, 2, 0x03C9, 0x03B9, 0x0000}, // 0x1ff3 (302 0x12e) + {0x05, 2, 0x038F, 0x0399, 0x0000}, // 0x1ff4 (303 0x12f) + {0x10, 2, 0x038F, 0x0345, 0x0000}, // 0x1ff4 (304 0x130) + {0x40, 2, 0x03CE, 0x03B9, 0x0000}, // 0x1ff4 (305 0x131) + {0x15, 2, 0x03A9, 0x0342, 0x0000}, // 0x1ff6 (306 0x132) + {0x40, 2, 0x03C9, 0x0342, 0x0000}, // 0x1ff6 (307 0x133) + {0x05, 3, 0x03A9, 0x0342, 0x0399}, // 0x1ff7 (308 0x134) + {0x10, 3, 0x03A9, 0x0342, 0x0345}, // 0x1ff7 (309 0x135) + {0x40, 3, 0x03C9, 0x0342, 0x03B9}, // 0x1ff7 (310 0x136) + {0x28, 1, 0x1FF3, 0x0000, 0x0000}, // 0x1ffc (311 0x137) + {0x04, 2, 0x03A9, 0x0399, 0x0000}, // 0x1ffc (312 0x138) + {0x40, 2, 0x03C9, 0x03B9, 0x0000}, // 0x1ffc (313 0x139) + {0x05, 2, 0x0046, 0x0046, 0x0000}, // 0xfb00 (314 0x13a) + {0x10, 2, 0x0046, 0x0066, 0x0000}, // 0xfb00 (315 0x13b) + {0x40, 2, 0x0066, 0x0066, 0x0000}, // 0xfb00 (316 0x13c) + {0x05, 2, 0x0046, 0x0049, 0x0000}, // 0xfb01 (317 0x13d) + {0x10, 2, 0x0046, 0x0069, 0x0000}, // 0xfb01 (318 0x13e) + {0x40, 2, 0x0066, 0x0069, 0x0000}, // 0xfb01 (319 0x13f) + {0x05, 2, 0x0046, 0x004C, 0x0000}, // 0xfb02 (320 0x140) + {0x10, 2, 0x0046, 0x006C, 0x0000}, // 0xfb02 (321 0x141) + {0x40, 2, 0x0066, 0x006C, 0x0000}, // 0xfb02 (322 0x142) + {0x05, 3, 0x0046, 0x0046, 0x0049}, // 0xfb03 (323 0x143) + {0x10, 3, 0x0046, 0x0066, 0x0069}, // 0xfb03 (324 0x144) + {0x40, 3, 0x0066, 0x0066, 0x0069}, // 0xfb03 (325 0x145) + {0x05, 3, 0x0046, 0x0046, 0x004C}, // 0xfb04 (326 0x146) + {0x10, 3, 0x0046, 0x0066, 0x006C}, // 0xfb04 (327 0x147) + {0x40, 3, 0x0066, 0x0066, 0x006C}, // 0xfb04 (328 0x148) + {0x05, 2, 0x0053, 0x0054, 0x0000}, // 0xfb05 (329 0x149) + {0x10, 2, 0x0053, 0x0074, 0x0000}, // 0xfb05 (330 0x14a) + {0x40, 2, 0x0073, 0x0074, 0x0000}, // 0xfb05 (331 0x14b) + {0x05, 2, 0x0053, 0x0054, 0x0000}, // 0xfb06 (332 0x14c) + {0x10, 2, 0x0053, 0x0074, 0x0000}, // 0xfb06 (333 0x14d) + {0x40, 2, 0x0073, 0x0074, 0x0000}, // 0xfb06 (334 0x14e) + {0x05, 2, 0x0544, 0x0546, 0x0000}, // 0xfb13 (335 0x14f) + {0x10, 2, 0x0544, 0x0576, 0x0000}, // 0xfb13 (336 0x150) + {0x40, 2, 0x0574, 0x0576, 0x0000}, // 0xfb13 (337 0x151) + {0x05, 2, 0x0544, 0x0535, 0x0000}, // 0xfb14 (338 0x152) + {0x10, 2, 0x0544, 0x0565, 0x0000}, // 0xfb14 (339 0x153) + {0x40, 2, 0x0574, 0x0565, 0x0000}, // 0xfb14 (340 0x154) + {0x05, 2, 0x0544, 0x053B, 0x0000}, // 0xfb15 (341 0x155) + {0x10, 2, 0x0544, 0x056B, 0x0000}, // 0xfb15 (342 0x156) + {0x40, 2, 0x0574, 0x056B, 0x0000}, // 0xfb15 (343 0x157) + {0x05, 2, 0x054E, 0x0546, 0x0000}, // 0xfb16 (344 0x158) + {0x10, 2, 0x054E, 0x0576, 0x0000}, // 0xfb16 (345 0x159) + {0x40, 2, 0x057E, 0x0576, 0x0000}, // 0xfb16 (346 0x15a) + {0x05, 2, 0x0544, 0x053D, 0x0000}, // 0xfb17 (347 0x15b) + {0x10, 2, 0x0544, 0x056D, 0x0000}, // 0xfb17 (348 0x15c) + {0x40, 2, 0x0574, 0x056D, 0x0000}, // 0xfb17 (349 0x15d) +}; + +/* Following code need special handling + 0x0069, 0x00CC, 0x00CD, 0x0128, 0x012E, 0x0049, 0x004A, 0x0307, 0x03A3, +*/ + +} } } } + +#endif + diff --git a/i18nutil/source/utility/makefile.mk b/i18nutil/source/utility/makefile.mk new file mode 100644 index 000000000000..7b240896cc49 --- /dev/null +++ b/i18nutil/source/utility/makefile.mk @@ -0,0 +1,87 @@ +#************************************************************************* +#* +#* $RCSfile: makefile.mk,v $ +#* +#* $Revision: 1.2 $ +#* +#* last change: $Author: vg $ $Date: 2003-04-24 12:26:02 $ +#* +#* The Contents of this file are made available subject to the terms of +#* either of the following licenses +#* +#* - Sun Industry Standards Source License Version 1.1 +#* +#* Sun Microsystems Inc., October, 2000 +#* +#* Sun Industry Standards Source License Version 1.1 +#* ================================================= +#* The contents of this file are subject to the Sun Industry Standards +#* Source License Version 1.1 (the "License"); You may not use this file +#* except in compliance with the License. You may obtain a copy of the +#* License at http://www.openoffice.org/license.html. +#* +#* Software provided under this License is provided on an "AS IS" basis, +#* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, +#* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, +#* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. +#* See the License for the specific provisions governing your rights and +#* obligations concerning the Software. +#* +#* The Initial Developer of the Original Code is: Sun Microsystems, Inc. +#* +#* Copyright: 2000 by Sun Microsystems, Inc. +#* +#* All Rights Reserved. +#* +#* Contributor(s): _______________________________________ +#* +#* +#************************************************************************ +PRJ=..$/.. + +PRJNAME=i18nutil +TARGET=i18nutil +LIBTARGET=NO + +# --- Settings ----------------------------------------------------- + +.INCLUDE : settings.mk + +# --- Files -------------------------------------------------------- + +EXCEPTIONSFILES= \ + $(SLO)$/casefolding.obj + +SLOFILES= \ + $(EXCEPTIONSFILES) \ + $(SLO)$/unicode.obj \ + $(SLO)$/widthfolding.obj \ + $(SLO)$/oneToOneMapping.obj + +# Unicode utilities +SHL1TARGET= $(TARGET)$(COMID) +SHL1IMPLIB= i$(TARGET) + +DEF1DEPN= $(MISC)$/$(SHL1TARGET).flt +SHL1DEF= $(MISC)$/$(SHL1TARGET).def +DEF1NAME= $(SHL1TARGET) +DEFLIB1NAME= $(SHL1TARGET) + +SHL1OBJS= $(SLOFILES) + +LIB1TARGET= $(SLB)$/$(SHL1TARGET).lib +LIB1OBJFILES=$(SHL1OBJS) + +SHL1STDLIBS= \ + $(CPPULIB) \ + $(SALLIB) + +# --- Targets ------------------------------------------------------ +.INCLUDE : target.mk + +$(MISC)$/$(SHL1TARGET).flt: makefile.mk + @echo ------------------------------ + @echo Making: $@ + @echo CLEAR_THE_FILE > $@ + @echo __CT >> $@ + diff --git a/i18nutil/source/utility/oneToOneMapping.cxx b/i18nutil/source/utility/oneToOneMapping.cxx new file mode 100644 index 000000000000..d3629faece8e --- /dev/null +++ b/i18nutil/source/utility/oneToOneMapping.cxx @@ -0,0 +1,138 @@ +/************************************************************************* + * + * $RCSfile: oneToOneMapping.cxx,v $ + * + * $Revision: 1.2 $ + * + * last change: $Author: vg $ $Date: 2003-04-24 12:26:03 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#include <i18nutil/oneToOneMapping.hxx> + +namespace com { namespace sun { namespace star { namespace i18n { + +oneToOneMapping::oneToOneMapping(OneToOneMappingTable_t *_table, const size_t _bytes) +{ + table = _table; + max_size = _bytes / sizeof(std::pair< sal_Unicode, sal_Unicode >); + hasIndex = sal_False; +} + +oneToOneMapping::~oneToOneMapping() +{ + if( hasIndex ) + for (int i = 0; i < 256; i++) + if (index[i]) + delete index[i]; +} + +sal_Unicode oneToOneMapping::find(const sal_Unicode key) const +{ + if (hasIndex) { + // index search + int high, low; + high = (key >> 8) & 0xFF; + low = key & 0xFF; + if (index[high] != (int*)0 && index[high][low] != 0) { + return table[index[high][low] - 1].second; + } + else { + return sal_Unicode(key); + } + } else { + int bottom = 0; + int top = max_size - 1; + int current; + + for (;;) { + current = (top + bottom) / 2; + if (key < table[current].first) { + top = current - 1; + } + else if (key > table[current].first) { + bottom = current + 1; + } else { + return table[current].second; + } + if (bottom > top) { + return sal_Unicode(key); + } + } + } +} + +void oneToOneMapping::makeIndex() +{ + if (!hasIndex) { + int i, j, high, low, current = -1; + hasIndex = sal_True; + for (i = 0; i < 256; i++) + index[i] = (int*)0; + + for (size_t k = 0; k < max_size; k++) { + high = (table[k].first >> 8) & 0xFF; + low = (table[k].first) & 0xFF; + if (high != current) { + current = high; + index[high] = new int[256]; + for (j = 0; j < 256; j++) + index[high][j] = 0; + } + index[high][low] = k + 1; + } + } +} + +} } } } diff --git a/i18nutil/source/utility/unicode.cxx b/i18nutil/source/utility/unicode.cxx new file mode 100644 index 000000000000..9206c626382b --- /dev/null +++ b/i18nutil/source/utility/unicode.cxx @@ -0,0 +1,342 @@ +/************************************************************************* + * + * $RCSfile: unicode.cxx,v $ + * + * $Revision: 1.2 $ + * + * last change: $Author: vg $ $Date: 2003-04-24 12:26:03 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#include <com/sun/star/i18n/UnicodeType.hpp> +#include <com/sun/star/i18n/KCharacterType.hpp> +#include <i18nutil/unicode.hxx> +#include "unicode_data.h" + +using namespace ::com::sun::star::i18n; + +static ScriptTypeList defaultTypeList[] = { + { UnicodeScript_kBasicLatin, UnicodeScript_kBasicLatin }, // 0, + { UnicodeScript_kLatin1Supplement, UnicodeScript_kLatin1Supplement }, // 1, + { UnicodeScript_kLatinExtendedA, UnicodeScript_kLatinExtendedA }, // 2, + { UnicodeScript_kLatinExtendedB, UnicodeScript_kLatinExtendedB }, // 3, + { UnicodeScript_kIPAExtension, UnicodeScript_kIPAExtension }, // 4, + { UnicodeScript_kSpacingModifier, UnicodeScript_kSpacingModifier }, // 5, + { UnicodeScript_kCombiningDiacritical, UnicodeScript_kCombiningDiacritical }, // 6, + { UnicodeScript_kGreek, UnicodeScript_kGreek }, // 7, + { UnicodeScript_kCyrillic, UnicodeScript_kCyrillic }, // 8, + { UnicodeScript_kArmenian, UnicodeScript_kArmenian }, // 9, + { UnicodeScript_kHebrew, UnicodeScript_kHebrew }, // 10, + { UnicodeScript_kArabic, UnicodeScript_kArabic }, // 11, + { UnicodeScript_kSyriac, UnicodeScript_kSyriac }, // 12, + { UnicodeScript_kThaana, UnicodeScript_kThaana }, // 13, + { UnicodeScript_kDevanagari, UnicodeScript_kDevanagari }, // 14, + { UnicodeScript_kBengali, UnicodeScript_kBengali }, // 15, + { UnicodeScript_kGurmukhi, UnicodeScript_kGurmukhi }, // 16, + { UnicodeScript_kGujarati, UnicodeScript_kGujarati }, // 17, + { UnicodeScript_kOriya, UnicodeScript_kOriya }, // 18, + { UnicodeScript_kTamil, UnicodeScript_kTamil }, // 19, + { UnicodeScript_kTelugu, UnicodeScript_kTelugu }, // 20, + { UnicodeScript_kKannada, UnicodeScript_kKannada }, // 21, + { UnicodeScript_kMalayalam, UnicodeScript_kMalayalam }, // 22, + { UnicodeScript_kSinhala, UnicodeScript_kSinhala }, // 23, + { UnicodeScript_kThai, UnicodeScript_kThai }, // 24, + { UnicodeScript_kLao, UnicodeScript_kLao }, // 25, + { UnicodeScript_kTibetan, UnicodeScript_kTibetan }, // 26, + { UnicodeScript_kMyanmar, UnicodeScript_kMyanmar }, // 27, + { UnicodeScript_kGeorgian, UnicodeScript_kGeorgian }, // 28, + { UnicodeScript_kHangulJamo, UnicodeScript_kHangulJamo }, // 29, + { UnicodeScript_kEthiopic, UnicodeScript_kEthiopic }, // 30, + { UnicodeScript_kCherokee, UnicodeScript_kCherokee }, // 31, + { UnicodeScript_kUnifiedCanadianAboriginalSyllabics, UnicodeScript_kUnifiedCanadianAboriginalSyllabics }, // 32, + { UnicodeScript_kOgham, UnicodeScript_kOgham }, // 33, + { UnicodeScript_kRunic, UnicodeScript_kRunic }, // 34, + { UnicodeScript_kKhmer, UnicodeScript_kKhmer }, // 35, + { UnicodeScript_kMongolian, UnicodeScript_kMongolian }, // 36, + { UnicodeScript_kLatinExtendedAdditional, UnicodeScript_kLatinExtendedAdditional }, // 37, + { UnicodeScript_kGreekExtended, UnicodeScript_kGreekExtended }, // 38, + { UnicodeScript_kGeneralPunctuation, UnicodeScript_kGeneralPunctuation }, // 39, + { UnicodeScript_kSuperSubScript, UnicodeScript_kSuperSubScript }, // 40, + { UnicodeScript_kCurrencySymbolScript, UnicodeScript_kCurrencySymbolScript }, // 41, + { UnicodeScript_kSymbolCombiningMark, UnicodeScript_kSymbolCombiningMark }, // 42, + { UnicodeScript_kLetterlikeSymbol, UnicodeScript_kLetterlikeSymbol }, // 43, + { UnicodeScript_kNumberForm, UnicodeScript_kNumberForm }, // 44, + { UnicodeScript_kArrow, UnicodeScript_kArrow }, // 45, + { UnicodeScript_kMathOperator, UnicodeScript_kMathOperator }, // 46, + { UnicodeScript_kMiscTechnical, UnicodeScript_kMiscTechnical }, // 47, + { UnicodeScript_kControlPicture, UnicodeScript_kControlPicture }, // 48, + { UnicodeScript_kOpticalCharacter, UnicodeScript_kOpticalCharacter }, // 49, + { UnicodeScript_kEnclosedAlphanumeric, UnicodeScript_kEnclosedAlphanumeric }, // 50, + { UnicodeScript_kBoxDrawing, UnicodeScript_kBoxDrawing }, // 51, + { UnicodeScript_kBlockElement, UnicodeScript_kBlockElement }, // 52, + { UnicodeScript_kGeometricShape, UnicodeScript_kGeometricShape }, // 53, + { UnicodeScript_kMiscSymbol, UnicodeScript_kMiscSymbol }, // 54, + { UnicodeScript_kDingbat, UnicodeScript_kDingbat }, // 55, + { UnicodeScript_kBraillePatterns, UnicodeScript_kBraillePatterns }, // 56, + { UnicodeScript_kCJKRadicalsSupplement, UnicodeScript_kCJKRadicalsSupplement }, // 57, + { UnicodeScript_kKangxiRadicals, UnicodeScript_kKangxiRadicals }, // 58, + { UnicodeScript_kIdeographicDescriptionCharacters, UnicodeScript_kIdeographicDescriptionCharacters }, // 59, + { UnicodeScript_kCJKSymbolPunctuation, UnicodeScript_kCJKSymbolPunctuation }, // 60, + { UnicodeScript_kHiragana, UnicodeScript_kHiragana }, // 61, + { UnicodeScript_kKatakana, UnicodeScript_kKatakana }, // 62, + { UnicodeScript_kBopomofo, UnicodeScript_kBopomofo }, // 63, + { UnicodeScript_kHangulCompatibilityJamo, UnicodeScript_kHangulCompatibilityJamo }, // 64, + { UnicodeScript_kKanbun, UnicodeScript_kKanbun }, // 65, + { UnicodeScript_kBopomofoExtended, UnicodeScript_kBopomofoExtended }, // 66, + { UnicodeScript_kEnclosedCJKLetterMonth, UnicodeScript_kEnclosedCJKLetterMonth }, // 67, + { UnicodeScript_kCJKCompatibility, UnicodeScript_kCJKCompatibility }, // 68, + { UnicodeScript_k_CJKUnifiedIdeographsExtensionA, UnicodeScript_k_CJKUnifiedIdeographsExtensionA }, // 69, + { UnicodeScript_kCJKUnifiedIdeograph, UnicodeScript_kCJKUnifiedIdeograph }, // 70, + { UnicodeScript_kYiSyllables, UnicodeScript_kYiSyllables }, // 71, + { UnicodeScript_kYiRadicals, UnicodeScript_kYiRadicals }, // 72, + { UnicodeScript_kHangulSyllable, UnicodeScript_kHangulSyllable }, // 73, + { UnicodeScript_kHighSurrogate, UnicodeScript_kHighSurrogate }, // 74, + { UnicodeScript_kHighPrivateUseSurrogate, UnicodeScript_kHighPrivateUseSurrogate }, // 75, + { UnicodeScript_kLowSurrogate, UnicodeScript_kLowSurrogate }, // 76, + { UnicodeScript_kPrivateUse, UnicodeScript_kPrivateUse }, // 77, + { UnicodeScript_kCJKCompatibilityIdeograph, UnicodeScript_kCJKCompatibilityIdeograph }, // 78, + { UnicodeScript_kAlphabeticPresentation, UnicodeScript_kAlphabeticPresentation }, // 79, + { UnicodeScript_kArabicPresentationA, UnicodeScript_kArabicPresentationA }, // 80, + { UnicodeScript_kCombiningHalfMark, UnicodeScript_kCombiningHalfMark }, // 81, + { UnicodeScript_kCJKCompatibilityForm, UnicodeScript_kCJKCompatibilityForm }, // 82, + { UnicodeScript_kSmallFormVariant, UnicodeScript_kSmallFormVariant }, // 83, + { UnicodeScript_kArabicPresentationB, UnicodeScript_kArabicPresentationB }, // 84, + { UnicodeScript_kNoScript, UnicodeScript_kNoScript }, // 85, + { UnicodeScript_kHalfwidthFullwidthForm, UnicodeScript_kHalfwidthFullwidthForm }, // 86, + { UnicodeScript_kScriptCount, UnicodeScript_kNoScript } // 87, +}; + +sal_Int16 SAL_CALL +unicode::getUnicodeScriptType( const sal_Unicode ch, ScriptTypeList* typeList, sal_Int16 unknownType ) { + + if (!typeList) { + typeList = defaultTypeList; + unknownType = UnicodeScript_kNoScript; + } + + sal_Int16 i = 0, type = typeList[0].from; + while (type < UnicodeScript_kScriptCount && ch > UnicodeScriptType[type][UnicodeScriptTypeTo]) { + type = typeList[++i].from; + } + + return (type < UnicodeScript_kScriptCount && + ch >= UnicodeScriptType[type][UnicodeScriptTypeFrom]) ? + typeList[i].to : unknownType; +} + +sal_Bool SAL_CALL +unicode::isUnicodeScriptType( const sal_Unicode ch, sal_Int16 type) { + return ch >= UnicodeScriptType[type][UnicodeScriptTypeFrom] && + ch <= UnicodeScriptType[type][UnicodeScriptTypeTo]; +} + +sal_Int16 SAL_CALL +unicode::getUnicodeType( const sal_Unicode ch ) { + static sal_Unicode c = 0x00; + static sal_Int16 r = 0x00; + + if (ch == c) return r; + else c = ch; + + sal_Int16 address = UnicodeTypeIndex[ch >> 8]; + return r = (sal_Int16)((address < UnicodeTypeNumberBlock) ? UnicodeTypeBlockValue[address] : + UnicodeTypeValue[((address - UnicodeTypeNumberBlock) << 8) + (ch & 0xff)]); +} + +sal_uInt8 SAL_CALL +unicode::getUnicodeDirection( const sal_Unicode ch ) { + static sal_Unicode c = 0x00; + static sal_uInt8 r = 0x00; + + if (ch == c) return r; + else c = ch; + + sal_Int16 address = UnicodeDirectionIndex[ch >> 8]; + return r = ((address < UnicodeDirectionNumberBlock) ? UnicodeDirectionBlockValue[address] : + UnicodeDirectionValue[((address - UnicodeDirectionNumberBlock) << 8) + (ch & 0xff)]); + +} + +#define bit(name) (1 << name) + +#define UPPERMASK bit(UnicodeType::UPPERCASE_LETTER) + +#define LOWERMASK bit(UnicodeType::LOWERCASE_LETTER) + +#define TITLEMASK bit(UnicodeType::TITLECASE_LETTER) + +#define DIGITMASK bit(UnicodeType::DECIMAL_DIGIT_NUMBER)|\ + bit(UnicodeType::LETTER_NUMBER)|\ + bit(UnicodeType::OTHER_NUMBER) + +#define ALPHAMASK UPPERMASK|LOWERMASK|TITLEMASK|\ + bit(UnicodeType::MODIFIER_LETTER)|\ + bit(UnicodeType::OTHER_LETTER) + +#define BASEMASK DIGITMASK|ALPHAMASK|\ + bit(UnicodeType::NON_SPACING_MARK)|\ + bit(UnicodeType::ENCLOSING_MARK)|\ + bit(UnicodeType::COMBINING_SPACING_MARK) + +#define SPACEMASK bit(UnicodeType::SPACE_SEPARATOR)|\ + bit(UnicodeType::LINE_SEPARATOR)|\ + bit(UnicodeType::PARAGRAPH_SEPARATOR) + +#define PUNCTUATIONMASK bit(UnicodeType::DASH_PUNCTUATION)|\ + bit(UnicodeType::INITIAL_PUNCTUATION)|\ + bit(UnicodeType::FINAL_PUNCTUATION)|\ + bit(UnicodeType::CONNECTOR_PUNCTUATION)|\ + bit(UnicodeType::OTHER_PUNCTUATION) + +#define SYMBOLMASK bit(UnicodeType::MATH_SYMBOL)|\ + bit(UnicodeType::CURRENCY_SYMBOL)|\ + bit(UnicodeType::MODIFIER_SYMBOL)|\ + bit(UnicodeType::OTHER_SYMBOL) + +#define PRINTMASK BASEMASK|SPACEMASK|PUNCTUATIONMASK|SYMBOLMASK + +#define CONTROLMASK bit(UnicodeType::CONTROL)|\ + bit(UnicodeType::FORMAT)|\ + bit(UnicodeType::LINE_SEPARATOR)|\ + bit(UnicodeType::PARAGRAPH_SEPARATOR) + +#define IsType(func, mask) \ +sal_Bool SAL_CALL func( const sal_Unicode ch) {\ + return (bit(getUnicodeType(ch)) & (mask)) != 0;\ +} + +IsType(unicode::isUpper, UPPERMASK) +IsType(unicode::isLower, LOWERMASK) +IsType(unicode::isTitle, DIGITMASK) +IsType(unicode::isControl, CONTROLMASK) +IsType(unicode::isPrint, PRINTMASK) +IsType(unicode::isAlpha, ALPHAMASK) +IsType(unicode::isDigit, DIGITMASK) +IsType(unicode::isAlphaDigit, ALPHAMASK|DIGITMASK) +IsType(unicode::isSpace, SPACEMASK) +IsType(unicode::isBase, BASEMASK) +IsType(unicode::isPunctuation, PUNCTUATIONMASK) + +#define CONTROLSPACE bit(0x09)|bit(0x0a)|bit(0x0b)|bit(0x0c)|bit(0x0d)|\ + bit(0x1c)|bit(0x1d)|bit(0x1e)|bit(0x1f) + +sal_Bool SAL_CALL unicode::isWhiteSpace( const sal_Unicode ch) { + return (ch != 0xa0 && isSpace(ch)) || (ch <= 0x1F && (bit(ch) & (CONTROLSPACE))); +} + +sal_Int32 SAL_CALL unicode::getCharType( const sal_Unicode ch ) +{ + using namespace ::com::sun::star::i18n::KCharacterType; + + switch ( getUnicodeType( ch ) ) { + // Upper + case UnicodeType::UPPERCASE_LETTER : + return UPPER|LETTER|PRINTABLE|BASE_FORM; + + // Lower + case UnicodeType::LOWERCASE_LETTER : + return LOWER|LETTER|PRINTABLE|BASE_FORM; + + // Title + case UnicodeType::TITLECASE_LETTER : + return TITLE_CASE|LETTER|PRINTABLE|BASE_FORM; + + // Letter + case UnicodeType::MODIFIER_LETTER : + case UnicodeType::OTHER_LETTER : + return LETTER|PRINTABLE|BASE_FORM; + + // Digit + case UnicodeType::DECIMAL_DIGIT_NUMBER: + case UnicodeType::LETTER_NUMBER: + case UnicodeType::OTHER_NUMBER: + return DIGIT|PRINTABLE|BASE_FORM; + + // Base + case UnicodeType::NON_SPACING_MARK: + case UnicodeType::ENCLOSING_MARK: + case UnicodeType::COMBINING_SPACING_MARK: + return BASE_FORM|PRINTABLE; + + // Print + case UnicodeType::SPACE_SEPARATOR: + + case UnicodeType::DASH_PUNCTUATION: + case UnicodeType::INITIAL_PUNCTUATION: + case UnicodeType::FINAL_PUNCTUATION: + case UnicodeType::CONNECTOR_PUNCTUATION: + case UnicodeType::OTHER_PUNCTUATION: + + case UnicodeType::MATH_SYMBOL: + case UnicodeType::CURRENCY_SYMBOL: + case UnicodeType::MODIFIER_SYMBOL: + case UnicodeType::OTHER_SYMBOL: + return PRINTABLE; + + // Control + case UnicodeType::CONTROL: + case UnicodeType::FORMAT: + return CONTROL; + + case UnicodeType::LINE_SEPARATOR: + case UnicodeType::PARAGRAPH_SEPARATOR: + return CONTROL|PRINTABLE; + + // for all others + default: + return 0; + } +} + + diff --git a/i18nutil/source/utility/unicode_data.h b/i18nutil/source/utility/unicode_data.h new file mode 100644 index 000000000000..d1bd9cd50e4c --- /dev/null +++ b/i18nutil/source/utility/unicode_data.h @@ -0,0 +1,1667 @@ +/************************************************************************* + * + * $RCSfile: unicode_data.h,v $ + * + * $Revision: 1.2 $ + * + * last change: $Author: vg $ $Date: 2003-04-24 12:26:04 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef CCLASS_CHARTYPE_H +#define CCLASS_CHARTYPE_H + +#include <sal/types.h> + + +#define UnicodeTypeNumberBlock 5 + +static sal_Int8 UnicodeTypeIndex[] = { + 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, // 0000 - 07ff + 0x00, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, // 0800 - 0fff + 0x14, 0x15, 0x16, 0x17, 0x18, 0x01, 0x19, 0x1a, // 1000 - 17ff + 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x1d, // 1800 - 1fff + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, // 2000 - 27ff + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x27, // 2800 - 2fff + 0x28, 0x29, 0x2a, 0x2b, 0x01, 0x01, 0x01, 0x01, // 3000 - 37ff + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // 3800 - 3fff + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // 4000 - 47ff + 0x01, 0x01, 0x01, 0x01, 0x01, 0x2c, 0x01, 0x01, // 4800 - 4fff + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // 5000 - 57ff + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // 5800 - 5fff + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // 6000 - 67ff + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // 6800 - 6fff + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // 7000 - 77ff + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // 7800 - 7fff + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // 8000 - 87ff + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // 8800 - 8fff + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // 9000 - 97ff + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x2d, // 9800 - 9fff + 0x01, 0x01, 0x01, 0x01, 0x2e, 0x00, 0x00, 0x00, // a000 - a7ff + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, // a800 - afff + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // b000 - b7ff + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // b800 - bfff + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // c000 - c7ff + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // c800 - cfff + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x2f, // d000 - d7ff + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, // d800 - dfff + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, // e000 - e7ff + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, // e800 - efff + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, // f000 - f7ff + 0x02, 0x01, 0x30, 0x31, 0x01, 0x32, 0x33, 0x34, // f800 - ffff +}; + + +static sal_Int8 UnicodeTypeBlockValue[] = { + 0, 5, 17, 18, 27, +}; + + +static sal_Int8 UnicodeTypeValue[] = { + 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,// 0000 - 000f + 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,// 0010 - 001f + 12,23,23,23,25,23,23,23,20,21,23,24,23,19,23,23,// 0020 - 002f + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,23,23,24,24,24,23,// 0030 - 003f + 23, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,// 0040 - 004f + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,20,23,21,26,22,// 0050 - 005f + 26, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 0060 - 006f + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,20,24,21,24,15,// 0070 - 007f + 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,// 0080 - 008f + 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,// 0090 - 009f + 12,23,25,25,25,25,27,27,26,27, 2,28,24,19,27,26,// 00a0 - 00af + 27,24,11,11,26, 2,27,23,26,11, 2,29,11,11,11,23,// 00b0 - 00bf + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,// 00c0 - 00cf + 1, 1, 1, 1, 1, 1, 1,24, 1, 1, 1, 1, 1, 1, 1, 2,// 00d0 - 00df + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 00e0 - 00ef + 2, 2, 2, 2, 2, 2, 2,24, 2, 2, 2, 2, 2, 2, 2, 2,// 00f0 - 00ff + + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 0100 - 010f + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 0110 - 011f + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 0120 - 012f + 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1,// 0130 - 013f + 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2,// 0140 - 014f + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 0150 - 015f + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 0160 - 016f + 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 2,// 0170 - 017f + 2, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1,// 0180 - 018f + 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 2, 2, 1, 1, 2, 1,// 0190 - 019f + 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1,// 01a0 - 01af + 2, 1, 1, 1, 2, 1, 2, 1, 1, 2, 2, 5, 1, 2, 2, 2,// 01b0 - 01bf + 5, 5, 5, 5, 1, 3, 2, 1, 3, 2, 1, 3, 2, 1, 2, 1,// 01c0 - 01cf + 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2,// 01d0 - 01df + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 01e0 - 01ef + 2, 1, 3, 2, 1, 2, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2,// 01f0 - 01ff + + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 0200 - 020f + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 0210 - 021f + 0, 0, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 0220 - 022f + 1, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0230 - 023f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0240 - 024f + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 0250 - 025f + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 0260 - 026f + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 0270 - 027f + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 0280 - 028f + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 0290 - 029f + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0,// 02a0 - 02af + 4, 4, 4, 4, 4, 4, 4, 4, 4,26,26, 4, 4, 4, 4, 4,// 02b0 - 02bf + 4, 4,26,26,26,26,26,26,26,26,26,26,26,26,26,26,// 02c0 - 02cf + 4, 4,26,26,26,26,26,26,26,26,26,26,26,26,26,26,// 02d0 - 02df + 4, 4, 4, 4, 4,26,26,26,26,26,26,26,26,26, 4, 0,// 02e0 - 02ef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 02f0 - 02ff + + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,// 0300 - 030f + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,// 0310 - 031f + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,// 0320 - 032f + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,// 0330 - 033f + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0,// 0340 - 034f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0350 - 035f + 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0360 - 036f + 0, 0, 0, 0,26,26, 0, 0, 0, 0, 4, 0, 0, 0,23, 0,// 0370 - 037f + 0, 0, 0, 0,26,26, 1,23, 1, 1, 1, 0, 1, 0, 1, 1,// 0380 - 038f + 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,// 0390 - 039f + 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,// 03a0 - 03af + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 03b0 - 03bf + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0,// 03c0 - 03cf + 2, 2, 1, 1, 1, 2, 2, 2, 0, 0, 1, 2, 1, 2, 1, 2,// 03d0 - 03df + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 03e0 - 03ef + 2, 2, 2, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 03f0 - 03ff + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,// 0400 - 040f + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,// 0410 - 041f + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,// 0420 - 042f + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 0430 - 043f + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 0440 - 044f + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 0450 - 045f + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 0460 - 046f + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 0470 - 047f + 1, 2,27, 6, 6, 6, 6, 0, 7, 7, 0, 0, 1, 2, 1, 2,// 0480 - 048f + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 0490 - 049f + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 04a0 - 04af + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 04b0 - 04bf + 1, 1, 2, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 0,// 04c0 - 04cf + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 04d0 - 04df + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 04e0 - 04ef + 1, 2, 1, 2, 1, 2, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0,// 04f0 - 04ff + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0500 - 050f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0510 - 051f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0520 - 052f + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,// 0530 - 053f + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,// 0540 - 054f + 1, 1, 1, 1, 1, 1, 1, 0, 0, 4,23,23,23,23,23,23,// 0550 - 055f + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 0560 - 056f + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 0570 - 057f + 2, 2, 2, 2, 2, 2, 2, 2, 0,23,19, 0, 0, 0, 0, 0,// 0580 - 058f + 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,// 0590 - 059f + 6, 6, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,// 05a0 - 05af + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 6, 6, 6,23, 6,// 05b0 - 05bf + 23, 6, 6,23, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 05c0 - 05cf + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 05d0 - 05df + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0,// 05e0 - 05ef + 5, 5, 5,23,23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 05f0 - 05ff + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,23, 0, 0, 0,// 0600 - 060f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,23, 0, 0, 0,23,// 0610 - 061f + 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0620 - 062f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0,// 0630 - 063f + 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6,// 0640 - 064f + 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0650 - 065f + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,23,23,23,23, 0, 0,// 0660 - 066f + 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0670 - 067f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0680 - 068f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0690 - 069f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 06a0 - 06af + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 06b0 - 06bf + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 06c0 - 06cf + 5, 5, 5, 5,23, 5, 6, 6, 6, 6, 6, 6, 6, 7, 7, 6,// 06d0 - 06df + 6, 6, 6, 6, 6, 4, 4, 6, 6,27, 6, 6, 6, 6, 0, 0,// 06e0 - 06ef + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 5, 5, 5,27,27, 0,// 06f0 - 06ff + + 23,23,23,23,23,23,23,23,23,23,23,23,23,23, 0,16,// 0700 - 070f + 5, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0710 - 071f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0,// 0720 - 072f + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,// 0730 - 073f + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0,// 0740 - 074f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0750 - 075f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0760 - 076f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0770 - 077f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0780 - 078f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0790 - 079f + 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,// 07a0 - 07af + 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 07b0 - 07bf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 07c0 - 07cf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 07d0 - 07df + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 07e0 - 07ef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 07f0 - 07ff + + 0, 6, 6, 8, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0900 - 090f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0910 - 091f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0920 - 092f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 6, 5, 8, 8,// 0930 - 093f + 8, 6, 6, 6, 6, 6, 6, 6, 6, 8, 8, 8, 8, 6, 0, 0,// 0940 - 094f + 5, 6, 6, 6, 6, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,// 0950 - 095f + 5, 5, 6, 6,23,23, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,// 0960 - 096f + 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0970 - 097f + 0, 6, 8, 8, 0, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 5,// 0980 - 098f + 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0990 - 099f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5,// 09a0 - 09af + 5, 0, 5, 0, 0, 0, 5, 5, 5, 5, 0, 0, 6, 0, 8, 8,// 09b0 - 09bf + 8, 6, 6, 6, 6, 0, 0, 8, 8, 0, 0, 8, 8, 6, 0, 0,// 09c0 - 09cf + 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 5, 5, 0, 5,// 09d0 - 09df + 5, 5, 6, 6, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,// 09e0 - 09ef + 5, 5,25,25,11,11,11,11,11,11,27, 0, 0, 0, 0, 0,// 09f0 - 09ff + + 0, 0, 6, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 5,// 0a00 - 0a0f + 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0a10 - 0a1f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5,// 0a20 - 0a2f + 5, 0, 5, 5, 0, 5, 5, 0, 5, 5, 0, 0, 6, 0, 8, 8,// 0a30 - 0a3f + 8, 6, 6, 0, 0, 0, 0, 6, 6, 0, 0, 6, 6, 6, 0, 0,// 0a40 - 0a4f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 0, 5, 0,// 0a50 - 0a5f + 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,// 0a60 - 0a6f + 6, 6, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0a70 - 0a7f + 0, 6, 6, 8, 0, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 5,// 0a80 - 0a8f + 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0a90 - 0a9f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5,// 0aa0 - 0aaf + 5, 0, 5, 5, 0, 5, 5, 5, 5, 5, 0, 0, 6, 5, 8, 8,// 0ab0 - 0abf + 8, 6, 6, 6, 6, 6, 0, 6, 6, 8, 0, 8, 8, 6, 0, 0,// 0ac0 - 0acf + 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0ad0 - 0adf + 5, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,// 0ae0 - 0aef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0af0 - 0aff + + 0, 6, 8, 8, 0, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 5,// 0b00 - 0b0f + 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0b10 - 0b1f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5,// 0b20 - 0b2f + 5, 0, 5, 5, 0, 0, 5, 5, 5, 5, 0, 0, 6, 5, 8, 6,// 0b30 - 0b3f + 8, 6, 6, 6, 0, 0, 0, 8, 8, 0, 0, 8, 8, 6, 0, 0,// 0b40 - 0b4f + 0, 0, 0, 0, 0, 0, 6, 8, 0, 0, 0, 0, 5, 5, 0, 5,// 0b50 - 0b5f + 5, 5, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,// 0b60 - 0b6f + 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0b70 - 0b7f + 0, 0, 6, 8, 0, 5, 5, 5, 5, 5, 5, 0, 0, 0, 5, 5,// 0b80 - 0b8f + 5, 0, 5, 5, 5, 5, 0, 0, 0, 5, 5, 0, 5, 0, 5, 5,// 0b90 - 0b9f + 0, 0, 0, 5, 5, 0, 0, 0, 5, 5, 5, 0, 0, 0, 5, 5,// 0ba0 - 0baf + 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 0, 0, 0, 0, 8, 8,// 0bb0 - 0bbf + 6, 8, 8, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 6, 0, 0,// 0bc0 - 0bcf + 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0,// 0bd0 - 0bdf + 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9,// 0be0 - 0bef + 11,11,11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0bf0 - 0bff + + 0, 8, 8, 8, 0, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5,// 0c00 - 0c0f + 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0c10 - 0c1f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5,// 0c20 - 0c2f + 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 0, 0, 0, 0, 6, 6,// 0c30 - 0c3f + 6, 8, 8, 8, 8, 0, 6, 6, 6, 0, 6, 6, 6, 6, 0, 0,// 0c40 - 0c4f + 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0c50 - 0c5f + 5, 5, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,// 0c60 - 0c6f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0c70 - 0c7f + 0, 0, 8, 8, 0, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5,// 0c80 - 0c8f + 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0c90 - 0c9f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5,// 0ca0 - 0caf + 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 0, 0, 0, 0, 8, 6,// 0cb0 - 0cbf + 8, 8, 8, 8, 8, 0, 6, 8, 8, 0, 8, 8, 6, 6, 0, 0,// 0cc0 - 0ccf + 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 5, 0,// 0cd0 - 0cdf + 5, 5, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,// 0ce0 - 0cef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0cf0 - 0cff + + 0, 0, 8, 8, 0, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5,// 0d00 - 0d0f + 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0d10 - 0d1f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5,// 0d20 - 0d2f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 8, 8,// 0d30 - 0d3f + 8, 6, 6, 6, 0, 0, 8, 8, 8, 0, 8, 8, 8, 6, 0, 0,// 0d40 - 0d4f + 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0,// 0d50 - 0d5f + 5, 5, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,// 0d60 - 0d6f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0d70 - 0d7f + 0, 0, 8, 8, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0d80 - 0d8f + 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5,// 0d90 - 0d9f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0da0 - 0daf + 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 0,// 0db0 - 0dbf + 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 6, 0, 0, 0, 0, 8,// 0dc0 - 0dcf + 8, 8, 6, 6, 6, 0, 6, 0, 8, 8, 8, 8, 8, 8, 8, 8,// 0dd0 - 0ddf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0de0 - 0def + 0, 0, 8, 8,23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0df0 - 0dff + + 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0e00 - 0e0f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0e10 - 0e1f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0e20 - 0e2f + 5, 6, 5, 5, 6, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0,25,// 0e30 - 0e3f + 5, 5, 5, 5, 5, 5, 4, 6, 6, 6, 6, 6, 6, 6, 6,23,// 0e40 - 0e4f + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,23,23, 0, 0, 0, 0,// 0e50 - 0e5f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0e60 - 0e6f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0e70 - 0e7f + 0, 5, 5, 0, 5, 0, 0, 5, 5, 0, 5, 0, 0, 5, 0, 0,// 0e80 - 0e8f + 0, 0, 0, 0, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5,// 0e90 - 0e9f + 0, 5, 5, 5, 0, 5, 0, 5, 0, 0, 5, 5, 0, 5, 5, 5,// 0ea0 - 0eaf + 5, 6, 5, 5, 6, 6, 6, 6, 6, 6, 0, 6, 6, 5, 0, 0,// 0eb0 - 0ebf + 5, 5, 5, 5, 5, 0, 4, 0, 6, 6, 6, 6, 6, 6, 0, 0,// 0ec0 - 0ecf + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 5, 5, 0, 0,// 0ed0 - 0edf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0ee0 - 0eef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0ef0 - 0eff + + 5,27,27,27,23,23,23,23,23,23,23,23,23,23,23,23,// 0f00 - 0f0f + 23,23,23,27,27,27,27,27, 6, 6,27,27,27,27,27,27,// 0f10 - 0f1f + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,11,11,11,11,11,// 0f20 - 0f2f + 11,11,11,11,27, 6,27, 6,27, 6,20,21,20,21, 8, 8,// 0f30 - 0f3f + 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5,// 0f40 - 0f4f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0f50 - 0f5f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0,// 0f60 - 0f6f + 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8,// 0f70 - 0f7f + 6, 6, 6, 6, 6,23, 6, 6, 5, 5, 5, 5, 0, 0, 0, 0,// 0f80 - 0f8f + 6, 6, 6, 6, 6, 6, 6, 6, 0, 6, 6, 6, 6, 6, 6, 6,// 0f90 - 0f9f + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,// 0fa0 - 0faf + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0,27,27,// 0fb0 - 0fbf + 27,27,27,27,27,27, 6,27,27,27,27,27,27, 0, 0,27,// 0fc0 - 0fcf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0fd0 - 0fdf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0fe0 - 0fef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0ff0 - 0fff + + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1000 - 100f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1010 - 101f + 5, 5, 0, 5, 5, 5, 5, 5, 0, 5, 5, 0, 8, 6, 6, 6,// 1020 - 102f + 6, 8, 6, 0, 0, 0, 6, 6, 8, 6, 0, 0, 0, 0, 0, 0,// 1030 - 103f + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,23,23,23,23,23,23,// 1040 - 104f + 5, 5, 5, 5, 5, 5, 8, 8, 6, 6, 0, 0, 0, 0, 0, 0,// 1050 - 105f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1060 - 106f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1070 - 107f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1080 - 108f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1090 - 109f + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,// 10a0 - 10af + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,// 10b0 - 10bf + 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 10c0 - 10cf + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 10d0 - 10df + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 10e0 - 10ef + 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0,23, 0, 0, 0, 0,// 10f0 - 10ff + + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1100 - 110f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1110 - 111f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1120 - 112f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1130 - 113f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1140 - 114f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 5,// 1150 - 115f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1160 - 116f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1170 - 117f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1180 - 118f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1190 - 119f + 5, 5, 5, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,// 11a0 - 11af + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 11b0 - 11bf + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 11c0 - 11cf + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 11d0 - 11df + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 11e0 - 11ef + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0,// 11f0 - 11ff + + 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5,// 1200 - 120f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1210 - 121f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1220 - 122f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1230 - 123f + 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 5, 5, 5, 5, 0, 0,// 1240 - 124f + 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 5, 5, 5, 5, 0, 0,// 1250 - 125f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1260 - 126f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1270 - 127f + 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 5, 5, 5, 5, 0, 0,// 1280 - 128f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1290 - 129f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0,// 12a0 - 12af + 5, 0, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 0,// 12b0 - 12bf + 5, 0, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 0,// 12c0 - 12cf + 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5,// 12d0 - 12df + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0,// 12e0 - 12ef + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 12f0 - 12ff + + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0,// 1300 - 130f + 5, 0, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 0,// 1310 - 131f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1320 - 132f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1330 - 133f + 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5,// 1340 - 134f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0,// 1350 - 135f + 0,23,23,23,23,23,23,23,23, 9, 9, 9, 9, 9, 9, 9,// 1360 - 136f + 9, 9,11,11,11,11,11,11,11,11,11,11,11, 0, 0, 0,// 1370 - 137f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1380 - 138f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1390 - 139f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 13a0 - 13af + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 13b0 - 13bf + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 13c0 - 13cf + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 13d0 - 13df + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 13e0 - 13ef + 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 13f0 - 13ff + + 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1400 - 140f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1410 - 141f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1420 - 142f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1430 - 143f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1440 - 144f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1450 - 145f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1460 - 146f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1470 - 147f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1480 - 148f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1490 - 149f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 14a0 - 14af + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 14b0 - 14bf + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 14c0 - 14cf + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 14d0 - 14df + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 14e0 - 14ef + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 14f0 - 14ff + + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1600 - 160f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1610 - 161f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1620 - 162f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1630 - 163f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1640 - 164f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1650 - 165f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,23,23, 5,// 1660 - 166f + 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1670 - 167f + 12, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1680 - 168f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,20,21, 0, 0, 0,// 1690 - 169f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 16a0 - 16af + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 16b0 - 16bf + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 16c0 - 16cf + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 16d0 - 16df + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,23,23,23,10,10,// 16e0 - 16ef + 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 16f0 - 16ff + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1700 - 170f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1710 - 171f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1720 - 172f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1730 - 173f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1740 - 174f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1750 - 175f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1760 - 176f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1770 - 177f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1780 - 178f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1790 - 179f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 17a0 - 17af + 5, 5, 5, 5, 8, 8, 8, 6, 6, 6, 6, 6, 6, 6, 8, 8,// 17b0 - 17bf + 8, 8, 8, 8, 8, 8, 6, 8, 8, 6, 6, 6, 6, 6, 6, 6,// 17c0 - 17cf + 6, 6, 6, 6,23,23,23,23,23,23,23,25,23, 0, 0, 0,// 17d0 - 17df + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,// 17e0 - 17ef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 17f0 - 17ff + + 23,23,23,23,23,23,19,23,23,23,23,16,16,16,16, 0,// 1800 - 180f + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,// 1810 - 181f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1820 - 182f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1830 - 183f + 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1840 - 184f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1850 - 185f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1860 - 186f + 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0,// 1870 - 187f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1880 - 188f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1890 - 189f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 0, 0, 0, 0, 0, 0,// 18a0 - 18af + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 18b0 - 18bf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 18c0 - 18cf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 18d0 - 18df + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 18e0 - 18ef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 18f0 - 18ff + + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 1e00 - 1e0f + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 1e10 - 1e1f + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 1e20 - 1e2f + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 1e30 - 1e3f + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 1e40 - 1e4f + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 1e50 - 1e5f + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 1e60 - 1e6f + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 1e70 - 1e7f + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 1e80 - 1e8f + 1, 2, 1, 2, 1, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0,// 1e90 - 1e9f + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 1ea0 - 1eaf + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 1eb0 - 1ebf + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 1ec0 - 1ecf + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 1ed0 - 1edf + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 1ee0 - 1eef + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 0, 0, 0, 0, 0, 0,// 1ef0 - 1eff + + 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,// 1f00 - 1f0f + 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,// 1f10 - 1f1f + 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,// 1f20 - 1f2f + 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,// 1f30 - 1f3f + 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,// 1f40 - 1f4f + 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 1, 0, 1, 0, 1,// 1f50 - 1f5f + 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,// 1f60 - 1f6f + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0,// 1f70 - 1f7f + 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,// 1f80 - 1f8f + 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,// 1f90 - 1f9f + 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,// 1fa0 - 1faf + 2, 2, 2, 2, 2, 0, 2, 2, 1, 1, 1, 1, 3,26, 2,26,// 1fb0 - 1fbf + 26,26, 2, 2, 2, 0, 2, 2, 1, 1, 1, 1, 3,26,26,26,// 1fc0 - 1fcf + 2, 2, 2, 2, 0, 0, 2, 2, 1, 1, 1, 1, 0,26,26,26,// 1fd0 - 1fdf + 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,26,26,26,// 1fe0 - 1fef + 0, 0, 2, 2, 2, 0, 2, 2, 1, 1, 1, 1, 3,26,26, 0,// 1ff0 - 1fff + + 12,12,12,12,12,12,12,12,12,12,12,12,16,16,16,16,// 2000 - 200f + 19,19,19,19,19,19,23,23,28,29,20,28,28,29,20,28,// 2010 - 201f + 23,23,23,23,23,23,23,23,13,14,16,16,16,16,16,12,// 2020 - 202f + 23,23,23,23,23,23,23,23,23,28,29,23,23,23,23,22,// 2030 - 203f + 22,23,23,23,24,20,21, 0,23,23,23,23,23,23, 0, 0,// 2040 - 204f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2050 - 205f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,16,16,16,16,16,16,// 2060 - 206f + 11, 0, 0, 0,11,11,11,11,11,11,24,24,24,20,21, 2,// 2070 - 207f + 11,11,11,11,11,11,11,11,11,11,24,24,24,20,21, 0,// 2080 - 208f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2090 - 209f + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,// 20a0 - 20af + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 20b0 - 20bf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 20c0 - 20cf + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7,// 20d0 - 20df + 7, 6, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 20e0 - 20ef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 20f0 - 20ff + + 27,27, 1,27,27,27,27, 1,27,27, 2, 1, 1, 1, 2, 2,// 2100 - 210f + 1, 1, 1, 2,27, 1,27,27,27, 1, 1, 1, 1, 1,27,27,// 2110 - 211f + 27,27,27,27, 1,27, 1,27, 1,27, 1, 1, 1, 1,27, 2,// 2120 - 212f + 1, 1,27, 1, 2, 5, 5, 5, 5, 2,27, 0, 0, 0, 0, 0,// 2130 - 213f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2140 - 214f + 0, 0, 0,11,11,11,11,11,11,11,11,11,11,11,11,11,// 2150 - 215f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2160 - 216f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2170 - 217f + 10,10,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2180 - 218f + 24,24,24,24,24,27,27,27,27,27,24,24,27,27,27,27,// 2190 - 219f + 24,27,27,24,27,27,24,27,27,27,27,27,27,27,24,27,// 21a0 - 21af + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 21b0 - 21bf + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,24,24,// 21c0 - 21cf + 27,27,24,27,24,27,27,27,27,27,27,27,27,27,27,27,// 21d0 - 21df + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 21e0 - 21ef + 27,27,27,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 21f0 - 21ff + + 24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,// 2200 - 220f + 24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,// 2210 - 221f + 24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,// 2220 - 222f + 24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,// 2230 - 223f + 24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,// 2240 - 224f + 24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,// 2250 - 225f + 24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,// 2260 - 226f + 24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,// 2270 - 227f + 24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,// 2280 - 228f + 24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,// 2290 - 229f + 24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,// 22a0 - 22af + 24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,// 22b0 - 22bf + 24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,// 22c0 - 22cf + 24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,// 22d0 - 22df + 24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,// 22e0 - 22ef + 24,24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 22f0 - 22ff + + 27,27,27,27,27,27,27,27,24,24,24,24,27,27,27,27,// 2300 - 230f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2310 - 231f + 24,24,27,27,27,27,27,27,27,20,21,27,27,27,27,27,// 2320 - 232f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2330 - 233f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2340 - 234f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2350 - 235f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2360 - 236f + 27,27,27,27,27,27,27,27,27,27,27,27, 0,27,27,27,// 2370 - 237f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2380 - 238f + 27,27,27,27,27,27,27,27,27,27,27, 0, 0, 0, 0, 0,// 2390 - 239f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 23a0 - 23af + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 23b0 - 23bf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 23c0 - 23cf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 23d0 - 23df + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 23e0 - 23ef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 23f0 - 23ff + + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2400 - 240f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2410 - 241f + 27,27,27,27,27,27,27, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2420 - 242f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2430 - 243f + 27,27,27,27,27,27,27,27,27,27,27, 0, 0, 0, 0, 0,// 2440 - 244f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2450 - 245f + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,// 2460 - 246f + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,// 2470 - 247f + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,// 2480 - 248f + 11,11,11,11,11,11,11,11,11,11,11,11,27,27,27,27,// 2490 - 249f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 24a0 - 24af + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 24b0 - 24bf + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 24c0 - 24cf + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 24d0 - 24df + 27,27,27,27,27,27,27,27,27,27,11, 0, 0, 0, 0, 0,// 24e0 - 24ef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 24f0 - 24ff + + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2500 - 250f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2510 - 251f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2520 - 252f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2530 - 253f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2540 - 254f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2550 - 255f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2560 - 256f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2570 - 257f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2580 - 258f + 27,27,27,27,27,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2590 - 259f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 25a0 - 25af + 27,27,27,27,27,27,27,24,27,27,27,27,27,27,27,27,// 25b0 - 25bf + 27,24,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 25c0 - 25cf + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 25d0 - 25df + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 25e0 - 25ef + 27,27,27,27,27,27,27,27, 0, 0, 0, 0, 0, 0, 0, 0,// 25f0 - 25ff + + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2600 - 260f + 27,27,27,27, 0, 0, 0, 0, 0,27,27,27,27,27,27,27,// 2610 - 261f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2620 - 262f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2630 - 263f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2640 - 264f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2650 - 265f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,24,// 2660 - 266f + 27,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2670 - 267f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2680 - 268f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2690 - 269f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 26a0 - 26af + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 26b0 - 26bf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 26c0 - 26cf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 26d0 - 26df + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 26e0 - 26ef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 26f0 - 26ff + + 0,27,27,27,27, 0,27,27,27,27, 0, 0,27,27,27,27,// 2700 - 270f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2710 - 271f + 27,27,27,27,27,27,27,27, 0,27,27,27,27,27,27,27,// 2720 - 272f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2730 - 273f + 27,27,27,27,27,27,27,27,27,27,27,27, 0,27, 0,27,// 2740 - 274f + 27,27,27, 0, 0, 0,27, 0,27,27,27,27,27,27,27, 0,// 2750 - 275f + 0,27,27,27,27,27,27,27, 0, 0, 0, 0, 0, 0, 0, 0,// 2760 - 276f + 0, 0, 0, 0, 0, 0,11,11,11,11,11,11,11,11,11,11,// 2770 - 277f + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,// 2780 - 278f + 11,11,11,11,27, 0, 0, 0,27,27,27,27,27,27,27,27,// 2790 - 279f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 27a0 - 27af + 0,27,27,27,27,27,27,27,27,27,27,27,27,27,27, 0,// 27b0 - 27bf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 27c0 - 27cf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 27d0 - 27df + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 27e0 - 27ef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 27f0 - 27ff + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e00 - 2e0f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e10 - 2e1f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e20 - 2e2f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e30 - 2e3f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e40 - 2e4f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e50 - 2e5f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e60 - 2e6f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e70 - 2e7f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2e80 - 2e8f + 27,27,27,27,27,27,27,27,27,27, 0,27,27,27,27,27,// 2e90 - 2e9f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2ea0 - 2eaf + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2eb0 - 2ebf + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2ec0 - 2ecf + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2ed0 - 2edf + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2ee0 - 2eef + 27,27,27,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2ef0 - 2eff + + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2f00 - 2f0f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2f10 - 2f1f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2f20 - 2f2f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2f30 - 2f3f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2f40 - 2f4f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2f50 - 2f5f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2f60 - 2f6f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2f70 - 2f7f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2f80 - 2f8f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2f90 - 2f9f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2fa0 - 2faf + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2fb0 - 2fbf + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2fc0 - 2fcf + 27,27,27,27,27,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2fd0 - 2fdf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2fe0 - 2fef + 27,27,27,27,27,27,27,27,27,27,27,27, 0, 0, 0, 0,// 2ff0 - 2fff + + 12,23,23,23,27, 4, 5,10,20,21,20,21,20,21,20,21,// 3000 - 300f + 20,21,27,27,20,21,20,21,20,21,20,21,19,20,21,21,// 3010 - 301f + 27,10,10,10,10,10,10,10,10,10, 6, 6, 6, 6, 6, 6,// 3020 - 302f + 19, 4, 4, 4, 4, 4,27,27,10,10,10, 0, 0, 0,27,27,// 3030 - 303f + 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 3040 - 304f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 3050 - 305f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 3060 - 306f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 3070 - 307f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 3080 - 308f + 5, 5, 5, 5, 5, 0, 0, 0, 0, 6, 6,26,26, 4, 4, 0,// 3090 - 309f + 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 30a0 - 30af + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 30b0 - 30bf + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 30c0 - 30cf + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 30d0 - 30df + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 30e0 - 30ef + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,22, 4, 4, 4, 0,// 30f0 - 30ff + + 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 3100 - 310f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 3110 - 311f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0,// 3120 - 312f + 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 3130 - 313f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 3140 - 314f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 3150 - 315f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 3160 - 316f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 3170 - 317f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0,// 3180 - 318f + 27,27,11,11,11,11,27,27,27,27,27,27,27,27,27,27,// 3190 - 319f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 31a0 - 31af + 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0,// 31b0 - 31bf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 31c0 - 31cf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 31d0 - 31df + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 31e0 - 31ef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 31f0 - 31ff + + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 3200 - 320f + 27,27,27,27,27,27,27,27,27,27,27,27,27, 0, 0, 0,// 3210 - 321f + 11,11,11,11,11,11,11,11,11,11,27,27,27,27,27,27,// 3220 - 322f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 3230 - 323f + 27,27,27,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 3240 - 324f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 3250 - 325f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 3260 - 326f + 27,27,27,27,27,27,27,27,27,27,27,27, 0, 0, 0,27,// 3270 - 327f + 11,11,11,11,11,11,11,11,11,11,27,27,27,27,27,27,// 3280 - 328f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 3290 - 329f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 32a0 - 32af + 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 32b0 - 32bf + 27,27,27,27,27,27,27,27,27,27,27,27, 0, 0, 0, 0,// 32c0 - 32cf + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 32d0 - 32df + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 32e0 - 32ef + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27, 0,// 32f0 - 32ff + + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 3300 - 330f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 3310 - 331f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 3320 - 332f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 3330 - 333f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 3340 - 334f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 3350 - 335f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 3360 - 336f + 27,27,27,27,27,27,27, 0, 0, 0, 0,27,27,27,27,27,// 3370 - 337f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 3380 - 338f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 3390 - 339f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 33a0 - 33af + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 33b0 - 33bf + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 33c0 - 33cf + 27,27,27,27,27,27,27,27,27,27,27,27,27,27, 0, 0,// 33d0 - 33df + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 33e0 - 33ef + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27, 0,// 33f0 - 33ff + + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 4d00 - 4d0f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 4d10 - 4d1f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 4d20 - 4d2f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 4d30 - 4d3f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 4d40 - 4d4f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 4d50 - 4d5f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 4d60 - 4d6f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 4d70 - 4d7f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 4d80 - 4d8f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 4d90 - 4d9f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 4da0 - 4daf + 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 4db0 - 4dbf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 4dc0 - 4dcf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 4dd0 - 4ddf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 4de0 - 4def + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 4df0 - 4dff + + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 9f00 - 9f0f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 9f10 - 9f1f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 9f20 - 9f2f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 9f30 - 9f3f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 9f40 - 9f4f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 9f50 - 9f5f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 9f60 - 9f6f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 9f70 - 9f7f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 9f80 - 9f8f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 9f90 - 9f9f + 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 9fa0 - 9faf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 9fb0 - 9fbf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 9fc0 - 9fcf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 9fd0 - 9fdf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 9fe0 - 9fef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 9ff0 - 9fff + + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// a400 - a40f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// a410 - a41f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// a420 - a42f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// a430 - a43f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// a440 - a44f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// a450 - a45f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// a460 - a46f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// a470 - a47f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0,// a480 - a48f + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// a490 - a49f + 27,27, 0, 0,27,27,27,27,27,27,27,27,27,27,27,27,// a4a0 - a4af + 27,27,27,27, 0,27,27,27,27,27,27,27,27,27,27,27,// a4b0 - a4bf + 27, 0,27,27,27, 0,27, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a4c0 - a4cf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a4d0 - a4df + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a4e0 - a4ef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a4f0 - a4ff + + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// d700 - d70f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// d710 - d71f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// d720 - d72f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// d730 - d73f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// d740 - d74f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// d750 - d75f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// d760 - d76f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// d770 - d77f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// d780 - d78f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// d790 - d79f + 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// d7a0 - d7af + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// d7b0 - d7bf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// d7c0 - d7cf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// d7d0 - d7df + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// d7e0 - d7ef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// d7f0 - d7ff + + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fa00 - fa0f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fa10 - fa1f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0,// fa20 - fa2f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fa30 - fa3f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fa40 - fa4f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fa50 - fa5f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fa60 - fa6f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fa70 - fa7f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fa80 - fa8f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fa90 - fa9f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// faa0 - faaf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fab0 - fabf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fac0 - facf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fad0 - fadf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fae0 - faef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// faf0 - faff + + 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fb00 - fb0f + 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 5, 6, 5,// fb10 - fb1f + 5, 5, 5, 5, 5, 5, 5, 5, 5,24, 5, 5, 5, 5, 5, 5,// fb20 - fb2f + 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 0, 5, 0,// fb30 - fb3f + 5, 5, 0, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fb40 - fb4f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fb50 - fb5f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fb60 - fb6f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fb70 - fb7f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fb80 - fb8f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fb90 - fb9f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fba0 - fbaf + 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fbb0 - fbbf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fbc0 - fbcf + 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fbd0 - fbdf + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fbe0 - fbef + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fbf0 - fbff + + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fd00 - fd0f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fd10 - fd1f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fd20 - fd2f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,20,21,// fd30 - fd3f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fd40 - fd4f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fd50 - fd5f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fd60 - fd6f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fd70 - fd7f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fd80 - fd8f + 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fd90 - fd9f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fda0 - fdaf + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fdb0 - fdbf + 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0,// fdc0 - fdcf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fdd0 - fddf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fde0 - fdef + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0,// fdf0 - fdff + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fe00 - fe0f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fe10 - fe1f + 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fe20 - fe2f + 23,19,19,22,22,20,21,20,21,20,21,20,21,20,21,20,// fe30 - fe3f + 21,20,21,20,21, 0, 0, 0, 0,23,23,23,23,22,22,22,// fe40 - fe4f + 23,23,23, 0,23,23,23,23,19,20,21,20,21,20,21,23,// fe50 - fe5f + 23,23,24,19,24,24,24, 0,23,25,23,23, 0, 0, 0, 0,// fe60 - fe6f + 5, 5, 5, 0, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fe70 - fe7f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fe80 - fe8f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fe90 - fe9f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fea0 - feaf + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// feb0 - febf + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fec0 - fecf + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fed0 - fedf + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fee0 - feef + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0,16,// fef0 - feff + + 0,23,23,23,25,23,23,23,20,21,23,24,23,19,23,23,// ff00 - ff0f + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,23,23,24,24,24,23,// ff10 - ff1f + 23, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,// ff20 - ff2f + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,20,23,21,26,22,// ff30 - ff3f + 26, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// ff40 - ff4f + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,20,24,21,24, 0,// ff50 - ff5f + 0,23,20,21,23,22, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// ff60 - ff6f + 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// ff70 - ff7f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// ff80 - ff8f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4,// ff90 - ff9f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// ffa0 - ffaf + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0,// ffb0 - ffbf + 0, 0, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5,// ffc0 - ffcf + 0, 0, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 0, 0, 0,// ffd0 - ffdf + 25,25,24,26,27,25,25, 0,27,24,24,24,24,27,27, 0,// ffe0 - ffef + 0, 0, 0, 0, 0, 0, 0, 0, 0,16,16,16,27,27, 0, 0,// fff0 - ffff + +}; + + +#define UnicodeDirectionNumberBlock 3 + +static sal_Int8 UnicodeDirectionIndex[] = { + 0x03, 0x00, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, // 0000 - 07ff + 0x00, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, // 0800 - 0fff + 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, // 1000 - 17ff + 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, // 1800 - 1fff + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, // 2000 - 27ff + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x1f, // 2800 - 2fff + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 3000 - 37ff + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 3800 - 3fff + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 4000 - 47ff + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 4800 - 4fff + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 5000 - 57ff + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 5800 - 5fff + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6000 - 67ff + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6800 - 6fff + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 7000 - 77ff + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 7800 - 7fff + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 8000 - 87ff + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 8800 - 8fff + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 9000 - 97ff + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 9800 - 9fff + 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, // a000 - a7ff + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // a800 - afff + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // b000 - b7ff + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // b800 - bfff + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // c000 - c7ff + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // c800 - cfff + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // d000 - d7ff + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // d800 - dfff + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // e000 - e7ff + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // e800 - efff + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // f000 - f7ff + 0x00, 0x00, 0x00, 0x22, 0x02, 0x23, 0x24, 0x25, // f800 - ffff +}; + + +static sal_Int8 UnicodeDirectionBlockValue[] = { + 0, 10, 13, +}; + + +static sal_Int8 UnicodeDirectionValue[] = { + 18,18,18,18,18,18,18,18,18, 8, 7, 8, 9, 7,18,18,// 0000 - 000f + 18,18,18,18,18,18,18,18,18,18,18,18, 7, 7, 7, 8,// 0010 - 001f + 9,10,10, 4, 4, 4,10,10,10,10,10, 4, 6, 4, 6, 3,// 0020 - 002f + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6,10,10,10,10,10,// 0030 - 003f + 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0040 - 004f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10,10,10,10,10,// 0050 - 005f + 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0060 - 006f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10,10,10,10,18,// 0070 - 007f + 18,18,18,18,18, 7,18,18,18,18,18,18,18,18,18,18,// 0080 - 008f + 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,// 0090 - 009f + 6,10, 4, 4, 4, 4,10,10,10,10, 0,10,10,10,10,10,// 00a0 - 00af + 4, 4, 2, 2,10, 0,10,10,10, 2, 0,10,10,10,10,10,// 00b0 - 00bf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 00c0 - 00cf + 0, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0, 0, 0, 0,// 00d0 - 00df + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 00e0 - 00ef + 0, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0, 0, 0, 0,// 00f0 - 00ff + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0200 - 020f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0210 - 021f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0220 - 022f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0230 - 023f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0240 - 024f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0250 - 025f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0260 - 026f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0270 - 027f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0280 - 028f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0290 - 029f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 02a0 - 02af + 0, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0, 0, 0, 0, 0,// 02b0 - 02bf + 0, 0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 02c0 - 02cf + 0, 0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 02d0 - 02df + 0, 0, 0, 0, 0,10,10,10,10,10,10,10,10,10, 0, 0,// 02e0 - 02ef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 02f0 - 02ff + + 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,// 0300 - 030f + 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,// 0310 - 031f + 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,// 0320 - 032f + 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,// 0330 - 033f + 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17, 0,// 0340 - 034f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0350 - 035f + 17,17,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0360 - 036f + 0, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0,10, 0,// 0370 - 037f + 0, 0, 0, 0,10,10, 0,10, 0, 0, 0, 0, 0, 0, 0, 0,// 0380 - 038f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0390 - 039f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 03a0 - 03af + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 03b0 - 03bf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 03c0 - 03cf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 03d0 - 03df + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 03e0 - 03ef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 03f0 - 03ff + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0400 - 040f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0410 - 041f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0420 - 042f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0430 - 043f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0440 - 044f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0450 - 045f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0460 - 046f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0470 - 047f + 0, 0, 0,17,17,17,17, 0,17,17, 0, 0, 0, 0, 0, 0,// 0480 - 048f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0490 - 049f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 04a0 - 04af + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 04b0 - 04bf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 04c0 - 04cf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 04d0 - 04df + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 04e0 - 04ef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 04f0 - 04ff + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0500 - 050f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0510 - 051f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0520 - 052f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0530 - 053f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0540 - 054f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0550 - 055f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0560 - 056f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0570 - 057f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0,// 0580 - 058f + 0,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,// 0590 - 059f + 17,17, 0,17,17,17,17,17,17,17,17,17,17,17,17,17,// 05a0 - 05af + 17,17,17,17,17,17,17,17,17,17, 0,17,17,17, 1,17,// 05b0 - 05bf + 1,17,17, 1,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 05c0 - 05cf + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,// 05d0 - 05df + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,// 05e0 - 05ef + 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 05f0 - 05ff + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0,// 0600 - 060f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,13, 0, 0, 0,13,// 0610 - 061f + 0,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// 0620 - 062f + 13,13,13,13,13,13,13,13,13,13,13, 0, 0, 0, 0, 0,// 0630 - 063f + 13,13,13,13,13,13,13,13,13,13,13,17,17,17,17,17,// 0640 - 064f + 17,17,17,17,17,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0650 - 065f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5,13, 0, 0,// 0660 - 066f + 17,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// 0670 - 067f + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// 0680 - 068f + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// 0690 - 069f + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// 06a0 - 06af + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// 06b0 - 06bf + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// 06c0 - 06cf + 13,13,13,13,13,13,17,17,17,17,17,17,17,17,17,17,// 06d0 - 06df + 17,17,17,17,17,13,13,17,17,10,17,17,17,17, 0, 0,// 06e0 - 06ef + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,13,13,13,13,13, 0,// 06f0 - 06ff + + 13,13,13,13,13,13,13,13,13,13,13,13,13,13, 0,18,// 0700 - 070f + 13,17,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// 0710 - 071f + 13,13,13,13,13,13,13,13,13,13,13,13,13, 0, 0, 0,// 0720 - 072f + 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,// 0730 - 073f + 17,17,17,17,17,17,17,17,17,17,17, 0, 0, 0, 0, 0,// 0740 - 074f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0750 - 075f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0760 - 076f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0770 - 077f + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// 0780 - 078f + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// 0790 - 079f + 13,13,13,13,13,13,17,17,17,17,17,17,17,17,17,17,// 07a0 - 07af + 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 07b0 - 07bf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 07c0 - 07cf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 07d0 - 07df + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 07e0 - 07ef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 07f0 - 07ff + + 0,17,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0900 - 090f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0910 - 091f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0920 - 092f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,17, 0, 0, 0,// 0930 - 093f + 0,17,17,17,17,17,17,17,17, 0, 0, 0, 0,17, 0, 0,// 0940 - 094f + 0,17,17,17,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0950 - 095f + 0, 0,17,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0960 - 096f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0970 - 097f + 0,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0980 - 098f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0990 - 099f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 09a0 - 09af + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,17, 0, 0, 0,// 09b0 - 09bf + 0,17,17,17,17, 0, 0, 0, 0, 0, 0, 0, 0,17, 0, 0,// 09c0 - 09cf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 09d0 - 09df + 0, 0,17,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 09e0 - 09ef + 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 09f0 - 09ff + + 0, 0,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0a00 - 0a0f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0a10 - 0a1f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0a20 - 0a2f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,17, 0, 0, 0,// 0a30 - 0a3f + 0,17,17, 0, 0, 0, 0,17,17, 0, 0,17,17,17, 0, 0,// 0a40 - 0a4f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0a50 - 0a5f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0a60 - 0a6f + 17,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0a70 - 0a7f + 0,17,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0a80 - 0a8f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0a90 - 0a9f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0aa0 - 0aaf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,17, 0, 0, 0,// 0ab0 - 0abf + 0,17,17,17,17,17, 0,17,17, 0, 0, 0, 0,17, 0, 0,// 0ac0 - 0acf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0ad0 - 0adf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0ae0 - 0aef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0af0 - 0aff + + 0,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0b00 - 0b0f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0b10 - 0b1f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0b20 - 0b2f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,17, 0, 0,17,// 0b30 - 0b3f + 0,17,17,17, 0, 0, 0, 0, 0, 0, 0, 0, 0,17, 0, 0,// 0b40 - 0b4f + 0, 0, 0, 0, 0, 0,17, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0b50 - 0b5f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0b60 - 0b6f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0b70 - 0b7f + 0, 0,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0b80 - 0b8f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0b90 - 0b9f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0ba0 - 0baf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0bb0 - 0bbf + 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,17, 0, 0,// 0bc0 - 0bcf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0bd0 - 0bdf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0be0 - 0bef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0bf0 - 0bff + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0c00 - 0c0f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0c10 - 0c1f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0c20 - 0c2f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,17,17,// 0c30 - 0c3f + 17, 0, 0, 0, 0, 0,17,17,17, 0,17,17,17,17, 0, 0,// 0c40 - 0c4f + 0, 0, 0, 0, 0,17,17, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0c50 - 0c5f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0c60 - 0c6f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0c70 - 0c7f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0c80 - 0c8f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0c90 - 0c9f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0ca0 - 0caf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,17,// 0cb0 - 0cbf + 0, 0, 0, 0, 0, 0,17, 0, 0, 0, 0, 0,17,17, 0, 0,// 0cc0 - 0ccf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0cd0 - 0cdf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0ce0 - 0cef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0cf0 - 0cff + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0d00 - 0d0f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0d10 - 0d1f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0d20 - 0d2f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0d30 - 0d3f + 0,17,17,17, 0, 0, 0, 0, 0, 0, 0, 0, 0,17, 0, 0,// 0d40 - 0d4f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0d50 - 0d5f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0d60 - 0d6f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0d70 - 0d7f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0d80 - 0d8f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0d90 - 0d9f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0da0 - 0daf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0db0 - 0dbf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,17, 0, 0, 0, 0, 0,// 0dc0 - 0dcf + 0, 0,17,17,17, 0,17, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0dd0 - 0ddf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0de0 - 0def + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0df0 - 0dff + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0e00 - 0e0f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0e10 - 0e1f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0e20 - 0e2f + 0,17, 0, 0,17,17,17,17,17,17,17, 0, 0, 0, 0, 4,// 0e30 - 0e3f + 0, 0, 0, 0, 0, 0, 0,17,17,17,17,17,17,17,17, 0,// 0e40 - 0e4f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0e50 - 0e5f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0e60 - 0e6f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0e70 - 0e7f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0e80 - 0e8f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0e90 - 0e9f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0ea0 - 0eaf + 0,17, 0, 0,17,17,17,17,17,17, 0,17,17, 0, 0, 0,// 0eb0 - 0ebf + 0, 0, 0, 0, 0, 0, 0, 0,17,17,17,17,17,17, 0, 0,// 0ec0 - 0ecf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0ed0 - 0edf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0ee0 - 0eef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0ef0 - 0eff + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0f00 - 0f0f + 0, 0, 0, 0, 0, 0, 0, 0,17,17, 0, 0, 0, 0, 0, 0,// 0f10 - 0f1f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0f20 - 0f2f + 0, 0, 0, 0, 0,17, 0,17, 0,17,10,10,10,10, 0, 0,// 0f30 - 0f3f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0f40 - 0f4f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0f50 - 0f5f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0f60 - 0f6f + 0,17,17,17,17,17,17,17,17,17,17,17,17,17,17, 0,// 0f70 - 0f7f + 17,17,17,17,17, 0,17,17, 0, 0, 0, 0, 0, 0, 0, 0,// 0f80 - 0f8f + 17,17,17,17,17,17,17,17, 0,17,17,17,17,17,17,17,// 0f90 - 0f9f + 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,// 0fa0 - 0faf + 17,17,17,17,17,17,17,17,17,17,17,17,17, 0, 0, 0,// 0fb0 - 0fbf + 0, 0, 0, 0, 0, 0,17, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0fc0 - 0fcf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0fd0 - 0fdf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0fe0 - 0fef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0ff0 - 0fff + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1000 - 100f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1010 - 101f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,17,17,17,// 1020 - 102f + 17, 0,17, 0, 0, 0,17,17, 0,17, 0, 0, 0, 0, 0, 0,// 1030 - 103f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1040 - 104f + 0, 0, 0, 0, 0, 0, 0, 0,17,17, 0, 0, 0, 0, 0, 0,// 1050 - 105f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1060 - 106f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1070 - 107f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1080 - 108f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1090 - 109f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 10a0 - 10af + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 10b0 - 10bf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 10c0 - 10cf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 10d0 - 10df + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 10e0 - 10ef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 10f0 - 10ff + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1600 - 160f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1610 - 161f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1620 - 162f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1630 - 163f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1640 - 164f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1650 - 165f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1660 - 166f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1670 - 167f + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1680 - 168f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0, 0, 0,// 1690 - 169f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 16a0 - 16af + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 16b0 - 16bf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 16c0 - 16cf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 16d0 - 16df + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 16e0 - 16ef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 16f0 - 16ff + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1700 - 170f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1710 - 171f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1720 - 172f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1730 - 173f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1740 - 174f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1750 - 175f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1760 - 176f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1770 - 177f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1780 - 178f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1790 - 179f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 17a0 - 17af + 0, 0, 0, 0, 0, 0, 0,17,17,17,17,17,17,17, 0, 0,// 17b0 - 17bf + 0, 0, 0, 0, 0, 0,17, 0, 0,17,17,17,17,17,17,17,// 17c0 - 17cf + 17,17,17,17, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0,// 17d0 - 17df + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 17e0 - 17ef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 17f0 - 17ff + + 10,10,10,10,10,10,10,10,10,10,10,18,18,18,18, 0,// 1800 - 180f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1810 - 181f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1820 - 182f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1830 - 183f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1840 - 184f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1850 - 185f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1860 - 186f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1870 - 187f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1880 - 188f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1890 - 189f + 0, 0, 0, 0, 0, 0, 0, 0, 0,17, 0, 0, 0, 0, 0, 0,// 18a0 - 18af + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 18b0 - 18bf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 18c0 - 18cf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 18d0 - 18df + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 18e0 - 18ef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 18f0 - 18ff + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1f00 - 1f0f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1f10 - 1f1f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1f20 - 1f2f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1f30 - 1f3f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1f40 - 1f4f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1f50 - 1f5f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1f60 - 1f6f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1f70 - 1f7f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1f80 - 1f8f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1f90 - 1f9f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1fa0 - 1faf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10, 0,10,// 1fb0 - 1fbf + 10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10,10,10,// 1fc0 - 1fcf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10,10,10,// 1fd0 - 1fdf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10,10,10,// 1fe0 - 1fef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0,// 1ff0 - 1fff + + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,18,18,18, 0, 1,// 2000 - 200f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2010 - 201f + 10,10,10,10,10,10,10,10, 9, 7,11,14,16,12,15, 9,// 2020 - 202f + 4, 4, 4, 4, 4,10,10,10,10,10,10,10,10,10,10,10,// 2030 - 203f + 10,10,10,10,10,10,10, 0,10,10,10,10,10,10, 0, 0,// 2040 - 204f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2050 - 205f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,18,18,18,18,18,18,// 2060 - 206f + 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 4, 4,10,10,10, 0,// 2070 - 207f + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4,10,10,10, 0,// 2080 - 208f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2090 - 209f + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,// 20a0 - 20af + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 20b0 - 20bf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 20c0 - 20cf + 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,// 20d0 - 20df + 17,17,17,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 20e0 - 20ef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 20f0 - 20ff + + 10,10, 0,10,10,10,10, 0,10,10, 0, 0, 0, 0, 0, 0,// 2100 - 210f + 0, 0, 0, 0,10, 0,10,10,10, 0, 0, 0, 0, 0,10,10,// 2110 - 211f + 10,10,10,10, 0,10, 0,10, 0,10, 0, 0, 0, 0, 4, 0,// 2120 - 212f + 0, 0,10, 0, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0,// 2130 - 213f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2140 - 214f + 0, 0, 0,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2150 - 215f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2160 - 216f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2170 - 217f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2180 - 218f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2190 - 219f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 21a0 - 21af + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 21b0 - 21bf + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 21c0 - 21cf + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 21d0 - 21df + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 21e0 - 21ef + 10,10,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 21f0 - 21ff + + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2200 - 220f + 10,10, 4, 4,10,10,10,10,10,10,10,10,10,10,10,10,// 2210 - 221f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2220 - 222f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2230 - 223f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2240 - 224f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2250 - 225f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2260 - 226f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2270 - 227f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2280 - 228f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2290 - 229f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 22a0 - 22af + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 22b0 - 22bf + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 22c0 - 22cf + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 22d0 - 22df + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 22e0 - 22ef + 10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 22f0 - 22ff + + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2300 - 230f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2310 - 231f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2320 - 232f + 10,10,10,10,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2330 - 233f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2340 - 234f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2350 - 235f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2360 - 236f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10, 0,10,10,10,// 2370 - 237f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2380 - 238f + 10,10,10,10,10, 0,10,10,10,10,10, 0, 0, 0, 0, 0,// 2390 - 239f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 23a0 - 23af + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 23b0 - 23bf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 23c0 - 23cf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 23d0 - 23df + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 23e0 - 23ef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 23f0 - 23ff + + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2400 - 240f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2410 - 241f + 10,10,10,10,10,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2420 - 242f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2430 - 243f + 10,10,10,10,10,10,10,10,10,10,10, 0, 0, 0, 0, 0,// 2440 - 244f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2450 - 245f + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 2460 - 246f + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 2470 - 247f + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 2480 - 248f + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0,// 2490 - 249f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 24a0 - 24af + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 24b0 - 24bf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 24c0 - 24cf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 24d0 - 24df + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,// 24e0 - 24ef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 24f0 - 24ff + + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2500 - 250f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2510 - 251f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2520 - 252f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2530 - 253f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2540 - 254f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2550 - 255f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2560 - 256f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2570 - 257f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2580 - 258f + 10,10,10,10,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2590 - 259f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 25a0 - 25af + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 25b0 - 25bf + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 25c0 - 25cf + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 25d0 - 25df + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 25e0 - 25ef + 10,10,10,10,10,10,10,10, 0, 0, 0, 0, 0, 0, 0, 0,// 25f0 - 25ff + + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2600 - 260f + 10,10,10,10, 0, 0, 0, 0, 0,10,10,10,10,10,10,10,// 2610 - 261f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2620 - 262f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2630 - 263f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2640 - 264f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2650 - 265f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2660 - 266f + 10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2670 - 267f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2680 - 268f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2690 - 269f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 26a0 - 26af + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 26b0 - 26bf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 26c0 - 26cf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 26d0 - 26df + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 26e0 - 26ef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 26f0 - 26ff + + 0,10,10,10,10, 0,10,10,10,10, 0, 0,10,10,10,10,// 2700 - 270f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2710 - 271f + 10,10,10,10,10,10,10,10, 0,10,10,10,10,10,10,10,// 2720 - 272f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2730 - 273f + 10,10,10,10,10,10,10,10,10,10,10,10, 0,10, 0,10,// 2740 - 274f + 10,10,10, 0, 0, 0,10, 0,10,10,10,10,10,10,10, 0,// 2750 - 275f + 0,10,10,10,10,10,10,10, 0, 0, 0, 0, 0, 0, 0, 0,// 2760 - 276f + 0, 0, 0, 0, 0, 0,10,10,10,10,10,10,10,10,10,10,// 2770 - 277f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2780 - 278f + 10,10,10,10,10, 0, 0, 0,10,10,10,10,10,10,10,10,// 2790 - 279f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 27a0 - 27af + 0,10,10,10,10,10,10,10,10,10,10,10,10,10,10, 0,// 27b0 - 27bf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 27c0 - 27cf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 27d0 - 27df + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 27e0 - 27ef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 27f0 - 27ff + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e00 - 2e0f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e10 - 2e1f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e20 - 2e2f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e30 - 2e3f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e40 - 2e4f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e50 - 2e5f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e60 - 2e6f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e70 - 2e7f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2e80 - 2e8f + 10,10,10,10,10,10,10,10,10,10, 0,10,10,10,10,10,// 2e90 - 2e9f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2ea0 - 2eaf + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2eb0 - 2ebf + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2ec0 - 2ecf + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2ed0 - 2edf + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2ee0 - 2eef + 10,10,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2ef0 - 2eff + + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2f00 - 2f0f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2f10 - 2f1f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2f20 - 2f2f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2f30 - 2f3f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2f40 - 2f4f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2f50 - 2f5f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2f60 - 2f6f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2f70 - 2f7f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2f80 - 2f8f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2f90 - 2f9f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2fa0 - 2faf + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2fb0 - 2fbf + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2fc0 - 2fcf + 10,10,10,10,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2fd0 - 2fdf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2fe0 - 2fef + 10,10,10,10,10,10,10,10,10,10,10,10, 0, 0, 0, 0,// 2ff0 - 2fff + + 9,10,10,10,10, 0, 0, 0,10,10,10,10,10,10,10,10,// 3000 - 300f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 3010 - 301f + 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,17,17,17,17,17,17,// 3020 - 302f + 10, 0, 0, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0,10,10,// 3030 - 303f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 3040 - 304f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 3050 - 305f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 3060 - 306f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 3070 - 307f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 3080 - 308f + 0, 0, 0, 0, 0, 0, 0, 0, 0,17,17,10,10, 0, 0, 0,// 3090 - 309f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 30a0 - 30af + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 30b0 - 30bf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 30c0 - 30cf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 30d0 - 30df + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 30e0 - 30ef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0,// 30f0 - 30ff + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a400 - a40f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a410 - a41f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a420 - a42f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a430 - a43f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a440 - a44f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a450 - a45f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a460 - a46f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a470 - a47f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a480 - a48f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// a490 - a49f + 10,10, 0, 0,10,10,10,10,10,10,10,10,10,10,10,10,// a4a0 - a4af + 10,10,10,10, 0,10,10,10,10,10,10,10,10,10,10,10,// a4b0 - a4bf + 10, 0,10,10,10, 0,10, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a4c0 - a4cf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a4d0 - a4df + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a4e0 - a4ef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a4f0 - a4ff + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fb00 - fb0f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,17, 1,// fb10 - fb1f + 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1,// fb20 - fb2f + 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0,// fb30 - fb3f + 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,// fb40 - fb4f + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fb50 - fb5f + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fb60 - fb6f + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fb70 - fb7f + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fb80 - fb8f + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fb90 - fb9f + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fba0 - fbaf + 13,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fbb0 - fbbf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fbc0 - fbcf + 0, 0, 0,13,13,13,13,13,13,13,13,13,13,13,13,13,// fbd0 - fbdf + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fbe0 - fbef + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fbf0 - fbff + + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fd00 - fd0f + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fd10 - fd1f + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fd20 - fd2f + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,10,10,// fd30 - fd3f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fd40 - fd4f + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fd50 - fd5f + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fd60 - fd6f + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fd70 - fd7f + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fd80 - fd8f + 0, 0,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fd90 - fd9f + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fda0 - fdaf + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fdb0 - fdbf + 13,13,13,13,13,13,13,13, 0, 0, 0, 0, 0, 0, 0, 0,// fdc0 - fdcf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fdd0 - fddf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fde0 - fdef + 13,13,13,13,13,13,13,13,13,13,13,13, 0, 0, 0, 0,// fdf0 - fdff + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fe00 - fe0f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fe10 - fe1f + 17,17,17,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fe20 - fe2f + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// fe30 - fe3f + 10,10,10,10,10, 0, 0, 0, 0,10,10,10,10,10,10,10,// fe40 - fe4f + 6,10, 6, 0,10, 6,10,10,10,10,10,10,10,10,10, 4,// fe50 - fe5f + 10,10, 4, 4,10,10,10, 0,10, 4, 4,10, 0, 0, 0, 0,// fe60 - fe6f + 13,13,13, 0,13, 0,13,13,13,13,13,13,13,13,13,13,// fe70 - fe7f + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fe80 - fe8f + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fe90 - fe9f + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fea0 - feaf + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// feb0 - febf + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fec0 - fecf + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fed0 - fedf + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fee0 - feef + 13,13,13,13,13,13,13,13,13,13,13,13,13, 0, 0,18,// fef0 - feff + + 0,10,10, 4, 4, 4,10,10,10,10,10, 4, 6, 4, 6, 3,// ff00 - ff0f + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6,10,10,10,10,10,// ff10 - ff1f + 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// ff20 - ff2f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10,10,10,10,10,// ff30 - ff3f + 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// ff40 - ff4f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10,10,10,10, 0,// ff50 - ff5f + 0,10,10,10,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// ff60 - ff6f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// ff70 - ff7f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// ff80 - ff8f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// ff90 - ff9f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// ffa0 - ffaf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// ffb0 - ffbf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// ffc0 - ffcf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// ffd0 - ffdf + 4, 4,10,10,10, 4, 4, 0,10,10,10,10,10,10,10, 0,// ffe0 - ffef + 0, 0, 0, 0, 0, 0, 0, 0, 0,18,18,18,10,10, 0, 0,// fff0 - ffff + +}; + + +#define UnicodeScriptTypeFrom 0 +#define UnicodeScriptTypeTo 1 + +static sal_Unicode UnicodeScriptType[][2] = { + {0x0000, 0x007f}, // 0. Basic Latin + {0x0080, 0x00ff}, // 1. Latin-1 Supplement + {0x0100, 0x017f}, // 2. Latin Extended-A + {0x0180, 0x024f}, // 3. Latin Extended-B + {0x0250, 0x02af}, // 4. IPA Extensions + {0x02b0, 0x02ff}, // 5. Spacing Modifier Letters + {0x0300, 0x036f}, // 6. Combining Diacritical Marks + {0x0370, 0x03ff}, // 7. Greek + {0x0400, 0x04ff}, // 8. Cyrillic + {0x0530, 0x058f}, // 9. Armenian + {0x0590, 0x05ff}, // 10. Hebrew + {0x0600, 0x06ff}, // 11. Arabic + {0x0700, 0x074f}, // 12. Syriac + {0x0780, 0x07bf}, // 13. Thaana + {0x0900, 0x097f}, // 14. Devanagari + {0x0980, 0x09ff}, // 15. Bengali + {0x0a00, 0x0a7f}, // 16. Gurmukhi + {0x0a80, 0x0aff}, // 17. Gujarati + {0x0b00, 0x0b7f}, // 18. Oriya + {0x0b80, 0x0bff}, // 19. Tamil + {0x0c00, 0x0c7f}, // 20. Telugu + {0x0c80, 0x0cff}, // 21. Kannada + {0x0d00, 0x0d7f}, // 22. Malayalam + {0x0d80, 0x0dff}, // 23. Sinhala + {0x0e00, 0x0e7f}, // 24. Thai + {0x0e80, 0x0eff}, // 25. Lao + {0x0f00, 0x0fff}, // 26. Tibetan + {0x1000, 0x109f}, // 27. Myanmar + {0x10a0, 0x10ff}, // 28. Georgian + {0x1100, 0x11ff}, // 29. Hangul Jamo + {0x1200, 0x137f}, // 30. Ethiopic + {0x13a0, 0x13ff}, // 31. Cherokee + {0x1400, 0x167f}, // 32. Unified Canadian Aboriginal Syllabics + {0x1680, 0x169f}, // 33. Ogham + {0x16a0, 0x16ff}, // 34. Runic + {0x1780, 0x17ff}, // 35. Khmer + {0x1800, 0x18af}, // 36. Mongolian + {0x1e00, 0x1eff}, // 37. Latin Extended Additional + {0x1f00, 0x1fff}, // 38. Greek Extended + {0x2000, 0x206f}, // 39. General Punctuation + {0x2070, 0x209f}, // 40. Superscripts and Subscripts + {0x20a0, 0x20cf}, // 41. Currency Symbols + {0x20d0, 0x20ff}, // 42. Combining Marks for Symbols + {0x2100, 0x214f}, // 43. Letterlike Symbols + {0x2150, 0x218f}, // 44. Number Forms + {0x2190, 0x21ff}, // 45. Arrows + {0x2200, 0x22ff}, // 46. Mathematical Operators + {0x2300, 0x23ff}, // 47. Miscellaneous Technical + {0x2400, 0x243f}, // 48. Control Pictures + {0x2440, 0x245f}, // 49. Optical Character Recognition + {0x2460, 0x24ff}, // 50. Enclosed Alphanumerics + {0x2500, 0x257f}, // 51. Box Drawing + {0x2580, 0x259f}, // 52. Block Elements + {0x25a0, 0x25ff}, // 53. Geometric Shapes + {0x2600, 0x26ff}, // 54. Miscellaneous Symbols + {0x2700, 0x27bf}, // 55. Dingbats + {0x2800, 0x28ff}, // 56. Braille Patterns + {0x2e80, 0x2eff}, // 57. CJK Radicals Supplement + {0x2f00, 0x2fdf}, // 58. Kangxi Radicals + {0x2ff0, 0x2fff}, // 59. Ideographic Description Characters + {0x3000, 0x303f}, // 60. CJK Symbols and Punctuation + {0x3040, 0x309f}, // 61. Hiragana + {0x30a0, 0x30ff}, // 62. Katakana + {0x3100, 0x312f}, // 63. Bopomofo + {0x3130, 0x318f}, // 64. Hangul Compatibility Jamo + {0x3190, 0x319f}, // 65. Kanbun + {0x31a0, 0x31bf}, // 66. Bopomofo Extended + {0x3200, 0x32ff}, // 67. Enclosed CJK Letters and Months + {0x3300, 0x33ff}, // 68. CJK Compatibility + {0x3400, 0x4db5}, // 69. CJK Unified Ideographs Extension A + {0x4e00, 0x9fff}, // 70. CJK Unified Ideographs + {0xa000, 0xa48f}, // 71. Yi Syllables + {0xa490, 0xa4cf}, // 72. Yi Radicals + {0xac00, 0xd7a3}, // 73. Hangul Syllables + {0xd800, 0xdb7f}, // 74. High Surrogates + {0xdb80, 0xdbff}, // 75. High Private Use Surrogates + {0xdc00, 0xdfff}, // 76. Low Surrogates + {0xe000, 0xf8ff}, // 77. Private Use + {0xf900, 0xfaff}, // 78. CJK Compatibility Ideographs + {0xfb00, 0xfb4f}, // 79. Alphabetic Presentation Forms + {0xfb50, 0xfdff}, // 80. Arabic Presentation Forms-A + {0xfe20, 0xfe2f}, // 81. Combining Half Marks + {0xfe30, 0xfe4f}, // 82. CJK Compatibility Forms + {0xfe50, 0xfe6f}, // 83. Small Form Variants + {0xfe70, 0xfefe}, // 84. Arabic Presentation Forms-B + {0xfeff, 0xfeff}, // 85. kNoScript + {0xff00, 0xffef}, // 85. Halfwidth and Fullwidth Forms +}; + +#endif + diff --git a/i18nutil/source/utility/widthfolding.cxx b/i18nutil/source/utility/widthfolding.cxx new file mode 100644 index 000000000000..35119e0ee58d --- /dev/null +++ b/i18nutil/source/utility/widthfolding.cxx @@ -0,0 +1,236 @@ +/************************************************************************* + * + * $RCSfile: widthfolding.cxx,v $ + * + * $Revision: 1.2 $ + * + * last change: $Author: vg $ $Date: 2003-04-24 12:26:04 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +// prevent internal compiler error with MSVC6SP3 +#include <stl/utility> +#include <i18nutil/widthfolding.hxx> +#include <i18nutil/x_rtl_ustring.h> +#include "widthfolding_data.h" + +using namespace com::sun::star::uno; +using namespace rtl; + +namespace com { namespace sun { namespace star { namespace i18n { + +sal_Unicode widthfolding::decompose_ja_voiced_sound_marksChar2Char (sal_Unicode inChar) +{ + if (0x30a0 <= inChar && inChar <= 0x30ff) { + sal_Int16 i = inChar - 0x3040; + if (decomposition_table[i].decomposited_character_1) + return 0xFFFF; + } + return inChar; +} + +/** + * Decompose Japanese specific voiced and semi-voiced sound marks. + */ +OUString widthfolding::decompose_ja_voiced_sound_marks (const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount, Sequence< sal_Int32 >& offset, sal_Bool useOffset ) +{ + // Create a string buffer which can hold nCount * 2 + 1 characters. + // Its size may become double of nCount. + rtl_uString * newStr; + x_rtl_uString_new_WithLength( &newStr, nCount * 2 ); // defined in x_rtl_ustring.h The reference count is 0 now. + + sal_Int32 *p, position; + if (useOffset) { + // Allocate double of nCount length to offset argument. + offset.realloc( nCount * 2 ); + p = offset.getArray(); + position = startPos; + } + + // Prepare pointers of unicode character arrays. + const sal_Unicode* src = inStr.getStr() + startPos; + sal_Unicode* dst = newStr->buffer; + + // Decomposition: GA --> KA + voice-mark + while (nCount -- > 0) { + sal_Unicode c = *src++; + // see http://charts.unicode.org/Web/U3040.html Hiragana (U+3040..U+309F) + // see http://charts.unicode.org/Web/U30A0.html Katakana (U+30A0..U+30FF) + // Hiragana is not applied to decomposition. + // Only Katakana is applied to decomposition + if (0x30a0 <= c && c <= 0x30ff) { + int i = int(c - 0x3040); + sal_Unicode first = decomposition_table[i].decomposited_character_1; + if (first != 0x0000) { + *dst ++ = first; + *dst ++ = decomposition_table[i].decomposited_character_2; // second + if (useOffset) { + *p ++ = position; + *p ++ = position ++; + } + continue; + } + } + *dst ++ = c; + if (useOffset) + *p ++ = position ++; + } + *dst = (sal_Unicode) 0; + + newStr->length = sal_Int32(dst - newStr->buffer); + if (useOffset) + offset.realloc(newStr->length); + return OUString( newStr ); // defined in rtl/usrting. The reference count is increased from 0 to 1. +} + +oneToOneMapping& widthfolding::getfull2halfTable(void) +{ + static oneToOneMapping table(full2half, sizeof(full2half)); + table.makeIndex(); + return table; +} + +/** + * Compose Japanese specific voiced and semi-voiced sound marks. + */ +OUString widthfolding::compose_ja_voiced_sound_marks (const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount, Sequence< sal_Int32 >& offset, sal_Bool useOffset ) +{ + // Create a string buffer which can hold nCount + 1 characters. + // Its size may become equal to nCount or smaller. + // The reference count is 0 now. + rtl_uString * newStr = x_rtl_uString_new_WithLength( nCount ); // defined in x_rtl_ustring.h + + // Prepare pointers of unicode character arrays. + const sal_Unicode* src = inStr.getStr() + startPos; + sal_Unicode* dst = newStr->buffer; + + // This conversion algorithm requires at least one character. + if (nCount > 0) { + + // .. .. KA VOICE .. .. + // ^ ^ + // previousChar currentChar + // ^ + // position + // + // will be converted to + // .. .. GA .. .. + + sal_Int32 *p, position; + if (useOffset) { + // Allocate nCount length to offset argument. + offset.realloc( nCount ); + p = offset.getArray(); + position = startPos; + } + + // + sal_Unicode previousChar = *src ++; + sal_Unicode currentChar; + + // Composition: KA + voice-mark --> GA + while (-- nCount > 0) { + currentChar = *src ++; + // see http://charts.unicode.org/Web/U3040.html Hiragana (U+3040..U+309F) + // see http://charts.unicode.org/Web/U30A0.html Katakana (U+30A0..U+30FF) + // 0x3099 COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + // 0x309a COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK + int j = currentChar - 0x3099; // 0x3099 or 0x309a ? + if (0 <= j && j <= 1) { // 0 addresses a code point regarding 0x3099, 1 is 0x309a + int i = int(previousChar - 0x3040); // i acts as an index of array + if (0 <= i && i <= (0x30ff - 0x3040) && composition_table[i][j]) { + if (useOffset) { + position ++; + *p ++ = position ++; + } + *dst ++ = composition_table[i][j]; + previousChar = *src ++; + nCount --; + continue; + } + } + if (useOffset) + *p ++ = position ++; + *dst ++ = previousChar; + previousChar = currentChar; + } + + if (nCount == 0) { + if (useOffset) + *p = position; + *dst ++ = previousChar; + } + + *dst = (sal_Unicode) 0; + + newStr->length = sal_Int32(dst - newStr->buffer); + } + if (useOffset) + offset.realloc(newStr->length); + return OUString( newStr ); // defined in rtl/usrting. The reference count is increased from 0 to 1. +} + +oneToOneMapping& widthfolding::gethalf2fullTable(void) +{ + static oneToOneMapping table(half2full, sizeof(half2full)); + table.makeIndex(); + return table; +} + +sal_Unicode widthfolding::getCompositionChar(sal_Unicode c1, sal_Unicode c2) +{ + return composition_table[c1 - 0x3040][c2 - 0x3099]; +} + +} } } } diff --git a/i18nutil/source/utility/widthfolding_data.h b/i18nutil/source/utility/widthfolding_data.h new file mode 100644 index 000000000000..bfc8f498c484 --- /dev/null +++ b/i18nutil/source/utility/widthfolding_data.h @@ -0,0 +1,955 @@ +/************************************************************************* + * + * $RCSfile: widthfolding_data.h,v $ + * + * $Revision: 1.2 $ + * + * last change: $Author: vg $ $Date: 2003-04-24 12:26:04 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef INCLUDED_I18NUTIL_CASEFOLDING_DATA_H +#define INCLUDED_I18NUTIL_CASEFOLDING_DATA_H + +#include <i18nutil/oneToOneMapping.hxx> + +namespace com { namespace sun { namespace star { namespace i18n { + +/* + Unicode Normalization Forms + http://www.unicode.org/unicode/reports/tr15/index.html + http://www.w3.org/International/charlint/ +*/ + +typedef struct { + sal_Unicode decomposited_character_1; + sal_Unicode decomposited_character_2; +} decomposition_table_entry_t; + +const decomposition_table_entry_t decomposition_table[] = { + { 0x0000, 0x0000 }, // 0x3040 + { 0x0000, 0x0000 }, // 0x3041 HIRAGANA LETTER SMALL A + { 0x0000, 0x0000 }, // 0x3042 HIRAGANA LETTER A + { 0x0000, 0x0000 }, // 0x3043 HIRAGANA LETTER SMALL I + { 0x0000, 0x0000 }, // 0x3044 HIRAGANA LETTER I + { 0x0000, 0x0000 }, // 0x3045 HIRAGANA LETTER SMALL U + { 0x0000, 0x0000 }, // 0x3046 HIRAGANA LETTER U + { 0x0000, 0x0000 }, // 0x3047 HIRAGANA LETTER SMALL E + { 0x0000, 0x0000 }, // 0x3048 HIRAGANA LETTER E + { 0x0000, 0x0000 }, // 0x3049 HIRAGANA LETTER SMALL O + { 0x0000, 0x0000 }, // 0x304a HIRAGANA LETTER O + { 0x0000, 0x0000 }, // 0x304b HIRAGANA LETTER KA + { 0x304b, 0x3099 }, // 0x304c HIRAGANA LETTER GA --> HIRAGANA LETTER KA + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x304d HIRAGANA LETTER KI + { 0x304d, 0x3099 }, // 0x304e HIRAGANA LETTER GI --> HIRAGANA LETTER KI + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x304f HIRAGANA LETTER KU + { 0x304f, 0x3099 }, // 0x3050 HIRAGANA LETTER GU --> HIRAGANA LETTER KU + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x3051 HIRAGANA LETTER KE + { 0x3051, 0x3099 }, // 0x3052 HIRAGANA LETTER GE --> HIRAGANA LETTER KE + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x3053 HIRAGANA LETTER KO + { 0x3053, 0x3099 }, // 0x3054 HIRAGANA LETTER GO --> HIRAGANA LETTER KO + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x3055 HIRAGANA LETTER SA + { 0x3055, 0x3099 }, // 0x3056 HIRAGANA LETTER ZA --> HIRAGANA LETTER SA + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x3057 HIRAGANA LETTER SI + { 0x3057, 0x3099 }, // 0x3058 HIRAGANA LETTER ZI --> HIRAGANA LETTER SI + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x3059 HIRAGANA LETTER SU + { 0x3059, 0x3099 }, // 0x305a HIRAGANA LETTER ZU --> HIRAGANA LETTER SU + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x305b HIRAGANA LETTER SE + { 0x305b, 0x3099 }, // 0x305c HIRAGANA LETTER ZE --> HIRAGANA LETTER SE + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x305d HIRAGANA LETTER SO + { 0x305d, 0x3099 }, // 0x305e HIRAGANA LETTER ZO --> HIRAGANA LETTER SO + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x305f HIRAGANA LETTER TA + { 0x305f, 0x3099 }, // 0x3060 HIRAGANA LETTER DA --> HIRAGANA LETTER TA + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x3061 HIRAGANA LETTER TI + { 0x3061, 0x3099 }, // 0x3062 HIRAGANA LETTER DI --> HIRAGANA LETTER TI + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x3063 HIRAGANA LETTER SMALL TU + { 0x0000, 0x0000 }, // 0x3064 HIRAGANA LETTER TU + { 0x3064, 0x3099 }, // 0x3065 HIRAGANA LETTER DU --> HIRAGANA LETTER TU + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x3066 HIRAGANA LETTER TE + { 0x3066, 0x3099 }, // 0x3067 HIRAGANA LETTER DE --> HIRAGANA LETTER TE + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x3068 HIRAGANA LETTER TO + { 0x3068, 0x3099 }, // 0x3069 HIRAGANA LETTER DO --> HIRAGANA LETTER TO + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x306a HIRAGANA LETTER NA + { 0x0000, 0x0000 }, // 0x306b HIRAGANA LETTER NI + { 0x0000, 0x0000 }, // 0x306c HIRAGANA LETTER NU + { 0x0000, 0x0000 }, // 0x306d HIRAGANA LETTER NE + { 0x0000, 0x0000 }, // 0x306e HIRAGANA LETTER NO + { 0x0000, 0x0000 }, // 0x306f HIRAGANA LETTER HA + { 0x306f, 0x3099 }, // 0x3070 HIRAGANA LETTER BA --> HIRAGANA LETTER HA + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x306f, 0x309a }, // 0x3071 HIRAGANA LETTER PA --> HIRAGANA LETTER HA + COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x3072 HIRAGANA LETTER HI + { 0x3072, 0x3099 }, // 0x3073 HIRAGANA LETTER BI --> HIRAGANA LETTER HI + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x3072, 0x309a }, // 0x3074 HIRAGANA LETTER PI --> HIRAGANA LETTER HI + COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x3075 HIRAGANA LETTER HU + { 0x3075, 0x3099 }, // 0x3076 HIRAGANA LETTER BU --> HIRAGANA LETTER HU + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x3075, 0x309a }, // 0x3077 HIRAGANA LETTER PU --> HIRAGANA LETTER HU + COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x3078 HIRAGANA LETTER HE + { 0x3078, 0x3099 }, // 0x3079 HIRAGANA LETTER BE --> HIRAGANA LETTER HE + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x3078, 0x309a }, // 0x307a HIRAGANA LETTER PE --> HIRAGANA LETTER HE + COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x307b HIRAGANA LETTER HO + { 0x307b, 0x3099 }, // 0x307c HIRAGANA LETTER BO --> HIRAGANA LETTER HO + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x307b, 0x309a }, // 0x307d HIRAGANA LETTER PO --> HIRAGANA LETTER HO + COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x307e HIRAGANA LETTER MA + { 0x0000, 0x0000 }, // 0x307f HIRAGANA LETTER MI + { 0x0000, 0x0000 }, // 0x3080 HIRAGANA LETTER MU + { 0x0000, 0x0000 }, // 0x3081 HIRAGANA LETTER ME + { 0x0000, 0x0000 }, // 0x3082 HIRAGANA LETTER MO + { 0x0000, 0x0000 }, // 0x3083 HIRAGANA LETTER SMALL YA + { 0x0000, 0x0000 }, // 0x3084 HIRAGANA LETTER YA + { 0x0000, 0x0000 }, // 0x3085 HIRAGANA LETTER SMALL YU + { 0x0000, 0x0000 }, // 0x3086 HIRAGANA LETTER YU + { 0x0000, 0x0000 }, // 0x3087 HIRAGANA LETTER SMALL YO + { 0x0000, 0x0000 }, // 0x3088 HIRAGANA LETTER YO + { 0x0000, 0x0000 }, // 0x3089 HIRAGANA LETTER RA + { 0x0000, 0x0000 }, // 0x308a HIRAGANA LETTER RI + { 0x0000, 0x0000 }, // 0x308b HIRAGANA LETTER RU + { 0x0000, 0x0000 }, // 0x308c HIRAGANA LETTER RE + { 0x0000, 0x0000 }, // 0x308d HIRAGANA LETTER RO + { 0x0000, 0x0000 }, // 0x308e HIRAGANA LETTER SMALL WA + { 0x0000, 0x0000 }, // 0x308f HIRAGANA LETTER WA + { 0x0000, 0x0000 }, // 0x3090 HIRAGANA LETTER WI + { 0x0000, 0x0000 }, // 0x3091 HIRAGANA LETTER WE + { 0x0000, 0x0000 }, // 0x3092 HIRAGANA LETTER WO + { 0x0000, 0x0000 }, // 0x3093 HIRAGANA LETTER N + { 0x3046, 0x3099 }, // 0x3094 HIRAGANA LETTER VU --> HIRAGANA LETTER U + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x3095 + { 0x0000, 0x0000 }, // 0x3096 + { 0x0000, 0x0000 }, // 0x3097 + { 0x0000, 0x0000 }, // 0x3098 + { 0x0000, 0x0000 }, // 0x3099 COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x309a COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x309b KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x309c KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x309d HIRAGANA ITERATION MARK + { 0x0000, 0x0000 }, // 0x309e HIRAGANA VOICED ITERATION MARK + { 0x0000, 0x0000 }, // 0x309f + { 0x0000, 0x0000 }, // 0x30a0 + { 0x0000, 0x0000 }, // 0x30a1 KATAKANA LETTER SMALL A + { 0x0000, 0x0000 }, // 0x30a2 KATAKANA LETTER A + { 0x0000, 0x0000 }, // 0x30a3 KATAKANA LETTER SMALL I + { 0x0000, 0x0000 }, // 0x30a4 KATAKANA LETTER I + { 0x0000, 0x0000 }, // 0x30a5 KATAKANA LETTER SMALL U + { 0x0000, 0x0000 }, // 0x30a6 KATAKANA LETTER U + { 0x0000, 0x0000 }, // 0x30a7 KATAKANA LETTER SMALL E + { 0x0000, 0x0000 }, // 0x30a8 KATAKANA LETTER E + { 0x0000, 0x0000 }, // 0x30a9 KATAKANA LETTER SMALL O + { 0x0000, 0x0000 }, // 0x30aa KATAKANA LETTER O + { 0x0000, 0x0000 }, // 0x30ab KATAKANA LETTER KA + { 0x30ab, 0x3099 }, // 0x30ac KATAKANA LETTER GA --> KATAKANA LETTER KA + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x30ad KATAKANA LETTER KI + { 0x30ad, 0x3099 }, // 0x30ae KATAKANA LETTER GI --> KATAKANA LETTER KI + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x30af KATAKANA LETTER KU + { 0x30af, 0x3099 }, // 0x30b0 KATAKANA LETTER GU --> KATAKANA LETTER KU + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x30b1 KATAKANA LETTER KE + { 0x30b1, 0x3099 }, // 0x30b2 KATAKANA LETTER GE --> KATAKANA LETTER KE + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x30b3 KATAKANA LETTER KO + { 0x30b3, 0x3099 }, // 0x30b4 KATAKANA LETTER GO --> KATAKANA LETTER KO + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x30b5 KATAKANA LETTER SA + { 0x30b5, 0x3099 }, // 0x30b6 KATAKANA LETTER ZA --> KATAKANA LETTER SA + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x30b7 KATAKANA LETTER SI + { 0x30b7, 0x3099 }, // 0x30b8 KATAKANA LETTER ZI --> KATAKANA LETTER SI + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x30b9 KATAKANA LETTER SU + { 0x30b9, 0x3099 }, // 0x30ba KATAKANA LETTER ZU --> KATAKANA LETTER SU + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x30bb KATAKANA LETTER SE + { 0x30bb, 0x3099 }, // 0x30bc KATAKANA LETTER ZE --> KATAKANA LETTER SE + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x30bd KATAKANA LETTER SO + { 0x30bd, 0x3099 }, // 0x30be KATAKANA LETTER ZO --> KATAKANA LETTER SO + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x30bf KATAKANA LETTER TA + { 0x30bf, 0x3099 }, // 0x30c0 KATAKANA LETTER DA --> KATAKANA LETTER TA + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x30c1 KATAKANA LETTER TI + { 0x30c1, 0x3099 }, // 0x30c2 KATAKANA LETTER DI --> KATAKANA LETTER TI + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x30c3 KATAKANA LETTER SMALL TU + { 0x0000, 0x0000 }, // 0x30c4 KATAKANA LETTER TU + { 0x30c4, 0x3099 }, // 0x30c5 KATAKANA LETTER DU --> KATAKANA LETTER TU + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x30c6 KATAKANA LETTER TE + { 0x30c6, 0x3099 }, // 0x30c7 KATAKANA LETTER DE --> KATAKANA LETTER TE + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x30c8 KATAKANA LETTER TO + { 0x30c8, 0x3099 }, // 0x30c9 KATAKANA LETTER DO --> KATAKANA LETTER TO + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x30ca KATAKANA LETTER NA + { 0x0000, 0x0000 }, // 0x30cb KATAKANA LETTER NI + { 0x0000, 0x0000 }, // 0x30cc KATAKANA LETTER NU + { 0x0000, 0x0000 }, // 0x30cd KATAKANA LETTER NE + { 0x0000, 0x0000 }, // 0x30ce KATAKANA LETTER NO + { 0x0000, 0x0000 }, // 0x30cf KATAKANA LETTER HA + { 0x30cf, 0x3099 }, // 0x30d0 KATAKANA LETTER BA --> KATAKANA LETTER HA + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x30cf, 0x309a }, // 0x30d1 KATAKANA LETTER PA --> KATAKANA LETTER HA + COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x30d2 KATAKANA LETTER HI + { 0x30d2, 0x3099 }, // 0x30d3 KATAKANA LETTER BI --> KATAKANA LETTER HI + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x30d2, 0x309a }, // 0x30d4 KATAKANA LETTER PI --> KATAKANA LETTER HI + COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x30d5 KATAKANA LETTER HU + { 0x30d5, 0x3099 }, // 0x30d6 KATAKANA LETTER BU --> KATAKANA LETTER HU + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x30d5, 0x309a }, // 0x30d7 KATAKANA LETTER PU --> KATAKANA LETTER HU + COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x30d8 KATAKANA LETTER HE + { 0x30d8, 0x3099 }, // 0x30d9 KATAKANA LETTER BE --> KATAKANA LETTER HE + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x30d8, 0x309a }, // 0x30da KATAKANA LETTER PE --> KATAKANA LETTER HE + COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x30db KATAKANA LETTER HO + { 0x30db, 0x3099 }, // 0x30dc KATAKANA LETTER BO --> KATAKANA LETTER HO + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x30db, 0x309a }, // 0x30dd KATAKANA LETTER PO --> KATAKANA LETTER HO + COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x30de KATAKANA LETTER MA + { 0x0000, 0x0000 }, // 0x30df KATAKANA LETTER MI + { 0x0000, 0x0000 }, // 0x30e0 KATAKANA LETTER MU + { 0x0000, 0x0000 }, // 0x30e1 KATAKANA LETTER ME + { 0x0000, 0x0000 }, // 0x30e2 KATAKANA LETTER MO + { 0x0000, 0x0000 }, // 0x30e3 KATAKANA LETTER SMALL YA + { 0x0000, 0x0000 }, // 0x30e4 KATAKANA LETTER YA + { 0x0000, 0x0000 }, // 0x30e5 KATAKANA LETTER SMALL YU + { 0x0000, 0x0000 }, // 0x30e6 KATAKANA LETTER YU + { 0x0000, 0x0000 }, // 0x30e7 KATAKANA LETTER SMALL YO + { 0x0000, 0x0000 }, // 0x30e8 KATAKANA LETTER YO + { 0x0000, 0x0000 }, // 0x30e9 KATAKANA LETTER RA + { 0x0000, 0x0000 }, // 0x30ea KATAKANA LETTER RI + { 0x0000, 0x0000 }, // 0x30eb KATAKANA LETTER RU + { 0x0000, 0x0000 }, // 0x30ec KATAKANA LETTER RE + { 0x0000, 0x0000 }, // 0x30ed KATAKANA LETTER RO + { 0x0000, 0x0000 }, // 0x30ee KATAKANA LETTER SMALL WA + { 0x0000, 0x0000 }, // 0x30ef KATAKANA LETTER WA + { 0x0000, 0x0000 }, // 0x30f0 KATAKANA LETTER WI + { 0x0000, 0x0000 }, // 0x30f1 KATAKANA LETTER WE + { 0x0000, 0x0000 }, // 0x30f2 KATAKANA LETTER WO + { 0x0000, 0x0000 }, // 0x30f3 KATAKANA LETTER N + { 0x30a6, 0x3099 }, // 0x30f4 KATAKANA LETTER VU --> KATAKANA LETTER U + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x30f5 KATAKANA LETTER SMALL KA + { 0x0000, 0x0000 }, // 0x30f6 KATAKANA LETTER SMALL KE + { 0x30ef, 0x3099 }, // 0x30f7 KATAKANA LETTER VA --> KATAKANA LETTER WA + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x30f0, 0x3099 }, // 0x30f8 KATAKANA LETTER VI --> KATAKANA LETTER WI + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x30f1, 0x3099 }, // 0x30f9 KATAKANA LETTER VE --> KATAKANA LETTER WE + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x30f2, 0x3099 }, // 0x30fa KATAKANA LETTER VO --> KATAKANA LETTER WO + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x30fb KATAKANA MIDDLE DOT + { 0x0000, 0x0000 }, // 0x30fc KATAKANA-HIRAGANA PROLONGED SOUND MARK + { 0x0000, 0x0000 }, // 0x30fd KATAKANA ITERATION MARK + { 0x0000, 0x0000 }, // 0x30fe KATAKANA VOICED ITERATION MARK + { 0x0000, 0x0000 } // 0x30ff +}; + + +/* + Halfwidth and Fullwidth Forms (U+FF00..U+FFEF) + ftp://ftp.unicode.org/Public/3.0-Update/UnicodeData-3.0.0.txt + ftp://ftp.unicode.org/Public/3.0-Update/UnicodeData-3.0.0.html + http://charts.unicode.org/Web/UFF00.html +*/ + +OneToOneMappingTable_t full2half[] = { + MAKE_PAIR( 0x2190, 0xFFE9 ), // LEFTWARDS ARROW --> HALFWIDTH LEFTWARDS ARROW + MAKE_PAIR( 0x2191, 0xFFEA ), // UPWARDS ARROW --> HALFWIDTH UPWARDS ARROW + MAKE_PAIR( 0x2192, 0xFFEB ), // RIGHTWARDS ARROW --> HALFWIDTH RIGHTWARDS ARROW + MAKE_PAIR( 0x2193, 0xFFEC ), // DOWNWARDS ARROW --> HALFWIDTH DOWNWARDS ARROW + + MAKE_PAIR( 0x2212, 0x002D ), // MINUS SIGN --> HYPHEN-MINUS + + MAKE_PAIR( 0x2502, 0xFFE8 ), // BOX DRAWINGS LIGHT VERTICAL --> HALFWIDTH FORMS LIGHT VERTICAL + MAKE_PAIR( 0x25A0, 0xFFED ), // BLACK SQUARE --> HALFWIDTH BLACK SQUARE + MAKE_PAIR( 0x25CB, 0xFFEE ), // WHITE CIRCLE --> HALFWIDTH WHITE CIRCLE + MAKE_PAIR( 0x3000, 0x0020 ), // IDEOGRAPHIC SPACE --> SPACE + MAKE_PAIR( 0x3001, 0xFF64 ), // IDEOGRAPHIC COMMA --> HALFWIDTH IDEOGRAPHIC COMMA + MAKE_PAIR( 0x3002, 0xFF61 ), // IDEOGRAPHIC FULL STOP --> HALFWIDTH IDEOGRAPHIC FULL STOP + MAKE_PAIR( 0x300C, 0xFF62 ), // LEFT CORNER BRACKET --> HALFWIDTH LEFT CORNER BRACKET + MAKE_PAIR( 0x300D, 0xFF63 ), // RIGHT CORNER BRACKET --> HALFWIDTH RIGHT CORNER BRACKET + MAKE_PAIR( 0x3099, 0xFF9E ), // COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK --> HALFWIDTH KATAKANA VOICED SOUND MARK + MAKE_PAIR( 0x309A, 0xFF9F ), // COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK --> HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK + MAKE_PAIR( 0x30A1, 0xFF67 ), // KATAKANA LETTER SMALL A --> HALFWIDTH KATAKANA LETTER SMALL A + MAKE_PAIR( 0x30A2, 0xFF71 ), // KATAKANA LETTER A --> HALFWIDTH KATAKANA LETTER A + MAKE_PAIR( 0x30A3, 0xFF68 ), // KATAKANA LETTER SMALL I --> HALFWIDTH KATAKANA LETTER SMALL I + MAKE_PAIR( 0x30A4, 0xFF72 ), // KATAKANA LETTER I --> HALFWIDTH KATAKANA LETTER I + MAKE_PAIR( 0x30A5, 0xFF69 ), // KATAKANA LETTER SMALL U --> HALFWIDTH KATAKANA LETTER SMALL U + MAKE_PAIR( 0x30A6, 0xFF73 ), // KATAKANA LETTER U --> HALFWIDTH KATAKANA LETTER U + MAKE_PAIR( 0x30A7, 0xFF6A ), // KATAKANA LETTER SMALL E --> HALFWIDTH KATAKANA LETTER SMALL E + MAKE_PAIR( 0x30A8, 0xFF74 ), // KATAKANA LETTER E --> HALFWIDTH KATAKANA LETTER E + MAKE_PAIR( 0x30A9, 0xFF6B ), // KATAKANA LETTER SMALL O --> HALFWIDTH KATAKANA LETTER SMALL O + MAKE_PAIR( 0x30AA, 0xFF75 ), // KATAKANA LETTER O --> HALFWIDTH KATAKANA LETTER O + MAKE_PAIR( 0x30AB, 0xFF76 ), // KATAKANA LETTER KA --> HALFWIDTH KATAKANA LETTER KA + MAKE_PAIR( 0x30AD, 0xFF77 ), // KATAKANA LETTER KI --> HALFWIDTH KATAKANA LETTER KI + MAKE_PAIR( 0x30AF, 0xFF78 ), // KATAKANA LETTER KU --> HALFWIDTH KATAKANA LETTER KU + MAKE_PAIR( 0x30B1, 0xFF79 ), // KATAKANA LETTER KE --> HALFWIDTH KATAKANA LETTER KE + MAKE_PAIR( 0x30B3, 0xFF7A ), // KATAKANA LETTER KO --> HALFWIDTH KATAKANA LETTER KO + MAKE_PAIR( 0x30B5, 0xFF7B ), // KATAKANA LETTER SA --> HALFWIDTH KATAKANA LETTER SA + MAKE_PAIR( 0x30B7, 0xFF7C ), // KATAKANA LETTER SI --> HALFWIDTH KATAKANA LETTER SI + MAKE_PAIR( 0x30B9, 0xFF7D ), // KATAKANA LETTER SU --> HALFWIDTH KATAKANA LETTER SU + MAKE_PAIR( 0x30BB, 0xFF7E ), // KATAKANA LETTER SE --> HALFWIDTH KATAKANA LETTER SE + MAKE_PAIR( 0x30BD, 0xFF7F ), // KATAKANA LETTER SO --> HALFWIDTH KATAKANA LETTER SO + MAKE_PAIR( 0x30BF, 0xFF80 ), // KATAKANA LETTER TA --> HALFWIDTH KATAKANA LETTER TA + MAKE_PAIR( 0x30C1, 0xFF81 ), // KATAKANA LETTER TI --> HALFWIDTH KATAKANA LETTER TI + MAKE_PAIR( 0x30C3, 0xFF6F ), // KATAKANA LETTER SMALL TU --> HALFWIDTH KATAKANA LETTER SMALL TU + MAKE_PAIR( 0x30C4, 0xFF82 ), // KATAKANA LETTER TU --> HALFWIDTH KATAKANA LETTER TU + MAKE_PAIR( 0x30C6, 0xFF83 ), // KATAKANA LETTER TE --> HALFWIDTH KATAKANA LETTER TE + MAKE_PAIR( 0x30C8, 0xFF84 ), // KATAKANA LETTER TO --> HALFWIDTH KATAKANA LETTER TO + MAKE_PAIR( 0x30CA, 0xFF85 ), // KATAKANA LETTER NA --> HALFWIDTH KATAKANA LETTER NA + MAKE_PAIR( 0x30CB, 0xFF86 ), // KATAKANA LETTER NI --> HALFWIDTH KATAKANA LETTER NI + MAKE_PAIR( 0x30CC, 0xFF87 ), // KATAKANA LETTER NU --> HALFWIDTH KATAKANA LETTER NU + MAKE_PAIR( 0x30CD, 0xFF88 ), // KATAKANA LETTER NE --> HALFWIDTH KATAKANA LETTER NE + MAKE_PAIR( 0x30CE, 0xFF89 ), // KATAKANA LETTER NO --> HALFWIDTH KATAKANA LETTER NO + MAKE_PAIR( 0x30CF, 0xFF8A ), // KATAKANA LETTER HA --> HALFWIDTH KATAKANA LETTER HA + MAKE_PAIR( 0x30D2, 0xFF8B ), // KATAKANA LETTER HI --> HALFWIDTH KATAKANA LETTER HI + MAKE_PAIR( 0x30D5, 0xFF8C ), // KATAKANA LETTER HU --> HALFWIDTH KATAKANA LETTER HU + MAKE_PAIR( 0x30D8, 0xFF8D ), // KATAKANA LETTER HE --> HALFWIDTH KATAKANA LETTER HE + MAKE_PAIR( 0x30DB, 0xFF8E ), // KATAKANA LETTER HO --> HALFWIDTH KATAKANA LETTER HO + MAKE_PAIR( 0x30DE, 0xFF8F ), // KATAKANA LETTER MA --> HALFWIDTH KATAKANA LETTER MA + MAKE_PAIR( 0x30DF, 0xFF90 ), // KATAKANA LETTER MI --> HALFWIDTH KATAKANA LETTER MI + MAKE_PAIR( 0x30E0, 0xFF91 ), // KATAKANA LETTER MU --> HALFWIDTH KATAKANA LETTER MU + MAKE_PAIR( 0x30E1, 0xFF92 ), // KATAKANA LETTER ME --> HALFWIDTH KATAKANA LETTER ME + MAKE_PAIR( 0x30E2, 0xFF93 ), // KATAKANA LETTER MO --> HALFWIDTH KATAKANA LETTER MO + MAKE_PAIR( 0x30E3, 0xFF6C ), // KATAKANA LETTER SMALL YA --> HALFWIDTH KATAKANA LETTER SMALL YA + MAKE_PAIR( 0x30E4, 0xFF94 ), // KATAKANA LETTER YA --> HALFWIDTH KATAKANA LETTER YA + MAKE_PAIR( 0x30E5, 0xFF6D ), // KATAKANA LETTER SMALL YU --> HALFWIDTH KATAKANA LETTER SMALL YU + MAKE_PAIR( 0x30E6, 0xFF95 ), // KATAKANA LETTER YU --> HALFWIDTH KATAKANA LETTER YU + MAKE_PAIR( 0x30E7, 0xFF6E ), // KATAKANA LETTER SMALL YO --> HALFWIDTH KATAKANA LETTER SMALL YO + MAKE_PAIR( 0x30E8, 0xFF96 ), // KATAKANA LETTER YO --> HALFWIDTH KATAKANA LETTER YO + MAKE_PAIR( 0x30E9, 0xFF97 ), // KATAKANA LETTER RA --> HALFWIDTH KATAKANA LETTER RA + MAKE_PAIR( 0x30EA, 0xFF98 ), // KATAKANA LETTER RI --> HALFWIDTH KATAKANA LETTER RI + MAKE_PAIR( 0x30EB, 0xFF99 ), // KATAKANA LETTER RU --> HALFWIDTH KATAKANA LETTER RU + MAKE_PAIR( 0x30EC, 0xFF9A ), // KATAKANA LETTER RE --> HALFWIDTH KATAKANA LETTER RE + MAKE_PAIR( 0x30ED, 0xFF9B ), // KATAKANA LETTER RO --> HALFWIDTH KATAKANA LETTER RO + MAKE_PAIR( 0x30EF, 0xFF9C ), // KATAKANA LETTER WA --> HALFWIDTH KATAKANA LETTER WA + MAKE_PAIR( 0x30F2, 0xFF66 ), // KATAKANA LETTER WO --> HALFWIDTH KATAKANA LETTER WO + MAKE_PAIR( 0x30F3, 0xFF9D ), // KATAKANA LETTER N --> HALFWIDTH KATAKANA LETTER N + MAKE_PAIR( 0x30FB, 0xFF65 ), // KATAKANA MIDDLE DOT --> HALFWIDTH KATAKANA MIDDLE DOT + MAKE_PAIR( 0x30FC, 0xFF70 ), // KATAKANA-HIRAGANA PROLONGED SOUND MARK --> HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK + MAKE_PAIR( 0x3131, 0xFFA1 ), // HANGUL LETTER KIYEOK --> HALFWIDTH HANGUL LETTER KIYEOK + MAKE_PAIR( 0x3132, 0xFFA2 ), // HANGUL LETTER SSANGKIYEOK --> HALFWIDTH HANGUL LETTER SSANGKIYEOK + MAKE_PAIR( 0x3133, 0xFFA3 ), // HANGUL LETTER KIYEOK-SIOS --> HALFWIDTH HANGUL LETTER KIYEOK-SIOS + MAKE_PAIR( 0x3134, 0xFFA4 ), // HANGUL LETTER NIEUN --> HALFWIDTH HANGUL LETTER NIEUN + MAKE_PAIR( 0x3135, 0xFFA5 ), // HANGUL LETTER NIEUN-CIEUC --> HALFWIDTH HANGUL LETTER NIEUN-CIEUC + MAKE_PAIR( 0x3136, 0xFFA6 ), // HANGUL LETTER NIEUN-HIEUH --> HALFWIDTH HANGUL LETTER NIEUN-HIEUH + MAKE_PAIR( 0x3137, 0xFFA7 ), // HANGUL LETTER TIKEUT --> HALFWIDTH HANGUL LETTER TIKEUT + MAKE_PAIR( 0x3138, 0xFFA8 ), // HANGUL LETTER SSANGTIKEUT --> HALFWIDTH HANGUL LETTER SSANGTIKEUT + MAKE_PAIR( 0x3139, 0xFFA9 ), // HANGUL LETTER RIEUL --> HALFWIDTH HANGUL LETTER RIEUL + MAKE_PAIR( 0x313A, 0xFFAA ), // HANGUL LETTER RIEUL-KIYEOK --> HALFWIDTH HANGUL LETTER RIEUL-KIYEOK + MAKE_PAIR( 0x313B, 0xFFAB ), // HANGUL LETTER RIEUL-MIEUM --> HALFWIDTH HANGUL LETTER RIEUL-MIEUM + MAKE_PAIR( 0x313C, 0xFFAC ), // HANGUL LETTER RIEUL-PIEUP --> HALFWIDTH HANGUL LETTER RIEUL-PIEUP + MAKE_PAIR( 0x313D, 0xFFAD ), // HANGUL LETTER RIEUL-SIOS --> HALFWIDTH HANGUL LETTER RIEUL-SIOS + MAKE_PAIR( 0x313E, 0xFFAE ), // HANGUL LETTER RIEUL-THIEUTH --> HALFWIDTH HANGUL LETTER RIEUL-THIEUTH + MAKE_PAIR( 0x313F, 0xFFAF ), // HANGUL LETTER RIEUL-PHIEUPH --> HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH + MAKE_PAIR( 0x3140, 0xFFB0 ), // HANGUL LETTER RIEUL-HIEUH --> HALFWIDTH HANGUL LETTER RIEUL-HIEUH + MAKE_PAIR( 0x3141, 0xFFB1 ), // HANGUL LETTER MIEUM --> HALFWIDTH HANGUL LETTER MIEUM + MAKE_PAIR( 0x3142, 0xFFB2 ), // HANGUL LETTER PIEUP --> HALFWIDTH HANGUL LETTER PIEUP + MAKE_PAIR( 0x3143, 0xFFB3 ), // HANGUL LETTER SSANGPIEUP --> HALFWIDTH HANGUL LETTER SSANGPIEUP + MAKE_PAIR( 0x3144, 0xFFB4 ), // HANGUL LETTER PIEUP-SIOS --> HALFWIDTH HANGUL LETTER PIEUP-SIOS + MAKE_PAIR( 0x3145, 0xFFB5 ), // HANGUL LETTER SIOS --> HALFWIDTH HANGUL LETTER SIOS + MAKE_PAIR( 0x3146, 0xFFB6 ), // HANGUL LETTER SSANGSIOS --> HALFWIDTH HANGUL LETTER SSANGSIOS + MAKE_PAIR( 0x3147, 0xFFB7 ), // HANGUL LETTER IEUNG --> HALFWIDTH HANGUL LETTER IEUNG + MAKE_PAIR( 0x3148, 0xFFB8 ), // HANGUL LETTER CIEUC --> HALFWIDTH HANGUL LETTER CIEUC + MAKE_PAIR( 0x3149, 0xFFB9 ), // HANGUL LETTER SSANGCIEUC --> HALFWIDTH HANGUL LETTER SSANGCIEUC + MAKE_PAIR( 0x314A, 0xFFBA ), // HANGUL LETTER CHIEUCH --> HALFWIDTH HANGUL LETTER CHIEUCH + MAKE_PAIR( 0x314B, 0xFFBB ), // HANGUL LETTER KHIEUKH --> HALFWIDTH HANGUL LETTER KHIEUKH + MAKE_PAIR( 0x314C, 0xFFBC ), // HANGUL LETTER THIEUTH --> HALFWIDTH HANGUL LETTER THIEUTH + MAKE_PAIR( 0x314D, 0xFFBD ), // HANGUL LETTER PHIEUPH --> HALFWIDTH HANGUL LETTER PHIEUPH + MAKE_PAIR( 0x314E, 0xFFBE ), // HANGUL LETTER HIEUH --> HALFWIDTH HANGUL LETTER HIEUH + MAKE_PAIR( 0x314F, 0xFFC2 ), // HANGUL LETTER A --> HALFWIDTH HANGUL LETTER A + MAKE_PAIR( 0x3150, 0xFFC3 ), // HANGUL LETTER AE --> HALFWIDTH HANGUL LETTER AE + MAKE_PAIR( 0x3151, 0xFFC4 ), // HANGUL LETTER YA --> HALFWIDTH HANGUL LETTER YA + MAKE_PAIR( 0x3152, 0xFFC5 ), // HANGUL LETTER YAE --> HALFWIDTH HANGUL LETTER YAE + MAKE_PAIR( 0x3153, 0xFFC6 ), // HANGUL LETTER EO --> HALFWIDTH HANGUL LETTER EO + MAKE_PAIR( 0x3154, 0xFFC7 ), // HANGUL LETTER E --> HALFWIDTH HANGUL LETTER E + MAKE_PAIR( 0x3155, 0xFFCA ), // HANGUL LETTER YEO --> HALFWIDTH HANGUL LETTER YEO + MAKE_PAIR( 0x3156, 0xFFCB ), // HANGUL LETTER YE --> HALFWIDTH HANGUL LETTER YE + MAKE_PAIR( 0x3157, 0xFFCC ), // HANGUL LETTER O --> HALFWIDTH HANGUL LETTER O + MAKE_PAIR( 0x3158, 0xFFCD ), // HANGUL LETTER WA --> HALFWIDTH HANGUL LETTER WA + MAKE_PAIR( 0x3159, 0xFFCE ), // HANGUL LETTER WAE --> HALFWIDTH HANGUL LETTER WAE + MAKE_PAIR( 0x315A, 0xFFCF ), // HANGUL LETTER OE --> HALFWIDTH HANGUL LETTER OE + MAKE_PAIR( 0x315B, 0xFFD2 ), // HANGUL LETTER YO --> HALFWIDTH HANGUL LETTER YO + MAKE_PAIR( 0x315C, 0xFFD3 ), // HANGUL LETTER U --> HALFWIDTH HANGUL LETTER U + MAKE_PAIR( 0x315D, 0xFFD4 ), // HANGUL LETTER WEO --> HALFWIDTH HANGUL LETTER WEO + MAKE_PAIR( 0x315E, 0xFFD5 ), // HANGUL LETTER WE --> HALFWIDTH HANGUL LETTER WE + MAKE_PAIR( 0x315F, 0xFFD6 ), // HANGUL LETTER WI --> HALFWIDTH HANGUL LETTER WI + MAKE_PAIR( 0x3160, 0xFFD7 ), // HANGUL LETTER YU --> HALFWIDTH HANGUL LETTER YU + MAKE_PAIR( 0x3161, 0xFFDA ), // HANGUL LETTER EU --> HALFWIDTH HANGUL LETTER EU + MAKE_PAIR( 0x3162, 0xFFDB ), // HANGUL LETTER YI --> HALFWIDTH HANGUL LETTER YI + MAKE_PAIR( 0x3163, 0xFFDC ), // HANGUL LETTER I --> HALFWIDTH HANGUL LETTER I + MAKE_PAIR( 0x3164, 0xFFA0 ), // HANGUL FILLER --> HALFWIDTH HANGUL FILLER + MAKE_PAIR( 0xFF01, 0x0021 ), // FULLWIDTH EXCLAMATION MARK --> EXCLAMATION MARK + MAKE_PAIR( 0xFF02, 0x0022 ), // FULLWIDTH QUOTATION MARK --> QUOTATION MARK + MAKE_PAIR( 0xFF03, 0x0023 ), // FULLWIDTH NUMBER SIGN --> NUMBER SIGN + MAKE_PAIR( 0xFF04, 0x0024 ), // FULLWIDTH DOLLAR SIGN --> DOLLAR SIGN + MAKE_PAIR( 0xFF05, 0x0025 ), // FULLWIDTH PERCENT SIGN --> PERCENT SIGN + MAKE_PAIR( 0xFF06, 0x0026 ), // FULLWIDTH AMPERSAND --> AMPERSAND + MAKE_PAIR( 0xFF07, 0x0027 ), // FULLWIDTH APOSTROPHE --> APOSTROPHE + MAKE_PAIR( 0xFF08, 0x0028 ), // FULLWIDTH LEFT PARENTHESIS --> LEFT PARENTHESIS + MAKE_PAIR( 0xFF09, 0x0029 ), // FULLWIDTH RIGHT PARENTHESIS --> RIGHT PARENTHESIS + MAKE_PAIR( 0xFF0A, 0x002A ), // FULLWIDTH ASTERISK --> ASTERISK + MAKE_PAIR( 0xFF0B, 0x002B ), // FULLWIDTH PLUS SIGN --> PLUS SIGN + MAKE_PAIR( 0xFF0C, 0x002C ), // FULLWIDTH COMMA --> COMMA + +//MAKE_PAIR( 0xFF0D, 0x002D ), // FULLWIDTH HYPHEN-MINUS --> HYPHEN-MINUS + + MAKE_PAIR( 0xFF0E, 0x002E ), // FULLWIDTH FULL STOP --> FULL STOP + MAKE_PAIR( 0xFF0F, 0x002F ), // FULLWIDTH SOLIDUS --> SOLIDUS + MAKE_PAIR( 0xFF10, 0x0030 ), // FULLWIDTH DIGIT ZERO --> DIGIT ZERO + MAKE_PAIR( 0xFF11, 0x0031 ), // FULLWIDTH DIGIT ONE --> DIGIT ONE + MAKE_PAIR( 0xFF12, 0x0032 ), // FULLWIDTH DIGIT TWO --> DIGIT TWO + MAKE_PAIR( 0xFF13, 0x0033 ), // FULLWIDTH DIGIT THREE --> DIGIT THREE + MAKE_PAIR( 0xFF14, 0x0034 ), // FULLWIDTH DIGIT FOUR --> DIGIT FOUR + MAKE_PAIR( 0xFF15, 0x0035 ), // FULLWIDTH DIGIT FIVE --> DIGIT FIVE + MAKE_PAIR( 0xFF16, 0x0036 ), // FULLWIDTH DIGIT SIX --> DIGIT SIX + MAKE_PAIR( 0xFF17, 0x0037 ), // FULLWIDTH DIGIT SEVEN --> DIGIT SEVEN + MAKE_PAIR( 0xFF18, 0x0038 ), // FULLWIDTH DIGIT EIGHT --> DIGIT EIGHT + MAKE_PAIR( 0xFF19, 0x0039 ), // FULLWIDTH DIGIT NINE --> DIGIT NINE + MAKE_PAIR( 0xFF1A, 0x003A ), // FULLWIDTH COLON --> COLON + MAKE_PAIR( 0xFF1B, 0x003B ), // FULLWIDTH SEMICOLON --> SEMICOLON + MAKE_PAIR( 0xFF1C, 0x003C ), // FULLWIDTH LESS-THAN SIGN --> LESS-THAN SIGN + MAKE_PAIR( 0xFF1D, 0x003D ), // FULLWIDTH EQUALS SIGN --> EQUALS SIGN + MAKE_PAIR( 0xFF1E, 0x003E ), // FULLWIDTH GREATER-THAN SIGN --> GREATER-THAN SIGN + MAKE_PAIR( 0xFF1F, 0x003F ), // FULLWIDTH QUESTION MARK --> QUESTION MARK + MAKE_PAIR( 0xFF20, 0x0040 ), // FULLWIDTH COMMERCIAL AT --> COMMERCIAL AT + MAKE_PAIR( 0xFF21, 0x0041 ), // FULLWIDTH LATIN CAPITAL LETTER A --> LATIN CAPITAL LETTER A + MAKE_PAIR( 0xFF22, 0x0042 ), // FULLWIDTH LATIN CAPITAL LETTER B --> LATIN CAPITAL LETTER B + MAKE_PAIR( 0xFF23, 0x0043 ), // FULLWIDTH LATIN CAPITAL LETTER C --> LATIN CAPITAL LETTER C + MAKE_PAIR( 0xFF24, 0x0044 ), // FULLWIDTH LATIN CAPITAL LETTER D --> LATIN CAPITAL LETTER D + MAKE_PAIR( 0xFF25, 0x0045 ), // FULLWIDTH LATIN CAPITAL LETTER E --> LATIN CAPITAL LETTER E + MAKE_PAIR( 0xFF26, 0x0046 ), // FULLWIDTH LATIN CAPITAL LETTER F --> LATIN CAPITAL LETTER F + MAKE_PAIR( 0xFF27, 0x0047 ), // FULLWIDTH LATIN CAPITAL LETTER G --> LATIN CAPITAL LETTER G + MAKE_PAIR( 0xFF28, 0x0048 ), // FULLWIDTH LATIN CAPITAL LETTER H --> LATIN CAPITAL LETTER H + MAKE_PAIR( 0xFF29, 0x0049 ), // FULLWIDTH LATIN CAPITAL LETTER I --> LATIN CAPITAL LETTER I + MAKE_PAIR( 0xFF2A, 0x004A ), // FULLWIDTH LATIN CAPITAL LETTER J --> LATIN CAPITAL LETTER J + MAKE_PAIR( 0xFF2B, 0x004B ), // FULLWIDTH LATIN CAPITAL LETTER K --> LATIN CAPITAL LETTER K + MAKE_PAIR( 0xFF2C, 0x004C ), // FULLWIDTH LATIN CAPITAL LETTER L --> LATIN CAPITAL LETTER L + MAKE_PAIR( 0xFF2D, 0x004D ), // FULLWIDTH LATIN CAPITAL LETTER M --> LATIN CAPITAL LETTER M + MAKE_PAIR( 0xFF2E, 0x004E ), // FULLWIDTH LATIN CAPITAL LETTER N --> LATIN CAPITAL LETTER N + MAKE_PAIR( 0xFF2F, 0x004F ), // FULLWIDTH LATIN CAPITAL LETTER O --> LATIN CAPITAL LETTER O + MAKE_PAIR( 0xFF30, 0x0050 ), // FULLWIDTH LATIN CAPITAL LETTER P --> LATIN CAPITAL LETTER P + MAKE_PAIR( 0xFF31, 0x0051 ), // FULLWIDTH LATIN CAPITAL LETTER Q --> LATIN CAPITAL LETTER Q + MAKE_PAIR( 0xFF32, 0x0052 ), // FULLWIDTH LATIN CAPITAL LETTER R --> LATIN CAPITAL LETTER R + MAKE_PAIR( 0xFF33, 0x0053 ), // FULLWIDTH LATIN CAPITAL LETTER S --> LATIN CAPITAL LETTER S + MAKE_PAIR( 0xFF34, 0x0054 ), // FULLWIDTH LATIN CAPITAL LETTER T --> LATIN CAPITAL LETTER T + MAKE_PAIR( 0xFF35, 0x0055 ), // FULLWIDTH LATIN CAPITAL LETTER U --> LATIN CAPITAL LETTER U + MAKE_PAIR( 0xFF36, 0x0056 ), // FULLWIDTH LATIN CAPITAL LETTER V --> LATIN CAPITAL LETTER V + MAKE_PAIR( 0xFF37, 0x0057 ), // FULLWIDTH LATIN CAPITAL LETTER W --> LATIN CAPITAL LETTER W + MAKE_PAIR( 0xFF38, 0x0058 ), // FULLWIDTH LATIN CAPITAL LETTER X --> LATIN CAPITAL LETTER X + MAKE_PAIR( 0xFF39, 0x0059 ), // FULLWIDTH LATIN CAPITAL LETTER Y --> LATIN CAPITAL LETTER Y + MAKE_PAIR( 0xFF3A, 0x005A ), // FULLWIDTH LATIN CAPITAL LETTER Z --> LATIN CAPITAL LETTER Z + MAKE_PAIR( 0xFF3B, 0x005B ), // FULLWIDTH LEFT SQUARE BRACKET --> LEFT SQUARE BRACKET + MAKE_PAIR( 0xFF3C, 0x005C ), // FULLWIDTH REVERSE SOLIDUS --> REVERSE SOLIDUS + MAKE_PAIR( 0xFF3D, 0x005D ), // FULLWIDTH RIGHT SQUARE BRACKET --> RIGHT SQUARE BRACKET + MAKE_PAIR( 0xFF3E, 0x005E ), // FULLWIDTH CIRCUMFLEX ACCENT --> CIRCUMFLEX ACCENT + MAKE_PAIR( 0xFF3F, 0x005F ), // FULLWIDTH LOW LINE --> LOW LINE + MAKE_PAIR( 0xFF40, 0x0060 ), // FULLWIDTH GRAVE ACCENT --> GRAVE ACCENT + MAKE_PAIR( 0xFF41, 0x0061 ), // FULLWIDTH LATIN SMALL LETTER A --> LATIN SMALL LETTER A + MAKE_PAIR( 0xFF42, 0x0062 ), // FULLWIDTH LATIN SMALL LETTER B --> LATIN SMALL LETTER B + MAKE_PAIR( 0xFF43, 0x0063 ), // FULLWIDTH LATIN SMALL LETTER C --> LATIN SMALL LETTER C + MAKE_PAIR( 0xFF44, 0x0064 ), // FULLWIDTH LATIN SMALL LETTER D --> LATIN SMALL LETTER D + MAKE_PAIR( 0xFF45, 0x0065 ), // FULLWIDTH LATIN SMALL LETTER E --> LATIN SMALL LETTER E + MAKE_PAIR( 0xFF46, 0x0066 ), // FULLWIDTH LATIN SMALL LETTER F --> LATIN SMALL LETTER F + MAKE_PAIR( 0xFF47, 0x0067 ), // FULLWIDTH LATIN SMALL LETTER G --> LATIN SMALL LETTER G + MAKE_PAIR( 0xFF48, 0x0068 ), // FULLWIDTH LATIN SMALL LETTER H --> LATIN SMALL LETTER H + MAKE_PAIR( 0xFF49, 0x0069 ), // FULLWIDTH LATIN SMALL LETTER I --> LATIN SMALL LETTER I + MAKE_PAIR( 0xFF4A, 0x006A ), // FULLWIDTH LATIN SMALL LETTER J --> LATIN SMALL LETTER J + MAKE_PAIR( 0xFF4B, 0x006B ), // FULLWIDTH LATIN SMALL LETTER K --> LATIN SMALL LETTER K + MAKE_PAIR( 0xFF4C, 0x006C ), // FULLWIDTH LATIN SMALL LETTER L --> LATIN SMALL LETTER L + MAKE_PAIR( 0xFF4D, 0x006D ), // FULLWIDTH LATIN SMALL LETTER M --> LATIN SMALL LETTER M + MAKE_PAIR( 0xFF4E, 0x006E ), // FULLWIDTH LATIN SMALL LETTER N --> LATIN SMALL LETTER N + MAKE_PAIR( 0xFF4F, 0x006F ), // FULLWIDTH LATIN SMALL LETTER O --> LATIN SMALL LETTER O + MAKE_PAIR( 0xFF50, 0x0070 ), // FULLWIDTH LATIN SMALL LETTER P --> LATIN SMALL LETTER P + MAKE_PAIR( 0xFF51, 0x0071 ), // FULLWIDTH LATIN SMALL LETTER Q --> LATIN SMALL LETTER Q + MAKE_PAIR( 0xFF52, 0x0072 ), // FULLWIDTH LATIN SMALL LETTER R --> LATIN SMALL LETTER R + MAKE_PAIR( 0xFF53, 0x0073 ), // FULLWIDTH LATIN SMALL LETTER S --> LATIN SMALL LETTER S + MAKE_PAIR( 0xFF54, 0x0074 ), // FULLWIDTH LATIN SMALL LETTER T --> LATIN SMALL LETTER T + MAKE_PAIR( 0xFF55, 0x0075 ), // FULLWIDTH LATIN SMALL LETTER U --> LATIN SMALL LETTER U + MAKE_PAIR( 0xFF56, 0x0076 ), // FULLWIDTH LATIN SMALL LETTER V --> LATIN SMALL LETTER V + MAKE_PAIR( 0xFF57, 0x0077 ), // FULLWIDTH LATIN SMALL LETTER W --> LATIN SMALL LETTER W + MAKE_PAIR( 0xFF58, 0x0078 ), // FULLWIDTH LATIN SMALL LETTER X --> LATIN SMALL LETTER X + MAKE_PAIR( 0xFF59, 0x0079 ), // FULLWIDTH LATIN SMALL LETTER Y --> LATIN SMALL LETTER Y + MAKE_PAIR( 0xFF5A, 0x007A ), // FULLWIDTH LATIN SMALL LETTER Z --> LATIN SMALL LETTER Z + MAKE_PAIR( 0xFF5B, 0x007B ), // FULLWIDTH LEFT CURLY BRACKET --> LEFT CURLY BRACKET + MAKE_PAIR( 0xFF5C, 0x007C ), // FULLWIDTH VERTICAL LINE --> VERTICAL LINE + MAKE_PAIR( 0xFF5D, 0x007D ), // FULLWIDTH RIGHT CURLY BRACKET --> RIGHT CURLY BRACKET + MAKE_PAIR( 0xFF5E, 0x007E ), // FULLWIDTH TILDE --> TILDE + MAKE_PAIR( 0xFFE0, 0x00A2 ), // FULLWIDTH CENT SIGN --> CENT SIGN + MAKE_PAIR( 0xFFE1, 0x00A3 ), // FULLWIDTH POUND SIGN --> POUND SIGN + MAKE_PAIR( 0xFFE2, 0x00AC ), // FULLWIDTH NOT SIGN --> NOT SIGN + MAKE_PAIR( 0xFFE3, 0x00AF ), // FULLWIDTH MACRON --> MACRON + MAKE_PAIR( 0xFFE4, 0x00A6 ), // FULLWIDTH BROKEN BAR --> BROKEN BAR + MAKE_PAIR( 0xFFE5, 0x00A5 ), // FULLWIDTH YEN SIGN --> YEN SIGN + MAKE_PAIR( 0xFFE6, 0x20A9 ) // FULLWIDTH WON SIGN --> WON SIGN +}; + +/* + Unicode Normalization Forms + http://www.unicode.org/unicode/reports/tr15/index.html + http://www.w3.org/International/charlint/ +*/ + +const sal_Unicode composition_table[][2] = { + { 0x0000, 0x0000 }, // 0x3040 + { 0x0000, 0x0000 }, // 0x3041 HIRAGANA LETTER SMALL A + { 0x0000, 0x0000 }, // 0x3042 HIRAGANA LETTER A + { 0x0000, 0x0000 }, // 0x3043 HIRAGANA LETTER SMALL I + { 0x0000, 0x0000 }, // 0x3044 HIRAGANA LETTER I + { 0x0000, 0x0000 }, // 0x3045 HIRAGANA LETTER SMALL U + { 0x3094, 0x0000 }, // 0x3046 HIRAGANA LETTER U --> HIRAGANA LETTER VU + { 0x0000, 0x0000 }, // 0x3047 HIRAGANA LETTER SMALL E + { 0x0000, 0x0000 }, // 0x3048 HIRAGANA LETTER E + { 0x0000, 0x0000 }, // 0x3049 HIRAGANA LETTER SMALL O + { 0x0000, 0x0000 }, // 0x304a HIRAGANA LETTER O + { 0x304c, 0x0000 }, // 0x304b HIRAGANA LETTER KA --> HIRAGANA LETTER GA + { 0x0000, 0x0000 }, // 0x304c HIRAGANA LETTER GA + { 0x304e, 0x0000 }, // 0x304d HIRAGANA LETTER KI --> HIRAGANA LETTER GI + { 0x0000, 0x0000 }, // 0x304e HIRAGANA LETTER GI + { 0x3050, 0x0000 }, // 0x304f HIRAGANA LETTER KU --> HIRAGANA LETTER GU + { 0x0000, 0x0000 }, // 0x3050 HIRAGANA LETTER GU + { 0x3052, 0x0000 }, // 0x3051 HIRAGANA LETTER KE --> HIRAGANA LETTER GE + { 0x0000, 0x0000 }, // 0x3052 HIRAGANA LETTER GE + { 0x3054, 0x0000 }, // 0x3053 HIRAGANA LETTER KO --> HIRAGANA LETTER GO + { 0x0000, 0x0000 }, // 0x3054 HIRAGANA LETTER GO + { 0x3056, 0x0000 }, // 0x3055 HIRAGANA LETTER SA --> HIRAGANA LETTER ZA + { 0x0000, 0x0000 }, // 0x3056 HIRAGANA LETTER ZA + { 0x3058, 0x0000 }, // 0x3057 HIRAGANA LETTER SI --> HIRAGANA LETTER ZI + { 0x0000, 0x0000 }, // 0x3058 HIRAGANA LETTER ZI + { 0x305a, 0x0000 }, // 0x3059 HIRAGANA LETTER SU --> HIRAGANA LETTER ZU + { 0x0000, 0x0000 }, // 0x305a HIRAGANA LETTER ZU + { 0x305c, 0x0000 }, // 0x305b HIRAGANA LETTER SE --> HIRAGANA LETTER ZE + { 0x0000, 0x0000 }, // 0x305c HIRAGANA LETTER ZE + { 0x305e, 0x0000 }, // 0x305d HIRAGANA LETTER SO --> HIRAGANA LETTER ZO + { 0x0000, 0x0000 }, // 0x305e HIRAGANA LETTER ZO + { 0x3060, 0x0000 }, // 0x305f HIRAGANA LETTER TA --> HIRAGANA LETTER DA + { 0x0000, 0x0000 }, // 0x3060 HIRAGANA LETTER DA + { 0x3062, 0x0000 }, // 0x3061 HIRAGANA LETTER TI --> HIRAGANA LETTER DI + { 0x0000, 0x0000 }, // 0x3062 HIRAGANA LETTER DI + { 0x0000, 0x0000 }, // 0x3063 HIRAGANA LETTER SMALL TU + { 0x3065, 0x0000 }, // 0x3064 HIRAGANA LETTER TU --> HIRAGANA LETTER DU + { 0x0000, 0x0000 }, // 0x3065 HIRAGANA LETTER DU + { 0x3067, 0x0000 }, // 0x3066 HIRAGANA LETTER TE --> HIRAGANA LETTER DE + { 0x0000, 0x0000 }, // 0x3067 HIRAGANA LETTER DE + { 0x3069, 0x0000 }, // 0x3068 HIRAGANA LETTER TO --> HIRAGANA LETTER DO + { 0x0000, 0x0000 }, // 0x3069 HIRAGANA LETTER DO + { 0x0000, 0x0000 }, // 0x306a HIRAGANA LETTER NA + { 0x0000, 0x0000 }, // 0x306b HIRAGANA LETTER NI + { 0x0000, 0x0000 }, // 0x306c HIRAGANA LETTER NU + { 0x0000, 0x0000 }, // 0x306d HIRAGANA LETTER NE + { 0x0000, 0x0000 }, // 0x306e HIRAGANA LETTER NO + { 0x3070, 0x3071 }, // 0x306f HIRAGANA LETTER HA --> HIRAGANA LETTER BA or HIRAGANA LETTER PA + { 0x0000, 0x0000 }, // 0x3070 HIRAGANA LETTER BA + { 0x0000, 0x0000 }, // 0x3071 HIRAGANA LETTER PA + { 0x3073, 0x3074 }, // 0x3072 HIRAGANA LETTER HI --> HIRAGANA LETTER BI or HIRAGANA LETTER PI + { 0x0000, 0x0000 }, // 0x3073 HIRAGANA LETTER BI + { 0x0000, 0x0000 }, // 0x3074 HIRAGANA LETTER PI + { 0x3076, 0x3077 }, // 0x3075 HIRAGANA LETTER HU --> HIRAGANA LETTER BU or HIRAGANA LETTER PU + { 0x0000, 0x0000 }, // 0x3076 HIRAGANA LETTER BU + { 0x0000, 0x0000 }, // 0x3077 HIRAGANA LETTER PU + { 0x3079, 0x307a }, // 0x3078 HIRAGANA LETTER HE --> HIRAGANA LETTER BE or HIRAGANA LETTER PE + { 0x0000, 0x0000 }, // 0x3079 HIRAGANA LETTER BE + { 0x0000, 0x0000 }, // 0x307a HIRAGANA LETTER PE + { 0x307c, 0x307d }, // 0x307b HIRAGANA LETTER HO --> HIRAGANA LETTER BO or HIRAGANA LETTER PO + { 0x0000, 0x0000 }, // 0x307c HIRAGANA LETTER BO + { 0x0000, 0x0000 }, // 0x307d HIRAGANA LETTER PO + { 0x0000, 0x0000 }, // 0x307e HIRAGANA LETTER MA + { 0x0000, 0x0000 }, // 0x307f HIRAGANA LETTER MI + { 0x0000, 0x0000 }, // 0x3080 HIRAGANA LETTER MU + { 0x0000, 0x0000 }, // 0x3081 HIRAGANA LETTER ME + { 0x0000, 0x0000 }, // 0x3082 HIRAGANA LETTER MO + { 0x0000, 0x0000 }, // 0x3083 HIRAGANA LETTER SMALL YA + { 0x0000, 0x0000 }, // 0x3084 HIRAGANA LETTER YA + { 0x0000, 0x0000 }, // 0x3085 HIRAGANA LETTER SMALL YU + { 0x0000, 0x0000 }, // 0x3086 HIRAGANA LETTER YU + { 0x0000, 0x0000 }, // 0x3087 HIRAGANA LETTER SMALL YO + { 0x0000, 0x0000 }, // 0x3088 HIRAGANA LETTER YO + { 0x0000, 0x0000 }, // 0x3089 HIRAGANA LETTER RA + { 0x0000, 0x0000 }, // 0x308a HIRAGANA LETTER RI + { 0x0000, 0x0000 }, // 0x308b HIRAGANA LETTER RU + { 0x0000, 0x0000 }, // 0x308c HIRAGANA LETTER RE + { 0x0000, 0x0000 }, // 0x308d HIRAGANA LETTER RO + { 0x0000, 0x0000 }, // 0x308e HIRAGANA LETTER SMALL WA + { 0x0000, 0x0000 }, // 0x308f HIRAGANA LETTER WA + { 0x0000, 0x0000 }, // 0x3090 HIRAGANA LETTER WI + { 0x0000, 0x0000 }, // 0x3091 HIRAGANA LETTER WE + { 0x0000, 0x0000 }, // 0x3092 HIRAGANA LETTER WO + { 0x0000, 0x0000 }, // 0x3093 HIRAGANA LETTER N + { 0x0000, 0x0000 }, // 0x3094 HIRAGANA LETTER VU + { 0x0000, 0x0000 }, // 0x3095 + { 0x0000, 0x0000 }, // 0x3096 + { 0x0000, 0x0000 }, // 0x3097 + { 0x0000, 0x0000 }, // 0x3098 + { 0x0000, 0x0000 }, // 0x3099 COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x309a COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x309b KATAKANA-HIRAGANA VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x309c KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK + { 0x0000, 0x0000 }, // 0x309d HIRAGANA ITERATION MARK + { 0x0000, 0x0000 }, // 0x309e HIRAGANA VOICED ITERATION MARK + { 0x0000, 0x0000 }, // 0x309f + { 0x0000, 0x0000 }, // 0x30a0 + { 0x0000, 0x0000 }, // 0x30a1 KATAKANA LETTER SMALL A + { 0x0000, 0x0000 }, // 0x30a2 KATAKANA LETTER A + { 0x0000, 0x0000 }, // 0x30a3 KATAKANA LETTER SMALL I + { 0x0000, 0x0000 }, // 0x30a4 KATAKANA LETTER I + { 0x0000, 0x0000 }, // 0x30a5 KATAKANA LETTER SMALL U + { 0x30f4, 0x0000 }, // 0x30a6 KATAKANA LETTER U --> KATAKANA LETTER VU + { 0x0000, 0x0000 }, // 0x30a7 KATAKANA LETTER SMALL E + { 0x0000, 0x0000 }, // 0x30a8 KATAKANA LETTER E + { 0x0000, 0x0000 }, // 0x30a9 KATAKANA LETTER SMALL O + { 0x0000, 0x0000 }, // 0x30aa KATAKANA LETTER O + { 0x30ac, 0x0000 }, // 0x30ab KATAKANA LETTER KA --> KATAKANA LETTER GA + { 0x0000, 0x0000 }, // 0x30ac KATAKANA LETTER GA + { 0x30ae, 0x0000 }, // 0x30ad KATAKANA LETTER KI --> KATAKANA LETTER GI + { 0x0000, 0x0000 }, // 0x30ae KATAKANA LETTER GI + { 0x30b0, 0x0000 }, // 0x30af KATAKANA LETTER KU --> KATAKANA LETTER GU + { 0x0000, 0x0000 }, // 0x30b0 KATAKANA LETTER GU + { 0x30b2, 0x0000 }, // 0x30b1 KATAKANA LETTER KE --> KATAKANA LETTER GE + { 0x0000, 0x0000 }, // 0x30b2 KATAKANA LETTER GE + { 0x30b4, 0x0000 }, // 0x30b3 KATAKANA LETTER KO --> KATAKANA LETTER GO + { 0x0000, 0x0000 }, // 0x30b4 KATAKANA LETTER GO + { 0x30b6, 0x0000 }, // 0x30b5 KATAKANA LETTER SA --> KATAKANA LETTER ZA + { 0x0000, 0x0000 }, // 0x30b6 KATAKANA LETTER ZA + { 0x30b8, 0x0000 }, // 0x30b7 KATAKANA LETTER SI --> KATAKANA LETTER ZI + { 0x0000, 0x0000 }, // 0x30b8 KATAKANA LETTER ZI + { 0x30ba, 0x0000 }, // 0x30b9 KATAKANA LETTER SU --> KATAKANA LETTER ZU + { 0x0000, 0x0000 }, // 0x30ba KATAKANA LETTER ZU + { 0x30bc, 0x0000 }, // 0x30bb KATAKANA LETTER SE --> KATAKANA LETTER ZE + { 0x0000, 0x0000 }, // 0x30bc KATAKANA LETTER ZE + { 0x30be, 0x0000 }, // 0x30bd KATAKANA LETTER SO --> KATAKANA LETTER ZO + { 0x0000, 0x0000 }, // 0x30be KATAKANA LETTER ZO + { 0x30c0, 0x0000 }, // 0x30bf KATAKANA LETTER TA --> KATAKANA LETTER DA + { 0x0000, 0x0000 }, // 0x30c0 KATAKANA LETTER DA + { 0x30c2, 0x0000 }, // 0x30c1 KATAKANA LETTER TI --> KATAKANA LETTER DI + { 0x0000, 0x0000 }, // 0x30c2 KATAKANA LETTER DI + { 0x0000, 0x0000 }, // 0x30c3 KATAKANA LETTER SMALL TU + { 0x30c5, 0x0000 }, // 0x30c4 KATAKANA LETTER TU --> KATAKANA LETTER DU + { 0x0000, 0x0000 }, // 0x30c5 KATAKANA LETTER DU + { 0x30c7, 0x0000 }, // 0x30c6 KATAKANA LETTER TE --> KATAKANA LETTER DE + { 0x0000, 0x0000 }, // 0x30c7 KATAKANA LETTER DE + { 0x30c9, 0x0000 }, // 0x30c8 KATAKANA LETTER TO --> KATAKANA LETTER DO + { 0x0000, 0x0000 }, // 0x30c9 KATAKANA LETTER DO + { 0x0000, 0x0000 }, // 0x30ca KATAKANA LETTER NA + { 0x0000, 0x0000 }, // 0x30cb KATAKANA LETTER NI + { 0x0000, 0x0000 }, // 0x30cc KATAKANA LETTER NU + { 0x0000, 0x0000 }, // 0x30cd KATAKANA LETTER NE + { 0x0000, 0x0000 }, // 0x30ce KATAKANA LETTER NO + { 0x30d0, 0x30d1 }, // 0x30cf KATAKANA LETTER HA --> KATAKANA LETTER BA or KATAKANA LETTER PA + { 0x0000, 0x0000 }, // 0x30d0 KATAKANA LETTER BA + { 0x0000, 0x0000 }, // 0x30d1 KATAKANA LETTER PA + { 0x30d3, 0x30d4 }, // 0x30d2 KATAKANA LETTER HI --> KATAKANA LETTER BI or KATAKANA LETTER PI + { 0x0000, 0x0000 }, // 0x30d3 KATAKANA LETTER BI + { 0x0000, 0x0000 }, // 0x30d4 KATAKANA LETTER PI + { 0x30d6, 0x30d7 }, // 0x30d5 KATAKANA LETTER HU --> KATAKANA LETTER BU or KATAKANA LETTER PU + { 0x0000, 0x0000 }, // 0x30d6 KATAKANA LETTER BU + { 0x0000, 0x0000 }, // 0x30d7 KATAKANA LETTER PU + { 0x30d9, 0x30da }, // 0x30d8 KATAKANA LETTER HE --> KATAKANA LETTER BE or KATAKANA LETTER PE + { 0x0000, 0x0000 }, // 0x30d9 KATAKANA LETTER BE + { 0x0000, 0x0000 }, // 0x30da KATAKANA LETTER PE + { 0x30dc, 0x30dd }, // 0x30db KATAKANA LETTER HO --> KATAKANA LETTER BO or KATAKANA LETTER PO + { 0x0000, 0x0000 }, // 0x30dc KATAKANA LETTER BO + { 0x0000, 0x0000 }, // 0x30dd KATAKANA LETTER PO + { 0x0000, 0x0000 }, // 0x30de KATAKANA LETTER MA + { 0x0000, 0x0000 }, // 0x30df KATAKANA LETTER MI + { 0x0000, 0x0000 }, // 0x30e0 KATAKANA LETTER MU + { 0x0000, 0x0000 }, // 0x30e1 KATAKANA LETTER ME + { 0x0000, 0x0000 }, // 0x30e2 KATAKANA LETTER MO + { 0x0000, 0x0000 }, // 0x30e3 KATAKANA LETTER SMALL YA + { 0x0000, 0x0000 }, // 0x30e4 KATAKANA LETTER YA + { 0x0000, 0x0000 }, // 0x30e5 KATAKANA LETTER SMALL YU + { 0x0000, 0x0000 }, // 0x30e6 KATAKANA LETTER YU + { 0x0000, 0x0000 }, // 0x30e7 KATAKANA LETTER SMALL YO + { 0x0000, 0x0000 }, // 0x30e8 KATAKANA LETTER YO + { 0x0000, 0x0000 }, // 0x30e9 KATAKANA LETTER RA + { 0x0000, 0x0000 }, // 0x30ea KATAKANA LETTER RI + { 0x0000, 0x0000 }, // 0x30eb KATAKANA LETTER RU + { 0x0000, 0x0000 }, // 0x30ec KATAKANA LETTER RE + { 0x0000, 0x0000 }, // 0x30ed KATAKANA LETTER RO + { 0x0000, 0x0000 }, // 0x30ee KATAKANA LETTER SMALL WA + { 0x30f7, 0x0000 }, // 0x30ef KATAKANA LETTER WA --> KATAKANA LETTER VA + { 0x30f8, 0x0000 }, // 0x30f0 KATAKANA LETTER WI --> KATAKANA LETTER VI + { 0x30f9, 0x0000 }, // 0x30f1 KATAKANA LETTER WE --> KATAKANA LETTER VE + { 0x30fa, 0x0000 }, // 0x30f2 KATAKANA LETTER WO --> KATAKANA LETTER VO + { 0x0000, 0x0000 }, // 0x30f3 KATAKANA LETTER N + { 0x0000, 0x0000 }, // 0x30f4 KATAKANA LETTER VU + { 0x0000, 0x0000 }, // 0x30f5 KATAKANA LETTER SMALL KA + { 0x0000, 0x0000 }, // 0x30f6 KATAKANA LETTER SMALL KE + { 0x0000, 0x0000 }, // 0x30f7 KATAKANA LETTER VA + { 0x0000, 0x0000 }, // 0x30f8 KATAKANA LETTER VI + { 0x0000, 0x0000 }, // 0x30f9 KATAKANA LETTER VE + { 0x0000, 0x0000 }, // 0x30fa KATAKANA LETTER VO + { 0x0000, 0x0000 }, // 0x30fb KATAKANA MIDDLE DOT + { 0x0000, 0x0000 }, // 0x30fc KATAKANA-HIRAGANA PROLONGED SOUND MARK + { 0x0000, 0x0000 }, // 0x30fd KATAKANA ITERATION MARK + { 0x0000, 0x0000 }, // 0x30fe KATAKANA VOICED ITERATION MARK + { 0x0000, 0x0000 } // 0x30ff +}; + + +/* + Halfwidth and Fullwidth Forms (U+FF00..U+FFEF) + ftp://ftp.unicode.org/Public/3.0-Update/UnicodeData-3.0.0.txt + ftp://ftp.unicode.org/Public/3.0-Update/UnicodeData-3.0.0.html + http://charts.unicode.org/Web/UFF00.html +*/ + +OneToOneMappingTable_t half2full[] = { + MAKE_PAIR( 0x0020, 0x3000 ), // SPACE --> IDEOGRAPHIC SPACE + MAKE_PAIR( 0x0021, 0xFF01 ), // EXCLAMATION MARK --> FULLWIDTH EXCLAMATION MARK + MAKE_PAIR( 0x0022, 0xFF02 ), // QUOTATION MARK --> FULLWIDTH QUOTATION MARK + MAKE_PAIR( 0x0023, 0xFF03 ), // NUMBER SIGN --> FULLWIDTH NUMBER SIGN + MAKE_PAIR( 0x0024, 0xFF04 ), // DOLLAR SIGN --> FULLWIDTH DOLLAR SIGN + MAKE_PAIR( 0x0025, 0xFF05 ), // PERCENT SIGN --> FULLWIDTH PERCENT SIGN + MAKE_PAIR( 0x0026, 0xFF06 ), // AMPERSAND --> FULLWIDTH AMPERSAND + MAKE_PAIR( 0x0027, 0xFF07 ), // APOSTROPHE --> FULLWIDTH APOSTROPHE + MAKE_PAIR( 0x0028, 0xFF08 ), // LEFT PARENTHESIS --> FULLWIDTH LEFT PARENTHESIS + MAKE_PAIR( 0x0029, 0xFF09 ), // RIGHT PARENTHESIS --> FULLWIDTH RIGHT PARENTHESIS + MAKE_PAIR( 0x002A, 0xFF0A ), // ASTERISK --> FULLWIDTH ASTERISK + MAKE_PAIR( 0x002B, 0xFF0B ), // PLUS SIGN --> FULLWIDTH PLUS SIGN + MAKE_PAIR( 0x002C, 0xFF0C ), // COMMA --> FULLWIDTH COMMA + +//MAKE_PAIR( 0x002D, 0xFF0D ), // HYPHEN-MINUS --> FULLWIDTH HYPHEN-MINUS + MAKE_PAIR( 0x002D, 0x2212 ), // HYPHEN-MINUS --> MINUS SIGN + + MAKE_PAIR( 0x002E, 0xFF0E ), // FULL STOP --> FULLWIDTH FULL STOP + MAKE_PAIR( 0x002F, 0xFF0F ), // SOLIDUS --> FULLWIDTH SOLIDUS + MAKE_PAIR( 0x0030, 0xFF10 ), // DIGIT ZERO --> FULLWIDTH DIGIT ZERO + MAKE_PAIR( 0x0031, 0xFF11 ), // DIGIT ONE --> FULLWIDTH DIGIT ONE + MAKE_PAIR( 0x0032, 0xFF12 ), // DIGIT TWO --> FULLWIDTH DIGIT TWO + MAKE_PAIR( 0x0033, 0xFF13 ), // DIGIT THREE --> FULLWIDTH DIGIT THREE + MAKE_PAIR( 0x0034, 0xFF14 ), // DIGIT FOUR --> FULLWIDTH DIGIT FOUR + MAKE_PAIR( 0x0035, 0xFF15 ), // DIGIT FIVE --> FULLWIDTH DIGIT FIVE + MAKE_PAIR( 0x0036, 0xFF16 ), // DIGIT SIX --> FULLWIDTH DIGIT SIX + MAKE_PAIR( 0x0037, 0xFF17 ), // DIGIT SEVEN --> FULLWIDTH DIGIT SEVEN + MAKE_PAIR( 0x0038, 0xFF18 ), // DIGIT EIGHT --> FULLWIDTH DIGIT EIGHT + MAKE_PAIR( 0x0039, 0xFF19 ), // DIGIT NINE --> FULLWIDTH DIGIT NINE + MAKE_PAIR( 0x003A, 0xFF1A ), // COLON --> FULLWIDTH COLON + MAKE_PAIR( 0x003B, 0xFF1B ), // SEMICOLON --> FULLWIDTH SEMICOLON + MAKE_PAIR( 0x003C, 0xFF1C ), // LESS-THAN SIGN --> FULLWIDTH LESS-THAN SIGN + MAKE_PAIR( 0x003D, 0xFF1D ), // EQUALS SIGN --> FULLWIDTH EQUALS SIGN + MAKE_PAIR( 0x003E, 0xFF1E ), // GREATER-THAN SIGN --> FULLWIDTH GREATER-THAN SIGN + MAKE_PAIR( 0x003F, 0xFF1F ), // QUESTION MARK --> FULLWIDTH QUESTION MARK + MAKE_PAIR( 0x0040, 0xFF20 ), // COMMERCIAL AT --> FULLWIDTH COMMERCIAL AT + MAKE_PAIR( 0x0041, 0xFF21 ), // LATIN CAPITAL LETTER A --> FULLWIDTH LATIN CAPITAL LETTER A + MAKE_PAIR( 0x0042, 0xFF22 ), // LATIN CAPITAL LETTER B --> FULLWIDTH LATIN CAPITAL LETTER B + MAKE_PAIR( 0x0043, 0xFF23 ), // LATIN CAPITAL LETTER C --> FULLWIDTH LATIN CAPITAL LETTER C + MAKE_PAIR( 0x0044, 0xFF24 ), // LATIN CAPITAL LETTER D --> FULLWIDTH LATIN CAPITAL LETTER D + MAKE_PAIR( 0x0045, 0xFF25 ), // LATIN CAPITAL LETTER E --> FULLWIDTH LATIN CAPITAL LETTER E + MAKE_PAIR( 0x0046, 0xFF26 ), // LATIN CAPITAL LETTER F --> FULLWIDTH LATIN CAPITAL LETTER F + MAKE_PAIR( 0x0047, 0xFF27 ), // LATIN CAPITAL LETTER G --> FULLWIDTH LATIN CAPITAL LETTER G + MAKE_PAIR( 0x0048, 0xFF28 ), // LATIN CAPITAL LETTER H --> FULLWIDTH LATIN CAPITAL LETTER H + MAKE_PAIR( 0x0049, 0xFF29 ), // LATIN CAPITAL LETTER I --> FULLWIDTH LATIN CAPITAL LETTER I + MAKE_PAIR( 0x004A, 0xFF2A ), // LATIN CAPITAL LETTER J --> FULLWIDTH LATIN CAPITAL LETTER J + MAKE_PAIR( 0x004B, 0xFF2B ), // LATIN CAPITAL LETTER K --> FULLWIDTH LATIN CAPITAL LETTER K + MAKE_PAIR( 0x004C, 0xFF2C ), // LATIN CAPITAL LETTER L --> FULLWIDTH LATIN CAPITAL LETTER L + MAKE_PAIR( 0x004D, 0xFF2D ), // LATIN CAPITAL LETTER M --> FULLWIDTH LATIN CAPITAL LETTER M + MAKE_PAIR( 0x004E, 0xFF2E ), // LATIN CAPITAL LETTER N --> FULLWIDTH LATIN CAPITAL LETTER N + MAKE_PAIR( 0x004F, 0xFF2F ), // LATIN CAPITAL LETTER O --> FULLWIDTH LATIN CAPITAL LETTER O + MAKE_PAIR( 0x0050, 0xFF30 ), // LATIN CAPITAL LETTER P --> FULLWIDTH LATIN CAPITAL LETTER P + MAKE_PAIR( 0x0051, 0xFF31 ), // LATIN CAPITAL LETTER Q --> FULLWIDTH LATIN CAPITAL LETTER Q + MAKE_PAIR( 0x0052, 0xFF32 ), // LATIN CAPITAL LETTER R --> FULLWIDTH LATIN CAPITAL LETTER R + MAKE_PAIR( 0x0053, 0xFF33 ), // LATIN CAPITAL LETTER S --> FULLWIDTH LATIN CAPITAL LETTER S + MAKE_PAIR( 0x0054, 0xFF34 ), // LATIN CAPITAL LETTER T --> FULLWIDTH LATIN CAPITAL LETTER T + MAKE_PAIR( 0x0055, 0xFF35 ), // LATIN CAPITAL LETTER U --> FULLWIDTH LATIN CAPITAL LETTER U + MAKE_PAIR( 0x0056, 0xFF36 ), // LATIN CAPITAL LETTER V --> FULLWIDTH LATIN CAPITAL LETTER V + MAKE_PAIR( 0x0057, 0xFF37 ), // LATIN CAPITAL LETTER W --> FULLWIDTH LATIN CAPITAL LETTER W + MAKE_PAIR( 0x0058, 0xFF38 ), // LATIN CAPITAL LETTER X --> FULLWIDTH LATIN CAPITAL LETTER X + MAKE_PAIR( 0x0059, 0xFF39 ), // LATIN CAPITAL LETTER Y --> FULLWIDTH LATIN CAPITAL LETTER Y + MAKE_PAIR( 0x005A, 0xFF3A ), // LATIN CAPITAL LETTER Z --> FULLWIDTH LATIN CAPITAL LETTER Z + MAKE_PAIR( 0x005B, 0xFF3B ), // LEFT SQUARE BRACKET --> FULLWIDTH LEFT SQUARE BRACKET + MAKE_PAIR( 0x005C, 0xFF3C ), // REVERSE SOLIDUS --> FULLWIDTH REVERSE SOLIDUS + MAKE_PAIR( 0x005D, 0xFF3D ), // RIGHT SQUARE BRACKET --> FULLWIDTH RIGHT SQUARE BRACKET + MAKE_PAIR( 0x005E, 0xFF3E ), // CIRCUMFLEX ACCENT --> FULLWIDTH CIRCUMFLEX ACCENT + MAKE_PAIR( 0x005F, 0xFF3F ), // LOW LINE --> FULLWIDTH LOW LINE + MAKE_PAIR( 0x0060, 0xFF40 ), // GRAVE ACCENT --> FULLWIDTH GRAVE ACCENT + MAKE_PAIR( 0x0061, 0xFF41 ), // LATIN SMALL LETTER A --> FULLWIDTH LATIN SMALL LETTER A + MAKE_PAIR( 0x0062, 0xFF42 ), // LATIN SMALL LETTER B --> FULLWIDTH LATIN SMALL LETTER B + MAKE_PAIR( 0x0063, 0xFF43 ), // LATIN SMALL LETTER C --> FULLWIDTH LATIN SMALL LETTER C + MAKE_PAIR( 0x0064, 0xFF44 ), // LATIN SMALL LETTER D --> FULLWIDTH LATIN SMALL LETTER D + MAKE_PAIR( 0x0065, 0xFF45 ), // LATIN SMALL LETTER E --> FULLWIDTH LATIN SMALL LETTER E + MAKE_PAIR( 0x0066, 0xFF46 ), // LATIN SMALL LETTER F --> FULLWIDTH LATIN SMALL LETTER F + MAKE_PAIR( 0x0067, 0xFF47 ), // LATIN SMALL LETTER G --> FULLWIDTH LATIN SMALL LETTER G + MAKE_PAIR( 0x0068, 0xFF48 ), // LATIN SMALL LETTER H --> FULLWIDTH LATIN SMALL LETTER H + MAKE_PAIR( 0x0069, 0xFF49 ), // LATIN SMALL LETTER I --> FULLWIDTH LATIN SMALL LETTER I + MAKE_PAIR( 0x006A, 0xFF4A ), // LATIN SMALL LETTER J --> FULLWIDTH LATIN SMALL LETTER J + MAKE_PAIR( 0x006B, 0xFF4B ), // LATIN SMALL LETTER K --> FULLWIDTH LATIN SMALL LETTER K + MAKE_PAIR( 0x006C, 0xFF4C ), // LATIN SMALL LETTER L --> FULLWIDTH LATIN SMALL LETTER L + MAKE_PAIR( 0x006D, 0xFF4D ), // LATIN SMALL LETTER M --> FULLWIDTH LATIN SMALL LETTER M + MAKE_PAIR( 0x006E, 0xFF4E ), // LATIN SMALL LETTER N --> FULLWIDTH LATIN SMALL LETTER N + MAKE_PAIR( 0x006F, 0xFF4F ), // LATIN SMALL LETTER O --> FULLWIDTH LATIN SMALL LETTER O + MAKE_PAIR( 0x0070, 0xFF50 ), // LATIN SMALL LETTER P --> FULLWIDTH LATIN SMALL LETTER P + MAKE_PAIR( 0x0071, 0xFF51 ), // LATIN SMALL LETTER Q --> FULLWIDTH LATIN SMALL LETTER Q + MAKE_PAIR( 0x0072, 0xFF52 ), // LATIN SMALL LETTER R --> FULLWIDTH LATIN SMALL LETTER R + MAKE_PAIR( 0x0073, 0xFF53 ), // LATIN SMALL LETTER S --> FULLWIDTH LATIN SMALL LETTER S + MAKE_PAIR( 0x0074, 0xFF54 ), // LATIN SMALL LETTER T --> FULLWIDTH LATIN SMALL LETTER T + MAKE_PAIR( 0x0075, 0xFF55 ), // LATIN SMALL LETTER U --> FULLWIDTH LATIN SMALL LETTER U + MAKE_PAIR( 0x0076, 0xFF56 ), // LATIN SMALL LETTER V --> FULLWIDTH LATIN SMALL LETTER V + MAKE_PAIR( 0x0077, 0xFF57 ), // LATIN SMALL LETTER W --> FULLWIDTH LATIN SMALL LETTER W + MAKE_PAIR( 0x0078, 0xFF58 ), // LATIN SMALL LETTER X --> FULLWIDTH LATIN SMALL LETTER X + MAKE_PAIR( 0x0079, 0xFF59 ), // LATIN SMALL LETTER Y --> FULLWIDTH LATIN SMALL LETTER Y + MAKE_PAIR( 0x007A, 0xFF5A ), // LATIN SMALL LETTER Z --> FULLWIDTH LATIN SMALL LETTER Z + MAKE_PAIR( 0x007B, 0xFF5B ), // LEFT CURLY BRACKET --> FULLWIDTH LEFT CURLY BRACKET + MAKE_PAIR( 0x007C, 0xFF5C ), // VERTICAL LINE --> FULLWIDTH VERTICAL LINE + MAKE_PAIR( 0x007D, 0xFF5D ), // RIGHT CURLY BRACKET --> FULLWIDTH RIGHT CURLY BRACKET + MAKE_PAIR( 0x007E, 0xFF5E ), // TILDE --> FULLWIDTH TILDE + MAKE_PAIR( 0x00A2, 0xFFE0 ), // CENT SIGN --> FULLWIDTH CENT SIGN + MAKE_PAIR( 0x00A3, 0xFFE1 ), // POUND SIGN --> FULLWIDTH POUND SIGN + MAKE_PAIR( 0x00A5, 0xFFE5 ), // YEN SIGN --> FULLWIDTH YEN SIGN + MAKE_PAIR( 0x00A6, 0xFFE4 ), // BROKEN BAR --> FULLWIDTH BROKEN BAR + MAKE_PAIR( 0x00AC, 0xFFE2 ), // NOT SIGN --> FULLWIDTH NOT SIGN + MAKE_PAIR( 0x00AF, 0xFFE3 ), // MACRON --> FULLWIDTH MACRON + MAKE_PAIR( 0x20A9, 0xFFE6 ), // WON SIGN --> FULLWIDTH WON SIGN + MAKE_PAIR( 0xFF61, 0x3002 ), // HALFWIDTH IDEOGRAPHIC FULL STOP --> IDEOGRAPHIC FULL STOP + MAKE_PAIR( 0xFF62, 0x300C ), // HALFWIDTH LEFT CORNER BRACKET --> LEFT CORNER BRACKET + MAKE_PAIR( 0xFF63, 0x300D ), // HALFWIDTH RIGHT CORNER BRACKET --> RIGHT CORNER BRACKET + MAKE_PAIR( 0xFF64, 0x3001 ), // HALFWIDTH IDEOGRAPHIC COMMA --> IDEOGRAPHIC COMMA + MAKE_PAIR( 0xFF65, 0x30FB ), // HALFWIDTH KATAKANA MIDDLE DOT --> KATAKANA MIDDLE DOT + MAKE_PAIR( 0xFF66, 0x30F2 ), // HALFWIDTH KATAKANA LETTER WO --> KATAKANA LETTER WO + MAKE_PAIR( 0xFF67, 0x30A1 ), // HALFWIDTH KATAKANA LETTER SMALL A --> KATAKANA LETTER SMALL A + MAKE_PAIR( 0xFF68, 0x30A3 ), // HALFWIDTH KATAKANA LETTER SMALL I --> KATAKANA LETTER SMALL I + MAKE_PAIR( 0xFF69, 0x30A5 ), // HALFWIDTH KATAKANA LETTER SMALL U --> KATAKANA LETTER SMALL U + MAKE_PAIR( 0xFF6A, 0x30A7 ), // HALFWIDTH KATAKANA LETTER SMALL E --> KATAKANA LETTER SMALL E + MAKE_PAIR( 0xFF6B, 0x30A9 ), // HALFWIDTH KATAKANA LETTER SMALL O --> KATAKANA LETTER SMALL O + MAKE_PAIR( 0xFF6C, 0x30E3 ), // HALFWIDTH KATAKANA LETTER SMALL YA --> KATAKANA LETTER SMALL YA + MAKE_PAIR( 0xFF6D, 0x30E5 ), // HALFWIDTH KATAKANA LETTER SMALL YU --> KATAKANA LETTER SMALL YU + MAKE_PAIR( 0xFF6E, 0x30E7 ), // HALFWIDTH KATAKANA LETTER SMALL YO --> KATAKANA LETTER SMALL YO + MAKE_PAIR( 0xFF6F, 0x30C3 ), // HALFWIDTH KATAKANA LETTER SMALL TU --> KATAKANA LETTER SMALL TU + MAKE_PAIR( 0xFF70, 0x30FC ), // HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK --> KATAKANA-HIRAGANA PROLONGED SOUND MARK + MAKE_PAIR( 0xFF71, 0x30A2 ), // HALFWIDTH KATAKANA LETTER A --> KATAKANA LETTER A + MAKE_PAIR( 0xFF72, 0x30A4 ), // HALFWIDTH KATAKANA LETTER I --> KATAKANA LETTER I + MAKE_PAIR( 0xFF73, 0x30A6 ), // HALFWIDTH KATAKANA LETTER U --> KATAKANA LETTER U + MAKE_PAIR( 0xFF74, 0x30A8 ), // HALFWIDTH KATAKANA LETTER E --> KATAKANA LETTER E + MAKE_PAIR( 0xFF75, 0x30AA ), // HALFWIDTH KATAKANA LETTER O --> KATAKANA LETTER O + MAKE_PAIR( 0xFF76, 0x30AB ), // HALFWIDTH KATAKANA LETTER KA --> KATAKANA LETTER KA + MAKE_PAIR( 0xFF77, 0x30AD ), // HALFWIDTH KATAKANA LETTER KI --> KATAKANA LETTER KI + MAKE_PAIR( 0xFF78, 0x30AF ), // HALFWIDTH KATAKANA LETTER KU --> KATAKANA LETTER KU + MAKE_PAIR( 0xFF79, 0x30B1 ), // HALFWIDTH KATAKANA LETTER KE --> KATAKANA LETTER KE + MAKE_PAIR( 0xFF7A, 0x30B3 ), // HALFWIDTH KATAKANA LETTER KO --> KATAKANA LETTER KO + MAKE_PAIR( 0xFF7B, 0x30B5 ), // HALFWIDTH KATAKANA LETTER SA --> KATAKANA LETTER SA + MAKE_PAIR( 0xFF7C, 0x30B7 ), // HALFWIDTH KATAKANA LETTER SI --> KATAKANA LETTER SI + MAKE_PAIR( 0xFF7D, 0x30B9 ), // HALFWIDTH KATAKANA LETTER SU --> KATAKANA LETTER SU + MAKE_PAIR( 0xFF7E, 0x30BB ), // HALFWIDTH KATAKANA LETTER SE --> KATAKANA LETTER SE + MAKE_PAIR( 0xFF7F, 0x30BD ), // HALFWIDTH KATAKANA LETTER SO --> KATAKANA LETTER SO + MAKE_PAIR( 0xFF80, 0x30BF ), // HALFWIDTH KATAKANA LETTER TA --> KATAKANA LETTER TA + MAKE_PAIR( 0xFF81, 0x30C1 ), // HALFWIDTH KATAKANA LETTER TI --> KATAKANA LETTER TI + MAKE_PAIR( 0xFF82, 0x30C4 ), // HALFWIDTH KATAKANA LETTER TU --> KATAKANA LETTER TU + MAKE_PAIR( 0xFF83, 0x30C6 ), // HALFWIDTH KATAKANA LETTER TE --> KATAKANA LETTER TE + MAKE_PAIR( 0xFF84, 0x30C8 ), // HALFWIDTH KATAKANA LETTER TO --> KATAKANA LETTER TO + MAKE_PAIR( 0xFF85, 0x30CA ), // HALFWIDTH KATAKANA LETTER NA --> KATAKANA LETTER NA + MAKE_PAIR( 0xFF86, 0x30CB ), // HALFWIDTH KATAKANA LETTER NI --> KATAKANA LETTER NI + MAKE_PAIR( 0xFF87, 0x30CC ), // HALFWIDTH KATAKANA LETTER NU --> KATAKANA LETTER NU + MAKE_PAIR( 0xFF88, 0x30CD ), // HALFWIDTH KATAKANA LETTER NE --> KATAKANA LETTER NE + MAKE_PAIR( 0xFF89, 0x30CE ), // HALFWIDTH KATAKANA LETTER NO --> KATAKANA LETTER NO + MAKE_PAIR( 0xFF8A, 0x30CF ), // HALFWIDTH KATAKANA LETTER HA --> KATAKANA LETTER HA + MAKE_PAIR( 0xFF8B, 0x30D2 ), // HALFWIDTH KATAKANA LETTER HI --> KATAKANA LETTER HI + MAKE_PAIR( 0xFF8C, 0x30D5 ), // HALFWIDTH KATAKANA LETTER HU --> KATAKANA LETTER HU + MAKE_PAIR( 0xFF8D, 0x30D8 ), // HALFWIDTH KATAKANA LETTER HE --> KATAKANA LETTER HE + MAKE_PAIR( 0xFF8E, 0x30DB ), // HALFWIDTH KATAKANA LETTER HO --> KATAKANA LETTER HO + MAKE_PAIR( 0xFF8F, 0x30DE ), // HALFWIDTH KATAKANA LETTER MA --> KATAKANA LETTER MA + MAKE_PAIR( 0xFF90, 0x30DF ), // HALFWIDTH KATAKANA LETTER MI --> KATAKANA LETTER MI + MAKE_PAIR( 0xFF91, 0x30E0 ), // HALFWIDTH KATAKANA LETTER MU --> KATAKANA LETTER MU + MAKE_PAIR( 0xFF92, 0x30E1 ), // HALFWIDTH KATAKANA LETTER ME --> KATAKANA LETTER ME + MAKE_PAIR( 0xFF93, 0x30E2 ), // HALFWIDTH KATAKANA LETTER MO --> KATAKANA LETTER MO + MAKE_PAIR( 0xFF94, 0x30E4 ), // HALFWIDTH KATAKANA LETTER YA --> KATAKANA LETTER YA + MAKE_PAIR( 0xFF95, 0x30E6 ), // HALFWIDTH KATAKANA LETTER YU --> KATAKANA LETTER YU + MAKE_PAIR( 0xFF96, 0x30E8 ), // HALFWIDTH KATAKANA LETTER YO --> KATAKANA LETTER YO + MAKE_PAIR( 0xFF97, 0x30E9 ), // HALFWIDTH KATAKANA LETTER RA --> KATAKANA LETTER RA + MAKE_PAIR( 0xFF98, 0x30EA ), // HALFWIDTH KATAKANA LETTER RI --> KATAKANA LETTER RI + MAKE_PAIR( 0xFF99, 0x30EB ), // HALFWIDTH KATAKANA LETTER RU --> KATAKANA LETTER RU + MAKE_PAIR( 0xFF9A, 0x30EC ), // HALFWIDTH KATAKANA LETTER RE --> KATAKANA LETTER RE + MAKE_PAIR( 0xFF9B, 0x30ED ), // HALFWIDTH KATAKANA LETTER RO --> KATAKANA LETTER RO + MAKE_PAIR( 0xFF9C, 0x30EF ), // HALFWIDTH KATAKANA LETTER WA --> KATAKANA LETTER WA + MAKE_PAIR( 0xFF9D, 0x30F3 ), // HALFWIDTH KATAKANA LETTER N --> KATAKANA LETTER N + MAKE_PAIR( 0xFF9E, 0x3099 ), // HALFWIDTH KATAKANA VOICED SOUND MARK --> COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + MAKE_PAIR( 0xFF9F, 0x309A ), // HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK --> COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK + MAKE_PAIR( 0xFFA0, 0x3164 ), // HALFWIDTH HANGUL FILLER --> HANGUL FILLER + MAKE_PAIR( 0xFFA1, 0x3131 ), // HALFWIDTH HANGUL LETTER KIYEOK --> HANGUL LETTER KIYEOK + MAKE_PAIR( 0xFFA2, 0x3132 ), // HALFWIDTH HANGUL LETTER SSANGKIYEOK --> HANGUL LETTER SSANGKIYEOK + MAKE_PAIR( 0xFFA3, 0x3133 ), // HALFWIDTH HANGUL LETTER KIYEOK-SIOS --> HANGUL LETTER KIYEOK-SIOS + MAKE_PAIR( 0xFFA4, 0x3134 ), // HALFWIDTH HANGUL LETTER NIEUN --> HANGUL LETTER NIEUN + MAKE_PAIR( 0xFFA5, 0x3135 ), // HALFWIDTH HANGUL LETTER NIEUN-CIEUC --> HANGUL LETTER NIEUN-CIEUC + MAKE_PAIR( 0xFFA6, 0x3136 ), // HALFWIDTH HANGUL LETTER NIEUN-HIEUH --> HANGUL LETTER NIEUN-HIEUH + MAKE_PAIR( 0xFFA7, 0x3137 ), // HALFWIDTH HANGUL LETTER TIKEUT --> HANGUL LETTER TIKEUT + MAKE_PAIR( 0xFFA8, 0x3138 ), // HALFWIDTH HANGUL LETTER SSANGTIKEUT --> HANGUL LETTER SSANGTIKEUT + MAKE_PAIR( 0xFFA9, 0x3139 ), // HALFWIDTH HANGUL LETTER RIEUL --> HANGUL LETTER RIEUL + MAKE_PAIR( 0xFFAA, 0x313A ), // HALFWIDTH HANGUL LETTER RIEUL-KIYEOK --> HANGUL LETTER RIEUL-KIYEOK + MAKE_PAIR( 0xFFAB, 0x313B ), // HALFWIDTH HANGUL LETTER RIEUL-MIEUM --> HANGUL LETTER RIEUL-MIEUM + MAKE_PAIR( 0xFFAC, 0x313C ), // HALFWIDTH HANGUL LETTER RIEUL-PIEUP --> HANGUL LETTER RIEUL-PIEUP + MAKE_PAIR( 0xFFAD, 0x313D ), // HALFWIDTH HANGUL LETTER RIEUL-SIOS --> HANGUL LETTER RIEUL-SIOS + MAKE_PAIR( 0xFFAE, 0x313E ), // HALFWIDTH HANGUL LETTER RIEUL-THIEUTH --> HANGUL LETTER RIEUL-THIEUTH + MAKE_PAIR( 0xFFAF, 0x313F ), // HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH --> HANGUL LETTER RIEUL-PHIEUPH + MAKE_PAIR( 0xFFB0, 0x3140 ), // HALFWIDTH HANGUL LETTER RIEUL-HIEUH --> HANGUL LETTER RIEUL-HIEUH + MAKE_PAIR( 0xFFB1, 0x3141 ), // HALFWIDTH HANGUL LETTER MIEUM --> HANGUL LETTER MIEUM + MAKE_PAIR( 0xFFB2, 0x3142 ), // HALFWIDTH HANGUL LETTER PIEUP --> HANGUL LETTER PIEUP + MAKE_PAIR( 0xFFB3, 0x3143 ), // HALFWIDTH HANGUL LETTER SSANGPIEUP --> HANGUL LETTER SSANGPIEUP + MAKE_PAIR( 0xFFB4, 0x3144 ), // HALFWIDTH HANGUL LETTER PIEUP-SIOS --> HANGUL LETTER PIEUP-SIOS + MAKE_PAIR( 0xFFB5, 0x3145 ), // HALFWIDTH HANGUL LETTER SIOS --> HANGUL LETTER SIOS + MAKE_PAIR( 0xFFB6, 0x3146 ), // HALFWIDTH HANGUL LETTER SSANGSIOS --> HANGUL LETTER SSANGSIOS + MAKE_PAIR( 0xFFB7, 0x3147 ), // HALFWIDTH HANGUL LETTER IEUNG --> HANGUL LETTER IEUNG + MAKE_PAIR( 0xFFB8, 0x3148 ), // HALFWIDTH HANGUL LETTER CIEUC --> HANGUL LETTER CIEUC + MAKE_PAIR( 0xFFB9, 0x3149 ), // HALFWIDTH HANGUL LETTER SSANGCIEUC --> HANGUL LETTER SSANGCIEUC + MAKE_PAIR( 0xFFBA, 0x314A ), // HALFWIDTH HANGUL LETTER CHIEUCH --> HANGUL LETTER CHIEUCH + MAKE_PAIR( 0xFFBB, 0x314B ), // HALFWIDTH HANGUL LETTER KHIEUKH --> HANGUL LETTER KHIEUKH + MAKE_PAIR( 0xFFBC, 0x314C ), // HALFWIDTH HANGUL LETTER THIEUTH --> HANGUL LETTER THIEUTH + MAKE_PAIR( 0xFFBD, 0x314D ), // HALFWIDTH HANGUL LETTER PHIEUPH --> HANGUL LETTER PHIEUPH + MAKE_PAIR( 0xFFBE, 0x314E ), // HALFWIDTH HANGUL LETTER HIEUH --> HANGUL LETTER HIEUH + MAKE_PAIR( 0xFFC2, 0x314F ), // HALFWIDTH HANGUL LETTER A --> HANGUL LETTER A + MAKE_PAIR( 0xFFC3, 0x3150 ), // HALFWIDTH HANGUL LETTER AE --> HANGUL LETTER AE + MAKE_PAIR( 0xFFC4, 0x3151 ), // HALFWIDTH HANGUL LETTER YA --> HANGUL LETTER YA + MAKE_PAIR( 0xFFC5, 0x3152 ), // HALFWIDTH HANGUL LETTER YAE --> HANGUL LETTER YAE + MAKE_PAIR( 0xFFC6, 0x3153 ), // HALFWIDTH HANGUL LETTER EO --> HANGUL LETTER EO + MAKE_PAIR( 0xFFC7, 0x3154 ), // HALFWIDTH HANGUL LETTER E --> HANGUL LETTER E + MAKE_PAIR( 0xFFCA, 0x3155 ), // HALFWIDTH HANGUL LETTER YEO --> HANGUL LETTER YEO + MAKE_PAIR( 0xFFCB, 0x3156 ), // HALFWIDTH HANGUL LETTER YE --> HANGUL LETTER YE + MAKE_PAIR( 0xFFCC, 0x3157 ), // HALFWIDTH HANGUL LETTER O --> HANGUL LETTER O + MAKE_PAIR( 0xFFCD, 0x3158 ), // HALFWIDTH HANGUL LETTER WA --> HANGUL LETTER WA + MAKE_PAIR( 0xFFCE, 0x3159 ), // HALFWIDTH HANGUL LETTER WAE --> HANGUL LETTER WAE + MAKE_PAIR( 0xFFCF, 0x315A ), // HALFWIDTH HANGUL LETTER OE --> HANGUL LETTER OE + MAKE_PAIR( 0xFFD2, 0x315B ), // HALFWIDTH HANGUL LETTER YO --> HANGUL LETTER YO + MAKE_PAIR( 0xFFD3, 0x315C ), // HALFWIDTH HANGUL LETTER U --> HANGUL LETTER U + MAKE_PAIR( 0xFFD4, 0x315D ), // HALFWIDTH HANGUL LETTER WEO --> HANGUL LETTER WEO + MAKE_PAIR( 0xFFD5, 0x315E ), // HALFWIDTH HANGUL LETTER WE --> HANGUL LETTER WE + MAKE_PAIR( 0xFFD6, 0x315F ), // HALFWIDTH HANGUL LETTER WI --> HANGUL LETTER WI + MAKE_PAIR( 0xFFD7, 0x3160 ), // HALFWIDTH HANGUL LETTER YU --> HANGUL LETTER YU + MAKE_PAIR( 0xFFDA, 0x3161 ), // HALFWIDTH HANGUL LETTER EU --> HANGUL LETTER EU + MAKE_PAIR( 0xFFDB, 0x3162 ), // HALFWIDTH HANGUL LETTER YI --> HANGUL LETTER YI + MAKE_PAIR( 0xFFDC, 0x3163 ), // HALFWIDTH HANGUL LETTER I --> HANGUL LETTER I + MAKE_PAIR( 0xFFE8, 0x2502 ), // HALFWIDTH FORMS LIGHT VERTICAL --> BOX DRAWINGS LIGHT VERTICAL + MAKE_PAIR( 0xFFE9, 0x2190 ), // HALFWIDTH LEFTWARDS ARROW --> LEFTWARDS ARROW + MAKE_PAIR( 0xFFEA, 0x2191 ), // HALFWIDTH UPWARDS ARROW --> UPWARDS ARROW + MAKE_PAIR( 0xFFEB, 0x2192 ), // HALFWIDTH RIGHTWARDS ARROW --> RIGHTWARDS ARROW + MAKE_PAIR( 0xFFEC, 0x2193 ), // HALFWIDTH DOWNWARDS ARROW --> DOWNWARDS ARROW + MAKE_PAIR( 0xFFED, 0x25A0 ), // HALFWIDTH BLACK SQUARE --> BLACK SQUARE + MAKE_PAIR( 0xFFEE, 0x25CB ) // HALFWIDTH WHITE CIRCLE --> WHITE CIRCLE +}; + +} } } } + +#endif |