diff --git a/icuSources/common/dtintrv.cpp b/icuSources/common/dtintrv.cpp
new file mode 100644
index 00000000..bece836d
--- /dev/null
+++ b/icuSources/common/dtintrv.cpp
@@ -0,0 +1,61 @@
+/*******************************************************************************
+* Copyright (C) 2008, International Business Machines Corporation and
+* others. All Rights Reserved.
+*******************************************************************************
+*
+* File DTINTRV.CPP
+*
+*******************************************************************************
+*/
+
+
+
+#include "unicode/dtintrv.h"
+
+
+U_NAMESPACE_BEGIN
+
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(DateInterval)
+
+//DateInterval::DateInterval(){}
+
+
+DateInterval::DateInterval(UDate from, UDate to)
+: fromDate(from),
+ toDate(to)
+{}
+
+
+DateInterval::~DateInterval(){}
+
+
+DateInterval::DateInterval(const DateInterval& other)
+: UObject(other) {
+ *this = other;
+}
+
+
+DateInterval&
+DateInterval::operator=(const DateInterval& other) {
+ if ( this != &other ) {
+ fromDate = other.fromDate;
+ toDate = other.toDate;
+ }
+ return *this;
+}
+
+
+DateInterval*
+DateInterval::clone() const {
+ return new DateInterval(*this);
+}
+
+
+UBool
+DateInterval::operator==(const DateInterval& other) const {
+ return ( fromDate == other.fromDate && toDate == other.toDate );
+}
+
+
+U_NAMESPACE_END
+
diff --git a/icuSources/common/locid.cpp b/icuSources/common/locid.cpp
index cb8d59eb..fe10efa0 100644
--- a/icuSources/common/locid.cpp
+++ b/icuSources/common/locid.cpp
@@ -1,6 +1,6 @@
/*
**********************************************************************
- * Copyright (C) 1997-2006, International Business Machines
+ * Copyright (C) 1997-2008, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
*
@@ -41,7 +41,7 @@
#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
-static Locale* availableLocaleList = NULL;
+static U_NAMESPACE_QUALIFIER Locale* availableLocaleList = NULL;
static int32_t availableLocaleListCount;
typedef enum ELocalePos {
eENGLISH,
@@ -76,9 +76,9 @@ U_CFUNC int32_t locale_getKeywords(const char *localeID,
UBool valuesToo,
UErrorCode *status);
-static Locale *gLocaleCache = NULL;
-static const Locale *gDefaultLocale = NULL;
-static UHashtable *gDefaultLocalesHashT = NULL;
+static U_NAMESPACE_QUALIFIER Locale *gLocaleCache = NULL;
+static U_NAMESPACE_QUALIFIER Locale *gDefaultLocale = NULL;
+static UHashtable *gDefaultLocalesHashT = NULL;
U_CDECL_BEGIN
//
@@ -86,7 +86,7 @@ U_CDECL_BEGIN
//
static void U_CALLCONV
deleteLocale(void *obj) {
- delete (Locale *) obj;
+ delete (U_NAMESPACE_QUALIFIER Locale *) obj;
}
static UBool U_CALLCONV locale_cleanup(void)
@@ -108,6 +108,10 @@ static UBool U_CALLCONV locale_cleanup(void)
uhash_close(gDefaultLocalesHashT); // Automatically deletes all elements, using deleter func.
gDefaultLocalesHashT = NULL;
}
+ else if (gDefaultLocale) {
+ // The cache wasn't created, and only one default locale was created.
+ delete gDefaultLocale;
+ }
gDefaultLocale = NULL;
return TRUE;
@@ -115,14 +119,11 @@ static UBool U_CALLCONV locale_cleanup(void)
U_CDECL_END
U_NAMESPACE_BEGIN
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(Locale)
-
//
// locale_set_default_internal.
//
void locale_set_default_internal(const char *id)
{
- U_NAMESPACE_USE
UErrorCode status = U_ZERO_ERROR;
UBool canonicalize = FALSE;
@@ -154,10 +155,36 @@ void locale_set_default_internal(const char *id)
// (long names are truncated.)
// Lazy creation of the hash table itself, if needed.
- //
- umtx_lock(NULL);
- UBool hashTableNeedsInit = (gDefaultLocalesHashT == NULL);
- umtx_unlock(NULL);
+ UBool isOnlyLocale;
+ UMTX_CHECK(NULL, (gDefaultLocale == NULL), isOnlyLocale);
+ if (isOnlyLocale) {
+ // We haven't seen this locale id before.
+ // Create a new Locale object for it.
+ Locale *newFirstDefault = new Locale(Locale::eBOGUS);
+ if (newFirstDefault == NULL) {
+ // No way to report errors from here.
+ return;
+ }
+ newFirstDefault->init(localeNameBuf, FALSE);
+ umtx_lock(NULL);
+ if (gDefaultLocale == NULL) {
+ gDefaultLocale = newFirstDefault; // Assignment to gDefaultLocale must happen inside mutex
+ newFirstDefault = NULL;
+ ucln_common_registerCleanup(UCLN_COMMON_LOCALE, locale_cleanup);
+ }
+ // Else some other thread raced us through here, and set the new Locale.
+ // Use the hash table next.
+ umtx_unlock(NULL);
+ if (newFirstDefault == NULL) {
+ // We were successful in setting the locale, and we were the first one to set it.
+ return;
+ }
+ // else start using the hash table.
+ }
+
+ // Lazy creation of the hash table itself, if needed.
+ UBool hashTableNeedsInit;
+ UMTX_CHECK(NULL, (gDefaultLocalesHashT == NULL), hashTableNeedsInit);
if (hashTableNeedsInit) {
status = U_ZERO_ERROR;
UHashtable *tHashTable = uhash_open(uhash_hashChars, uhash_compareChars, NULL, &status);
@@ -169,11 +196,11 @@ void locale_set_default_internal(const char *id)
if (gDefaultLocalesHashT == NULL) {
gDefaultLocalesHashT = tHashTable;
ucln_common_registerCleanup(UCLN_COMMON_LOCALE, locale_cleanup);
- umtx_unlock(NULL);
} else {
- umtx_unlock(NULL);
uhash_close(tHashTable);
+ hashTableNeedsInit = FALSE;
}
+ umtx_unlock(NULL);
}
// Hash table lookup, key is the locale full name
@@ -199,11 +226,15 @@ void locale_set_default_internal(const char *id)
const char *key = newDefault->getName();
U_ASSERT(uprv_strcmp(key, localeNameBuf) == 0);
umtx_lock(NULL);
- const Locale *hashTableVal = (const Locale *)uhash_get(gDefaultLocalesHashT, key);
+ Locale *hashTableVal = (Locale *)uhash_get(gDefaultLocalesHashT, key);
if (hashTableVal == NULL) {
+ if (hashTableNeedsInit) {
+ // This is the second request to set the locale.
+ // Cache the first one.
+ uhash_put(gDefaultLocalesHashT, (void *)gDefaultLocale->getName(), gDefaultLocale, &status);
+ }
uhash_put(gDefaultLocalesHashT, (void *)key, newDefault, &status);
gDefaultLocale = newDefault;
- umtx_unlock(NULL);
// ignore errors from hash table insert. (Couldn't do anything anyway)
// We can still set the default Locale,
// it just wont be cached, and will eventually leak.
@@ -211,14 +242,13 @@ void locale_set_default_internal(const char *id)
// Some other thread raced us through here, and got the new Locale
// into the hash table before us. Use that one.
gDefaultLocale = hashTableVal; // Assignment to gDefaultLocale must happen inside mutex
- umtx_unlock(NULL);
delete newDefault;
}
+ umtx_unlock(NULL);
}
}
U_NAMESPACE_END
-
/* sfb 07/21/99 */
U_CFUNC void
locale_set_default(const char *id)
@@ -239,6 +269,8 @@ locale_get_default(void)
U_NAMESPACE_BEGIN
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(Locale)
+
/*Character separating the posix id fields*/
// '_'
// In the platform codepage.
@@ -360,6 +392,10 @@ Locale::Locale( const char * newLanguage,
if (size >= ULOC_FULLNAME_CAPACITY)
{
togo_heap = (char *)uprv_malloc(sizeof(char)*(size+1));
+ // If togo_heap could not be created, initialize with default settings.
+ if (togo_heap == NULL) {
+ init(NULL, FALSE);
+ }
togo = togo_heap;
}
else
@@ -448,6 +484,9 @@ Locale &Locale::operator=(const Locale &other)
/* Allocate the full name if necessary */
if(other.fullName != other.fullNameBuffer) {
fullName = (char *)uprv_malloc(sizeof(char)*(uprv_strlen(other.fullName)+1));
+ if (fullName == NULL) {
+ return *this;
+ }
}
/* Copy the full name */
uprv_strcpy(fullName, other.fullName);
@@ -638,9 +677,7 @@ const Locale& U_EXPORT2
Locale::getDefault()
{
const Locale *retLocale;
- umtx_lock(NULL);
- retLocale = gDefaultLocale;
- umtx_unlock(NULL);
+ UMTX_CHECK(NULL, gDefaultLocale, retLocale);
if (retLocale == NULL) {
locale_set_default_internal(NULL);
umtx_lock(NULL);
@@ -926,9 +963,8 @@ const Locale* U_EXPORT2
Locale::getAvailableLocales(int32_t& count)
{
// for now, there is a hardcoded list, so just walk through that list and set it up.
- umtx_lock(NULL);
- UBool needInit = availableLocaleList == 0;
- umtx_unlock(NULL);
+ UBool needInit;
+ UMTX_CHECK(NULL, availableLocaleList == NULL, needInit);
if (needInit) {
int32_t locCount = uloc_countAvailable();
@@ -1289,6 +1325,9 @@ Locale::getBaseName() const
int32_t baseNameSize = uloc_getBaseName(fullName, baseName, ULOC_FULLNAME_CAPACITY, &status);
if(baseNameSize >= ULOC_FULLNAME_CAPACITY) {
((Locale *)this)->baseName = (char *)uprv_malloc(sizeof(char) * baseNameSize + 1);
+ if (baseName == NULL) {
+ return baseName;
+ }
uloc_getBaseName(fullName, baseName, baseNameSize+1, &status);
}
baseName[baseNameSize] = 0;
diff --git a/icuSources/common/locutil.cpp b/icuSources/common/locutil.cpp
index 777403d7..e70b6162 100644
--- a/icuSources/common/locutil.cpp
+++ b/icuSources/common/locutil.cpp
@@ -1,6 +1,6 @@
/**
*******************************************************************************
- * Copyright (C) 2002-2005, International Business Machines Corporation and *
+ * Copyright (C) 2002-2006, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
*
@@ -20,7 +20,7 @@
#include "umutex.h"
// see LocaleUtility::getAvailableLocaleNames
-static Hashtable * LocaleUtility_cache = NULL;
+static U_NAMESPACE_QUALIFIER Hashtable * LocaleUtility_cache = NULL;
#define UNDERSCORE_CHAR ((UChar)0x005f)
#define AT_SIGN_CHAR ((UChar)64)
diff --git a/icuSources/common/mutex.cpp b/icuSources/common/mutex.cpp
new file mode 100644
index 00000000..b54a847b
--- /dev/null
+++ b/icuSources/common/mutex.cpp
@@ -0,0 +1,18 @@
+/**
+*******************************************************************************
+* Copyright (C) 2008, International Business Machines Corporation. *
+* All Rights Reserved. *
+*******************************************************************************
+*/
+
+#include "unicode/utypes.h"
+
+#if UCONFIG_NO_SERVICE
+
+/* If UCONFIG_NO_SERVICE, then there is no invocation of Mutex elsewhere in
+ common, so add one here to force an export */
+#include "mutex.h"
+static Mutex *aMutex = 0;
+
+/* UCONFIG_NO_SERVICE */
+#endif
diff --git a/icuSources/common/propname.cpp b/icuSources/common/propname.cpp
index 95d7e9b2..55e35404 100644
--- a/icuSources/common/propname.cpp
+++ b/icuSources/common/propname.cpp
@@ -1,6 +1,6 @@
/*
**********************************************************************
-* Copyright (c) 2002-2005, International Business Machines
+* Copyright (c) 2002-2006, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
* Author: Alan Liu
@@ -204,6 +204,7 @@ PropertyAliases::getPropertyValueEnum(EnumValue prop,
}
U_NAMESPACE_END
+U_NAMESPACE_USE
//----------------------------------------------------------------------
// UDataMemory structures
diff --git a/icuSources/common/putil.c b/icuSources/common/putil.c
index c4cb049b..8c5e1c41 100644
--- a/icuSources/common/putil.c
+++ b/icuSources/common/putil.c
@@ -1,7 +1,7 @@
/*
******************************************************************************
*
-* Copyright (C) 1997-2007, International Business Machines
+* Copyright (C) 1997-2008, International Business Machines
* Corporation and others. All Rights Reserved.
*
******************************************************************************
@@ -33,22 +33,26 @@
* 11/15/99 helena Integrated S/390 IEEE support.
* 04/26/01 Barry N. OS/400 support for uprv_getDefaultLocaleID
* 08/15/01 Steven H. OS/400 support for uprv_getDefaultCodepage
+* 01/03/08 Steven L. Fake Time Support
******************************************************************************
*/
/* Define _XOPEN_SOURCE for Solaris and friends. */
/* NetBSD needs it to be >= 4 */
-#ifndef _XOPEN_SOURCE
+#if !defined(_XOPEN_SOURCE)
#if __STDC_VERSION__ >= 199901L
-/* It is invalid to compile an XPG3, XPG4, XPG4v2 or XPG5 application using c99 */
+/* It is invalid to compile an XPG3, XPG4, XPG4v2 or XPG5 application using c99 on Solaris */
#define _XOPEN_SOURCE 600
#else
#define _XOPEN_SOURCE 4
#endif
#endif
-/* Make sure things like readlink and such functions work. */
-#ifndef _XOPEN_SOURCE_EXTENDED
+/* Make sure things like readlink and such functions work.
+Poorly upgraded Solaris machines can't have this defined.
+Cleanly installed Solaris can use this #define.
+*/
+#if !defined(_XOPEN_SOURCE_EXTENDED) && (!defined(__STDC_VERSION__) || __STDC_VERSION__ >= 199901L)
#define _XOPEN_SOURCE_EXTENDED 1
#endif
@@ -91,6 +95,7 @@
# include /* error code structure */
# include
# include /* EPT_CALL macro - this include must be after all other "QSYSINCs" */
+# include /* For uprv_maximumPtr */
#elif defined(XP_MAC)
# include
# include
@@ -108,6 +113,10 @@
#include
#endif
+#if defined(U_DARWIN)
+#include
+#endif
+
#ifndef U_WINDOWS
#include
#endif
@@ -181,6 +190,41 @@ u_bottomNBytesOfDouble(double* d, int n)
#endif
}
+#if defined (U_DEBUG_FAKETIME)
+/* Override the clock to test things without having to move the system clock.
+ * Assumes POSIX gettimeofday() will function
+ */
+UDate fakeClock_t0 = 0; /** Time to start the clock from **/
+UDate fakeClock_dt = 0; /** Offset (fake time - real time) **/
+UBool fakeClock_set = FALSE; /** True if fake clock has spun up **/
+static UMTX fakeClockMutex = NULL;
+
+static UDate getUTCtime_real() {
+ struct timeval posixTime;
+ gettimeofday(&posixTime, NULL);
+ return (UDate)(((int64_t)posixTime.tv_sec * U_MILLIS_PER_SECOND) + (posixTime.tv_usec/1000));
+}
+
+static UDate getUTCtime_fake() {
+ umtx_lock(&fakeClockMutex);
+ if(!fakeClock_set) {
+ UDate real = getUTCtime_real();
+ const char *fake_start = getenv("U_FAKETIME_START");
+ if(fake_start!=NULL) {
+ sscanf(fake_start,"%lf",&fakeClock_t0);
+ }
+ fakeClock_dt = fakeClock_t0 - real;
+ fprintf(stderr,"U_DEBUG_FAKETIME was set at compile time, so the ICU clock will start at a preset value\n"
+ "U_FAKETIME_START=%.0f (%s) for an offset of %.0f ms from the current time %.0f\n",
+ fakeClock_t0, fake_start, fakeClock_dt, real);
+ fakeClock_set = TRUE;
+ }
+ umtx_unlock(&fakeClockMutex);
+
+ return getUTCtime_real() + fakeClock_dt;
+}
+#endif
+
#if defined(U_WINDOWS)
typedef union {
int64_t int64;
@@ -204,7 +248,9 @@ typedef union {
U_CAPI UDate U_EXPORT2
uprv_getUTCtime()
{
-#ifdef XP_MAC
+#if defined(U_DEBUG_FAKETIME)
+ return getUTCtime_fake(); /* Hook for overriding the clock */
+#elif defined(XP_MAC)
time_t t, t1, t2;
struct tm tmrec;
@@ -483,51 +529,38 @@ uprv_log(double d)
return log(d);
}
-#if 0
-/* This isn't used. If it's readded, readd putiltst.c tests */
-U_CAPI int32_t U_EXPORT2
-uprv_digitsAfterDecimal(double x)
+U_CAPI void * U_EXPORT2
+uprv_maximumPtr(void * base)
{
- char buffer[20];
- int32_t numDigits, bytesWritten;
- char *p = buffer;
- int32_t ptPos, exponent;
-
- /* cheat and use the string-format routine to get a string representation*/
- /* (it handles mathematical inaccuracy better than we can), then find out */
- /* many characters are to the right of the decimal point */
- bytesWritten = sprintf(buffer, "%+.9g", x);
- while (isdigit(*(++p))) {
- }
-
- ptPos = (int32_t)(p - buffer);
- numDigits = (int32_t)(bytesWritten - ptPos - 1);
-
- /* if the number's string representation is in scientific notation, find */
- /* the exponent and take it into account*/
- exponent = 0;
- p = uprv_strchr(buffer, 'e');
- if (p != 0) {
- int16_t expPos = (int16_t)(p - buffer);
- numDigits -= bytesWritten - expPos;
- exponent = (int32_t)(atol(p + 1));
+#if defined(OS400)
+ /*
+ * With the provided function we should never be out of range of a given segment
+ * (a traditional/typical segment that is). Our segments have 5 bytes for the
+ * id and 3 bytes for the offset. The key is that the casting takes care of
+ * only retrieving the offset portion minus x1000. Hence, the smallest offset
+ * seen in a program is x001000 and when casted to an int would be 0.
+ * That's why we can only add 0xffefff. Otherwise, we would exceed the segment.
+ *
+ * Currently, 16MB is the current addressing limitation on i5/OS if the activation is
+ * non-TERASPACE. If it is TERASPACE it is 2GB - 4k(header information).
+ * This function determines the activation based on the pointer that is passed in and
+ * calculates the appropriate maximum available size for
+ * each pointer type (TERASPACE and non-TERASPACE)
+ *
+ * Unlike other operating systems, the pointer model isn't determined at
+ * compile time on i5/OS.
+ */
+ if ((base != NULL) && (_TESTPTR(base, _C_TERASPACE_CHECK))) {
+ /* if it is a TERASPACE pointer the max is 2GB - 4k */
+ return ((void *)(((char *)base)-((uint32_t)(base))+((uint32_t)0x7fffefff)));
}
+ /* otherwise 16MB since NULL ptr is not checkable or the ptr is not TERASPACE */
+ return ((void *)(((char *)base)-((uint32_t)(base))+((uint32_t)0xffefff)));
- /* the string representation may still have spurious decimal digits in it, */
- /* so we cut off at the ninth digit to the right of the decimal, and have */
- /* to search backward from there to the first non-zero digit*/
- if (numDigits > 9) {
- numDigits = 9;
- while (numDigits > 0 && buffer[ptPos + numDigits] == '0')
- --numDigits;
- }
- numDigits -= exponent;
- if (numDigits < 0) {
- return 0;
- }
- return numDigits;
-}
+#else
+ return U_MAX_PTR(base);
#endif
+}
/*---------------------------------------------------------------------------
Platform-specific Implementations
@@ -585,8 +618,13 @@ extern U_IMPORT char *U_TZNAME[];
#if !UCONFIG_NO_FILE_IO && (defined(U_DARWIN) || defined(U_LINUX) || defined(U_BSD))
/* These platforms are likely to use Olson timezone IDs. */
#define CHECK_LOCALTIME_LINK 1
+#if defined(U_DARWIN)
#include
#define TZZONEINFO (TZDIR "/")
+#else
+#define TZDEFAULT "/etc/localtime"
+#define TZZONEINFO "/usr/share/zoneinfo/"
+#endif
static char gTimeZoneBuffer[PATH_MAX];
static char *gTimeZoneBufferPtr = NULL;
#endif
@@ -614,40 +652,147 @@ static UBool isValidOlsonID(const char *id) {
}
#endif
+#if defined(U_TZNAME) && !defined(U_WINDOWS)
+
+#define CONVERT_HOURS_TO_SECONDS(offset) (int32_t)(offset*3600)
+typedef struct OffsetZoneMapping {
+ int32_t offsetSeconds;
+ int32_t daylightType; /* 1=daylight in June, 2=daylight in December*/
+ const char *stdID;
+ const char *dstID;
+ const char *olsonID;
+} OffsetZoneMapping;
+
+/*
+This list tries to disambiguate a set of abbreviated timezone IDs and offsets
+and maps it to an Olson ID.
+Before adding anything to this list, take a look at
+icu/source/tools/tzcode/tz.alias
+Sometimes no daylight savings (0) is important to define due to aliases.
+This list can be tested with icu/source/test/compat/tzone.pl
+More values could be added to daylightType to increase precision.
+*/
+static const struct OffsetZoneMapping OFFSET_ZONE_MAPPINGS[] = {
+ {-45900, 2, "CHAST", "CHADT", "Pacific/Chatham"},
+ {-43200, 1, "PETT", "PETST", "Asia/Kamchatka"},
+ {-43200, 2, "NZST", "NZDT", "Pacific/Auckland"},
+ {-43200, 1, "ANAT", "ANAST", "Asia/Anadyr"},
+ {-39600, 1, "MAGT", "MAGST", "Asia/Magadan"},
+ {-37800, 2, "LHST", "LHST", "Australia/Lord_Howe"},
+ {-36000, 2, "EST", "EST", "Australia/Sydney"},
+ {-36000, 1, "SAKT", "SAKST", "Asia/Sakhalin"},
+ {-36000, 1, "VLAT", "VLAST", "Asia/Vladivostok"},
+ {-34200, 2, "CST", "CST", "Australia/South"},
+ {-32400, 1, "YAKT", "YAKST", "Asia/Yakutsk"},
+ {-32400, 1, "CHOT", "CHOST", "Asia/Choibalsan"},
+ {-31500, 2, "CWST", "CWST", "Australia/Eucla"},
+ {-28800, 1, "IRKT", "IRKST", "Asia/Irkutsk"},
+ {-28800, 1, "ULAT", "ULAST", "Asia/Ulaanbaatar"},
+ {-28800, 2, "WST", "WST", "Australia/West"},
+ {-25200, 1, "HOVT", "HOVST", "Asia/Hovd"},
+ {-25200, 1, "KRAT", "KRAST", "Asia/Krasnoyarsk"},
+ {-21600, 1, "NOVT", "NOVST", "Asia/Novosibirsk"},
+ {-21600, 1, "OMST", "OMSST", "Asia/Omsk"},
+ {-18000, 1, "YEKT", "YEKST", "Asia/Yekaterinburg"},
+ {-14400, 1, "SAMT", "SAMST", "Europe/Samara"},
+ {-14400, 1, "AMT", "AMST", "Asia/Yerevan"},
+ {-14400, 1, "AZT", "AZST", "Asia/Baku"},
+ {-10800, 1, "AST", "ADT", "Asia/Baghdad"},
+ {-10800, 1, "MSK", "MSD", "Europe/Moscow"},
+ {-10800, 1, "VOLT", "VOLST", "Europe/Volgograd"},
+ {-7200, 0, "EET", "CEST", "Africa/Tripoli"},
+ {-7200, 1, "EET", "EEST", "Europe/Athens"}, /* Conflicts with Africa/Cairo */
+ {-7200, 1, "IST", "IDT", "Asia/Jerusalem"},
+ {-3600, 0, "CET", "WEST", "Africa/Algiers"},
+ {-3600, 2, "WAT", "WAST", "Africa/Windhoek"},
+ {0, 1, "GMT", "IST", "Europe/Dublin"},
+ {0, 1, "GMT", "BST", "Europe/London"},
+ {0, 0, "WET", "WEST", "Africa/Casablanca"},
+ {0, 0, "WET", "WET", "Africa/El_Aaiun"},
+ {3600, 1, "AZOT", "AZOST", "Atlantic/Azores"},
+ {3600, 1, "EGT", "EGST", "America/Scoresbysund"},
+ {10800, 1, "PMST", "PMDT", "America/Miquelon"},
+ {10800, 2, "UYT", "UYST", "America/Montevideo"},
+ {10800, 1, "WGT", "WGST", "America/Godthab"},
+ {10800, 2, "BRT", "BRST", "Brazil/East"},
+ {12600, 1, "NST", "NDT", "America/St_Johns"},
+ {14400, 1, "AST", "ADT", "Canada/Atlantic"},
+ {14400, 2, "AMT", "AMST", "America/Cuiaba"},
+ {14400, 2, "CLT", "CLST", "Chile/Continental"},
+ {14400, 2, "FKT", "FKST", "Atlantic/Stanley"},
+ {14400, 2, "PYT", "PYST", "America/Asuncion"},
+ {18000, 1, "CST", "CDT", "America/Havana"},
+ {18000, 1, "EST", "EDT", "US/Eastern"}, /* Conflicts with America/Grand_Turk */
+ {21600, 2, "EAST", "EASST", "Chile/EasterIsland"},
+ {21600, 0, "CST", "MDT", "Canada/Saskatchewan"},
+ {21600, 0, "CST", "CDT", "America/Guatemala"},
+ {21600, 1, "CST", "CDT", "US/Central"}, /* Conflicts with Mexico/General */
+ {25200, 1, "MST", "MDT", "US/Mountain"}, /* Conflicts with Mexico/BajaSur */
+ {28800, 0, "PST", "PST", "Pacific/Pitcairn"},
+ {28800, 1, "PST", "PDT", "US/Pacific"}, /* Conflicts with Mexico/BajaNorte */
+ {32400, 1, "AKST", "AKDT", "US/Alaska"},
+ {36000, 1, "HAST", "HADT", "US/Aleutian"}
+};
+
+/*#define DEBUG_TZNAME*/
+
+static const char* remapShortTimeZone(const char *stdID, const char *dstID, int32_t daylightType, int32_t offset)
+{
+ int32_t idx;
+#ifdef DEBUG_TZNAME
+ fprintf(stderr, "TZ=%s std=%s dst=%s daylight=%d offset=%d\n", getenv("TZ"), stdID, dstID, daylightType, offset);
+#endif
+ for (idx = 0; idx < (int32_t)sizeof(OFFSET_ZONE_MAPPINGS)/sizeof(OFFSET_ZONE_MAPPINGS[0]); idx++)
+ {
+ if (offset == OFFSET_ZONE_MAPPINGS[idx].offsetSeconds
+ && daylightType == OFFSET_ZONE_MAPPINGS[idx].daylightType
+ && strcmp(OFFSET_ZONE_MAPPINGS[idx].stdID, stdID) == 0
+ && strcmp(OFFSET_ZONE_MAPPINGS[idx].dstID, dstID) == 0)
+ {
+ return OFFSET_ZONE_MAPPINGS[idx].olsonID;
+ }
+ }
+ return NULL;
+}
+#endif
+
U_CAPI const char* U_EXPORT2
uprv_tzname(int n)
{
+ const char *tzid = NULL;
#ifdef U_WINDOWS
- const char *id = uprv_detectWindowsTimeZone();
+ tzid = uprv_detectWindowsTimeZone();
- if (id != NULL) {
- return id;
+ if (tzid != NULL) {
+ return tzid;
}
#else
- const char *tzenv = NULL;
/*#if defined(U_DARWIN)
int ret;
- tzenv = getenv("TZFILE");
- if (tzenv != NULL) {
- return tzenv;
+ tzid = getenv("TZFILE");
+ if (tzid != NULL) {
+ return tzid;
}
#endif*/
- tzenv = getenv("TZ");
- if (tzenv != NULL && isValidOlsonID(tzenv))
+/* This code can be temporarily disabled to test tzname resolution later on. */
+#ifndef DEBUG_TZNAME
+ tzid = getenv("TZ");
+ if (tzid != NULL && isValidOlsonID(tzid))
{
/* This might be a good Olson ID. */
- if (uprv_strncmp(tzenv, "posix/", 6) == 0
- || uprv_strncmp(tzenv, "right/", 6) == 0)
+ if (uprv_strncmp(tzid, "posix/", 6) == 0
+ || uprv_strncmp(tzid, "right/", 6) == 0)
{
/* Remove the posix/ or right/ prefix. */
- tzenv += 6;
+ tzid += 6;
}
- return tzenv;
+ return tzid;
}
/* else U_TZNAME will give a better result. */
+#endif
#if defined(CHECK_LOCALTIME_LINK)
/* Caller must handle threading issues */
@@ -675,10 +820,31 @@ uprv_tzname(int n)
#endif
#ifdef U_TZNAME
+#if !defined(U_WINDOWS)
/*
- U_TZNAME is usually a non-unique abbreviation,
- which isn't normally usable.
+ U_TZNAME is usually a non-unique abbreviation, which isn't normally usable.
+ So we remap the abbreviation to an olson ID.
+
+ Since Windows exposes a little more timezone information,
+ we normally don't use this code on Windows because
+ uprv_detectWindowsTimeZone should have already given the correct answer.
*/
+ {
+ struct tm juneSol, decemberSol;
+ int daylightType;
+ static const time_t juneSolstice=1182478260; /*2007-06-21 18:11 UT*/
+ static const time_t decemberSolstice=1198332540; /*2007-12-22 06:09 UT*/
+
+ /* This probing will tell us when daylight savings occurs. */
+ localtime_r(&juneSolstice, &juneSol);
+ localtime_r(&decemberSolstice, &decemberSol);
+ daylightType = ((decemberSol.tm_isdst > 0) << 1) | (juneSol.tm_isdst > 0);
+ tzid = remapShortTimeZone(U_TZNAME[0], U_TZNAME[1], daylightType, uprv_timezone());
+ if (tzid != NULL) {
+ return tzid;
+ }
+ }
+#endif
return U_TZNAME[n];
#else
return "";
@@ -727,6 +893,10 @@ u_setDataDirectory(const char *directory) {
else {
length=(int32_t)uprv_strlen(directory);
newDataDir = (char *)uprv_malloc(length + 2);
+ /* Exit out if newDataDir could not be created. */
+ if (newDataDir == NULL) {
+ return;
+ }
uprv_strcpy(newDataDir, directory);
#if (U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR)
@@ -779,11 +949,13 @@ uprv_pathIsAbsolute(const char *path)
U_CAPI const char * U_EXPORT2
u_getDataDirectory(void) {
const char *path = NULL;
+#if defined(U_DARWIN) && defined(TARGET_IPHONE_SIMULATOR) && TARGET_IPHONE_SIMULATOR
+ const char *simulator_root = NULL;
+ char datadir_path_buffer[PATH_MAX];
+#endif
/* if we have the directory, then return it immediately */
- umtx_lock(NULL);
- path = gDataDirectory;
- umtx_unlock(NULL);
+ UMTX_CHECK(NULL, gDataDirectory, path);
if(path) {
return path;
@@ -811,6 +983,14 @@ u_getDataDirectory(void) {
# ifdef ICU_DATA_DIR
if(path==NULL || *path==0) {
path=ICU_DATA_DIR;
+#if defined(U_DARWIN) && defined(TARGET_IPHONE_SIMULATOR) && TARGET_IPHONE_SIMULATOR
+ simulator_root=getenv("IPHONE_SIMULATOR_ROOT");
+ if (simulator_root != NULL) {
+ (void) strlcpy(datadir_path_buffer, simulator_root, PATH_MAX);
+ (void) strlcat(datadir_path_buffer, path, PATH_MAX);
+ path=datadir_path_buffer;
+ }
+#endif
}
# endif
@@ -1030,6 +1210,10 @@ The leftmost codepage (.xxx) wins.
if ((p = uprv_strchr(posixID, '.')) != NULL) {
/* assume new locale can't be larger than old one? */
correctedPOSIXLocale = uprv_malloc(uprv_strlen(posixID)+1);
+ /* Exit on memory allocation error. */
+ if (correctedPOSIXLocale == NULL) {
+ return NULL;
+ }
uprv_strncpy(correctedPOSIXLocale, posixID, p-posixID);
correctedPOSIXLocale[p-posixID] = 0;
@@ -1043,6 +1227,10 @@ The leftmost codepage (.xxx) wins.
if ((p = uprv_strrchr(posixID, '@')) != NULL) {
if (correctedPOSIXLocale == NULL) {
correctedPOSIXLocale = uprv_malloc(uprv_strlen(posixID)+1);
+ /* Exit on memory allocation error. */
+ if (correctedPOSIXLocale == NULL) {
+ return NULL;
+ }
uprv_strncpy(correctedPOSIXLocale, posixID, p-posixID);
correctedPOSIXLocale[p-posixID] = 0;
}
@@ -1086,6 +1274,10 @@ The leftmost codepage (.xxx) wins.
else {
/* copy it, just in case the original pointer goes away. See j2395 */
correctedPOSIXLocale = (char *)uprv_malloc(uprv_strlen(posixID) + 1);
+ /* Exit on memory allocation error. */
+ if (correctedPOSIXLocale == NULL) {
+ return NULL;
+ }
posixID = uprv_strcpy(correctedPOSIXLocale, posixID);
}
@@ -1245,7 +1437,9 @@ The leftmost codepage (.xxx) wins.
/*
Due to various platform differences, one platform may specify a charset,
when they really mean a different charset. Remap the names so that they are
-compatible with ICU.
+compatible with ICU. Only conflicting/ambiguous aliases should be resolved
+here. Before adding anything to this function, please consider adding unique
+names to the ICU alias table in the data directory.
*/
static const char*
remapPlatformDependentCodepage(const char *locale, const char *name) {
@@ -1278,6 +1472,20 @@ remapPlatformDependentCodepage(const char *locale, const char *name) {
name = "EUC-KR";
}
}
+ else if (uprv_strcmp(name, "eucJP") == 0) {
+ /*
+ ibm-954 is the best match.
+ ibm-33722 is the default for eucJP (similar to Windows).
+ */
+ name = "eucjis";
+ }
+ else if (uprv_strcmp(name, "646") == 0) {
+ /*
+ * The default codepage given by Solaris is 646 but the C library routines treat it as if it was
+ * ISO-8859-1 instead of US-ASCII(646).
+ */
+ name = "ISO-8859-1";
+ }
#elif defined(U_DARWIN)
if (locale == NULL && *name == 0) {
/*
@@ -1287,6 +1495,39 @@ remapPlatformDependentCodepage(const char *locale, const char *name) {
*/
name = "UTF-8";
}
+#elif defined(U_HPUX)
+ if (locale != NULL && uprv_strcmp(locale, "zh_HK") == 0 && uprv_strcmp(name, "big5") == 0) {
+ /* HP decided to extend big5 as hkbig5 even though it's not compatible :-( */
+ /* zh_TW.big5 is not the same charset as zh_HK.big5! */
+ name = "hkbig5";
+ }
+ else if (uprv_strcmp(name, "eucJP") == 0) {
+ /*
+ ibm-1350 is the best match, but unavailable.
+ ibm-954 is mostly a superset of ibm-1350.
+ ibm-33722 is the default for eucJP (similar to Windows).
+ */
+ name = "eucjis";
+ }
+#elif defined(U_LINUX)
+ if (locale != NULL && uprv_strcmp(name, "euc") == 0) {
+ /* Linux underspecifies the "EUC" name. */
+ if (uprv_strcmp(locale, "korean") == 0) {
+ name = "EUC-KR";
+ }
+ else if (uprv_strcmp(locale, "japanese") == 0) {
+ /* See comment below about eucJP */
+ name = "eucjis";
+ }
+ }
+ else if (uprv_strcmp(name, "eucjp") == 0) {
+ /*
+ ibm-1350 is the best match, but unavailable.
+ ibm-954 is mostly a superset of ibm-1350.
+ ibm-33722 is the default for eucJP (similar to Windows).
+ */
+ name = "eucjis";
+ }
#endif
/* return NULL when "" is passed in */
if (*name == 0) {
@@ -1343,7 +1584,8 @@ int_getDefaultCodepage()
#elif defined(OS390)
static char codepage[64];
- sprintf(codepage,"%s" UCNV_SWAP_LFNL_OPTION_STRING, nl_langinfo(CODESET));
+ sprintf(codepage,"%63s" UCNV_SWAP_LFNL_OPTION_STRING, nl_langinfo(CODESET));
+ codepage[63] = 0; /* NULL terminate */
return codepage;
#elif defined(XP_MAC)
@@ -1393,7 +1635,7 @@ int_getDefaultCodepage()
if (*codesetName == 0)
{
/* Everything failed. Return US ASCII (ISO 646). */
- uprv_strcpy(codesetName, "US-ASCII");
+ (void)uprv_strcpy(codesetName, "US-ASCII");
}
return codesetName;
#else
diff --git a/icuSources/common/putilimp.h b/icuSources/common/putilimp.h
index 04c91b39..c516821e 100644
--- a/icuSources/common/putilimp.h
+++ b/icuSources/common/putilimp.h
@@ -226,6 +226,14 @@ U_INTERNAL UDate U_EXPORT2 uprv_getUTCtime(void);
*/
U_INTERNAL UBool U_EXPORT2 uprv_pathIsAbsolute(const char *path);
+/**
+ * Use U_MAX_PTR instead of this function.
+ * @param void pointer to test
+ * @return the largest possible pointer greater than the base
+ * @internal (ICU 3.8)
+ */
+U_INTERNAL void * U_EXPORT2 uprv_maximumPtr(void *base);
+
/**
* Maximum value of a (void*) - use to indicate the limit of an 'infinite' buffer.
* In fact, buffer sizes must not exceed 2GB so that the difference between
@@ -245,26 +253,14 @@ U_INTERNAL UBool U_EXPORT2 uprv_pathIsAbsolute(const char *path);
/* We have 31-bit pointers. */
# define U_MAX_PTR(base) ((void *)0x7fffffff)
# elif defined(OS400)
-/*
- * With the provided macro we should never be out of range of a given segment
- * (a traditional/typical segment that is). Our segments have 5 bytes for the
- * id and 3 bytes for the offset. The key is that the casting takes care of
- * only retrieving the offset portion minus x1000. Hence, the smallest offset
- * seen in a program is x001000 and when casted to an int would be 0.
- * That's why we can only add 0xffefff. Otherwise, we would exceed the segment.
- *
- * Currently, 16MB is the current addressing limitation on as/400. This macro
- * may eventually be changed to use 2GB addressability for the newer version of
- * as/400 machines.
- */
-# define U_MAX_PTR(base) ((void *)(((char *)base)-((int32_t)(base))+((int32_t)0xffefff)))
+# define U_MAX_PTR(base) uprv_maximumPtr((void *)base)
# elif defined(__GNUC__) && __GNUC__ >= 4
/*
* Due to a compiler optimization bug, gcc 4 causes test failures when doing
* this math arithmetic on pointers on some platforms. It seems like the
* pointers are considered signed instead of unsigned. The uintptr_t type
* isn't available on all platforms (i.e MSVC 6) and pointers aren't always
- * a scalar value (i.e. i5/OS in the lines above).
+ * a scalar value (i.e. i5/OS see uprv_maximumPtr function).
*/
# define U_MAX_PTR(base) \
((void *)(((uintptr_t)(base)+0x7fffffffu) > (uintptr_t)(base) \
diff --git a/icuSources/common/rbbi.cpp b/icuSources/common/rbbi.cpp
index 10216c22..b06a01c0 100644
--- a/icuSources/common/rbbi.cpp
+++ b/icuSources/common/rbbi.cpp
@@ -1,6 +1,6 @@
/*
***************************************************************************
-* Copyright (C) 1999-2006 International Business Machines Corporation *
+* Copyright (C) 1999-2008 International Business Machines Corporation *
* and others. All rights reserved. *
***************************************************************************
*/
@@ -23,7 +23,7 @@
#include "rbbirb.h"
#include "cmemory.h"
#include "cstring.h"
-#include "mutex.h"
+#include "umutex.h"
#include "ucln_cmn.h"
#include "brkeng.h"
@@ -41,9 +41,11 @@ static UBool fTrace = FALSE;
U_NAMESPACE_BEGIN
+// The state number of the starting state
+#define START_STATE 1
-static const int16_t START_STATE = 1; // The state number of the starting state
-static const int16_t STOP_STATE = 0; // The state-transition value indicating "stop"
+// The state-transition value indicating "stop"
+#define STOP_STATE 0
UOBJECT_DEFINE_RTTI_IMPLEMENTATION(RuleBasedBreakIterator)
@@ -68,6 +70,20 @@ RuleBasedBreakIterator::RuleBasedBreakIterator(RBBIDataHeader* data, UErrorCode
}
}
+/**
+ * Same as above but does not adopt memory
+ */
+RuleBasedBreakIterator::RuleBasedBreakIterator(const RBBIDataHeader* data, enum EDontAdopt, UErrorCode &status)
+{
+ init();
+ fData = new RBBIDataWrapper(data, RBBIDataWrapper::kDontAdopt, status); // status checked in constructor
+ if (U_FAILURE(status)) {return;}
+ if(fData == 0) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+}
+
//-------------------------------------------------------------------------------
//
// Constructor from a UDataMemory handle to precompiled break rules
@@ -99,7 +115,7 @@ RuleBasedBreakIterator::RuleBasedBreakIterator( const UnicodeString &rules,
init();
if (U_FAILURE(status)) {return;}
RuleBasedBreakIterator *bi = (RuleBasedBreakIterator *)
- RBBIRuleBuilder::createRuleBasedBreakIterator(rules, parseError, status);
+ RBBIRuleBuilder::createRuleBasedBreakIterator(rules, &parseError, status);
// Note: This is a bit awkward. The RBBI ruleBuilder has a factory method that
// creates and returns a complete RBBI. From here, in a constructor, we
// can't just return the object created by the builder factory, hence
@@ -321,8 +337,12 @@ void RuleBasedBreakIterator::setText(UText *ut, UErrorCode &status) {
// we can come to signaling a failure.
// (GetText() is obsolete, this failure is sort of OK)
if (fDCharIter == NULL) {
- static UChar c = 0;
+ static const UChar c = 0;
fDCharIter = new UCharCharacterIterator(&c, 0);
+ if (fDCharIter == NULL) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
}
if (fCharIter!=fSCharIter && fCharIter!=fDCharIter) {
@@ -1034,7 +1054,7 @@ int32_t RuleBasedBreakIterator::handleNext(const RBBIStateTable *statetable) {
lookaheadStatus = 0;
// TODO: make a standalone hard break in a rule work.
if (lookAheadHardBreak) {
- utext_setNativeIndex(fText, result);
+ UTEXT_SETNATIVEINDEX(fText, result);
return result;
}
// Look-ahead completed, but other rules may match further. Continue on
@@ -1085,13 +1105,13 @@ continueOn:
// (This really indicates a defect in the break rules. They should always match
// at least one character.)
if (result == initialPosition) {
- utext_setNativeIndex(fText, initialPosition);
+ UTEXT_SETNATIVEINDEX(fText, initialPosition);
UTEXT_NEXT32(fText);
result = (int32_t)UTEXT_GETNATIVEINDEX(fText);
}
// Leave the iterator at our result position.
- utext_setNativeIndex(fText, result);
+ UTEXT_SETNATIVEINDEX(fText, result);
#ifdef RBBI_DEBUG
if (fTrace) {
RBBIDebugPrintf("result = %d\n\n", result);
@@ -1179,7 +1199,7 @@ int32_t RuleBasedBreakIterator::handlePrevious(const RBBIStateTable *statetable)
} else if (result == initialPosition) {
// Ran off start, no match found.
// move one index one (towards the start, since we are doing a previous())
- utext_setNativeIndex(fText, initialPosition);
+ UTEXT_SETNATIVEINDEX(fText, initialPosition);
UTEXT_PREVIOUS32(fText); // TODO: shouldn't be necessary. We're already at beginning. Check.
}
break;
@@ -1245,7 +1265,7 @@ int32_t RuleBasedBreakIterator::handlePrevious(const RBBIStateTable *statetable)
lookaheadStatus = 0;
// TODO: make a standalone hard break in a rule work.
if (lookAheadHardBreak) {
- utext_setNativeIndex(fText, result);
+ UTEXT_SETNATIVEINDEX(fText, result);
return result;
}
// Look-ahead completed, but other rules may match further. Continue on
@@ -1293,13 +1313,13 @@ continueOn:
// (This really indicates a defect in the break rules. They should always match
// at least one character.)
if (result == initialPosition) {
- utext_setNativeIndex(fText, initialPosition);
+ UTEXT_SETNATIVEINDEX(fText, initialPosition);
UTEXT_PREVIOUS32(fText);
result = (int32_t)UTEXT_GETNATIVEINDEX(fText);
}
// Leave the iterator at our result position.
- utext_setNativeIndex(fText, result);
+ UTEXT_SETNATIVEINDEX(fText, result);
#ifdef RBBI_DEBUG
if (fTrace) {
RBBIDebugPrintf("result = %d\n\n", result);
@@ -1679,12 +1699,12 @@ int32_t RuleBasedBreakIterator::checkDictionary(int32_t startPos,
return (reverse ? startPos : endPos);
}
-static UStack *gLanguageBreakFactories = NULL;
-
U_NAMESPACE_END
// defined in ucln_cmn.h
+static U_NAMESPACE_QUALIFIER UStack *gLanguageBreakFactories = NULL;
+
/**
* Release all static memory held by breakiterator.
*/
@@ -1700,7 +1720,7 @@ U_CDECL_END
U_CDECL_BEGIN
static void U_CALLCONV _deleteFactory(void *obj) {
- delete (LanguageBreakFactory *) obj;
+ delete (U_NAMESPACE_QUALIFIER LanguageBreakFactory *) obj;
}
U_CDECL_END
U_NAMESPACE_BEGIN
@@ -1710,13 +1730,11 @@ getLanguageBreakEngineFromFactory(UChar32 c, int32_t breakType)
{
UBool needsInit;
UErrorCode status = U_ZERO_ERROR;
- umtx_lock(NULL);
- needsInit = (UBool)(gLanguageBreakFactories == NULL);
- umtx_unlock(NULL);
+ UMTX_CHECK(NULL, (UBool)(gLanguageBreakFactories == NULL), needsInit);
if (needsInit) {
UStack *factories = new UStack(_deleteFactory, NULL, status);
- if (U_SUCCESS(status)) {
+ if (factories != NULL && U_SUCCESS(status)) {
ICULanguageBreakFactory *builtIn = new ICULanguageBreakFactory(status);
factories->push(builtIn, status);
#ifdef U_LOCAL_SERVICE_HOOK
@@ -1766,7 +1784,7 @@ RuleBasedBreakIterator::getLanguageBreakEngine(UChar32 c) {
if (fLanguageBreakEngines == NULL) {
fLanguageBreakEngines = new UStack(status);
- if (U_FAILURE(status)) {
+ if (fLanguageBreakEngines == NULL || U_FAILURE(status)) {
delete fLanguageBreakEngines;
fLanguageBreakEngines = 0;
return NULL;
diff --git a/icuSources/common/rbbicst.pl b/icuSources/common/rbbicst.pl
index 3537892c..98b06cbc 100644
--- a/icuSources/common/rbbicst.pl
+++ b/icuSources/common/rbbicst.pl
@@ -1,453 +1,453 @@
-#**************************************************************************
-# Copyright (C) 2002-2005 International Business Machines Corporation *
-# and others. All rights reserved. *
-#**************************************************************************
-#
-# rbbicst Compile the RBBI rule paser state table data into initialized C data.
-# Usage:
-# cd icu/source/common
-# perl rbbicst.pl < rbbirpt.txt > rbbirpt.h
-# perl rbbicst.pl -j < rbbirpt.txt > RBBIRuleParseTable.java
-#
-# The output file, rbbrpt.h, is included by some of the .cpp rbbi
-# implementation files. This perl script is NOT run as part
-# of a normal ICU build. It is run by hand when needed, and the
-# rbbirpt.h generated file is put back into cvs.
-#
-# See rbbirpt.txt for a description of the input format for this script.
-#
-
-if ($ARGV[0] eq "-j") {
- $javaOutput = 1;
- shift @ARGV;
-}
-
-
-$num_states = 1; # Always the state number for the line being compiled.
-$line_num = 0; # The line number in the input file.
-
-$states{"pop"} = 255; # Add the "pop" to the list of defined state names.
- # This prevents any state from being labelled with "pop",
- # and resolves references to "pop" in the next state field.
-
-line_loop: while (<>) {
- chomp();
- $line = $_;
- @fields = split();
- $line_num++;
-
- # Remove # comments, which are any fields beginning with a #, plus all
- # that follow on the line.
- for ($i=0; $i<@fields; $i++) {
- if ($fields[$i] =~ /^#/) {
- @fields = @fields[0 .. $i-1];
- last;
- }
- }
- # ignore blank lines, and those with no fields left after stripping comments..
- if (@fields == 0) {
- next;
- }
-
- #
- # State Label: handling.
- # Does the first token end with a ":"? If so, it's the name of a state.
- # Put in a hash, together with the current state number,
- # so that we can later look up the number from the name.
- #
- if (@fields[0] =~ /.*:$/) {
- $state_name = @fields[0];
- $state_name =~ s/://; # strip off the colon from the state name.
-
- if ($states{$state_name} != 0) {
- print " rbbicst: at line $line-num duplicate definition of state $state_name\n";
- }
- $states{$state_name} = $num_states;
- $stateNames[$num_states] = $state_name;
-
- # if the label was the only thing on this line, go on to the next line,
- # otherwise assume that a state definition is on the same line and fall through.
- if (@fields == 1) {
- next line_loop;
- }
- shift @fields; # shift off label field in preparation
- # for handling the rest of the line.
- }
-
- #
- # State Transition line.
- # syntax is this,
- # character [n] target-state [^push-state] [function-name]
- # where
- # [something] is an optional something
- # character is either a single quoted character e.g. '['
- # or a name of a character class, e.g. white_space
- #
-
- $state_line_num[$num_states] = $line_num; # remember line number with each state
- # so we can make better error messages later.
- #
- # First field, character class or literal character for this transition.
- #
- if ($fields[0] =~ /^'.'$/) {
- # We've got a quoted literal character.
- $state_literal_chars[$num_states] = $fields[0];
- $state_literal_chars[$num_states] =~ s/'//g;
- } else {
- # We've got the name of a character class.
- $state_char_class[$num_states] = $fields[0];
- if ($fields[0] =~ /[\W]/) {
- print " rbbicsts: at line $line_num, bad character literal or character class name.\n";
- print " scanning $fields[0]\n";
- exit(-1);
- }
- }
- shift @fields;
-
- #
- # do the 'n' flag
- #
- $state_flag[$num_states] = $javaOutput? "false" : "FALSE";
- if ($fields[0] eq "n") {
- $state_flag[$num_states] = $javaOutput? "true": "TRUE";
- shift @fields;
- }
-
- #
- # do the destination state.
- #
- $state_dest_state[$num_states] = $fields[0];
- if ($fields[0] eq "") {
- print " rbbicsts: at line $line_num, destination state missing.\n";
- exit(-1);
- }
- shift @fields;
-
- #
- # do the push state, if present.
- #
- if ($fields[0] =~ /^\^/) {
- $fields[0] =~ s/^\^//;
- $state_push_state[$num_states] = $fields[0];
- if ($fields[0] eq "" ) {
- print " rbbicsts: at line $line_num, expected state after ^ (no spaces).\n";
- exit(-1);
- }
- shift @fields;
- }
-
- #
- # Lastly, do the optional action name.
- #
- if ($fields[0] ne "") {
- $state_func_name[$num_states] = $fields[0];
- shift @fields;
- }
-
- #
- # There should be no fields left on the line at this point.
- #
- if (@fields > 0) {
- print " rbbicsts: at line $line_num, unexpected extra stuff on input line.\n";
- print " scanning $fields[0]\n";
- }
- $num_states++;
-}
-
-#
-# We've read in the whole file, now go back and output the
-# C source code for the state transition table.
-#
-# We read all states first, before writing anything, so that the state numbers
-# for the destination states are all available to be written.
-#
-
-#
-# Make hashes for the names of the character classes and
-# for the names of the actions that appeared.
-#
-for ($state=1; $state < $num_states; $state++) {
- if ($state_char_class[$state] ne "") {
- if ($charClasses{$state_char_class[$state]} == 0) {
- $charClasses{$state_char_class[$state]} = 1;
- }
- }
- if ($state_func_name[$state] eq "") {
- $state_func_name[$state] = "doNOP";
- }
- if ($actions{$state_action_name[$state]} == 0) {
- $actions{$state_func_name[$state]} = 1;
- }
-}
-
-#
-# Check that all of the destination states have been defined
-#
-#
-$states{"exit"} = 0; # Predefined state name, terminates state machine.
-for ($state=1; $state<$num_states; $state++) {
- if ($states{$state_dest_state[$state]} == 0 && $state_dest_state[$state] ne "exit") {
- print "Error at line $state_line_num[$state]: target state \"$state_dest_state[$state]\" is not defined.\n";
- $errors++;
- }
- if ($state_push_state[$state] ne "" && $states{$state_push_state[$state]} == 0) {
- print "Error at line $state_line_num[$state]: target state \"$state_push_state[$state]\" is not defined.\n";
- $errors++;
- }
-}
-
-die if ($errors>0);
-
-#
-# Assign numbers to each of the character classes classes used.
-# Sets are numbered from 128 - 250
-# The values 0-127 in the state table are used for matching
-# individual ASCII characters (the only thing that can appear in the rules.)
-# The "set" names appearing in the code below (default, etc.) need special
-# handling because they do not correspond to a normal set of characters,
-# but trigger special handling by code in the state machine.
-#
-$i = 128;
-foreach $setName (sort keys %charClasses) {
- if ($setName eq "default") {
- $charClasses{$setName} = 255;}
- elsif ($setName eq "escaped") {
- $charClasses{$setName} = 254;}
- elsif ($setName eq "escapedP") {
- $charClasses{$setName} = 253;}
- elsif ($setName eq "eof") {
- $charClasses{$setName} = 252;}
- else {
- # Normal (single) character class. Number them.
- $charClasses{$setName} = $i;
- $i++;
- }
-}
-
-
-my ($sec, $min, $hour, , $day, $mon, $year, $wday, $yday, $isdst) = localtime;
-$year += 1900;
-
-if ($javaOutput) {
- print "/*\n";
- print " *******************************************************************************\n";
- print " * Copyright (C) 2003-$year,\n";
- print " * International Business Machines Corporation and others. All Rights Reserved.\n";
- print " *******************************************************************************\n";
- print " */\n";
- print " \n";
- print "package com.ibm.icu.text;\n";
- print " \n";
- print "/**\n";
- print " * Generated Java File. Do not edit by hand.\n";
- print " * This file contains the state table for the ICU Rule Based Break Iterator\n";
- print " * rule parser.\n";
- print " * It is generated by the Perl script \"rbbicst.pl\" from\n";
- print " * the rule parser state definitions file \"rbbirpt.txt\".\n";
- print " * \@internal \n";
- print " *\n";
- print " */\n";
-
- print "class RBBIRuleParseTable\n";
- print "{\n";
-
- #
- # Emit the constants for the actions to be performed.
- #
- $n = 1;
- foreach $act (sort keys %actions) {
- print " static final short $act = $n;\n";
- $n++;
- }
- print " \n";
-
- #
- # Emit constants for char class names
- #
- foreach $setName (sort keys %charClasses) {
- print " static final short kRuleSet_$setName = $charClasses{$setName};\n";
- }
- print "\n\n";
-
-
- print " static class RBBIRuleTableElement { \n";
- print " short fAction; \n";
- print " short fCharClass; \n";
- print " short fNextState; \n";
- print " short fPushState; \n";
- print " boolean fNextChar; \n";
- print " String fStateName; \n";
- print " RBBIRuleTableElement(short a, int cc, int ns, int ps, boolean nc, String sn) { \n";
- print " fAction = a; \n";
- print " fCharClass = (short)cc; \n";
- print " fNextState = (short)ns; \n";
- print " fPushState = (short)ps; \n";
- print " fNextChar = nc; \n";
- print " fStateName = sn; \n";
- print " } \n";
- print " }; \n";
- print " \n";
-
-
- print " static RBBIRuleTableElement[] gRuleParseStateTable = { \n ";
- print " new RBBIRuleTableElement(doNOP, 0, 0,0, true, null ) // 0 \n"; #output the unused state 0.
- for ($state=1; $state < $num_states; $state++) {
- print " , new RBBIRuleTableElement($state_func_name[$state],";
- if ($state_literal_chars[$state] ne "") {
- $c = $state_literal_chars[$state];
- print("'$c', ");
- }else {
- print " $charClasses{$state_char_class[$state]},";
- }
- print " $states{$state_dest_state[$state]},";
-
- # The push-state field is optional. If omitted, fill field with a zero, which flags
- # the state machine that there is no push state.
- if ($state_push_state[$state] eq "") {
- print "0, ";
- } else {
- print " $states{$state_push_state[$state]},";
- }
- print " $state_flag[$state], ";
-
- # if this is the first row of the table for this state, put out the state name.
- if ($stateNames[$state] ne "") {
- print " \"$stateNames[$state]\") ";
- } else {
- print " null ) ";
- }
-
- # Put out a comment showing the number (index) of this state row,
- print " // $state ";
- print "\n";
- }
- print " };\n";
-
- print "}; \n";
-
-}
-else
-{
- #
- # C++ Output ...
- #
-
-
- print "//---------------------------------------------------------------------------------\n";
- print "//\n";
- print "// Generated Header File. Do not edit by hand.\n";
- print "// This file contains the state table for the ICU Rule Based Break Iterator\n";
- print "// rule parser.\n";
- print "// It is generated by the Perl script \"rbbicst.pl\" from\n";
- print "// the rule parser state definitions file \"rbbirpt.txt\".\n";
- print "//\n";
- print "// Copyright (C) 2002-$year International Business Machines Corporation \n";
- print "// and others. All rights reserved. \n";
- print "//\n";
- print "//---------------------------------------------------------------------------------\n";
- print "#ifndef RBBIRPT_H\n";
- print "#define RBBIRPT_H\n";
- print "\n";
- print "U_NAMESPACE_BEGIN\n";
-
- #
- # Emit the constants for indicies of Unicode Sets
- # Define one constant for each of the character classes encountered.
- # At the same time, store the index corresponding to the set name back into hash.
- #
- print "//\n";
- print "// Character classes for RBBI rule scanning.\n";
- print "//\n";
- foreach $setName (sort keys %charClasses) {
- if ($charClasses{$setName} < 250) {
- # Normal character class.
- print " static const uint8_t kRuleSet_$setName = $charClasses{$setName};\n";
- }
- }
- print "\n\n";
-
- #
- # Emit the enum for the actions to be performed.
- #
- print "enum RBBI_RuleParseAction {\n";
- foreach $act (sort keys %actions) {
- print " $act,\n";
- }
- print " rbbiLastAction};\n\n";
-
- #
- # Emit the struct definition for transtion table elements.
- #
- print "//-------------------------------------------------------------------------------\n";
- print "//\n";
- print "// RBBIRuleTableEl represents the structure of a row in the transition table\n";
- print "// for the rule parser state machine.\n";
- print "//-------------------------------------------------------------------------------\n";
- print "struct RBBIRuleTableEl {\n";
- print " RBBI_RuleParseAction fAction;\n";
- print " uint8_t fCharClass; // 0-127: an individual ASCII character\n";
- print " // 128-255: character class index\n";
- print " uint8_t fNextState; // 0-250: normal next-stat numbers\n";
- print " // 255: pop next-state from stack.\n";
- print " uint8_t fPushState;\n";
- print " UBool fNextChar;\n";
- print "};\n\n";
-
- #
- # emit the state transition table
- #
- print "static const struct RBBIRuleTableEl gRuleParseStateTable[] = {\n";
- print " {doNOP, 0, 0, 0, TRUE}\n"; # State 0 is a dummy. Real states start with index = 1.
- for ($state=1; $state < $num_states; $state++) {
- print " , {$state_func_name[$state],";
- if ($state_literal_chars[$state] ne "") {
- $c = $state_literal_chars[$state];
- printf(" %d /* $c */,", ord($c)); # use numeric value, so EBCDIC machines are ok.
- }else {
- print " $charClasses{$state_char_class[$state]},";
- }
- print " $states{$state_dest_state[$state]},";
-
- # The push-state field is optional. If omitted, fill field with a zero, which flags
- # the state machine that there is no push state.
- if ($state_push_state[$state] eq "") {
- print "0, ";
- } else {
- print " $states{$state_push_state[$state]},";
- }
- print " $state_flag[$state]} ";
-
- # Put out a C++ comment showing the number (index) of this state row,
- # and, if this is the first row of the table for this state, the state name.
- print " // $state ";
- if ($stateNames[$state] ne "") {
- print " $stateNames[$state]";
- }
- print "\n";
- };
- print " };\n";
-
-
- #
- # emit a mapping array from state numbers to state names.
- #
- # This array is used for producing debugging output from the rule parser.
- #
- print "#ifdef RBBI_DEBUG\n";
- print "static const char * const RBBIRuleStateNames[] = {";
- for ($state=0; $state<$num_states; $state++) {
- if ($stateNames[$state] ne "") {
- print " \"$stateNames[$state]\",\n";
- } else {
- print " 0,\n";
- }
- }
- print " 0};\n";
- print "#endif\n\n";
-
- print "U_NAMESPACE_END\n";
- print "#endif\n";
-}
-
-
-
+#**************************************************************************
+# Copyright (C) 2002-2005 International Business Machines Corporation *
+# and others. All rights reserved. *
+#**************************************************************************
+#
+# rbbicst Compile the RBBI rule paser state table data into initialized C data.
+# Usage:
+# cd icu/source/common
+# perl rbbicst.pl < rbbirpt.txt > rbbirpt.h
+# perl rbbicst.pl -j < rbbirpt.txt > RBBIRuleParseTable.java
+#
+# The output file, rbbrpt.h, is included by some of the .cpp rbbi
+# implementation files. This perl script is NOT run as part
+# of a normal ICU build. It is run by hand when needed, and the
+# rbbirpt.h generated file is put back into cvs.
+#
+# See rbbirpt.txt for a description of the input format for this script.
+#
+
+if ($ARGV[0] eq "-j") {
+ $javaOutput = 1;
+ shift @ARGV;
+}
+
+
+$num_states = 1; # Always the state number for the line being compiled.
+$line_num = 0; # The line number in the input file.
+
+$states{"pop"} = 255; # Add the "pop" to the list of defined state names.
+ # This prevents any state from being labelled with "pop",
+ # and resolves references to "pop" in the next state field.
+
+line_loop: while (<>) {
+ chomp();
+ $line = $_;
+ @fields = split();
+ $line_num++;
+
+ # Remove # comments, which are any fields beginning with a #, plus all
+ # that follow on the line.
+ for ($i=0; $i<@fields; $i++) {
+ if ($fields[$i] =~ /^#/) {
+ @fields = @fields[0 .. $i-1];
+ last;
+ }
+ }
+ # ignore blank lines, and those with no fields left after stripping comments..
+ if (@fields == 0) {
+ next;
+ }
+
+ #
+ # State Label: handling.
+ # Does the first token end with a ":"? If so, it's the name of a state.
+ # Put in a hash, together with the current state number,
+ # so that we can later look up the number from the name.
+ #
+ if (@fields[0] =~ /.*:$/) {
+ $state_name = @fields[0];
+ $state_name =~ s/://; # strip off the colon from the state name.
+
+ if ($states{$state_name} != 0) {
+ print " rbbicst: at line $line-num duplicate definition of state $state_name\n";
+ }
+ $states{$state_name} = $num_states;
+ $stateNames[$num_states] = $state_name;
+
+ # if the label was the only thing on this line, go on to the next line,
+ # otherwise assume that a state definition is on the same line and fall through.
+ if (@fields == 1) {
+ next line_loop;
+ }
+ shift @fields; # shift off label field in preparation
+ # for handling the rest of the line.
+ }
+
+ #
+ # State Transition line.
+ # syntax is this,
+ # character [n] target-state [^push-state] [function-name]
+ # where
+ # [something] is an optional something
+ # character is either a single quoted character e.g. '['
+ # or a name of a character class, e.g. white_space
+ #
+
+ $state_line_num[$num_states] = $line_num; # remember line number with each state
+ # so we can make better error messages later.
+ #
+ # First field, character class or literal character for this transition.
+ #
+ if ($fields[0] =~ /^'.'$/) {
+ # We've got a quoted literal character.
+ $state_literal_chars[$num_states] = $fields[0];
+ $state_literal_chars[$num_states] =~ s/'//g;
+ } else {
+ # We've got the name of a character class.
+ $state_char_class[$num_states] = $fields[0];
+ if ($fields[0] =~ /[\W]/) {
+ print " rbbicsts: at line $line_num, bad character literal or character class name.\n";
+ print " scanning $fields[0]\n";
+ exit(-1);
+ }
+ }
+ shift @fields;
+
+ #
+ # do the 'n' flag
+ #
+ $state_flag[$num_states] = $javaOutput? "false" : "FALSE";
+ if ($fields[0] eq "n") {
+ $state_flag[$num_states] = $javaOutput? "true": "TRUE";
+ shift @fields;
+ }
+
+ #
+ # do the destination state.
+ #
+ $state_dest_state[$num_states] = $fields[0];
+ if ($fields[0] eq "") {
+ print " rbbicsts: at line $line_num, destination state missing.\n";
+ exit(-1);
+ }
+ shift @fields;
+
+ #
+ # do the push state, if present.
+ #
+ if ($fields[0] =~ /^\^/) {
+ $fields[0] =~ s/^\^//;
+ $state_push_state[$num_states] = $fields[0];
+ if ($fields[0] eq "" ) {
+ print " rbbicsts: at line $line_num, expected state after ^ (no spaces).\n";
+ exit(-1);
+ }
+ shift @fields;
+ }
+
+ #
+ # Lastly, do the optional action name.
+ #
+ if ($fields[0] ne "") {
+ $state_func_name[$num_states] = $fields[0];
+ shift @fields;
+ }
+
+ #
+ # There should be no fields left on the line at this point.
+ #
+ if (@fields > 0) {
+ print " rbbicsts: at line $line_num, unexpected extra stuff on input line.\n";
+ print " scanning $fields[0]\n";
+ }
+ $num_states++;
+}
+
+#
+# We've read in the whole file, now go back and output the
+# C source code for the state transition table.
+#
+# We read all states first, before writing anything, so that the state numbers
+# for the destination states are all available to be written.
+#
+
+#
+# Make hashes for the names of the character classes and
+# for the names of the actions that appeared.
+#
+for ($state=1; $state < $num_states; $state++) {
+ if ($state_char_class[$state] ne "") {
+ if ($charClasses{$state_char_class[$state]} == 0) {
+ $charClasses{$state_char_class[$state]} = 1;
+ }
+ }
+ if ($state_func_name[$state] eq "") {
+ $state_func_name[$state] = "doNOP";
+ }
+ if ($actions{$state_action_name[$state]} == 0) {
+ $actions{$state_func_name[$state]} = 1;
+ }
+}
+
+#
+# Check that all of the destination states have been defined
+#
+#
+$states{"exit"} = 0; # Predefined state name, terminates state machine.
+for ($state=1; $state<$num_states; $state++) {
+ if ($states{$state_dest_state[$state]} == 0 && $state_dest_state[$state] ne "exit") {
+ print "Error at line $state_line_num[$state]: target state \"$state_dest_state[$state]\" is not defined.\n";
+ $errors++;
+ }
+ if ($state_push_state[$state] ne "" && $states{$state_push_state[$state]} == 0) {
+ print "Error at line $state_line_num[$state]: target state \"$state_push_state[$state]\" is not defined.\n";
+ $errors++;
+ }
+}
+
+die if ($errors>0);
+
+#
+# Assign numbers to each of the character classes classes used.
+# Sets are numbered from 128 - 250
+# The values 0-127 in the state table are used for matching
+# individual ASCII characters (the only thing that can appear in the rules.)
+# The "set" names appearing in the code below (default, etc.) need special
+# handling because they do not correspond to a normal set of characters,
+# but trigger special handling by code in the state machine.
+#
+$i = 128;
+foreach $setName (sort keys %charClasses) {
+ if ($setName eq "default") {
+ $charClasses{$setName} = 255;}
+ elsif ($setName eq "escaped") {
+ $charClasses{$setName} = 254;}
+ elsif ($setName eq "escapedP") {
+ $charClasses{$setName} = 253;}
+ elsif ($setName eq "eof") {
+ $charClasses{$setName} = 252;}
+ else {
+ # Normal (single) character class. Number them.
+ $charClasses{$setName} = $i;
+ $i++;
+ }
+}
+
+
+my ($sec, $min, $hour, , $day, $mon, $year, $wday, $yday, $isdst) = localtime;
+$year += 1900;
+
+if ($javaOutput) {
+ print "/*\n";
+ print " *******************************************************************************\n";
+ print " * Copyright (C) 2003-$year,\n";
+ print " * International Business Machines Corporation and others. All Rights Reserved.\n";
+ print " *******************************************************************************\n";
+ print " */\n";
+ print " \n";
+ print "package com.ibm.icu.text;\n";
+ print " \n";
+ print "/**\n";
+ print " * Generated Java File. Do not edit by hand.\n";
+ print " * This file contains the state table for the ICU Rule Based Break Iterator\n";
+ print " * rule parser.\n";
+ print " * It is generated by the Perl script \"rbbicst.pl\" from\n";
+ print " * the rule parser state definitions file \"rbbirpt.txt\".\n";
+ print " * \@internal \n";
+ print " *\n";
+ print " */\n";
+
+ print "class RBBIRuleParseTable\n";
+ print "{\n";
+
+ #
+ # Emit the constants for the actions to be performed.
+ #
+ $n = 1;
+ foreach $act (sort keys %actions) {
+ print " static final short $act = $n;\n";
+ $n++;
+ }
+ print " \n";
+
+ #
+ # Emit constants for char class names
+ #
+ foreach $setName (sort keys %charClasses) {
+ print " static final short kRuleSet_$setName = $charClasses{$setName};\n";
+ }
+ print "\n\n";
+
+
+ print " static class RBBIRuleTableElement { \n";
+ print " short fAction; \n";
+ print " short fCharClass; \n";
+ print " short fNextState; \n";
+ print " short fPushState; \n";
+ print " boolean fNextChar; \n";
+ print " String fStateName; \n";
+ print " RBBIRuleTableElement(short a, int cc, int ns, int ps, boolean nc, String sn) { \n";
+ print " fAction = a; \n";
+ print " fCharClass = (short)cc; \n";
+ print " fNextState = (short)ns; \n";
+ print " fPushState = (short)ps; \n";
+ print " fNextChar = nc; \n";
+ print " fStateName = sn; \n";
+ print " } \n";
+ print " }; \n";
+ print " \n";
+
+
+ print " static RBBIRuleTableElement[] gRuleParseStateTable = { \n ";
+ print " new RBBIRuleTableElement(doNOP, 0, 0,0, true, null ) // 0 \n"; #output the unused state 0.
+ for ($state=1; $state < $num_states; $state++) {
+ print " , new RBBIRuleTableElement($state_func_name[$state],";
+ if ($state_literal_chars[$state] ne "") {
+ $c = $state_literal_chars[$state];
+ print("'$c', ");
+ }else {
+ print " $charClasses{$state_char_class[$state]},";
+ }
+ print " $states{$state_dest_state[$state]},";
+
+ # The push-state field is optional. If omitted, fill field with a zero, which flags
+ # the state machine that there is no push state.
+ if ($state_push_state[$state] eq "") {
+ print "0, ";
+ } else {
+ print " $states{$state_push_state[$state]},";
+ }
+ print " $state_flag[$state], ";
+
+ # if this is the first row of the table for this state, put out the state name.
+ if ($stateNames[$state] ne "") {
+ print " \"$stateNames[$state]\") ";
+ } else {
+ print " null ) ";
+ }
+
+ # Put out a comment showing the number (index) of this state row,
+ print " // $state ";
+ print "\n";
+ }
+ print " };\n";
+
+ print "}; \n";
+
+}
+else
+{
+ #
+ # C++ Output ...
+ #
+
+
+ print "//---------------------------------------------------------------------------------\n";
+ print "//\n";
+ print "// Generated Header File. Do not edit by hand.\n";
+ print "// This file contains the state table for the ICU Rule Based Break Iterator\n";
+ print "// rule parser.\n";
+ print "// It is generated by the Perl script \"rbbicst.pl\" from\n";
+ print "// the rule parser state definitions file \"rbbirpt.txt\".\n";
+ print "//\n";
+ print "// Copyright (C) 2002-$year International Business Machines Corporation \n";
+ print "// and others. All rights reserved. \n";
+ print "//\n";
+ print "//---------------------------------------------------------------------------------\n";
+ print "#ifndef RBBIRPT_H\n";
+ print "#define RBBIRPT_H\n";
+ print "\n";
+ print "U_NAMESPACE_BEGIN\n";
+
+ #
+ # Emit the constants for indicies of Unicode Sets
+ # Define one constant for each of the character classes encountered.
+ # At the same time, store the index corresponding to the set name back into hash.
+ #
+ print "//\n";
+ print "// Character classes for RBBI rule scanning.\n";
+ print "//\n";
+ foreach $setName (sort keys %charClasses) {
+ if ($charClasses{$setName} < 250) {
+ # Normal character class.
+ print " static const uint8_t kRuleSet_$setName = $charClasses{$setName};\n";
+ }
+ }
+ print "\n\n";
+
+ #
+ # Emit the enum for the actions to be performed.
+ #
+ print "enum RBBI_RuleParseAction {\n";
+ foreach $act (sort keys %actions) {
+ print " $act,\n";
+ }
+ print " rbbiLastAction};\n\n";
+
+ #
+ # Emit the struct definition for transtion table elements.
+ #
+ print "//-------------------------------------------------------------------------------\n";
+ print "//\n";
+ print "// RBBIRuleTableEl represents the structure of a row in the transition table\n";
+ print "// for the rule parser state machine.\n";
+ print "//-------------------------------------------------------------------------------\n";
+ print "struct RBBIRuleTableEl {\n";
+ print " RBBI_RuleParseAction fAction;\n";
+ print " uint8_t fCharClass; // 0-127: an individual ASCII character\n";
+ print " // 128-255: character class index\n";
+ print " uint8_t fNextState; // 0-250: normal next-stat numbers\n";
+ print " // 255: pop next-state from stack.\n";
+ print " uint8_t fPushState;\n";
+ print " UBool fNextChar;\n";
+ print "};\n\n";
+
+ #
+ # emit the state transition table
+ #
+ print "static const struct RBBIRuleTableEl gRuleParseStateTable[] = {\n";
+ print " {doNOP, 0, 0, 0, TRUE}\n"; # State 0 is a dummy. Real states start with index = 1.
+ for ($state=1; $state < $num_states; $state++) {
+ print " , {$state_func_name[$state],";
+ if ($state_literal_chars[$state] ne "") {
+ $c = $state_literal_chars[$state];
+ printf(" %d /* $c */,", ord($c)); # use numeric value, so EBCDIC machines are ok.
+ }else {
+ print " $charClasses{$state_char_class[$state]},";
+ }
+ print " $states{$state_dest_state[$state]},";
+
+ # The push-state field is optional. If omitted, fill field with a zero, which flags
+ # the state machine that there is no push state.
+ if ($state_push_state[$state] eq "") {
+ print "0, ";
+ } else {
+ print " $states{$state_push_state[$state]},";
+ }
+ print " $state_flag[$state]} ";
+
+ # Put out a C++ comment showing the number (index) of this state row,
+ # and, if this is the first row of the table for this state, the state name.
+ print " // $state ";
+ if ($stateNames[$state] ne "") {
+ print " $stateNames[$state]";
+ }
+ print "\n";
+ };
+ print " };\n";
+
+
+ #
+ # emit a mapping array from state numbers to state names.
+ #
+ # This array is used for producing debugging output from the rule parser.
+ #
+ print "#ifdef RBBI_DEBUG\n";
+ print "static const char * const RBBIRuleStateNames[] = {";
+ for ($state=0; $state<$num_states; $state++) {
+ if ($stateNames[$state] ne "") {
+ print " \"$stateNames[$state]\",\n";
+ } else {
+ print " 0,\n";
+ }
+ }
+ print " 0};\n";
+ print "#endif\n\n";
+
+ print "U_NAMESPACE_END\n";
+ print "#endif\n";
+}
+
+
+
diff --git a/icuSources/common/rbbidata.cpp b/icuSources/common/rbbidata.cpp
index 360290bd..442fb3d4 100644
--- a/icuSources/common/rbbidata.cpp
+++ b/icuSources/common/rbbidata.cpp
@@ -1,6 +1,6 @@
/*
***************************************************************************
-* Copyright (C) 1999-2005 International Business Machines Corporation *
+* Copyright (C) 1999-2008 International Business Machines Corporation *
* and others. All rights reserved. *
***************************************************************************
*/
@@ -49,6 +49,11 @@ RBBIDataWrapper::RBBIDataWrapper(const RBBIDataHeader *data, UErrorCode &status)
init(data, status);
}
+RBBIDataWrapper::RBBIDataWrapper(const RBBIDataHeader *data, enum EDontAdopt, UErrorCode &status) {
+ init(data, status);
+ fDontFreeData = TRUE;
+}
+
RBBIDataWrapper::RBBIDataWrapper(UDataMemory* udm, UErrorCode &status) {
const RBBIDataHeader *d = (const RBBIDataHeader *)
// ((char *)&(udm->pHeader->info) + udm->pHeader->info.size);
@@ -77,6 +82,7 @@ void RBBIDataWrapper::init(const RBBIDataHeader *data, UErrorCode &status) {
return;
}
+ fDontFreeData = FALSE;
fUDataMem = NULL;
fReverseTable = NULL;
fSafeFwdTable = NULL;
@@ -130,7 +136,7 @@ RBBIDataWrapper::~RBBIDataWrapper() {
U_ASSERT(fRefCount == 0);
if (fUDataMem) {
udata_close(fUDataMem);
- } else {
+ } else if (!fDontFreeData) {
uprv_free((void *)fHeader);
}
}
@@ -257,6 +263,7 @@ void RBBIDataWrapper::printData() {
U_NAMESPACE_END
+U_NAMESPACE_USE
//-----------------------------------------------------------------------------
//
@@ -367,8 +374,7 @@ ubrk_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *outD
// Each state table begins with several 32 bit fields. Calculate the size
// in bytes of these.
//
- RBBIStateTable *stp = NULL;
- int32_t topSize = (char *)stp->fTableData - (char *)stp;
+ int32_t topSize = offsetof(RBBIStateTable, fTableData);
// Forward state table.
tableStartOffset = ds->readUInt32(rbbiDH->fFTable);
diff --git a/icuSources/common/rbbidata.h b/icuSources/common/rbbidata.h
index 7ba1db05..ee6aa486 100644
--- a/icuSources/common/rbbidata.h
+++ b/icuSources/common/rbbidata.h
@@ -1,7 +1,7 @@
/*
*******************************************************************************
*
-* Copyright (C) 1999-2005, International Business Machines
+* Copyright (C) 1999-2005,2008 International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
@@ -141,7 +141,11 @@ typedef enum {
/* */
class RBBIDataWrapper : public UMemory {
public:
+ enum EDontAdopt {
+ kDontAdopt
+ };
RBBIDataWrapper(const RBBIDataHeader *data, UErrorCode &status);
+ RBBIDataWrapper(const RBBIDataHeader *data, enum EDontAdopt dontAdopt, UErrorCode &status);
RBBIDataWrapper(UDataMemory* udm, UErrorCode &status);
~RBBIDataWrapper();
@@ -179,6 +183,7 @@ private:
int32_t fRefCount;
UDataMemory *fUDataMem;
UnicodeString fRuleString;
+ UBool fDontFreeData;
RBBIDataWrapper(const RBBIDataWrapper &other); /* forbid copying of this class */
RBBIDataWrapper &operator=(const RBBIDataWrapper &other); /* forbid copying of this class */
diff --git a/icuSources/common/rbbinode.cpp b/icuSources/common/rbbinode.cpp
index af467b6d..49e0ad3d 100644
--- a/icuSources/common/rbbinode.cpp
+++ b/icuSources/common/rbbinode.cpp
@@ -1,6 +1,6 @@
/*
***************************************************************************
-* Copyright (C) 2002-2006 International Business Machines Corporation *
+* Copyright (C) 2002-2008 International Business Machines Corporation *
* and others. All rights reserved. *
***************************************************************************
*/
@@ -149,13 +149,16 @@ RBBINode *RBBINode::cloneTree() {
n = this;
} else {
n = new RBBINode(*this);
- if (fLeftChild != NULL) {
- n->fLeftChild = fLeftChild->cloneTree();
- n->fLeftChild->fParent = n;
- }
- if (fRightChild != NULL) {
- n->fRightChild = fRightChild->cloneTree();
- n->fRightChild->fParent = n;
+ // Check for null pointer.
+ if (n != NULL) {
+ if (fLeftChild != NULL) {
+ n->fLeftChild = fLeftChild->cloneTree();
+ n->fLeftChild->fParent = n;
+ }
+ if (fRightChild != NULL) {
+ n->fRightChild = fRightChild->cloneTree();
+ n->fRightChild->fParent = n;
+ }
}
}
return n;
diff --git a/icuSources/common/rbbirb.cpp b/icuSources/common/rbbirb.cpp
index a3d32c39..bbc11cd9 100644
--- a/icuSources/common/rbbirb.cpp
+++ b/icuSources/common/rbbirb.cpp
@@ -1,7 +1,7 @@
//
// file: rbbirb.cpp
//
-// Copyright (C) 2002-2005, International Business Machines Corporation and others.
+// Copyright (C) 2002-2008, International Business Machines Corporation and others.
// All Rights Reserved.
//
// This file contains the RBBIRuleBuilder class implementation. This is the main class for
@@ -43,12 +43,12 @@ U_NAMESPACE_BEGIN
//
//----------------------------------------------------------------------------------------
RBBIRuleBuilder::RBBIRuleBuilder(const UnicodeString &rules,
- UParseError &parseErr,
+ UParseError *parseErr,
UErrorCode &status)
: fRules(rules)
{
fStatus = &status; // status is checked below
- fParseError = &parseErr;
+ fParseError = parseErr;
fDebugEnv = NULL;
#ifdef RBBI_DEBUG
fDebugEnv = getenv("U_RBBIDEBUG");
@@ -72,6 +72,9 @@ RBBIRuleBuilder::RBBIRuleBuilder(const UnicodeString &rules,
fRuleStatusVals = NULL;
fScanner = NULL;
fSetBuilder = NULL;
+ if (parseErr) {
+ uprv_memset(parseErr, 0, sizeof(UParseError));
+ }
if (U_FAILURE(status)) {
return;
@@ -226,7 +229,7 @@ RBBIDataHeader *RBBIRuleBuilder::flattenData() {
//----------------------------------------------------------------------------------------
BreakIterator *
RBBIRuleBuilder::createRuleBasedBreakIterator( const UnicodeString &rules,
- UParseError &parseError,
+ UParseError *parseError,
UErrorCode &status)
{
// status checked below
@@ -236,10 +239,10 @@ RBBIRuleBuilder::createRuleBasedBreakIterator( const UnicodeString &rules,
// and list of all Unicode Sets referenced by the rules.
//
RBBIRuleBuilder builder(rules, parseError, status);
- builder.fScanner->parse();
if (U_FAILURE(status)) { // status checked here bcos build below doesn't
return NULL;
}
+ builder.fScanner->parse();
//
// UnicodeSet processing.
@@ -262,6 +265,14 @@ RBBIRuleBuilder::createRuleBasedBreakIterator( const UnicodeString &rules,
builder.fSafeFwdTables == NULL || builder.fSafeRevTables == NULL))
{
status = U_MEMORY_ALLOCATION_ERROR;
+ }
+
+ // Before building the tables, check to make sure the status is ok.
+ if (U_FAILURE(status)) {
+ delete builder.fForwardTables; builder.fForwardTables = NULL;
+ delete builder.fReverseTables; builder.fReverseTables = NULL;
+ delete builder.fSafeFwdTables; builder.fSafeFwdTables = NULL;
+ delete builder.fSafeRevTables; builder.fSafeRevTables = NULL;
return NULL;
}
@@ -269,9 +280,6 @@ RBBIRuleBuilder::createRuleBasedBreakIterator( const UnicodeString &rules,
builder.fReverseTables->build();
builder.fSafeFwdTables->build();
builder.fSafeRevTables->build();
- if (U_FAILURE(status)) {
- return NULL;
- }
#ifdef RBBI_DEBUG
if (builder.fDebugEnv && uprv_strstr(builder.fDebugEnv, "states")) {
@@ -284,6 +292,9 @@ RBBIRuleBuilder::createRuleBasedBreakIterator( const UnicodeString &rules,
// in the run-time format.
//
RBBIDataHeader *data = builder.flattenData(); // returns NULL if error
+ if (U_FAILURE(*builder.fStatus)) {
+ return NULL;
+ }
//
diff --git a/icuSources/common/rbbirb.h b/icuSources/common/rbbirb.h
index d7a53836..deb9b0ee 100644
--- a/icuSources/common/rbbirb.h
+++ b/icuSources/common/rbbirb.h
@@ -1,7 +1,7 @@
//
// rbbirb.h
//
-// Copyright (C) 2002-2005, International Business Machines Corporation and others.
+// Copyright (C) 2002-2008, International Business Machines Corporation and others.
// All Rights Reserved.
//
// This file contains declarations for several classes from the
@@ -107,7 +107,7 @@ public:
// public ICU API for creating RBBIs uses this function to do the actual work.
//
static BreakIterator * createRuleBasedBreakIterator( const UnicodeString &rules,
- UParseError &parseError,
+ UParseError *parseError,
UErrorCode &status);
public:
@@ -116,7 +116,7 @@ public:
// are NOT intended to be accessed by anything outside of the
// rule builder implementation.
RBBIRuleBuilder(const UnicodeString &rules,
- UParseError &parseErr,
+ UParseError *parseErr,
UErrorCode &status
);
diff --git a/icuSources/common/rbbiscan.cpp b/icuSources/common/rbbiscan.cpp
index 75c69f52..82147cd3 100644
--- a/icuSources/common/rbbiscan.cpp
+++ b/icuSources/common/rbbiscan.cpp
@@ -2,7 +2,7 @@
//
// file: rbbiscan.cpp
//
-// Copyright (C) 2002-2006, International Business Machines Corporation and others.
+// Copyright (C) 2002-2008, International Business Machines Corporation and others.
// All Rights Reserved.
//
// This file contains the Rule Based Break Iterator Rule Builder functions for
@@ -23,7 +23,7 @@
#include "unicode/uchriter.h"
#include "unicode/parsepos.h"
#include "unicode/parseerr.h"
-#include "uprops.h"
+#include "util.h"
#include "cmemory.h"
#include "cstring.h"
@@ -37,7 +37,7 @@
#include "uassert.h"
-//----------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
//
// Unicode Set init strings for each of the character classes needed for parsing a rule file.
// (Initialized with hex values for portability to EBCDIC based machines.
@@ -46,7 +46,7 @@
// The sets are referred to by name in the rbbirpt.txt, which is the
// source form of the state transition table for the RBBI rule parser.
//
-//----------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
static const UChar gRuleSet_rule_char_pattern[] = {
// [ ^ [ \ p { Z } \ u 0 0 2 0
0x5b, 0x5e, 0x5b, 0x5c, 0x70, 0x7b, 0x5a, 0x7d, 0x5c, 0x75, 0x30, 0x30, 0x32, 0x30,
@@ -72,7 +72,7 @@ static const UChar kAny[] = {0x61, 0x6e, 0x79, 0x00}; // "any"
U_CDECL_BEGIN
static void U_CALLCONV RBBISetTable_deleter(void *p) {
- RBBISetTableEl *px = (RBBISetTableEl *)p;
+ U_NAMESPACE_QUALIFIER RBBISetTableEl *px = (U_NAMESPACE_QUALIFIER RBBISetTableEl *)p;
delete px->key;
// Note: px->val is owned by the linked list "fSetsListHead" in scanner.
// Don't delete the value nodes here.
@@ -82,11 +82,11 @@ U_CDECL_END
U_NAMESPACE_BEGIN
-//----------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
//
// Constructor.
//
-//----------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
RBBIRuleScanner::RBBIRuleScanner(RBBIRuleBuilder *rb)
{
fRB = rb;
@@ -96,11 +96,6 @@ RBBIRuleScanner::RBBIRuleScanner(RBBIRuleBuilder *rb)
fRuleNum = 0;
fNodeStack[0] = NULL;
- fRuleSets[kRuleSet_rule_char-128] = NULL;
- fRuleSets[kRuleSet_white_space-128] = NULL;
- fRuleSets[kRuleSet_name_char-128] = NULL;
- fRuleSets[kRuleSet_name_start_char-128] = NULL;
- fRuleSets[kRuleSet_digit_char-128] = NULL;
fSymbolTable = NULL;
fSetTable = NULL;
@@ -126,11 +121,16 @@ RBBIRuleScanner::RBBIRuleScanner(RBBIRuleBuilder *rb)
// all instances of RBBIRuleScanners. BUT this is quite a bit simpler,
// and the time to build these few sets should be small compared to a
// full break iterator build.
- fRuleSets[kRuleSet_rule_char-128] = new UnicodeSet(gRuleSet_rule_char_pattern, *rb->fStatus);
- fRuleSets[kRuleSet_white_space-128] = (UnicodeSet*) uprv_openRuleWhiteSpaceSet(rb->fStatus);
- fRuleSets[kRuleSet_name_char-128] = new UnicodeSet(gRuleSet_name_char_pattern, *rb->fStatus);
- fRuleSets[kRuleSet_name_start_char-128] = new UnicodeSet(gRuleSet_name_start_char_pattern, *rb->fStatus);
- fRuleSets[kRuleSet_digit_char-128] = new UnicodeSet(gRuleSet_digit_char_pattern, *rb->fStatus);
+ fRuleSets[kRuleSet_rule_char-128] = UnicodeSet(gRuleSet_rule_char_pattern, *rb->fStatus);
+ UnicodeSet *whitespaceSet = uprv_openRuleWhiteSpaceSet(rb->fStatus);
+ if (U_FAILURE(*rb->fStatus)) {
+ return;
+ }
+ fRuleSets[kRuleSet_white_space-128] = *whitespaceSet;
+ delete whitespaceSet;
+ fRuleSets[kRuleSet_name_char-128] = UnicodeSet(gRuleSet_name_char_pattern, *rb->fStatus);
+ fRuleSets[kRuleSet_name_start_char-128] = UnicodeSet(gRuleSet_name_start_char_pattern, *rb->fStatus);
+ fRuleSets[kRuleSet_digit_char-128] = UnicodeSet(gRuleSet_digit_char_pattern, *rb->fStatus);
if (*rb->fStatus == U_ILLEGAL_ARGUMENT_ERROR) {
// This case happens if ICU's data is missing. UnicodeSet tries to look up property
// names from the init string, can't find them, and claims an illegal arguement.
@@ -142,24 +142,25 @@ RBBIRuleScanner::RBBIRuleScanner(RBBIRuleBuilder *rb)
}
fSymbolTable = new RBBISymbolTable(this, rb->fRules, *rb->fStatus);
+ if (fSymbolTable == NULL) {
+ *rb->fStatus = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
fSetTable = uhash_open(uhash_hashUnicodeString, uhash_compareUnicodeString, NULL, rb->fStatus);
+ if (U_FAILURE(*rb->fStatus)) {
+ return;
+ }
uhash_setValueDeleter(fSetTable, RBBISetTable_deleter);
}
-//----------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
//
// Destructor
//
-//----------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
RBBIRuleScanner::~RBBIRuleScanner() {
- delete fRuleSets[kRuleSet_rule_char-128];
- delete fRuleSets[kRuleSet_white_space-128];
- delete fRuleSets[kRuleSet_name_char-128];
- delete fRuleSets[kRuleSet_name_start_char-128];
- delete fRuleSets[kRuleSet_digit_char-128];
-
delete fSymbolTable;
if (fSetTable != NULL) {
uhash_close(fSetTable);
@@ -178,7 +179,7 @@ RBBIRuleScanner::~RBBIRuleScanner() {
}
-//----------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
//
// doParseAction Do some action during rule parsing.
// Called by the parse state machine.
@@ -191,14 +192,14 @@ RBBIRuleScanner::~RBBIRuleScanner() {
// in some compilers, while at the same time avoiding multiple
// definitions problems. I'm sure that there's a better way.
//
-//----------------------------------------------------------------------------------------
-UBool RBBIRuleScanner::doParseActions(EParseAction action)
+//------------------------------------------------------------------------------
+UBool RBBIRuleScanner::doParseActions(int32_t action)
{
RBBINode *n = NULL;
UBool returnVal = TRUE;
- switch ((RBBI_RuleParseAction)action) {
+ switch (action) {
case doExprStart:
pushNewNode(RBBINode::opStart);
@@ -566,26 +567,28 @@ UBool RBBIRuleScanner::doParseActions(EParseAction action)
-//----------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
//
// Error Report a rule parse error.
// Only report it if no previous error has been recorded.
//
-//----------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
void RBBIRuleScanner::error(UErrorCode e) {
if (U_SUCCESS(*fRB->fStatus)) {
*fRB->fStatus = e;
- fRB->fParseError->line = fLineNum;
- fRB->fParseError->offset = fCharNum;
- fRB->fParseError->preContext[0] = 0;
- fRB->fParseError->preContext[0] = 0;
+ if (fRB->fParseError) {
+ fRB->fParseError->line = fLineNum;
+ fRB->fParseError->offset = fCharNum;
+ fRB->fParseError->preContext[0] = 0;
+ fRB->fParseError->preContext[0] = 0;
+ }
}
}
-//----------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
//
// fixOpStack The parse stack holds partially assembled chunks of the parse tree.
// An entry on the stack may be as small as a single setRef node,
@@ -599,7 +602,7 @@ void RBBIRuleScanner::error(UErrorCode e) {
// the precedence of the current operator, binds the operand left,
// to the previously encountered operator.
//
-//----------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
void RBBIRuleScanner::fixOpStack(RBBINode::OpPrecedence p) {
RBBINode *n;
// printNodeStack("entering fixOpStack()");
@@ -646,7 +649,7 @@ void RBBIRuleScanner::fixOpStack(RBBINode::OpPrecedence p) {
-//----------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
//
// findSetFor given a UnicodeString,
// - find the corresponding Unicode Set (uset node)
@@ -661,7 +664,7 @@ void RBBIRuleScanner::fixOpStack(RBBINode::OpPrecedence p) {
// just one element which is the char in question.
// If the string is "any", return a set containing all chars.
//
-//----------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
void RBBIRuleScanner::findSetFor(const UnicodeString &s, RBBINode *node, UnicodeSet *setToAdopt) {
RBBISetTableEl *el;
@@ -695,6 +698,10 @@ void RBBIRuleScanner::findSetFor(const UnicodeString &s, RBBINode *node, Unicode
// This new uset node becomes the child of the caller's setReference node.
//
RBBINode *usetNode = new RBBINode(RBBINode::uset);
+ if (usetNode == NULL) {
+ error(U_MEMORY_ALLOCATION_ERROR);
+ return;
+ }
usetNode->fInputSet = setToAdopt;
usetNode->fParent = node;
node->fLeftChild = usetNode;
@@ -713,6 +720,14 @@ void RBBIRuleScanner::findSetFor(const UnicodeString &s, RBBINode *node, Unicode
el = (RBBISetTableEl *)uprv_malloc(sizeof(RBBISetTableEl));
UnicodeString *tkey = new UnicodeString(s);
if (tkey == NULL || el == NULL || setToAdopt == NULL) {
+ // Delete to avoid memory leak
+ delete tkey;
+ tkey = NULL;
+ uprv_free(el);
+ el = NULL;
+ delete setToAdopt;
+ setToAdopt = NULL;
+
error(U_MEMORY_ALLOCATION_ERROR);
return;
}
@@ -741,12 +756,12 @@ static const UChar chLParen = 0x28;
static const UChar chRParen = 0x29;
-//----------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
//
// stripRules Return a rules string without unnecessary
// characters.
//
-//----------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
UnicodeString RBBIRuleScanner::stripRules(const UnicodeString &rules) {
UnicodeString strippedRules;
int rulesLength = rules.length();
@@ -768,13 +783,13 @@ UnicodeString RBBIRuleScanner::stripRules(const UnicodeString &rules) {
}
-//----------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
//
// nextCharLL Low Level Next Char from rule input source.
// Get a char from the input character iterator,
// keep track of input position for error reporting.
//
-//----------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
UChar32 RBBIRuleScanner::nextCharLL() {
UChar32 ch;
@@ -809,13 +824,13 @@ UChar32 RBBIRuleScanner::nextCharLL() {
}
-//---------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
//
// nextChar for rules scanning. At this level, we handle stripping
// out comments and processing backslash character escapes.
// The rest of the rules grammar is handled at the next level up.
//
-//---------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
void RBBIRuleScanner::nextChar(RBBIRuleChar &c) {
// Unicode Character constants needed for the processing done by nextChar(),
@@ -893,14 +908,14 @@ void RBBIRuleScanner::nextChar(RBBIRuleChar &c) {
// putc(c.fChar, stdout);
}
-//---------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
//
// Parse RBBI rules. The state machine for rules parsing is here.
// The state tables are hand-written in the file rbbirpt.txt,
// and converted to the form used here by a perl
// script rbbicst.pl
//
-//---------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
void RBBIRuleScanner::parse() {
uint16_t state;
const RBBIRuleTableEl *tableEl;
@@ -977,8 +992,7 @@ void RBBIRuleScanner::parse() {
if (tableEl->fCharClass >= 128 && tableEl->fCharClass < 240 && // Table specs a char class &&
fC.fEscaped == FALSE && // char is not escaped &&
fC.fChar != (UChar32)-1) { // char is not EOF
- UnicodeSet *uniset = fRuleSets[tableEl->fCharClass-128];
- if (uniset->contains(fC.fChar)) {
+ if (fRuleSets[tableEl->fCharClass-128].contains(fC.fChar)) {
// Table row specified a character class, or set of characters,
// and the current char matches it.
break;
@@ -994,7 +1008,7 @@ void RBBIRuleScanner::parse() {
// We've found the row of the state table that matches the current input
// character from the rules string.
// Perform any action specified by this row in the state table.
- if (doParseActions((EParseAction)tableEl->fAction) == FALSE) {
+ if (doParseActions((int32_t)tableEl->fAction) == FALSE) {
// Break out of the state machine loop if the
// the action signalled some kind of error, or
// the action was to exit, occurs on normal end-of-rules-input.
@@ -1066,11 +1080,11 @@ void RBBIRuleScanner::parse() {
}
-//---------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
//
// printNodeStack for debugging...
//
-//---------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
#ifdef RBBI_DEBUG
void RBBIRuleScanner::printNodeStack(const char *title) {
int i;
@@ -1082,12 +1096,12 @@ void RBBIRuleScanner::printNodeStack(const char *title) {
-//---------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
//
// pushNewNode create a new RBBINode of the specified type and push it
// onto the stack of nodes.
//
-//---------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
RBBINode *RBBIRuleScanner::pushNewNode(RBBINode::NodeType t) {
fNodeStackPtr++;
if (fNodeStackPtr >= kStackSize) {
@@ -1105,7 +1119,7 @@ RBBINode *RBBIRuleScanner::pushNewNode(RBBINode::NodeType t) {
-//---------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
//
// scanSet Construct a UnicodeSet from the text at the current scan
// position. Advance the scan position to the first character
@@ -1118,7 +1132,7 @@ RBBINode *RBBIRuleScanner::pushNewNode(RBBINode::NodeType t) {
// that controls rule parsing. UnicodeSets, however, are parsed by
// the UnicodeSet constructor, not by the RBBI rule parser.
//
-//---------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
void RBBIRuleScanner::scanSet() {
UnicodeSet *uset;
ParsePosition pos;
@@ -1135,6 +1149,9 @@ void RBBIRuleScanner::scanSet() {
uset = new UnicodeSet(fRB->fRules, pos, USET_IGNORE_SPACE,
fSymbolTable,
localStatus);
+ if (uset == NULL) {
+ localStatus = U_MEMORY_ALLOCATION_ERROR;
+ }
if (U_FAILURE(localStatus)) {
// TODO: Get more accurate position of the error from UnicodeSet's return info.
// UnicodeSet appears to not be reporting correctly at this time.
diff --git a/icuSources/common/rbbiscan.h b/icuSources/common/rbbiscan.h
index 89748318..dd9b8e63 100644
--- a/icuSources/common/rbbiscan.h
+++ b/icuSources/common/rbbiscan.h
@@ -1,7 +1,7 @@
//
// rbbiscan.h
//
-// Copyright (C) 2002-2005, International Business Machines Corporation and others.
+// Copyright (C) 2002-2008, International Business Machines Corporation and others.
// All Rights Reserved.
//
// This file contains declarations for class RBBIRuleScanner
@@ -41,18 +41,16 @@ class RBBISymbolTable;
// encountered.
//
//--------------------------------------------------------------------------------
-static const int kStackSize = 100; // The size of the state stack for
- // rules parsing. Corresponds roughly
- // to the depth of parentheses nesting
- // that is allowed in the rules.
-
-enum EParseAction {dummy01, dummy02}; // Placeholder enum for the specifier for
- // actions that are specified in the
- // rule parsing state table.
class RBBIRuleScanner : public UMemory {
public:
+ enum {
+ kStackSize = 100 // The size of the state stack for
+ }; // rules parsing. Corresponds roughly
+ // to the depth of parentheses nesting
+ // that is allowed in the rules.
+
struct RBBIRuleChar {
UChar32 fChar;
UBool fEscaped;
@@ -81,7 +79,7 @@ public:
static UnicodeString stripRules(const UnicodeString &rules);
private:
- UBool doParseActions(EParseAction a);
+ UBool doParseActions(int32_t a);
void error(UErrorCode e); // error reporting convenience function.
void fixOpStack(RBBINode::OpPrecedence p);
// a character.
@@ -139,7 +137,7 @@ private:
// The key is the string used for creating
// the set.
- UnicodeSet *fRuleSets[10]; // Unicode Sets that are needed during
+ UnicodeSet fRuleSets[10]; // Unicode Sets that are needed during
// the scanning of RBBI rules. The
// indicies for these are assigned by the
// perl script that builds the state tables.
diff --git a/icuSources/common/rbbisetb.cpp b/icuSources/common/rbbisetb.cpp
index 5337738b..cd855f7f 100644
--- a/icuSources/common/rbbisetb.cpp
+++ b/icuSources/common/rbbisetb.cpp
@@ -3,7 +3,7 @@
//
/*
***************************************************************************
-* Copyright (C) 2002-2005 International Business Machines Corporation *
+* Copyright (C) 2002-2008 International Business Machines Corporation *
* and others. All rights reserved. *
***************************************************************************
*/
@@ -137,6 +137,10 @@ void RBBISetBuilder::build() {
// that is in no sets.
//
fRangeList = new RangeDescriptor(*fStatus); // will check for status here
+ if (fRangeList == NULL) {
+ *fStatus = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
fRangeList->fStartChar = 0;
fRangeList->fEndChar = 0x10ffff;
@@ -354,6 +358,10 @@ void RBBISetBuilder::addValToSets(UVector *sets, uint32_t val) {
void RBBISetBuilder::addValToSet(RBBINode *usetNode, uint32_t val) {
RBBINode *leafNode = new RBBINode(RBBINode::leafChar);
+ if (leafNode == NULL) {
+ *fStatus = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
leafNode->fVal = (unsigned short)val;
if (usetNode->fLeftChild == NULL) {
usetNode->fLeftChild = leafNode;
@@ -363,6 +371,10 @@ void RBBISetBuilder::addValToSet(RBBINode *usetNode, uint32_t val) {
// Set up an OR node, with the previous stuff as the left child
// and the new value as the right child.
RBBINode *orNode = new RBBINode(RBBINode::opOr);
+ if (orNode == NULL) {
+ *fStatus = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
orNode->fLeftChild = usetNode->fLeftChild;
orNode->fRightChild = leafNode;
orNode->fLeftChild->fParent = orNode;
@@ -510,7 +522,7 @@ void RBBISetBuilder::printSets() {
RBBIDebugPrintf("\n\nUnicode Sets List\n------------------\n");
for (i=0; ; i++) {
- RBBINode *usetNode;
+ RBBINode *usetNode;
RBBINode *setRef;
RBBINode *varRef;
UnicodeString setName;
@@ -621,15 +633,14 @@ RangeDescriptor::~RangeDescriptor() {
void RangeDescriptor::split(UChar32 where, UErrorCode &status) {
U_ASSERT(where>fStartChar && where<=fEndChar);
RangeDescriptor *nr = new RangeDescriptor(*this, status);
- if (U_FAILURE(status)) {
- return;
- }
- /* test for NULL */
if(nr == 0) {
status = U_MEMORY_ALLOCATION_ERROR;
return;
}
-
+ if (U_FAILURE(status)) {
+ delete nr;
+ return;
+ }
// RangeDescriptor copy constructor copies all fields.
// Only need to update those that are different after the split.
nr->fStartChar = where;
diff --git a/icuSources/common/rbbistbl.cpp b/icuSources/common/rbbistbl.cpp
index 771eb313..cbcd3815 100644
--- a/icuSources/common/rbbistbl.cpp
+++ b/icuSources/common/rbbistbl.cpp
@@ -3,7 +3,7 @@
//
/*
***************************************************************************
-* Copyright (C) 2002-2005 International Business Machines Corporation *
+* Copyright (C) 2002-2006 International Business Machines Corporation *
* and others. All rights reserved. *
***************************************************************************
*/
@@ -29,7 +29,7 @@
//
U_CDECL_BEGIN
static void U_CALLCONV RBBISymbolTableEntry_deleter(void *p) {
- RBBISymbolTableEntry *px = (RBBISymbolTableEntry *)p;
+ U_NAMESPACE_QUALIFIER RBBISymbolTableEntry *px = (U_NAMESPACE_QUALIFIER RBBISymbolTableEntry *)p;
delete px;
}
U_CDECL_END
diff --git a/icuSources/common/rbbitblb.cpp b/icuSources/common/rbbitblb.cpp
index 6bc60c2d..44c8e9fd 100644
--- a/icuSources/common/rbbitblb.cpp
+++ b/icuSources/common/rbbitblb.cpp
@@ -1,6 +1,6 @@
/*
**********************************************************************
-* Copyright (c) 2002-2006, International Business Machines
+* Copyright (c) 2002-2008, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
*/
@@ -92,6 +92,13 @@ void RBBITableBuilder::build() {
if (fRB->fSetBuilder->sawBOF()) {
RBBINode *bofTop = new RBBINode(RBBINode::opCat);
RBBINode *bofLeaf = new RBBINode(RBBINode::leafChar);
+ // Delete and exit if memory allocation failed.
+ if (bofTop == NULL || bofLeaf == NULL) {
+ *fStatus = U_MEMORY_ALLOCATION_ERROR;
+ delete bofTop;
+ delete bofLeaf;
+ return;
+ }
bofTop->fLeftChild = bofLeaf;
bofTop->fRightChild = fTree;
bofLeaf->fParent = bofTop;
@@ -105,9 +112,20 @@ void RBBITableBuilder::build() {
// right child being the end marker.
//
RBBINode *cn = new RBBINode(RBBINode::opCat);
+ // Exit if memory allocation failed.
+ if (cn == NULL) {
+ *fStatus = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
cn->fLeftChild = fTree;
fTree->fParent = cn;
cn->fRightChild = new RBBINode(RBBINode::endMark);
+ // Delete and exit if memory allocation failed.
+ if (cn->fRightChild == NULL) {
+ *fStatus = U_MEMORY_ALLOCATION_ERROR;
+ delete cn;
+ return;
+ }
cn->fRightChild->fParent = cn;
fTree = cn;
@@ -527,33 +545,49 @@ void RBBITableBuilder::buildStateTable() {
if (U_FAILURE(*fStatus)) {
return;
}
+ RBBIStateDescriptor *failState;
+ // Set it to NULL to avoid uninitialized warning
+ RBBIStateDescriptor *initialState = NULL;
//
// Add a dummy state 0 - the stop state. Not from Aho.
int lastInputSymbol = fRB->fSetBuilder->getNumCharCategories() - 1;
- RBBIStateDescriptor *failState = new RBBIStateDescriptor(lastInputSymbol, fStatus);
+ failState = new RBBIStateDescriptor(lastInputSymbol, fStatus);
+ if (failState == NULL) {
+ *fStatus = U_MEMORY_ALLOCATION_ERROR;
+ goto ExitBuildSTdeleteall;
+ }
failState->fPositions = new UVector(*fStatus);
- if (U_FAILURE(*fStatus)) {
- return;
+ if (failState->fPositions == NULL) {
+ *fStatus = U_MEMORY_ALLOCATION_ERROR;
+ }
+ if (failState->fPositions == NULL || U_FAILURE(*fStatus)) {
+ goto ExitBuildSTdeleteall;
}
fDStates->addElement(failState, *fStatus);
if (U_FAILURE(*fStatus)) {
- return;
+ goto ExitBuildSTdeleteall;
}
// initially, the only unmarked state in Dstates is firstpos(root),
// where toot is the root of the syntax tree for (r)#;
- RBBIStateDescriptor *initialState = new RBBIStateDescriptor(lastInputSymbol, fStatus);
+ initialState = new RBBIStateDescriptor(lastInputSymbol, fStatus);
+ if (initialState == NULL) {
+ *fStatus = U_MEMORY_ALLOCATION_ERROR;
+ }
if (U_FAILURE(*fStatus)) {
- return;
+ goto ExitBuildSTdeleteall;
}
initialState->fPositions = new UVector(*fStatus);
+ if (initialState->fPositions == NULL) {
+ *fStatus = U_MEMORY_ALLOCATION_ERROR;
+ }
if (U_FAILURE(*fStatus)) {
- return;
+ goto ExitBuildSTdeleteall;
}
setAdd(initialState->fPositions, fTree->fFirstPosSet);
fDStates->addElement(initialState, *fStatus);
if (U_FAILURE(*fStatus)) {
- return;
+ goto ExitBuildSTdeleteall;
}
// while there is an unmarked state T in Dstates do begin
@@ -589,6 +623,10 @@ void RBBITableBuilder::buildStateTable() {
if ((p->fType == RBBINode::leafChar) && (p->fVal == a)) {
if (U == NULL) {
U = new UVector(*fStatus);
+ if (U == NULL) {
+ *fStatus = U_MEMORY_ALLOCATION_ERROR;
+ goto ExitBuildSTdeleteall;
+ }
}
setAdd(U, p->fFollowPos);
}
@@ -616,8 +654,11 @@ void RBBITableBuilder::buildStateTable() {
if (!UinDstates)
{
RBBIStateDescriptor *newState = new RBBIStateDescriptor(lastInputSymbol, fStatus);
+ if (newState == NULL) {
+ *fStatus = U_MEMORY_ALLOCATION_ERROR;
+ }
if (U_FAILURE(*fStatus)) {
- return;
+ goto ExitBuildSTdeleteall;
}
newState->fPositions = U;
fDStates->addElement(newState, *fStatus);
@@ -632,6 +673,11 @@ void RBBITableBuilder::buildStateTable() {
}
}
}
+ return;
+ // delete local pointers only if error occured.
+ExitBuildSTdeleteall:
+ delete initialState;
+ delete failState;
}
@@ -906,15 +952,15 @@ void RBBITableBuilder::sortedAdd(UVector **vector, int32_t val) {
//
//-----------------------------------------------------------------------------
void RBBITableBuilder::setAdd(UVector *dest, UVector *source) {
- int destOriginalSize = dest->size();
- int sourceSize = source->size();
+ int32_t destOriginalSize = dest->size();
+ int32_t sourceSize = source->size();
int32_t di = 0;
void *(destS[16]), *(sourceS[16]); // Handle small cases without malloc
void **destH = 0, **sourceH = 0;
void **destBuff, **sourceBuff;
void **destLim, **sourceLim;
- if (destOriginalSize > sizeof(destS)/sizeof(destS[0])) {
+ if (destOriginalSize > (int32_t)(sizeof(destS)/sizeof(destS[0]))) {
destH = (void **)uprv_malloc(sizeof(void *) * destOriginalSize);
destBuff = destH;
}
@@ -926,7 +972,7 @@ void RBBITableBuilder::setAdd(UVector *dest, UVector *source) {
}
destLim = destBuff + destOriginalSize;
- if (sourceSize > sizeof(sourceS)/sizeof(sourceS[0])) {
+ if (sourceSize > (int32_t)(sizeof(sourceS)/sizeof(sourceS[0]))) {
sourceH = (void **)uprv_malloc(sizeof(void *) * sourceSize);
sourceBuff = sourceH;
}
@@ -945,18 +991,20 @@ void RBBITableBuilder::setAdd(UVector *dest, UVector *source) {
(void) dest->toArray(destBuff);
(void) source->toArray(sourceBuff);
- dest->setSize(sourceSize+destOriginalSize);
+ dest->setSize(sourceSize+destOriginalSize, *fStatus);
while (sourceBuff < sourceLim && destBuff < destLim) {
- if (*destBuff < *sourceBuff) {
- dest->setElementAt(*destBuff++, di++);
- }
- else if (*sourceBuff < *destBuff) {
+ if (*destBuff == *sourceBuff) {
dest->setElementAt(*sourceBuff++, di++);
+ destBuff++;
}
- else {
+ // This check is required for machines with segmented memory, like i5/OS.
+ // Direct pointer comparison is not recommended.
+ else if (uprv_memcmp(destBuff, sourceBuff, sizeof(void *)) < 0) {
+ dest->setElementAt(*destBuff++, di++);
+ }
+ else { /* *sourceBuff < *destBuff */
dest->setElementAt(*sourceBuff++, di++);
- destBuff++;
}
}
@@ -968,7 +1016,7 @@ void RBBITableBuilder::setAdd(UVector *dest, UVector *source) {
dest->setElementAt(*sourceBuff++, di++);
}
- dest->setSize(di);
+ dest->setSize(di, *fStatus);
if (destH) {
uprv_free(destH);
}
@@ -1209,7 +1257,7 @@ RBBIStateDescriptor::RBBIStateDescriptor(int lastInputSymbol, UErrorCode *fStatu
*fStatus = U_MEMORY_ALLOCATION_ERROR;
return;
}
- fDtran->setSize(lastInputSymbol+1); // fDtran needs to be pre-sized.
+ fDtran->setSize(lastInputSymbol+1, *fStatus); // fDtran needs to be pre-sized.
// It is indexed by input symbols, and will
// hold the next state number for each
// symbol.
diff --git a/icuSources/common/rbtok.cpp b/icuSources/common/rbtok.cpp
index 311afd2d..c6331155 100644
--- a/icuSources/common/rbtok.cpp
+++ b/icuSources/common/rbtok.cpp
@@ -1,8 +1,7 @@
/*
***************************************************************************
-* Copyright (C) 2006 Apple Computer, Inc. All rights reserved. *
+* Copyright (C) 2006-2008 Apple Inc. All Rights Reserved. *
***************************************************************************
-
*/
#include "unicode/utypes.h"
@@ -244,6 +243,12 @@ RuleBasedTokenizer::RuleBasedTokenizer(uint8_t *data, UErrorCode &status)
init();
}
+RuleBasedTokenizer::RuleBasedTokenizer(const uint8_t *data, enum EDontAdopt, UErrorCode &status)
+ : RuleBasedBreakIterator((const RBBIDataHeader *)data, RuleBasedBreakIterator::kDontAdopt, status)
+{
+ init();
+}
+
RuleBasedTokenizer::~RuleBasedTokenizer() {
delete [] fStateFlags;
delete [] fLatin1Cat;
diff --git a/icuSources/common/rbtok.h b/icuSources/common/rbtok.h
index 15bb072d..a23c053c 100644
--- a/icuSources/common/rbtok.h
+++ b/icuSources/common/rbtok.h
@@ -1,8 +1,7 @@
/*
***************************************************************************
-* Copyright (C) 2006 Apple Computer, Inc. All rights reserved. *
+* Copyright (C) 2006-2008 Apple Inc. All Rights Reserved. *
***************************************************************************
-
*/
#ifndef RBTOK_H
@@ -80,6 +79,19 @@ public:
*/
RuleBasedTokenizer(uint8_t *data, UErrorCode &status);
+ /**
+ * Constructor from a flattened set of RBBI data in umemory which need not
+ * be malloced (e.g. it may be a memory-mapped file, etc.).
+ *
+ * This version does not adopt the memory, and does not
+ * free it when done.
+ * @internal
+ */
+ enum EDontAdopt {
+ kDontAdopt
+ };
+ RuleBasedTokenizer(const uint8_t *data, enum EDontAdopt dontAdopt, UErrorCode &status);
+
/**
* Destructor
* @internal
diff --git a/icuSources/common/resbund.cpp b/icuSources/common/resbund.cpp
index d46e04b1..082c5ab0 100644
--- a/icuSources/common/resbund.cpp
+++ b/icuSources/common/resbund.cpp
@@ -1,6 +1,6 @@
/*
**********************************************************************
-* Copyright (C) 1997-2004, International Business Machines
+* Copyright (C) 1997-2008, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
*
@@ -370,13 +370,15 @@ void ResourceBundle::getVersion(UVersionInfo versionInfo) const {
const Locale &ResourceBundle::getLocale(void) const
{
UBool needInit;
- umtx_lock(NULL);
- needInit = (fLocale == NULL);
- umtx_unlock(NULL);
+ UMTX_CHECK(NULL, (fLocale == NULL), needInit);
if(needInit) {
UErrorCode status = U_ZERO_ERROR;
const char *localeName = ures_getLocale(fResource, &status);
Locale *tLocale = new Locale(localeName);
+ // Null pointer check
+ if (tLocale == NULL) {
+ return Locale::getDefault(); // Return default locale if one could not be created.
+ }
umtx_lock(NULL);
ResourceBundle *me = (ResourceBundle *)this; // semantically const
if (me->fLocale == NULL) {
diff --git a/icuSources/common/ruleiter.cpp b/icuSources/common/ruleiter.cpp
index 30f136c0..b99a8315 100644
--- a/icuSources/common/ruleiter.cpp
+++ b/icuSources/common/ruleiter.cpp
@@ -1,6 +1,6 @@
/*
**********************************************************************
-* Copyright (c) 2003-2005, International Business Machines
+* Copyright (c) 2003-2007, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
* Author: Alan Liu
@@ -14,6 +14,9 @@
#include "unicode/symtable.h"
#include "util.h"
+/* \U87654321 or \ud800\udc00 */
+#define MAX_U_NOTATION_LEN 12
+
U_NAMESPACE_BEGIN
RuleCharacterIterator::RuleCharacterIterator(const UnicodeString& theText, const SymbolTable* theSym,
@@ -21,7 +24,8 @@ RuleCharacterIterator::RuleCharacterIterator(const UnicodeString& theText, const
text(theText),
pos(thePos),
sym(theSym),
- buf(0)
+ buf(0),
+ bufPos(0)
{}
UBool RuleCharacterIterator::atEnd() const {
@@ -65,9 +69,9 @@ UChar32 RuleCharacterIterator::next(int32_t options, UBool& isEscaped, UErrorCod
}
if (c == 0x5C /*'\\'*/ && (options & PARSE_ESCAPES) != 0) {
- UnicodeString s;
+ UnicodeString tempEscape;
int32_t offset = 0;
- c = lookahead(s).unescapeAt(offset);
+ c = lookahead(tempEscape, MAX_U_NOTATION_LEN).unescapeAt(offset);
jumpahead(offset);
isEscaped = TRUE;
if (c < 0) {
@@ -104,11 +108,14 @@ void RuleCharacterIterator::skipIgnored(int32_t options) {
}
}
-UnicodeString& RuleCharacterIterator::lookahead(UnicodeString& result) const {
+UnicodeString& RuleCharacterIterator::lookahead(UnicodeString& result, int32_t maxLookAhead) const {
+ if (maxLookAhead < 0) {
+ maxLookAhead = 0x7FFFFFFF;
+ }
if (buf != 0) {
- buf->extract(bufPos, 0x7FFFFFFF, result);
+ buf->extract(bufPos, maxLookAhead, result);
} else {
- text.extract(pos.getIndex(), 0x7FFFFFFF, result);
+ text.extract(pos.getIndex(), maxLookAhead, result);
}
return result;
}
diff --git a/icuSources/common/ruleiter.h b/icuSources/common/ruleiter.h
index 5c86020b..cc4e8475 100644
--- a/icuSources/common/ruleiter.h
+++ b/icuSources/common/ruleiter.h
@@ -1,6 +1,6 @@
/*
**********************************************************************
-* Copyright (c) 2003-2006, International Business Machines
+* Copyright (c) 2003-2007, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
* Author: Alan Liu
@@ -186,9 +186,10 @@ public:
* resynchronize the iterator.
* @param result a string to receive the characters to be returned
* by future calls to next()
+ * @param maxLookAhead The maximum to copy into the result.
* @return a reference to result
*/
- UnicodeString& lookahead(UnicodeString& result) const;
+ UnicodeString& lookahead(UnicodeString& result, int32_t maxLookAhead = -1) const;
/**
* Advances the position by the given number of 16-bit code units.
diff --git a/icuSources/common/schriter.cpp b/icuSources/common/schriter.cpp
index 29f15f97..c6c42442 100644
--- a/icuSources/common/schriter.cpp
+++ b/icuSources/common/schriter.cpp
@@ -1,6 +1,6 @@
/*
******************************************************************************
-* Copyright (C) 1998-2004, International Business Machines Corporation and *
+* Copyright (C) 1998-2007, International Business Machines Corporation and *
* others. All Rights Reserved. *
******************************************************************************
*
@@ -28,31 +28,31 @@ StringCharacterIterator::StringCharacterIterator()
}
StringCharacterIterator::StringCharacterIterator(const UnicodeString& textStr)
- : UCharCharacterIterator(textStr.fArray, textStr.length()),
+ : UCharCharacterIterator(textStr.getBuffer(), textStr.length()),
text(textStr)
{
// we had set the input parameter's array, now we need to set our copy's array
- UCharCharacterIterator::text = this->text.fArray;
+ UCharCharacterIterator::text = this->text.getBuffer();
}
StringCharacterIterator::StringCharacterIterator(const UnicodeString& textStr,
int32_t textPos)
- : UCharCharacterIterator(textStr.fArray, textStr.length(), textPos),
+ : UCharCharacterIterator(textStr.getBuffer(), textStr.length(), textPos),
text(textStr)
{
// we had set the input parameter's array, now we need to set our copy's array
- UCharCharacterIterator::text = this->text.fArray;
+ UCharCharacterIterator::text = this->text.getBuffer();
}
StringCharacterIterator::StringCharacterIterator(const UnicodeString& textStr,
int32_t textBegin,
int32_t textEnd,
int32_t textPos)
- : UCharCharacterIterator(textStr.fArray, textStr.length(), textBegin, textEnd, textPos),
+ : UCharCharacterIterator(textStr.getBuffer(), textStr.length(), textBegin, textEnd, textPos),
text(textStr)
{
// we had set the input parameter's array, now we need to set our copy's array
- UCharCharacterIterator::text = this->text.fArray;
+ UCharCharacterIterator::text = this->text.getBuffer();
}
StringCharacterIterator::StringCharacterIterator(const StringCharacterIterator& that)
@@ -60,7 +60,7 @@ StringCharacterIterator::StringCharacterIterator(const StringCharacterIterator&
text(that.text)
{
// we had set the input parameter's array, now we need to set our copy's array
- UCharCharacterIterator::text = this->text.fArray;
+ UCharCharacterIterator::text = this->text.getBuffer();
}
StringCharacterIterator::~StringCharacterIterator() {
@@ -71,7 +71,7 @@ StringCharacterIterator::operator=(const StringCharacterIterator& that) {
UCharCharacterIterator::operator=(that);
text = that.text;
// we had set the input parameter's array, now we need to set our copy's array
- UCharCharacterIterator::text = this->text.fArray;
+ UCharCharacterIterator::text = this->text.getBuffer();
return *this;
}
@@ -105,7 +105,7 @@ StringCharacterIterator::clone() const {
void
StringCharacterIterator::setText(const UnicodeString& newText) {
text = newText;
- UCharCharacterIterator::setText(text.fArray, text.length());
+ UCharCharacterIterator::setText(text.getBuffer(), text.length());
}
void
diff --git a/icuSources/common/serv.cpp b/icuSources/common/serv.cpp
index c00b9c8f..f94fd439 100644
--- a/icuSources/common/serv.cpp
+++ b/icuSources/common/serv.cpp
@@ -1,9 +1,9 @@
- /**
- *******************************************************************************
- * Copyright (C) 2001-2004, International Business Machines Corporation. *
- * All Rights Reserved. *
- *******************************************************************************
- */
+/**
+*******************************************************************************
+* Copyright (C) 2001-2008, International Business Machines Corporation. *
+* All Rights Reserved. *
+*******************************************************************************
+*/
#include "unicode/utypes.h"
@@ -19,13 +19,13 @@
U_NAMESPACE_BEGIN
/*
- ******************************************************************
- */
+******************************************************************
+*/
const UChar ICUServiceKey::PREFIX_DELIMITER = 0x002F; /* '/' */
ICUServiceKey::ICUServiceKey(const UnicodeString& id)
- : _id(id) {
+: _id(id) {
}
ICUServiceKey::~ICUServiceKey()
@@ -35,355 +35,355 @@ ICUServiceKey::~ICUServiceKey()
const UnicodeString&
ICUServiceKey::getID() const
{
- return _id;
+ return _id;
}
UnicodeString&
ICUServiceKey::canonicalID(UnicodeString& result) const
{
- return result.append(_id);
+ return result.append(_id);
}
UnicodeString&
ICUServiceKey::currentID(UnicodeString& result) const
{
- return canonicalID(result);
+ return canonicalID(result);
}
UnicodeString&
ICUServiceKey::currentDescriptor(UnicodeString& result) const
{
- prefix(result);
- result.append(PREFIX_DELIMITER);
- return currentID(result);
+ prefix(result);
+ result.append(PREFIX_DELIMITER);
+ return currentID(result);
}
UBool
ICUServiceKey::fallback()
{
- return FALSE;
+ return FALSE;
}
UBool
ICUServiceKey::isFallbackOf(const UnicodeString& id) const
{
- return id == _id;
+ return id == _id;
}
UnicodeString&
ICUServiceKey::prefix(UnicodeString& result) const
{
- return result;
+ return result;
}
UnicodeString&
ICUServiceKey::parsePrefix(UnicodeString& result)
{
- int32_t n = result.indexOf(PREFIX_DELIMITER);
- if (n < 0) {
- n = 0;
- }
- result.remove(n);
- return result;
+ int32_t n = result.indexOf(PREFIX_DELIMITER);
+ if (n < 0) {
+ n = 0;
+ }
+ result.remove(n);
+ return result;
}
UnicodeString&
ICUServiceKey::parseSuffix(UnicodeString& result)
{
- int32_t n = result.indexOf(PREFIX_DELIMITER);
- if (n >= 0) {
- result.remove(0, n+1);
- }
- return result;
+ int32_t n = result.indexOf(PREFIX_DELIMITER);
+ if (n >= 0) {
+ result.remove(0, n+1);
+ }
+ return result;
}
#ifdef SERVICE_DEBUG
UnicodeString&
ICUServiceKey::debug(UnicodeString& result) const
{
- debugClass(result);
- result.append(" id: ");
- result.append(_id);
- return result;
+ debugClass(result);
+ result.append(" id: ");
+ result.append(_id);
+ return result;
}
UnicodeString&
ICUServiceKey::debugClass(UnicodeString& result) const
{
- return result.append("ICUServiceKey");
+ return result.append("ICUServiceKey");
}
#endif
UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ICUServiceKey)
/*
- ******************************************************************
- */
+******************************************************************
+*/
SimpleFactory::SimpleFactory(UObject* instanceToAdopt, const UnicodeString& id, UBool visible)
- : _instance(instanceToAdopt), _id(id), _visible(visible)
+: _instance(instanceToAdopt), _id(id), _visible(visible)
{
}
SimpleFactory::~SimpleFactory()
{
- delete _instance;
+ delete _instance;
}
UObject*
SimpleFactory::create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const
{
- if (U_SUCCESS(status)) {
- UnicodeString temp;
- if (_id == key.currentID(temp)) {
- return service->cloneInstance(_instance);
+ if (U_SUCCESS(status)) {
+ UnicodeString temp;
+ if (_id == key.currentID(temp)) {
+ return service->cloneInstance(_instance);
+ }
}
- }
- return NULL;
+ return NULL;
}
void
SimpleFactory::updateVisibleIDs(Hashtable& result, UErrorCode& status) const
{
- if (_visible) {
- result.put(_id, (void*)this, status); // cast away const
- } else {
- result.remove(_id);
- }
+ if (_visible) {
+ result.put(_id, (void*)this, status); // cast away const
+ } else {
+ result.remove(_id);
+ }
}
UnicodeString&
SimpleFactory::getDisplayName(const UnicodeString& id, const Locale& /* locale */, UnicodeString& result) const
{
- if (_visible && _id == id) {
- result = _id;
- } else {
- result.setToBogus();
- }
- return result;
+ if (_visible && _id == id) {
+ result = _id;
+ } else {
+ result.setToBogus();
+ }
+ return result;
}
#ifdef SERVICE_DEBUG
UnicodeString&
SimpleFactory::debug(UnicodeString& toAppendTo) const
{
- debugClass(toAppendTo);
- toAppendTo.append(" id: ");
- toAppendTo.append(_id);
- toAppendTo.append(", visible: ");
- toAppendTo.append(_visible ? "T" : "F");
- return toAppendTo;
+ debugClass(toAppendTo);
+ toAppendTo.append(" id: ");
+ toAppendTo.append(_id);
+ toAppendTo.append(", visible: ");
+ toAppendTo.append(_visible ? "T" : "F");
+ return toAppendTo;
}
UnicodeString&
SimpleFactory::debugClass(UnicodeString& toAppendTo) const
{
- return toAppendTo.append("SimpleFactory");
+ return toAppendTo.append("SimpleFactory");
}
#endif
UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SimpleFactory)
/*
- ******************************************************************
- */
+******************************************************************
+*/
UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ServiceListener)
/*
- ******************************************************************
- */
+******************************************************************
+*/
- // Record the actual id for this service in the cache, so we can return it
- // even if we succeed later with a different id.
+// Record the actual id for this service in the cache, so we can return it
+// even if we succeed later with a different id.
class CacheEntry : public UMemory {
private:
- int32_t refcount;
+ int32_t refcount;
public:
- UnicodeString actualDescriptor;
- UObject* service;
-
- /**
- * Releases a reference to the shared resource.
- */
- ~CacheEntry() {
- delete service;
- }
-
- CacheEntry(const UnicodeString& _actualDescriptor, UObject* _service)
- : refcount(1), actualDescriptor(_actualDescriptor), service(_service) {
- }
-
- /**
- * Instantiation creates an initial reference, so don't call this
- * unless you're creating a new pointer to this. Management of
- * that pointer will have to know how to deal with refcounts.
- * Return true if the resource has not already been released.
- */
- CacheEntry* ref() {
- ++refcount;
- return this;
- }
-
- /**
- * Destructions removes a reference, so don't call this unless
- * you're removing pointer to this somewhere. Management of that
- * pointer will have to know how to deal with refcounts. Once
- * the refcount drops to zero, the resource is released. Return
- * false if the resouce has been released.
- */
- CacheEntry* unref() {
- if ((--refcount) == 0) {
- delete this;
- return NULL;
- }
- return this;
- }
-
- /**
- * Return TRUE if there is at least one reference to this and the
- * resource has not been released.
- */
- UBool isShared() const {
- return refcount > 1;
- }
+ UnicodeString actualDescriptor;
+ UObject* service;
+
+ /**
+ * Releases a reference to the shared resource.
+ */
+ ~CacheEntry() {
+ delete service;
+ }
+
+ CacheEntry(const UnicodeString& _actualDescriptor, UObject* _service)
+ : refcount(1), actualDescriptor(_actualDescriptor), service(_service) {
+ }
+
+ /**
+ * Instantiation creates an initial reference, so don't call this
+ * unless you're creating a new pointer to this. Management of
+ * that pointer will have to know how to deal with refcounts.
+ * Return true if the resource has not already been released.
+ */
+ CacheEntry* ref() {
+ ++refcount;
+ return this;
+ }
+
+ /**
+ * Destructions removes a reference, so don't call this unless
+ * you're removing pointer to this somewhere. Management of that
+ * pointer will have to know how to deal with refcounts. Once
+ * the refcount drops to zero, the resource is released. Return
+ * false if the resouce has been released.
+ */
+ CacheEntry* unref() {
+ if ((--refcount) == 0) {
+ delete this;
+ return NULL;
+ }
+ return this;
+ }
+
+ /**
+ * Return TRUE if there is at least one reference to this and the
+ * resource has not been released.
+ */
+ UBool isShared() const {
+ return refcount > 1;
+ }
};
// UObjectDeleter for serviceCache
U_CDECL_BEGIN
static void U_CALLCONV
cacheDeleter(void* obj) {
- U_NAMESPACE_USE
- ((CacheEntry*)obj)->unref();
+ U_NAMESPACE_USE ((CacheEntry*)obj)->unref();
}
/**
- * Deleter for UObjects
- */
+* Deleter for UObjects
+*/
static void U_CALLCONV
deleteUObject(void *obj) {
- U_NAMESPACE_USE
- delete (UObject*) obj;
+ U_NAMESPACE_USE delete (UObject*) obj;
}
U_CDECL_END
/*
- ******************************************************************
- */
+******************************************************************
+*/
class DNCache : public UMemory {
public:
- Hashtable cache;
- const Locale locale;
-
- DNCache(const Locale& _locale)
- : cache(), locale(_locale)
- {
- // cache.setKeyDeleter(uhash_deleteUnicodeString);
- }
+ Hashtable cache;
+ const Locale locale;
+
+ DNCache(const Locale& _locale)
+ : cache(), locale(_locale)
+ {
+ // cache.setKeyDeleter(uhash_deleteUnicodeString);
+ }
};
/*
- ******************************************************************
- */
+******************************************************************
+*/
StringPair*
StringPair::create(const UnicodeString& displayName,
const UnicodeString& id,
UErrorCode& status)
{
- if (U_SUCCESS(status)) {
- StringPair* sp = new StringPair(displayName, id);
- if (sp == NULL || sp->isBogus()) {
- status = U_MEMORY_ALLOCATION_ERROR;
- delete sp;
- return NULL;
+ if (U_SUCCESS(status)) {
+ StringPair* sp = new StringPair(displayName, id);
+ if (sp == NULL || sp->isBogus()) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ delete sp;
+ return NULL;
+ }
+ return sp;
}
- return sp;
- }
- return NULL;
+ return NULL;
}
UBool
StringPair::isBogus() const {
- return displayName.isBogus() || id.isBogus();
+ return displayName.isBogus() || id.isBogus();
}
StringPair::StringPair(const UnicodeString& _displayName,
const UnicodeString& _id)
- : displayName(_displayName)
- , id(_id)
+: displayName(_displayName)
+, id(_id)
{
}
-U_CAPI void U_EXPORT2
+U_CDECL_BEGIN
+static void U_CALLCONV
userv_deleteStringPair(void *obj) {
- U_NAMESPACE_USE
- delete (StringPair*) obj;
+ U_NAMESPACE_USE delete (StringPair*) obj;
}
+U_CDECL_END
/*
- ******************************************************************
- */
+******************************************************************
+*/
ICUService::ICUService()
- : name()
- , lock(0)
- , timestamp(0)
- , factories(NULL)
- , serviceCache(NULL)
- , idCache(NULL)
- , dnCache(NULL)
+: name()
+, lock(0)
+, timestamp(0)
+, factories(NULL)
+, serviceCache(NULL)
+, idCache(NULL)
+, dnCache(NULL)
{
- umtx_init(&lock);
+ umtx_init(&lock);
}
ICUService::ICUService(const UnicodeString& newName)
- : name(newName)
- , lock(0)
- , timestamp(0)
- , factories(NULL)
- , serviceCache(NULL)
- , idCache(NULL)
- , dnCache(NULL) {
- umtx_init(&lock);
+: name(newName)
+, lock(0)
+, timestamp(0)
+, factories(NULL)
+, serviceCache(NULL)
+, idCache(NULL)
+, dnCache(NULL)
+{
+ umtx_init(&lock);
}
ICUService::~ICUService()
- {
- {
- Mutex mutex(&lock);
- clearCaches();
- delete factories;
- factories = NULL;
- }
- umtx_destroy(&lock);
+{
+ {
+ Mutex mutex(&lock);
+ clearCaches();
+ delete factories;
+ factories = NULL;
+ }
+ umtx_destroy(&lock);
}
UObject*
ICUService::get(const UnicodeString& descriptor, UErrorCode& status) const
{
- return get(descriptor, NULL, status);
+ return get(descriptor, NULL, status);
}
UObject*
ICUService::get(const UnicodeString& descriptor, UnicodeString* actualReturn, UErrorCode& status) const
{
- UObject* result = NULL;
+ UObject* result = NULL;
ICUServiceKey* key = createKey(&descriptor, status);
if (key) {
- result = getKey(*key, actualReturn, status);
- delete key;
+ result = getKey(*key, actualReturn, status);
+ delete key;
}
- return result;
+ return result;
}
UObject*
ICUService::getKey(ICUServiceKey& key, UErrorCode& status) const
{
- return getKey(key, NULL, status);
+ return getKey(key, NULL, status);
}
// this is a vector that subclasses of ICUService can override to further customize the result object
@@ -392,7 +392,7 @@ ICUService::getKey(ICUServiceKey& key, UErrorCode& status) const
UObject*
ICUService::getKey(ICUServiceKey& key, UnicodeString* actualReturn, UErrorCode& status) const
{
- return getKey(key, actualReturn, NULL, status);
+ return getKey(key, actualReturn, NULL, status);
}
// make it possible to call reentrantly on systems that don't have reentrant mutexes.
@@ -400,335 +400,338 @@ ICUService::getKey(ICUServiceKey& key, UnicodeString* actualReturn, UErrorCode&
// reentrantly even without knowing the thread.
class XMutex : public UMemory {
public:
- inline XMutex(UMTX *mutex, UBool reentering)
- : fMutex(mutex)
- , fActive(!reentering)
- {
- if (fActive) umtx_lock(fMutex);
- }
- inline ~XMutex() {
- if (fActive) umtx_unlock(fMutex);
- }
+ inline XMutex(UMTX *mutex, UBool reentering)
+ : fMutex(mutex)
+ , fActive(!reentering)
+ {
+ if (fActive) umtx_lock(fMutex);
+ }
+ inline ~XMutex() {
+ if (fActive) umtx_unlock(fMutex);
+ }
private:
- UMTX *fMutex;
- UBool fActive;
+ UMTX *fMutex;
+ UBool fActive;
};
struct UVectorDeleter {
- UVector* _obj;
- UVectorDeleter() : _obj(NULL) {}
- ~UVectorDeleter() { delete _obj; }
+ UVector* _obj;
+ UVectorDeleter() : _obj(NULL) {}
+ ~UVectorDeleter() { delete _obj; }
};
// called only by factories, treat as private
UObject*
ICUService::getKey(ICUServiceKey& key, UnicodeString* actualReturn, const ICUServiceFactory* factory, UErrorCode& status) const
{
- if (U_FAILURE(status)) {
- return NULL;
- }
-
- if (isDefault()) {
- return handleDefault(key, actualReturn, status);
- }
-
- ICUService* ncthis = (ICUService*)this; // cast away semantic const
-
- CacheEntry* result = NULL;
- {
- // The factory list can't be modified until we're done,
- // otherwise we might update the cache with an invalid result.
- // The cache has to stay in synch with the factory list.
- // ICU doesn't have monitors so we can't use rw locks, so
- // we single-thread everything using this service, for now.
-
- // if factory is not null, we're calling from within the mutex,
- // and since some unix machines don't have reentrant mutexes we
- // need to make sure not to try to lock it again.
- XMutex(&ncthis->lock, factory != NULL);
-
- if (serviceCache == NULL) {
- ncthis->serviceCache = new Hashtable(status);
- if (U_FAILURE(status)) {
- delete serviceCache;
+ if (U_FAILURE(status)) {
return NULL;
- }
- serviceCache->setValueDeleter(cacheDeleter);
}
- UnicodeString currentDescriptor;
- UVectorDeleter cacheDescriptorList;
- UBool putInCache = FALSE;
+ if (isDefault()) {
+ return handleDefault(key, actualReturn, status);
+ }
- int32_t startIndex = 0;
- int32_t limit = factories->size();
- UBool cacheResult = TRUE;
+ ICUService* ncthis = (ICUService*)this; // cast away semantic const
- if (factory != NULL) {
- for (int32_t i = 0; i < limit; ++i) {
- if (factory == (const ICUServiceFactory*)factories->elementAt(i)) {
- startIndex = i + 1;
- break;
- }
- }
- if (startIndex == 0) {
- // throw new InternalError("Factory " + factory + "not registered with service: " + this);
- status = U_ILLEGAL_ARGUMENT_ERROR;
- return NULL;
- }
- cacheResult = FALSE;
- }
-
- do {
- currentDescriptor.remove();
- key.currentDescriptor(currentDescriptor);
- result = (CacheEntry*)serviceCache->get(currentDescriptor);
- if (result != NULL) {
- break;
- }
-
- // first test of cache failed, so we'll have to update
- // the cache if we eventually succeed-- that is, if we're
- // going to update the cache at all.
- putInCache = TRUE;
-
- int32_t index = startIndex;
- while (index < limit) {
- ICUServiceFactory* f = (ICUServiceFactory*)factories->elementAt(index++);
- UObject* service = f->create(key, this, status);
- if (U_FAILURE(status)) {
- delete service;
- return NULL;
+ CacheEntry* result = NULL;
+ {
+ // The factory list can't be modified until we're done,
+ // otherwise we might update the cache with an invalid result.
+ // The cache has to stay in synch with the factory list.
+ // ICU doesn't have monitors so we can't use rw locks, so
+ // we single-thread everything using this service, for now.
+
+ // if factory is not null, we're calling from within the mutex,
+ // and since some unix machines don't have reentrant mutexes we
+ // need to make sure not to try to lock it again.
+ XMutex mutex(&ncthis->lock, factory != NULL);
+
+ if (serviceCache == NULL) {
+ ncthis->serviceCache = new Hashtable(status);
+ if (ncthis->serviceCache == NULL) {
+ return NULL;
+ }
+ if (U_FAILURE(status)) {
+ delete serviceCache;
+ return NULL;
+ }
+ serviceCache->setValueDeleter(cacheDeleter);
}
- if (service != NULL) {
- result = new CacheEntry(currentDescriptor, service);
- if (result == NULL) {
- delete service;
- status = U_MEMORY_ALLOCATION_ERROR;
- return NULL;
- }
- goto outerEnd;
- }
- }
-
- // prepare to load the cache with all additional ids that
- // will resolve to result, assuming we'll succeed. We
- // don't want to keep querying on an id that's going to
- // fallback to the one that succeeded, we want to hit the
- // cache the first time next goaround.
- if (cacheDescriptorList._obj == NULL) {
- cacheDescriptorList._obj = new UVector(uhash_deleteUnicodeString, NULL, 5, status);
- if (U_FAILURE(status)) {
- return NULL;
- }
- }
- UnicodeString* idToCache = new UnicodeString(currentDescriptor);
- if (idToCache == NULL || idToCache->isBogus()) {
- status = U_MEMORY_ALLOCATION_ERROR;
- return NULL;
- }
+ UnicodeString currentDescriptor;
+ UVectorDeleter cacheDescriptorList;
+ UBool putInCache = FALSE;
- cacheDescriptorList._obj->addElement(idToCache, status);
- if (U_FAILURE(status)) {
- return NULL;
- }
- } while (key.fallback());
- outerEnd:
+ int32_t startIndex = 0;
+ int32_t limit = factories->size();
+ UBool cacheResult = TRUE;
- if (result != NULL) {
- if (putInCache && cacheResult) {
- serviceCache->put(result->actualDescriptor, result, status);
- if (U_FAILURE(status)) {
- delete result;
- return NULL;
+ if (factory != NULL) {
+ for (int32_t i = 0; i < limit; ++i) {
+ if (factory == (const ICUServiceFactory*)factories->elementAt(i)) {
+ startIndex = i + 1;
+ break;
+ }
+ }
+ if (startIndex == 0) {
+ // throw new InternalError("Factory " + factory + "not registered with service: " + this);
+ status = U_ILLEGAL_ARGUMENT_ERROR;
+ return NULL;
+ }
+ cacheResult = FALSE;
}
- if (cacheDescriptorList._obj != NULL) {
- for (int32_t i = cacheDescriptorList._obj->size(); --i >= 0;) {
- UnicodeString* desc = (UnicodeString*)cacheDescriptorList._obj->elementAt(i);
- serviceCache->put(*desc, result, status);
+ do {
+ currentDescriptor.remove();
+ key.currentDescriptor(currentDescriptor);
+ result = (CacheEntry*)serviceCache->get(currentDescriptor);
+ if (result != NULL) {
+ break;
+ }
+
+ // first test of cache failed, so we'll have to update
+ // the cache if we eventually succeed-- that is, if we're
+ // going to update the cache at all.
+ putInCache = TRUE;
+
+ int32_t index = startIndex;
+ while (index < limit) {
+ ICUServiceFactory* f = (ICUServiceFactory*)factories->elementAt(index++);
+ UObject* service = f->create(key, this, status);
+ if (U_FAILURE(status)) {
+ delete service;
+ return NULL;
+ }
+ if (service != NULL) {
+ result = new CacheEntry(currentDescriptor, service);
+ if (result == NULL) {
+ delete service;
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return NULL;
+ }
+
+ goto outerEnd;
+ }
+ }
+
+ // prepare to load the cache with all additional ids that
+ // will resolve to result, assuming we'll succeed. We
+ // don't want to keep querying on an id that's going to
+ // fallback to the one that succeeded, we want to hit the
+ // cache the first time next goaround.
+ if (cacheDescriptorList._obj == NULL) {
+ cacheDescriptorList._obj = new UVector(uhash_deleteUnicodeString, NULL, 5, status);
+ if (U_FAILURE(status)) {
+ return NULL;
+ }
+ }
+ UnicodeString* idToCache = new UnicodeString(currentDescriptor);
+ if (idToCache == NULL || idToCache->isBogus()) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return NULL;
+ }
+
+ cacheDescriptorList._obj->addElement(idToCache, status);
if (U_FAILURE(status)) {
- delete result;
- return NULL;
+ return NULL;
+ }
+ } while (key.fallback());
+outerEnd:
+
+ if (result != NULL) {
+ if (putInCache && cacheResult) {
+ serviceCache->put(result->actualDescriptor, result, status);
+ if (U_FAILURE(status)) {
+ delete result;
+ return NULL;
+ }
+
+ if (cacheDescriptorList._obj != NULL) {
+ for (int32_t i = cacheDescriptorList._obj->size(); --i >= 0;) {
+ UnicodeString* desc = (UnicodeString*)cacheDescriptorList._obj->elementAt(i);
+ serviceCache->put(*desc, result, status);
+ if (U_FAILURE(status)) {
+ delete result;
+ return NULL;
+ }
+
+ result->ref();
+ cacheDescriptorList._obj->removeElementAt(i);
+ }
+ }
}
- result->ref();
- cacheDescriptorList._obj->removeElementAt(i);
- }
- }
- }
-
- if (actualReturn != NULL) {
- // strip null prefix
- if (result->actualDescriptor.indexOf((UChar)0x2f) == 0) { // U+002f=slash (/)
- actualReturn->remove();
- actualReturn->append(result->actualDescriptor,
- 1,
- result->actualDescriptor.length() - 1);
- } else {
- *actualReturn = result->actualDescriptor;
- }
+ if (actualReturn != NULL) {
+ // strip null prefix
+ if (result->actualDescriptor.indexOf((UChar)0x2f) == 0) { // U+002f=slash (/)
+ actualReturn->remove();
+ actualReturn->append(result->actualDescriptor,
+ 1,
+ result->actualDescriptor.length() - 1);
+ } else {
+ *actualReturn = result->actualDescriptor;
+ }
+
+ if (actualReturn->isBogus()) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ delete result;
+ return NULL;
+ }
+ }
- if (actualReturn->isBogus()) {
- status = U_MEMORY_ALLOCATION_ERROR;
- delete result;
- return NULL;
+ UObject* service = cloneInstance(result->service);
+ if (putInCache && !cacheResult) {
+ delete result;
+ }
+ return service;
}
- }
-
- UObject* service = cloneInstance(result->service);
- if (putInCache && !cacheResult) {
- delete result;
- }
- return service;
}
- }
- return handleDefault(key, actualReturn, status);
+ return handleDefault(key, actualReturn, status);
}
UObject*
ICUService::handleDefault(const ICUServiceKey& /* key */, UnicodeString* /* actualIDReturn */, UErrorCode& /* status */) const
{
- return NULL;
+ return NULL;
}
-
+
UVector&
ICUService::getVisibleIDs(UVector& result, UErrorCode& status) const {
- return getVisibleIDs(result, NULL, status);
+ return getVisibleIDs(result, NULL, status);
}
UVector&
ICUService::getVisibleIDs(UVector& result, const UnicodeString* matchID, UErrorCode& status) const
{
- result.removeAllElements();
-
- if (U_FAILURE(status)) {
- return result;
- }
-
- ICUService * ncthis = (ICUService*)this; // cast away semantic const
- {
- Mutex mutex(&ncthis->lock);
- const Hashtable* map = getVisibleIDMap(status);
- if (map != NULL) {
- ICUServiceKey* fallbackKey = createKey(matchID, status);
-
- for (int32_t pos = -1;;) {
- const UHashElement* e = map->nextElement(pos);
- if (e == NULL) {
- break;
- }
+ result.removeAllElements();
- const UnicodeString* id = (const UnicodeString*)e->key.pointer;
- if (fallbackKey != NULL) {
- if (!fallbackKey->isFallbackOf(*id)) {
- continue;
- }
- }
+ if (U_FAILURE(status)) {
+ return result;
+ }
- UnicodeString* idClone = new UnicodeString(*id);
- if (idClone == NULL || idClone->isBogus()) {
- delete idClone;
- status = U_MEMORY_ALLOCATION_ERROR;
- break;
- }
- result.addElement(idClone, status);
- if (U_FAILURE(status)) {
- delete idClone;
- break;
+ ICUService * ncthis = (ICUService*)this; // cast away semantic const
+ {
+ Mutex mutex(&ncthis->lock);
+ const Hashtable* map = getVisibleIDMap(status);
+ if (map != NULL) {
+ ICUServiceKey* fallbackKey = createKey(matchID, status);
+
+ for (int32_t pos = -1;;) {
+ const UHashElement* e = map->nextElement(pos);
+ if (e == NULL) {
+ break;
+ }
+
+ const UnicodeString* id = (const UnicodeString*)e->key.pointer;
+ if (fallbackKey != NULL) {
+ if (!fallbackKey->isFallbackOf(*id)) {
+ continue;
+ }
+ }
+
+ UnicodeString* idClone = new UnicodeString(*id);
+ if (idClone == NULL || idClone->isBogus()) {
+ delete idClone;
+ status = U_MEMORY_ALLOCATION_ERROR;
+ break;
+ }
+ result.addElement(idClone, status);
+ if (U_FAILURE(status)) {
+ delete idClone;
+ break;
+ }
+ }
+ delete fallbackKey;
}
- }
- delete fallbackKey;
}
- }
- if (U_FAILURE(status)) {
- result.removeAllElements();
- }
- return result;
+ if (U_FAILURE(status)) {
+ result.removeAllElements();
+ }
+ return result;
}
const Hashtable*
ICUService::getVisibleIDMap(UErrorCode& status) const {
- if (U_FAILURE(status)) return NULL;
+ if (U_FAILURE(status)) return NULL;
- // must only be called when lock is already held
+ // must only be called when lock is already held
- ICUService* ncthis = (ICUService*)this; // cast away semantic const
- if (idCache == NULL) {
- ncthis->idCache = new Hashtable(status);
+ ICUService* ncthis = (ICUService*)this; // cast away semantic const
if (idCache == NULL) {
- status = U_MEMORY_ALLOCATION_ERROR;
- } else if (factories != NULL) {
- for (int32_t pos = factories->size(); --pos >= 0;) {
- ICUServiceFactory* f = (ICUServiceFactory*)factories->elementAt(pos);
- f->updateVisibleIDs(*idCache, status);
- }
- if (U_FAILURE(status)) {
- delete idCache;
- ncthis->idCache = NULL;
- }
+ ncthis->idCache = new Hashtable(status);
+ if (idCache == NULL) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ } else if (factories != NULL) {
+ for (int32_t pos = factories->size(); --pos >= 0;) {
+ ICUServiceFactory* f = (ICUServiceFactory*)factories->elementAt(pos);
+ f->updateVisibleIDs(*idCache, status);
+ }
+ if (U_FAILURE(status)) {
+ delete idCache;
+ ncthis->idCache = NULL;
+ }
+ }
}
- }
- return idCache;
+ return idCache;
}
-
+
UnicodeString&
ICUService::getDisplayName(const UnicodeString& id, UnicodeString& result) const
{
- return getDisplayName(id, result, Locale::getDefault());
+ return getDisplayName(id, result, Locale::getDefault());
}
UnicodeString&
ICUService::getDisplayName(const UnicodeString& id, UnicodeString& result, const Locale& locale) const
{
- {
- ICUService* ncthis = (ICUService*)this; // cast away semantic const
- UErrorCode status = U_ZERO_ERROR;
- Mutex mutex(&ncthis->lock);
- const Hashtable* map = getVisibleIDMap(status);
- if (map != NULL) {
- ICUServiceFactory* f = (ICUServiceFactory*)map->get(id);
- if (f != NULL) {
- f->getDisplayName(id, locale, result);
- return result;
- }
-
- // fallback
- UErrorCode status = U_ZERO_ERROR;
- ICUServiceKey* fallbackKey = createKey(&id, status);
- while (fallbackKey->fallback()) {
- UnicodeString us;
- fallbackKey->currentID(us);
- f = (ICUServiceFactory*)map->get(us);
- if (f != NULL) {
- f->getDisplayName(id, locale, result);
- delete fallbackKey;
- return result;
- }
- }
- delete fallbackKey;
- }
- }
- result.setToBogus();
- return result;
+ {
+ ICUService* ncthis = (ICUService*)this; // cast away semantic const
+ UErrorCode status = U_ZERO_ERROR;
+ Mutex mutex(&ncthis->lock);
+ const Hashtable* map = getVisibleIDMap(status);
+ if (map != NULL) {
+ ICUServiceFactory* f = (ICUServiceFactory*)map->get(id);
+ if (f != NULL) {
+ f->getDisplayName(id, locale, result);
+ return result;
+ }
+
+ // fallback
+ UErrorCode status = U_ZERO_ERROR;
+ ICUServiceKey* fallbackKey = createKey(&id, status);
+ while (fallbackKey->fallback()) {
+ UnicodeString us;
+ fallbackKey->currentID(us);
+ f = (ICUServiceFactory*)map->get(us);
+ if (f != NULL) {
+ f->getDisplayName(id, locale, result);
+ delete fallbackKey;
+ return result;
+ }
+ }
+ delete fallbackKey;
+ }
+ }
+ result.setToBogus();
+ return result;
}
UVector&
ICUService::getDisplayNames(UVector& result, UErrorCode& status) const
{
- return getDisplayNames(result, Locale::getDefault(), NULL, status);
+ return getDisplayNames(result, Locale::getDefault(), NULL, status);
}
UVector&
ICUService::getDisplayNames(UVector& result, const Locale& locale, UErrorCode& status) const
{
- return getDisplayNames(result, locale, NULL, status);
+ return getDisplayNames(result, locale, NULL, status);
}
UVector&
@@ -737,232 +740,239 @@ ICUService::getDisplayNames(UVector& result,
const UnicodeString* matchID,
UErrorCode& status) const
{
- result.removeAllElements();
- if (U_SUCCESS(status)) {
- ICUService* ncthis = (ICUService*)this; // cast away semantic const
- Mutex mutex(&ncthis->lock);
-
- if (dnCache != NULL && dnCache->locale != locale) {
- delete dnCache;
- ncthis->dnCache = NULL;
- }
+ result.removeAllElements();
+ result.setDeleter(userv_deleteStringPair);
+ if (U_SUCCESS(status)) {
+ ICUService* ncthis = (ICUService*)this; // cast away semantic const
+ Mutex mutex(&ncthis->lock);
- if (dnCache == NULL) {
- const Hashtable* m = getVisibleIDMap(status);
- if (m != NULL) {
- ncthis->dnCache = new DNCache(locale);
- if (dnCache == NULL) {
- status = U_MEMORY_ALLOCATION_ERROR;
- return result;
+ if (dnCache != NULL && dnCache->locale != locale) {
+ delete dnCache;
+ ncthis->dnCache = NULL;
}
- int32_t pos = 0;
- const UHashElement* entry = NULL;
- while ((entry = m->nextElement(pos)) != NULL) {
- const UnicodeString* id = (const UnicodeString*)entry->key.pointer;
- ICUServiceFactory* f = (ICUServiceFactory*)entry->value.pointer;
- UnicodeString dname;
- f->getDisplayName(*id, locale, dname);
- if (dname.isBogus()) {
- status = U_MEMORY_ALLOCATION_ERROR;
- } else {
- dnCache->cache.put(dname, (void*)id, status); // share pointer with visibleIDMap
- if (U_SUCCESS(status)) {
- continue;
+ if (dnCache == NULL) {
+ const Hashtable* m = getVisibleIDMap(status);
+ if (m != NULL) {
+ ncthis->dnCache = new DNCache(locale);
+ if (dnCache == NULL) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return result;
+ }
+
+ int32_t pos = -1;
+ const UHashElement* entry = NULL;
+ while ((entry = m->nextElement(pos)) != NULL) {
+ const UnicodeString* id = (const UnicodeString*)entry->key.pointer;
+ ICUServiceFactory* f = (ICUServiceFactory*)entry->value.pointer;
+ UnicodeString dname;
+ f->getDisplayName(*id, locale, dname);
+ if (dname.isBogus()) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ } else {
+ dnCache->cache.put(dname, (void*)id, status); // share pointer with visibleIDMap
+ if (U_SUCCESS(status)) {
+ continue;
+ }
+ }
+ delete dnCache;
+ ncthis->dnCache = NULL;
+ return result;
+ }
}
- }
- delete dnCache;
- ncthis->dnCache = NULL;
- return result;
}
- }
}
- }
- ICUServiceKey* matchKey = createKey(matchID, status);
- int32_t pos = 0;
- const UHashElement *entry = NULL;
- while ((entry = dnCache->cache.nextElement(pos)) != NULL) {
- const UnicodeString* id = (const UnicodeString*)entry->value.pointer;
- if (matchKey != NULL && !matchKey->isFallbackOf(*id)) {
- continue;
- }
- const UnicodeString* dn = (const UnicodeString*)entry->key.pointer;
- StringPair* sp = StringPair::create(*id, *dn, status);
- result.addElement(sp, status);
- if (U_FAILURE(status)) {
- result.removeAllElements();
- break;
+ ICUServiceKey* matchKey = createKey(matchID, status);
+ /* To ensure that all elements in the hashtable are iterated, set pos to -1.
+ * nextElement(pos) will skip the position at pos and begin the iteration
+ * at the next position, which in this case will be 0.
+ */
+ int32_t pos = -1;
+ const UHashElement *entry = NULL;
+ while ((entry = dnCache->cache.nextElement(pos)) != NULL) {
+ const UnicodeString* id = (const UnicodeString*)entry->value.pointer;
+ if (matchKey != NULL && !matchKey->isFallbackOf(*id)) {
+ continue;
+ }
+ const UnicodeString* dn = (const UnicodeString*)entry->key.pointer;
+ StringPair* sp = StringPair::create(*id, *dn, status);
+ result.addElement(sp, status);
+ if (U_FAILURE(status)) {
+ result.removeAllElements();
+ break;
+ }
}
- }
- delete matchKey;
+ delete matchKey;
- return result;
+ return result;
}
URegistryKey
ICUService::registerInstance(UObject* objToAdopt, const UnicodeString& id, UErrorCode& status)
{
- return registerInstance(objToAdopt, id, TRUE, status);
+ return registerInstance(objToAdopt, id, TRUE, status);
}
URegistryKey
ICUService::registerInstance(UObject* objToAdopt, const UnicodeString& id, UBool visible, UErrorCode& status)
{
- ICUServiceKey* key = createKey(&id, status);
- if (key != NULL) {
- UnicodeString canonicalID;
- key->canonicalID(canonicalID);
- delete key;
+ ICUServiceKey* key = createKey(&id, status);
+ if (key != NULL) {
+ UnicodeString canonicalID;
+ key->canonicalID(canonicalID);
+ delete key;
- ICUServiceFactory* f = createSimpleFactory(objToAdopt, canonicalID, visible, status);
- if (f != NULL) {
- return registerFactory(f, status);
+ ICUServiceFactory* f = createSimpleFactory(objToAdopt, canonicalID, visible, status);
+ if (f != NULL) {
+ return registerFactory(f, status);
+ }
}
- }
- delete objToAdopt;
- return NULL;
+ delete objToAdopt;
+ return NULL;
}
ICUServiceFactory*
ICUService::createSimpleFactory(UObject* objToAdopt, const UnicodeString& id, UBool visible, UErrorCode& status)
{
- if (U_SUCCESS(status)) {
- if ((objToAdopt != NULL) && (!id.isBogus())) {
- return new SimpleFactory(objToAdopt, id, visible);
+ if (U_SUCCESS(status)) {
+ if ((objToAdopt != NULL) && (!id.isBogus())) {
+ return new SimpleFactory(objToAdopt, id, visible);
+ }
+ status = U_ILLEGAL_ARGUMENT_ERROR;
}
- status = U_ILLEGAL_ARGUMENT_ERROR;
- }
- return NULL;
+ return NULL;
}
URegistryKey
ICUService::registerFactory(ICUServiceFactory* factoryToAdopt, UErrorCode& status)
{
- if (U_SUCCESS(status) && factoryToAdopt != NULL) {
- Mutex mutex(&lock);
+ if (U_SUCCESS(status) && factoryToAdopt != NULL) {
+ Mutex mutex(&lock);
- if (factories == NULL) {
- factories = new UVector(deleteUObject, NULL, status);
- if (U_FAILURE(status)) {
- delete factories;
- return NULL;
- }
- }
- factories->insertElementAt(factoryToAdopt, 0, status);
- if (U_SUCCESS(status)) {
- clearCaches();
- } else {
- delete factoryToAdopt;
- factoryToAdopt = NULL;
+ if (factories == NULL) {
+ factories = new UVector(deleteUObject, NULL, status);
+ if (U_FAILURE(status)) {
+ delete factories;
+ return NULL;
+ }
+ }
+ factories->insertElementAt(factoryToAdopt, 0, status);
+ if (U_SUCCESS(status)) {
+ clearCaches();
+ } else {
+ delete factoryToAdopt;
+ factoryToAdopt = NULL;
+ }
}
- }
- if (factoryToAdopt != NULL) {
- notifyChanged();
- }
+ if (factoryToAdopt != NULL) {
+ notifyChanged();
+ }
- return (URegistryKey)factoryToAdopt;
+ return (URegistryKey)factoryToAdopt;
}
UBool
ICUService::unregister(URegistryKey rkey, UErrorCode& status)
{
- ICUServiceFactory *factory = (ICUServiceFactory*)rkey;
- UBool result = FALSE;
- if (factory != NULL && factories != NULL) {
- Mutex mutex(&lock);
+ ICUServiceFactory *factory = (ICUServiceFactory*)rkey;
+ UBool result = FALSE;
+ if (factory != NULL && factories != NULL) {
+ Mutex mutex(&lock);
- if (factories->removeElement(factory)) {
- clearCaches();
- result = TRUE;
- } else {
- status = U_ILLEGAL_ARGUMENT_ERROR;
- delete factory;
+ if (factories->removeElement(factory)) {
+ clearCaches();
+ result = TRUE;
+ } else {
+ status = U_ILLEGAL_ARGUMENT_ERROR;
+ delete factory;
+ }
}
- }
- if (result) {
- notifyChanged();
- }
- return result;
+ if (result) {
+ notifyChanged();
+ }
+ return result;
}
void
ICUService::reset()
{
- {
- Mutex mutex(&lock);
- reInitializeFactories();
- clearCaches();
- }
- notifyChanged();
+ {
+ Mutex mutex(&lock);
+ reInitializeFactories();
+ clearCaches();
+ }
+ notifyChanged();
}
void
ICUService::reInitializeFactories()
{
- if (factories != NULL) {
- factories->removeAllElements();
- }
+ if (factories != NULL) {
+ factories->removeAllElements();
+ }
}
UBool
ICUService::isDefault() const
{
- return countFactories() == 0;
+ return countFactories() == 0;
}
ICUServiceKey*
ICUService::createKey(const UnicodeString* id, UErrorCode& status) const
{
- return (U_FAILURE(status) || id == NULL) ? NULL : new ICUServiceKey(*id);
+ return (U_FAILURE(status) || id == NULL) ? NULL : new ICUServiceKey(*id);
}
void
ICUService::clearCaches()
{
- // callers synchronize before use
- ++timestamp;
- delete dnCache; dnCache = NULL;
- delete idCache; idCache = NULL;
- delete serviceCache; serviceCache = NULL;
+ // callers synchronize before use
+ ++timestamp;
+ delete dnCache;
+ dnCache = NULL;
+ delete idCache;
+ idCache = NULL;
+ delete serviceCache; serviceCache = NULL;
}
void
ICUService::clearServiceCache()
{
- // callers synchronize before use
- delete serviceCache; serviceCache = NULL;
+ // callers synchronize before use
+ delete serviceCache; serviceCache = NULL;
}
UBool
ICUService::acceptsListener(const EventListener& l) const
{
- return l.getDynamicClassID() == ServiceListener::getStaticClassID();
+ return l.getDynamicClassID() == ServiceListener::getStaticClassID();
}
void
ICUService::notifyListener(EventListener& l) const
{
- ((ServiceListener&)l).serviceChanged(*this);
+ ((ServiceListener&)l).serviceChanged(*this);
}
UnicodeString&
ICUService::getName(UnicodeString& result) const
{
- return result.append(name);
+ return result.append(name);
}
int32_t
ICUService::countFactories() const
{
- return factories == NULL ? 0 : factories->size();
+ return factories == NULL ? 0 : factories->size();
}
int32_t
ICUService::getTimestamp() const
{
- return timestamp;
+ return timestamp;
}
U_NAMESPACE_END
diff --git a/icuSources/common/serv.h b/icuSources/common/serv.h
index 72f0a9f4..2e498fb4 100644
--- a/icuSources/common/serv.h
+++ b/icuSources/common/serv.h
@@ -1,6 +1,6 @@
/**
*******************************************************************************
- * Copyright (C) 2001-2006, International Business Machines Corporation. *
+ * Copyright (C) 2001-2007, International Business Machines Corporation. *
* All Rights Reserved. *
*******************************************************************************
*/
@@ -431,12 +431,6 @@ private:
StringPair(const UnicodeString& displayName, const UnicodeString& id);
};
-/**
- * Deleter for StringPairs
- */
-U_CAPI void U_EXPORT2
-userv_deleteStringPair(void *obj);
-
/*******************************************************************
* ICUService
*/
diff --git a/icuSources/common/triedict.cpp b/icuSources/common/triedict.cpp
index 2c58a550..0dbb5663 100644
--- a/icuSources/common/triedict.cpp
+++ b/icuSources/common/triedict.cpp
@@ -1,7 +1,7 @@
/**
*******************************************************************************
- * Copyright (C) 2006, International Business Machines Corporation and others. *
- * All Rights Reserved. *
+ * Copyright (C) 2006-2008, International Business Machines Corporation *
+ * and others. All Rights Reserved. *
*******************************************************************************
*/
@@ -231,7 +231,6 @@ private:
UStack fNodeStack; // Stack of nodes to process
UVector32 fBranchStack; // Stack of which branch we are working on
TernaryNode *fRoot; // Root node
- static const char fgClassID;
enum StackBranch {
kLessThan,
kEqual,
@@ -240,8 +239,8 @@ private:
};
public:
- static UClassID U_EXPORT2 getStaticClassID(void) { return (UClassID)&fgClassID; }
- virtual UClassID getDynamicClassID(void) const { return getStaticClassID(); }
+ static UClassID U_EXPORT2 getStaticClassID(void);
+ virtual UClassID getDynamicClassID(void) const;
public:
MutableTrieEnumeration(TernaryNode *root, UErrorCode &status)
: fNodeStack(status), fBranchStack(status) {
@@ -341,7 +340,7 @@ public:
}
};
-const char MutableTrieEnumeration::fgClassID = '\0';
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(MutableTrieEnumeration)
StringEnumeration *
MutableTrieDictionary::openWords( UErrorCode &status ) const {
@@ -547,11 +546,10 @@ private:
UVector32 fNodeStack; // Stack of nodes to process
UVector32 fIndexStack; // Stack of where in node we are
const CompactTrieHeader *fHeader; // Trie data
- static const char fgClassID;
public:
- static UClassID U_EXPORT2 getStaticClassID(void) { return (UClassID)&fgClassID; }
- virtual UClassID getDynamicClassID(void) const { return getStaticClassID(); }
+ static UClassID U_EXPORT2 getStaticClassID(void);
+ virtual UClassID getDynamicClassID(void) const;
public:
CompactTrieEnumeration(const CompactTrieHeader *header, UErrorCode &status)
: fNodeStack(status), fIndexStack(status) {
@@ -590,7 +588,7 @@ public:
}
};
-const char CompactTrieEnumeration::fgClassID = '\0';
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(CompactTrieEnumeration)
const UnicodeString *
CompactTrieEnumeration::snext(UErrorCode &status) {
@@ -808,6 +806,7 @@ compactOneNode(const TernaryNode *node, UBool parentEndsWord, UStack &nodes, UEr
new BuildCompactTrieHorizontalNode(parentEndsWord, nodes, status);
if (hResult == NULL) {
status = U_MEMORY_ALLOCATION_ERROR;
+ return NULL;
}
if (U_SUCCESS(status)) {
walkHorizontal(node, hResult, nodes, status);
@@ -820,7 +819,7 @@ compactOneNode(const TernaryNode *node, UBool parentEndsWord, UStack &nodes, UEr
if (vResult == NULL) {
status = U_MEMORY_ALLOCATION_ERROR;
}
- if (U_SUCCESS(status)) {
+ else if (U_SUCCESS(status)) {
UBool endsWord = FALSE;
// Take up nodes until we end a word, or hit a node with < or > links
do {
@@ -876,6 +875,7 @@ static void walkHorizontal(const TernaryNode *node,
}
U_NAMESPACE_END
+U_NAMESPACE_USE
U_CDECL_BEGIN
static int32_t U_CALLCONV
_sortBuildNodes(const void * /*context*/, const void *voidl, const void *voidr) {
@@ -1069,6 +1069,7 @@ CompactTrieDictionary::compactMutableTrieDictionary( const MutableTrieDictionary
int32_t count = nodes.size();
int32_t nodeCount = 1; // The sentinel node we already have
BuildCompactTrieNode *node;
+ int32_t i;
UVector32 translate(count, status); // Should be no growth needed after this
translate.push(0, status); // The sentinel node
@@ -1076,7 +1077,7 @@ CompactTrieDictionary::compactMutableTrieDictionary( const MutableTrieDictionary
return NULL;
}
- for (int32_t i = 1; i < count; ++i) {
+ for (i = 1; i < count; ++i) {
node = (BuildCompactTrieNode *)nodes[i];
if (node->fNodeID == i) {
// Only one node out of each duplicate set is used
@@ -1124,7 +1125,7 @@ CompactTrieDictionary::compactMutableTrieDictionary( const MutableTrieDictionary
uint32_t offset = offsetof(CompactTrieHeader,offsets)+(nodeCount*sizeof(uint32_t));
nodeCount = 1;
// Now write the data
- for (int32_t i = 1; i < count; ++i) {
+ for (i = 1; i < count; ++i) {
node = (BuildCompactTrieNode *)nodes[i];
if (node->fNodeID == i) {
header->offsets[nodeCount++] = offset;
@@ -1147,19 +1148,19 @@ CompactTrieDictionary::compactMutableTrieDictionary( const MutableTrieDictionary
size_t hItemCount = 0;
size_t vItemCount = 0;
uint32_t previousOff = offset;
- for (uint16_t i = nodeCount-1; i >= 2; --i) {
- const CompactTrieNode *node = getCompactNode(header, i);
+ for (uint16_t nodeIdx = nodeCount-1; nodeIdx >= 2; --nodeIdx) {
+ const CompactTrieNode *node = getCompactNode(header, nodeIdx);
if (node->flagscount & kVerticalNode) {
vCount += 1;
vItemCount += (node->flagscount & kCountMask);
- vSize += previousOff-header->offsets[i];
+ vSize += previousOff-header->offsets[nodeIdx];
}
else {
hCount += 1;
hItemCount += (node->flagscount & kCountMask);
- hSize += previousOff-header->offsets[i];
+ hSize += previousOff-header->offsets[nodeIdx];
}
- previousOff = header->offsets[i];
+ previousOff = header->offsets[nodeIdx];
}
fprintf(stderr, "Horizontal nodes: %d total, average %f bytes with %f items\n", hCount,
(double)hSize/hCount, (double)hItemCount/hCount);
diff --git a/icuSources/common/ubidi.c b/icuSources/common/ubidi.c
index bccdbfaa..2a5869bc 100644
--- a/icuSources/common/ubidi.c
+++ b/icuSources/common/ubidi.c
@@ -1,7 +1,7 @@
/*
******************************************************************************
*
-* Copyright (C) 1999-2006, International Business Machines
+* Copyright (C) 1999-2008, International Business Machines
* Corporation and others. All Rights Reserved.
*
******************************************************************************
@@ -11,14 +11,9 @@
* indentation:4
*
* created on: 1999jul27
-* created by: Markus W. Scherer
+* created by: Markus W. Scherer, updated by Matitiahu Allouche
*/
-/* set import/export definitions */
-#ifndef U_COMMON_IMPLEMENTATION
-# define U_COMMON_IMPLEMENTATION
-#endif
-
#include "cmemory.h"
#include "unicode/utypes.h"
#include "unicode/ustring.h"
@@ -26,6 +21,7 @@
#include "unicode/ubidi.h"
#include "ubidi_props.h"
#include "ubidiimp.h"
+#include "uassert.h"
/*
* General implementation notes:
@@ -188,7 +184,7 @@ ubidi_openSized(int32_t maxLength, int32_t maxRunCount, UErrorCode *pErrorCode)
/*
* We are allowed to allocate memory if memory==NULL or
* mayAllocate==TRUE for each array that we need.
- * We also try to grow and shrink memory as needed if we
+ * We also try to grow memory as needed if we
* allocate it.
*
* Assume sizeNeeded>0.
@@ -199,7 +195,8 @@ ubidi_openSized(int32_t maxLength, int32_t maxRunCount, UErrorCode *pErrorCode)
* is this the best way to do this??
*/
U_CFUNC UBool
-ubidi_getMemory(void **pMemory, int32_t *pSize, UBool mayAllocate, int32_t sizeNeeded) {
+ubidi_getMemory(BidiMemoryForAllocation *bidiMem, int32_t *pSize, UBool mayAllocate, int32_t sizeNeeded) {
+ void **pMemory = (void **)bidiMem;
/* check for existing memory */
if(*pMemory==NULL) {
/* we need to allocate memory */
@@ -210,17 +207,20 @@ ubidi_getMemory(void **pMemory, int32_t *pSize, UBool mayAllocate, int32_t sizeN
return FALSE;
}
} else {
- /* there is some memory, is it enough or too much? */
- if(sizeNeeded>*pSize && !mayAllocate) {
+ if(sizeNeeded<=*pSize) {
+ /* there is already enough memory */
+ return TRUE;
+ }
+ else if(!mayAllocate) {
/* not enough memory, and we must not allocate */
return FALSE;
- } else if(sizeNeeded!=*pSize && mayAllocate) {
- /* FOOD FOR THOUGHT: in hope to improve performance, we should
- * try never shrinking memory, only growing it when required.
- */
- /* we may try to grow or shrink */
+ } else {
+ /* we try to grow */
void *memory;
-
+ /* in most cases, we do not need the copy-old-data part of
+ * realloc, but it is needed when adding runs using getRunsMemory()
+ * in setParaRunsOnly()
+ */
if((memory=uprv_realloc(*pMemory, sizeNeeded))!=NULL) {
*pMemory=memory;
*pSize=sizeNeeded;
@@ -229,9 +229,6 @@ ubidi_getMemory(void **pMemory, int32_t *pSize, UBool mayAllocate, int32_t sizeN
/* we failed to grow */
return FALSE;
}
- } else {
- /* we have at least enough memory and must not allocate */
- return TRUE;
}
}
}
@@ -285,7 +282,7 @@ ubidi_isInverse(UBiDi *pBiDi) {
* concept of RUNS_ONLY which is a double operation.
* It could be advantageous to divide this into 3 concepts:
* a) Operation: direct / inverse / RUNS_ONLY
- * b) Direct algorithm: default / NUMBERS_SPECIAL / GROUP_NUMBERS_WITH_L
+ * b) Direct algorithm: default / NUMBERS_SPECIAL / GROUP_NUMBERS_WITH_R
* c) Inverse algorithm: default / INVERSE_LIKE_DIRECT / NUMBERS_SPECIAL
* This would allow combinations not possible today like RUNS_ONLY with
* NUMBERS_SPECIAL.
@@ -297,16 +294,16 @@ ubidi_isInverse(UBiDi *pBiDi) {
*/
U_CAPI void U_EXPORT2
ubidi_setReorderingMode(UBiDi *pBiDi, UBiDiReorderingMode reorderingMode) {
- if ((pBiDi != NULL) && (reorderingMode >= UBIDI_REORDER_DEFAULT)
+ if ((pBiDi!=NULL) && (reorderingMode >= UBIDI_REORDER_DEFAULT)
&& (reorderingMode < UBIDI_REORDER_COUNT)) {
pBiDi->reorderingMode = reorderingMode;
- pBiDi->isInverse = reorderingMode == UBIDI_REORDER_INVERSE_NUMBERS_AS_L;
+ pBiDi->isInverse = (UBool)(reorderingMode == UBIDI_REORDER_INVERSE_NUMBERS_AS_L);
}
}
U_CAPI UBiDiReorderingMode U_EXPORT2
ubidi_getReorderingMode(UBiDi *pBiDi) {
- if (pBiDi != NULL) {
+ if (pBiDi!=NULL) {
return pBiDi->reorderingMode;
} else {
return UBIDI_REORDER_DEFAULT;
@@ -318,14 +315,14 @@ ubidi_setReorderingOptions(UBiDi *pBiDi, uint32_t reorderingOptions) {
if (reorderingOptions & UBIDI_OPTION_REMOVE_CONTROLS) {
reorderingOptions&=~UBIDI_OPTION_INSERT_MARKS;
}
- if (pBiDi != NULL) {
- pBiDi->reorderingOptions = reorderingOptions;
+ if (pBiDi!=NULL) {
+ pBiDi->reorderingOptions=reorderingOptions;
}
}
U_CAPI uint32_t U_EXPORT2
ubidi_getReorderingOptions(UBiDi *pBiDi) {
- if (pBiDi != NULL) {
+ if (pBiDi!=NULL) {
return pBiDi->reorderingOptions;
} else {
return 0;
@@ -350,14 +347,14 @@ getDirProps(UBiDi *pBiDi) {
DirProp dirProp=0, paraDirDefault=0;/* initialize to avoid compiler warnings */
UBool isDefaultLevel=IS_DEFAULT_LEVEL(pBiDi->paraLevel);
/* for inverse BiDi, the default para level is set to RTL if there is a
- strong character at either end of the text */
- UBool isDefaultLevelInverse=isDefaultLevel &&
+ strong R or AL character at either end of the text */
+ UBool isDefaultLevelInverse=isDefaultLevel && (UBool)
(pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_LIKE_DIRECT ||
pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL);
int32_t lastArabicPos=-1;
int32_t controlCount=0;
- UBool removeBiDiControls = pBiDi->reorderingOptions &
- UBIDI_OPTION_REMOVE_CONTROLS;
+ UBool removeBiDiControls = (UBool)(pBiDi->reorderingOptions &
+ UBIDI_OPTION_REMOVE_CONTROLS);
typedef enum {
NOT_CONTEXTUAL, /* 0: not contextual paraLevel */
@@ -395,12 +392,12 @@ getDirProps(UBiDi *pBiDi) {
i0=i; /* index of first code unit */
UTF_NEXT_CHAR(text, i, length, uchar);
i1=i-1; /* index of last code unit, gets the directional property */
- flags|=DIRPROP_FLAG(dirProp=ubidi_getCustomizedClass(pBiDi, uchar));
+ flags|=DIRPROP_FLAG(dirProp=(DirProp)ubidi_getCustomizedClass(pBiDi, uchar));
dirProps[i1]=dirProp|paraDir;
if(i1>i0) { /* set previous code units' properties to BN */
flags|=DIRPROP_FLAG(BN);
do {
- dirProps[--i1]=BN|paraDir;
+ dirProps[--i1]=(DirProp)(BN|paraDir);
} while(i1>i0);
}
if(state==LOOKING_FOR_STRONG) {
@@ -775,120 +772,123 @@ checkExplicitLevels(UBiDi *pBiDi, UErrorCode *pErrorCode) {
return directionFromFlags(pBiDi);
}
-/*********************************************************************/
-/* The Properties state machine table */
-/*********************************************************************/
-/* */
-/* All table cells are 8 bits: */
-/* bits 0..4: next state */
-/* bits 5..7: action to perform (if > 0) */
-/* */
-/* Cells may be of format "n" where n represents the next state */
-/* (except for the rightmost column). */
-/* Cells may also be of format "_(x,y)" where x represents an action */
-/* to perform and y represents the next state. */
-/* */
-/*********************************************************************/
-/* Definitions and type for properties state table */
-/*********************************************************************/
+/******************************************************************
+ The Properties state machine table
+*******************************************************************
+
+ All table cells are 8 bits:
+ bits 0..4: next state
+ bits 5..7: action to perform (if > 0)
+
+ Cells may be of format "n" where n represents the next state
+ (except for the rightmost column).
+ Cells may also be of format "s(x,y)" where x represents an action
+ to perform and y represents the next state.
+
+*******************************************************************
+ Definitions and type for properties state table
+*******************************************************************
+*/
#define IMPTABPROPS_COLUMNS 14
#define IMPTABPROPS_RES (IMPTABPROPS_COLUMNS - 1)
#define GET_STATEPROPS(cell) ((cell)&0x1f)
#define GET_ACTIONPROPS(cell) ((cell)>>5)
-#define _(action, newState) ((uint8_t)(newState+(action<<5)))
+#define s(action, newState) ((uint8_t)(newState+(action<<5)))
static const uint8_t groupProp[] = /* dirProp regrouped */
{
/* L R EN ES ET AN CS B S WS ON LRE LRO AL RLE RLO PDF NSM BN */
0, 1, 2, 7, 8, 3, 9, 6, 5, 4, 4, 10, 10, 12, 10, 10, 10, 11, 10
};
-enum { _L=0, _R=1, _EN=2, _AN=3, _ON=4, _S=5, _B=6 }; /* reduced dirProp */
-
-/*********************************************************************/
-/* */
-/* PROPERTIES STATE TABLE */
-/* */
-/* In table impTabProps, */
-/* - the ON column regroups ON and WS */
-/* - the BN column regroups BN, LRE, RLE, LRO, RLO, PDF */
-/* - the Res column is the reduced property assigned to a run */
-/* */
-/* Action 1: process current run1, init new run1 */
-/* 2: init new run2 */
-/* 3: process run1, process run2, init new run1 */
-/* 4: process run1, set run1=run2, init new run2 */
-/* */
-/* Notes: */
-/* 1) This table is used in resolveImplicitLevels(). */
-/* 2) This table triggers actions when there is a change in the Bidi*/
-/* property of incoming characters (action 1). */
-/* 3) Most such property sequences are processed immediately (in */
-/* fact, passed to processPropertySeq(). */
-/* 4) However, numbers are assembled as one sequence. This means */
-/* that undefined situations (like CS following digits, until */
-/* it is known if the next char will be a digit) are held until */
-/* following chars define them. */
-/* Example: digits followed by CS, then comes another CS or ON; */
-/* the digits will be processed, then the CS assigned */
-/* as the start of an ON sequence (action 3). */
-/* 5) There are cases where more than one sequence must be */
-/* processed, for instance digits followed by CS followed by L: */
-/* the digits must be processed as one sequence, and the CS */
-/* must be processed as an ON sequence, all this before starting */
-/* assembling chars for the opening L sequence. */
-/* */
-/* */
+enum { DirProp_L=0, DirProp_R=1, DirProp_EN=2, DirProp_AN=3, DirProp_ON=4, DirProp_S=5, DirProp_B=6 }; /* reduced dirProp */
+
+/******************************************************************
+
+ PROPERTIES STATE TABLE
+
+ In table impTabProps,
+ - the ON column regroups ON and WS
+ - the BN column regroups BN, LRE, RLE, LRO, RLO, PDF
+ - the Res column is the reduced property assigned to a run
+
+ Action 1: process current run1, init new run1
+ 2: init new run2
+ 3: process run1, process run2, init new run1
+ 4: process run1, set run1=run2, init new run2
+
+ Notes:
+ 1) This table is used in resolveImplicitLevels().
+ 2) This table triggers actions when there is a change in the Bidi
+ property of incoming characters (action 1).
+ 3) Most such property sequences are processed immediately (in
+ fact, passed to processPropertySeq().
+ 4) However, numbers are assembled as one sequence. This means
+ that undefined situations (like CS following digits, until
+ it is known if the next char will be a digit) are held until
+ following chars define them.
+ Example: digits followed by CS, then comes another CS or ON;
+ the digits will be processed, then the CS assigned
+ as the start of an ON sequence (action 3).
+ 5) There are cases where more than one sequence must be
+ processed, for instance digits followed by CS followed by L:
+ the digits must be processed as one sequence, and the CS
+ must be processed as an ON sequence, all this before starting
+ assembling chars for the opening L sequence.
+
+
+*/
static const uint8_t impTabProps[][IMPTABPROPS_COLUMNS] =
{
/* L , R , EN , AN , ON , S , B , ES , ET , CS , BN , NSM , AL , Res */
-/* 0 Init */ { 1 , 2 , 4 , 5 , 7 , 15 , 17 , 7 , 9 , 7 , 0 , 7 , 3 , _ON },
-/* 1 L */ { 1 , _(1,2), _(1,4), _(1,5), _(1,7),_(1,15),_(1,17), _(1,7), _(1,9), _(1,7), 1 , 1 , _(1,3), _L },
-/* 2 R */ { _(1,1), 2 , _(1,4), _(1,5), _(1,7),_(1,15),_(1,17), _(1,7), _(1,9), _(1,7), 2 , 2 , _(1,3), _R },
-/* 3 AL */ { _(1,1), _(1,2), _(1,6), _(1,6), _(1,8),_(1,16),_(1,17), _(1,8), _(1,8), _(1,8), 3 , 3 , 3 , _R },
-/* 4 EN */ { _(1,1), _(1,2), 4 , _(1,5), _(1,7),_(1,15),_(1,17),_(2,10), 11 ,_(2,10), 4 , 4 , _(1,3), _EN },
-/* 5 AN */ { _(1,1), _(1,2), _(1,4), 5 , _(1,7),_(1,15),_(1,17), _(1,7), _(1,9),_(2,12), 5 , 5 , _(1,3), _AN },
-/* 6 AL:EN/AN */ { _(1,1), _(1,2), 6 , 6 , _(1,8),_(1,16),_(1,17), _(1,8), _(1,8),_(2,13), 6 , 6 , _(1,3), _AN },
-/* 7 ON */ { _(1,1), _(1,2), _(1,4), _(1,5), 7 ,_(1,15),_(1,17), 7 ,_(2,14), 7 , 7 , 7 , _(1,3), _ON },
-/* 8 AL:ON */ { _(1,1), _(1,2), _(1,6), _(1,6), 8 ,_(1,16),_(1,17), 8 , 8 , 8 , 8 , 8 , _(1,3), _ON },
-/* 9 ET */ { _(1,1), _(1,2), 4 , _(1,5), 7 ,_(1,15),_(1,17), 7 , 9 , 7 , 9 , 9 , _(1,3), _ON },
-/*10 EN+ES/CS */ { _(3,1), _(3,2), 4 , _(3,5), _(4,7),_(3,15),_(3,17), _(4,7),_(4,14), _(4,7), 10 , _(4,7), _(3,3), _EN },
-/*11 EN+ET */ { _(1,1), _(1,2), 4 , _(1,5), _(1,7),_(1,15),_(1,17), _(1,7), 11 , _(1,7), 11 , 11 , _(1,3), _EN },
-/*12 AN+CS */ { _(3,1), _(3,2), _(3,4), 5 , _(4,7),_(3,15),_(3,17), _(4,7),_(4,14), _(4,7), 12 , _(4,7), _(3,3), _AN },
-/*13 AL:EN/AN+CS */ { _(3,1), _(3,2), 6 , 6 , _(4,8),_(3,16),_(3,17), _(4,8), _(4,8), _(4,8), 13 , _(4,8), _(3,3), _AN },
-/*14 ON+ET */ { _(1,1), _(1,2), _(4,4), _(1,5), 7 ,_(1,15),_(1,17), 7 , 14 , 7 , 14 , 14 , _(1,3), _ON },
-/*15 S */ { _(1,1), _(1,2), _(1,4), _(1,5), _(1,7), 15 ,_(1,17), _(1,7), _(1,9), _(1,7), 15 , _(1,7), _(1,3), _S },
-/*16 AL:S */ { _(1,1), _(1,2), _(1,6), _(1,6), _(1,8), 16 ,_(1,17), _(1,8), _(1,8), _(1,8), 16 , _(1,8), _(1,3), _S },
-/*17 B */ { _(1,1), _(1,2), _(1,4), _(1,5), _(1,7),_(1,15), 17 , _(1,7), _(1,9), _(1,7), 17 , _(1,7), _(1,3), _B }
+/* 0 Init */ { 1 , 2 , 4 , 5 , 7 , 15 , 17 , 7 , 9 , 7 , 0 , 7 , 3 , DirProp_ON },
+/* 1 L */ { 1 , s(1,2), s(1,4), s(1,5), s(1,7),s(1,15),s(1,17), s(1,7), s(1,9), s(1,7), 1 , 1 , s(1,3), DirProp_L },
+/* 2 R */ { s(1,1), 2 , s(1,4), s(1,5), s(1,7),s(1,15),s(1,17), s(1,7), s(1,9), s(1,7), 2 , 2 , s(1,3), DirProp_R },
+/* 3 AL */ { s(1,1), s(1,2), s(1,6), s(1,6), s(1,8),s(1,16),s(1,17), s(1,8), s(1,8), s(1,8), 3 , 3 , 3 , DirProp_R },
+/* 4 EN */ { s(1,1), s(1,2), 4 , s(1,5), s(1,7),s(1,15),s(1,17),s(2,10), 11 ,s(2,10), 4 , 4 , s(1,3), DirProp_EN },
+/* 5 AN */ { s(1,1), s(1,2), s(1,4), 5 , s(1,7),s(1,15),s(1,17), s(1,7), s(1,9),s(2,12), 5 , 5 , s(1,3), DirProp_AN },
+/* 6 AL:EN/AN */ { s(1,1), s(1,2), 6 , 6 , s(1,8),s(1,16),s(1,17), s(1,8), s(1,8),s(2,13), 6 , 6 , s(1,3), DirProp_AN },
+/* 7 ON */ { s(1,1), s(1,2), s(1,4), s(1,5), 7 ,s(1,15),s(1,17), 7 ,s(2,14), 7 , 7 , 7 , s(1,3), DirProp_ON },
+/* 8 AL:ON */ { s(1,1), s(1,2), s(1,6), s(1,6), 8 ,s(1,16),s(1,17), 8 , 8 , 8 , 8 , 8 , s(1,3), DirProp_ON },
+/* 9 ET */ { s(1,1), s(1,2), 4 , s(1,5), 7 ,s(1,15),s(1,17), 7 , 9 , 7 , 9 , 9 , s(1,3), DirProp_ON },
+/*10 EN+ES/CS */ { s(3,1), s(3,2), 4 , s(3,5), s(4,7),s(3,15),s(3,17), s(4,7),s(4,14), s(4,7), 10 , s(4,7), s(3,3), DirProp_EN },
+/*11 EN+ET */ { s(1,1), s(1,2), 4 , s(1,5), s(1,7),s(1,15),s(1,17), s(1,7), 11 , s(1,7), 11 , 11 , s(1,3), DirProp_EN },
+/*12 AN+CS */ { s(3,1), s(3,2), s(3,4), 5 , s(4,7),s(3,15),s(3,17), s(4,7),s(4,14), s(4,7), 12 , s(4,7), s(3,3), DirProp_AN },
+/*13 AL:EN/AN+CS */ { s(3,1), s(3,2), 6 , 6 , s(4,8),s(3,16),s(3,17), s(4,8), s(4,8), s(4,8), 13 , s(4,8), s(3,3), DirProp_AN },
+/*14 ON+ET */ { s(1,1), s(1,2), s(4,4), s(1,5), 7 ,s(1,15),s(1,17), 7 , 14 , 7 , 14 , 14 , s(1,3), DirProp_ON },
+/*15 S */ { s(1,1), s(1,2), s(1,4), s(1,5), s(1,7), 15 ,s(1,17), s(1,7), s(1,9), s(1,7), 15 , s(1,7), s(1,3), DirProp_S },
+/*16 AL:S */ { s(1,1), s(1,2), s(1,6), s(1,6), s(1,8), 16 ,s(1,17), s(1,8), s(1,8), s(1,8), 16 , s(1,8), s(1,3), DirProp_S },
+/*17 B */ { s(1,1), s(1,2), s(1,4), s(1,5), s(1,7),s(1,15), 17 , s(1,7), s(1,9), s(1,7), 17 , s(1,7), s(1,3), DirProp_B }
};
-/* we must undef macro _ because the levels table have a different
+/* we must undef macro s because the levels table have a different
* structure (4 bits for action and 4 bits for next state.
*/
-#undef _
-
-/*********************************************************************/
-/* The levels state machine tables */
-/*********************************************************************/
-/* */
-/* All table cells are 8 bits: */
-/* bits 0..3: next state */
-/* bits 4..7: action to perform (if > 0) */
-/* */
-/* Cells may be of format "n" where n represents the next state */
-/* (except for the rightmost column). */
-/* Cells may also be of format "_(x,y)" where x represents an action */
-/* to perform and y represents the next state. */
-/* */
-/* This format limits each table to 16 states each and to 15 actions.*/
-/* */
-/*********************************************************************/
-/* Definitions and type for levels state tables */
-/*********************************************************************/
-#define IMPTABLEVELS_COLUMNS (_B + 2)
+#undef s
+
+/******************************************************************
+ The levels state machine tables
+*******************************************************************
+
+ All table cells are 8 bits:
+ bits 0..3: next state
+ bits 4..7: action to perform (if > 0)
+
+ Cells may be of format "n" where n represents the next state
+ (except for the rightmost column).
+ Cells may also be of format "s(x,y)" where x represents an action
+ to perform and y represents the next state.
+
+ This format limits each table to 16 states each and to 15 actions.
+
+*******************************************************************
+ Definitions and type for levels state tables
+*******************************************************************
+*/
+#define IMPTABLEVELS_COLUMNS (DirProp_B + 2)
#define IMPTABLEVELS_RES (IMPTABLEVELS_COLUMNS - 1)
#define GET_STATE(cell) ((cell)&0x0f)
#define GET_ACTION(cell) ((cell)>>4)
-#define _(action, newState) ((uint8_t)(newState+(action<<4)))
+#define s(action, newState) ((uint8_t)(newState+(action<<4)))
typedef uint8_t ImpTab[][IMPTABLEVELS_COLUMNS];
typedef uint8_t ImpAct[];
@@ -897,45 +897,46 @@ typedef uint8_t ImpAct[];
* instead of having a pair of ImpTab and a pair of ImpAct.
*/
typedef struct ImpTabPair {
- ImpTab * pImpTab[2];
- ImpAct * pImpAct[2];
+ const void * pImpTab[2];
+ const void * pImpAct[2];
} ImpTabPair;
-/*********************************************************************/
-/* */
-/* LEVELS STATE TABLES */
-/* */
-/* In all levels state tables, */
-/* - state 0 is the initial state */
-/* - the Res column is the increment to add to the text level */
-/* for this property sequence. */
-/* */
-/* The impAct arrays for each table of a pair map the local action */
-/* numbers of the table to the total list of actions. For instance, */
-/* action 2 in a given table corresponds to the action number which */
-/* appears in entry [2] of the impAct array for that table. */
-/* The first entry of all impAct arrays must be 0. */
-/* */
-/* Action 1: init conditional sequence */
-/* 2: prepend conditional sequence to current sequence */
-/* 3: set ON sequence to new level - 1 */
-/* 4: init EN/AN/ON sequence */
-/* 5: fix EN/AN/ON sequence followed by R */
-/* 6: set previous level sequence to level 2 */
-/* */
-/* Notes: */
-/* 1) These tables are used in processPropertySeq(). The input */
-/* is property sequences as determined by resolveImplicitLevels. */
-/* 2) Most such property sequences are processed immediately */
-/* (levels are assigned). */
-/* 3) However, some sequences cannot be assigned a final level till */
-/* one or more following sequences are received. For instance, */
-/* ON following an R sequence within an even-level paragraph. */
-/* If the following sequence is R, the ON sequence will be */
-/* assigned basic run level+1, and so will the R sequence. */
-/* 4) S is generally handled like ON, since its level will be fixed */
-/* to paragraph level in adjustWSLevels(). */
-/* */
+/******************************************************************
+
+ LEVELS STATE TABLES
+
+ In all levels state tables,
+ - state 0 is the initial state
+ - the Res column is the increment to add to the text level
+ for this property sequence.
+
+ The impAct arrays for each table of a pair map the local action
+ numbers of the table to the total list of actions. For instance,
+ action 2 in a given table corresponds to the action number which
+ appears in entry [2] of the impAct array for that table.
+ The first entry of all impAct arrays must be 0.
+
+ Action 1: init conditional sequence
+ 2: prepend conditional sequence to current sequence
+ 3: set ON sequence to new level - 1
+ 4: init EN/AN/ON sequence
+ 5: fix EN/AN/ON sequence followed by R
+ 6: set previous level sequence to level 2
+
+ Notes:
+ 1) These tables are used in processPropertySeq(). The input
+ is property sequences as determined by resolveImplicitLevels.
+ 2) Most such property sequences are processed immediately
+ (levels are assigned).
+ 3) However, some sequences cannot be assigned a final level till
+ one or more following sequences are received. For instance,
+ ON following an R sequence within an even-level paragraph.
+ If the following sequence is R, the ON sequence will be
+ assigned basic run level+1, and so will the R sequence.
+ 4) S is generally handled like ON, since its level will be fixed
+ to paragraph level in adjustWSLevels().
+
+*/
static const ImpTab impTabL_DEFAULT = /* Even paragraph level */
/* In this table, conditional sequences receive the higher possible level
@@ -944,11 +945,11 @@ static const ImpTab impTabL_DEFAULT = /* Even paragraph level */
{
/* L , R , EN , AN , ON , S , B , Res */
/* 0 : init */ { 0 , 1 , 0 , 2 , 0 , 0 , 0 , 0 },
-/* 1 : R */ { 0 , 1 , 3 , 3 , _(1,4), _(1,4), 0 , 1 },
-/* 2 : AN */ { 0 , 1 , 0 , 2 , _(1,5), _(1,5), 0 , 2 },
-/* 3 : R+EN/AN */ { 0 , 1 , 3 , 3 , _(1,4), _(1,4), 0 , 2 },
-/* 4 : R+ON */ { _(2,0), 1 , 3 , 3 , 4 , 4 , _(2,0), 1 },
-/* 5 : AN+ON */ { _(2,0), 1 , _(2,0), 2 , 5 , 5 , _(2,0), 1 }
+/* 1 : R */ { 0 , 1 , 3 , 3 , s(1,4), s(1,4), 0 , 1 },
+/* 2 : AN */ { 0 , 1 , 0 , 2 , s(1,5), s(1,5), 0 , 2 },
+/* 3 : R+EN/AN */ { 0 , 1 , 3 , 3 , s(1,4), s(1,4), 0 , 2 },
+/* 4 : R+ON */ { s(2,0), 1 , 3 , 3 , 4 , 4 , s(2,0), 1 },
+/* 5 : AN+ON */ { s(2,0), 1 , s(2,0), 2 , 5 , 5 , s(2,0), 1 }
};
static const ImpTab impTabR_DEFAULT = /* Odd paragraph level */
/* In this table, conditional sequences receive the lower possible level
@@ -957,16 +958,16 @@ static const ImpTab impTabR_DEFAULT = /* Odd paragraph level */
{
/* L , R , EN , AN , ON , S , B , Res */
/* 0 : init */ { 1 , 0 , 2 , 2 , 0 , 0 , 0 , 0 },
-/* 1 : L */ { 1 , 0 , 1 , 3 , _(1,4), _(1,4), 0 , 1 },
+/* 1 : L */ { 1 , 0 , 1 , 3 , s(1,4), s(1,4), 0 , 1 },
/* 2 : EN/AN */ { 1 , 0 , 2 , 2 , 0 , 0 , 0 , 1 },
/* 3 : L+AN */ { 1 , 0 , 1 , 3 , 5 , 5 , 0 , 1 },
-/* 4 : L+ON */ { _(2,1), 0 , _(2,1), 3 , 4 , 4 , 0 , 0 },
+/* 4 : L+ON */ { s(2,1), 0 , s(2,1), 3 , 4 , 4 , 0 , 0 },
/* 5 : L+AN+ON */ { 1 , 0 , 1 , 3 , 5 , 5 , 0 , 0 }
};
static const ImpAct impAct0 = {0,1,2,3,4,5,6};
-static const ImpTabPair impTab_DEFAULT = {{(ImpTab*)&impTabL_DEFAULT,
- (ImpTab*)&impTabR_DEFAULT},
- {(ImpAct*)&impAct0, (ImpAct*)&impAct0}};
+static const ImpTabPair impTab_DEFAULT = {{&impTabL_DEFAULT,
+ &impTabR_DEFAULT},
+ {&impAct0, &impAct0}};
static const ImpTab impTabL_NUMBERS_SPECIAL = /* Even paragraph level */
/* In this table, conditional sequences receive the higher possible level
@@ -976,13 +977,13 @@ static const ImpTab impTabL_NUMBERS_SPECIAL = /* Even paragraph level */
/* L , R , EN , AN , ON , S , B , Res */
/* 0 : init */ { 0 , 2 , 1 , 1 , 0 , 0 , 0 , 0 },
/* 1 : L+EN/AN */ { 0 , 2 , 1 , 1 , 0 , 0 , 0 , 2 },
-/* 2 : R */ { 0 , 2 , 4 , 4 , _(1,3), 0 , 0 , 1 },
-/* 3 : R+ON */ { _(2,0), 2 , 4 , 4 , 3 , 3 , _(2,0), 1 },
-/* 4 : R+EN/AN */ { 0 , 2 , 4 , 4 , _(1,3), _(1,3), 0 , 2 }
+/* 2 : R */ { 0 , 2 , 4 , 4 , s(1,3), 0 , 0 , 1 },
+/* 3 : R+ON */ { s(2,0), 2 , 4 , 4 , 3 , 3 , s(2,0), 1 },
+/* 4 : R+EN/AN */ { 0 , 2 , 4 , 4 , s(1,3), s(1,3), 0 , 2 }
};
-static const ImpTabPair impTab_NUMBERS_SPECIAL = {{(ImpTab*)&impTabL_NUMBERS_SPECIAL,
- (ImpTab*)&impTabR_DEFAULT},
- {(ImpAct*)&impAct0, (ImpAct*)&impAct0}};
+static const ImpTabPair impTab_NUMBERS_SPECIAL = {{&impTabL_NUMBERS_SPECIAL,
+ &impTabR_DEFAULT},
+ {&impAct0, &impAct0}};
static const ImpTab impTabL_GROUP_NUMBERS_WITH_R =
/* In this table, EN/AN+ON sequences receive levels as if associated with R
@@ -990,12 +991,12 @@ static const ImpTab impTabL_GROUP_NUMBERS_WITH_R =
*/
{
/* L , R , EN , AN , ON , S , B , Res */
-/* 0 init */ { 0 , 3 , _(1,1), _(1,1), 0 , 0 , 0 , 0 },
-/* 1 EN/AN */ { _(2,0), 3 , 1 , 1 , 2 , _(2,0), _(2,0), 2 },
-/* 2 EN/AN+ON */ { _(2,0), 3 , 1 , 1 , 2 , _(2,0), _(2,0), 1 },
-/* 3 R */ { 0 , 3 , 5 , 5 , _(1,4), 0 , 0 , 1 },
-/* 4 R+ON */ { _(2,0), 3 , 5 , 5 , 4 , _(2,0), _(2,0), 1 },
-/* 5 R+EN/AN */ { 0 , 3 , 5 , 5 , _(1,4), 0 , 0 , 2 }
+/* 0 init */ { 0 , 3 , s(1,1), s(1,1), 0 , 0 , 0 , 0 },
+/* 1 EN/AN */ { s(2,0), 3 , 1 , 1 , 2 , s(2,0), s(2,0), 2 },
+/* 2 EN/AN+ON */ { s(2,0), 3 , 1 , 1 , 2 , s(2,0), s(2,0), 1 },
+/* 3 R */ { 0 , 3 , 5 , 5 , s(1,4), 0 , 0 , 1 },
+/* 4 R+ON */ { s(2,0), 3 , 5 , 5 , 4 , s(2,0), s(2,0), 1 },
+/* 5 R+EN/AN */ { 0 , 3 , 5 , 5 , s(1,4), 0 , 0 , 2 }
};
static const ImpTab impTabR_GROUP_NUMBERS_WITH_R =
/* In this table, EN/AN+ON sequences receive levels as if associated with R
@@ -1005,14 +1006,14 @@ static const ImpTab impTabR_GROUP_NUMBERS_WITH_R =
/* L , R , EN , AN , ON , S , B , Res */
/* 0 init */ { 2 , 0 , 1 , 1 , 0 , 0 , 0 , 0 },
/* 1 EN/AN */ { 2 , 0 , 1 , 1 , 0 , 0 , 0 , 1 },
-/* 2 L */ { 2 , 0 , _(1,4), _(1,4), _(1,3), 0 , 0 , 1 },
-/* 3 L+ON */ { _(2,2), 0 , 4 , 4 , 3 , 0 , 0 , 0 },
-/* 4 L+EN/AN */ { _(2,2), 0 , 4 , 4 , 3 , 0 , 0 , 1 }
+/* 2 L */ { 2 , 0 , s(1,4), s(1,4), s(1,3), 0 , 0 , 1 },
+/* 3 L+ON */ { s(2,2), 0 , 4 , 4 , 3 , 0 , 0 , 0 },
+/* 4 L+EN/AN */ { s(2,2), 0 , 4 , 4 , 3 , 0 , 0 , 1 }
};
static const ImpTabPair impTab_GROUP_NUMBERS_WITH_R = {
- {(ImpTab*)&impTabL_GROUP_NUMBERS_WITH_R,
- (ImpTab*)&impTabR_GROUP_NUMBERS_WITH_R},
- {(ImpAct*)&impAct0, (ImpAct*)&impAct0}};
+ {&impTabL_GROUP_NUMBERS_WITH_R,
+ &impTabR_GROUP_NUMBERS_WITH_R},
+ {&impAct0, &impAct0}};
static const ImpTab impTabL_INVERSE_NUMBERS_AS_L =
@@ -1022,11 +1023,11 @@ static const ImpTab impTabL_INVERSE_NUMBERS_AS_L =
{
/* L , R , EN , AN , ON , S , B , Res */
/* 0 : init */ { 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 },
-/* 1 : R */ { 0 , 1 , 0 , 0 , _(1,4), _(1,4), 0 , 1 },
-/* 2 : AN */ { 0 , 1 , 0 , 0 , _(1,5), _(1,5), 0 , 2 },
-/* 3 : R+EN/AN */ { 0 , 1 , 0 , 0 , _(1,4), _(1,4), 0 , 2 },
-/* 4 : R+ON */ { _(2,0), 1 , _(2,0), _(2,0), 4 , 4 , _(2,0), 1 },
-/* 5 : AN+ON */ { _(2,0), 1 , _(2,0), _(2,0), 5 , 5 , _(2,0), 1 }
+/* 1 : R */ { 0 , 1 , 0 , 0 , s(1,4), s(1,4), 0 , 1 },
+/* 2 : AN */ { 0 , 1 , 0 , 0 , s(1,5), s(1,5), 0 , 2 },
+/* 3 : R+EN/AN */ { 0 , 1 , 0 , 0 , s(1,4), s(1,4), 0 , 2 },
+/* 4 : R+ON */ { s(2,0), 1 , s(2,0), s(2,0), 4 , 4 , s(2,0), 1 },
+/* 5 : AN+ON */ { s(2,0), 1 , s(2,0), s(2,0), 5 , 5 , s(2,0), 1 }
};
static const ImpTab impTabR_INVERSE_NUMBERS_AS_L =
/* This table is identical to the Default RTL table except that EN and AN are
@@ -1035,16 +1036,16 @@ static const ImpTab impTabR_INVERSE_NUMBERS_AS_L =
{
/* L , R , EN , AN , ON , S , B , Res */
/* 0 : init */ { 1 , 0 , 1 , 1 , 0 , 0 , 0 , 0 },
-/* 1 : L */ { 1 , 0 , 1 , 1 , _(1,4), _(1,4), 0 , 1 },
+/* 1 : L */ { 1 , 0 , 1 , 1 , s(1,4), s(1,4), 0 , 1 },
/* 2 : EN/AN */ { 1 , 0 , 1 , 1 , 0 , 0 , 0 , 1 },
/* 3 : L+AN */ { 1 , 0 , 1 , 1 , 5 , 5 , 0 , 1 },
-/* 4 : L+ON */ { _(2,1), 0 , _(2,1), _(2,1), 4 , 4 , 0 , 0 },
+/* 4 : L+ON */ { s(2,1), 0 , s(2,1), s(2,1), 4 , 4 , 0 , 0 },
/* 5 : L+AN+ON */ { 1 , 0 , 1 , 1 , 5 , 5 , 0 , 0 }
};
static const ImpTabPair impTab_INVERSE_NUMBERS_AS_L = {
- {(ImpTab*)&impTabL_INVERSE_NUMBERS_AS_L,
- (ImpTab*)&impTabR_INVERSE_NUMBERS_AS_L},
- {(ImpAct*)&impAct0, (ImpAct*)&impAct0}};
+ {&impTabL_INVERSE_NUMBERS_AS_L,
+ &impTabR_INVERSE_NUMBERS_AS_L},
+ {&impAct0, &impAct0}};
static const ImpTab impTabR_INVERSE_LIKE_DIRECT = /* Odd paragraph level */
/* In this table, conditional sequences receive the lower possible level
@@ -1053,33 +1054,33 @@ static const ImpTab impTabR_INVERSE_LIKE_DIRECT = /* Odd paragraph level */
{
/* L , R , EN , AN , ON , S , B , Res */
/* 0 : init */ { 1 , 0 , 2 , 2 , 0 , 0 , 0 , 0 },
-/* 1 : L */ { 1 , 0 , 1 , 2 , _(1,3), _(1,3), 0 , 1 },
+/* 1 : L */ { 1 , 0 , 1 , 2 , s(1,3), s(1,3), 0 , 1 },
/* 2 : EN/AN */ { 1 , 0 , 2 , 2 , 0 , 0 , 0 , 1 },
-/* 3 : L+ON */ { _(2,1), _(3,0), 6 , 4 , 3 , 3 , _(3,0), 0 },
-/* 4 : L+ON+AN */ { _(2,1), _(3,0), 6 , 4 , 5 , 5 , _(3,0), 3 },
-/* 5 : L+AN+ON */ { _(2,1), _(3,0), 6 , 4 , 5 , 5 , _(3,0), 2 },
-/* 6 : L+ON+EN */ { _(2,1), _(3,0), 6 , 4 , 3 , 3 , _(3,0), 1 }
+/* 3 : L+ON */ { s(2,1), s(3,0), 6 , 4 , 3 , 3 , s(3,0), 0 },
+/* 4 : L+ON+AN */ { s(2,1), s(3,0), 6 , 4 , 5 , 5 , s(3,0), 3 },
+/* 5 : L+AN+ON */ { s(2,1), s(3,0), 6 , 4 , 5 , 5 , s(3,0), 2 },
+/* 6 : L+ON+EN */ { s(2,1), s(3,0), 6 , 4 , 3 , 3 , s(3,0), 1 }
};
static const ImpAct impAct1 = {0,1,11,12};
/* FOOD FOR THOUGHT: in LTR table below, check case "JKL 123abc"
*/
static const ImpTabPair impTab_INVERSE_LIKE_DIRECT = {
- {(ImpTab*)&impTabL_DEFAULT,
- (ImpTab*)&impTabR_INVERSE_LIKE_DIRECT},
- {(ImpAct*)&impAct0, (ImpAct*)&impAct1}};
+ {&impTabL_DEFAULT,
+ &impTabR_INVERSE_LIKE_DIRECT},
+ {&impAct0, &impAct1}};
static const ImpTab impTabL_INVERSE_LIKE_DIRECT_WITH_MARKS =
/* The case handled in this table is (visually): R EN L
*/
{
/* L , R , EN , AN , ON , S , B , Res */
-/* 0 : init */ { 0 , _(6,3), 0 , 1 , 0 , 0 , 0 , 0 },
-/* 1 : L+AN */ { 0 , _(6,3), 0 , 1 , _(1,2), _(3,0), 0 , 4 },
-/* 2 : L+AN+ON */ { _(2,0), _(6,3), _(2,0), 1 , 2 , _(3,0), _(2,0), 3 },
-/* 3 : R */ { 0 , _(6,3), _(5,5), _(5,6), _(1,4), _(3,0), 0 , 3 },
-/* 4 : R+ON */ { _(3,0), _(4,3), _(5,5), _(5,6), 4 , _(3,0), _(3,0), 3 },
-/* 5 : R+EN */ { _(3,0), _(4,3), 5 , _(5,6), _(1,4), _(3,0), _(3,0), 4 },
-/* 6 : R+AN */ { _(3,0), _(4,3), _(5,5), 6 , _(1,4), _(3,0), _(3,0), 4 }
+/* 0 : init */ { 0 , s(6,3), 0 , 1 , 0 , 0 , 0 , 0 },
+/* 1 : L+AN */ { 0 , s(6,3), 0 , 1 , s(1,2), s(3,0), 0 , 4 },
+/* 2 : L+AN+ON */ { s(2,0), s(6,3), s(2,0), 1 , 2 , s(3,0), s(2,0), 3 },
+/* 3 : R */ { 0 , s(6,3), s(5,5), s(5,6), s(1,4), s(3,0), 0 , 3 },
+/* 4 : R+ON */ { s(3,0), s(4,3), s(5,5), s(5,6), 4 , s(3,0), s(3,0), 3 },
+/* 5 : R+EN */ { s(3,0), s(4,3), 5 , s(5,6), s(1,4), s(3,0), s(3,0), 4 },
+/* 6 : R+AN */ { s(3,0), s(4,3), s(5,5), 6 , s(1,4), s(3,0), s(3,0), 4 }
};
static const ImpTab impTabR_INVERSE_LIKE_DIRECT_WITH_MARKS =
/* The cases handled in this table are (visually): R EN L
@@ -1087,46 +1088,46 @@ static const ImpTab impTabR_INVERSE_LIKE_DIRECT_WITH_MARKS =
*/
{
/* L , R , EN , AN , ON , S , B , Res */
-/* 0 : init */ { _(1,3), 0 , 1 , 1 , 0 , 0 , 0 , 0 },
-/* 1 : R+EN/AN */ { _(2,3), 0 , 1 , 1 , 2 , _(4,0), 0 , 1 },
-/* 2 : R+EN/AN+ON */ { _(2,3), 0 , 1 , 1 , 2 , _(4,0), 0 , 0 },
-/* 3 : L */ { 3 , 0 , 3 , _(3,6), _(1,4), _(4,0), 0 , 1 },
-/* 4 : L+ON */ { _(5,3), _(4,0), 5 , _(3,6), 4 , _(4,0), _(4,0), 0 },
-/* 5 : L+ON+EN */ { _(5,3), _(4,0), 5 , _(3,6), 4 , _(4,0), _(4,0), 1 },
-/* 6 : L+AN */ { _(5,3), _(4,0), 6 , 6 , 4 , _(4,0), _(4,0), 3 }
+/* 0 : init */ { s(1,3), 0 , 1 , 1 , 0 , 0 , 0 , 0 },
+/* 1 : R+EN/AN */ { s(2,3), 0 , 1 , 1 , 2 , s(4,0), 0 , 1 },
+/* 2 : R+EN/AN+ON */ { s(2,3), 0 , 1 , 1 , 2 , s(4,0), 0 , 0 },
+/* 3 : L */ { 3 , 0 , 3 , s(3,6), s(1,4), s(4,0), 0 , 1 },
+/* 4 : L+ON */ { s(5,3), s(4,0), 5 , s(3,6), 4 , s(4,0), s(4,0), 0 },
+/* 5 : L+ON+EN */ { s(5,3), s(4,0), 5 , s(3,6), 4 , s(4,0), s(4,0), 1 },
+/* 6 : L+AN */ { s(5,3), s(4,0), 6 , 6 , 4 , s(4,0), s(4,0), 3 }
};
static const ImpAct impAct2 = {0,1,7,8,9,10};
static const ImpTabPair impTab_INVERSE_LIKE_DIRECT_WITH_MARKS = {
- {(ImpTab*)&impTabL_INVERSE_LIKE_DIRECT_WITH_MARKS,
- (ImpTab*)&impTabR_INVERSE_LIKE_DIRECT_WITH_MARKS},
- {(ImpAct*)&impAct0, (ImpAct*)&impAct2}};
+ {&impTabL_INVERSE_LIKE_DIRECT_WITH_MARKS,
+ &impTabR_INVERSE_LIKE_DIRECT_WITH_MARKS},
+ {&impAct0, &impAct2}};
static const ImpTabPair impTab_INVERSE_FOR_NUMBERS_SPECIAL = {
- {(ImpTab*)&impTabL_NUMBERS_SPECIAL,
- (ImpTab*)&impTabR_INVERSE_LIKE_DIRECT},
- {(ImpAct*)&impAct0, (ImpAct*)&impAct1}};
+ {&impTabL_NUMBERS_SPECIAL,
+ &impTabR_INVERSE_LIKE_DIRECT},
+ {&impAct0, &impAct1}};
static const ImpTab impTabL_INVERSE_FOR_NUMBERS_SPECIAL_WITH_MARKS =
/* The case handled in this table is (visually): R EN L
*/
{
/* L , R , EN , AN , ON , S , B , Res */
-/* 0 : init */ { 0 , _(6,2), 1 , 1 , 0 , 0 , 0 , 0 },
-/* 1 : L+EN/AN */ { 0 , _(6,2), 1 , 1 , 0 , _(3,0), 0 , 4 },
-/* 2 : R */ { 0 , _(6,2), _(5,4), _(5,4), _(1,3), _(3,0), 0 , 3 },
-/* 3 : R+ON */ { _(3,0), _(4,2), _(5,4), _(5,4), 3 , _(3,0), _(3,0), 3 },
-/* 4 : R+EN/AN */ { _(3,0), _(4,2), 4 , 4 , _(1,3), _(3,0), _(3,0), 4 }
+/* 0 : init */ { 0 , s(6,2), 1 , 1 , 0 , 0 , 0 , 0 },
+/* 1 : L+EN/AN */ { 0 , s(6,2), 1 , 1 , 0 , s(3,0), 0 , 4 },
+/* 2 : R */ { 0 , s(6,2), s(5,4), s(5,4), s(1,3), s(3,0), 0 , 3 },
+/* 3 : R+ON */ { s(3,0), s(4,2), s(5,4), s(5,4), 3 , s(3,0), s(3,0), 3 },
+/* 4 : R+EN/AN */ { s(3,0), s(4,2), 4 , 4 , s(1,3), s(3,0), s(3,0), 4 }
};
static const ImpTabPair impTab_INVERSE_FOR_NUMBERS_SPECIAL_WITH_MARKS = {
- {(ImpTab*)&impTabL_INVERSE_FOR_NUMBERS_SPECIAL_WITH_MARKS,
- (ImpTab*)&impTabR_INVERSE_LIKE_DIRECT_WITH_MARKS},
- {(ImpAct*)&impAct0, (ImpAct*)&impAct2}};
+ {&impTabL_INVERSE_FOR_NUMBERS_SPECIAL_WITH_MARKS,
+ &impTabR_INVERSE_LIKE_DIRECT_WITH_MARKS},
+ {&impAct0, &impAct2}};
-#undef _
+#undef s
typedef struct {
- ImpTab * pImpTab; /* level table pointer */
- ImpAct * pImpAct; /* action map array */
+ const ImpTab * pImpTab; /* level table pointer */
+ const ImpAct * pImpAct; /* action map array */
int32_t startON; /* start of ON sequence */
int32_t startL2EN; /* start of level 2 sequence */
int32_t lastStrongRTL; /* index of last found R or AL */
@@ -1195,15 +1196,15 @@ static void
processPropertySeq(UBiDi *pBiDi, LevState *pLevState, uint8_t _prop,
int32_t start, int32_t limit) {
uint8_t cell, oldStateSeq, actionSeq;
- ImpTab * pImpTab=pLevState->pImpTab;
- ImpAct * pImpAct=pLevState->pImpAct;
+ const ImpTab * pImpTab=pLevState->pImpTab;
+ const ImpAct * pImpAct=pLevState->pImpAct;
UBiDiLevel * levels=pBiDi->levels;
UBiDiLevel level, addLevel;
InsertPoints * pInsertPoints;
int32_t start0, k;
start0=start; /* save original start position */
- oldStateSeq=pLevState->state;
+ oldStateSeq=(uint8_t)pLevState->state;
cell=(*pImpTab)[oldStateSeq][_prop];
pLevState->state=GET_STATE(cell); /* isolate the new state */
actionSeq=(*pImpAct)[GET_ACTION(cell)]; /* isolate the action */
@@ -1237,7 +1238,7 @@ processPropertySeq(UBiDi *pBiDi, LevState *pLevState, uint8_t _prop,
if ((level & 1) && (pLevState->startON > 0)) { /* after ON */
start=pLevState->startON; /* reset to basic run level */
}
- if (_prop == _S) /* add LRM before S */
+ if (_prop == DirProp_S) /* add LRM before S */
{
addPoint(pBiDi, start0, LRM_BEFORE);
pInsertPoints->confirmed=pInsertPoints->size;
@@ -1253,7 +1254,7 @@ processPropertySeq(UBiDi *pBiDi, LevState *pLevState, uint8_t _prop,
/* mark insert points as confirmed */
pInsertPoints->confirmed=pInsertPoints->size;
pLevState->lastStrongRTL=-1;
- if (_prop == _S) /* add LRM before S */
+ if (_prop == DirProp_S) /* add LRM before S */
{
addPoint(pBiDi, start0, LRM_BEFORE);
pInsertPoints->confirmed=pInsertPoints->size;
@@ -1273,7 +1274,7 @@ processPropertySeq(UBiDi *pBiDi, LevState *pLevState, uint8_t _prop,
case 5: /* EN/AN after R/AL + possible cont */
/* check for real AN */
- if ((_prop == _AN) && (NO_CONTEXT_RTL(pBiDi->dirProps[start0]) == AN) &&
+ if ((_prop == DirProp_AN) && (NO_CONTEXT_RTL(pBiDi->dirProps[start0]) == AN) &&
(pBiDi->reorderingMode!=UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL))
{
/* real AN */
@@ -1325,7 +1326,7 @@ processPropertySeq(UBiDi *pBiDi, LevState *pLevState, uint8_t _prop,
/* false alert, infirm LRMs around previous AN */
pInsertPoints=&(pBiDi->insertPoints);
pInsertPoints->size=pInsertPoints->confirmed;
- if (_prop == _S) /* add RLM before S */
+ if (_prop == DirProp_S) /* add RLM before S */
{
addPoint(pBiDi, start0, RLM_BEFORE);
pInsertPoints->confirmed=pInsertPoints->size;
@@ -1372,8 +1373,7 @@ processPropertySeq(UBiDi *pBiDi, LevState *pLevState, uint8_t _prop,
break;
default: /* we should never get here */
- start=start0+25;
- start/=(start-start0-25); /* force program crash */
+ U_ASSERT(FALSE);
break;
}
}
@@ -1406,16 +1406,17 @@ resolveImplicitLevels(UBiDi *pBiDi,
* actions) and different levels state tables (maybe very similar to the
* LTR corresponding ones.
*/
- inverseRTL=((startlastArabicPos) && (GET_PARALEVEL(pBiDi, start) & 1) &&
- (pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_LIKE_DIRECT ||
- pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL));
+ inverseRTL=(UBool)
+ ((startlastArabicPos) && (GET_PARALEVEL(pBiDi, start) & 1) &&
+ (pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_LIKE_DIRECT ||
+ pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL));
/* initialize for levels state table */
levState.startL2EN=-1; /* used for INVERSE_LIKE_DIRECT_WITH_MARKS */
levState.lastStrongRTL=-1; /* used for INVERSE_LIKE_DIRECT_WITH_MARKS */
levState.state=0;
levState.runLevel=pBiDi->levels[start];
- levState.pImpTab=((pBiDi->pImpTabPair)->pImpTab)[levState.runLevel&1];
- levState.pImpAct=((pBiDi->pImpTabPair)->pImpAct)[levState.runLevel&1];
+ levState.pImpTab=(const ImpTab*)((pBiDi->pImpTabPair)->pImpTab)[levState.runLevel&1];
+ levState.pImpAct=(const ImpAct*)((pBiDi->pImpTabPair)->pImpAct)[levState.runLevel&1];
processPropertySeq(pBiDi, &levState, sor, start, start);
/* initialize for property state table */
if(dirProps[start]==NSM) {
@@ -1478,7 +1479,7 @@ resolveImplicitLevels(UBiDi *pBiDi,
break;
case 3: /* process seq1, process seq2, init new seq1 */
processPropertySeq(pBiDi, &levState, resProp, start1, start2);
- processPropertySeq(pBiDi, &levState, _ON, start2, i);
+ processPropertySeq(pBiDi, &levState, DirProp_ON, start2, i);
start1=i;
break;
case 4: /* process seq1, set seq1=seq2, init new seq2 */
@@ -1487,8 +1488,7 @@ resolveImplicitLevels(UBiDi *pBiDi,
start2=i;
break;
default: /* we should never get here */
- start=start1+25;
- start/=(start-start1-25); /* force program crash */
+ U_ASSERT(FALSE);
break;
}
}
@@ -1552,8 +1552,11 @@ setParaRunsOnly(UBiDi *pBiDi, const UChar *text, int32_t length,
void *runsOnlyMemory;
int32_t *visualMap;
UChar *visualText;
+ int32_t saveLength, saveTrailingWSStart;
const UBiDiLevel *levels;
UBiDiLevel *saveLevels;
+ UBiDiDirection saveDirection;
+ UBool saveMayAllocateText;
Run *runs;
int32_t visualLength, i, j, visualStart, logicalStart,
runCount, runLength, addedRuns, insertRemove,
@@ -1580,8 +1583,19 @@ setParaRunsOnly(UBiDi *pBiDi, const UChar *text, int32_t length,
pBiDi->reorderingOptions&=~UBIDI_OPTION_INSERT_MARKS;
pBiDi->reorderingOptions|=UBIDI_OPTION_REMOVE_CONTROLS;
}
+ paraLevel&=1; /* accept only 0 or 1 */
ubidi_setPara(pBiDi, text, length, paraLevel, NULL, pErrorCode);
+ if(U_FAILURE(*pErrorCode)) {
+ goto cleanup3;
+ }
+ /* we cannot access directly pBiDi->levels since it is not yet set if
+ * direction is not MIXED
+ */
levels=ubidi_getLevels(pBiDi, pErrorCode);
+ uprv_memcpy(saveLevels, levels, pBiDi->length*sizeof(UBiDiLevel));
+ saveTrailingWSStart=pBiDi->trailingWSStart;
+ saveLength=pBiDi->length;
+ saveDirection=pBiDi->direction;
/* FOOD FOR THOUGHT: instead of writing the visual text, we could use
* the visual map and the dirProps array to drive the second call
@@ -1591,20 +1605,29 @@ setParaRunsOnly(UBiDi *pBiDi, const UChar *text, int32_t length,
*/
visualLength=ubidi_writeReordered(pBiDi, visualText, length,
UBIDI_DO_MIRRORING, pErrorCode);
- pBiDi->reorderingOptions=saveOptions;
ubidi_getVisualMap(pBiDi, visualMap, pErrorCode);
if(U_FAILURE(*pErrorCode)) {
goto cleanup2;
}
- uprv_memcpy(saveLevels, levels, length*sizeof(UBiDiLevel));
+ pBiDi->reorderingOptions=saveOptions;
pBiDi->reorderingMode=UBIDI_REORDER_INVERSE_LIKE_DIRECT;
- paraLevel=pBiDi->paraLevel^1;
+ paraLevel^=1;
+ /* Because what we did with reorderingOptions, visualText may be shorter
+ * than the original text. But we don't want the levels memory to be
+ * reallocated shorter than the original length, since we need to restore
+ * the levels as after the first call to ubidi_setpara() before returning.
+ * We will force mayAllocateText to FALSE before the second call to
+ * ubidi_setpara(), and will restore it afterwards.
+ */
+ saveMayAllocateText=pBiDi->mayAllocateText;
+ pBiDi->mayAllocateText=FALSE;
ubidi_setPara(pBiDi, visualText, visualLength, paraLevel, NULL, pErrorCode);
+ pBiDi->mayAllocateText=saveMayAllocateText;
+ ubidi_getRuns(pBiDi, pErrorCode);
if(U_FAILURE(*pErrorCode)) {
goto cleanup1;
}
- ubidi_getRuns(pBiDi);
/* check if some runs must be split, count how many splits */
addedRuns=0;
runCount=pBiDi->runCount;
@@ -1691,8 +1714,20 @@ setParaRunsOnly(UBiDi *pBiDi, const UChar *text, int32_t length,
cleanup2:
/* restore real text */
pBiDi->text=text;
+ pBiDi->length=saveLength;
+ pBiDi->originalLength=length;
+ pBiDi->direction=saveDirection;
+ /* the saved levels should never excess levelsSize, but we check anyway */
+ if(saveLength>pBiDi->levelsSize) {
+ saveLength=pBiDi->levelsSize;
+ }
+ uprv_memcpy(pBiDi->levels, saveLevels, saveLength*sizeof(UBiDiLevel));
+ pBiDi->trailingWSStart=saveTrailingWSStart;
/* free memory for mapping table and visual text */
uprv_free(runsOnlyMemory);
+ if(pBiDi->runCount>1) {
+ pBiDi->direction=UBIDI_MIXED;
+ }
cleanup3:
pBiDi->reorderingMode=UBIDI_REORDER_RUNS_ONLY;
}
@@ -1706,12 +1741,9 @@ ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length,
UBiDiDirection direction;
/* check the argument values */
- if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
- return;
- } else if(pBiDi==NULL || text==NULL ||
- ((UBIDI_MAX_EXPLICIT_LEVELUBIDI_MAX_EXPLICIT_LEVEL && paraLevelrunCount=0;
+ pBiDi->paraCount=0;
pBiDi->pParaBiDi=pBiDi; /* mark successful setPara */
return;
}
@@ -1857,11 +1890,6 @@ ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length,
case UBIDI_REORDER_GROUP_NUMBERS_WITH_R:
pBiDi->pImpTabPair=&impTab_GROUP_NUMBERS_WITH_R;
break;
- case UBIDI_REORDER_RUNS_ONLY:
- /* we should never get here */
- pBiDi=NULL;
- pBiDi->text=NULL; /* make the program crash! */
- break;
case UBIDI_REORDER_INVERSE_NUMBERS_AS_L:
pBiDi->pImpTabPair=&impTab_INVERSE_NUMBERS_AS_L;
break;
@@ -1880,7 +1908,8 @@ ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length,
}
break;
default:
- pBiDi->pImpTabPair=&impTab_DEFAULT;
+ /* we should never get here */
+ U_ASSERT(FALSE);
break;
}
/*
@@ -1894,7 +1923,8 @@ ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length,
* Examples for "insignificant" ones are empty embeddings
* LRE-PDF, LRE-RLE-PDF-PDF, etc.
*/
- if(embeddingLevels==NULL && !(pBiDi->flags&DIRPROP_FLAG_MULTI_RUNS)) {
+ if(embeddingLevels==NULL && pBiDi->paraCount<=1 &&
+ !(pBiDi->flags&DIRPROP_FLAG_MULTI_RUNS)) {
resolveImplicitLevels(pBiDi, 0, length,
GET_LR_FROM_LEVEL(GET_PARALEVEL(pBiDi, 0)),
GET_LR_FROM_LEVEL(GET_PARALEVEL(pBiDi, length-1)));
@@ -1966,6 +1996,39 @@ ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length,
adjustWSLevels(pBiDi);
break;
}
+ /* add RLM for inverse Bidi with contextual orientation resolving
+ * to RTL which would not round-trip otherwise
+ */
+ if((pBiDi->defaultParaLevel>0) &&
+ (pBiDi->reorderingOptions & UBIDI_OPTION_INSERT_MARKS) &&
+ ((pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_LIKE_DIRECT) ||
+ (pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL))) {
+ int32_t i, j, start, last;
+ DirProp dirProp;
+ for(i=0; iparaCount; i++) {
+ last=pBiDi->paras[i]-1;
+ if((pBiDi->dirProps[last] & CONTEXT_RTL)==0) {
+ continue; /* LTR paragraph */
+ }
+ start= i==0 ? 0 : pBiDi->paras[i - 1];
+ for(j=last; j>=start; j--) {
+ dirProp=NO_CONTEXT_RTL(pBiDi->dirProps[j]);
+ if(dirProp==L) {
+ if(jdirProps[last])==B) {
+ last--;
+ }
+ }
+ addPoint(pBiDi, last, RLM_BEFORE);
+ break;
+ }
+ if(DIRPROP_FLAG(dirProp) & MASK_R_AL) {
+ break;
+ }
+ }
+ }
+ }
+
if(pBiDi->reorderingOptions & UBIDI_OPTION_REMOVE_CONTROLS) {
pBiDi->resultLength -= pBiDi->controlCount;
} else {
@@ -2062,13 +2125,10 @@ ubidi_getParagraphByIndex(const UBiDi *pBiDi, int32_t paraIndex,
int32_t paraStart;
/* check the argument values */
- if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
- return;
- } else if( !IS_VALID_PARA_OR_LINE(pBiDi) || /* no valid setPara/setLine */
- paraIndex<0 || paraIndex>=pBiDi->paraCount ) {
- *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
- return;
- }
+ RETURN_VOID_IF_NULL_OR_FAILING_ERRCODE(pErrorCode);
+ RETURN_VOID_IF_NOT_VALID_PARA_OR_LINE(pBiDi, *pErrorCode);
+ RETURN_VOID_IF_BAD_RANGE(paraIndex, 0, pBiDi->paraCount, *pErrorCode);
+
pBiDi=pBiDi->pParaBiDi; /* get Para object if Line object */
if(paraIndex) {
paraStart=pBiDi->paras[paraIndex-1];
@@ -2084,7 +2144,6 @@ ubidi_getParagraphByIndex(const UBiDi *pBiDi, int32_t paraIndex,
if(pParaLevel!=NULL) {
*pParaLevel=GET_PARALEVEL(pBiDi, paraStart);
}
- return;
}
U_CAPI int32_t U_EXPORT2
@@ -2095,15 +2154,11 @@ ubidi_getParagraph(const UBiDi *pBiDi, int32_t charIndex,
/* check the argument values */
/* pErrorCode will be checked by the call to ubidi_getParagraphByIndex */
- if( !IS_VALID_PARA_OR_LINE(pBiDi)) {/* no valid setPara/setLine */
- *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
- return -1;
- }
+ RETURN_IF_NULL_OR_FAILING_ERRCODE(pErrorCode, -1);
+ RETURN_IF_NOT_VALID_PARA_OR_LINE(pBiDi, *pErrorCode, -1);
pBiDi=pBiDi->pParaBiDi; /* get Para object if Line object */
- if( charIndex<0 || charIndex>=pBiDi->length ) {
- *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
- return -1;
- }
+ RETURN_IF_BAD_RANGE(charIndex, 0, pBiDi->length, *pErrorCode, -1);
+
for(paraIndex=0; charIndex>=pBiDi->paras[paraIndex]; paraIndex++);
ubidi_getParagraphByIndex(pBiDi, paraIndex, pParaStart, pParaLimit, pParaLevel, pErrorCode);
return paraIndex;
@@ -2114,9 +2169,8 @@ ubidi_setClassCallback(UBiDi *pBiDi, UBiDiClassCallback *newFn,
const void *newContext, UBiDiClassCallback **oldFn,
const void **oldContext, UErrorCode *pErrorCode)
{
- if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
- return;
- } else if(pBiDi==NULL) {
+ RETURN_VOID_IF_NULL_OR_FAILING_ERRCODE(pErrorCode);
+ if(pBiDi==NULL) {
*pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
return;
}
@@ -2135,6 +2189,9 @@ ubidi_setClassCallback(UBiDi *pBiDi, UBiDiClassCallback *newFn,
U_CAPI void U_EXPORT2
ubidi_getClassCallback(UBiDi *pBiDi, UBiDiClassCallback **fn, const void **context)
{
+ if(pBiDi==NULL) {
+ return;
+ }
if( fn )
{
*fn = pBiDi->fnClassCallback;
diff --git a/icuSources/common/ubidi_props.c b/icuSources/common/ubidi_props.c
index 8538c6c5..f50f7f98 100644
--- a/icuSources/common/ubidi_props.c
+++ b/icuSources/common/ubidi_props.c
@@ -1,7 +1,7 @@
/*
*******************************************************************************
*
-* Copyright (C) 2004-2006, International Business Machines
+* Copyright (C) 2004-2008, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
@@ -40,8 +40,6 @@ struct UBiDiProps {
/* data loading etc. -------------------------------------------------------- */
-#define UBIDI_HARDCODE_DATA 1
-
#if UBIDI_HARDCODE_DATA
/* ubidi_props_data.c is machine-generated by genbidi --csource */
@@ -129,7 +127,7 @@ ubidi_openData(UBiDiProps *bdpProto,
}
}
-U_CAPI UBiDiProps * U_EXPORT2
+U_CFUNC UBiDiProps *
ubidi_openProps(UErrorCode *pErrorCode) {
UBiDiProps bdpProto={ NULL }, *bdp;
@@ -151,7 +149,7 @@ ubidi_openProps(UErrorCode *pErrorCode) {
}
}
-U_CAPI UBiDiProps * U_EXPORT2
+U_CFUNC UBiDiProps *
ubidi_openBinary(const uint8_t *bin, int32_t length, UErrorCode *pErrorCode) {
UBiDiProps bdpProto={ NULL };
const DataHeader *hdr;
@@ -188,7 +186,7 @@ ubidi_openBinary(const uint8_t *bin, int32_t length, UErrorCode *pErrorCode) {
#endif
-U_CAPI void U_EXPORT2
+U_CFUNC void
ubidi_closeProps(UBiDiProps *bdp) {
if(bdp!=NULL) {
#if !UBIDI_HARDCODE_DATA
@@ -200,26 +198,25 @@ ubidi_closeProps(UBiDiProps *bdp) {
/* UBiDiProps singleton ----------------------------------------------------- */
-static UBiDiProps *gBdp=NULL, *gBdpDummy=NULL;
#if !UBIDI_HARDCODE_DATA
+static UBiDiProps *gBdpDummy=NULL;
+static UBiDiProps *gBdp=NULL;
static UErrorCode gErrorCode=U_ZERO_ERROR;
static int8_t gHaveData=0;
-#endif
static UBool U_CALLCONV
ubidi_cleanup(void) {
- ubidi_closeProps(gBdp);
- gBdp=NULL;
ubidi_closeProps(gBdpDummy);
gBdpDummy=NULL;
-#if !UBIDI_HARDCODE_DATA
+ ubidi_closeProps(gBdp);
+ gBdp=NULL;
gErrorCode=U_ZERO_ERROR;
gHaveData=0;
-#endif
return TRUE;
}
+#endif
-U_CAPI const UBiDiProps * U_EXPORT2
+U_CFUNC const UBiDiProps *
ubidi_getSingleton(UErrorCode *pErrorCode) {
#if UBIDI_HARDCODE_DATA
if(U_FAILURE(*pErrorCode)) {
@@ -267,7 +264,8 @@ ubidi_getSingleton(UErrorCode *pErrorCode) {
#endif
}
-U_CAPI const UBiDiProps * U_EXPORT2
+#if !UBIDI_HARDCODE_DATA
+U_CAPI const UBiDiProps *
ubidi_getDummy(UErrorCode *pErrorCode) {
UBiDiProps *bdp;
@@ -318,6 +316,7 @@ ubidi_getDummy(UErrorCode *pErrorCode) {
return gBdpDummy;
}
}
+#endif
/* set of property starts for UnicodeSet ------------------------------------ */
@@ -329,7 +328,7 @@ _enumPropertyStartsRange(const void *context, UChar32 start, UChar32 limit, uint
return TRUE;
}
-U_CAPI void U_EXPORT2
+U_CFUNC void
ubidi_addPropertyStarts(const UBiDiProps *bdp, const USetAdder *sa, UErrorCode *pErrorCode) {
int32_t i, length;
UChar32 c, start, limit;
@@ -403,21 +402,21 @@ ubidi_getMaxValue(const UBiDiProps *bdp, UProperty which) {
}
}
-U_CAPI UCharDirection U_EXPORT2
+U_CAPI UCharDirection
ubidi_getClass(const UBiDiProps *bdp, UChar32 c) {
uint32_t props;
GET_PROPS(bdp, c, props);
return (UCharDirection)UBIDI_GET_CLASS(props);
}
-U_CAPI UBool U_EXPORT2
+U_CFUNC UBool
ubidi_isMirrored(const UBiDiProps *bdp, UChar32 c) {
uint32_t props;
GET_PROPS(bdp, c, props);
return (UBool)UBIDI_GET_FLAG(props, UBIDI_IS_MIRRORED_SHIFT);
}
-U_CAPI UChar32 U_EXPORT2
+U_CFUNC UChar32
ubidi_getMirror(const UBiDiProps *bdp, UChar32 c) {
uint32_t props;
int32_t delta;
@@ -453,28 +452,28 @@ ubidi_getMirror(const UBiDiProps *bdp, UChar32 c) {
}
}
-U_CAPI UBool U_EXPORT2
+U_CFUNC UBool
ubidi_isBidiControl(const UBiDiProps *bdp, UChar32 c) {
uint32_t props;
GET_PROPS(bdp, c, props);
return (UBool)UBIDI_GET_FLAG(props, UBIDI_BIDI_CONTROL_SHIFT);
}
-U_CAPI UBool U_EXPORT2
+U_CFUNC UBool
ubidi_isJoinControl(const UBiDiProps *bdp, UChar32 c) {
uint32_t props;
GET_PROPS(bdp, c, props);
return (UBool)UBIDI_GET_FLAG(props, UBIDI_JOIN_CONTROL_SHIFT);
}
-U_CAPI UJoiningType U_EXPORT2
+U_CFUNC UJoiningType
ubidi_getJoiningType(const UBiDiProps *bdp, UChar32 c) {
uint32_t props;
GET_PROPS(bdp, c, props);
return (UJoiningType)((props&UBIDI_JT_MASK)>>UBIDI_JT_SHIFT);
}
-U_CAPI UJoiningGroup U_EXPORT2
+U_CFUNC UJoiningGroup
ubidi_getJoiningGroup(const UBiDiProps *bdp, UChar32 c) {
UChar32 start, limit;
@@ -489,7 +488,7 @@ ubidi_getJoiningGroup(const UBiDiProps *bdp, UChar32 c) {
/* public API (see uchar.h) ------------------------------------------------- */
-U_CAPI UCharDirection U_EXPORT2
+U_CFUNC UCharDirection
u_charDirection(UChar32 c) {
UErrorCode errorCode=U_ZERO_ERROR;
const UBiDiProps *bdp=ubidi_getSingleton(&errorCode);
@@ -500,14 +499,14 @@ u_charDirection(UChar32 c) {
}
}
-U_CAPI UBool U_EXPORT2
+U_CFUNC UBool
u_isMirrored(UChar32 c) {
UErrorCode errorCode=U_ZERO_ERROR;
const UBiDiProps *bdp=ubidi_getSingleton(&errorCode);
return (UBool)(bdp!=NULL && ubidi_isMirrored(bdp, c));
}
-U_CAPI UChar32 U_EXPORT2
+U_CFUNC UChar32
u_charMirror(UChar32 c) {
UErrorCode errorCode=U_ZERO_ERROR;
const UBiDiProps *bdp=ubidi_getSingleton(&errorCode);
diff --git a/icuSources/common/ubidi_props.h b/icuSources/common/ubidi_props.h
index 7788c8b4..c2384c7c 100644
--- a/icuSources/common/ubidi_props.h
+++ b/icuSources/common/ubidi_props.h
@@ -1,7 +1,7 @@
/*
*******************************************************************************
*
-* Copyright (C) 2004-2005, International Business Machines
+* Copyright (C) 2004-2008, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
@@ -24,6 +24,8 @@
#include "uset_imp.h"
#include "udataswp.h"
+#define UBIDI_HARDCODE_DATA 1
+
U_CDECL_BEGIN
/* library API -------------------------------------------------------------- */
@@ -31,34 +33,35 @@ U_CDECL_BEGIN
struct UBiDiProps;
typedef struct UBiDiProps UBiDiProps;
-U_CAPI UBiDiProps * U_EXPORT2
+U_CFUNC UBiDiProps *
ubidi_openProps(UErrorCode *pErrorCode);
-U_CAPI UBiDiProps * U_EXPORT2
+U_CFUNC UBiDiProps *
ubidi_openBinary(const uint8_t *bin, int32_t length, UErrorCode *pErrorCode);
-U_CAPI void U_EXPORT2
+U_CFUNC void
ubidi_closeProps(UBiDiProps *bdp);
-U_CAPI const UBiDiProps * U_EXPORT2
+U_CFUNC const UBiDiProps *
ubidi_getSingleton(UErrorCode *pErrorCode);
+#if !UBIDI_HARDCODE_DATA
/**
* Get a singleton dummy object, one that works with no real data.
* This can be used when the real data is not available.
* Using the dummy can reduce checks for available data after an initial failure.
*/
-U_CAPI const UBiDiProps * U_EXPORT2
+U_CAPI const UBiDiProps *
ubidi_getDummy(UErrorCode *pErrorCode);
+#endif
-
-U_CAPI int32_t U_EXPORT2
+U_CAPI int32_t
ubidi_swap(const UDataSwapper *ds,
const void *inData, int32_t length, void *outData,
UErrorCode *pErrorCode);
-U_CAPI void U_EXPORT2
+U_CFUNC void
ubidi_addPropertyStarts(const UBiDiProps *bdp, const USetAdder *sa, UErrorCode *pErrorCode);
/* property access functions */
@@ -66,25 +69,25 @@ ubidi_addPropertyStarts(const UBiDiProps *bdp, const USetAdder *sa, UErrorCode *
U_CFUNC int32_t
ubidi_getMaxValue(const UBiDiProps *bdp, UProperty which);
-U_CAPI UCharDirection U_EXPORT2
+U_CAPI UCharDirection
ubidi_getClass(const UBiDiProps *bdp, UChar32 c);
-U_CAPI UBool U_EXPORT2
+U_CFUNC UBool
ubidi_isMirrored(const UBiDiProps *bdp, UChar32 c);
-U_CAPI UChar32 U_EXPORT2
+U_CFUNC UChar32
ubidi_getMirror(const UBiDiProps *bdp, UChar32 c);
-U_CAPI UBool U_EXPORT2
+U_CFUNC UBool
ubidi_isBidiControl(const UBiDiProps *bdp, UChar32 c);
-U_CAPI UBool U_EXPORT2
+U_CFUNC UBool
ubidi_isJoinControl(const UBiDiProps *bdp, UChar32 c);
-U_CAPI UJoiningType U_EXPORT2
+U_CFUNC UJoiningType
ubidi_getJoiningType(const UBiDiProps *bdp, UChar32 c);
-U_CAPI UJoiningGroup U_EXPORT2
+U_CFUNC UJoiningGroup
ubidi_getJoiningGroup(const UBiDiProps *bdp, UChar32 c);
/* file definitions --------------------------------------------------------- */
diff --git a/icuSources/common/ubidi_props_data.c b/icuSources/common/ubidi_props_data.c
index e4314164..5f1b3008 100644
--- a/icuSources/common/ubidi_props_data.c
+++ b/icuSources/common/ubidi_props_data.c
@@ -1,209 +1,212 @@
/*
- * Copyright (C) 1999-2007, International Business Machines
+ * Copyright (C) 1999-2008, International Business Machines
* Corporation and others. All Rights Reserved.
*
* file name: ubidi_props_data.c
*
- * machine-generated on: 2006-06-13
- * machine-generated on: 2007-02-08 U_DARWIN
+ * machine-generated on: 2008-03-20
+ * machine-generated on: 2008-07-16 U_DARWIN
*/
-static const UVersionInfo ubidi_props_dataVersion={5,0,0,0};
+static const UVersionInfo ubidi_props_dataVersion={5,1,0,0};
#ifndef U_DARWIN
-static const int32_t ubidi_props_indexes[UBIDI_IX_TOP]={0x10,0x3f14,0x3d20,0x1a,0x622,0x76e,0,0,0,0,0,0,0,0,0,0x3500b2};
+static const int32_t ubidi_props_indexes[UBIDI_IX_TOP]={0x10,0x4340,0x4138,0x1a,0x622,0x782,0,0,0,0,0,0,0,0,0,0x3600b2};
#else /* U_DARWIN */
-static const int32_t ubidi_props_indexes[UBIDI_IX_TOP]={0x10,0x4024,0x3e30,0x1a,0x622,0x76e,0,0,0,0,0,0,0,0,0,0x3500b2};
+static const int32_t ubidi_props_indexes[UBIDI_IX_TOP]={0x10,0x4460,0x4258,0x1a,0x622,0x782,0,0,0,0,0,0,0,0,0,0x3600b2};
#endif /* U_DARWIN */
#ifndef U_DARWIN
-static const uint16_t ubidi_props_trieIndex[7816]={
+static const uint16_t ubidi_props_trieIndex[8340]={
#else /* U_DARWIN */
-static const uint16_t ubidi_props_trieIndex[7952]={
+static const uint16_t ubidi_props_trieIndex[8484]={
#endif /* U_DARWIN */
-0x250,0x258,0x260,0x268,0x270,0x278,0x280,0x288,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x28e,0x296,0x29e,0x2a6,0x2a6,0x2a6,0x2aa,0x2b2,0x248,0x248,0x2b5,
-0x248,0x248,0x248,0x248,0x2bd,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x2c3,0x2c8,0x2d0,0x2d2,
-0x2da,0x2e2,0x2ea,0x2f2,0x2f8,0x2ff,0x307,0x30f,0x317,0x31f,0x325,0x32c,0x330,0x337,0x33f,0x345,
-0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x34d,0x34e,0x356,0x35e,0x366,0x34e,0x36e,0x376,
-0x34d,0x34e,0x37e,0x382,0x34d,0x34e,0x38a,0x392,0x366,0x397,0x39f,0x248,0x3a4,0x248,0x3ac,0x3b0,
-0x248,0x3b7,0x3bf,0x248,0x248,0x3c5,0x3cd,0x3d5,0x248,0x248,0x3dd,0x248,0x248,0x248,0x3e3,0x248,
-0x248,0x3e9,0x3f1,0x248,0x248,0x3f5,0x3fd,0x248,0x401,0x408,0x248,0x410,0x418,0x41f,0x3a3,0x248,
-0x248,0x427,0x401,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x42e,0x248,0x436,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x43e,0x248,0x248,0x248,0x446,0x446,0x372,0x372,0x248,0x44c,0x454,0x436,
-0x45c,0x248,0x248,0x248,0x248,0x364,0x248,0x248,0x248,0x464,0x46c,0x248,0x248,0x248,0x46e,0x476,
-0x47e,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x486,0x489,0x3a4,0x491,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x499,0x3b7,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x49c,0x4a4,0x4a8,
-0x4b0,0x4b8,0x4bf,0x4c7,0x4cf,0x4d7,0x4dd,0x4e1,0x4e9,0x4f1,0x4f9,0x248,0x501,0x476,0x476,0x476,
-0x509,0x511,0x519,0x521,0x526,0x52e,0x536,0x53c,0x544,0x54c,0x248,0x552,0x559,0x476,0x476,0x55f,
-0x476,0x567,0x56f,0x476,0x577,0x248,0x248,0x473,0x476,0x476,0x476,0x476,0x476,0x476,0x476,0x476,
-0x476,0x476,0x476,0x476,0x57f,0x587,0x248,0x248,0x58f,0x595,0x59a,0x5a2,0x581,0x5a8,0x5b0,0x5b8,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x476,0x476,0x476,0x476,0x5c0,0x5c7,0x5cf,0x5d7,
-0x5df,0x5e7,0x5ef,0x5f6,0x5fe,0x606,0x60d,0x615,0x61d,0x625,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x62c,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x634,0x248,0x248,0x248,0x63c,0x476,0x476,0x479,0x476,0x476,0x476,0x476,0x476,0x476,0x643,0x649,
-0x651,0x659,0x248,0x248,0x661,0x668,0x248,0x287,0x248,0x248,0x248,0x248,0x248,0x248,0x47a,0x248,
-0x669,0x248,0x501,0x671,0x248,0x679,0x681,0x248,0x248,0x248,0x248,0x685,0x248,0x248,0x46e,0x286,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x476,0x476,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x501,0x476,0x567,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x61d,0x46d,0x248,0x248,0x248,0x248,0x248,0x248,
-0x68d,0x694,0x248,0x697,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
+0x258,0x260,0x268,0x270,0x278,0x280,0x288,0x290,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x296,0x29e,0x2a6,0x2ae,0x2ae,0x2ae,0x2b2,0x2ba,0x250,0x250,0x2bd,
+0x250,0x250,0x250,0x250,0x2c5,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x2cb,0x2d0,0x2d8,0x2da,
+0x2e2,0x2ea,0x2f2,0x2fa,0x300,0x307,0x30f,0x317,0x31f,0x327,0x32d,0x334,0x33c,0x343,0x34b,0x351,
+0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x359,0x35a,0x362,0x36a,0x372,0x35a,0x37a,0x382,
+0x359,0x35a,0x38a,0x38f,0x359,0x35a,0x397,0x39f,0x372,0x3a4,0x3ac,0x36a,0x3b1,0x250,0x3b9,0x3bd,
+0x250,0x3c4,0x3cc,0x3d4,0x250,0x3dc,0x3e4,0x3ec,0x250,0x250,0x37a,0x36a,0x250,0x250,0x3f2,0x250,
+0x250,0x3f8,0x400,0x250,0x250,0x404,0x40c,0x250,0x410,0x417,0x250,0x41f,0x427,0x42e,0x3b0,0x250,
+0x250,0x436,0x43e,0x446,0x44e,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x452,0x250,0x45a,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x462,0x250,0x250,0x250,0x46a,0x46a,0x37e,0x37e,0x250,0x470,0x478,0x45a,
+0x480,0x250,0x250,0x250,0x250,0x370,0x250,0x250,0x250,0x488,0x490,0x250,0x250,0x250,0x492,0x49a,
+0x4a2,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x4aa,0x4ad,0x3b1,0x4b5,0x4bd,0x4c5,0x250,0x250,
+0x250,0x4ca,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x2ae,0x4d2,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x4da,0x4e2,0x4e6,
+0x4ee,0x4f4,0x4fb,0x503,0x50b,0x513,0x519,0x431,0x521,0x529,0x531,0x250,0x539,0x49a,0x49a,0x49a,
+0x541,0x549,0x551,0x559,0x55e,0x566,0x56e,0x574,0x57c,0x584,0x250,0x58a,0x591,0x49a,0x49a,0x597,
+0x49a,0x3da,0x59f,0x49a,0x5a7,0x250,0x250,0x497,0x49a,0x49a,0x49a,0x49a,0x49a,0x49a,0x49a,0x49a,
+0x49a,0x49a,0x49a,0x49a,0x5af,0x5b7,0x5bf,0x250,0x5c7,0x5cd,0x5d2,0x5da,0x5e0,0x5e6,0x5ee,0x5f6,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x49a,0x49a,0x49a,0x49a,0x5fe,0x605,0x60d,0x615,
+0x61d,0x625,0x62d,0x634,0x63c,0x644,0x64b,0x653,0x49a,0x49a,0x65b,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x662,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x2ae,
+0x66a,0x672,0x250,0x250,0x67a,0x49a,0x49a,0x49d,0x49a,0x49a,0x49a,0x49a,0x49a,0x49a,0x681,0x687,
+0x68f,0x697,0x250,0x250,0x69f,0x6a6,0x250,0x28f,0x250,0x250,0x250,0x250,0x250,0x250,0x49a,0x5bf,
+0x6a7,0x250,0x539,0x6af,0x250,0x6b7,0x6bf,0x250,0x250,0x250,0x250,0x6c3,0x250,0x250,0x492,0x28e,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x49a,0x49a,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x539,0x49a,0x3da,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x6ca,0x250,0x250,0x6cf,0x250,0x250,0x250,0x250,0x49a,0x491,0x250,0x250,0x6d7,0x250,0x250,0x250,
+0x6df,0x6e6,0x250,0x6e9,0x250,0x250,0x6f0,0x250,0x250,0x6f7,0x6fe,0x250,0x250,0x250,0x250,0x250,
+0x250,0x704,0x70c,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
#ifndef U_DARWIN
-0x787,0x78a,0x248,0x792,0x248,0x792,0x248,0x792,0x248,0x792,0x248,0x792,0x248,0x792,0x248,0x792,
-0x248,0x792,0x248,0x792,0x248,0x792,0x248,0x792,0x248,0x792,0x79a,0x792,0x248,0x792,0x248,0x792,
+0x80a,0x80d,0x250,0x815,0x250,0x815,0x250,0x815,0x250,0x815,0x250,0x815,0x250,0x815,0x250,0x815,
+0x250,0x815,0x250,0x815,0x250,0x815,0x250,0x815,0x250,0x815,0x81d,0x815,0x250,0x815,0x250,0x815,
#else /* U_DARWIN */
-0x7a9,0x7ac,0x248,0x7b4,0x248,0x7b4,0x248,0x7b4,0x248,0x7b4,0x248,0x7b4,0x248,0x7b4,0x248,0x7b4,
-0x248,0x7b4,0x248,0x7b4,0x248,0x7b4,0x248,0x7b4,0x248,0x7b4,0x7bc,0x7b4,0x248,0x7b4,0x248,0x7b4,
+0x82e,0x831,0x250,0x839,0x250,0x839,0x250,0x839,0x250,0x839,0x250,0x839,0x250,0x839,0x250,0x839,
+0x250,0x839,0x250,0x839,0x250,0x839,0x250,0x839,0x250,0x839,0x841,0x839,0x250,0x839,0x250,0x839,
#endif /* U_DARWIN */
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
#ifdef U_DARWIN
-0x475,0x476,0x476,0x69f,0x6a7,0x6af,0x6b7,0x476,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x6bf,0x6c7,0x6cb,0x330,0x330,0x330,0x330,0x330,
-0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x6cf,0x330,0x330,0x330,0x330,0x6d7,0x6db,
-0x6e3,0x6eb,0x6ef,0x6f7,0x330,0x330,0x330,0x6fb,0x703,0x260,0x70b,0x713,0x248,0x248,0x248,0x71b,
+0x499,0x49a,0x49a,0x714,0x71c,0x724,0x72c,0x49a,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x734,0x73c,0x740,0x33c,0x33c,0x33c,0x33c,0x33c,
+0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x744,0x33c,0x33c,0x33c,0x33c,0x74c,0x750,
+0x758,0x760,0x764,0x76c,0x33c,0x33c,0x33c,0x770,0x778,0x268,0x780,0x788,0x250,0x250,0x250,0x790,
#endif /* U_DARWIN */
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
#ifndef U_DARWIN
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x69d,0x6a5,0x6a9,0x330,0x330,0x330,0x330,0x330,
-0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x6ad,0x330,0x330,0x330,0x330,0x6b5,0x6b9,
-0x6c1,0x6c9,0x6cd,0x6d5,0x330,0x330,0x330,0x6d9,0x6e1,0x260,0x6e9,0x6f1,0x248,0x248,0x248,0x6f9,
-#endif /* not U_DARWIN */
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x710,0x718,0x71c,0x33c,0x33c,0x33c,0x33c,0x33c,
+0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x720,0x33c,0x33c,0x33c,0x33c,0x728,0x72c,
+0x734,0x73c,0x740,0x748,0x33c,0x33c,0x33c,0x74c,0x754,0x268,0x75c,0x764,0x250,0x250,0x250,0x76c,
+#endif /* ! U_DARWIN */
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
#ifdef U_DARWIN
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x723,0x248,0x476,0x476,0x56f,0x248,0x248,0x248,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x798,0x250,0x49a,0x49a,0x7a0,0x250,0x250,0x36b,
#endif /* U_DARWIN */
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
#ifndef U_DARWIN
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x701,0x248,0x476,0x476,0x56f,0x248,0x248,0x248,
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
-0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x709,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,
-0x711,0x715,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x774,0x250,0x49a,0x49a,0x77c,0x250,0x250,0x36b,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x784,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,
+0x78c,0x790,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,
#else /* U_DARWIN */
-0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x72b,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,
-0x733,0x737,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,
+0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x7a8,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,
+0x7b0,0x7b4,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,
#endif /* U_DARWIN */
-0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,
-0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,
+0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,
+0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,0x2da,
#ifndef U_DARWIN
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x71d,0x725,0x72b,0x248,0x248,
-0x476,0x476,0x733,0x248,0x248,0x248,0x248,0x248,0x476,0x476,0x73b,0x248,0x248,0x248,0x248,0x248,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x798,0x7a0,0x7a6,0x250,0x250,
+0x49a,0x49a,0x7ae,0x250,0x250,0x250,0x250,0x250,0x49a,0x49a,0x7b6,0x250,0x250,0x250,0x250,0x250,
#else /* U_DARWIN */
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x73f,0x747,0x74d,0x248,0x248,
-0x476,0x476,0x755,0x248,0x248,0x248,0x248,0x248,0x476,0x476,0x75d,0x248,0x248,0x248,0x248,0x248,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x7bc,0x7c4,0x7ca,0x250,0x250,
+0x49a,0x49a,0x7d2,0x250,0x250,0x250,0x250,0x250,0x49a,0x49a,0x7da,0x250,0x250,0x250,0x250,0x250,
#endif /* U_DARWIN */
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
#ifndef U_DARWIN
-0x248,0x248,0x248,0x248,0x248,0x248,0x741,0x248,0x748,0x248,0x744,0x248,0x74b,0x248,0x753,0x757,
+0x250,0x250,0x250,0x250,0x250,0x250,0x7bc,0x250,0x7c3,0x250,0x7bf,0x250,0x7c6,0x250,0x7ce,0x7d2,
+0x49a,0x7da,0x49a,0x49a,0x49d,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
#else /* U_DARWIN */
-0x248,0x248,0x248,0x248,0x248,0x248,0x763,0x248,0x76a,0x248,0x766,0x248,0x76d,0x248,0x775,0x779,
+0x250,0x250,0x250,0x250,0x250,0x250,0x7e0,0x250,0x7e7,0x250,0x7e3,0x250,0x7ea,0x250,0x7f2,0x7f6,
+0x49a,0x7fe,0x49a,0x49a,0x49d,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
#endif /* U_DARWIN */
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,
#ifndef U_DARWIN
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x75f,
-0x767,0x76f,0x76f,0x76f,0x777,0x777,0x777,0x777,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x77f,
-0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,
-0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,
-0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x7e2,
+0x7ea,0x7f2,0x7f2,0x7f2,0x7fa,0x7fa,0x7fa,0x7fa,0x2ae,0x2ae,0x2ae,0x2ae,0x2ae,0x2ae,0x2ae,0x802,
+0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,
+0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,
+0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,
#else /* U_DARWIN */
-0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x781,
-0x789,0x791,0x791,0x791,0x799,0x799,0x799,0x799,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x7a1,
-0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,
-0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,
-0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,
+0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x250,0x806,
+0x80e,0x816,0x816,0x816,0x81e,0x81e,0x81e,0x81e,0x2ae,0x2ae,0x2ae,0x2ae,0x2ae,0x2ae,0x2ae,0x826,
+0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,
+0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,
+0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,0x81e,
#endif /* U_DARWIN */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -234,18 +237,18 @@ static const uint16_t ubidi_props_trieIndex[7952]={
0,0,0,0,0,0,0xa,0,0,0,0,0,0xa,0xa,0,0xa,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0xa,0,0,0,0,0,
-0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,
+0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0xa,0,0,0,0,0,1,0xb1,0xb1,0xb1,
0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,1,0xb1,
1,0xb1,0xb1,1,0xb1,0xb1,1,0xb1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
-0xd,0xd,0xd,0xd,6,0xd,0xa,0xa,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xd,0xd,
-0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0x8d,0x8d,0x8d,0x8d,0x4d,0x8d,
+1,1,1,1,1,1,1,1,5,5,5,5,0xd,0xd,0xa,0xa,
+0xd,4,4,0xd,6,0xd,0xa,0xa,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0x8d,0x8d,0x8d,0x8d,0x4d,0x8d,
0x4d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,
-0x4d,0x4d,0x4d,0xd,0xd,0xd,0xd,0xd,0x2d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
+0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x2d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
0x8d,0x4d,0x4d,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xd,5,5,5,5,5,5,5,5,
5,5,4,5,5,0xd,0x4d,0x4d,0xb1,0x8d,0x8d,0x8d,0xd,0x8d,0x8d,0x8d,
@@ -254,7 +257,7 @@ static const uint16_t ubidi_props_trieIndex[7952]={
0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x4d,0x8d,
0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x4d,0x8d,0x4d,0x8d,0x4d,0x4d,0x8d,0x8d,
-0xd,0x8d,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xd,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xd,0x8d,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,5,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
0xb1,0xd,0xd,0xb1,0xb1,0xa,0xb1,0xb1,0xb1,0xb1,0x8d,0x8d,2,2,2,2,
2,2,2,2,2,2,0x4d,0x4d,0x4d,0xd,0xd,0x4d,0xd,0xd,0xd,0xd,
0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xb2,0x8d,0xb1,0x4d,0x4d,
@@ -262,7 +265,8 @@ static const uint16_t ubidi_props_trieIndex[7952]={
0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x8d,0x4d,0x8d,0x4d,0x4d,0x8d,0xb1,0xb1,0xb1,0xb1,
0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xd,
0xd,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,
-0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x4d,0xd,0xd,
+0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x4d,0x4d,0x4d,
+0x4d,0x8d,0x4d,0x8d,0x8d,0x4d,0x4d,0x4d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
0xd,0xd,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xd,0xd,0xd,
@@ -283,50 +287,56 @@ static const uint16_t ubidi_props_trieIndex[7952]={
0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,4,4,0,0,0,0,
0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0xb1,
-0xb1,0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,
-0xb1,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,
-0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,
+0xb1,0,0,0xb1,0xb1,0xb1,0,0,0,0xb1,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,
+0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,
+0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0xb1,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,
+0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xb1,0,0,0xb1,0,0xb1,0xb1,0xb1,
-0,0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0,
-0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0xb1,
+0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0xb1,0,0,
+0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,
+0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,
+0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,4,0xa,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,4,0xa,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,
+0xb1,0,0,0,0,0,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0,0,
+0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,
+0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,
-0,0,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,
-0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0xa0,
+0,0,0,0,0,0,0xa0,0,0,0,0,0,0xb1,0xb1,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xb1,0,0,0xa0,0,0,0,0,0,0,0xa0,0,0,0,0,0,
-0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xa,0xa,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,
-0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0xb1,0xb1,
-0xb1,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,
-0,0,0,4,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,
-0xb1,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,
+0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0xb1,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0xb1,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,4,
+0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xb1,0,0xb1,0,0xb1,0x300a,0xf00a,0x300a,0xf00a,0,0,
+0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,0,
+0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,
-0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0,0,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0xb1,0,0xb1,0,0xb1,0x300a,0xf00a,0x300a,0xf00a,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,
+0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0xb1,0,
-0,0,0xb1,0xb1,0,0xb1,0,0,0,0,0,0,0,0,0,0,
+0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0xb1,0xb1,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0,
+0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
@@ -340,7 +350,7 @@ static const uint16_t ubidi_props_trieIndex[7952]={
0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,4,0,0xb1,0,0,
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xb1,0xb1,0xb1,9,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xb1,0xb1,0xb1,0,0,0,0,0xb1,0xb1,0x11,0x11,0x11,0,0,0,0,
+0xb1,0xb1,0xb1,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,
0,0,0xb1,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,0,
0xa,0,0,0,0xa,0xa,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -353,27 +363,32 @@ static const uint16_t ubidi_props_trieIndex[7952]={
0,0,0,0,0,0,0,0,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,
0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,
0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,
-0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,
+0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0,0xa,
-0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0,
-9,9,9,9,9,9,9,9,9,9,9,0xb2,0x412,0x432,0x8a0,0x8a1,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x100a,0x100a,0x300a,0xf00a,0x100a,0x100a,
+0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,
+0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0xa,0,0xa,0xa,0xa,0,0,0,0,0,0,
+0,0,0,0,0,0xa,0xa,0xa,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0xa,0xa,0xa,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0xa,0xa,0,9,9,9,9,9,9,9,9,
+9,9,9,0xb2,0x412,0x432,0x8a0,0x8a1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,9,7,0x8ab,0x8ae,0x8b0,0x8ac,0x8af,6,
4,4,4,4,4,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,
6,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,9,0xb2,0xb2,0xb2,0xb2,
-0x12,0x12,0x12,0x12,0x12,0x12,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,2,0,0,0,
+0xb2,0x12,0x12,0x12,0x12,0x12,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,2,0,0,0,
2,2,2,2,2,2,3,3,0xa,0x300a,0xf00a,0,2,2,2,2,
2,2,2,2,2,2,3,3,0xa,0x300a,0xf00a,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xa,0xa,0,0xa,0xa,0xa,0xa,0,0xa,0xa,0,0,
+0xb1,0xb1,0xb1,0xb1,0xa,0xa,0,0xa,0xa,0xa,0xa,0,0xa,0xa,0,0,
0,0,0,0,0,0,0,0,0xa,0,0xa,0xa,0xa,0,0,0,
0,0,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0,0xa,0,0xa,0,0,
0,0,4,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,
@@ -405,15 +420,15 @@ static const uint16_t ubidi_props_trieIndex[7952]={
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,
0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,
0xa,0xa,0xa,0xa,2,2,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,0,0,0,0,0xa,0xa,0xa,0xa,
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,
0xa,0,0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,
@@ -422,229 +437,162 @@ static const uint16_t ubidi_props_trieIndex[7952]={
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,
-0x100a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0,0,0,0,0,
-0xa,0xa,0xa,0x100a,0x100a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0x100a,0x300a,0xf00a,0xa,
-0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0,0,0,0,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x700a,0x300a,0xf00a,
-0xb00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0x100a,
-0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0x900a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x100a,0x100a,
-0x300a,0xf00a,0xa,0xa,0xa,0x100a,0xa,0xa,0xa,0xa,0x100a,0x300a,0xf00a,0x300a,0xf00a,0xa,
-0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x100a,0xa,0xa,0xa,0xa,0x100a,0xa,0x100a,
-0x100a,0x100a,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0x100a,0x900a,0x100a,0x100a,0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,
-0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0xa,
-0x100a,0xa,0x100a,0xa,0xa,0x100a,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,
-0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x100a,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0x100a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,
+0x300a,0xf00a,0xa,0,0x100a,0,0,0,0xa,0xa,0xa,0x100a,0x100a,0x300a,0xf00a,0xa,
+0xa,0xa,0xa,0xa,0x100a,0x300a,0xf00a,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,
+0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,
+0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x700a,0x300a,0xf00a,0xb00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,
+0xf00a,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,
+0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x900a,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0x300a,0xf00a,0x100a,0x100a,0x300a,0xf00a,0xa,0xa,0xa,0x100a,0xa,0xa,
+0xa,0xa,0x100a,0x300a,0xf00a,0x300a,0xf00a,0xa,0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,
+0x100a,0xa,0xa,0xa,0xa,0x100a,0xa,0x100a,0x100a,0x100a,0xa,0xa,0x100a,0x100a,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x900a,0x100a,0x100a,0x300a,0xf00a,0xa,0xa,
+0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,
+0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,
+0x100a,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0x100a,0xa,0x100a,0xa,0xa,0x100a,0xa,0x300a,
+0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,
+0x300a,0xf00a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0x100a,
+0x100a,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x100a,0x100a,0x300a,0xf00a,0x300a,
+0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x100a,0x100a,0x100a,
+0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x100a,0x100a,0x100a,
+0x100a,0x300a,0xf00a,0x100a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0x300a,
+0xf00a,0x100a,0x100a,0x300a,0xf00a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,
+0xf00a,0x300a,0xf00a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,
+0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0x100a,0xa,0x900a,0xa,0xa,0xa,0x100a,0x900a,
+0x900a,0x900a,0x100a,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x100a,0xa,0xa,0xa,0xa,0x100a,
+0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x100a,0xa,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0xa,0xa,0xa,0xa,
+0xa,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,
+0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,
+0xa,0x300a,0xf00a,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,
+0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,
-0xa,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0x100a,0x100a,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,
-0xa,0x300a,0xf00a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x100a,0x100a,0x100a,
-0x100a,0x100a,0x100a,0x300a,0xf00a,0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,
-0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x100a,0xa,0xa,0x300a,0xf00a,
-0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0x300a,0xf00a,0x100a,0x100a,0x300a,0xf00a,0x100a,0x100a,0x100a,
-0x100a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x100a,0x100a,0x100a,0x100a,0x100a,
-0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,
-0x100a,0xa,0x900a,0xa,0xa,0xa,0x100a,0x900a,0x900a,0x900a,0x100a,0xa,0xa,0xa,0xa,0xa,
-0x300a,0xf00a,0x100a,0xa,0xa,0xa,0xa,0x100a,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x100a,
-0xa,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,
-0,0,0,0,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,
+0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,9,0xa,0xa,0xa,
+0xa,0,0,0,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,
+0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0,0,0,
+0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xa,0,0,0,
+0,0,0xa,0xa,0,0,0,0,0,0xa,0xa,0xa,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0x300a,0xf00a,0xa,0x300a,0xf00a,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0x300a,0xf00a,0,0,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0,0,0,0,9,0xa,0xa,0xa,0xa,0,0,0,0x300a,0xf00a,0x300a,0xf00a,
-0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,
-0xa,0x300a,0xf00a,0x100a,0xa,0,0,0,0,0,0,0,0,0,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xa,0,0,0,0,0,0xa,0xa,0,0,0,0,
-0,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xa,
-0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0xb1,0xb1,0xa,0xa,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0xa,0xa,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0xa,0xa,0xa,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,
+0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0xa,0xa,0xa,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xa,
+0,0,0,0,0,0,0,0,0xb1,0xb1,0xa,0xa,0,0,0,0,
+0,0,0,0,0xa,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,
+0,0,0xb1,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,
0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0,
-0,0,0,0,0,0,0x11,0,0,0,0xb1,0,0,0,0,0xb1,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xb1,0xb1,0,0xa,0xa,0xa,0xa,0,0,0,0,
+0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0,0,0,0,
+0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-#ifndef U_DARWIN
-0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,
+0,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,
+0,0,0,0xb1,0,0,0,0,0,0,0,0,0xb1,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,1,0xb1,1,1,1,1,1,1,1,1,1,1,3,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
-#else /* U_DARWIN */
-0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x11,0x11,0x11,0x11,
-0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0,0,0xd,1,
+#ifdef U_DARWIN
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
-0x11,0x11,0x11,0x11,0x11,0x11,1,1,1,1,1,0x11,4,2,0,0,
-0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0,0,
-0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,
+0,0,0xd,1,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
+0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,1,1,1,1,1,0x11,
+4,2,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,
+0xa,0xa,0,0,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,1,0xb1,1,1,1,1,1,
-1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,0xd,0xd,0xd,0xd,
#endif /* U_DARWIN */
+0,0,0,0,0,0,0,0,0,0,0,0,0,1,0xb1,1,
+1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
-#ifndef U_DARWIN
-0xd,0xd,0xa,0xa,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
-0xd,0xd,0xd,0xd,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
-0x12,0x12,0x12,0x12,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
-0xd,0xa,0xd,0xd,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,
-0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,
-0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,6,0xa,6,0,0xa,6,0xa,0xa,0xa,0x300a,0xf00a,0x300a,
-0xf00a,0x300a,0xf00a,4,0xa,0xa,3,3,0x300a,0xf00a,0xa,0,0xa,4,4,0xa,
-0,0,0,0,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
-#else /* U_DARWIN */
-0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xa,0xa,0xd,0xd,0xd,0xd,
-0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0x12,0x12,0x12,0x12,
-0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0xd,0xd,0xd,0xd,
-0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xa,0xd,0xd,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,
-0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,6,0xa,6,0,
-0xa,6,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,4,0xa,0xa,3,3,
-0x300a,0xf00a,0xa,0,0xa,4,4,0xa,0,0,0,0,0xd,0xd,0xd,0xd,
-#endif /* U_DARWIN */
+0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xa,0xa,
0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
-#ifndef U_DARWIN
-0xd,0xd,0xd,0xb2,0,0xa,0xa,4,4,4,0xa,0xa,0x300a,0xf00a,0xa,3,
-6,3,6,6,2,2,2,2,2,2,2,2,2,2,6,0xa,
-0x500a,0xa,0xd00a,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x500a,
-0xa,0xd00a,0xa,0x300a,0xf00a,0xa,0x300a,0xf00a,0xa,0xa,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,4,4,0xa,0xa,0xa,4,4,0,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0xaa,0xaa,0xaa,
-0xa,0xa,0x12,0x12,0,0xa,0,0,0,0,0,0,0,0,0,0,
-#else /* U_DARWIN */
-0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xb2,0,0xa,0xa,4,
-4,4,0xa,0xa,0x300a,0xf00a,0xa,3,6,3,6,6,2,2,2,2,
-2,2,2,2,2,2,6,0xa,0x500a,0xa,0xd00a,0xa,0xa,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0x500a,0xa,0xd00a,0xa,0x300a,0xf00a,0xa,0x300a,0xf00a,
-0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,4,4,0xa,0xa,
-0xa,4,4,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0x12,0x12,0x12,0x12,
-0x12,0x12,0x12,0x12,0x12,0xaa,0xaa,0xaa,0xa,0xa,0x12,0x12,0,0xa,0,0,
-#endif /* U_DARWIN */
+0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
+0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xa,0xd,0xd,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+6,0xa,6,0,0xa,6,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,4,
+0xa,0xa,3,3,0x300a,0xf00a,0xa,0,0xa,4,4,0xa,0,0,0,0,
+0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
+0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xb2,
+0,0xa,0xa,4,4,4,0xa,0xa,0x300a,0xf00a,0xa,3,6,3,6,6,
+2,2,2,2,2,2,2,2,2,2,6,0xa,0x500a,0xa,0xd00a,0xa,
+0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0x500a,0xa,0xd00a,0xa,0x300a,
+0xf00a,0xa,0x300a,0xf00a,0xa,0xa,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-#ifndef U_DARWIN
-0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,
-#else /* U_DARWIN */
-0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,
-#endif /* U_DARWIN */
+4,4,0xa,0xa,0xa,4,4,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,
+0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0xaa,0xaa,0xaa,0xa,0xa,0x12,0x12,
+0,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-#ifndef U_DARWIN
-1,1,1,0xa,1,0xb1,0xb1,0xb1,1,0xb1,0xb1,1,1,1,1,1,
-0xb1,0xb1,0xb1,0xb1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,0xb1,0xb1,0xb1,1,
-1,1,1,0xb1,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0,
-0,0,0,0,0,0,0,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xb1,0xb1,
-0xb1,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x1000,
-#else /* U_DARWIN */
-1,1,1,1,1,1,1,1,1,1,1,0xa,1,0xb1,0xb1,0xb1,
-1,0xb1,0xb1,1,1,1,1,1,0xb1,0xb1,0xb1,0xb1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xa,
+1,0xb1,0xb1,0xb1,1,0xb1,0xb1,1,1,1,1,1,0xb1,0xb1,0xb1,0xb1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,0xb1,0xb1,0xb1,1,1,1,1,0xb1,0,0,0,0,
-0,0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0xb2,
-0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,
-0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,
-0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xa,0xa,0xb1,0xb1,0xb1,0xa,0,0,0,0,0,0,
+1,1,1,1,1,1,1,1,0xb1,0xb1,0xb1,1,1,1,1,0xb1,
+0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,
+0,0,0,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,
-#endif /* U_DARWIN */
+0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0xa,0xa,0xb1,0xb1,0xb1,0xa,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-#ifndef U_DARWIN
-0,0,0,0,0,0x1000,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x1000,
-0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,
-#else /* U_DARWIN */
-0,0,0,0,0,0,0,0x1000,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0x1000,0,0,
+0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0x1000,0,0,0,0,0,0,0,0,
-0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-#endif /* U_DARWIN */
+0,0,0,0,0,0,0,0,0,0,0,0x1000,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0x1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0x1000,0,0,0,0,
+0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-#ifndef U_DARWIN
-2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,
-#else /* U_DARWIN */
-2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,
-#endif /* U_DARWIN */
+2,2,2,2,2,2,2,2,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-#ifndef U_DARWIN
-0,0,0,0,0,0,0,0,0,0,0x12,0x12,0x12,0xb2,0x12,0x12,
-#else /* U_DARWIN */
-0,0,0x12,0x12,0x12,0xb2,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
-#endif /* U_DARWIN */
+0,0,0,0,0,0,0x12,0x12,0x12,0xb2,0x12,0x12,0x12,0x12,0x12,0x12,
0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
-#ifndef U_DARWIN
-0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0xb2,0xb2,0xb2,0xb2,
-#else /* U_DARWIN */
-0x12,0x12,0x12,0x12,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,
-#endif /* U_DARWIN */
+0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,
0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,
-#ifndef U_DARWIN
-0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0x12,0x12,0x12,0x12,
-#else /* U_DARWIN */
-0xb2,0xb2,0xb2,0xb2,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
-#endif /* U_DARWIN */
+0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
-#ifndef U_DARWIN
-0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0x12,0x12,0x12,0x12,
-0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x820,0,0x840,0x860,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x880,0x8a0,0,0,
-0,0,0,0,0,0,0,0x8c0,0,0,0,0,0,0,0,0,
+0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
+0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x820,0,0x840,0x860,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0x8c0,0x8e0,0x900,0x900,0x900,0,0,0,0,
+0,0,0,0,0,0,0,0,0x880,0x8a0,0,0,0,0,0,0,
+0x8c0,0,0,0x8e0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0
-#else /* U_DARWIN */
-0x12,0x12,0x12,0x12,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
-0x12,0x12,0x12,0x12,0x820,0,0x840,0x860,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x880,0x8a0,0,0,0,0,0,0,0,0,0,0x8c0,
+0,0,0,0x8e0,0x900,0x920,0x920,0x920,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x8c0,
-0x8e0,0x900,0x900,0x900,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-#endif /* U_DARWIN */
+0,0,0,0
};
static const uint32_t ubidi_props_mirrors[26]={
@@ -652,9 +600,9 @@ static const uint32_t ubidi_props_mirrors[26]={
0x16022fb,0x18022fc,0x1a022fd,0x1c022fe,0x8029b8,0x4029f5,0xa02ade,0xe02ae3,0xc02ae4,0x1002ae5
};
-static const uint8_t ubidi_props_jgArray[332]={
+static const uint8_t ubidi_props_jgArray[352]={
3,3,0x2c,3,0x2d,3,4,0x2a,4,4,0xd,0xd,0xd,6,6,0x1f,
-0x1f,0x23,0x23,0x21,0x21,0x28,0x28,1,1,0,0,0,0,0,0,9,
+0x1f,0x23,0x23,0x21,0x21,0x28,0x28,1,1,0xb,0xb,0x2d,0x2d,0x2d,0,9,
0x1d,0x13,0x16,0x18,0x1a,0x10,0x2c,0x2d,0x2d,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,4,0x1d,0,3,
@@ -673,7 +621,8 @@ static const uint8_t ubidi_props_jgArray[332]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0x35,0x34,0x33,4,4,
4,4,4,4,4,0xd,0xd,6,6,0x1f,0x23,1,1,1,9,9,
-0xb,0xb,0xb,0x18,0x18,0x1a,0x1a,0x1a,0x16,0x1f,0x1f,0x23
+0xb,0xb,0xb,0x18,0x18,0x1a,0x1a,0x1a,0x16,0x1f,0x1f,0x23,0xd,0xd,0x23,0x1f,
+0xd,3,3,0x2d,0x2d,0x2d,0x2c,0x2c,0x36,0x36,0xd,0x23,0x23,0x13,0,0
};
static const UBiDiProps ubidi_props_singleton={
@@ -685,11 +634,11 @@ static const UBiDiProps ubidi_props_singleton={
ubidi_props_trieIndex,
NULL,
utrie_defaultGetFoldingOffset,
- 2336,
+ 2368,
#ifndef U_DARWIN
- 5480,
+ 5972,
#else /* U_DARWIN */
- 5616,
+ 6116,
#endif /* U_DARWIN */
0,
TRUE
diff --git a/icuSources/common/ubidiimp.h b/icuSources/common/ubidiimp.h
index ca68858d..1f1dcaa0 100644
--- a/icuSources/common/ubidiimp.h
+++ b/icuSources/common/ubidiimp.h
@@ -1,7 +1,7 @@
/*
******************************************************************************
*
-* Copyright (C) 1999-2006, International Business Machines
+* Copyright (C) 1999-2007, International Business Machines
* Corporation and others. All Rights Reserved.
*
******************************************************************************
@@ -11,7 +11,7 @@
* indentation:4
*
* created on: 1999aug06
-* created by: Markus W. Scherer
+* created by: Markus W. Scherer, updated by Matitiahu Allouche
*/
#ifndef UBIDIIMP_H
@@ -70,6 +70,7 @@ enum {
/* are there any characters that are LTR or RTL? */
#define MASK_LTR (DIRPROP_FLAG(L)|DIRPROP_FLAG(EN)|DIRPROP_FLAG(AN)|DIRPROP_FLAG(LRE)|DIRPROP_FLAG(LRO))
#define MASK_RTL (DIRPROP_FLAG(R)|DIRPROP_FLAG(AL)|DIRPROP_FLAG(RLE)|DIRPROP_FLAG(RLO))
+#define MASK_R_AL (DIRPROP_FLAG(R)|DIRPROP_FLAG(AL))
/* explicit embedding codes */
#define MASK_LRX (DIRPROP_FLAG(LRE)|DIRPROP_FLAG(LRO))
@@ -149,11 +150,11 @@ typedef struct Run {
#define GET_INDEX(x) ((x)&~INDEX_ODD_BIT)
#define GET_ODD_BIT(x) ((uint32_t)(x)>>31)
-#define IS_ODD_RUN(x) (((x)&INDEX_ODD_BIT)!=0)
-#define IS_EVEN_RUN(x) (((x)&INDEX_ODD_BIT)==0)
+#define IS_ODD_RUN(x) ((UBool)(((x)&INDEX_ODD_BIT)!=0))
+#define IS_EVEN_RUN(x) ((UBool)(((x)&INDEX_ODD_BIT)==0))
U_CFUNC UBool
-ubidi_getRuns(UBiDi *pBiDi);
+ubidi_getRuns(UBiDi *pBiDi, UErrorCode *pErrorCode);
/** BiDi control code points */
enum {
@@ -299,41 +300,84 @@ struct UBiDi {
};
#define IS_VALID_PARA(x) ((x) && ((x)->pParaBiDi==(x)))
-#define IS_VALID_LINE(x) ((x) && ((x)->pParaBiDi) && ((x)->pParaBiDi->pParaBiDi==(x)->pParaBiDi))
#define IS_VALID_PARA_OR_LINE(x) ((x) && ((x)->pParaBiDi==(x) || (((x)->pParaBiDi) && (x)->pParaBiDi->pParaBiDi==(x)->pParaBiDi)))
+typedef union {
+ DirProp *dirPropsMemory;
+ UBiDiLevel *levelsMemory;
+ Para *parasMemory;
+ Run *runsMemory;
+} BidiMemoryForAllocation;
+
+/* Macros for initial checks at function entry */
+#define RETURN_IF_NULL_OR_FAILING_ERRCODE(pErrcode, retvalue) \
+ if((pErrcode)==NULL || U_FAILURE(*pErrcode)) return retvalue
+#define RETURN_IF_NOT_VALID_PARA(bidi, errcode, retvalue) \
+ if(!IS_VALID_PARA(bidi)) { \
+ errcode=U_INVALID_STATE_ERROR; \
+ return retvalue; \
+ }
+#define RETURN_IF_NOT_VALID_PARA_OR_LINE(bidi, errcode, retvalue) \
+ if(!IS_VALID_PARA_OR_LINE(bidi)) { \
+ errcode=U_INVALID_STATE_ERROR; \
+ return retvalue; \
+ }
+#define RETURN_IF_BAD_RANGE(arg, start, limit, errcode, retvalue) \
+ if((arg)<(start) || (arg)>=(limit)) { \
+ (errcode)=U_ILLEGAL_ARGUMENT_ERROR; \
+ return retvalue; \
+ }
+
+#define RETURN_VOID_IF_NULL_OR_FAILING_ERRCODE(pErrcode) \
+ if((pErrcode)==NULL || U_FAILURE(*pErrcode)) return
+#define RETURN_VOID_IF_NOT_VALID_PARA(bidi, errcode) \
+ if(!IS_VALID_PARA(bidi)) { \
+ errcode=U_INVALID_STATE_ERROR; \
+ return; \
+ }
+#define RETURN_VOID_IF_NOT_VALID_PARA_OR_LINE(bidi, errcode) \
+ if(!IS_VALID_PARA_OR_LINE(bidi)) { \
+ errcode=U_INVALID_STATE_ERROR; \
+ return; \
+ }
+#define RETURN_VOID_IF_BAD_RANGE(arg, start, limit, errcode) \
+ if((arg)<(start) || (arg)>=(limit)) { \
+ (errcode)=U_ILLEGAL_ARGUMENT_ERROR; \
+ return; \
+ }
+
/* helper function to (re)allocate memory if allowed */
U_CFUNC UBool
-ubidi_getMemory(void **pMemory, int32_t *pSize, UBool mayAllocate, int32_t sizeNeeded);
+ubidi_getMemory(BidiMemoryForAllocation *pMemory, int32_t *pSize, UBool mayAllocate, int32_t sizeNeeded);
/* helper macros for each allocated array in UBiDi */
#define getDirPropsMemory(pBiDi, length) \
- ubidi_getMemory((void **)&(pBiDi)->dirPropsMemory, &(pBiDi)->dirPropsSize, \
+ ubidi_getMemory((BidiMemoryForAllocation *)&(pBiDi)->dirPropsMemory, &(pBiDi)->dirPropsSize, \
(pBiDi)->mayAllocateText, (length))
#define getLevelsMemory(pBiDi, length) \
- ubidi_getMemory((void **)&(pBiDi)->levelsMemory, &(pBiDi)->levelsSize, \
+ ubidi_getMemory((BidiMemoryForAllocation *)&(pBiDi)->levelsMemory, &(pBiDi)->levelsSize, \
(pBiDi)->mayAllocateText, (length))
#define getRunsMemory(pBiDi, length) \
- ubidi_getMemory((void **)&(pBiDi)->runsMemory, &(pBiDi)->runsSize, \
+ ubidi_getMemory((BidiMemoryForAllocation *)&(pBiDi)->runsMemory, &(pBiDi)->runsSize, \
(pBiDi)->mayAllocateRuns, (length)*sizeof(Run))
/* additional macros used by ubidi_open() - always allow allocation */
#define getInitialDirPropsMemory(pBiDi, length) \
- ubidi_getMemory((void **)&(pBiDi)->dirPropsMemory, &(pBiDi)->dirPropsSize, \
+ ubidi_getMemory((BidiMemoryForAllocation *)&(pBiDi)->dirPropsMemory, &(pBiDi)->dirPropsSize, \
TRUE, (length))
#define getInitialLevelsMemory(pBiDi, length) \
- ubidi_getMemory((void **)&(pBiDi)->levelsMemory, &(pBiDi)->levelsSize, \
+ ubidi_getMemory((BidiMemoryForAllocation *)&(pBiDi)->levelsMemory, &(pBiDi)->levelsSize, \
TRUE, (length))
#define getInitialParasMemory(pBiDi, length) \
- ubidi_getMemory((void **)&(pBiDi)->parasMemory, &(pBiDi)->parasSize, \
+ ubidi_getMemory((BidiMemoryForAllocation *)&(pBiDi)->parasMemory, &(pBiDi)->parasSize, \
TRUE, (length)*sizeof(Para))
#define getInitialRunsMemory(pBiDi, length) \
- ubidi_getMemory((void **)&(pBiDi)->runsMemory, &(pBiDi)->runsSize, \
+ ubidi_getMemory((BidiMemoryForAllocation *)&(pBiDi)->runsMemory, &(pBiDi)->runsSize, \
TRUE, (length)*sizeof(Run))
#endif
diff --git a/icuSources/common/ubidiln.c b/icuSources/common/ubidiln.c
index 31866b47..8cb079c2 100644
--- a/icuSources/common/ubidiln.c
+++ b/icuSources/common/ubidiln.c
@@ -1,7 +1,7 @@
/*
******************************************************************************
*
-* Copyright (C) 1999-2006, International Business Machines
+* Copyright (C) 1999-2007, International Business Machines
* Corporation and others. All Rights Reserved.
*
******************************************************************************
@@ -11,20 +11,16 @@
* indentation:4
*
* created on: 1999aug06
-* created by: Markus W. Scherer
+* created by: Markus W. Scherer, updated by Matitiahu Allouche
*/
-/* set import/export definitions */
-#ifndef U_COMMON_IMPLEMENTATION
-# define U_COMMON_IMPLEMENTATION
-#endif
-
#include "cmemory.h"
#include "unicode/utypes.h"
#include "unicode/ustring.h"
#include "unicode/uchar.h"
#include "unicode/ubidi.h"
#include "ubidiimp.h"
+#include "uassert.h"
/*
* General remarks about the functions in this file:
@@ -132,16 +128,16 @@ ubidi_setLine(const UBiDi *pParaBiDi,
int32_t length;
/* check the argument values */
- if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
- return;
- } else if(!IS_VALID_PARA(pParaBiDi) || pLineBiDi==NULL) {
+ RETURN_VOID_IF_NULL_OR_FAILING_ERRCODE(pErrorCode);
+ RETURN_VOID_IF_NOT_VALID_PARA(pParaBiDi, *pErrorCode);
+ RETURN_VOID_IF_BAD_RANGE(start, 0, limit, *pErrorCode);
+ RETURN_VOID_IF_BAD_RANGE(limit, 0, pParaBiDi->length+1, *pErrorCode);
+ if(pLineBiDi==NULL) {
*pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
return;
- } else if(start<0 || start>limit || limit>pParaBiDi->length) {
- *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR;
- return;
- } else if(ubidi_getParagraph(pParaBiDi, start, NULL, NULL, NULL, pErrorCode) !=
- ubidi_getParagraph(pParaBiDi, limit-1, NULL, NULL, NULL, pErrorCode)) {
+ }
+ if(ubidi_getParagraph(pParaBiDi, start, NULL, NULL, NULL, pErrorCode) !=
+ ubidi_getParagraph(pParaBiDi, limit-1, NULL, NULL, NULL, pErrorCode)) {
/* the line crosses a paragraph boundary */
*pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
return;
@@ -166,92 +162,84 @@ ubidi_setLine(const UBiDi *pParaBiDi,
pLineBiDi->controlCount++;
}
}
+ pLineBiDi->resultLength-=pLineBiDi->controlCount;
}
- if(length>0) {
- pLineBiDi->dirProps=pParaBiDi->dirProps+start;
- pLineBiDi->levels=pParaBiDi->levels+start;
- pLineBiDi->runCount=-1;
+ pLineBiDi->dirProps=pParaBiDi->dirProps+start;
+ pLineBiDi->levels=pParaBiDi->levels+start;
+ pLineBiDi->runCount=-1;
- if(pParaBiDi->direction!=UBIDI_MIXED) {
- /* the parent is already trivial */
- pLineBiDi->direction=pParaBiDi->direction;
+ if(pParaBiDi->direction!=UBIDI_MIXED) {
+ /* the parent is already trivial */
+ pLineBiDi->direction=pParaBiDi->direction;
- /*
- * The parent's levels are all either
- * implicitly or explicitly ==paraLevel;
- * do the same here.
- */
- if(pParaBiDi->trailingWSStart<=start) {
- pLineBiDi->trailingWSStart=0;
- } else if(pParaBiDi->trailingWSStarttrailingWSStart=pParaBiDi->trailingWSStart-start;
- } else {
- pLineBiDi->trailingWSStart=length;
- }
+ /*
+ * The parent's levels are all either
+ * implicitly or explicitly ==paraLevel;
+ * do the same here.
+ */
+ if(pParaBiDi->trailingWSStart<=start) {
+ pLineBiDi->trailingWSStart=0;
+ } else if(pParaBiDi->trailingWSStarttrailingWSStart=pParaBiDi->trailingWSStart-start;
} else {
- const UBiDiLevel *levels=pLineBiDi->levels;
- int32_t i, trailingWSStart;
- UBiDiLevel level;
+ pLineBiDi->trailingWSStart=length;
+ }
+ } else {
+ const UBiDiLevel *levels=pLineBiDi->levels;
+ int32_t i, trailingWSStart;
+ UBiDiLevel level;
+
+ setTrailingWSStart(pLineBiDi);
+ trailingWSStart=pLineBiDi->trailingWSStart;
- setTrailingWSStart(pLineBiDi);
- trailingWSStart=pLineBiDi->trailingWSStart;
+ /* recalculate pLineBiDi->direction */
+ if(trailingWSStart==0) {
+ /* all levels are at paraLevel */
+ pLineBiDi->direction=(UBiDiDirection)(pLineBiDi->paraLevel&1);
+ } else {
+ /* get the level of the first character */
+ level=(UBiDiLevel)(levels[0]&1);
- /* recalculate pLineBiDi->direction */
- if(trailingWSStart==0) {
- /* all levels are at paraLevel */
- pLineBiDi->direction=(UBiDiDirection)(pLineBiDi->paraLevel&1);
+ /* if there is anything of a different level, then the line is mixed */
+ if(trailingWSStartparaLevel&1)!=level) {
+ /* the trailing WS is at paraLevel, which differs from levels[0] */
+ pLineBiDi->direction=UBIDI_MIXED;
} else {
- /* get the level of the first character */
- level=(UBiDiLevel)(levels[0]&1);
-
- /* if there is anything of a different level, then the line is mixed */
- if(trailingWSStartparaLevel&1)!=level) {
- /* the trailing WS is at paraLevel, which differs from levels[0] */
- pLineBiDi->direction=UBIDI_MIXED;
- } else {
- /* see if levels[1..trailingWSStart-1] have the same direction as levels[0] and paraLevel */
- i=1;
- for(;;) {
- if(i==trailingWSStart) {
- /* the direction values match those in level */
- pLineBiDi->direction=(UBiDiDirection)level;
- break;
- } else if((levels[i]&1)!=level) {
- pLineBiDi->direction=UBIDI_MIXED;
- break;
- }
- ++i;
+ /* see if levels[1..trailingWSStart-1] have the same direction as levels[0] and paraLevel */
+ i=1;
+ for(;;) {
+ if(i==trailingWSStart) {
+ /* the direction values match those in level */
+ pLineBiDi->direction=(UBiDiDirection)level;
+ break;
+ } else if((levels[i]&1)!=level) {
+ pLineBiDi->direction=UBIDI_MIXED;
+ break;
}
+ ++i;
}
}
+ }
- switch(pLineBiDi->direction) {
- case UBIDI_LTR:
- /* make sure paraLevel is even */
- pLineBiDi->paraLevel=(UBiDiLevel)((pLineBiDi->paraLevel+1)&~1);
+ switch(pLineBiDi->direction) {
+ case UBIDI_LTR:
+ /* make sure paraLevel is even */
+ pLineBiDi->paraLevel=(UBiDiLevel)((pLineBiDi->paraLevel+1)&~1);
- /* all levels are implicitly at paraLevel (important for ubidi_getLevels()) */
- pLineBiDi->trailingWSStart=0;
- break;
- case UBIDI_RTL:
- /* make sure paraLevel is odd */
- pLineBiDi->paraLevel|=1;
+ /* all levels are implicitly at paraLevel (important for ubidi_getLevels()) */
+ pLineBiDi->trailingWSStart=0;
+ break;
+ case UBIDI_RTL:
+ /* make sure paraLevel is odd */
+ pLineBiDi->paraLevel|=1;
- /* all levels are implicitly at paraLevel (important for ubidi_getLevels()) */
- pLineBiDi->trailingWSStart=0;
- break;
- default:
- break;
- }
+ /* all levels are implicitly at paraLevel (important for ubidi_getLevels()) */
+ pLineBiDi->trailingWSStart=0;
+ break;
+ default:
+ break;
}
- } else {
- /* create an object for a zero-length line */
- pLineBiDi->direction=pLineBiDi->paraLevel&1 ? UBIDI_RTL : UBIDI_LTR;
- pLineBiDi->trailingWSStart=pLineBiDi->runCount=0;
-
- pLineBiDi->dirProps=NULL;
- pLineBiDi->levels=NULL;
}
pLineBiDi->pParaBiDi=pParaBiDi; /* mark successful setLine */
return;
@@ -273,13 +261,12 @@ U_CAPI const UBiDiLevel * U_EXPORT2
ubidi_getLevels(UBiDi *pBiDi, UErrorCode *pErrorCode) {
int32_t start, length;
- if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
- return NULL;
- } else if(!IS_VALID_PARA_OR_LINE(pBiDi) || (length=pBiDi->length)<=0) {
+ RETURN_IF_NULL_OR_FAILING_ERRCODE(pErrorCode, NULL);
+ RETURN_IF_NOT_VALID_PARA_OR_LINE(pBiDi, *pErrorCode, NULL);
+ if((length=pBiDi->length)<=0) {
*pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
return NULL;
}
-
if((start=pBiDi->trailingWSStart)==length) {
/* the current levels array reflects the WS run */
return pBiDi->levels;
@@ -292,7 +279,6 @@ ubidi_getLevels(UBiDi *pBiDi, UErrorCode *pErrorCode) {
* This must be a UBiDi object for a line, and
* we need to create a new levels array.
*/
-
if(getLevelsMemory(pBiDi, length)) {
UBiDiLevel *levels=pBiDi->levelsMemory;
@@ -314,35 +300,46 @@ ubidi_getLevels(UBiDi *pBiDi, UErrorCode *pErrorCode) {
}
U_CAPI void U_EXPORT2
-ubidi_getLogicalRun(const UBiDi *pBiDi, int32_t logicalStart,
+ubidi_getLogicalRun(const UBiDi *pBiDi, int32_t logicalPosition,
int32_t *pLogicalLimit, UBiDiLevel *pLevel) {
- int32_t length;
-
- if(!IS_VALID_PARA_OR_LINE(pBiDi) || logicalStart<0 ||
- (length=pBiDi->length)<=logicalStart) {
+ UErrorCode errorCode;
+ int32_t runCount, visualStart, logicalLimit, logicalFirst, i;
+ Run iRun;
+
+ errorCode=U_ZERO_ERROR;
+ RETURN_VOID_IF_BAD_RANGE(logicalPosition, 0, pBiDi->length, errorCode);
+ /* ubidi_countRuns will check VALID_PARA_OR_LINE */
+ runCount=ubidi_countRuns((UBiDi *)pBiDi, &errorCode);
+ if(U_FAILURE(errorCode)) {
return;
}
+ /* this is done based on runs rather than on levels since levels have
+ a special interpretation when UBIDI_REORDER_RUNS_ONLY
+ */
+ visualStart=logicalLimit=0;
+ iRun=pBiDi->runs[0];
- if(pBiDi->direction!=UBIDI_MIXED || logicalStart>=pBiDi->trailingWSStart) {
- if(pLogicalLimit!=NULL) {
- *pLogicalLimit=length;
- }
- if(pLevel!=NULL) {
- *pLevel=GET_PARALEVEL(pBiDi, logicalStart);
+ for(i=0; iruns[i];
+ logicalFirst=GET_INDEX(iRun.logicalStart);
+ logicalLimit=logicalFirst+iRun.visualLimit-visualStart;
+ if((logicalPosition>=logicalFirst) &&
+ (logicalPositionlevels;
- UBiDiLevel level=levels[logicalStart];
-
- /* search for the end of the run */
- length=pBiDi->trailingWSStart;
- while(++logicalStartreorderingMode==UBIDI_REORDER_RUNS_ONLY) {
+ *pLevel=(UBiDiLevel)GET_ODD_BIT(iRun.logicalStart);
}
- if(pLevel!=NULL) {
- *pLevel=level;
+ else if(pBiDi->direction!=UBIDI_MIXED || logicalPosition>=pBiDi->trailingWSStart) {
+ *pLevel=GET_PARALEVEL(pBiDi, logicalPosition);
+ } else {
+ *pLevel=pBiDi->levels[logicalPosition];
}
}
}
@@ -351,40 +348,41 @@ ubidi_getLogicalRun(const UBiDi *pBiDi, int32_t logicalStart,
U_CAPI int32_t U_EXPORT2
ubidi_countRuns(UBiDi *pBiDi, UErrorCode *pErrorCode) {
- if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
+ RETURN_IF_NULL_OR_FAILING_ERRCODE(pErrorCode, -1);
+ RETURN_IF_NOT_VALID_PARA_OR_LINE(pBiDi, *pErrorCode, -1);
+ ubidi_getRuns(pBiDi, pErrorCode);
+ if(U_FAILURE(*pErrorCode)) {
return -1;
- } else if(!IS_VALID_PARA_OR_LINE(pBiDi) ||
- (pBiDi->runCount<0 && !ubidi_getRuns(pBiDi))) {
- *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
- return -1;
- } else {
- return pBiDi->runCount;
}
+ return pBiDi->runCount;
}
U_CAPI UBiDiDirection U_EXPORT2
ubidi_getVisualRun(UBiDi *pBiDi, int32_t runIndex,
- int32_t *pLogicalStart, int32_t *pLength) {
- if( !IS_VALID_PARA_OR_LINE(pBiDi) || runIndex<0 ||
- (pBiDi->runCount==-1 && !ubidi_getRuns(pBiDi)) ||
- runIndex>=pBiDi->runCount
- ) {
+ int32_t *pLogicalStart, int32_t *pLength)
+{
+ int32_t start;
+ UErrorCode errorCode = U_ZERO_ERROR;
+ RETURN_IF_NOT_VALID_PARA_OR_LINE(pBiDi, errorCode, UBIDI_LTR);
+ ubidi_getRuns(pBiDi, &errorCode);
+ if(U_FAILURE(errorCode)) {
return UBIDI_LTR;
- } else {
- int32_t start=pBiDi->runs[runIndex].logicalStart;
- if(pLogicalStart!=NULL) {
- *pLogicalStart=GET_INDEX(start);
- }
- if(pLength!=NULL) {
- if(runIndex>0) {
- *pLength=pBiDi->runs[runIndex].visualLimit-
- pBiDi->runs[runIndex-1].visualLimit;
- } else {
- *pLength=pBiDi->runs[0].visualLimit;
- }
+ }
+ RETURN_IF_BAD_RANGE(runIndex, 0, pBiDi->runCount, errorCode, UBIDI_LTR);
+
+ start=pBiDi->runs[runIndex].logicalStart;
+ if(pLogicalStart!=NULL) {
+ *pLogicalStart=GET_INDEX(start);
+ }
+ if(pLength!=NULL) {
+ if(runIndex>0) {
+ *pLength=pBiDi->runs[runIndex].visualLimit-
+ pBiDi->runs[runIndex-1].visualLimit;
+ } else {
+ *pLength=pBiDi->runs[0].visualLimit;
}
- return (UBiDiDirection)GET_ODD_BIT(start);
}
+ return (UBiDiDirection)GET_ODD_BIT(start);
}
/* in trivial cases there is only one trivial run; called by ubidi_getRuns() */
@@ -517,7 +515,7 @@ reorderLine(UBiDi *pBiDi, UBiDiLevel minLevel, UBiDiLevel maxLevel) {
/* compute the runs array --------------------------------------------------- */
-static int32_t getRunFromLogicalIndex(UBiDi *pBiDi, int32_t logicalIndex) {
+static int32_t getRunFromLogicalIndex(UBiDi *pBiDi, int32_t logicalIndex, UErrorCode *pErrorCode) {
Run *runs=pBiDi->runs;
int32_t runCount=pBiDi->runCount, visualStart=0, i, length, logicalStart;
@@ -530,8 +528,8 @@ static int32_t getRunFromLogicalIndex(UBiDi *pBiDi, int32_t logicalIndex) {
visualStart+=length;
}
/* we should never get here */
- i=length+25;
- i/=(i-length-25); /* force program crash */
+ U_ASSERT(FALSE);
+ *pErrorCode = U_INVALID_STATE_ERROR;
return 0;
}
@@ -547,7 +545,15 @@ static int32_t getRunFromLogicalIndex(UBiDi *pBiDi, int32_t logicalIndex) {
* negative number of BiDi control characters within this run.
*/
U_CFUNC UBool
-ubidi_getRuns(UBiDi *pBiDi) {
+ubidi_getRuns(UBiDi *pBiDi, UErrorCode *pErrorCode) {
+ /*
+ * This method returns immediately if the runs are already set. This
+ * includes the case of length==0 (handled in setPara)..
+ */
+ if (pBiDi->runCount>=0) {
+ return TRUE;
+ }
+
if(pBiDi->direction!=UBIDI_MIXED) {
/* simple, single-run case - this covers length==0 */
/* pBiDi->paraLevel is ok even for contextual multiple paragraphs */
@@ -555,7 +561,9 @@ ubidi_getRuns(UBiDi *pBiDi) {
} else /* UBIDI_MIXED, length>0 */ {
/* mixed directionality */
int32_t length=pBiDi->length, limit;
-
+ UBiDiLevel *levels=pBiDi->levels;
+ int32_t i, runCount;
+ UBiDiLevel level=UBIDI_DEFAULT_LTR; /* initialize with no valid level */
/*
* If there are WS characters at the end of the line
* and the run preceding them has a level different from
@@ -568,114 +576,105 @@ ubidi_getRuns(UBiDi *pBiDi) {
* levels[]!=paraLevel but we have to treat it like it were so.
*/
limit=pBiDi->trailingWSStart;
- if(limit==0) {
- /* there is only WS on this line */
- getSingleRun(pBiDi, GET_PARALEVEL(pBiDi, 0));
- } else {
- UBiDiLevel *levels=pBiDi->levels;
- int32_t i, runCount;
- UBiDiLevel level=UBIDI_DEFAULT_LTR; /* initialize with no valid level */
-
- /* count the runs, there is at least one non-WS run, and limit>0 */
- runCount=0;
- for(i=0; i0 */
+ runCount=0;
+ for(i=0; i1 || limit1 */
+ if(getRunsMemory(pBiDi, runCount)) {
+ runs=pBiDi->runsMemory;
+ } else {
+ return FALSE;
+ }
+
+ /* set the runs */
+ /* FOOD FOR THOUGHT: this could be optimized, e.g.:
+ * 464->444, 484->444, 575->555, 595->555
+ * However, that would take longer. Check also how it would
+ * interact with BiDi control removal and inserting Marks.
*/
- if(runCount==1 && limit==length) {
- /* There is only one non-WS run and no trailing WS-run. */
- getSingleRun(pBiDi, levels[0]);
- } else /* runCount>1 || limit1 */
- if(getRunsMemory(pBiDi, runCount)) {
- runs=pBiDi->runsMemory;
- } else {
- return FALSE;
+ /* search for the run limits and initialize visualLimit values with the run lengths */
+ i=0;
+ do {
+ /* prepare this run */
+ start=i;
+ level=levels[i];
+ if(levelmaxLevel) {
+ maxLevel=level;
}
- /* set the runs */
- /* FOOD FOR THOUGHT: this could be optimized, e.g.:
- * 464->444, 484->444, 575->555, 595->555
- * However, that would take longer. Check also how it would
- * interact with BiDi control removal and inserting Marks.
- */
- runIndex=0;
-
- /* search for the run limits and initialize visualLimit values with the run lengths */
- i=0;
- do {
- /* prepare this run */
- start=i;
- level=levels[i];
- if(levelmaxLevel) {
- maxLevel=level;
- }
-
- /* look for the run limit */
- while(++iparaLevel is ok even
- if contextual multiple paragraphs. */
- if(pBiDi->paraLevelparaLevel;
- }
+ /* look for the run limit */
+ while(++iparaLevel is ok even
+ if contextual multiple paragraphs. */
+ if(pBiDi->paraLevelparaLevel;
}
+ }
- /* set the object fields */
- pBiDi->runs=runs;
- pBiDi->runCount=runCount;
+ /* set the object fields */
+ pBiDi->runs=runs;
+ pBiDi->runCount=runCount;
- reorderLine(pBiDi, minLevel, maxLevel);
+ reorderLine(pBiDi, minLevel, maxLevel);
- /* now add the direction flags and adjust the visualLimit's to be just that */
- /* this loop will also handle the trailing WS run */
- limit=0;
- for(i=0; iparaLevel is ok even if
- contextual multiple paragraphs. */
- if(runIndexparaLevel & 1) != 0)? 0 : runIndex;
+ /* Set the "odd" bit for the trailing WS run. */
+ /* For a RTL paragraph, it will be the *first* run in visual order. */
+ /* For the trailing WS run, pBiDi->paraLevel is ok even if
+ contextual multiple paragraphs. */
+ if(runIndexparaLevel & 1) != 0)? 0 : runIndex;
- ADD_ODD_BIT_FROM_LEVEL(runs[trailingRun].logicalStart, pBiDi->paraLevel);
- }
+ ADD_ODD_BIT_FROM_LEVEL(runs[trailingRun].logicalStart, pBiDi->paraLevel);
}
}
}
@@ -686,7 +685,7 @@ ubidi_getRuns(UBiDi *pBiDi) {
*limit=start+pBiDi->insertPoints.size;
int32_t runIndex;
for(point=start; pointpos);
+ runIndex=getRunFromLogicalIndex(pBiDi, point->pos, pErrorCode);
pBiDi->runs[runIndex].insertRemove|=point->flag;
}
}
@@ -697,7 +696,7 @@ ubidi_getRuns(UBiDi *pBiDi) {
const UChar *start=pBiDi->text, *limit=start+pBiDi->length, *pu;
for(pu=start; puruns[runIndex].insertRemove--;
}
}
@@ -873,48 +872,45 @@ ubidi_reorderVisual(const UBiDiLevel *levels, int32_t length, int32_t *indexMap)
U_CAPI int32_t U_EXPORT2
ubidi_getVisualIndex(UBiDi *pBiDi, int32_t logicalIndex, UErrorCode *pErrorCode) {
- int32_t visualIndex;
- if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
- return 0;
- } else if(!IS_VALID_PARA_OR_LINE(pBiDi)) {
- *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
- return 0;
- } else if(logicalIndex<0 || pBiDi->length<=logicalIndex) {
- *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR;
- return 0;
- } else {
- /* we can do the trivial cases without the runs array */
- switch(pBiDi->direction) {
- case UBIDI_LTR:
- visualIndex=logicalIndex;
- break;
- case UBIDI_RTL:
- visualIndex=pBiDi->length-logicalIndex-1;
- break;
- default:
- if(pBiDi->runCount<0 && !ubidi_getRuns(pBiDi)) {
- *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
- return 0;
- } else {
- Run *runs=pBiDi->runs;
- int32_t i, visualStart=0, offset, length;
-
- /* linear search for the run, search on the visual runs */
- for(i=0;; ++i) {
- length=runs[i].visualLimit-visualStart;
- offset=logicalIndex-GET_INDEX(runs[i].logicalStart);
- if(offset>=0 && offsetlength, *pErrorCode, -1);
+
+ /* we can do the trivial cases without the runs array */
+ switch(pBiDi->direction) {
+ case UBIDI_LTR:
+ visualIndex=logicalIndex;
+ break;
+ case UBIDI_RTL:
+ visualIndex=pBiDi->length-logicalIndex-1;
+ break;
+ default:
+ if(!ubidi_getRuns(pBiDi, pErrorCode)) {
+ *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
+ return -1;
+ } else {
+ Run *runs=pBiDi->runs;
+ int32_t i, visualStart=0, offset, length;
+
+ /* linear search for the run, search on the visual runs */
+ for(i=0; irunCount; ++i) {
+ length=runs[i].visualLimit-visualStart;
+ offset=logicalIndex-GET_INDEX(runs[i].logicalStart);
+ if(offset>=0 && offset=pBiDi->runCount) {
+ return UBIDI_MAP_NOWHERE;
}
}
}
@@ -969,7 +965,7 @@ ubidi_getVisualIndex(UBiDi *pBiDi, int32_t logicalIndex, UErrorCode *pErrorCode)
} else {
/* RTL: check from logical index to run end */
start=logicalIndex+1;
- limit=runs[i].logicalStart+length;
+ limit=GET_INDEX(runs[i].logicalStart)+length;
}
for(j=start; jtext[j];
@@ -988,15 +984,9 @@ U_CAPI int32_t U_EXPORT2
ubidi_getLogicalIndex(UBiDi *pBiDi, int32_t visualIndex, UErrorCode *pErrorCode) {
Run *runs;
int32_t i, runCount, start;
- if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
- return 0;
- } else if(!IS_VALID_PARA_OR_LINE(pBiDi)) {
- *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
- return 0;
- } else if(visualIndex<0 || pBiDi->resultLength<=visualIndex) {
- *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR;
- return 0;
- }
+ RETURN_IF_NULL_OR_FAILING_ERRCODE(pErrorCode, -1);
+ RETURN_IF_NOT_VALID_PARA_OR_LINE(pBiDi, *pErrorCode, -1);
+ RETURN_IF_BAD_RANGE(visualIndex, 0, pBiDi->resultLength, *pErrorCode, -1);
/* we can do the trivial cases without the runs array */
if(pBiDi->insertPoints.size==0 && pBiDi->controlCount==0) {
if(pBiDi->direction==UBIDI_LTR) {
@@ -1005,10 +995,10 @@ ubidi_getLogicalIndex(UBiDi *pBiDi, int32_t visualIndex, UErrorCode *pErrorCode)
else if(pBiDi->direction==UBIDI_RTL) {
return pBiDi->length-visualIndex-1;
}
- if(pBiDi->runCount<0 && !ubidi_getRuns(pBiDi)) {
- *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
- return 0;
- }
+ }
+ if(!ubidi_getRuns(pBiDi, pErrorCode)) {
+ *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
+ return -1;
}
runs=pBiDi->runs;
@@ -1117,20 +1107,46 @@ ubidi_getLogicalIndex(UBiDi *pBiDi, int32_t visualIndex, UErrorCode *pErrorCode)
U_CAPI void U_EXPORT2
ubidi_getLogicalMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode) {
- const UBiDiLevel *levels;
-
- /* ubidi_getLevels() checks all of its and our arguments */
- if((levels=ubidi_getLevels(pBiDi, pErrorCode))==NULL) {
+ RETURN_VOID_IF_NULL_OR_FAILING_ERRCODE(pErrorCode);
+ /* ubidi_countRuns() checks for VALID_PARA_OR_LINE */
+ ubidi_countRuns(pBiDi, pErrorCode);
+ if(U_FAILURE(*pErrorCode)) {
/* no op */
} else if(indexMap==NULL) {
*pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
} else {
- ubidi_reorderLogical(levels, pBiDi->length, indexMap);
+ /* fill a logical-to-visual index map using the runs[] */
+ int32_t visualStart, visualLimit, i, j, k;
+ int32_t logicalStart, logicalLimit;
+ Run *runs=pBiDi->runs;
+ if (pBiDi->length<=0) {
+ return;
+ }
+ if (pBiDi->length>pBiDi->resultLength) {
+ uprv_memset(indexMap, 0xFF, pBiDi->length*sizeof(int32_t));
+ }
+
+ visualStart=0;
+ for(j=0; jrunCount; ++j) {
+ logicalStart=GET_INDEX(runs[j].logicalStart);
+ visualLimit=runs[j].visualLimit;
+ if(IS_EVEN_RUN(runs[j].logicalStart)) {
+ do { /* LTR */
+ indexMap[logicalStart++]=visualStart++;
+ } while(visualStartinsertPoints.size>0) {
int32_t markFound=0, runCount=pBiDi->runCount;
- int32_t visualStart=0, length, insertRemove, i, j;
- Run *runs=pBiDi->runs;
+ int32_t length, insertRemove;
+ visualStart=0;
/* add number of marks found until each index */
for(i=0; i0) {
- int32_t logicalStart=GET_INDEX(runs[i].logicalStart);
- int32_t limit=logicalStart+length;
- for(j=logicalStart; jcontrolCount>0) {
int32_t controlFound=0, runCount=pBiDi->runCount;
- int32_t visualStart=0, length, insertRemove, i, j, k;
- int32_t logicalStart, logicalEnd;
+ int32_t length, insertRemove;
UBool evenRun;
UChar uchar;
- Run *runs=pBiDi->runs;
+ visualStart=0;
/* subtract number of controls found until each index */
for(i=0; itext[k];
if(IS_BIDI_CONTROL_CHAR(uchar)) {
controlFound++;
@@ -1193,16 +1208,21 @@ ubidi_getLogicalMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode) {
U_CAPI void U_EXPORT2
ubidi_getVisualMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode) {
- /* ubidi_countRuns() checks all of its and our arguments */
- if(ubidi_countRuns(pBiDi, pErrorCode)<=0) {
- /* no op */
- } else if(indexMap==NULL) {
+ RETURN_VOID_IF_NULL_OR_FAILING_ERRCODE(pErrorCode);
+ if(indexMap==NULL) {
*pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
- } else {
+ return;
+ }
+ /* ubidi_countRuns() checks for VALID_PARA_OR_LINE */
+ ubidi_countRuns(pBiDi, pErrorCode);
+ if(U_SUCCESS(*pErrorCode)) {
/* fill a visual-to-logical index map using the runs[] */
Run *runs=pBiDi->runs, *runsLimit=runs+pBiDi->runCount;
int32_t logicalStart, visualStart, visualLimit, *pi=indexMap;
+ if (pBiDi->resultLength<=0) {
+ return;
+ }
visualStart=0;
for(; runslogicalStart;
diff --git a/icuSources/common/ubidiwrt.c b/icuSources/common/ubidiwrt.c
index acbc4bb4..34b13711 100644
--- a/icuSources/common/ubidiwrt.c
+++ b/icuSources/common/ubidiwrt.c
@@ -1,7 +1,7 @@
/*
******************************************************************************
*
-* Copyright (C) 2000-2006, International Business Machines
+* Copyright (C) 2000-2007, International Business Machines
* Corporation and others. All Rights Reserved.
*
******************************************************************************
@@ -11,7 +11,7 @@
* indentation:4
*
* created on: 1999aug06
-* created by: Markus W. Scherer
+* created by: Markus W. Scherer, updated by Matitiahu Allouche
*
* This file contains implementations for BiDi functions that use
* the core algorithm and core API to write reordered text.
@@ -348,8 +348,6 @@ ubidi_writeReverse(const UChar *src, int32_t srcLength,
return u_terminateUChars(dest, destSize, destLength, pErrorCode);
}
-#define MASK_R_AL (1UL<runs[run].insertRemove;
- if(markFlag<0) { /* insert count */
+ if(markFlag<0) { /* BiDi controls count */
markFlag=0;
}
diff --git a/icuSources/common/ubrk.cpp b/icuSources/common/ubrk.cpp
index 3f941a54..944708ab 100644
--- a/icuSources/common/ubrk.cpp
+++ b/icuSources/common/ubrk.cpp
@@ -1,8 +1,8 @@
/*
-*****************************************************************************************
-* Copyright (C) 1996-2006, International Business Machines
+********************************************************************************
+* Copyright (C) 1996-2008, International Business Machines
* Corporation and others. All Rights Reserved.
-*****************************************************************************************
+********************************************************************************
*/
#include "unicode/utypes.h"
@@ -21,12 +21,12 @@
U_NAMESPACE_USE
-//----------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
//
// ubrk_open Create a canned type of break iterator based on type (word, line, etc.)
// and locale.
//
-//----------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
U_CAPI UBreakIterator* U_EXPORT2
ubrk_open(UBreakIteratorType type,
const char *locale,
@@ -84,12 +84,12 @@ ubrk_open(UBreakIteratorType type,
-//----------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
//
// ubrk_openRules open a break iterator from a set of break rules.
// Invokes the rule builder.
//
-//----------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
U_CAPI UBreakIterator* U_EXPORT2
ubrk_openRules( const UChar *rules,
int32_t rulesLength,
@@ -104,7 +104,7 @@ ubrk_openRules( const UChar *rules,
BreakIterator *result = 0;
UnicodeString ruleString(rules, rulesLength);
- result = RBBIRuleBuilder::createRuleBasedBreakIterator(ruleString, *parseErr, *status);
+ result = RBBIRuleBuilder::createRuleBasedBreakIterator(ruleString, parseErr, *status);
if(U_FAILURE(*status)) {
return 0;
}
@@ -176,7 +176,7 @@ ubrk_setText(UBreakIterator* bi,
-U_DRAFT void U_EXPORT2
+U_CAPI void U_EXPORT2
ubrk_setUText(UBreakIterator *bi,
UText *text,
UErrorCode *status)
diff --git a/icuSources/common/ucase.c b/icuSources/common/ucase.c
index c21045a0..491b02a3 100644
--- a/icuSources/common/ucase.c
+++ b/icuSources/common/ucase.c
@@ -1,7 +1,7 @@
/*
*******************************************************************************
*
-* Copyright (C) 2004-2006, International Business Machines
+* Copyright (C) 2004-2008, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
@@ -41,8 +41,6 @@ struct UCaseProps {
/* data loading etc. -------------------------------------------------------- */
-#define UCASE_HARDCODE_DATA 1
-
#if UCASE_HARDCODE_DATA
/* ucase_props_data.c is machine-generated by gencase --csource */
@@ -205,23 +203,24 @@ ucase_close(UCaseProps *csp) {
/* UCaseProps singleton ----------------------------------------------------- */
-static UCaseProps *gCsp=NULL, *gCspDummy=NULL;
#if !UCASE_HARDCODE_DATA
+static UCaseProps *gCsp=NULL;
+static UCaseProps *gCspDummy=NULL;
static UErrorCode gErrorCode=U_ZERO_ERROR;
static int8_t gHaveData=0;
#endif
+#if !UCASE_HARDCODE_DATA
static UBool U_CALLCONV ucase_cleanup(void) {
ucase_close(gCsp);
gCsp=NULL;
ucase_close(gCspDummy);
gCspDummy=NULL;
-#if !UCASE_HARDCODE_DATA
gErrorCode=U_ZERO_ERROR;
gHaveData=0;
-#endif
return TRUE;
}
+#endif
U_CAPI const UCaseProps * U_EXPORT2
ucase_getSingleton(UErrorCode *pErrorCode) {
@@ -271,6 +270,7 @@ ucase_getSingleton(UErrorCode *pErrorCode) {
#endif
}
+#if !UCASE_HARDCODE_DATA
U_CAPI const UCaseProps * U_EXPORT2
ucase_getDummy(UErrorCode *pErrorCode) {
UCaseProps *csp;
@@ -322,6 +322,7 @@ ucase_getDummy(UErrorCode *pErrorCode) {
return gCspDummy;
}
}
+#endif
/* set of property starts for UnicodeSet ------------------------------------ */
@@ -333,7 +334,7 @@ _enumPropertyStartsRange(const void *context, UChar32 start, UChar32 limit, uint
return TRUE;
}
-U_CAPI void U_EXPORT2
+U_CFUNC void U_EXPORT2
ucase_addPropertyStarts(const UCaseProps *csp, const USetAdder *sa, UErrorCode *pErrorCode) {
if(U_FAILURE(*pErrorCode)) {
return;
@@ -466,7 +467,15 @@ ucase_totitle(const UCaseProps *csp, UChar32 c) {
return c;
}
-U_CAPI void U_EXPORT2
+static const UChar iDot[2] = { 0x69, 0x307 };
+static const UChar jDot[2] = { 0x6a, 0x307 };
+static const UChar iOgonekDot[3] = { 0x12f, 0x307 };
+static const UChar iDotGrave[3] = { 0x69, 0x307, 0x300 };
+static const UChar iDotAcute[3] = { 0x69, 0x307, 0x301 };
+static const UChar iDotTilde[3] = { 0x69, 0x307, 0x303 };
+
+
+U_CFUNC void U_EXPORT2
ucase_addCaseClosure(const UCaseProps *csp, UChar32 c, const USetAdder *sa) {
uint16_t props;
@@ -477,8 +486,6 @@ ucase_addCaseClosure(const UCaseProps *csp, UChar32 c, const USetAdder *sa) {
* and case folding option make the related characters behave specially.
* This code matches their closure behavior to their case folding behavior.
*/
- static const UChar
- iDot[2]= { 0x69, 0x307 };
switch(c) {
case 0x49:
@@ -608,7 +615,7 @@ strcmpMax(const UChar *s, int32_t length, const UChar *t, int32_t max) {
}
}
-U_CAPI UBool U_EXPORT2
+U_CFUNC UBool U_EXPORT2
ucase_addStringCaseClosure(const UCaseProps *csp, const UChar *s, int32_t length, const USetAdder *sa) {
const UChar *unfold, *p;
int32_t i, start, limit, result, unfoldRows, unfoldRowWidth, unfoldStringWidth;
@@ -798,17 +805,12 @@ ucase_isCaseSensitive(const UCaseProps *csp, UChar32 c) {
* zero or more case-ignorable characters.
*/
-enum {
- LOC_UNKNOWN,
- LOC_ROOT,
- LOC_TURKISH,
- LOC_LITHUANIAN
-};
-
#define is_a(c) ((c)=='a' || (c)=='A')
+#define is_d(c) ((c)=='d' || (c)=='D')
#define is_e(c) ((c)=='e' || (c)=='E')
#define is_i(c) ((c)=='i' || (c)=='I')
#define is_l(c) ((c)=='l' || (c)=='L')
+#define is_n(c) ((c)=='n' || (c)=='N')
#define is_r(c) ((c)=='r' || (c)=='R')
#define is_t(c) ((c)=='t' || (c)=='T')
#define is_u(c) ((c)=='u' || (c)=='U')
@@ -827,11 +829,11 @@ ucase_getCaseLocale(const char *locale, int32_t *locCache) {
int32_t result;
char c;
- if(locCache!=NULL && (result=*locCache)!=LOC_UNKNOWN) {
+ if(locCache!=NULL && (result=*locCache)!=UCASE_LOC_UNKNOWN) {
return result;
}
- result=LOC_ROOT;
+ result=UCASE_LOC_ROOT;
/*
* This function used to use uloc_getLanguage(), but the current code
@@ -852,7 +854,7 @@ ucase_getCaseLocale(const char *locale, int32_t *locCache) {
if(is_r(c)) {
c=*locale;
if(is_sep(c)) {
- result=LOC_TURKISH;
+ result=UCASE_LOC_TURKISH;
}
}
} else if(is_a(c)) {
@@ -864,7 +866,7 @@ ucase_getCaseLocale(const char *locale, int32_t *locCache) {
c=*locale;
}
if(is_sep(c)) {
- result=LOC_TURKISH;
+ result=UCASE_LOC_TURKISH;
}
}
} else if(is_l(c)) {
@@ -876,7 +878,19 @@ ucase_getCaseLocale(const char *locale, int32_t *locCache) {
if(is_t(c)) {
c=*locale;
if(is_sep(c)) {
- result=LOC_LITHUANIAN;
+ result=UCASE_LOC_LITHUANIAN;
+ }
+ }
+ } else if(is_n(c)) {
+ /* nl or nld? */
+ c=*locale++;
+ if(is_l(c)) {
+ c=*locale++;
+ if(is_d(c)) {
+ c=*locale;
+ }
+ if(is_sep(c)) {
+ result=UCASE_LOC_DUTCH;
}
}
}
@@ -1043,15 +1057,8 @@ U_CAPI int32_t U_EXPORT2
ucase_toFullLower(const UCaseProps *csp, UChar32 c,
UCaseContextIterator *iter, void *context,
const UChar **pString,
- const char *locale, int32_t *locCache) {
- static const UChar
- iDot[2]= { 0x69, 0x307 },
- jDot[2]= { 0x6a, 0x307 },
- iOgonekDot[3]= { 0x12f, 0x307 },
- iDotGrave[3]= { 0x69, 0x307, 0x300 },
- iDotAcute[3]= { 0x69, 0x307, 0x301 },
- iDotTilde[3]= { 0x69, 0x307, 0x303 };
-
+ const char *locale, int32_t *locCache)
+{
UChar32 result;
uint16_t props;
@@ -1078,7 +1085,7 @@ ucase_toFullLower(const UCaseProps *csp, UChar32 c,
* then test for characters that have unconditional mappings in SpecialCasing.txt,
* then get the UnicodeData.txt mappings.
*/
- if( loc==LOC_LITHUANIAN &&
+ if( loc==UCASE_LOC_LITHUANIAN &&
/* base characters, find accents above */
(((c==0x49 || c==0x4a || c==0x12e) &&
isFollowedByMoreAbove(csp, iter, context)) ||
@@ -1124,7 +1131,7 @@ ucase_toFullLower(const UCaseProps *csp, UChar32 c,
return 0; /* will not occur */
}
/* # Turkish and Azeri */
- } else if(loc==LOC_TURKISH && c==0x130) {
+ } else if(loc==UCASE_LOC_TURKISH && c==0x130) {
/*
# I and i-dotless; I-dot and i are case pairs in Turkish and Azeri
# The following rules handle those cases.
@@ -1133,7 +1140,7 @@ ucase_toFullLower(const UCaseProps *csp, UChar32 c,
0130; 0069; 0130; 0130; az # LATIN CAPITAL LETTER I WITH DOT ABOVE
*/
return 0x69;
- } else if(loc==LOC_TURKISH && c==0x307 && isPrecededBy_I(csp, iter, context)) {
+ } else if(loc==UCASE_LOC_TURKISH && c==0x307 && isPrecededBy_I(csp, iter, context)) {
/*
# When lowercasing, remove dot_above in the sequence I + dot_above, which will turn into i.
# This matches the behavior of the canonically equivalent I-dot_above
@@ -1142,7 +1149,7 @@ ucase_toFullLower(const UCaseProps *csp, UChar32 c,
0307; ; 0307; 0307; az After_I; # COMBINING DOT ABOVE
*/
return 0; /* remove the dot (continue without output) */
- } else if(loc==LOC_TURKISH && c==0x49 && !isFollowedByDotAbove(csp, iter, context)) {
+ } else if(loc==UCASE_LOC_TURKISH && c==0x49 && !isFollowedByDotAbove(csp, iter, context)) {
/*
# When lowercasing, unless an I is before a dot_above, it turns into a dotless i.
@@ -1219,7 +1226,7 @@ toUpperOrTitle(const UCaseProps *csp, UChar32 c,
/* use hardcoded conditions and mappings */
int32_t loc=ucase_getCaseLocale(locale, locCache);
- if(loc==LOC_TURKISH && c==0x69) {
+ if(loc==UCASE_LOC_TURKISH && c==0x69) {
/*
# Turkish and Azeri
@@ -1232,7 +1239,7 @@ toUpperOrTitle(const UCaseProps *csp, UChar32 c,
0069; 0069; 0130; 0130; az; # LATIN SMALL LETTER I
*/
return 0x130;
- } else if(loc==LOC_LITHUANIAN && c==0x307 && isPrecededBySoftDotted(csp, iter, context)) {
+ } else if(loc==UCASE_LOC_LITHUANIAN && c==0x307 && isPrecededBySoftDotted(csp, iter, context)) {
/*
# Lithuanian
@@ -1411,10 +1418,8 @@ ucase_fold(const UCaseProps *csp, UChar32 c, uint32_t options) {
U_CAPI int32_t U_EXPORT2
ucase_toFullFolding(const UCaseProps *csp, UChar32 c,
const UChar **pString,
- uint32_t options) {
- static const UChar
- iDot[2]= { 0x69, 0x307 };
-
+ uint32_t options)
+{
UChar32 result;
uint16_t props;
@@ -1488,6 +1493,7 @@ ucase_toFullFolding(const UCaseProps *csp, UChar32 c,
/* case mapping properties API ---------------------------------------------- */
/* get the UCaseProps singleton, or else its dummy, once and for all */
+#if !UCASE_HARDCODE_DATA
static const UCaseProps *
getCaseProps() {
/*
@@ -1511,6 +1517,7 @@ getCaseProps() {
return csp;
}
+#endif
/*
* In ICU 3.0, most Unicode properties were loaded from uprops.icu.
@@ -1539,7 +1546,11 @@ getCaseProps() {
* Other API implementations get the singleton themselves
* (with mutexing), store it in the service object, and report errors.
*/
+#if !UCASE_HARDCODE_DATA
#define GET_CASE_PROPS() (gCsp!=NULL ? gCsp : getCaseProps())
+#else
+#define GET_CASE_PROPS() &ucase_props_singleton
+#endif
/* public API (see uchar.h) */
diff --git a/icuSources/common/ucase.h b/icuSources/common/ucase.h
index e3e5be05..538adcef 100644
--- a/icuSources/common/ucase.h
+++ b/icuSources/common/ucase.h
@@ -1,7 +1,7 @@
/*
*******************************************************************************
*
-* Copyright (C) 2004-2006, International Business Machines
+* Copyright (C) 2004-2008, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
@@ -44,6 +44,9 @@ ucase_close(UCaseProps *csp);
U_CAPI const UCaseProps * U_EXPORT2
ucase_getSingleton(UErrorCode *pErrorCode);
+#define UCASE_HARDCODE_DATA 1
+
+#if !UCASE_HARDCODE_DATA
/**
* Get a singleton dummy object, one that works with no real data.
* This can be used when the real data is not available.
@@ -51,6 +54,7 @@ ucase_getSingleton(UErrorCode *pErrorCode);
*/
U_CAPI const UCaseProps * U_EXPORT2
ucase_getDummy(UErrorCode *pErrorCode);
+#endif
U_CAPI int32_t U_EXPORT2
@@ -58,7 +62,7 @@ ucase_swap(const UDataSwapper *ds,
const void *inData, int32_t length, void *outData,
UErrorCode *pErrorCode);
-U_CAPI void U_EXPORT2
+U_CFUNC void U_EXPORT2
ucase_addPropertyStarts(const UCaseProps *csp, const USetAdder *sa, UErrorCode *pErrorCode);
/**
@@ -69,6 +73,15 @@ ucase_addPropertyStarts(const UCaseProps *csp, const USetAdder *sa, UErrorCode *
U_CFUNC int32_t
ucase_getCaseLocale(const char *locale, int32_t *locCache);
+/* Casing locale types for ucase_getCaseLocale */
+enum {
+ UCASE_LOC_UNKNOWN,
+ UCASE_LOC_ROOT,
+ UCASE_LOC_TURKISH,
+ UCASE_LOC_LITHUANIAN,
+ UCASE_LOC_DUTCH
+};
+
/**
* Bit mask for getting just the options from a string compare options word
* that are relevant for case-insensitive string comparison.
@@ -108,7 +121,7 @@ ucase_fold(const UCaseProps *csp, UChar32 c, uint32_t options);
* - for sharp s include ss
* - for k include the Kelvin sign
*/
-U_CAPI void U_EXPORT2
+U_CFUNC void U_EXPORT2
ucase_addCaseClosure(const UCaseProps *csp, UChar32 c, const USetAdder *sa);
/**
@@ -123,7 +136,7 @@ ucase_addCaseClosure(const UCaseProps *csp, UChar32 c, const USetAdder *sa);
*
* @return TRUE if the string was found
*/
-U_CAPI UBool U_EXPORT2
+U_CFUNC UBool U_EXPORT2
ucase_addStringCaseClosure(const UCaseProps *csp, const UChar *s, int32_t length, const USetAdder *sa);
/** @return UCASE_NONE, UCASE_LOWER, UCASE_UPPER, UCASE_TITLE */
@@ -241,6 +254,20 @@ ucase_toFullFolding(const UCaseProps *csp, UChar32 c,
U_CFUNC int32_t U_EXPORT2
ucase_hasBinaryProperty(UChar32 c, UProperty which);
+
+U_CDECL_BEGIN
+
+/**
+ * @internal
+ */
+typedef int32_t U_CALLCONV
+UCaseMapFull(const UCaseProps *csp, UChar32 c,
+ UCaseContextIterator *iter, void *context,
+ const UChar **pString,
+ const char *locale, int32_t *locCache);
+
+U_CDECL_END
+
/* file definitions --------------------------------------------------------- */
#define UCASE_DATA_NAME "ucase"
diff --git a/icuSources/common/ucase_props_data.c b/icuSources/common/ucase_props_data.c
index 015269b1..81632846 100644
--- a/icuSources/common/ucase_props_data.c
+++ b/icuSources/common/ucase_props_data.c
@@ -1,200 +1,206 @@
/*
- * Copyright (C) 1999-2007, International Business Machines
+ * Copyright (C) 1999-2008, International Business Machines
* Corporation and others. All Rights Reserved.
*
* file name: ucase_props_data.c
*
- * machine-generated on: 2006-06-13
- * machine-generated on: 2007-02-08 U_DARWIN
+ * machine-generated on: 2008-04-04
+ * machine-generated on: 2008-07-16 U_DARWIN
*/
-static const UVersionInfo ucase_props_dataVersion={5,0,0,0};
+static const UVersionInfo ucase_props_dataVersion={5,1,0,0};
#ifndef U_DARWIN
-static const int32_t ucase_props_indexes[UCASE_IX_TOP]={0x10,0x466a,0x3980,0x4e3,0x172,0,0,0,0,0,0,0,0,0,0,3};
+static const int32_t ucase_props_indexes[UCASE_IX_TOP]={0x10,0x4b10,0x3df8,0x4fa,0x172,0,0,0,0,0,0,0,0,0,0,3};
#else /* U_DARWIN */
-static const int32_t ucase_props_indexes[UCASE_IX_TOP]={0x10,0x46ca,0x39e0,0x4e3,0x172,0,0,0,0,0,0,0,0,0,0,3};
+static const int32_t ucase_props_indexes[UCASE_IX_TOP]={0x10,0x4b70,0x3e58,0x4fa,0x172,0,0,0,0,0,0,0,0,0,0,3};
#endif /* U_DARWIN */
#ifndef U_DARWIN
-static const uint16_t ucase_props_trieIndex[7352]={
+static const uint16_t ucase_props_trieIndex[7924]={
#else /* U_DARWIN */
-static const uint16_t ucase_props_trieIndex[7400]={
+static const uint16_t ucase_props_trieIndex[7972]={
#endif /* U_DARWIN */
-0x238,0x240,0x248,0x250,0x258,0x260,0x268,0x270,0x278,0x27e,0x285,0x288,0x290,0x298,0x2a0,0x2a8,
-0x278,0x2b0,0x2b8,0x2c0,0x2c8,0x2d0,0x2d8,0x2e0,0x2e8,0x2ee,0x2f6,0x2fe,0x306,0x30e,0x316,0x31c,
-0x324,0x328,0x32c,0x278,0x334,0x278,0x33c,0x278,0x340,0x345,0x34a,0x352,0x359,0x361,0x369,0x36c,
-0x374,0x230,0x37c,0x384,0x230,0x230,0x389,0x391,0x396,0x39b,0x3a3,0x230,0x230,0x3aa,0x230,0x3b0,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x3b8,0x3b9,0x3c1,0x3c9,0x3d1,0x3b9,0x3d9,0x3c9,
-0x3b8,0x3b9,0x3e1,0x3e5,0x3b8,0x3b9,0x3ed,0x3c9,0x3d1,0x3f1,0x3f9,0x230,0x3fe,0x230,0x406,0x230,
-0x230,0x40a,0x412,0x230,0x230,0x3f1,0x419,0x3c9,0x230,0x230,0x421,0x230,0x230,0x230,0x427,0x230,
-0x230,0x42d,0x434,0x230,0x230,0x438,0x440,0x230,0x444,0x44b,0x230,0x452,0x45a,0x461,0x469,0x230,
-0x230,0x46e,0x475,0x230,0x230,0x47d,0x485,0x3ff,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x487,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x48f,0x48f,0x495,0x495,0x230,0x49a,0x4a2,0x230,
-0x4aa,0x230,0x4b2,0x230,0x230,0x407,0x230,0x230,0x230,0x4ba,0x230,0x230,0x230,0x230,0x230,0x230,
-0x4c1,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x4c9,0x4cc,0x4d4,0x4da,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x4e2,0x4e2,0x4e2,0x4ea,0x4e5,0x4f2,0x4fa,0x4fd,
-0x278,0x505,0x278,0x50d,0x510,0x278,0x518,0x51b,0x523,0x52b,0x533,0x53b,0x543,0x54b,0x553,0x55b,
-0x563,0x56a,0x230,0x572,0x57a,0x230,0x580,0x588,0x590,0x598,0x5a0,0x5a8,0x5b0,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x5b3,0x5b9,0x5bf,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x5c7,0x5cc,0x5d0,0x5d8,0x278,0x278,0x278,0x5e0,0x5e8,0x5f0,0x230,0x23e,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x3d0,0x5f6,0x230,0x230,0x5fd,0x230,0x230,0x4b3,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x3cc,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x605,0x60d,0x230,0x230,0x230,0x230,0x230,0x230,
-0x614,0x3b7,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x240,0x248,0x250,0x258,0x260,0x268,0x270,0x278,0x280,0x286,0x28d,0x290,0x298,0x2a0,0x2a8,0x2b0,
+0x280,0x2b8,0x2c0,0x2c8,0x2d0,0x2d8,0x2e0,0x2e8,0x2f0,0x2f6,0x2fe,0x306,0x30e,0x316,0x31e,0x324,
+0x32c,0x330,0x334,0x280,0x33c,0x280,0x344,0x280,0x280,0x34b,0x350,0x358,0x35f,0x367,0x36f,0x372,
+0x37a,0x238,0x382,0x38a,0x238,0x238,0x38f,0x397,0x39c,0x3a1,0x3a9,0x238,0x238,0x3b0,0x238,0x3b6,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x3be,0x3bf,0x3c7,0x3cf,0x3d3,0x3bf,0x3db,0x3e3,
+0x3be,0x3bf,0x3eb,0x3f0,0x3be,0x3bf,0x3f8,0x3e3,0x3d3,0x3fc,0x404,0x3e3,0x409,0x238,0x411,0x238,
+0x238,0x415,0x41d,0x3e3,0x238,0x3fc,0x424,0x3e3,0x238,0x238,0x3db,0x3e3,0x238,0x238,0x42a,0x238,
+0x238,0x430,0x437,0x238,0x238,0x43b,0x443,0x238,0x447,0x44e,0x238,0x455,0x45d,0x464,0x46c,0x238,
+0x238,0x471,0x479,0x481,0x489,0x491,0x499,0x40a,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x49b,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x4a3,0x4a3,0x3df,0x3df,0x238,0x4a9,0x4b1,0x238,
+0x4b9,0x238,0x4c1,0x238,0x238,0x412,0x238,0x238,0x238,0x4c9,0x238,0x238,0x238,0x238,0x238,0x238,
+0x4d0,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x4d8,0x4db,0x4e3,0x4e9,0x4f1,0x4f9,0x238,0x238,
+0x238,0x4fe,0x238,0x504,0x238,0x238,0x238,0x238,0x50c,0x50c,0x50c,0x514,0x50f,0x51c,0x524,0x52b,
+0x280,0x533,0x280,0x53b,0x53e,0x280,0x546,0x280,0x54e,0x556,0x55e,0x566,0x56e,0x576,0x57e,0x586,
+0x58e,0x595,0x238,0x59d,0x5a5,0x238,0x5ab,0x5b3,0x5bb,0x5c3,0x5cb,0x5d3,0x5db,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x5de,0x5e4,0x5ea,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x5f2,0x5f7,0x5fb,0x603,0x280,0x280,0x280,0x60b,0x613,0x61b,0x238,0x4be,0x238,0x238,0x238,0x623,
+0x238,0x4be,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x3d2,0x62b,0x238,0x238,0x632,0x238,0x238,0x4c2,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x63a,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x640,0x238,0x280,0x648,0x650,0x238,0x238,0x238,0x658,0x660,0x280,0x665,0x66d,0x238,0x238,0x238,
+0x675,0x3bd,0x238,0x238,0x238,0x238,0x67c,0x238,0x238,0x683,0x68a,0x238,0x238,0x238,0x238,0x238,
+0x238,0x690,0x698,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
#ifndef U_DARWIN
-0x71b,0x71e,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x726,0x230,0x230,0x230,0x230,0x230,
+0x7aa,0x7ad,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x7b5,0x238,0x238,0x238,0x238,0x238,
#else /* U_DARWIN */
-0x727,0x72a,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x732,0x230,0x230,0x230,0x230,0x230,
+0x7b6,0x7b9,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x7c1,0x238,0x238,0x238,0x238,0x238,
#endif /* U_DARWIN */
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
#ifdef U_DARWIN
-0x230,0x230,0x230,0x618,0x620,0x36b,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x628,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x238,0x238,0x238,0x69c,0x6a4,0x371,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x6ac,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
#endif /* U_DARWIN */
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
#ifndef U_DARWIN
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x61c,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x6a0,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
#else /* U_DARWIN */
-0x630,0x638,0x230,0x230,0x230,0x230,0x230,0x23a,0x230,0x640,0x648,0x64f,0x40a,0x230,0x230,0x657,
+0x6b4,0x6bc,0x6c0,0x238,0x238,0x238,0x238,0x242,0x248,0x6c8,0x6d0,0x6d7,0x415,0x238,0x238,0x6df,
#endif /* U_DARWIN */
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
#ifndef U_DARWIN
-0x624,0x62c,0x230,0x230,0x230,0x230,0x230,0x23a,0x230,0x634,0x63c,0x643,0x40a,0x230,0x230,0x64b,
-#endif /* not U_DARWIN */
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x6a8,0x6b0,0x6b4,0x238,0x238,0x238,0x238,0x242,0x248,0x6bc,0x6c4,0x6cb,0x415,0x238,0x238,0x6d3,
+#endif /* ! U_DARWIN */
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
#ifdef U_DARWIN
-0x65f,0x665,0x669,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x6e6,
#endif /* U_DARWIN */
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
#ifndef U_DARWIN
-0x653,0x659,0x65d,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-#endif /* not U_DARWIN */
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x6da,
+#else /* U_DARWIN */
+0x6ee,0x6f4,0x6f8,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+#endif /* U_DARWIN */
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+#ifndef U_DARWIN
+0x6e2,0x6e8,0x6ec,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+#endif /* ! U_DARWIN */
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
#ifndef U_DARWIN
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x665,0x669,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x671,0x679,0x67f,0x230,0x230,
-0x230,0x230,0x687,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x68f,0x697,0x69c,0x6a2,0x6aa,0x6b2,0x6ba,0x693,0x6c2,0x6ca,0x6d2,0x6d9,0x694,0x68f,0x697,0x692,
-0x6a2,0x695,0x690,0x6e1,0x693,0x6e9,0x6f1,0x6f9,0x700,0x6ec,0x6f4,0x6fc,0x703,0x6ef,0x70b,0x230,
-0x3d1,0x713,0x713,0x713,0x230,0x230,0x230,0x230,0x713,0x713,0x713,0x713,0x713,0x713,0x713,0x624,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x6f4,0x6f8,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x700,0x708,0x70e,0x238,0x238,
+0x238,0x238,0x716,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x71e,0x726,0x72b,0x731,0x739,0x741,0x749,0x722,0x751,0x759,0x761,0x768,0x723,0x71e,0x726,0x721,
+0x731,0x724,0x71f,0x770,0x722,0x778,0x780,0x788,0x78f,0x77b,0x783,0x78b,0x792,0x77e,0x79a,0x238,
+0x3d3,0x658,0x658,0x658,0x238,0x238,0x238,0x238,0x658,0x658,0x658,0x658,0x658,0x658,0x658,0x7a2,
#else /* U_DARWIN */
-0x671,0x675,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x67d,0x685,0x68b,0x230,0x230,
-0x230,0x230,0x693,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
-0x69b,0x6a3,0x6a8,0x6ae,0x6b6,0x6be,0x6c6,0x69f,0x6ce,0x6d6,0x6de,0x6e5,0x6a0,0x69b,0x6a3,0x69e,
-0x6ae,0x6a1,0x69c,0x6ed,0x69f,0x6f5,0x6fd,0x705,0x70c,0x6f8,0x700,0x708,0x70f,0x6fb,0x717,0x230,
-0x3d1,0x71f,0x71f,0x71f,0x230,0x230,0x230,0x230,0x71f,0x71f,0x71f,0x71f,0x71f,0x71f,0x71f,0x630,
+0x700,0x704,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x70c,0x714,0x71a,0x238,0x238,
+0x238,0x238,0x722,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
+0x72a,0x732,0x737,0x73d,0x745,0x74d,0x755,0x72e,0x75d,0x765,0x76d,0x774,0x72f,0x72a,0x732,0x72d,
+0x73d,0x730,0x72b,0x77c,0x72e,0x784,0x78c,0x794,0x79b,0x787,0x78f,0x797,0x79e,0x78a,0x7a6,0x238,
+0x3d3,0x658,0x658,0x658,0x238,0x238,0x238,0x238,0x658,0x658,0x658,0x658,0x658,0x658,0x658,0x7ae,
#endif /* U_DARWIN */
-0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,0x238,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0x40,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0x40,0,0,0,0,0,0,0x40,0,
0,0,0,0,0,0,0,0,0,0,0x40,0,0,0,0,0,
0,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0xe,0x5e,0x7e,0x806,0x806,0x806,0x806,
0x806,0x806,0x806,0xbe,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0,0,0,0x40,0,
@@ -206,28 +212,28 @@ static const uint16_t ucase_props_trieIndex[7400]={
0,0,0,0,0x40,0x1cd,0,0x40,0x40,0,1,0,0,0,0,0,
0x806,0x806,0x806,0x806,0x806,0x1fe,0x806,0x806,0x806,0x806,0x806,0x806,0x23e,0x25e,0x806,0x806,
0x806,0x806,0x806,0x806,0x806,0x806,0x806,0,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x27d,
-0xf805,0xf805,0xf805,0xf805,0xf805,0x2fd,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,
+0xf805,0xf805,0xf805,0xf805,0xf805,0x31d,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,
0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0x1e45,
0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,
0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,
-0x33e,0xffc5,0x46,0xffc5,0x46,0xffc5,0x35e,0xffd5,0x37e,0x3cd,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,
-1,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x41d,0x46,0xffc5,
+0x35e,0xffc5,0x46,0xffc5,0x46,0xffc5,0x37e,0xffd5,0x39e,0x3ed,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,
+1,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x43d,0x46,0xffc5,
0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,
-0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0xe1c6,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x49d,
+0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0xe1c6,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x4bd,
0x30c5,0x3486,0x46,0xffc5,0x46,0xffc5,0x3386,0x46,0xffc5,0x3346,0x3346,0x46,0xffc5,1,0x13c6,0x3286,
0x32c6,0x46,0xffc5,0x3346,0x33c6,0x1845,0x34c6,0x3446,0x46,0xffc5,0x28c5,1,0x34c6,0x3546,0x2085,0x3586,
0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x3686,0x46,0xffc5,0x3686,1,1,0x46,0xffc5,0x3686,0x46,
0xffc5,0x3646,0x3646,0x46,0xffc5,0x46,0xffc5,0x36c6,0x46,0xffc5,1,0,0x46,0xffc5,1,0xe05,
-0,0,0,0,0x4ce,0x4ff,0x53d,0x56e,0x59f,0x5dd,0x60e,0x63f,0x67d,0x46,0xffc5,0x46,
+0,0,0,0,0x4ee,0x51f,0x55d,0x58e,0x5bf,0x5fd,0x62e,0x65f,0x69d,0x46,0xffc5,0x46,
0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0xec45,0x46,0xffc5,
0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,
-0x6ad,0x72e,0x75f,0x79d,0x46,0xffc5,0xe7c6,0xf206,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,
+0x6cd,0x74e,0x77f,0x7bd,0x46,0xffc5,0xe7c6,0xf206,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,
0xdf86,1,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,
-0x46,0xffc5,0x46,0xffc5,1,1,1,1,1,1,0x7ce,0x46,0xffc5,0xd746,0x7ee,1,
+0x46,0xffc5,0x46,0xffc5,1,1,1,1,1,1,0x7ee,0x46,0xffc5,0xd746,0x80e,1,
1,0x46,0xffc5,0xcf46,0x1146,0x11c6,0x46,0xffc5,0x46,0xffd5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,
-1,1,1,0xcb85,0xcc85,1,0xccc5,0xccc5,1,0xcd85,1,0xcd45,1,1,1,1,
-0xccc5,1,1,0xcc45,1,1,1,1,0xcbd5,0xcb45,1,0x80d,1,1,1,0xcb45,
-1,1,0xcac5,1,1,0xca85,1,1,1,1,1,1,1,0x82d,1,1,
+0x82d,0x84d,1,0xcb85,0xcc85,1,0xccc5,0xccc5,1,0xcd85,1,0xcd45,1,1,1,1,
+0xccc5,1,1,0xcc45,1,1,1,1,0xcbd5,0xcb45,1,0x86d,1,1,1,0xcb45,
+1,0x88d,0xcac5,1,1,0xca85,1,1,1,1,1,1,1,0x8ad,1,1,
0xc985,1,1,0xc985,1,1,1,1,0xc985,0xeec5,0xc9c5,0xc9c5,0xee45,1,1,1,
1,1,0xc945,1,0,1,1,1,1,1,1,1,1,0x11,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
@@ -236,222 +242,254 @@ static const uint16_t ucase_props_trieIndex[7400]={
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
1,1,1,1,1,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x64,0x64,0x60,0x60,0x60,0x60,0x60,0x84c,0x64,0x60,0x64,0x60,0x64,0x60,0x60,0x60,
+0x64,0x64,0x60,0x60,0x60,0x60,0x60,0x8cc,0x64,0x60,0x64,0x60,0x64,0x60,0x60,0x60,
0x60,0x60,0x60,0x64,0x60,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,
0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x74,0x70,0x70,0x70,0x70,0x70,0x70,
-0x70,0x70,0x70,0x70,0x70,0x60,0x60,0x60,0x60,0x60,0x64,0x60,0x60,0x85d,0x60,0x70,
+0x70,0x70,0x70,0x70,0x70,0x60,0x60,0x60,0x60,0x60,0x64,0x60,0x60,0x8dd,0x60,0x70,
0x70,0x70,0x60,0x60,0x60,0x70,0x70,0x40,0x60,0x60,0x60,0x70,0x70,0x70,0x70,0x60,
0x70,0x70,0x70,0x60,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x60,0x60,0x60,0x60,0x60,
-0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0,0,0,0,0x40,0x40,0,0,
-0,0,1,0x2085,0x2085,0x2085,0,0,0,0,0,0,0x40,0x40,0x986,0,
-0x946,0x946,0x946,0,0x1006,0,0xfc6,0xfc6,0x8ad,0x806,0x97e,0x806,0x806,0x9be,0x806,0x806,
-0x9fe,0xa4e,0xa9e,0x806,0xade,0x806,0x806,0x806,0xb1e,0xb5e,0,0xb9e,0x806,0x806,0xbde,0x806,
-0x806,0xc1e,0x806,0x806,0xf685,0xf6c5,0xf6c5,0xf6c5,0xc5d,0xf805,0xd2d,0xf805,0xf805,0xd6d,0xf805,0xf805,
-0xdad,0xdfd,0xe4d,0xf805,0xe8d,0xf805,0xf805,0xf805,0xecd,0xf0d,0xf4d,0xf7d,0xf805,0xf805,0xfbd,0xf805,
-0xf805,0xffd,0xf805,0xf805,0xf005,0xf045,0xf045,0,0x103d,0x106d,2,2,2,0x10bd,0x10ed,1,
+0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x46,0xffc5,0x46,0xffc5,0x40,0x40,0x46,0xffc5,
+0,0,1,0x2085,0x2085,0x2085,0,0,0,0,0,0,0x40,0x40,0x986,0x40,
+0x946,0x946,0x946,0,0x1006,0,0xfc6,0xfc6,0x92d,0x806,0x9fe,0x806,0x806,0xa3e,0x806,0x806,
+0xa7e,0xace,0xb1e,0x806,0xb5e,0x806,0x806,0x806,0xb9e,0xbde,0,0xc1e,0x806,0x806,0xc5e,0x806,
+0x806,0xc9e,0x806,0x806,0xf685,0xf6c5,0xf6c5,0xf6c5,0xcdd,0xf805,0xdad,0xf805,0xf805,0xded,0xf805,0xf805,
+0xe2d,0xe7d,0xecd,0xf805,0xf0d,0xf805,0xf805,0xf805,0xf4d,0xf8d,0xfcd,0xffd,0xf805,0xf805,0x103d,0xf805,
+0xf805,0x107d,0xf805,0xf805,0xf005,0xf045,0xf045,0x206,0x10bd,0x10ed,2,2,2,0x113d,0x116d,0xfe05,
0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,
-0x111d,0x114d,0x1c5,0x11,0x117e,0x11cd,0,0x46,0xffc5,0xfe46,0x46,0xffc5,1,0xdf86,0xdf86,0xdf86,
+0x119d,0x11cd,0x1c5,0x11,0x11fe,0x124d,0,0x46,0xffc5,0xfe46,0x46,0xffc5,1,0xdf86,0xdf86,0xdf86,
0x1406,0x1406,0x1406,0x1406,0x1406,0x1406,0x1406,0x1406,0x1406,0x1406,0x1406,0x1406,0x1406,0x1406,0x1406,0x1406,
0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,
0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,
0xec05,0xec05,0xec05,0xec05,0xec05,0xec05,0xec15,0xec05,0xec15,0xec05,0xec05,0xec05,0xec05,0xec05,0xec05,0xec05,
-0x46,0xffc5,0,0x60,0x60,0x60,0x60,0,0x40,0x40,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,
+0x46,0xffc5,0,0x60,0x60,0x60,0x60,0x60,0x40,0x40,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,
0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,
0x3c6,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0xfc45,
0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,
-0x46,0xffc5,0x46,0xffc5,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,
-0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0,
-0,0x40,0,0,0,0,0,0,0,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0xc06,0xc06,0xc06,
+0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,
+0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0,0,0x40,0,0,0,0,0,0,
+0,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,
0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,
-0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0x11fd,0,0,0,0,
-0,0,0,0,0,0x70,0x60,0x60,0x60,0x60,0x70,0x60,0x60,0x60,0x70,0x70,
-0x60,0x60,0x60,0x60,0x60,0x60,0x70,0x70,0x70,0x70,0x70,0x70,0x60,0x60,0x70,0x60,
-0x60,0x70,0x70,0x60,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,
-0x70,0x70,0,0x70,0,0x70,0x70,0,0x60,0x70,0,0x70,0,0,0,0,
+0xf405,0xf405,0xf405,0x127d,0,0,0,0,0,0,0,0,0,0x70,0x60,0x60,
+0x60,0x60,0x70,0x60,0x60,0x60,0x70,0x70,0x60,0x60,0x60,0x60,0x60,0x60,0x70,0x70,
+0x70,0x70,0x70,0x70,0x60,0x60,0x70,0x60,0x60,0x70,0x70,0x60,0x70,0x70,0x70,0x70,
+0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0,0x70,0,0x70,0x70,0,
+0x60,0x70,0,0x70,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x40,0,0,0,
+0,0,0,0,0,0,0,0,0x40,0x40,0x40,0x40,0,0,0,0,
+0,0,0,0,0,0,0,0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
+0x70,0x70,0x70,0,0,0,0,0,0x40,0,0,0,0,0,0,0,
+0,0,0,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x60,0x60,0x70,0x70,0x60,
+0x60,0x60,0x60,0x60,0x70,0x60,0x60,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x70,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x40,0x40,0x60,0x60,0x60,0x60,0x70,
+0x60,0x40,0x40,0x60,0x60,0,0x70,0x60,0x60,0x70,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x40,
+0,0x70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x60,0x70,0x60,0x60,0x70,0x60,0x60,0x70,0x70,0x70,0x60,0x70,
+0x70,0x60,0x70,0x60,0x60,0x60,0x70,0x60,0x70,0x60,0x70,0x60,0x70,0x60,0x60,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x40,0,0,0,0,0,0,0,0,0,0,0,
-0x40,0x40,0x40,0x40,0,0,0,0,0,0,0,0,0,0,0,0,
-0x60,0x60,0x60,0x60,0x60,0x60,0,0,0,0,0,0,0,0,0,0,
-0x40,0,0,0,0,0,0,0,0,0,0,0x70,0x70,0x70,0x70,0x70,
-0x70,0x70,0x70,0x60,0x60,0x70,0x70,0x60,0x60,0x60,0x60,0x60,0x70,0x60,0x60,0,
+0,0,0,0,0,0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
+0x40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x70,0x60,0x40,0x40,0,0,
+0,0,0x40,0,0,0,0,0,0,0x40,0x40,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0x60,0x60,0x60,0x60,0x60,0x60,
-0x60,0x40,0x40,0x60,0x60,0x60,0x60,0x70,0x60,0x40,0x40,0x60,0x60,0,0x70,0x60,
-0x60,0x70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0x40,0,0x70,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x60,0x70,0x60,0x60,
-0x70,0x60,0x60,0x70,0x70,0x70,0x60,0x70,0x70,0x60,0x70,0x60,0x60,0x60,0x70,0x60,
-0x70,0x60,0x70,0x60,0x70,0x60,0x60,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x70,0,0,0,0,0x40,0x40,0x40,
+0x40,0x40,0x40,0x40,0x40,0,0,0,0,0x70,0,0,0,0x60,0x70,0x60,
+0x60,0,0,0,0,0,0,0,0,0,0,0,0,0,0x40,0x40,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0x40,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0x40,0x40,0x40,
+0x40,0,0,0,0,0,0,0,0,0x70,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x40,0x40,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0x60,0x60,0x60,0x60,0x60,
-0x60,0x60,0x70,0x60,0x40,0x40,0,0,0,0,0x40,0,0,0,0,0,
-0,0x40,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x70,0,0,0,0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0,0,0,
-0,0x70,0,0,0,0x60,0x70,0x60,0x60,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0x40,0x40,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0x40,0x40,0,
+0,0,0,0x40,0x40,0,0,0x40,0x40,0x70,0,0,0,0x40,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0x40,0,0,0,0,0,0,0,0,0,0,
+0x40,0x40,0,0,0,0x40,0,0,0,0,0,0,0,0,0,0,
+0,0x40,0x40,0x40,0x40,0x40,0,0x40,0x40,0,0,0,0,0x70,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0x40,0x40,0x40,0x40,0,0,0,0,0,0,0,
-0,0x70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0x40,0x40,0,0,0,0,0x40,0x40,0,0,0x40,
-0x40,0x70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x40,0x40,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0x40,0x40,0x40,0x40,0x40,0,0x40,0x40,0,0,0,
-0,0x70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x70,0,0,0x40,0,0x40,0x40,0x40,0,0,0,0,0,0,0,0,
-0,0x70,0,0,0,0,0,0,0,0,0x40,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x70,0,0,0x40,
+0,0x40,0x40,0x40,0x40,0,0,0,0,0,0,0,0,0x70,0,0,
+0,0,0,0,0,0,0x40,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x40,0,0,0,0,0,0,0,
-0,0,0,0,0,0x70,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0x40,0x40,0x40,0,0,0,0,0,0x40,0x40,
-0x40,0,0x40,0x40,0x40,0x70,0,0,0,0,0,0,0,0x70,0x70,0,
-0,0,0,0,0,0,0,0,0,0,0x40,0,0,0,0,0,
-0x40,0x70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0x40,0x40,0x40,0,0,0,0,0,0,0,0,
+0,0,0,0,0x40,0,0,0,0,0,0,0,0,0,0,0,
0,0x70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0x70,0,0,0,0,0,0,0,0x40,0x40,
-0x40,0,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0x40,0,0,0x40,0x40,0x40,0x40,0x70,0x70,0x70,0,
-0,0,0,0,0,0,0x40,0x40,0x70,0x70,0x70,0x70,0x40,0x40,0x40,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0x40,0,0,0x40,0x40,0x40,0x40,0x70,0x70,0,0x40,0x40,0,0,0,
-0,0,0,0,0,0,0x40,0,0x70,0x70,0x70,0x70,0x40,0x40,0,0,
+0,0,0x40,0x40,0x40,0,0,0,0,0,0x40,0x40,0x40,0,0x40,0x40,
+0x40,0x70,0,0,0,0,0,0,0,0x70,0x70,0,0,0,0,0,
+0,0,0,0,0,0,0x40,0,0,0,0,0,0x40,0x70,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x70,0x70,0,0,0,0,0,0,
+0,0,0x70,0,0,0,0,0,0,0,0x40,0x40,0x40,0,0x40,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0x70,0,0x70,0,0x70,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0x70,0x70,0x40,0x70,0x40,0x40,0x40,
-0x40,0x40,0x70,0x70,0x70,0x70,0x40,0,0x70,0x40,0x60,0x60,0x70,0,0x60,0x60,
-0,0,0,0,0,0,0,0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x40,0,0,0,0,0,0,0,0,0,0x70,0,0,0,0,0,
+0,0x40,0,0,0x40,0x40,0x40,0x40,0x70,0x70,0x70,0,0,0,0,0,
+0,0,0x40,0x40,0x70,0x70,0x70,0x70,0x40,0x40,0x40,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0x40,0,0,
+0x40,0x40,0x40,0x40,0x70,0x70,0,0x40,0x40,0,0,0,0,0,0,0,
+0,0,0x40,0,0x70,0x70,0x70,0x70,0x40,0x40,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0x40,0x40,0x40,0x40,0,0x40,0,0,0,0x40,0x70,
+0,0,0,0,0x70,0x70,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0x70,0,0x70,
0,0x70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0x70,0x70,0x40,0x70,0x40,0x40,0x40,0x40,0x40,0x70,0x70,
+0x70,0x70,0x40,0,0x70,0x40,0x60,0x60,0x70,0,0x60,0x60,0,0,0,0,
+0,0,0,0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0,0x40,0x40,0x40,
+0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
+0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0,0,0,
+0,0,0,0,0,0,0x70,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0x40,0x40,0x40,0x40,0,0x40,0x40,0x40,0x40,0x40,0x70,0,0x70,0x70,0,
+0,0x40,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0x40,0x40,0,0,
-0,0,0,0,0x127e,0x129e,0x12be,0x12de,0x12fe,0x131e,0x133e,0x135e,0x137e,0x139e,0x13be,0x13de,
-0x13fe,0x141e,0x143e,0x145e,0x147e,0x149e,0x14be,0x14de,0x14fe,0x151e,0x153e,0x155e,0x157e,0x159e,0x15be,0x15de,
-0x15fe,0x161e,0x163e,0x165e,0x167e,0x169e,0x16be,0x16de,0x16fe,0x171e,0,0,0,0,0,0,
+0,0,0x40,0x40,0x40,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0x40,0x40,0x40,0x40,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0x40,0,0,0x40,0x40,0,0,0,0,0,
+0,0x70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x12fe,0x131e,0x133e,0x135e,0x137e,0x139e,0x13be,0x13de,0x13fe,0x141e,0x143e,0x145e,
+0x147e,0x149e,0x14be,0x14de,0x14fe,0x151e,0x153e,0x155e,0x157e,0x159e,0x15be,0x15de,0x15fe,0x161e,0x163e,0x165e,
+0x167e,0x169e,0x16be,0x16de,0x16fe,0x171e,0x173e,0x175e,0x177e,0x179e,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0x60,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x40,0x40,
0x70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0x40,0x40,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x40,0x40,0,0x40,
-0x40,0x40,0x40,0x40,0x40,0x40,0,0,0,0,0,0,0,0,0x40,0,
-0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x70,0x40,0,0,0,0x40,
-0,0,0,0,0,0x60,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0x40,0x40,0x40,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0x40,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x40,0x40,0x40,0,0,0,0,0x40,
-0x40,0,0,0,0,0,0,0,0,0,0x40,0,0,0,0,0,
-0,0x70,0x60,0x70,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0x60,0x70,0,0,0,
-0,0,0,0,0x40,0x40,0x40,0x40,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x70,0,0x40,0x40,0x40,0x40,0x40,0,0x40,0,0,0,
-0,0,0x40,0,0x30,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0x60,0x70,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0,0,0,0,
-0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,
+0,0,0,0,0,0,0,0,0x40,0x40,0,0x40,0x40,0x40,0x40,0x40,
+0x40,0x40,0,0,0,0,0,0,0,0,0x40,0,0,0x40,0x40,0x40,
+0x40,0x40,0x40,0x40,0x40,0x40,0x70,0x40,0,0,0,0x40,0,0,0,0,
+0,0x60,0,0,0,0,0,0,0,0,0,0,0,0,0,0x40,
+0x40,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0x40,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x40,0x40,0x40,0,0,0,0,0x40,0x40,0,0,0,
+0,0,0,0,0,0,0x40,0,0,0,0,0,0,0x70,0x60,0x70,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0x60,0x70,0,0,0,0,0,0,0,
+0x40,0x40,0x40,0x40,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x70,0,0x40,0x40,0x40,0x40,0x40,0,0x40,0,0,0,0,0,0x40,0,
+0x30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x60,
+0x70,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0,0,0,0,0,0,0,0,
+0,0,0,0,0x40,0x40,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0x40,0x40,0x40,0x40,0,0,0x40,0x40,0x30,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0,0,0x40,0x70,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x40,0x40,0x40,0x40,0x40,0x40,0,0,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,0x11,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,0x173d,1,1,1,1,1,1,0x11,1,1,1,
-0x11,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,0x60,0x60,0x70,0x60,0x60,0x60,0x60,0x60,
-0x60,0x60,0x70,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0x60,0x70,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,
-0x46,0xffd5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,
-0x46,0xffc5,0x46,0xffc5,0x175e,0x179d,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,
-0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,
-0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x17dd,0x185d,0x18dd,0x195d,0x19dd,0x1a5d,0,0,0,0,
-0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffd5,0x46,0xffc5,0x46,0xffc5,
+1,1,0x11,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,0x17bd,1,1,1,0x17dd,1,1,
+1,1,1,1,0x11,1,1,1,0x11,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+0x60,0x60,0x70,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x70,0x60,0x60,0x70,0x70,0x70,
+0x70,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
+0x60,0x60,0x60,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0x60,0x70,0x46,0xffc5,0x46,0xffc5,
+0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffd5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,
+0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x17fe,0x183d,0x46,0xffc5,
0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,
-0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0,0,0,0,0,0,0x205,0x205,0x205,0x205,
-0x205,0x205,0x205,0x205,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0x205,0x205,0x205,0x205,
-0x205,0x205,0,0,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0,0,0x205,0x205,0x205,0x205,
-0x205,0x205,0x205,0x205,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0x205,0x205,0x205,0x205,
-0x205,0x205,0x205,0x205,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0x205,0x205,0x205,0x205,
-0x205,0x205,0,0,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0,0,0x1a8d,0x205,0x1b0d,0x205,
-0x1bbd,0x205,0x1c6d,0x205,0,0xfe06,0,0xfe06,0,0xfe06,0,0xfe06,0x205,0x205,0x205,0x205,
-0x205,0x205,0x205,0x205,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0x1285,0x1285,0x1585,0x1585,
-0x1585,0x1585,0x1905,0x1905,0x2005,0x2005,0x1c05,0x1c05,0x1f85,0x1f85,0,0,0x1d1d,0x1d8d,0x1dfd,0x1e6d,
-0x1edd,0x1f4d,0x1fbd,0x202d,0x209f,0x210f,0x217f,0x21ef,0x225f,0x22cf,0x233f,0x23af,0x241d,0x248d,0x24fd,0x256d,
-0x25dd,0x264d,0x26bd,0x272d,0x279f,0x280f,0x287f,0x28ef,0x295f,0x29cf,0x2a3f,0x2aaf,0x2b1d,0x2b8d,0x2bfd,0x2c6d,
-0x2cdd,0x2d4d,0x2dbd,0x2e2d,0x2e9f,0x2f0f,0x2f7f,0x2fef,0x305f,0x30cf,0x313f,0x31af,0x205,0x205,0x321d,0x329d,
-0x330d,0,0x338d,0x340d,0xfe06,0xfe06,0xed86,0xed86,0x34bf,0x40,0x352d,0x40,0x40,0x40,0x357d,0x35fd,
-0x366d,0,0x36ed,0x376d,0xea86,0xea86,0xea86,0xea86,0x381f,0x40,0x40,0x40,0x205,0x205,0x388d,0x393d,
-0,0,0x3a0d,0x3a8d,0xfe06,0xfe06,0xe706,0xe706,0,0x40,0x40,0x40,0x205,0x205,0x3b3d,0x3bed,
-0x3cbd,0x1c5,0x3d3d,0x3dbd,0xfe06,0xfe06,0xe406,0xe406,0xfe46,0x40,0x40,0x40,0,0,0x3e6d,0x3eed,
-0x3f5d,0,0x3fdd,0x405d,0xe006,0xe006,0xe086,0xe086,0x410f,0x40,0x40,0,0,0,0,0,
-0,0,0,0,0,0,0,0x40,0x40,0x40,0x40,0x40,0,0,0,0,
-0,0,0,0,0,0x40,0,0,0,0,0,0,0,0,0,0x40,
-0,0,0x40,0x40,0x40,0x40,0x40,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x40,0x40,0x40,0x40,0,0,0,0,
-0,0,0x40,0x40,0x40,0x40,0x40,0x40,0,0x11,0,0,0,0,0,0,
-0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x60,0x60,0x70,0x70,0x60,0x60,0x60,0x60,0x70,0x70,0x70,0x60,0x60,0x40,0x40,0x40,
-0x40,0x60,0x40,0x40,0x40,0x70,0x70,0x60,0x70,0x60,0x70,0x70,0x70,0x70,0x70,0x70,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,2,0,0,0,0,2,0,0,1,2,2,2,1,1,
-2,2,2,1,0,2,0,0,0,2,2,2,2,2,0,0,
-0,0,0,0,2,0,0x417e,0,2,0,0x41be,0x41fe,2,2,0,1,
-2,2,0x706,2,1,0,0,0,0,1,0,0,1,1,2,2,
-0,0,0,0,0,2,1,1,0x11,0x11,0,0,0,0,0xf905,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x406,0x406,0x406,0x406,0x406,0x406,0x406,0x406,0x406,0x406,0x406,0x406,0x406,0x406,0x406,0x406,
-0xfc05,0xfc05,0xfc05,0xfc05,0xfc05,0xfc05,0xfc05,0xfc05,0xfc05,0xfc05,0xfc05,0xfc05,0xfc05,0xfc05,0xfc05,0xfc05,
-0,0,0,0x46,0xffc5,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0x686,0x686,0x686,0x686,0x686,0x686,0x686,0x686,0x686,0x686,0x686,0x686,0x686,0x686,
-0x686,0x686,0x686,0x686,0xf985,0xf985,0xf985,0xf985,0xf985,0xf985,0xf985,0xf985,0xf985,0xf985,0xf985,0xf985,
-0xf985,0xf985,0xf985,0xf985,0xf985,0xf985,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0xc06,0xc06,0xc06,0xc06,
+0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x187d,0x18fd,
+0x197d,0x19fd,0x1a7d,0x1afd,1,1,0x1b2e,1,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,
+0x46,0xffc5,0x46,0xffd5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,
+0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x205,0x205,0x205,0x205,0x205,0x205,0x205,0x205,
+0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0x205,0x205,0x205,0x205,0x205,0x205,0,0,
+0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0,0,0x205,0x205,0x205,0x205,0x205,0x205,0x205,0x205,
+0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0x205,0x205,0x205,0x205,0x205,0x205,0x205,0x205,
+0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0x205,0x205,0x205,0x205,0x205,0x205,0,0,
+0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0,0,0x1b7d,0x205,0x1bfd,0x205,0x1cad,0x205,0x1d5d,0x205,
+0,0xfe06,0,0xfe06,0,0xfe06,0,0xfe06,0x205,0x205,0x205,0x205,0x205,0x205,0x205,0x205,
+0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0x1285,0x1285,0x1585,0x1585,0x1585,0x1585,0x1905,0x1905,
+0x2005,0x2005,0x1c05,0x1c05,0x1f85,0x1f85,0,0,0x1e0d,0x1e7d,0x1eed,0x1f5d,0x1fcd,0x203d,0x20ad,0x211d,
+0x218f,0x21ff,0x226f,0x22df,0x234f,0x23bf,0x242f,0x249f,0x250d,0x257d,0x25ed,0x265d,0x26cd,0x273d,0x27ad,0x281d,
+0x288f,0x28ff,0x296f,0x29df,0x2a4f,0x2abf,0x2b2f,0x2b9f,0x2c0d,0x2c7d,0x2ced,0x2d5d,0x2dcd,0x2e3d,0x2ead,0x2f1d,
+0x2f8f,0x2fff,0x306f,0x30df,0x314f,0x31bf,0x322f,0x329f,0x205,0x205,0x330d,0x338d,0x33fd,0,0x347d,0x34fd,
+0xfe06,0xfe06,0xed86,0xed86,0x35af,0x40,0x361d,0x40,0x40,0x40,0x366d,0x36ed,0x375d,0,0x37dd,0x385d,
+0xea86,0xea86,0xea86,0xea86,0x390f,0x40,0x40,0x40,0x205,0x205,0x397d,0x3a2d,0,0,0x3afd,0x3b7d,
+0xfe06,0xfe06,0xe706,0xe706,0,0x40,0x40,0x40,0x205,0x205,0x3c2d,0x3cdd,0x3dad,0x1c5,0x3e2d,0x3ead,
+0xfe06,0xfe06,0xe406,0xe406,0xfe46,0x40,0x40,0x40,0,0,0x3f5d,0x3fdd,0x404d,0,0x40cd,0x414d,
+0xe006,0xe006,0xe086,0xe086,0x41ff,0x40,0x40,0,0,0,0,0,0,0,0,0,
+0,0,0,0x40,0x40,0x40,0x40,0x40,0,0,0,0,0,0,0,0,
+0x40,0x40,0,0,0,0,0,0,0x40,0,0,0x40,0,0,0x40,0x40,
+0x40,0x40,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x40,0x40,0x40,0x40,0x40,0,0,0,0,0,0x40,0x40,
+0x40,0x40,0x40,0x40,0,0x11,0,0,0,0,0,0,0,0,0,0,
+0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x60,0x60,0x70,0x70,
+0x60,0x60,0x60,0x60,0x70,0x70,0x70,0x60,0x60,0x40,0x40,0x40,0x40,0x60,0x40,0x40,
+0x40,0x70,0x70,0x60,0x70,0x60,0x70,0x70,0x70,0x70,0x70,0x70,0x60,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,
+0,0,0,2,0,0,1,2,2,2,1,1,2,2,2,1,
+0,2,0,0,0,2,2,2,2,2,0,0,0,0,0,0,
+2,0,0x426e,0,2,0,0x42ae,0x42ee,2,2,0,1,2,2,0x706,2,
+1,0,0,0,0,1,0,0,1,1,2,2,0,0,0,0,
+0,2,1,1,0x11,0x11,0,0,0,0,0xf905,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x406,0x406,0x406,0x406,
+0x406,0x406,0x406,0x406,0x406,0x406,0x406,0x406,0x406,0x406,0x406,0x406,0xfc05,0xfc05,0xfc05,0xfc05,
+0xfc05,0xfc05,0xfc05,0xfc05,0xfc05,0xfc05,0xfc05,0xfc05,0xfc05,0xfc05,0xfc05,0xfc05,0,0,0,0x46,
+0xffc5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x686,0x686,
+0x686,0x686,0x686,0x686,0x686,0x686,0x686,0x686,0x686,0x686,0x686,0x686,0x686,0x686,0x686,0x686,
+0xf985,0xf985,0xf985,0xf985,0xf985,0xf985,0xf985,0xf985,0xf985,0xf985,0xf985,0xf985,0xf985,0xf985,0xf985,0xf985,
+0xf985,0xf985,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,
0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,
-0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0,
+0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0,0xf405,0xf405,0xf405,0xf405,
0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,
-0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0,
-0x46,0xffc5,0x423e,0x425e,0x427e,0x429d,0x42bd,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0,0,0,
-0,0,0,0,1,0x46,0xffc5,1,0,0,0,0,0,0,0,0,
-0x46,0xffc5,0x46,0xffc5,1,0,0,0,0,0,0,0,0,0,0,0,
+0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0,0x46,0xffc5,0x432e,0x434e,
+0x436e,0x438d,0x43ad,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x43ce,0x43ee,0x440e,0,1,0x46,0xffc5,
+1,0x46,0xffc5,1,1,1,1,1,0x11,1,0,0,0x46,0xffc5,0x46,0xffc5,
+1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x442d,0x444d,0x446d,0x448d,
+0x44ad,0x44cd,0x44ed,0x450d,0x452d,0x454d,0x456d,0x458d,0x45ad,0x45cd,0x45ed,0x460d,0x462d,0x464d,0x466d,0x468d,
+0x46ad,0x46cd,0x46ed,0x470d,0x472d,0x474d,0x476d,0x478d,0x47ad,0x47cd,0x47ed,0x480d,0x482d,0x484d,0x486d,0x488d,
+0x48ad,0x48cd,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x60,0x60,0x60,0x60,
+0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
+0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0,0,0,0,
+0,0,0,0,0,0,0x70,0x70,0x70,0x70,0x70,0x70,0,0x40,0x40,0x40,
+0x40,0x40,0,0,0,0,0,0x40,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0x70,0x70,0x40,0x40,0x40,0x40,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0x40,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x40,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x42dd,0x42fd,0x431d,0x433d,0x435d,0x437d,0x439d,0x43bd,0x43dd,0x43fd,0x441d,0x443d,0x445d,0x447d,0x449d,0x44bd,
-0x44dd,0x44fd,0x451d,0x453d,0x455d,0x457d,0x459d,0x45bd,0x45dd,0x45fd,0x461d,0x463d,0x465d,0x467d,0x469d,0x46bd,
-0x46dd,0x46fd,0x471d,0x473d,0x475d,0x477d,0,0,0,0,0,0,0,0,0,0,
+0,0,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0,0x60,
+0x40,0x40,0x40,0,0,0,0,0,0,0,0,0,0x60,0x60,0,0x40,
+0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,
+0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0,0,0,0,0,0,0,0,
+0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
+0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
+0x40,0x40,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,
+1,1,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,
+0x46,0xffc5,0x46,0xffc5,1,1,1,1,1,1,1,1,1,0x46,0xffc5,0x46,
+0xffc5,0x48ee,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x40,0x40,0x40,0x46,
+0xffc5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0x40,0,0,0,0x70,0,0,0,0,0x40,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0x70,0x70,0x70,0x70,0x70,0x70,0,0x40,0x40,0x40,0x40,0x40,0,0,
-0,0,0,0x40,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0x70,0x70,0x40,
-0x40,0x40,0x40,0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0,
-0,0,0,0,0x40,0x40,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x70,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0x70,0,0,0,0,0x40,0,0,0,0,
+0,0,0x40,0x40,0x40,0x40,0x40,0x70,0x70,0x70,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x40,
+0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0,0x30,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0x40,0x40,0x40,0x40,0x40,0x40,0,
+0,0x40,0x40,0,0,0x40,0x40,0,0,0,0,0,0,0,0,0,
+0,0,0,0x40,0,0,0,0,0,0,0,0,0x40,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
#ifdef U_DARWIN
0x40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x40,
0,0,0,0,0x40,0,0,0,0,0x40,0x70,0x70,0x70,0x70,0x70,0x70,
0x70,0x70,0x70,0x70,0x70,0x70,0x40,0,0,0x40,0,0,0,0,0,0x70,
#endif /* U_DARWIN */
-0x479d,0x481d,0x489d,0x491d,0x49cd,0x4a7d,0x4b1d,0,0,0,0,0,0,0,0,0,
-0,0,0,0x4bbd,0x4c3d,0x4cbd,0x4d3d,0x4dbd,0,0,0,0,0,0,0x70,0,
+0x490d,0x498d,0x4a0d,0x4a8d,0x4b3d,0x4bed,0x4c8d,0,0,0,0,0,0,0,0,0,
+0,0,0,0x4d2d,0x4dad,0x4e2d,0x4ead,0x4f2d,0,0,0,0,0,0,0x70,0,
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
+0,0,0,0x40,0,0,0,0,0,0,0,0,0,0,0,0,
+0x60,0x60,0x60,0x60,0x60,0x60,0x60,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x60,0x60,0x60,0x60,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0x40,0,0,0x40,0,0,0,0,0,0,0,0,0,0,
0,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,
0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0,0,0,0x40,0,
0x40,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,
@@ -459,151 +497,154 @@ static const uint16_t ucase_props_trieIndex[7400]={
0,0,0,0,0,0,0,0,0,0,0,0,0x40,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x40,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0x40,0x40,0x40,0,0,0,0,0xa06,0xa06,0xa06,0xa06,
+0,0,0,0,0,0x40,0x40,0x40,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0x70,0,0,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,
0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,
-0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xf605,0xf605,0xf605,0xf605,
+0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xf605,0xf605,0xf605,0xf605,0xf605,0xf605,0xf605,0xf605,
0xf605,0xf605,0xf605,0xf605,0xf605,0xf605,0xf605,0xf605,0xf605,0xf605,0xf605,0xf605,0xf605,0xf605,0xf605,0xf605,
-0xf605,0xf605,0xf605,0xf605,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0x40,0x40,0x40,0,0x40,0x40,0,0,0,0,0,
-0x40,0x70,0x40,0x60,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x60,0x70,0x70,0,
-0,0,0,0x70,0,0,0,0,0,0x30,0x30,0x70,0x70,0x70,0,0,
-0,0x30,0x30,0x30,0x30,0x30,0x30,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x70,
-0x70,0x70,0x70,0x70,0x70,0x70,0x70,0,0,0x60,0x60,0x60,0x60,0x60,0x70,0x70,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0x60,0x60,0x60,0x60,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x60,0x60,
-0x60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0x40,0x40,0x40,0,0x40,0x40,0,0,0,0,0,0x40,0x70,0x40,0x60,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x60,0x70,0x70,0,0,0,0,0x70,
+0,0,0,0,0,0x30,0x30,0x70,0x70,0x70,0,0,0,0x30,0x30,0x30,
+0x30,0x30,0x30,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x70,0x70,0x70,0x70,0x70,
+0x70,0x70,0x70,0,0,0x60,0x60,0x60,0x60,0x60,0x70,0x70,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0x60,0x60,0x60,0x60,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0x60,0x60,0x60,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+2,2,1,1,1,1,1,1,1,1,0x11,0x11,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,
+1,0,0x11,0x11,1,1,1,1,1,1,1,1,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,1,1,1,1,1,1,1,1,0x11,0x11,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,
-1,1,1,1,1,0,0x11,0x11,1,1,1,1,1,1,1,1,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,
-1,1,0x11,0x11,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,2,0,2,2,0,0,2,0,0,2,2,0,
-0,2,2,2,2,0,2,2,2,2,2,2,2,2,1,1,
-1,1,0,1,0,1,0x11,0x11,1,1,1,1,0,1,1,1,
-1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,1,1,1,1,2,2,0,2,
-2,2,2,0,0,2,2,2,2,2,2,2,2,0,2,2,
+2,0,2,2,0,0,2,0,0,2,2,0,0,2,2,2,
+2,0,2,2,2,2,2,2,2,2,1,1,1,1,0,1,
+0,1,0x11,0x11,1,1,1,1,0,1,1,1,1,1,1,1,
+1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,
+2,2,2,2,1,1,1,1,2,2,0,2,2,2,2,0,
+0,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,
+2,0,1,1,1,1,1,1,1,1,0x11,0x11,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,2,2,0,2,
+2,2,2,0,2,2,2,2,2,0,2,0,0,0,2,2,
2,2,2,2,2,0,1,1,1,1,1,1,1,1,0x11,0x11,
+1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-2,2,0,2,2,2,2,0,2,2,2,2,2,0,2,0,
-0,0,2,2,2,2,2,2,2,0,1,1,1,1,1,1,
-1,1,0x11,0x11,1,1,1,1,1,1,1,1,1,1,1,1,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,1,1,1,1,1,1,0,0,2,2,2,2,
+1,1,1,1,1,1,0,0,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,0,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,
-1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,
+2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,
+1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,0,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,0,
-1,1,1,1,1,1,2,1,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x40,0x40,0x40,0x40,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0,0x820,0x840,0,
+1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,
+2,2,2,2,2,2,2,2,1,1,1,0,1,1,1,1,
+1,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
+0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x820,0x840,0x860,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x860,0x880,0,0,
-0,0,0,0,0,0,0,0,0x8a0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x880,0x8a0,0,0,0,0,0,0,
+0,0,0,0,0x8c0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0
+0,0,0,0
};
-static const uint16_t ucase_props_exceptions[1251]={
+static const uint16_t ucase_props_exceptions[1274]={
0xc041,0x69,2,0x130,0x131,0x4001,0x6a,0x41,0x6b,1,0x212a,0x41,0x73,1,0x17f,0x5044,
0x49,2,0x130,0x131,0x44,0x4b,1,0x212a,0x44,0x53,1,0x17f,6,0x3bc,0x39c,0x41,
-0xe5,1,0x212b,0x4001,0xec,0x4001,0xed,0x80,0x2220,0x73,0x73,0x53,0x53,0x53,0x73,0x44,
-0xc5,1,0x212b,0x4001,0x129,0x4001,0x12f,0xc041,0x69,2,0x131,0x49,0x44,0x49,2,0x69,
-0x130,0x80,0x2220,0x2bc,0x6e,0x2bc,0x4e,0x2bc,0x4e,6,0x73,0x53,9,0x1c6,0x1c5,0xd,
-0x1c6,0x1c4,0x1c5,0xc,0x1c4,0x1c5,9,0x1c9,0x1c8,0xd,0x1c9,0x1c7,0x1c8,0xc,0x1c7,0x1c8,
-9,0x1cc,0x1cb,0xd,0x1cc,0x1ca,0x1cb,0xc,0x1ca,0x1cb,0x80,0x2220,0x6a,0x30c,0x4a,0x30c,
-0x4a,0x30c,9,0x1f3,0x1f2,0xd,0x1f3,0x1f1,0x1f2,0xc,0x1f1,0x1f2,1,0x2c65,1,0x2c66,
-4,0x2c62,4,0x2c64,0x6000,0x3046,0x3b9,0x399,1,0x1fbe,0xc0,1,0x3330,0x3b9,0x308,0x301,
-0x399,0x308,0x301,0x399,0x308,0x301,0x1fd3,0x41,0x3b2,1,0x3d0,0x41,0x3b5,1,0x3f5,0x41,
-0x3b8,2,0x3d1,0x3f4,0x41,0x3b9,2,0x345,0x1fbe,0x41,0x3ba,1,0x3f0,0x41,0x3bc,1,
-0xb5,0x41,0x3c0,1,0x3d6,0x41,0x3c1,1,0x3f1,0x4041,0x3c3,1,0x3c2,0x41,0x3c6,1,
-0x3d5,0x41,0x3c9,1,0x2126,0xc0,1,0x3330,0x3c5,0x308,0x301,0x3a5,0x308,0x301,0x3a5,0x308,
-0x301,0x1fe3,0x44,0x392,1,0x3d0,0x44,0x395,1,0x3f5,0x44,0x398,2,0x3d1,0x3f4,0x44,
-0x399,2,0x345,0x1fbe,0x44,0x39a,1,0x3f0,0x44,0x39c,1,0xb5,0x44,0x3a0,1,0x3d6,
-0x44,0x3a1,1,0x3f1,6,0x3c3,0x3a3,0x44,0x3a3,1,0x3c2,0x44,0x3a6,1,0x3d5,0x44,
-0x3a9,1,0x2126,6,0x3b2,0x392,0x46,0x3b8,0x398,1,0x3f4,6,0x3c6,0x3a6,6,0x3c0,
-0x3a0,6,0x3ba,0x39a,6,0x3c1,0x3a1,0x41,0x3b8,2,0x398,0x3d1,6,0x3b5,0x395,0x80,
-0x2220,0x565,0x582,0x535,0x552,0x535,0x582,1,0x2d00,1,0x2d01,1,0x2d02,1,0x2d03,1,
-0x2d04,1,0x2d05,1,0x2d06,1,0x2d07,1,0x2d08,1,0x2d09,1,0x2d0a,1,0x2d0b,1,
-0x2d0c,1,0x2d0d,1,0x2d0e,1,0x2d0f,1,0x2d10,1,0x2d11,1,0x2d12,1,0x2d13,1,
-0x2d14,1,0x2d15,1,0x2d16,1,0x2d17,1,0x2d18,1,0x2d19,1,0x2d1a,1,0x2d1b,1,
-0x2d1c,1,0x2d1d,1,0x2d1e,1,0x2d1f,1,0x2d20,1,0x2d21,1,0x2d22,1,0x2d23,1,
-0x2d24,1,0x2d25,4,0x2c63,0x41,0x1e61,1,0x1e9b,0x44,0x1e60,1,0x1e9b,0x80,0x2220,0x68,
-0x331,0x48,0x331,0x48,0x331,0x80,0x2220,0x74,0x308,0x54,0x308,0x54,0x308,0x80,0x2220,0x77,
-0x30a,0x57,0x30a,0x57,0x30a,0x80,0x2220,0x79,0x30a,0x59,0x30a,0x59,0x30a,0x80,0x2220,0x61,
-0x2be,0x41,0x2be,0x41,0x2be,6,0x1e61,0x1e60,0x80,0x2220,0x3c5,0x313,0x3a5,0x313,0x3a5,0x313,
-0x80,0x3330,0x3c5,0x313,0x300,0x3a5,0x313,0x300,0x3a5,0x313,0x300,0x80,0x3330,0x3c5,0x313,0x301,
-0x3a5,0x313,0x301,0x3a5,0x313,0x301,0x80,0x3330,0x3c5,0x313,0x342,0x3a5,0x313,0x342,0x3a5,0x313,
-0x342,0x84,0x1f88,0x220,0x1f00,0x3b9,0x1f08,0x399,0x84,0x1f89,0x220,0x1f01,0x3b9,0x1f09,0x399,0x84,
-0x1f8a,0x220,0x1f02,0x3b9,0x1f0a,0x399,0x84,0x1f8b,0x220,0x1f03,0x3b9,0x1f0b,0x399,0x84,0x1f8c,0x220,
-0x1f04,0x3b9,0x1f0c,0x399,0x84,0x1f8d,0x220,0x1f05,0x3b9,0x1f0d,0x399,0x84,0x1f8e,0x220,0x1f06,0x3b9,
-0x1f0e,0x399,0x84,0x1f8f,0x220,0x1f07,0x3b9,0x1f0f,0x399,0x81,0x1f80,0x220,0x1f00,0x3b9,0x1f08,0x399,
-0x81,0x1f81,0x220,0x1f01,0x3b9,0x1f09,0x399,0x81,0x1f82,0x220,0x1f02,0x3b9,0x1f0a,0x399,0x81,0x1f83,
-0x220,0x1f03,0x3b9,0x1f0b,0x399,0x81,0x1f84,0x220,0x1f04,0x3b9,0x1f0c,0x399,0x81,0x1f85,0x220,0x1f05,
-0x3b9,0x1f0d,0x399,0x81,0x1f86,0x220,0x1f06,0x3b9,0x1f0e,0x399,0x81,0x1f87,0x220,0x1f07,0x3b9,0x1f0f,
-0x399,0x84,0x1f98,0x220,0x1f20,0x3b9,0x1f28,0x399,0x84,0x1f99,0x220,0x1f21,0x3b9,0x1f29,0x399,0x84,
-0x1f9a,0x220,0x1f22,0x3b9,0x1f2a,0x399,0x84,0x1f9b,0x220,0x1f23,0x3b9,0x1f2b,0x399,0x84,0x1f9c,0x220,
-0x1f24,0x3b9,0x1f2c,0x399,0x84,0x1f9d,0x220,0x1f25,0x3b9,0x1f2d,0x399,0x84,0x1f9e,0x220,0x1f26,0x3b9,
-0x1f2e,0x399,0x84,0x1f9f,0x220,0x1f27,0x3b9,0x1f2f,0x399,0x81,0x1f90,0x220,0x1f20,0x3b9,0x1f28,0x399,
-0x81,0x1f91,0x220,0x1f21,0x3b9,0x1f29,0x399,0x81,0x1f92,0x220,0x1f22,0x3b9,0x1f2a,0x399,0x81,0x1f93,
-0x220,0x1f23,0x3b9,0x1f2b,0x399,0x81,0x1f94,0x220,0x1f24,0x3b9,0x1f2c,0x399,0x81,0x1f95,0x220,0x1f25,
-0x3b9,0x1f2d,0x399,0x81,0x1f96,0x220,0x1f26,0x3b9,0x1f2e,0x399,0x81,0x1f97,0x220,0x1f27,0x3b9,0x1f2f,
-0x399,0x84,0x1fa8,0x220,0x1f60,0x3b9,0x1f68,0x399,0x84,0x1fa9,0x220,0x1f61,0x3b9,0x1f69,0x399,0x84,
-0x1faa,0x220,0x1f62,0x3b9,0x1f6a,0x399,0x84,0x1fab,0x220,0x1f63,0x3b9,0x1f6b,0x399,0x84,0x1fac,0x220,
-0x1f64,0x3b9,0x1f6c,0x399,0x84,0x1fad,0x220,0x1f65,0x3b9,0x1f6d,0x399,0x84,0x1fae,0x220,0x1f66,0x3b9,
-0x1f6e,0x399,0x84,0x1faf,0x220,0x1f67,0x3b9,0x1f6f,0x399,0x81,0x1fa0,0x220,0x1f60,0x3b9,0x1f68,0x399,
-0x81,0x1fa1,0x220,0x1f61,0x3b9,0x1f69,0x399,0x81,0x1fa2,0x220,0x1f62,0x3b9,0x1f6a,0x399,0x81,0x1fa3,
-0x220,0x1f63,0x3b9,0x1f6b,0x399,0x81,0x1fa4,0x220,0x1f64,0x3b9,0x1f6c,0x399,0x81,0x1fa5,0x220,0x1f65,
-0x3b9,0x1f6d,0x399,0x81,0x1fa6,0x220,0x1f66,0x3b9,0x1f6e,0x399,0x81,0x1fa7,0x220,0x1f67,0x3b9,0x1f6f,
-0x399,0x80,0x2220,0x1f70,0x3b9,0x1fba,0x399,0x1fba,0x345,0x84,0x1fbc,0x220,0x3b1,0x3b9,0x391,0x399,
-0x80,0x2220,0x3ac,0x3b9,0x386,0x399,0x386,0x345,0x80,0x2220,0x3b1,0x342,0x391,0x342,0x391,0x342,
-0x80,0x3330,0x3b1,0x342,0x3b9,0x391,0x342,0x399,0x391,0x342,0x345,0x81,0x1fb3,0x220,0x3b1,0x3b9,
-0x391,0x399,0x46,0x3b9,0x399,1,0x345,0x80,0x2220,0x1f74,0x3b9,0x1fca,0x399,0x1fca,0x345,0x84,
-0x1fcc,0x220,0x3b7,0x3b9,0x397,0x399,0x80,0x2220,0x3ae,0x3b9,0x389,0x399,0x389,0x345,0x80,0x2220,
-0x3b7,0x342,0x397,0x342,0x397,0x342,0x80,0x3330,0x3b7,0x342,0x3b9,0x397,0x342,0x399,0x397,0x342,
-0x345,0x81,0x1fc3,0x220,0x3b7,0x3b9,0x397,0x399,0x80,0x3330,0x3b9,0x308,0x300,0x399,0x308,0x300,
-0x399,0x308,0x300,0xc0,1,0x3330,0x3b9,0x308,0x301,0x399,0x308,0x301,0x399,0x308,0x301,0x390,
-0x80,0x2220,0x3b9,0x342,0x399,0x342,0x399,0x342,0x80,0x3330,0x3b9,0x308,0x342,0x399,0x308,0x342,
-0x399,0x308,0x342,0x80,0x3330,0x3c5,0x308,0x300,0x3a5,0x308,0x300,0x3a5,0x308,0x300,0xc0,1,
-0x3330,0x3c5,0x308,0x301,0x3a5,0x308,0x301,0x3a5,0x308,0x301,0x3b0,0x80,0x2220,0x3c1,0x313,0x3a1,
-0x313,0x3a1,0x313,0x80,0x2220,0x3c5,0x342,0x3a5,0x342,0x3a5,0x342,0x80,0x3330,0x3c5,0x308,0x342,
-0x3a5,0x308,0x342,0x3a5,0x308,0x342,0x80,0x2220,0x1f7c,0x3b9,0x1ffa,0x399,0x1ffa,0x345,0x84,0x1ffc,
-0x220,0x3c9,0x3b9,0x3a9,0x399,0x80,0x2220,0x3ce,0x3b9,0x38f,0x399,0x38f,0x345,0x80,0x2220,0x3c9,
-0x342,0x3a9,0x342,0x3a9,0x342,0x80,0x3330,0x3c9,0x342,0x3b9,0x3a9,0x342,0x399,0x3a9,0x342,0x345,
-0x81,0x1ff3,0x220,0x3c9,0x3b9,0x3a9,0x399,0x41,0x3c9,1,0x3a9,0x41,0x6b,1,0x4b,0x41,
-0xe5,1,0xc5,1,0x26b,1,0x1d7d,1,0x27d,4,0x23a,4,0x23e,4,0x10a0,4,
-0x10a1,4,0x10a2,4,0x10a3,4,0x10a4,4,0x10a5,4,0x10a6,4,0x10a7,4,0x10a8,4,
-0x10a9,4,0x10aa,4,0x10ab,4,0x10ac,4,0x10ad,4,0x10ae,4,0x10af,4,0x10b0,4,
-0x10b1,4,0x10b2,4,0x10b3,4,0x10b4,4,0x10b5,4,0x10b6,4,0x10b7,4,0x10b8,4,
-0x10b9,4,0x10ba,4,0x10bb,4,0x10bc,4,0x10bd,4,0x10be,4,0x10bf,4,0x10c0,4,
-0x10c1,4,0x10c2,4,0x10c3,4,0x10c4,4,0x10c5,0x80,0x2220,0x66,0x66,0x46,0x46,0x46,
-0x66,0x80,0x2220,0x66,0x69,0x46,0x49,0x46,0x69,0x80,0x2220,0x66,0x6c,0x46,0x4c,0x46,
-0x6c,0x80,0x3330,0x66,0x66,0x69,0x46,0x46,0x49,0x46,0x66,0x69,0x80,0x3330,0x66,0x66,
-0x6c,0x46,0x46,0x4c,0x46,0x66,0x6c,0xc0,1,0x2220,0x73,0x74,0x53,0x54,0x53,0x74,
-0xfb06,0xc0,1,0x2220,0x73,0x74,0x53,0x54,0x53,0x74,0xfb05,0x80,0x2220,0x574,0x576,0x544,
-0x546,0x544,0x576,0x80,0x2220,0x574,0x565,0x544,0x535,0x544,0x565,0x80,0x2220,0x574,0x56b,0x544,
-0x53b,0x544,0x56b,0x80,0x2220,0x57e,0x576,0x54e,0x546,0x54e,0x576,0x80,0x2220,0x574,0x56d,0x544,
-0x53d,0x544,0x56d
+0xe5,1,0x212b,0x4001,0xec,0x4001,0xed,0xc0,1,0x2220,0x73,0x73,0x53,0x53,0x53,0x73,
+0x1e9e,0x44,0xc5,1,0x212b,0x4001,0x129,0x4001,0x12f,0xc041,0x69,2,0x131,0x49,0x44,0x49,
+2,0x69,0x130,0x80,0x2220,0x2bc,0x6e,0x2bc,0x4e,0x2bc,0x4e,6,0x73,0x53,9,0x1c6,
+0x1c5,0xd,0x1c6,0x1c4,0x1c5,0xc,0x1c4,0x1c5,9,0x1c9,0x1c8,0xd,0x1c9,0x1c7,0x1c8,0xc,
+0x1c7,0x1c8,9,0x1cc,0x1cb,0xd,0x1cc,0x1ca,0x1cb,0xc,0x1ca,0x1cb,0x80,0x2220,0x6a,0x30c,
+0x4a,0x30c,0x4a,0x30c,9,0x1f3,0x1f2,0xd,0x1f3,0x1f1,0x1f2,0xc,0x1f1,0x1f2,1,0x2c65,
+1,0x2c66,4,0x2c6f,4,0x2c6d,4,0x2c62,4,0x2c6e,4,0x2c64,0x6000,0x3046,0x3b9,0x399,
+1,0x1fbe,0xc0,1,0x3330,0x3b9,0x308,0x301,0x399,0x308,0x301,0x399,0x308,0x301,0x1fd3,0x41,
+0x3b2,1,0x3d0,0x41,0x3b5,1,0x3f5,0x41,0x3b8,2,0x3d1,0x3f4,0x41,0x3b9,2,0x345,
+0x1fbe,0x41,0x3ba,1,0x3f0,0x41,0x3bc,1,0xb5,0x41,0x3c0,1,0x3d6,0x41,0x3c1,1,
+0x3f1,0x4041,0x3c3,1,0x3c2,0x41,0x3c6,1,0x3d5,0x41,0x3c9,1,0x2126,0xc0,1,0x3330,
+0x3c5,0x308,0x301,0x3a5,0x308,0x301,0x3a5,0x308,0x301,0x1fe3,0x44,0x392,1,0x3d0,0x44,0x395,
+1,0x3f5,0x44,0x398,2,0x3d1,0x3f4,0x44,0x399,2,0x345,0x1fbe,0x44,0x39a,1,0x3f0,
+0x44,0x39c,1,0xb5,0x44,0x3a0,1,0x3d6,0x44,0x3a1,1,0x3f1,6,0x3c3,0x3a3,0x44,
+0x3a3,1,0x3c2,0x44,0x3a6,1,0x3d5,0x44,0x3a9,1,0x2126,6,0x3b2,0x392,0x46,0x3b8,
+0x398,1,0x3f4,6,0x3c6,0x3a6,6,0x3c0,0x3a0,6,0x3ba,0x39a,6,0x3c1,0x3a1,0x41,
+0x3b8,2,0x398,0x3d1,6,0x3b5,0x395,0x80,0x2220,0x565,0x582,0x535,0x552,0x535,0x582,1,
+0x2d00,1,0x2d01,1,0x2d02,1,0x2d03,1,0x2d04,1,0x2d05,1,0x2d06,1,0x2d07,1,
+0x2d08,1,0x2d09,1,0x2d0a,1,0x2d0b,1,0x2d0c,1,0x2d0d,1,0x2d0e,1,0x2d0f,1,
+0x2d10,1,0x2d11,1,0x2d12,1,0x2d13,1,0x2d14,1,0x2d15,1,0x2d16,1,0x2d17,1,
+0x2d18,1,0x2d19,1,0x2d1a,1,0x2d1b,1,0x2d1c,1,0x2d1d,1,0x2d1e,1,0x2d1f,1,
+0x2d20,1,0x2d21,1,0x2d22,1,0x2d23,1,0x2d24,1,0x2d25,4,0xa77d,4,0x2c63,0x41,
+0x1e61,1,0x1e9b,0x44,0x1e60,1,0x1e9b,0x80,0x2220,0x68,0x331,0x48,0x331,0x48,0x331,0x80,
+0x2220,0x74,0x308,0x54,0x308,0x54,0x308,0x80,0x2220,0x77,0x30a,0x57,0x30a,0x57,0x30a,0x80,
+0x2220,0x79,0x30a,0x59,0x30a,0x59,0x30a,0x80,0x2220,0x61,0x2be,0x41,0x2be,0x41,0x2be,6,
+0x1e61,0x1e60,0x81,0xdf,0x20,0x73,0x73,0x80,0x2220,0x3c5,0x313,0x3a5,0x313,0x3a5,0x313,0x80,
+0x3330,0x3c5,0x313,0x300,0x3a5,0x313,0x300,0x3a5,0x313,0x300,0x80,0x3330,0x3c5,0x313,0x301,0x3a5,
+0x313,0x301,0x3a5,0x313,0x301,0x80,0x3330,0x3c5,0x313,0x342,0x3a5,0x313,0x342,0x3a5,0x313,0x342,
+0x84,0x1f88,0x220,0x1f00,0x3b9,0x1f08,0x399,0x84,0x1f89,0x220,0x1f01,0x3b9,0x1f09,0x399,0x84,0x1f8a,
+0x220,0x1f02,0x3b9,0x1f0a,0x399,0x84,0x1f8b,0x220,0x1f03,0x3b9,0x1f0b,0x399,0x84,0x1f8c,0x220,0x1f04,
+0x3b9,0x1f0c,0x399,0x84,0x1f8d,0x220,0x1f05,0x3b9,0x1f0d,0x399,0x84,0x1f8e,0x220,0x1f06,0x3b9,0x1f0e,
+0x399,0x84,0x1f8f,0x220,0x1f07,0x3b9,0x1f0f,0x399,0x81,0x1f80,0x220,0x1f00,0x3b9,0x1f08,0x399,0x81,
+0x1f81,0x220,0x1f01,0x3b9,0x1f09,0x399,0x81,0x1f82,0x220,0x1f02,0x3b9,0x1f0a,0x399,0x81,0x1f83,0x220,
+0x1f03,0x3b9,0x1f0b,0x399,0x81,0x1f84,0x220,0x1f04,0x3b9,0x1f0c,0x399,0x81,0x1f85,0x220,0x1f05,0x3b9,
+0x1f0d,0x399,0x81,0x1f86,0x220,0x1f06,0x3b9,0x1f0e,0x399,0x81,0x1f87,0x220,0x1f07,0x3b9,0x1f0f,0x399,
+0x84,0x1f98,0x220,0x1f20,0x3b9,0x1f28,0x399,0x84,0x1f99,0x220,0x1f21,0x3b9,0x1f29,0x399,0x84,0x1f9a,
+0x220,0x1f22,0x3b9,0x1f2a,0x399,0x84,0x1f9b,0x220,0x1f23,0x3b9,0x1f2b,0x399,0x84,0x1f9c,0x220,0x1f24,
+0x3b9,0x1f2c,0x399,0x84,0x1f9d,0x220,0x1f25,0x3b9,0x1f2d,0x399,0x84,0x1f9e,0x220,0x1f26,0x3b9,0x1f2e,
+0x399,0x84,0x1f9f,0x220,0x1f27,0x3b9,0x1f2f,0x399,0x81,0x1f90,0x220,0x1f20,0x3b9,0x1f28,0x399,0x81,
+0x1f91,0x220,0x1f21,0x3b9,0x1f29,0x399,0x81,0x1f92,0x220,0x1f22,0x3b9,0x1f2a,0x399,0x81,0x1f93,0x220,
+0x1f23,0x3b9,0x1f2b,0x399,0x81,0x1f94,0x220,0x1f24,0x3b9,0x1f2c,0x399,0x81,0x1f95,0x220,0x1f25,0x3b9,
+0x1f2d,0x399,0x81,0x1f96,0x220,0x1f26,0x3b9,0x1f2e,0x399,0x81,0x1f97,0x220,0x1f27,0x3b9,0x1f2f,0x399,
+0x84,0x1fa8,0x220,0x1f60,0x3b9,0x1f68,0x399,0x84,0x1fa9,0x220,0x1f61,0x3b9,0x1f69,0x399,0x84,0x1faa,
+0x220,0x1f62,0x3b9,0x1f6a,0x399,0x84,0x1fab,0x220,0x1f63,0x3b9,0x1f6b,0x399,0x84,0x1fac,0x220,0x1f64,
+0x3b9,0x1f6c,0x399,0x84,0x1fad,0x220,0x1f65,0x3b9,0x1f6d,0x399,0x84,0x1fae,0x220,0x1f66,0x3b9,0x1f6e,
+0x399,0x84,0x1faf,0x220,0x1f67,0x3b9,0x1f6f,0x399,0x81,0x1fa0,0x220,0x1f60,0x3b9,0x1f68,0x399,0x81,
+0x1fa1,0x220,0x1f61,0x3b9,0x1f69,0x399,0x81,0x1fa2,0x220,0x1f62,0x3b9,0x1f6a,0x399,0x81,0x1fa3,0x220,
+0x1f63,0x3b9,0x1f6b,0x399,0x81,0x1fa4,0x220,0x1f64,0x3b9,0x1f6c,0x399,0x81,0x1fa5,0x220,0x1f65,0x3b9,
+0x1f6d,0x399,0x81,0x1fa6,0x220,0x1f66,0x3b9,0x1f6e,0x399,0x81,0x1fa7,0x220,0x1f67,0x3b9,0x1f6f,0x399,
+0x80,0x2220,0x1f70,0x3b9,0x1fba,0x399,0x1fba,0x345,0x84,0x1fbc,0x220,0x3b1,0x3b9,0x391,0x399,0x80,
+0x2220,0x3ac,0x3b9,0x386,0x399,0x386,0x345,0x80,0x2220,0x3b1,0x342,0x391,0x342,0x391,0x342,0x80,
+0x3330,0x3b1,0x342,0x3b9,0x391,0x342,0x399,0x391,0x342,0x345,0x81,0x1fb3,0x220,0x3b1,0x3b9,0x391,
+0x399,0x46,0x3b9,0x399,1,0x345,0x80,0x2220,0x1f74,0x3b9,0x1fca,0x399,0x1fca,0x345,0x84,0x1fcc,
+0x220,0x3b7,0x3b9,0x397,0x399,0x80,0x2220,0x3ae,0x3b9,0x389,0x399,0x389,0x345,0x80,0x2220,0x3b7,
+0x342,0x397,0x342,0x397,0x342,0x80,0x3330,0x3b7,0x342,0x3b9,0x397,0x342,0x399,0x397,0x342,0x345,
+0x81,0x1fc3,0x220,0x3b7,0x3b9,0x397,0x399,0x80,0x3330,0x3b9,0x308,0x300,0x399,0x308,0x300,0x399,
+0x308,0x300,0xc0,1,0x3330,0x3b9,0x308,0x301,0x399,0x308,0x301,0x399,0x308,0x301,0x390,0x80,
+0x2220,0x3b9,0x342,0x399,0x342,0x399,0x342,0x80,0x3330,0x3b9,0x308,0x342,0x399,0x308,0x342,0x399,
+0x308,0x342,0x80,0x3330,0x3c5,0x308,0x300,0x3a5,0x308,0x300,0x3a5,0x308,0x300,0xc0,1,0x3330,
+0x3c5,0x308,0x301,0x3a5,0x308,0x301,0x3a5,0x308,0x301,0x3b0,0x80,0x2220,0x3c1,0x313,0x3a1,0x313,
+0x3a1,0x313,0x80,0x2220,0x3c5,0x342,0x3a5,0x342,0x3a5,0x342,0x80,0x3330,0x3c5,0x308,0x342,0x3a5,
+0x308,0x342,0x3a5,0x308,0x342,0x80,0x2220,0x1f7c,0x3b9,0x1ffa,0x399,0x1ffa,0x345,0x84,0x1ffc,0x220,
+0x3c9,0x3b9,0x3a9,0x399,0x80,0x2220,0x3ce,0x3b9,0x38f,0x399,0x38f,0x345,0x80,0x2220,0x3c9,0x342,
+0x3a9,0x342,0x3a9,0x342,0x80,0x3330,0x3c9,0x342,0x3b9,0x3a9,0x342,0x399,0x3a9,0x342,0x345,0x81,
+0x1ff3,0x220,0x3c9,0x3b9,0x3a9,0x399,0x41,0x3c9,1,0x3a9,0x41,0x6b,1,0x4b,0x41,0xe5,
+1,0xc5,1,0x26b,1,0x1d7d,1,0x27d,4,0x23a,4,0x23e,1,0x251,1,0x271,
+1,0x250,4,0x10a0,4,0x10a1,4,0x10a2,4,0x10a3,4,0x10a4,4,0x10a5,4,0x10a6,
+4,0x10a7,4,0x10a8,4,0x10a9,4,0x10aa,4,0x10ab,4,0x10ac,4,0x10ad,4,0x10ae,
+4,0x10af,4,0x10b0,4,0x10b1,4,0x10b2,4,0x10b3,4,0x10b4,4,0x10b5,4,0x10b6,
+4,0x10b7,4,0x10b8,4,0x10b9,4,0x10ba,4,0x10bb,4,0x10bc,4,0x10bd,4,0x10be,
+4,0x10bf,4,0x10c0,4,0x10c1,4,0x10c2,4,0x10c3,4,0x10c4,4,0x10c5,1,0x1d79,
+0x80,0x2220,0x66,0x66,0x46,0x46,0x46,0x66,0x80,0x2220,0x66,0x69,0x46,0x49,0x46,0x69,
+0x80,0x2220,0x66,0x6c,0x46,0x4c,0x46,0x6c,0x80,0x3330,0x66,0x66,0x69,0x46,0x46,0x49,
+0x46,0x66,0x69,0x80,0x3330,0x66,0x66,0x6c,0x46,0x46,0x4c,0x46,0x66,0x6c,0xc0,1,
+0x2220,0x73,0x74,0x53,0x54,0x53,0x74,0xfb06,0xc0,1,0x2220,0x73,0x74,0x53,0x54,0x53,
+0x74,0xfb05,0x80,0x2220,0x574,0x576,0x544,0x546,0x544,0x576,0x80,0x2220,0x574,0x565,0x544,0x535,
+0x544,0x565,0x80,0x2220,0x574,0x56b,0x544,0x53b,0x544,0x56b,0x80,0x2220,0x57e,0x576,0x54e,0x546,
+0x54e,0x576,0x80,0x2220,0x574,0x56d,0x544,0x53d,0x544,0x56d
};
static const uint16_t ucase_props_unfold[370]={
0x49,5,3,0,0,0x61,0x2be,0,0x1e9a,0,0x66,0x66,0,0xfb00,0,0x66,
0x66,0x69,0xfb03,0,0x66,0x66,0x6c,0xfb04,0,0x66,0x69,0,0xfb01,0,0x66,0x6c,
0,0xfb02,0,0x68,0x331,0,0x1e96,0,0x69,0x307,0,0x130,0,0x6a,0x30c,0,
-0x1f0,0,0x73,0x73,0,0xdf,0,0x73,0x74,0,0xfb05,0xfb06,0x74,0x308,0,0x1e97,
+0x1f0,0,0x73,0x73,0,0xdf,0x1e9e,0x73,0x74,0,0xfb05,0xfb06,0x74,0x308,0,0x1e97,
0,0x77,0x30a,0,0x1e98,0,0x79,0x30a,0,0x1e99,0,0x2bc,0x6e,0,0x149,0,
0x3ac,0x3b9,0,0x1fb4,0,0x3ae,0x3b9,0,0x1fc4,0,0x3b1,0x342,0,0x1fb6,0,0x3b1,
0x342,0x3b9,0x1fb7,0,0x3b1,0x3b9,0,0x1fb3,0x1fbc,0x3b7,0x342,0,0x1fc6,0,0x3b7,0x342,
@@ -635,11 +676,11 @@ static const UCaseProps ucase_props_singleton={
ucase_props_trieIndex,
NULL,
utrie_defaultGetFoldingOffset,
- 2240,
+ 2272,
#ifndef U_DARWIN
- 5112,
+ 5652,
#else /* U_DARWIN */
- 5160,
+ 5700,
#endif /* U_DARWIN */
0,
TRUE
diff --git a/icuSources/common/ucasemap.c b/icuSources/common/ucasemap.c
index 02f94762..6433233a 100644
--- a/icuSources/common/ucasemap.c
+++ b/icuSources/common/ucasemap.c
@@ -1,7 +1,7 @@
/*
*******************************************************************************
*
-* Copyright (C) 2005, International Business Machines
+* Copyright (C) 2005-2008, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
@@ -20,6 +20,10 @@
#include "unicode/uloc.h"
#include "unicode/ustring.h"
#include "unicode/ucasemap.h"
+#if !UCONFIG_NO_BREAK_ITERATION
+#include "unicode/ubrk.h"
+#include "unicode/utext.h"
+#endif
#include "cmemory.h"
#include "cstring.h"
#include "ucase.h"
@@ -27,14 +31,7 @@
/* UCaseMap service object -------------------------------------------------- */
-struct UCaseMap {
- const UCaseProps *csp;
- char locale[32];
- int32_t locCache;
- uint32_t options;
-};
-
-U_DRAFT UCaseMap * U_EXPORT2
+U_CAPI UCaseMap * U_EXPORT2
ucasemap_open(const char *locale, uint32_t options, UErrorCode *pErrorCode) {
UCaseMap *csm;
@@ -59,24 +56,27 @@ ucasemap_open(const char *locale, uint32_t options, UErrorCode *pErrorCode) {
return csm;
}
-U_DRAFT void U_EXPORT2
+U_CAPI void U_EXPORT2
ucasemap_close(UCaseMap *csm) {
if(csm!=NULL) {
+#if !UCONFIG_NO_BREAK_ITERATION
+ ubrk_close(csm->iter);
+#endif
uprv_free(csm);
}
}
-U_DRAFT const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
ucasemap_getLocale(const UCaseMap *csm) {
return csm->locale;
}
-U_DRAFT uint32_t U_EXPORT2
+U_CAPI uint32_t U_EXPORT2
ucasemap_getOptions(const UCaseMap *csm) {
return csm->options;
}
-U_DRAFT void U_EXPORT2
+U_CAPI void U_EXPORT2
ucasemap_setLocale(UCaseMap *csm, const char *locale, UErrorCode *pErrorCode) {
int32_t length;
@@ -101,13 +101,30 @@ ucasemap_setLocale(UCaseMap *csm, const char *locale, UErrorCode *pErrorCode) {
}
}
-U_DRAFT void U_EXPORT2
+U_CAPI void U_EXPORT2
ucasemap_setOptions(UCaseMap *csm, uint32_t options, UErrorCode *pErrorCode) {
csm->options=options;
}
+#if !UCONFIG_NO_BREAK_ITERATION
+
+U_CAPI const UBreakIterator * U_EXPORT2
+ucasemap_getBreakIterator(const UCaseMap *csm) {
+ return csm->iter;
+}
+
+U_CAPI void U_EXPORT2
+ucasemap_setBreakIterator(UCaseMap *csm, UBreakIterator *iterToAdopt, UErrorCode *pErrorCode) {
+ ubrk_close(csm->iter);
+ csm->iter=iterToAdopt;
+}
+
+#endif
+
/* UTF-8 string case mappings ----------------------------------------------- */
+/* TODO(markus): Move to a new, separate utf8case.c file. */
+
/* append a full case mapping result, see UCASE_MAX_STRING_LENGTH */
static U_INLINE int32_t
appendResult(uint8_t *dest, int32_t destIndex, int32_t destCapacity,
@@ -146,7 +163,7 @@ appendResult(uint8_t *dest, int32_t destIndex, int32_t destCapacity,
(char *)(dest+destIndex), destCapacity-destIndex, &destLength,
s, length,
&errorCode);
- destIndex+=length;
+ destIndex+=destLength;
/* we might have an overflow, but we know the actual length */
}
} else {
@@ -159,7 +176,7 @@ appendResult(uint8_t *dest, int32_t destIndex, int32_t destCapacity,
NULL, 0, &destLength,
s, length,
&errorCode);
- destIndex+=length;
+ destIndex+=destLength;
}
}
return destIndex;
@@ -197,12 +214,6 @@ utf8_caseContextIterator(void *context, int8_t dir) {
return U_SENTINEL;
}
-typedef int32_t U_CALLCONV
-UCaseMapFull(const UCaseProps *csp, UChar32 c,
- UCaseContextIterator *iter, void *context,
- const UChar **pString,
- const char *locale, int32_t *locCache);
-
/*
* Case-maps [srcStart..srcLimit[ but takes
* context [0..srcLength[ into account.
@@ -214,7 +225,7 @@ _caseMap(const UCaseMap *csm, UCaseMapFull *map,
int32_t srcStart, int32_t srcLimit,
UErrorCode *pErrorCode) {
const UChar *s;
- UChar32 c;
+ UChar32 c, c2;
int32_t srcIndex, destIndex;
int32_t locCache;
@@ -227,8 +238,202 @@ _caseMap(const UCaseMap *csm, UCaseMapFull *map,
csc->cpStart=srcIndex;
U8_NEXT(src, srcIndex, srcLimit, c);
csc->cpLimit=srcIndex;
+ if(c<0) {
+ int32_t i=csc->cpStart;
+ while(destIndexcsp, c, utf8_caseContextIterator, csc, &s, csm->locale, &locCache);
- destIndex=appendResult(dest, destIndex, destCapacity, c, s);
+ if((destIndexdestCapacity) {
+ *pErrorCode=U_BUFFER_OVERFLOW_ERROR;
+ }
+ return destIndex;
+}
+
+#if !UCONFIG_NO_BREAK_ITERATION
+
+/*
+ * Internal titlecasing function.
+ */
+static int32_t
+_toTitle(UCaseMap *csm,
+ uint8_t *dest, int32_t destCapacity,
+ const uint8_t *src, UCaseContext *csc,
+ int32_t srcLength,
+ UErrorCode *pErrorCode) {
+ UText utext=UTEXT_INITIALIZER;
+ const UChar *s;
+ UChar32 c;
+ int32_t prev, titleStart, titleLimit, index, destIndex, length;
+ UBool isFirstIndex;
+
+ utext_openUTF8(&utext, (const char *)src, srcLength, pErrorCode);
+ if(U_FAILURE(*pErrorCode)) {
+ return 0;
+ }
+ if(csm->iter==NULL) {
+ csm->iter=ubrk_open(UBRK_WORD, csm->locale,
+ NULL, 0,
+ pErrorCode);
+ }
+ ubrk_setUText(csm->iter, &utext, pErrorCode);
+ if(U_FAILURE(*pErrorCode)) {
+ utext_close(&utext);
+ return 0;
+ }
+
+ /* set up local variables */
+ destIndex=0;
+ prev=0;
+ isFirstIndex=TRUE;
+
+ /* titlecasing loop */
+ while(previter);
+ } else {
+ index=ubrk_next(csm->iter);
+ }
+ if(index==UBRK_DONE || index>srcLength) {
+ index=srcLength;
+ }
+
+ /*
+ * Unicode 4 & 5 section 3.13 Default Case Operations:
+ *
+ * R3 toTitlecase(X): Find the word boundaries based on Unicode Standard Annex
+ * #29, "Text Boundaries." Between each pair of word boundaries, find the first
+ * cased character F. If F exists, map F to default_title(F); then map each
+ * subsequent character C to default_lower(C).
+ *
+ * In this implementation, segment [prev..index[ into 3 parts:
+ * a) uncased characters (copy as-is) [prev..titleStart[
+ * b) first case letter (titlecase) [titleStart..titleLimit[
+ * c) subsequent characters (lowercase) [titleLimit..index[
+ */
+ if(prevoptions&U_TITLECASE_NO_BREAK_ADJUSTMENT)==0 && UCASE_NONE==ucase_getType(csm->csp, c)) {
+ /* Adjust the titlecasing index (titleStart) to the next cased character. */
+ for(;;) {
+ titleStart=titleLimit;
+ if(titleLimit==index) {
+ /*
+ * only uncased characters in [prev..index[
+ * stop with titleStart==titleLimit==index
+ */
+ break;
+ }
+ U8_NEXT(src, titleLimit, index, c);
+ if(UCASE_NONE!=ucase_getType(csm->csp, c)) {
+ break; /* cased letter at [titleStart..titleLimit[ */
+ }
+ }
+ length=titleStart-prev;
+ if(length>0) {
+ if((destIndex+length)<=destCapacity) {
+ uprv_memcpy(dest+destIndex, src+prev, length);
+ }
+ destIndex+=length;
+ }
+ }
+
+ if(titleStartcpStart=titleStart;
+ csc->cpLimit=titleLimit;
+ c=ucase_toFullTitle(csm->csp, c, utf8_caseContextIterator, csc, &s, csm->locale, &csm->locCache);
+ destIndex=appendResult(dest, destIndex, destCapacity, c, s);
+
+
+ /* Special case Dutch IJ titlecasing */
+ if ( titleStart+1 < index &&
+ ucase_getCaseLocale(csm->locale,&csm->locCache) == UCASE_LOC_DUTCH &&
+ ( src[titleStart] == 0x0049 || src[titleStart] == 0x0069 ) &&
+ ( src[titleStart+1] == 0x004A || src[titleStart+1] == 0x006A )) {
+ c=0x004A;
+ destIndex=appendResult(dest, destIndex, destCapacity, c, s);
+ titleLimit++;
+ }
+ /* lowercase [titleLimit..index[ */
+ if(titleLimitoptions&U_TITLECASE_NO_LOWERCASE)==0) {
+ /* Normal operation: Lowercase the rest of the word. */
+ destIndex+=
+ _caseMap(
+ csm, ucase_toFullLower,
+ dest+destIndex, destCapacity-destIndex,
+ src, csc,
+ titleLimit, index,
+ pErrorCode);
+ } else {
+ /* Optionally just copy the rest of the word unchanged. */
+ length=index-titleLimit;
+ if((destIndex+length)<=destCapacity) {
+ uprv_memcpy(dest+destIndex, src+titleLimit, length);
+ }
+ destIndex+=length;
+ }
+ }
+ }
+ }
+
+ prev=index;
+ }
+
+ if(destIndex>destCapacity) {
+ *pErrorCode=U_BUFFER_OVERFLOW_ERROR;
+ }
+ utext_close(&utext);
+ return destIndex;
+}
+
+#endif
+
+static int32_t
+utf8_foldCase(const UCaseProps *csp,
+ uint8_t *dest, int32_t destCapacity,
+ const uint8_t *src, int32_t srcLength,
+ uint32_t options,
+ UErrorCode *pErrorCode) {
+ int32_t srcIndex, destIndex;
+
+ const UChar *s;
+ UChar32 c, c2;
+ int32_t start;
+
+ /* case mapping loop */
+ srcIndex=destIndex=0;
+ while(srcIndexdestCapacity) {
@@ -241,12 +446,6 @@ _caseMap(const UCaseMap *csm, UCaseMapFull *map,
* Implement argument checking and buffer handling
* for string case mapping as a common function.
*/
-enum {
- TO_LOWER,
- TO_UPPER,
- TO_TITLE,
- FOLD_CASE
-};
/* common internal function for public API functions */
@@ -256,7 +455,6 @@ caseMap(const UCaseMap *csm,
const uint8_t *src, int32_t srcLength,
int32_t toWhichCase,
UErrorCode *pErrorCode) {
- UCaseContext csc={ NULL };
int32_t destLength;
/* check argument values */
@@ -288,21 +486,37 @@ caseMap(const UCaseMap *csm,
destLength=0;
- csc.p=(void *)src;
- csc.limit=srcLength;
-
- if(toWhichCase==TO_LOWER) {
- destLength=_caseMap(csm, ucase_toFullLower,
- dest, destCapacity,
- src, &csc,
- 0, srcLength,
- pErrorCode);
- } else /* if(toWhichCase==TO_UPPER) */ {
- destLength=_caseMap(csm, ucase_toFullUpper,
- dest, destCapacity,
- src, &csc,
- 0, srcLength,
- pErrorCode);
+ if(toWhichCase==FOLD_CASE) {
+ destLength=utf8_foldCase(csm->csp, dest, destCapacity, src, srcLength,
+ csm->options, pErrorCode);
+ } else {
+ UCaseContext csc={ NULL };
+
+ csc.p=(void *)src;
+ csc.limit=srcLength;
+
+ if(toWhichCase==TO_LOWER) {
+ destLength=_caseMap(csm, ucase_toFullLower,
+ dest, destCapacity,
+ src, &csc,
+ 0, srcLength,
+ pErrorCode);
+ } else if(toWhichCase==TO_UPPER) {
+ destLength=_caseMap(csm, ucase_toFullUpper,
+ dest, destCapacity,
+ src, &csc,
+ 0, srcLength,
+ pErrorCode);
+ } else /* if(toWhichCase==TO_TITLE) */ {
+#if UCONFIG_NO_BREAK_ITERATION
+ *pErrorCode=U_UNSUPPORTED_ERROR;
+#else
+ /* UCaseMap is actually non-const in toTitle() APIs. */
+ destLength=_toTitle((UCaseMap *)csm, dest, destCapacity,
+ src, &csc, srcLength,
+ pErrorCode);
+#endif
+ }
}
return u_terminateChars((char *)dest, destCapacity, destLength, pErrorCode);
@@ -310,7 +524,7 @@ caseMap(const UCaseMap *csm,
/* public API functions */
-U_DRAFT int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucasemap_utf8ToLower(const UCaseMap *csm,
char *dest, int32_t destCapacity,
const char *src, int32_t srcLength,
@@ -321,7 +535,7 @@ ucasemap_utf8ToLower(const UCaseMap *csm,
TO_LOWER, pErrorCode);
}
-U_DRAFT int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucasemap_utf8ToUpper(const UCaseMap *csm,
char *dest, int32_t destCapacity,
const char *src, int32_t srcLength,
@@ -331,3 +545,29 @@ ucasemap_utf8ToUpper(const UCaseMap *csm,
(const uint8_t *)src, srcLength,
TO_UPPER, pErrorCode);
}
+
+#if !UCONFIG_NO_BREAK_ITERATION
+
+U_CAPI int32_t U_EXPORT2
+ucasemap_utf8ToTitle(UCaseMap *csm,
+ char *dest, int32_t destCapacity,
+ const char *src, int32_t srcLength,
+ UErrorCode *pErrorCode) {
+ return caseMap(csm,
+ (uint8_t *)dest, destCapacity,
+ (const uint8_t *)src, srcLength,
+ TO_TITLE, pErrorCode);
+}
+
+#endif
+
+U_CAPI int32_t U_EXPORT2
+ucasemap_utf8FoldCase(const UCaseMap *csm,
+ char *dest, int32_t destCapacity,
+ const char *src, int32_t srcLength,
+ UErrorCode *pErrorCode) {
+ return caseMap(csm,
+ (uint8_t *)dest, destCapacity,
+ (const uint8_t *)src, srcLength,
+ FOLD_CASE, pErrorCode);
+}
diff --git a/icuSources/common/uchar.c b/icuSources/common/uchar.c
index 718e87a4..75754a9e 100644
--- a/icuSources/common/uchar.c
+++ b/icuSources/common/uchar.c
@@ -1,6 +1,6 @@
/*
********************************************************************************
-* Copyright (C) 1996-2006, International Business Machines
+* Copyright (C) 1996-2008, International Business Machines
* Corporation and others. All Rights Reserved.
********************************************************************************
*
@@ -817,7 +817,7 @@ ublock_getCode(UChar32 c) {
/* property starts for UnicodeSet ------------------------------------------- */
/* for Hangul_Syllable_Type */
-U_CAPI void U_EXPORT2
+U_CFUNC void U_EXPORT2
uhst_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode) {
UChar32 c;
int32_t value, value2;
@@ -891,7 +891,7 @@ _enumPropertyStartsRange(const void *context, UChar32 start, UChar32 limit, uint
#define USET_ADD_CP_AND_NEXT(sa, cp) sa->add(sa->set, cp); sa->add(sa->set, cp+1)
-U_CAPI void U_EXPORT2
+U_CFUNC void U_EXPORT2
uchar_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode) {
if(U_FAILURE(*pErrorCode)) {
return;
@@ -958,7 +958,7 @@ uchar_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode) {
USET_ADD_CP_AND_NEXT(sa, CGJ);
}
-U_CAPI void U_EXPORT2
+U_CFUNC void U_EXPORT2
upropsvec_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode) {
if(U_FAILURE(*pErrorCode)) {
return;
diff --git a/icuSources/common/uchar_props_data.c b/icuSources/common/uchar_props_data.c
index 3dabf335..bcc2cca2 100644
--- a/icuSources/common/uchar_props_data.c
+++ b/icuSources/common/uchar_props_data.c
@@ -1,322 +1,340 @@
/*
- * Copyright (C) 1999-2007, International Business Machines
+ * Copyright (C) 1999-2008, International Business Machines
* Corporation and others. All Rights Reserved.
*
* file name: uchar_props_data.c
*
- * machine-generated on: 2006-06-13
- * machine-generated on: 2007-03-29 U_DARWIN
+ * machine-generated on: 2008-03-20
+ * machine-generated on: 2008-07-16 U_DARWIN
*/
-static const UVersionInfo formatVersion={4,0,5,2};
+static const UVersionInfo formatVersion={5,0,5,2};
-static const UVersionInfo dataVersion={5,0,0,0};
+static const UVersionInfo dataVersion={5,1,0,0};
#ifndef U_DARWIN
-static const uint16_t propsTrie_index[13440]={
+static const uint16_t propsTrie_index[14336]={
#else /* U_DARWIN */
-static const uint16_t propsTrie_index[13612]={
+static const uint16_t propsTrie_index[14508]={
#endif /* U_DARWIN */
-0x2a8,0x2b0,0x2b8,0x2c0,0x2c8,0x2d0,0x2d8,0x2e0,0x2e8,0x2ea,0x2f0,0x2f3,0x2fb,0x303,0x30b,0x313,
-0x2e8,0x319,0x321,0x325,0x328,0x32e,0x336,0x33e,0x346,0x346,0x346,0x34a,0x352,0x35a,0x35f,0x365,
-0x36d,0x371,0x325,0x2e8,0x379,0x2e8,0x381,0x2e8,0x385,0x38a,0x38f,0x397,0x39d,0x3a2,0x3aa,0x3b0,
-0x3b8,0x3c0,0x3c8,0x3d0,0x3d5,0x3d5,0x3d8,0x3e0,0x3e8,0x3ed,0x3f3,0x3f8,0x3d5,0x400,0x408,0x40e,
-0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x416,0x418,0x420,0x428,0x430,0x436,0x43e,0x446,
+0x2b0,0x2b8,0x2c0,0x2c8,0x2d0,0x2d8,0x2e0,0x2e8,0x2f0,0x2f2,0x2f8,0x2fb,0x303,0x30b,0x313,0x31b,
+0x2f0,0x321,0x329,0x32d,0x330,0x336,0x33e,0x346,0x34e,0x34e,0x34e,0x352,0x35a,0x362,0x367,0x36d,
+0x375,0x379,0x32d,0x2f0,0x381,0x2f0,0x389,0x2f0,0x2f0,0x390,0x395,0x39d,0x3a3,0x3a8,0x3b0,0x3b6,
+0x3be,0x3c6,0x3ce,0x3d6,0x3db,0x3db,0x3de,0x3e6,0x3ee,0x3f3,0x3f9,0x3db,0x3db,0x400,0x408,0x40e,
+0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x416,0x418,0x420,0x428,0x430,0x436,0x43e,0x446,
0x44e,0x454,0x45c,0x464,0x46c,0x472,0x47a,0x482,0x430,0x48a,0x492,0x49a,0x4a2,0x4aa,0x4b2,0x4b9,
-0x4c1,0x4c7,0x4cf,0x4d7,0x4df,0x4e5,0x4ed,0x4f5,0x4df,0x4fd,0x505,0x4d7,0x50d,0x514,0x51c,0x524,
-0x52c,0x530,0x538,0x2a0,0x540,0x548,0x550,0x2a0,0x558,0x560,0x568,0x56e,0x576,0x57d,0x585,0x2a0,
-0x3d5,0x58d,0x595,0x2a0,0x2a0,0x36d,0x59d,0x5a1,0x3d5,0x3d5,0x5a9,0x3d5,0x3d5,0x5b1,0x3d5,0x5b3,
-0x3d5,0x3d5,0x5bb,0x3d5,0x5c3,0x5c7,0x5cf,0x3d5,0x5d5,0x3d5,0x5db,0x5e3,0x5eb,0x3d5,0x3d5,0x5f3,
-0x52c,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x5fb,0x603,0x3d5,0x3d5,0x60b,0x613,0x61b,0x623,0x62b,0x3d5,0x633,0x63b,0x643,
-0x64b,0x3d5,0x653,0x655,0x3d5,0x65d,0x2a0,0x2a0,0x665,0x66d,0x675,0x67a,0x3d5,0x682,0x68a,0x692,
-0x69a,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x6a2,0x6a5,0x6ad,0x6b5,0x2a0,0x2a0,0x2a0,0x2a0,
-0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x325,0x6bd,0x6c0,0x6c8,0x6cf,0x6c0,0x6d7,0x6da,
-0x2e8,0x2e8,0x2e8,0x2e8,0x6e2,0x2e8,0x2e8,0x6ea,0x6f2,0x6fa,0x702,0x70a,0x712,0x716,0x71e,0x726,
-0x72e,0x736,0x73e,0x746,0x74e,0x756,0x75c,0x764,0x76c,0x774,0x77c,0x784,0x78c,0x794,0x799,0x79f,
-0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7ac,0x7b4,0x692,0x7b7,0x7bf,0x7c6,0x7cb,0x7d3,
-0x692,0x7db,0x7e3,0x7eb,0x7ee,0x692,0x692,0x7f5,0x692,0x692,0x692,0x692,0x692,0x7fd,0x805,0x807,
-0x692,0x692,0x692,0x80f,0x813,0x81b,0x2a0,0x2a0,0x823,0x829,0x82e,0x836,0x83e,0x844,0x84c,0x853,
-0x692,0x692,0x692,0x692,0x692,0x692,0x692,0x692,0x7a4,0x7a4,0x7a4,0x7a4,0x85b,0x7a4,0x862,0x869,
-0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x871,0x879,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-0x36d,0x881,0x885,0x88d,0x2e8,0x2e8,0x2e8,0x895,0x325,0x89d,0x3d5,0x8a4,0x8ac,0x8b4,0x8b4,0x2a0,
-0x8bc,0x2a0,0x2a0,0x2a0,0x8c4,0x692,0x692,0x8cb,0x692,0x692,0x692,0x692,0x692,0x692,0x8d3,0x8d9,
-0x8e1,0x8e9,0x52c,0x3d5,0x8f1,0x8f9,0x3d5,0x8fb,0x52b,0x903,0x3d5,0x3d5,0x908,0x655,0x90e,0x661,
-0x916,0x91e,0x925,0x692,0x91e,0x92d,0x692,0x916,0x692,0x692,0x692,0x692,0x692,0x692,0x692,0x692,
+0x4c1,0x4c7,0x4cf,0x4d7,0x4df,0x4e5,0x4ed,0x4f5,0x4df,0x4fd,0x505,0x50d,0x515,0x51c,0x524,0x52c,
+0x3c6,0x534,0x53c,0x2a8,0x544,0x54c,0x554,0x2a8,0x55c,0x564,0x56c,0x571,0x579,0x580,0x588,0x2a8,
+0x3db,0x590,0x598,0x5a0,0x5a8,0x375,0x5b0,0x5b4,0x3db,0x3db,0x5bc,0x3db,0x3db,0x5c4,0x3db,0x5c6,
+0x3db,0x3db,0x5ce,0x3db,0x5d6,0x5da,0x5e2,0x3db,0x5e8,0x3db,0x5ee,0x5f6,0x5fe,0x3db,0x3db,0x606,
+0x3c6,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x60e,0x616,0x3db,0x3db,0x61e,0x626,0x62e,0x636,0x63e,0x3db,0x646,0x64e,0x656,
+0x65e,0x3db,0x666,0x668,0x3db,0x670,0x2a8,0x2a8,0x678,0x680,0x688,0x68d,0x3db,0x695,0x69d,0x6a5,
+0x6ad,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x6b5,0x6b8,0x6c0,0x6c8,0x6d0,0x6d8,0x2a8,0x2a8,
+0x3db,0x6e0,0x6e8,0x6ef,0x2a8,0x2a8,0x2a8,0x2a8,0x32d,0x6f7,0x6fa,0x702,0x709,0x6fa,0x34e,0x711,
+0x2f0,0x2f0,0x2f0,0x2f0,0x719,0x2f0,0x2f0,0x2f0,0x721,0x729,0x731,0x739,0x741,0x745,0x74d,0x755,
+0x75d,0x765,0x76d,0x775,0x77d,0x785,0x78b,0x793,0x79b,0x7a3,0x7ab,0x7b3,0x7bb,0x7c3,0x7c8,0x7ce,
+0x7d3,0x7d3,0x7d3,0x7d3,0x7d3,0x7d3,0x7d3,0x7d3,0x7db,0x7e3,0x6a5,0x7e6,0x7ee,0x7f5,0x7fa,0x802,
+0x6a5,0x80a,0x812,0x81a,0x81d,0x6a5,0x6a5,0x824,0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x82c,0x834,0x836,
+0x6a5,0x6a5,0x6a5,0x83e,0x842,0x84a,0x852,0x2a8,0x85a,0x860,0x865,0x86d,0x875,0x87b,0x883,0x88a,
+0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x7d3,0x7d3,0x7d3,0x7d3,0x892,0x7d3,0x899,0x8a0,
+0x7d3,0x7d3,0x7d3,0x7d3,0x7d3,0x7d3,0x7d3,0x7d3,0x6a5,0x7cf,0x8a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+0x375,0x8b0,0x8b4,0x8bc,0x2f0,0x2f0,0x2f0,0x8c4,0x32d,0x8cc,0x3db,0x8d3,0x8db,0x8e3,0x8e3,0x34e,
+0x8eb,0x8f3,0x2a8,0x2a8,0x8fb,0x6a5,0x6a5,0x902,0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x90a,0x910,
+0x918,0x920,0x3c6,0x3db,0x928,0x930,0x3db,0x932,0x93a,0x93f,0x3db,0x3db,0x944,0x668,0x6a5,0x94b,
+0x953,0x95b,0x962,0x6a5,0x95b,0x96a,0x6a5,0x953,0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,
#ifndef U_DARWIN
-0xc64,0x3d5,0x3d5,0x3d5,0xbfc,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
+0xd3c,0x3db,0x3db,0x3db,0xcd4,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
#else /* U_DARWIN */
-0xc8f,0x3d5,0x3d5,0x3d5,0xc27,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
+0xd67,0x3db,0x3db,0x3db,0xcff,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
#endif /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
#ifndef U_DARWIN
-0x3d5,0xc6a,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc84,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
+0x3db,0xd42,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xd5c,0x3db,0x3db,0x3db,0x3db,0x3db,
#else /* U_DARWIN */
-0x3d5,0xc95,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xcaf,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
+0x3db,0xd6d,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xd87,0x3db,0x3db,0x3db,0x3db,0x3db,
#endif /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
#ifndef U_DARWIN
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xbb3,0x692,0x692,
-0xbdc,0x3d5,0xc99,0x3d5,0xc01,0xcde,0xcb1,0xc17,0xc62,0x3d5,0x3d5,0xccd,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xce6,0x3d5,0xced,0xc07,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xcb9,0x3d5,0x3d5,0x3d5,0xc1f,0x3d5,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xa44,0x6a5,0x6a5,
+0xcb4,0x3db,0xd74,0x3db,0xcd9,0xdbe,0xd8c,0xcef,0xd3a,0x3db,0x3db,0xda8,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xdc6,0x3db,0xdcd,0xcdf,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xd94,0x3db,0x3db,0x3db,0xcf7,0x3db,
#else /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xbcb,0x692,0x692,
-0xc07,0x3d5,0xcc4,0x3d5,0xc2c,0xd09,0xcdc,0xc42,0xc8d,0x3d5,0x3d5,0xcf8,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xd11,0x3d5,0xd18,0xc32,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xce4,0x3d5,0x3d5,0x3d5,0xc4a,0x3d5,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xa5c,0x6a5,0x6a5,
+0xcdf,0x3db,0xd9f,0x3db,0xd04,0xde9,0xdb7,0xd1a,0xd65,0x3db,0x3db,0xdd3,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xdf1,0x3db,0xdf8,0xd0a,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xdbf,0x3db,0x3db,0x3db,0xd22,0x3db,
#endif /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
#ifndef U_DARWIN
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc42,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xbe0,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xd1a,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xcb8,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
#else /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc6d,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc0b,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xd45,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xce3,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
#endif /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
#ifndef U_DARWIN
-0x3d5,0x3d5,0x3d5,0xbe7,0x3d5,0x3d5,0x3d5,0xca1,0xbee,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#else /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0xc12,0x3d5,0x3d5,0x3d5,0xccc,0xc19,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#endif /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#ifndef U_DARWIN
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xcbd,0x3d5,0x3d5,0xc95,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#else /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xce8,0x3d5,0x3d5,0xcc0,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#endif /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#ifndef U_DARWIN
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc88,0x3d5,
-#else /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xcb3,0x3d5,
-#endif /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#ifndef U_DARWIN
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xca9,0x3d5,0x3d5,0x3d5,
-#else /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xcd4,0x3d5,0x3d5,0x3d5,
-#endif /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#ifndef U_DARWIN
-0x3d5,0x3d5,0x3d5,0xcd2,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#else /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0xcfd,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#endif /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#ifndef U_DARWIN
-0x3d5,0x3d5,0x3d5,0x3d5,0xc49,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#else /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0x3d5,0xc74,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#endif /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#ifndef U_DARWIN
-0x3d5,0xcda,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#else /* U_DARWIN */
-0x3d5,0xd05,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#endif /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#ifndef U_DARWIN
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc0c,0x3d5,0x3d5,0x3d5,0xc11,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#else /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc37,0x3d5,0x3d5,0x3d5,0xc3c,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#endif /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#ifndef U_DARWIN
-0x3d5,0x3d5,0xc79,0xc7d,0x3d5,0x3d5,0x3d5,0xbd4,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#else /* U_DARWIN */
-0x3d5,0x3d5,0xca4,0xca8,0x3d5,0x3d5,0x3d5,0xbff,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#endif /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x654,0x2a0,0x2a0,
-0x935,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x93b,0x692,0x7db,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x943,0x94b,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-0x953,0x95b,0x3d5,0x963,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#ifndef U_DARWIN
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xbbb,0x2a0,0x2a0,
-0xcf5,0xcf8,0xd00,0xd07,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0xd0f,0x2a0,0xd17,0xd18,0xd17,0xd18,
-0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,
-0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,
-0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,
-0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,
-0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,
-0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,
-0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,
-0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,
-0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,
-0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,
-0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,
-0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,
-0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,
-0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,
-0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x96b,0x3d5,0x971,0x3d5,0x3d5,0x5b3,0x2a0,0x979,0x981,0x989,0x3d5,0x3d5,0x3f7,0x991,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x996,0x661,0x3d5,0x99e,0x3d5,0x9a4,0x9a8,
-0x9b0,0x9b8,0x9bf,0x9c7,0x3d5,0x3d5,0x3d5,0x9cd,0x9d5,0x2b8,0x9dd,0x9e5,0x9ea,0x9f2,0x9fa,0xa02,
-0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,
-0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,
-0xa0a,0xa11,0xa19,0x2a0,0x3d5,0x3d5,0x3d5,0xa21,0xa29,0xa31,0xa39,0xa41,0xa48,0x2a0,0x2a0,0x2a0,
-0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x9f2,0xa50,0xa58,0x2a0,0xa60,0x3d5,0xa68,0x2a0,
-0x36d,0xa70,0xa74,0x3d5,0x417,0xa7c,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-#else /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xbd3,0x2a0,0x2a0,
-0xd20,0xd23,0xd2b,0xd32,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0xd3a,0x2a0,0xd42,0xd43,0xd42,0xd43,
-0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,
-0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,
-0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,
-0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,
-0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,
-0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,
-0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,
-0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,
-0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,
-0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,
-0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,
-0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,
-0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,
-0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,
-0xbeb,0x692,0x692,0xbef,0x96b,0x973,0x97b,0x692,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x983,0x3d5,0x989,0x3d5,0x3d5,0x5b3,0x2a0,0x991,0x999,0x9a1,0x3d5,0x3d5,0x3f7,0x9a9,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x9ae,0x661,0x3d5,0x9b6,0x3d5,0x9bc,0x9c0,
-0x9c8,0x9d0,0x9d7,0x9df,0x3d5,0x3d5,0x3d5,0x9e5,0x9ed,0x2b8,0x9f5,0x9fd,0xa02,0xa0a,0xa12,0xa1a,
-0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,
-0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,
-0xa22,0xa29,0xa31,0x2a0,0x3d5,0x3d5,0x3d5,0xa39,0xa41,0xa49,0xa51,0xa59,0xa60,0x2a0,0x2a0,0x2a0,
-0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0xa0a,0xa68,0xa70,0x2a0,0xa78,0x3d5,0xa80,0x2a0,
-0x36d,0xa88,0xa8c,0x3d5,0x417,0xa94,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-#endif /* U_DARWIN */
-0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-#ifndef U_DARWIN
-0xa84,0xa87,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0xa8f,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-0xa97,0xa9e,0xaa6,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-#else /* U_DARWIN */
-0xa9c,0xa9f,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0xaa7,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-0xaaf,0xab6,0xabe,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-#endif /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#ifndef U_DARWIN
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xaae,0x2a0,0x2a0,0x2a0,0x2a0,
-0xab6,0xabe,0xac6,0xace,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-#else /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xac6,0x2a0,0x2a0,0x2a0,0x2a0,
-0xace,0xad6,0xade,0xae6,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-#endif /* U_DARWIN */
-0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-#ifndef U_DARWIN
-0x692,0x692,0x692,0x692,0x692,0x692,0x692,0x8d3,0x692,0xad6,0x692,0xadd,0xae5,0xaeb,0xaef,0x2a0,
-0x692,0x692,0xaf7,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x692,0x692,0xaff,0xb07,0x2a0,0x2a0,0x2a0,0x2a0,
-0xb0f,0xb16,0xb1b,0xb21,0xb29,0xb31,0xb39,0xb13,0xb41,0xb49,0xb51,0xb56,0xb28,0xb0f,0xb16,0xb12,
-0xb21,0xb5e,0xb10,0xb61,0xb13,0xb69,0xb71,0xb79,0xb80,0xb6c,0xb74,0xb7c,0xb83,0xb6f,0xb8b,0xb93,
-0xc90,0x3d5,0x3d5,0xc50,0x3d5,0x3d5,0x3d5,0xc58,0x3d5,0xc72,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#else /* U_DARWIN */
-0x692,0x692,0x692,0x692,0x692,0x692,0x692,0x8d3,0x692,0xaee,0x692,0xaf5,0xafd,0xb03,0xb07,0x2a0,
-0x692,0x692,0xb0f,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x692,0x692,0xb17,0xb1f,0x2a0,0x2a0,0x2a0,0x2a0,
-0xb27,0xb2e,0xb33,0xb39,0xb41,0xb49,0xb51,0xb2b,0xb59,0xb61,0xb69,0xb6e,0xb40,0xb27,0xb2e,0xb2a,
-0xb39,0xb76,0xb28,0xb79,0xb2b,0xb81,0xb89,0xb91,0xb98,0xb84,0xb8c,0xb94,0xb9b,0xb87,0xba3,0xbab,
-0xcbb,0x3d5,0x3d5,0xc7b,0x3d5,0x3d5,0x3d5,0xc83,0x3d5,0xc9d,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#endif /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#ifndef U_DARWIN
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xbf4,0x3d5,0x3d5,0xcc5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc25,0xc2d,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#else /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc1f,0x3d5,0x3d5,0xcf0,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc50,0xc58,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#endif /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#ifndef U_DARWIN
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc11,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc34,0x3d5,0x3d5,0x3d5,
-#else /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc3c,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc5f,0x3d5,0x3d5,0x3d5,
-#endif /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#ifndef U_DARWIN
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc3b,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#else /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc66,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#endif /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#ifndef U_DARWIN
-0x3d5,0x3d5,0x3d5,0xc5d,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#else /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0xc88,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-#endif /* U_DARWIN */
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x8ac,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x417,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
+0x3db,0x3db,0x3db,0xcbf,0x3db,0x3db,0x3db,0xd7c,0xcc6,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#else /* U_DARWIN */
+0x3db,0x3db,0x3db,0xcea,0x3db,0x3db,0x3db,0xda7,0xcf1,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#endif /* U_DARWIN */
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#ifndef U_DARWIN
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xd98,0x3db,0x3db,0xd70,0x3db,0x3db,0x3db,0x3db,0x3db,
+#else /* U_DARWIN */
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xdc3,0x3db,0x3db,0xd9b,0x3db,0x3db,0x3db,0x3db,0x3db,
+#endif /* U_DARWIN */
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#ifndef U_DARWIN
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xd60,0x3db,
+#else /* U_DARWIN */
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xd8b,0x3db,
+#endif /* U_DARWIN */
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#ifndef U_DARWIN
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xd63,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#else /* U_DARWIN */
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xd8e,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#endif /* U_DARWIN */
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#ifndef U_DARWIN
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xd84,0x3db,0x3db,0x3db,
+#else /* U_DARWIN */
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xdaf,0x3db,0x3db,0x3db,
+#endif /* U_DARWIN */
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#ifndef U_DARWIN
+0x3db,0x3db,0x3db,0xdad,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#else /* U_DARWIN */
+0x3db,0x3db,0x3db,0xdd8,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#endif /* U_DARWIN */
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#ifndef U_DARWIN
+0x3db,0x3db,0x3db,0x3db,0xd21,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#else /* U_DARWIN */
+0x3db,0x3db,0x3db,0x3db,0xd4c,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#endif /* U_DARWIN */
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#ifndef U_DARWIN
+0x3db,0xdba,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#else /* U_DARWIN */
+0x3db,0xde5,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#endif /* U_DARWIN */
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#ifndef U_DARWIN
+0x3db,0x3db,0x3db,0x3db,0x3db,0xce4,0x3db,0x3db,0x3db,0xce9,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#else /* U_DARWIN */
+0x3db,0x3db,0x3db,0x3db,0x3db,0xd0f,0x3db,0x3db,0x3db,0xd14,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#endif /* U_DARWIN */
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#ifndef U_DARWIN
+0x3db,0xdb5,0xd51,0xd55,0x3db,0x3db,0x3db,0xcac,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#else /* U_DARWIN */
+0x3db,0xde0,0xd7c,0xd80,0x3db,0x3db,0x3db,0xcd7,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#endif /* U_DARWIN */
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#ifndef U_DARWIN
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xc93,0x2a8,
+#else /* U_DARWIN */
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xcab,0x2a8,
+#endif /* U_DARWIN */
+0x972,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x978,0x6a5,0x80a,0x2a8,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x980,0x988,0x2f0,0x990,0x998,0x2a8,0x2a8,0x2a8,0x9a0,0x9a8,0x2f0,0x9ad,0x9b5,0x2a8,0x2a8,0x9b9,
+0x9c1,0x9c9,0x3db,0x9d1,0x9d9,0x9dc,0x9e3,0x2a8,0x408,0x9eb,0x9f2,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+0x3db,0x9fa,0xa02,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
#ifndef U_DARWIN
-0xb9b,0xba3,0xba3,0xba3,0x2a0,0x2a0,0x2a0,0x2a0,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0xbab,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xc93,0x2a8,0x2a8,
+0xdd5,0xdd8,0xde0,0xde7,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0xdef,0x2a8,0xdf7,0xdf8,0xdf7,0xdf8,
+0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,
+0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,
+0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,
+0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,
+0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,
+0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,
+0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,
+0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,
+0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,
+0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,
+0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,
+0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,
+0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,
+0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,
+0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0x3db,0x3db,0x3db,0xa0a,0x3db,0xa11,0xa16,0xa1b,
+0x3db,0xa23,0x3db,0xa29,0x3db,0x3db,0x5c6,0x2a8,0xa31,0xa39,0xa41,0x3db,0x3db,0xa45,0xa4a,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xa4f,0x674,0x3db,0xa57,0x3db,0xa5d,0xa61,
+0xa69,0xa71,0xa78,0xa80,0x3db,0x3db,0x3db,0xa86,0xa8e,0x2c0,0xa96,0xa9e,0xaa3,0xaab,0xab3,0xabb,
+0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,
+0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,0xc9b,
+0xac3,0xaca,0xad2,0x2a8,0x3db,0x3db,0x3db,0xada,0xae2,0xaea,0xaf2,0xafa,0xb01,0x2a8,0xb08,0xb0c,
+0x2a8,0x2a8,0x2a8,0x2a8,0x678,0x3db,0xb14,0x2a8,0xaab,0xb1c,0xb24,0x2a8,0xb2c,0x3db,0xb34,0x2a8,
+0x375,0xb3c,0xb40,0x3db,0x417,0xb48,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
#else /* U_DARWIN */
-0xbb3,0xbbb,0xbbb,0xbbb,0x2a0,0x2a0,0x2a0,0x2a0,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0xbc3,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xcab,0x2a8,0x2a8,
+0xe00,0xe03,0xe0b,0xe12,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0xe1a,0x2a8,0xe22,0xe23,0xe22,0xe23,
+0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,
+0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,
+0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,
+0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,
+0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,
+0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,
+0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,
+0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,
+0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,
+0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,
+0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,
+0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,
+0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,
+0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,
+0xcc3,0x6a5,0x6a5,0xcc7,0xa0a,0xa12,0xa1a,0x6a5,0x3db,0x3db,0x3db,0xa22,0x3db,0xa29,0xa2e,0xa33,
+0x3db,0xa3b,0x3db,0xa41,0x3db,0x3db,0x5c6,0x2a8,0xa49,0xa51,0xa59,0x3db,0x3db,0xa5d,0xa62,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xa67,0x674,0x3db,0xa6f,0x3db,0xa75,0xa79,
+0xa81,0xa89,0xa90,0xa98,0x3db,0x3db,0x3db,0xa9e,0xaa6,0x2c0,0xaae,0xab6,0xabb,0xac3,0xacb,0xad3,
+0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,
+0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,0xcb3,
+0xadb,0xae2,0xaea,0x2a8,0x3db,0x3db,0x3db,0xaf2,0xafa,0xb02,0xb0a,0xb12,0xb19,0x2a8,0xb20,0xb24,
+0x2a8,0x2a8,0x2a8,0x2a8,0x678,0x3db,0xb2c,0x2a8,0xac3,0xb34,0xb3c,0x2a8,0xb44,0x3db,0xb4c,0x2a8,
+0x375,0xb54,0xb58,0x3db,0x417,0xb60,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
#endif /* U_DARWIN */
-0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
+0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
#ifndef U_DARWIN
-0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,
-0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,
-0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,
-0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcc,
+0xb50,0xb53,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0xb5b,0xb63,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+0xb6b,0xb72,0xb7a,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
#else /* U_DARWIN */
-0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,
-0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,
-0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,
-0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbf7,
+0xb68,0xb6b,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0xb73,0xb7b,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+0xb83,0xb8a,0xb92,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+#endif /* U_DARWIN */
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#ifndef U_DARWIN
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xb82,0x2a8,0x2a8,0x2a8,0x2a8,
+0xb8a,0xb92,0xb9a,0xba2,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+#else /* U_DARWIN */
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xb9a,0x2a8,0x2a8,0x2a8,0x2a8,
+0xba2,0xbaa,0xbb2,0xbba,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+#endif /* U_DARWIN */
+0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+#ifndef U_DARWIN
+0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x90a,0x6a5,0xbaa,0x6a5,0xbb1,0xbb9,0xbbf,0x842,0x2a8,
+0x6a5,0x6a5,0xbc7,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x6a5,0x6a5,0xbcf,0xbd7,0x2a8,0x2a8,0x2a8,0x2a8,
+0xbdf,0xbe6,0xbeb,0xbf1,0xbf9,0xc01,0xc09,0xbe3,0xc11,0xc19,0xc21,0xc26,0xbf8,0xbdf,0xbe6,0xbe2,
+0xbf1,0xc2e,0xbe0,0xc31,0xbe3,0xc39,0xc41,0xc49,0xc50,0xc3c,0xc44,0xc4c,0xc53,0xc3f,0xc5b,0xc63,
+0x6a5,0xc6b,0x6a5,0x6a5,0x902,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+#else /* U_DARWIN */
+0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x90a,0x6a5,0xbc2,0x6a5,0xbc9,0xbd1,0xbd7,0x842,0x2a8,
+0x6a5,0x6a5,0xbdf,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x6a5,0x6a5,0xbe7,0xbef,0x2a8,0x2a8,0x2a8,0x2a8,
+0xbf7,0xbfe,0xc03,0xc09,0xc11,0xc19,0xc21,0xbfb,0xc29,0xc31,0xc39,0xc3e,0xc10,0xbf7,0xbfe,0xbfa,
+0xc09,0xc46,0xbf8,0xc49,0xbfb,0xc51,0xc59,0xc61,0xc68,0xc54,0xc5c,0xc64,0xc6b,0xc57,0xc73,0xc7b,
+0x6a5,0xc83,0x6a5,0x6a5,0x902,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+#endif /* U_DARWIN */
+0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+#ifndef U_DARWIN
+0xd6b,0x3db,0x3db,0xd28,0x3db,0x3db,0x3db,0xd30,0x3db,0xd4a,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#else /* U_DARWIN */
+0xd96,0x3db,0x3db,0xd53,0x3db,0x3db,0x3db,0xd5b,0x3db,0xd75,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#endif /* U_DARWIN */
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#ifndef U_DARWIN
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xccc,0x3db,0x3db,0xda0,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xcfd,0xd05,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#else /* U_DARWIN */
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xcf7,0x3db,0x3db,0xdcb,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xd28,0xd30,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#endif /* U_DARWIN */
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#ifndef U_DARWIN
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xce9,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xd0c,0x3db,0x3db,0x3db,
+#else /* U_DARWIN */
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xd14,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xd37,0x3db,0x3db,0x3db,
+#endif /* U_DARWIN */
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#ifndef U_DARWIN
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xd13,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#else /* U_DARWIN */
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0xd3e,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#endif /* U_DARWIN */
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#ifndef U_DARWIN
+0x3db,0x3db,0x3db,0xd35,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#else /* U_DARWIN */
+0x3db,0x3db,0x3db,0xd60,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#endif /* U_DARWIN */
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x8db,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+#ifndef U_DARWIN
+0x3db,0x3db,0x3db,0x3db,0xc73,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#else /* U_DARWIN */
+0x3db,0x3db,0x3db,0x3db,0xc8b,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+#endif /* U_DARWIN */
+0x417,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+#ifndef U_DARWIN
+0xc7b,0xc83,0xc83,0xc83,0x2a8,0x2a8,0x2a8,0x2a8,0x34e,0x34e,0x34e,0x34e,0x34e,0x34e,0x34e,0xc8b,
+#else /* U_DARWIN */
+0xc93,0xc9b,0xc9b,0xc9b,0x2a8,0x2a8,0x2a8,0x2a8,0x34e,0x34e,0x34e,0x34e,0x34e,0x34e,0x34e,0xca3,
+#endif /* U_DARWIN */
+0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+#ifndef U_DARWIN
+0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,
+0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,
+0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,
+0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca4,
+#else /* U_DARWIN */
+0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,
+0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,
+0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,
+0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xcbb,0xccf,
#endif /* U_DARWIN */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -358,54 +376,52 @@ static const uint16_t propsTrie_index[13612]={
4,4,4,4,4,4,4,4,4,4,0x1a,0x1a,0x1a,0x1a,4,4,
4,4,4,4,4,4,4,4,4,4,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,4,4,4,4,4,0x1a,0x1a,0x1a,
-0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,4,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
+0x1a,0x1a,0x1a,0x1a,4,0x1a,4,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,6,6,6,6,6,6,6,6,
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,6,6,6,6,6,0,0,0,0,0x1a,0x1a,0,0,
+6,6,6,6,6,6,6,6,1,2,1,2,4,0x1a,1,2,
0,0,4,2,2,2,0x17,0,0,0,0,0,0x1a,0x1a,1,0x17,
1,1,1,0,1,0,1,1,2,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,
1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,0,2,2,1,1,
+2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,
1,2,2,2,1,2,1,2,1,2,1,2,1,2,1,2,
1,2,1,2,2,2,2,2,1,2,0x18,1,2,1,1,2,
2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,1,2,0x1b,6,6,6,6,0,7,7,1,2,
+2,2,2,2,1,2,0x1b,6,6,6,6,6,7,7,1,2,
1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
1,2,1,2,1,1,2,1,2,1,2,1,2,1,2,1,
2,1,2,2,1,2,1,2,1,2,1,2,1,2,1,2,
-1,2,1,2,1,2,1,2,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,0,0,4,0x17,0x17,0x17,0x17,0x17,0x17,0,2,2,2,
+1,2,1,2,0,0,0,0,0,0,0,0,0,0,0,0,
+0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,0,0,4,0x17,0x17,
+0x17,0x17,0x17,0x17,0,2,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,0,0x17,0x13,0,
-0,0,0,0,0,6,6,6,6,6,6,6,6,6,6,6,
+2,2,2,2,0,0x17,0x13,0,0,0,0,0,0,6,6,6,
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,6,6,6,0x17,6,0x17,6,6,0x17,6,6,0x17,6,
-0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,
-5,5,5,0x17,0x17,0,0,0,0,0,0,0,0,0,0,0,
-0x10,0x10,0x10,0x10,0,0,0,0,0,0,0,0x19,0x17,0x17,0x1b,0x1b,
-6,6,6,6,6,6,0,0,0,0,0,0x17,0,0,0x17,0x17,
-0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,
-4,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,
+6,6,6,6,6,6,6,6,6,6,6,6,6,6,0x13,6,
+0x17,6,6,0x17,6,6,0x17,6,0,0,0,0,0,0,0,0,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,0,0,0,0,0,5,5,5,0x17,0x17,0,0,0,
+0,0,0,0,0,0,0,0,0x10,0x10,0x10,0x10,0,0,0x18,0x18,
+0x18,0x17,0x17,0x19,0x17,0x17,0x1b,0x1b,6,6,6,6,6,6,6,6,
+6,6,6,0x17,0,0,0x17,0x17,0,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,
+5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,
+6,6,6,6,6,6,6,0,0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,
+0x829,0x929,0x17,0x17,0x17,0x17,5,5,6,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,0x17,5,6,6,
+6,6,6,6,6,0x10,7,6,6,6,6,6,6,4,4,6,
+6,0x1b,6,6,6,6,5,5,0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,
+0x829,0x929,5,5,5,0x1b,0x1b,5,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+0x17,0x17,0x17,0x17,0x17,0x17,0,0x10,5,6,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0,
-0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0x17,0x17,0x17,0x17,5,5,
-6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,0x17,5,6,6,6,6,6,6,6,0x10,7,6,
-6,6,6,6,6,4,4,6,6,0x1b,6,6,6,6,5,5,
-0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,5,5,5,0x1b,0x1b,5,
-0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0x10,
-5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,6,6,6,6,0,0,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,
6,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,5,5,5,5,5,5,
@@ -417,7 +433,7 @@ static const uint16_t propsTrie_index[13612]={
8,6,6,6,6,6,6,6,6,8,8,8,8,6,0,0,
5,6,6,6,6,0,0,0,5,5,5,5,5,5,5,5,
5,5,6,6,0x17,0x17,0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,
-0x17,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,
+0x17,4,5,0,0,0,0,0,0,0,0,5,5,5,5,5,
0,6,8,8,0,5,5,5,5,5,5,5,5,0,0,5,
5,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,0,5,5,5,5,5,5,5,0,5,0,0,0,5,5,
@@ -430,9 +446,9 @@ static const uint16_t propsTrie_index[13612]={
5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,
5,0,5,5,0,5,5,0,5,5,0,0,6,0,8,8,
8,6,6,0,0,0,0,6,6,0,0,6,6,6,0,0,
-0,0,0,0,0,0,0,0,0,5,5,5,5,0,5,0,
+0,6,0,0,0,0,0,0,0,5,5,5,5,0,5,0,
0,0,0,0,0,0,0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,
-6,6,5,5,5,0,0,0,0,0,0,0,0,0,0,0,
+6,6,5,5,5,6,0,0,0,0,0,0,0,0,0,0,
0,6,6,8,0,5,5,5,5,5,5,5,5,5,0,5,
5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,0,5,5,5,5,5,5,5,0,5,5,0,5,5,5,
@@ -442,26 +458,26 @@ static const uint16_t propsTrie_index[13612]={
0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0,0x19,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
5,0,5,5,5,5,5,5,5,0,5,5,0,5,5,5,
-5,5,0,0,6,5,8,6,8,6,6,6,0,0,0,8,
+5,5,0,0,6,5,8,6,8,6,6,6,6,0,0,8,
8,0,0,8,8,6,0,0,0,0,0,0,0,0,6,8,
-0,0,0,0,5,5,0,5,5,5,0,0,0,0,0x29,0x129,
+0,0,0,0,5,5,0,5,5,5,6,6,0,0,0x29,0x129,
0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0x1b,5,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,6,5,0,5,5,5,
5,5,5,0,0,0,5,5,5,0,5,5,5,5,0,0,
0,5,5,0,5,0,5,5,0,0,0,5,5,0,0,0,
5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,
5,5,0,0,0,0,8,8,6,8,8,0,0,0,8,8,
-8,0,8,8,8,6,0,0,0,0,0,0,0,0,0,8,
+8,0,8,8,8,6,0,0,5,0,0,0,0,0,0,8,
0,0,0,0,0,0,0,0,0,0,0x29,0x129,0x229,0x329,0x429,0x529,
0x629,0x729,0x829,0x929,0xa6b,0x646b,0x11ab,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x1b,0,
0,0,0,0,0,8,8,8,0,5,5,5,5,5,5,5,
5,0,5,5,5,0,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,
-0,5,5,5,5,5,0,0,0,0,6,6,6,8,8,8,
+0,5,5,5,5,5,0,0,0,5,6,6,6,8,8,8,
8,0,6,6,6,0,6,6,6,6,0,0,0,0,0,0,
-0,6,6,0,0,0,0,0,0,0,0,0,5,5,0,0,
+0,6,6,0,5,5,0,0,0,0,0,0,5,5,6,6,
0,0,0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,
+0,0,0,0,0x6b,0x16b,0x26b,0x36b,0x16b,0x26b,0x36b,0x1b,0,0,8,8,
0,5,5,5,5,5,5,5,5,0,5,5,5,0,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5,
5,5,5,5,5,5,5,5,0,5,5,5,5,5,0,0,
@@ -471,9 +487,11 @@ static const uint16_t propsTrie_index[13612]={
0x629,0x729,0x829,0x929,0,0x1b,0x1b,0,0,0,0,0,0,0,0,0,
0,0,0,0,5,5,5,5,5,5,5,5,5,0,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,
-0,0,8,8,8,6,6,6,0,0,8,8,8,0,8,8,
+0,5,8,8,8,6,6,6,6,0,8,8,8,0,8,8,
8,6,0,0,0,0,0,0,0,0,0,8,0,0,0,0,
-0,0,0,0,0,0,8,8,0,5,5,5,5,5,5,5,
+0,0,0,0,5,5,6,6,0,0,0x29,0x129,0x229,0x329,0x429,0x529,
+0x629,0x729,0x829,0x929,0xa6b,0x646b,0x11ab,0xa8b,0x88b,0x1a8b,0,0,0,0x1b,5,5,
+5,5,5,5,0,0,8,8,0,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,0,0,0,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,0,5,5,5,5,5,5,5,5,5,0,5,0,0,
@@ -481,7 +499,6 @@ static const uint16_t propsTrie_index[13612]={
8,8,6,6,6,0,6,0,8,8,8,8,8,8,8,8,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,8,8,0x17,0,0,0,0,0,0,0,0,0,0,0,
-0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,6,5,5,6,6,6,6,6,6,6,0,0,0,0,0x19,
5,5,5,5,5,5,4,6,6,6,6,6,6,6,6,0x17,
@@ -498,271 +515,316 @@ static const uint16_t propsTrie_index[13612]={
0x688b,0x788b,0x888b,0x8b,0x1b,6,0x1b,6,0x1b,6,0x14,0x15,0x14,0x15,8,8,
5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,0,0,0,0,0,0,6,6,6,6,6,6,6,
-6,6,6,6,6,6,6,8,6,6,6,6,6,0x17,6,6,
-5,5,5,5,0,0,0,0,6,6,6,6,6,6,6,6,
-0,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+5,0,0,0,0,6,6,6,6,6,6,6,6,6,6,6,
+6,6,6,8,6,6,6,6,6,0x17,6,6,5,5,5,5,
+0,0,0,0,6,6,6,6,6,6,6,6,0,6,6,6,
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
-6,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0,0,0x1b,0x17,0x17,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,5,5,0,5,5,5,5,5,0,5,5,0,
-8,6,6,6,6,8,6,0,0,0,6,6,8,6,0,0,
-0,0,0,0,0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0x17,0x17,
-0x17,0x17,0x17,0x17,5,5,5,5,5,5,8,8,6,6,0,0,
-0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x17,
-4,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,
-0,0,0,5,5,5,5,0,0,0,0,0,5,5,5,5,
+6,6,6,6,6,6,6,6,6,6,6,6,6,0,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,
+0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,0,0,0,
+5,5,5,5,5,5,5,5,5,5,5,8,8,6,6,6,
+6,8,6,6,6,6,6,6,8,6,6,8,8,6,6,5,
+0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0x17,0x17,0x17,0x17,0x17,0x17,
+5,5,5,5,5,5,8,8,6,6,5,5,5,5,6,6,
+6,5,8,8,8,5,5,8,8,8,8,8,8,8,5,5,
+5,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,
+5,5,6,8,8,6,6,8,8,8,8,8,8,6,5,8,
+0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0,0,0,0,0x1b,0x1b,
+1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,0,5,5,5,5,0,0,5,5,5,5,
-5,5,5,0,5,0,5,5,5,5,0,0,5,5,5,5,
-5,5,5,5,5,0,5,5,5,5,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5,
-5,5,0,0,5,5,5,5,5,5,5,0,5,0,5,5,
-5,5,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0,5,5,5,5,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,0,0,0,0,6,0x1b,0x17,0x17,0x17,
-0x17,0x17,0x17,0x17,0x17,0x14b,0x24b,0x34b,0x44b,0x54b,0x64b,0x74b,0x84b,0x94b,0xa6b,0x146b,
-0x1e6b,0x286b,0x326b,0x3c6b,0x466b,0x506b,0x5a6b,0x646b,0x12ab,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,0x17,4,0,0,0,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,0x17,0x17,5,5,5,5,5,
-5,5,5,0,0,0,0,0,0,0,0,0,0xc,5,5,5,
+5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,5,
+5,5,5,0,0,0,0,0,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,0x14,0x15,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,0x17,0x17,0x17,0x116a,0x126a,0x136a,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,0,5,5,5,5,6,6,
-6,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,
-6,0x17,0x17,0,0,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,
-0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,0,5,5,5,0,6,6,
-0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
+5,5,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
+5,0,5,5,5,5,0,0,5,5,5,5,5,5,5,0,
+5,0,5,5,5,5,0,0,5,5,5,5,5,5,5,5,
+5,0,5,5,5,5,0,0,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,0,5,5,5,5,0,0,
+5,5,5,5,5,5,5,0,5,0,5,5,5,5,0,0,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-0x10,0x10,8,6,6,6,6,6,6,6,8,8,8,8,8,8,
-8,8,6,8,8,6,6,6,6,6,6,6,6,6,6,6,
-0x17,0x17,0x17,4,0x17,0x17,0x17,0x19,5,6,0,0,0x29,0x129,0x229,0x329,
-0x429,0x529,0x629,0x729,0x829,0x929,0,0,0,0,0,0,0x6b,0x16b,0x26b,0x36b,
-0x46b,0x56b,0x66b,0x76b,0x86b,0x96b,0,0,0,0,0,0,0x17,0x17,0x17,0x17,
-0x17,0x17,0x13,0x17,0x17,0x17,0x17,6,6,6,0xc,0,0x29,0x129,0x229,0x329,
-0x429,0x529,0x629,0x729,0x829,0x929,0,0,0,0,0,0,5,5,5,4,
+5,0,5,5,5,5,0,0,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,6,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,0,0,0,0,6,0x1b,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+0x17,0x14b,0x24b,0x34b,0x44b,0x54b,0x64b,0x74b,0x84b,0x94b,0xa6b,0x146b,0x1e6b,0x286b,0x326b,0x3c6b,
+0x466b,0x506b,0x5a6b,0x646b,0x12ab,0,0,0,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,
+0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
+5,5,5,5,5,0x17,0x17,5,5,5,5,5,5,5,5,0,
+0,0,0,0,0,0,0,0,0xc,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,0,0,0,6,6,6,8,8,8,8,6,6,8,8,8,
-0,0,0,0,8,8,6,8,8,8,8,8,8,6,6,6,
-0,0,0,0,0x1b,0,0,0,0x17,0x17,0x29,0x129,0x229,0x329,0x429,0x529,
-0x629,0x729,0x829,0x929,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,0,0,5,5,5,5,5,0,0,0,
+5,5,5,0x14,0x15,0,0,0,5,5,5,5,5,5,5,5,
+5,5,5,0x17,0x17,0x17,0x116a,0x126a,0x136a,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
+5,5,5,5,5,0,5,5,5,5,6,6,6,0,0,0,
+0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,6,6,6,0x17,0x17,0,
0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
-5,5,0,0,0,0,0,0,8,8,8,8,8,8,8,8,
-8,8,8,8,8,8,8,8,8,5,5,5,5,5,5,5,
-8,8,0,0,0,0,0,0,0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,
-0x829,0x929,0,0,0,0,0x17,0x17,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+5,5,5,5,5,5,5,5,5,5,6,6,0,0,0,0,
+0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
+5,5,5,5,5,0,5,5,5,0,6,6,0,0,0,0,
+0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,0x10,0x10,8,6,
+6,6,6,6,6,6,8,8,8,8,8,8,8,8,6,8,
+8,6,6,6,6,6,6,6,6,6,6,6,0x17,0x17,0x17,4,
+0x17,0x17,0x17,0x19,5,6,0,0,0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,
+0x829,0x929,0,0,0,0,0,0,0x6b,0x16b,0x26b,0x36b,0x46b,0x56b,0x66b,0x76b,
+0x86b,0x96b,0,0,0,0,0,0,0x17,0x17,0x17,0x17,0x17,0x17,0x13,0x17,
+0x17,0x17,0x17,6,6,6,0xc,0,0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,
+0x829,0x929,0,0,0,0,0,0,5,5,5,4,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,
+5,5,5,5,5,5,5,5,5,6,5,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,
+6,6,6,8,8,8,8,6,6,8,8,8,0,0,0,0,
+8,8,6,8,8,8,8,8,8,6,6,6,0,0,0,0,
+0x1b,0,0,0,0x17,0x17,0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,0,0,5,5,5,5,5,0,0,0,0,0,0,0,
+0,0,0,0,5,5,5,5,5,5,5,5,5,5,0,0,
+0,0,0,0,8,8,8,8,8,8,8,8,8,8,8,8,
+8,8,8,8,8,5,5,5,5,5,5,5,8,8,0,0,
+0,0,0,0,0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0,0,
+0,0,0x17,0x17,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,
-6,8,8,8,0,0,0x17,0x17,6,6,6,6,8,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,6,8,6,6,6,6,6,8,
-6,8,8,8,8,8,6,8,8,5,5,5,5,5,5,5,
-0,0,0,0,0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0x17,0x17,
-0x17,0x17,0x17,0x17,0x17,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,
-6,6,6,6,6,6,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,
-4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+0x1b,0x1b,0x1b,0x1b,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,6,6,8,8,8,
+0,0,0x17,0x17,6,6,6,6,8,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,6,8,6,6,6,6,6,8,6,8,8,8,
+8,8,6,8,8,5,5,5,5,5,5,5,0,0,0,0,
+0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0x17,0x17,0x17,0x17,0x17,0x17,
+0x17,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,6,6,6,6,
+6,6,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,
+6,6,8,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,8,6,6,6,6,8,8,6,6,8,0,0,0,5,5,
+0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0,0,0,0,0,0,
+5,5,5,5,8,8,8,8,8,8,8,8,6,6,6,6,
+6,6,6,6,8,8,6,6,0,0,0,0x17,0x17,0x17,0x17,0x17,
+0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0,0,0,5,5,5,
+0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,4,4,4,4,4,4,0x17,0x17,2,2,2,2,
+2,2,2,2,2,2,2,2,4,4,4,4,4,4,4,4,
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-4,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,4,2,2,2,2,2,2,2,
+4,4,4,4,4,4,4,4,4,4,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,4,4,4,4,4,6,6,6,6,
-6,6,6,6,6,6,6,0,0,0,0,0,0,0,0,0,
+4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,
+4,4,4,4,6,6,6,6,6,6,6,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,6,6,1,2,1,2,1,2,1,2,
-1,2,1,2,1,2,1,2,1,2,1,2,1,2,2,2,
-2,2,2,2,0,0,0,0,1,2,1,2,1,2,1,2,
-1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-1,2,0,0,0,0,0,0,2,2,2,2,2,2,2,2,
-1,1,1,1,1,1,1,1,2,2,2,2,2,2,0,0,
-1,1,1,1,1,1,0,0,2,2,2,2,2,2,2,2,
-1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,
-1,1,1,1,1,1,1,1,2,2,2,2,2,2,0,0,
-1,1,1,1,1,1,0,0,2,2,2,2,2,2,2,2,
-0,1,0,1,0,1,0,1,2,2,2,2,2,2,2,2,
-1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,
-3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,
-3,3,3,3,3,3,3,3,2,2,2,2,2,0,2,2,
-1,1,1,1,3,0x1a,2,0x1a,0x1a,0x1a,2,2,2,0,2,2,
-1,1,1,1,3,0x1a,0x1a,0x1a,2,2,2,2,0,0,2,2,
-1,1,1,1,0,0x1a,0x1a,0x1a,2,2,2,2,2,2,2,2,
-1,1,1,1,1,0x1a,0x1a,0x1a,0,0,2,2,2,0,2,2,
-1,1,1,1,3,0x1a,0x1a,0,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,
-0xc,0xc,0xc,0x10,0x10,0x10,0x10,0x10,0x13,0x13,0x13,0x13,0x13,0x13,0x17,0x17,
-0x1c,0x1d,0x14,0x1c,0x1c,0x1d,0x14,0x1c,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
-0xd,0xe,0x10,0x10,0x10,0x10,0x10,0xc,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
-0x17,0x1c,0x1d,0x17,0x17,0x17,0x17,0x16,0x16,0x17,0x17,0x17,0x18,0x14,0x15,0x17,
-0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x17,0x16,0x17,0x17,0x17,
-0x17,0x17,0x17,0x17,0x17,0x17,0x17,0xc,0x10,0x10,0x10,0x10,0,0,0,0,
-0,0,0x10,0x10,0x10,0x10,0x10,0x10,0x4b,2,0,0,0x44b,0x54b,0x64b,0x74b,
-0x84b,0x94b,0x18,0x18,0x18,0x14,0x15,2,0x4b,0x14b,0x24b,0x34b,0x44b,0x54b,0x64b,0x74b,
-0x84b,0x94b,0x18,0x18,0x18,0x14,0x15,0,4,4,4,4,4,0,0,0,
-0,0,0,0,0,0,0,0,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,
-0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,
-7,6,7,7,7,6,6,6,6,6,6,6,6,6,6,6,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x1b,0x1b,1,0x1b,0x1b,0x1b,0x1b,1,0x1b,0x1b,2,1,1,1,2,2,
-1,1,1,2,0x1b,1,0x1b,0x1b,0x1b,1,1,1,1,1,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,1,0x1b,1,0x1b,1,0x1b,1,1,1,1,0x1b,2,
-1,1,1,1,2,5,5,5,5,2,0x1b,0x1b,2,2,1,1,
-0x18,0x18,0x18,0x18,0x18,1,2,2,2,2,0x1b,0x18,0x1b,0x1b,2,0,
-0,0,0,0x98b,0x118b,0xb8b,0x138b,0x1b8b,0x238b,0xc8b,0x2c8b,0xe8b,0x1e8b,0x2e8b,0x3e8b,0x16b,
-0x16a,0x26a,0x36a,0x46a,0x56a,0x66a,0x76a,0x86a,0x96a,0xa6a,0xb6a,0xc6a,0x326a,0x646a,0x50aa,0x11aa,
-0x16a,0x26a,0x36a,0x46a,0x56a,0x66a,0x76a,0x86a,0x96a,0xa6a,0xb6a,0xc6a,0x326a,0x646a,0x50aa,0x11aa,
-0x11aa,0x51aa,0x12aa,1,2,0,0,0,0,0,0,0,0,0,0,0,
-0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x1b,0x1b,0x1b,0x1b,
-0x18,0x1b,0x1b,0x18,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x18,0x18,0x1b,0x1b,0x18,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+0,0,6,6,1,2,1,2,1,2,1,2,1,2,1,2,
+1,2,1,2,1,2,1,2,1,2,2,2,2,2,2,2,
+2,2,1,2,2,2,2,2,2,2,2,2,1,1,1,1,
+1,1,1,1,2,2,2,2,2,2,0,0,1,1,1,1,
+1,1,0,0,2,2,2,2,2,2,2,2,1,1,1,1,
+1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,
+1,1,1,1,2,2,2,2,2,2,0,0,1,1,1,1,
+1,1,0,0,2,2,2,2,2,2,2,2,0,1,0,1,
+0,1,0,1,2,2,2,2,2,2,2,2,1,1,1,1,
+1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,
+2,2,0,0,2,2,2,2,2,2,2,2,3,3,3,3,
+3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,
+3,3,3,3,2,2,2,2,2,0,2,2,1,1,1,1,
+3,0x1a,2,0x1a,0x1a,0x1a,2,2,2,0,2,2,1,1,1,1,
+3,0x1a,0x1a,0x1a,2,2,2,2,0,0,2,2,1,1,1,1,
+0,0x1a,0x1a,0x1a,2,2,2,2,2,2,2,2,1,1,1,1,
+1,0x1a,0x1a,0x1a,0,0,2,2,2,0,2,2,1,1,1,1,
+3,0x1a,0x1a,0,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0x10,
+0x10,0x10,0x10,0x10,0x13,0x13,0x13,0x13,0x13,0x13,0x17,0x17,0x1c,0x1d,0x14,0x1c,
+0x1c,0x1d,0x14,0x1c,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0xd,0xe,0x10,0x10,
+0x10,0x10,0x10,0xc,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x1c,0x1d,0x17,
+0x17,0x17,0x17,0x16,0x16,0x17,0x17,0x17,0x18,0x14,0x15,0x17,0x17,0x17,0x17,0x17,
+0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+0x17,0x17,0x17,0xc,0x10,0x10,0x10,0x10,0x10,0,0,0,0,0,0x10,0x10,
+0x10,0x10,0x10,0x10,0x4b,2,0,0,0x44b,0x54b,0x64b,0x74b,0x84b,0x94b,0x18,0x18,
+0x18,0x14,0x15,2,0x4b,0x14b,0x24b,0x34b,0x44b,0x54b,0x64b,0x74b,0x84b,0x94b,0x18,0x18,
+0x18,0x14,0x15,0,4,4,4,4,4,0,0,0,0,0,0,0,
+0,0,0,0,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,
+0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,
+6,6,6,6,6,6,6,6,6,7,7,7,7,6,7,7,
+7,6,6,6,6,6,6,6,6,6,6,6,6,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,1,0x1b,
+0x1b,0x1b,0x1b,1,0x1b,0x1b,2,1,1,1,2,2,1,1,1,2,
+0x1b,1,0x1b,0x1b,0x1b,1,1,1,1,1,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+1,0x1b,1,0x1b,1,0x1b,1,1,1,1,0x1b,2,1,1,1,1,
+2,5,5,5,5,2,0x1b,0x1b,2,2,1,1,0x18,0x18,0x18,0x18,
+0x18,1,2,2,2,2,0x1b,0x18,0x1b,0x1b,2,0x1b,0,0,0,0x98b,
+0x118b,0xb8b,0x138b,0x1b8b,0x238b,0xc8b,0x2c8b,0xe8b,0x1e8b,0x2e8b,0x3e8b,0x16b,0x16a,0x26a,0x36a,0x46a,
+0x56a,0x66a,0x76a,0x86a,0x96a,0xa6a,0xb6a,0xc6a,0x326a,0x646a,0x50aa,0x11aa,0x16a,0x26a,0x36a,0x46a,
+0x56a,0x66a,0x76a,0x86a,0x96a,0xa6a,0xb6a,0xc6a,0x326a,0x646a,0x50aa,0x11aa,0x11aa,0x51aa,0x12aa,1,
+2,0x66a,0x326a,0x52aa,0x13aa,0,0,0,0,0,0,0,0x18,0x18,0x18,0x18,
+0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x18,
+0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,
+0x1b,0x1b,0x18,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x14b,0x24b,0x34b,0x44b,
+0,0,0,0,0,0,0,0,0x14b,0x24b,0x34b,0x44b,0x54b,0x64b,0x74b,0x84b,
+0x94b,0xa6b,0xb6b,0xc6b,0xd6b,0xe6b,0xf6b,0x106b,0x116b,0x126b,0x136b,0x146b,0x14b,0x24b,0x34b,0x44b,
0x54b,0x64b,0x74b,0x84b,0x94b,0xa6b,0xb6b,0xc6b,0xd6b,0xe6b,0xf6b,0x106b,0x116b,0x126b,0x136b,0x146b,
-0x14b,0x24b,0x34b,0x44b,0x54b,0x64b,0x74b,0x84b,0x94b,0xa6b,0xb6b,0xc6b,0xd6b,0xe6b,0xf6b,0x106b,
-0x116b,0x126b,0x136b,0x146b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x4b,0xb6b,
-0xc6b,0xd6b,0xe6b,0xf6b,0x106b,0x116b,0x126b,0x136b,0x146b,0x14b,0x24b,0x34b,0x44b,0x54b,0x64b,0x74b,
-0x84b,0x94b,0xa6b,0x4b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x4b,0xb6b,0xc6b,0xd6b,0xe6b,0xf6b,
+0x106b,0x116b,0x126b,0x136b,0x146b,0x14b,0x24b,0x34b,0x44b,0x54b,0x64b,0x74b,0x84b,0x94b,0xa6b,0x4b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,
-0x1b,0,0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,
+0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0,0x1b,0,0x1b,0x1b,0x1b,0x1b,0,0,0,0x1b,0,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14b,0x24b,
-0x34b,0x44b,0x54b,0x64b,0x74b,0x84b,0x94b,0xa6b,0x14b,0x24b,0x34b,0x44b,0x54b,0x64b,0x74b,0x84b,
-0x94b,0xa6b,0x14b,0x24b,0x34b,0x44b,0x54b,0x64b,0x74b,0x84b,0x94b,0xa6b,0x1b,0,0,0,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,
-0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x18,0x18,0x18,0x18,0,0,0,0,0,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-0x18,0x18,0x14,0x15,0x14,0x15,0x14,0x15,0,0,0,0,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,
+0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0x1b,0x1b,0x1b,0x1b,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,
+0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0,0x1b,0,0x1b,0x1b,0x1b,0x1b,0,0,0,0x1b,0,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x14,0x15,
+0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14b,0x24b,0x34b,0x44b,0x54b,0x64b,
+0x74b,0x84b,0x94b,0xa6b,0x14b,0x24b,0x34b,0x44b,0x54b,0x64b,0x74b,0x84b,0x94b,0xa6b,0x14b,0x24b,
+0x34b,0x44b,0x54b,0x64b,0x74b,0x84b,0x94b,0xa6b,0x1b,0,0,0,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x18,0x18,0x18,0x18,
+0x18,0x14,0x15,0x18,0x18,0x18,0x18,0,0x18,0,0,0,0x18,0x18,0x18,0x18,
+0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15,
+0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x14,0x15,0x14,
0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,
-0x15,0x14,0x15,0x14,0x15,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-0x14,0x15,0x14,0x15,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+0x15,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x14,0x15,
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-0x14,0x15,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,
-0,0,0,0,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,0,2,2,2,2,2,2,2,2,2,2,2,2,
+0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x18,0x18,
+0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0,0,0,
+0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,0,1,2,1,1,1,2,2,1,2,1,2,1,
-2,0,0,0,0,0,0,0,2,1,2,2,0,0,0,0,
-0,0,0,0,1,2,1,2,2,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0x17,0x17,0x17,
-0x17,0x88b,0x17,0x17,2,2,2,2,2,2,0,0,0,0,0,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,4,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,
+1,2,1,1,1,2,2,1,2,1,2,1,2,1,1,1,
+0,2,1,2,2,1,2,2,2,2,2,2,2,4,0,0,
+1,2,1,2,2,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0x17,0x17,0x17,0x17,0x88b,0x17,0x17,
+2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,
-5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,0,
-5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,0,
-0x17,0x17,0x1c,0x1d,0x1c,0x1d,0x17,0x17,0x17,0x1c,0x1d,0x17,0x1c,0x1d,0x17,0x17,
-0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x13,0,0,0,0,0x1c,0x1d,0,0,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+5,5,0,0,0,0,0,0,0,0,0,4,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,0,0,0,0,0,0,0,0,0,5,5,5,5,
+5,5,5,0,5,5,5,5,5,5,5,0,5,5,5,5,
+5,5,5,0,5,5,5,5,5,5,5,0,0x17,0x17,0x1c,0x1d,
+0x1c,0x1d,0x17,0x17,0x17,0x1c,0x1d,0x17,0x1c,0x1d,0x17,0x17,0x17,0x17,0x17,0x17,
+0x17,0x17,0x17,0x13,0x17,0x17,0x13,0x17,0x1c,0x1d,0x17,0x17,0x1c,0x1d,0x14,0x15,
+0x14,0x15,0x14,0x15,0x14,0x15,0x17,0x17,0x17,0x17,0x17,4,0x17,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0,0,0,0,0xc,0x17,0x17,0x17,0x1b,4,5,0x6a,0x14,0x15,0x14,0x15,
-0x14,0x15,0x14,0x15,0x14,0x15,0x1b,0x1b,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,
-0x13,0x14,0x15,0x15,0x1b,0x16a,0x26a,0x36a,0x46a,0x56a,0x66a,0x76a,0x86a,0x96a,6,6,
-6,6,6,6,0x13,4,4,4,4,4,0x1b,0x1b,0xa6a,0x146a,0x1e6a,4,
-5,0x17,0x1b,0x1b,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,0,0,6,6,0x1a,
-0x1a,4,4,5,0x13,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,0x17,4,4,4,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,0,0,0,0,5,5,5,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,
+0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,
+0xc,0x17,0x17,0x17,0x1b,4,5,0x6a,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,
+0x14,0x15,0x1b,0x1b,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x13,0x14,0x15,0x15,
+0x1b,0x16a,0x26a,0x36a,0x46a,0x56a,0x66a,0x76a,0x86a,0x96a,6,6,6,6,6,6,
+0x13,4,4,4,4,4,0x1b,0x1b,0xa6a,0x146a,0x1e6a,4,5,0x17,0x1b,0x1b,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,0,0,6,6,0x1a,0x1a,4,4,5,
+0x13,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,0x17,4,4,4,5,0,0,0,0,0,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,0,0,0,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,
0x1b,0x1b,0x16b,0x26b,0x36b,0x46b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x16b,0x26b,0x36b,0x46b,
+0x56b,0x66b,0x76b,0x86b,0x96b,0xa6b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,
+0,0,0,0,0,0,0,0,0x1b,0x156b,0x166b,0x176b,0x186b,0x196b,0x1a6b,0x1b6b,
+0x1c6b,0x1d6b,0x1e6b,0x1f6b,0x206b,0x216b,0x226b,0x236b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x246b,0x256b,0x266b,0x276b,0x286b,0x296b,0x2a6b,
+0x2b6b,0x2c6b,0x2d6b,0x2e6b,0x2f6b,0x306b,0x316b,0x326b,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x16b,0x26b,0x36b,0x46b,0x56b,0x66b,0x76b,0x86b,
-0x96b,0xa6b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,
-0,0,0,0,0x1b,0x156b,0x166b,0x176b,0x186b,0x196b,0x1a6b,0x1b6b,0x1c6b,0x1d6b,0x1e6b,0x1f6b,
-0x206b,0x216b,0x226b,0x236b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x246b,0x256b,0x266b,0x276b,0x286b,0x296b,0x2a6b,0x2b6b,0x2c6b,0x2d6b,0x2e6b,
-0x2f6b,0x306b,0x316b,0x326b,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,0,0,0,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,
+5,5,5,5,5,5,5,5,5,5,5,5,4,0x17,0x17,0x17,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,5,5,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,1,2,1,2,1,2,1,2,1,2,1,2,5,6,
+7,7,7,0x17,0,0,0,0,0,0,0,0,6,6,0x17,4,
+1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
+1,2,1,2,1,2,1,2,0,0,0,0,0,0,0,0,
0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
-0x1a,0x1a,0x1a,4,4,4,4,0,0,0,0,0,0x1a,0x1a,0,0,
+0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,4,4,4,4,4,4,4,4,4,
+0x1a,0x1a,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
+2,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
+1,2,1,2,4,2,2,2,2,2,2,2,2,1,2,1,
+2,1,1,2,1,2,1,2,1,2,1,2,4,0x1a,0x1a,1,
+2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,
+5,5,5,5,5,5,6,5,5,5,6,5,5,5,5,6,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,8,8,6,6,8,0x1b,0x1b,0x1b,0x1b,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,5,5,8,5,
-5,5,6,5,5,5,5,6,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,8,
-8,6,6,8,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
+0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,0x17,0x17,0x17,0x17,0,0,0,0,
+0,0,0,0,8,8,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,8,8,8,8,8,8,8,8,8,8,8,8,
+6,0,0,0,0,0,0,0,0,0,0x17,0x17,0x29,0x129,0x229,0x329,
+0x429,0x529,0x629,0x729,0x829,0x929,0,0,0,0,0,0,5,5,5,5,
+5,5,6,6,6,6,6,6,6,6,0x17,0x17,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,
+6,6,6,6,6,6,6,6,6,6,8,8,0,0,0,0,
+0,0,0,0,0,0,0,0x17,5,5,5,5,5,5,5,5,
+5,6,6,6,6,6,6,8,8,6,6,8,8,6,6,0,
+0,0,0,0,0,0,0,0,5,5,5,6,5,5,5,5,
+5,5,5,5,6,8,0,0,0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,
#ifndef U_DARWIN
-0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,5,5,5,5,
+0x829,0x929,0,0,0x17,0x17,0x17,0x17,5,5,5,5,5,5,5,5,
#else /* U_DARWIN */
-0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,0x1b,0x1b,5,0x19,
+0x829,0x929,0,0,0x17,0x17,0x17,0x17,0x1b,0x1b,5,0x19,6,6,6,6,
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,6,6,6,5,5,5,5,5,6,0x19,0x4b,0xd6a,0xe6a,
-0xf6a,0xd6a,0xe6a,0xf6a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x15,0x17,0x17,0x17,4,0x13,0x13,0x17,0x18,0x18,0x14,0x15,0x18,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,5,5,5,5,
+6,6,5,5,5,5,5,6,0x19,0x4b,0xd6a,0xe6a,0xf6a,0xd6a,0xe6a,0xf6a,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x15,0x17,0x17,0x17,
+4,0x13,0x13,0x17,0x18,0x18,0x14,0x15,0x18,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,5,5,5,5,5,5,5,5,
#endif /* U_DARWIN */
+5,5,5,0x365,5,5,5,5,5,5,5,0xa65,5,5,5,5,
+0x265,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,0x65,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,0x665,5,0x665,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,0xa65,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,0,0,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,
0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
@@ -772,54 +834,59 @@ static const uint16_t propsTrie_index[13612]={
5,5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,
5,0,5,0,5,5,0,5,5,0,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,0x14,0x15,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,0,0,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,
+5,5,5,5,5,5,5,5,5,5,0x14,0x15,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,0,0,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-5,5,5,5,5,5,5,5,5,5,5,5,0x19,0x1b,0,0,
-6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
-0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x14,0x15,0x17,0,0,0,0,0,0,
-6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,
-0x17,0x13,0x13,0x16,0x16,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,
-0x15,0x17,0x17,0x14,0x15,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x17,0x17,0x17,0,
-0x17,0x17,0x17,0x17,0x13,0x14,0x15,0x14,0x15,0x14,0x15,0x17,0x17,0x17,0x18,0x13,
-0x18,0x18,0x18,0,0x17,0x19,0x17,0x17,0,0,0,0,5,5,5,5,
-5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,0,0,0x10,0,0x17,0x17,0x17,0x19,0x17,0x17,0x17,0x14,0x15,0x17,0x18,
-0x17,0x13,0x17,0x17,0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0x17,0x17,
-0x18,0x18,0x18,0x17,0x1a,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0x14,
-0x18,0x15,0x18,0x14,0x15,0x17,0x14,0x15,0x17,0x17,5,5,5,5,5,5,
-5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,4,4,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,
-0,0,5,5,5,5,5,5,0,0,5,5,5,5,5,5,
-0,0,5,5,5,0,0,0,0x19,0x19,0x18,0x1a,0x1b,0x19,0x19,0,
-0x1b,0x18,0x18,0x18,0x18,0x1b,0x1b,0,0,0,0,0,0,0,0,0,
-0,0x10,0x10,0x10,0x1b,0x1b,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,
-5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
+0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
+0x19,0x1b,0,0,6,6,6,6,6,6,6,6,6,6,6,6,
+6,6,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x14,0x15,0x17,0,0,
+0,0,0,0,6,6,6,6,6,6,6,0,0,0,0,0,
+0,0,0,0,0x17,0x13,0x13,0x16,0x16,0x14,0x15,0x14,0x15,0x14,0x15,0x14,
+0x15,0x14,0x15,0x14,0x15,0x17,0x17,0x14,0x15,0x17,0x17,0x17,0x17,0x16,0x16,0x16,
+0x17,0x17,0x17,0,0x17,0x17,0x17,0x17,0x13,0x14,0x15,0x14,0x15,0x14,0x15,0x17,
+0x17,0x17,0x18,0x13,0x18,0x18,0x18,0,0x17,0x19,0x17,0x17,0,0,0,0,
+5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,0,0,0x10,0,0x17,0x17,0x17,0x19,0x17,0x17,0x17,
+0x14,0x15,0x17,0x18,0x17,0x13,0x17,0x17,0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,
+0x829,0x929,0x17,0x17,0x18,0x18,0x18,0x17,0x1a,2,2,2,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+2,2,2,0x14,0x18,0x15,0x18,0x14,0x15,0x17,0x14,0x15,0x17,0x17,5,5,
+5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,4,4,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,0,0,0,5,5,
+5,5,5,5,0,0,5,5,5,5,5,5,0,0,5,5,
+5,5,5,5,0,0,5,5,5,0,0,0,0x19,0x19,0x18,0x1a,
+0x1b,0x19,0x19,0,0x1b,0x18,0x18,0x18,0x18,0x1b,0x1b,0,0,0,0,0,
+0,0,0,0,0,0x10,0x10,0x10,0x1b,0x1b,0,0,5,5,5,5,
+5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,
-0,0,0,0,0x17,0x17,0x1b,0,0,0,0,0x16b,0x26b,0x36b,0x46b,0x56b,
-0x66b,0x76b,0x86b,0x96b,0xa6b,0x146b,0x1e6b,0x286b,0x326b,0x3c6b,0x466b,0x506b,0x5a6b,0x646b,0xc86b,0x30ab,
-0x40ab,0x50ab,0x60ab,0x70ab,0x80ab,0x90ab,0x11ab,0x21ab,0x31ab,0x41ab,0x51ab,0x61ab,0x71ab,0x81ab,0x91ab,0x12ab,
-0x22ab,0x32ab,0x42ab,0x52ab,0x62ab,0x72ab,0x82ab,0x92ab,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0xa8a,0x88a,0x16a,0x56a,0x326a,0x50aa,0x51aa,0x52aa,0x56a,0xa6a,0x326a,0x646a,
-0x50aa,0x11aa,0x51aa,0x56a,0xa6a,0x326a,0x646a,0x50aa,0x11aa,0x12aa,0x52aa,0xa6a,0x16a,0x16a,0x16a,0x26a,
-0x26a,0x26a,0x26a,0x56a,0xa6a,0xa6a,0xa6a,0xa6a,0xa6a,0x1e6a,0x326a,0x326a,0x326a,0x326a,0x646a,0x30aa,
-0x50aa,0x50aa,0x50aa,0x50aa,0x50aa,0x11aa,0x51aa,0x56a,0x326a,0x88b,0x88b,0x118b,0x1a8b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x6b,0,0,0,0,0,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,0,5,5,0,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,0,0,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,0,0,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,0,0,0,0,0,0x17,0x17,0x1b,0,0,0,0,0x16b,
+0x26b,0x36b,0x46b,0x56b,0x66b,0x76b,0x86b,0x96b,0xa6b,0x146b,0x1e6b,0x286b,0x326b,0x3c6b,0x466b,0x506b,
+0x5a6b,0x646b,0xc86b,0x30ab,0x40ab,0x50ab,0x60ab,0x70ab,0x80ab,0x90ab,0x11ab,0x21ab,0x31ab,0x41ab,0x51ab,0x61ab,
+0x71ab,0x81ab,0x91ab,0x12ab,0x22ab,0x32ab,0x42ab,0x52ab,0x62ab,0x72ab,0x82ab,0x92ab,0,0,0,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0xa8a,0x88a,0x16a,0x56a,0x326a,0x50aa,0x51aa,0x52aa,
+0x56a,0xa6a,0x326a,0x646a,0x50aa,0x11aa,0x51aa,0x56a,0xa6a,0x326a,0x646a,0x50aa,0x11aa,0x12aa,0x52aa,0xa6a,
+0x16a,0x16a,0x16a,0x26a,0x26a,0x26a,0x26a,0x56a,0xa6a,0xa6a,0xa6a,0xa6a,0xa6a,0x1e6a,0x326a,0x326a,
+0x326a,0x326a,0x646a,0x30aa,0x50aa,0x50aa,0x50aa,0x50aa,0x50aa,0x11aa,0x51aa,0x56a,0x326a,0x88b,0x88b,0x118b,
+0x1a8b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x6b,0,
+0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,0,0,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0x16b,0x56b,0xa6b,0x326b,0,0,0,0,0,0,0,0,0,0,0,0,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,0x5a6a,5,5,5,5,5,5,5,5,0x90aa,0,0,0,0,0,
@@ -837,7 +904,9 @@ static const uint16_t propsTrie_index[13612]={
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,0,5,5,0,0,0,5,0,0,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,0x16b,0xa6b,0x146b,0x646b,0,0,0,0,0,0x17,5,6,6,6,
+5,5,0x16b,0xa6b,0x146b,0x646b,0,0,0,0,0,0x17,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,0,0,0,0,0,0x17,5,6,6,6,
0,6,6,0,0,0,0,0,6,6,6,6,5,5,5,5,
0,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,
@@ -854,14 +923,13 @@ static const uint16_t propsTrie_index[13612]={
0x16a,0x26a,0x98a,0x118a,0x2c8a,0x98a,0x118a,0xe8a,0xa8a,0xc8a,0xa8a,0,0,0,0,0,
0,0,0,0,0,0,0,0,0x17,0x17,0x17,0x17,0,0,0,0,
0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,
-0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,8,8,6,6,6,0x1b,0x1b,
0x1b,8,8,8,8,8,8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,6,
6,6,6,6,6,6,6,0x1b,0x1b,6,6,6,6,6,6,6,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,6,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,6,6,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,6,
6,0x1b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
@@ -902,15 +970,17 @@ static const uint16_t propsTrie_index[13612]={
2,2,2,2,2,2,1,2,0,0,0x29,0x129,0x229,0x329,0x429,0x529,
0x629,0x729,0x829,0x929,0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0x29,0x129,
0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,
-0x829,0x929,0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0,0x10,0,0,
+0x829,0x929,0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,0x965,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,0,0x10,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0x10,0x10,0x10,0x10,
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,6,6,6,6,
6,6,6,6,6,6,6,6,6,6,6,6,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0x12,0x12,0x12,0x12,
0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
@@ -989,13 +1059,13 @@ static const uint16_t propsTrie_index[13612]={
5,5,5,5,5,5,5,5,0x365,5,5,5,5,5,5,5,
#else /* U_DARWIN */
5,5,5,5,5,5,5,5,5,0x365,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,0x365,5,5,5,5,5,5,5,5,5,5,5,
#endif /* U_DARWIN */
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
#ifndef U_DARWIN
5,5,5,5,5,5,5,0x365,5,5,5,5,5,5,5,5,
#else /* U_DARWIN */
-5,5,5,5,0x365,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,0x365,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x465,
5,5,5,5,5,5,0x465,5,5,5,5,5,5,5,5,5,
@@ -1023,7 +1093,7 @@ static const uint16_t propsTrie_index[13612]={
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
#ifndef U_DARWIN
5,0x465,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-#endif /* not U_DARWIN */
+#endif /* ! U_DARWIN */
5,5,5,5,5,0x565,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
#ifndef U_DARWIN
@@ -1037,66 +1107,75 @@ static const uint16_t propsTrie_index[13612]={
5,5,5,5,5,5,5,5,5,5,0x665,5,5,5,5,5,
0x6465,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,0x665,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,0x765,5,5,
#else /* U_DARWIN */
5,5,5,5,5,5,5,5,0x665,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,0x765,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x765,5,
#endif /* U_DARWIN */
-5,5,5,5,5,5,5,5,5,5,5,5,5,0x765,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
#ifndef U_DARWIN
5,5,0x765,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,0x765,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,0x765,5,5,
#else /* U_DARWIN */
-5,5,5,5,5,5,5,5,5,5,5,5,0x865,5,5,5,
+5,5,5,5,5,5,5,5,5,0x765,5,5,5,5,5,5,
#endif /* U_DARWIN */
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
#ifndef U_DARWIN
-0x865,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,0x865,5,5,5,
#else /* U_DARWIN */
-5,5,5,5,5,5,5,5,5,5,5,5,5,0x965,5,5,
+5,5,5,5,5,5,5,5,0x865,5,5,5,5,5,5,5,
#endif /* U_DARWIN */
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
#ifndef U_DARWIN
-5,0x965,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,0x965,5,5,
#else /* U_DARWIN */
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x965,0x1465,
+5,5,5,5,5,5,5,5,5,0x965,5,5,5,5,5,5,
#endif /* U_DARWIN */
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
#ifndef U_DARWIN
-5,5,0x965,0x1465,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,0x965,5,5,5,5,5,
-5,5,5,5,0xa65,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x965,0x1465,
#else /* U_DARWIN */
+5,5,5,5,5,5,5,5,5,5,0x965,0x1465,5,5,5,5,
+#endif /* U_DARWIN */
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+#ifndef U_DARWIN
5,5,5,5,5,5,0x965,5,5,5,5,5,5,5,5,5,
0xa65,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x11a5,
5,0xa65,5,0x11a5,0x1465,0x1e65,5,5,5,5,5,5,0x2865,5,5,5,
+#else /* U_DARWIN */
+5,5,0x965,5,5,5,5,5,5,5,5,5,0xa65,5,5,5,
#endif /* U_DARWIN */
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
#ifndef U_DARWIN
-5,5,5,0x11a5,5,0xa65,5,0x11a5,0x1465,0x1e65,5,5,5,5,5,5,
-0x2865,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-#else /* U_DARWIN */
5,5,5,5,5,5,5,5,5,5,5,5,5,5,0xa65,5,
5,5,5,0x1e65,5,5,5,5,5,5,5,5,0x2865,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,0x2865,5,5,5,
+#else /* U_DARWIN */
+5,5,5,5,5,5,5,5,5,5,5,0x11a5,5,0xa65,5,0x11a5,
+0x1465,0x1e65,5,5,5,5,5,5,0x2865,5,5,5,5,5,5,5,
#endif /* U_DARWIN */
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
#ifndef U_DARWIN
-5,5,0xa65,5,5,5,5,0x1e65,5,5,5,5,5,5,5,5,
-0x2865,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-0x2865,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,0x6465,5,5,5,5,5,5,5,5,5,5,5,
-#else /* U_DARWIN */
0x6465,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+#else /* U_DARWIN */
+5,5,5,5,5,5,5,5,5,5,0xa65,5,5,5,5,0x1e65,
+5,5,5,5,5,5,5,5,0x2865,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,0x2865,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,0x6465,5,5,5,
+#endif /* U_DARWIN */
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+#ifndef U_DARWIN
+5,5,0x6465,5,5,0x11a5,5,5,5,5,5,5,5,5,5,5,
+#else /* U_DARWIN */
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x6465,5,
+5,0x11a5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
#endif /* U_DARWIN */
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
#ifndef U_DARWIN
-5,5,5,5,5,5,0x6465,5,5,5,5,5,5,5,5,5,
5,5,5,5,0x12a5,5,5,5,5,5,5,5,5,5,5,5,
#else /* U_DARWIN */
-5,5,0x6465,5,5,5,5,5,5,5,5,5,5,5,5,5,
0x12a5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
#endif /* U_DARWIN */
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
@@ -1119,29 +1198,29 @@ static const uint16_t propsTrie_index[13612]={
#endif /* U_DARWIN */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
#ifndef U_DARWIN
-0,0,0,0,0x8c0,0x8e0,0,0,0,0,0,0,0,0,0,0,
-0x900,0x920,0x940,0x920,0x920,0x920,0x920,0x920,0x960,0x920,0x980,0x920,0x920,0x920,0x9a0,0x920,
-0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x9c0,0x920,0x920,0x920,0x920,0x920,0x920,0x920,
-0x920,0x920,0x920,0x920,0x920,0x9e0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xa00,0,0xa20,0,0,0,
+0,0,0,0,0x8c0,0x8e0,0,0,0,0,0,0,0x900,0,0,0,
+0x920,0x940,0x960,0x940,0x940,0x940,0x940,0x940,0x980,0x940,0x9a0,0x940,0x940,0x940,0x9c0,0x940,
+0x940,0x940,0x940,0x940,0x940,0x940,0x940,0x940,0x9e0,0x940,0x940,0x940,0x940,0x940,0x940,0x940,
+0x940,0x940,0x940,0x940,0x940,0xa00,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0xa20,0,0xa40,0,0,0,
#else /* U_DARWIN */
-0x8c0,0x8e0,0,0,0,0,0,0,0,0,0,0,0x900,0x920,0x940,0x920,
-0x920,0x920,0x920,0x920,0x960,0x920,0x980,0x920,0x920,0x920,0x9a0,0x920,0x920,0x920,0x920,0x920,
-0x920,0x920,0x920,0x920,0x9c0,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920,
-0x920,0x9e0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0xa00,0,0xa20,0,0,0,0,0,0,0,
+0x8c0,0x8e0,0,0,0,0,0,0,0x900,0,0,0,0x920,0x940,0x960,0x940,
+0x940,0x940,0x940,0x940,0x980,0x940,0x9a0,0x940,0x940,0x940,0x9c0,0x940,0x940,0x940,0x940,0x940,
+0x940,0x940,0x940,0x940,0x9e0,0x940,0x940,0x940,0x940,0x940,0x940,0x940,0x940,0x940,0x940,0x940,
+0x940,0xa00,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0xa20,0,0xa40,0,0,0,0,0,0,0,
#endif /* U_DARWIN */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
#ifndef U_DARWIN
-0,0,0,0,0,0,0,0,0,0,0,0,0xa40,0xa40,0xa40,0xa40,
+0,0,0,0,0,0,0,0,0,0,0,0,0xa60,0xa60,0xa60,0xa60,
#else /* U_DARWIN */
-0,0,0,0,0,0,0,0,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
+0,0,0,0,0,0,0,0,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,
#endif /* U_DARWIN */
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
+0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,
#ifndef U_DARWIN
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa60
+0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa80
#else /* U_DARWIN */
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa60
+0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa80
#endif /* U_DARWIN */
};
@@ -1149,2624 +1228,2874 @@ static const UTrie propsTrie={
propsTrie_index,
NULL,
utrie_defaultGetFoldingOffset,
- 2688,
+ 2720,
#ifndef U_DARWIN
- 10752,
+ 11616,
#else /* U_DARWIN */
- 10924,
+ 11788,
#endif /* U_DARWIN */
0,
TRUE
};
#ifndef U_DARWIN
-static const uint16_t propsVectorsTrie_index[16924]={
-0x2a8,0x2b0,0x2b8,0x2c0,0x2c8,0x2d0,0x2d8,0x2e0,0xb1b,0xb22,0xb2a,0xb31,0xb39,0xb41,0xb49,0xb51,
-0xb58,0xde3,0xb60,0xb64,0xb67,0xb6d,0xa52,0xb75,0xcdc,0xcdc,0xce4,0x340,0x348,0x350,0x358,0xb7d,
-0xba9,0xca7,0xb85,0xb8d,0x360,0xb93,0xb9b,0xba1,0x860,0x368,0x36d,0x375,0x37c,0xcbc,0x384,0x38a,
-0x392,0x39a,0x3a2,0xbb9,0xbc9,0xbcb,0xbb1,0xbc1,0x3aa,0xdeb,0x3b2,0x91a,0xdf3,0x3ba,0x1016,0x9cc,
-#else /* U_DARWIN */
-static const uint16_t propsVectorsTrie_index[17132]={
-0x2a8,0x2b0,0x2b8,0x2c0,0x2c8,0x2d0,0x2d8,0x2e0,0xb2b,0xb32,0xb3a,0xb41,0xb49,0xb51,0xb59,0xb61,
-0xb68,0xe17,0xb70,0xb74,0xb77,0xb7d,0xa5a,0xb85,0xd10,0xd10,0xd18,0x340,0x348,0x350,0x358,0xb8d,
-0xbb9,0xcd3,0xb95,0xb9d,0x360,0xba3,0xbab,0xbb1,0x860,0x368,0x36d,0x375,0x37c,0xcf0,0x384,0x38a,
-0x392,0x39a,0x3a2,0xbc9,0xbd9,0xbdb,0xbc1,0xbd1,0x3aa,0xe1f,0x3b2,0x91a,0xe27,0x3ba,0x104a,0x9cc,
-#endif /* U_DARWIN */
-0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x3c2,0x3c8,0x3d0,0x3d8,0x3e0,0x3e6,0x3ee,0x3f6,
-0x3fe,0x404,0x40c,0x414,0x41c,0x422,0x42a,0x432,0x43a,0x440,0x448,0x450,0x458,0x460,0x468,0x46f,
-0x477,0x47d,0x485,0x48d,0x495,0x49b,0x4a3,0x4ab,0x4b3,0x4b9,0x4c1,0x4c9,0x4d1,0x4d8,0x4e0,0x4e8,
-#ifndef U_DARWIN
-0x4f0,0x4f4,0x4fc,0x503,0x50b,0x513,0x51b,0x523,0xdad,0xdb5,0x52b,0x533,0x53b,0x543,0x54b,0x550,
-0xe70,0x558,0x560,0x567,0x567,0xbd3,0x56f,0x573,0xd74,0xd74,0x57b,0xd84,0xd85,0x583,0xd7c,0x585,
-0xdfb,0xdfd,0x58d,0xdfd,0x595,0x59a,0x5a2,0xe02,0x5a8,0xdfd,0x5ae,0x5b6,0x959,0xe0a,0xe0a,0x5be,
-0x5c6,0xe12,0xe12,0xe12,0xe12,0xe12,0xe12,0xe12,0xe12,0xe12,0xe12,0xe12,0xe12,0xe12,0xe12,0xe12,
-0xe12,0xe12,0xe12,0x5cb,0x5d3,0xe1a,0xe1a,0x5db,0x868,0x870,0x878,0x880,0xe80,0xe78,0x5e3,0x5eb,
-0x5f3,0xe22,0xe2a,0x5fb,0xe22,0x2e8,0x2a0,0x2a0,0x897,0x89f,0x8a7,0x8ac,0x100e,0x994,0x99c,0xf5e,
-0x922,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x101e,0x1023,0x9d4,0x9dc,0x2a0,0x2a0,0x2a0,0x2a0,
-0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0xf7e,0xf66,0xf76,0xf6e,0xfee,0xfe6,0x936,0x939,
-0xbdb,0xbdb,0xbdb,0xbdb,0x603,0xbdb,0xbdb,0x60b,0x613,0xbe3,0x617,0x61f,0xbe3,0x627,0x62f,0x637,
-0xa62,0xa5a,0xbeb,0x63f,0x647,0x64f,0x655,0x65d,0xa6a,0xa72,0x665,0xa7a,0x66d,0xbf3,0xa82,0xbfa,
-0xa8a,0xa92,0xa9a,0xaa2,0xaaa,0xab1,0xc02,0xc0a,0xab9,0xc12,0xc15,0xc17,0xe32,0xf13,0xf19,0x675,
-0xc1f,0x67d,0x685,0xac1,0xac6,0xac9,0xacf,0xa42,0xad7,0xad7,0xadc,0xa4a,0xae4,0xaec,0xaf4,0xafc,
-0xb04,0xc27,0xb0b,0xb13,0x68d,0x695,0x69a,0x69a,0x6a2,0x6a8,0x6b0,0x6b8,0x6c0,0x6c6,0x888,0x88f,
-0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xf21,0xf21,0xf21,0xf21,0xf29,0xf30,0xf32,0xf39,
-0xf41,0xf45,0xf45,0xf48,0xf45,0xf45,0xf4e,0xf45,0x8b4,0x8bc,0x8bd,0x8bd,0x8bd,0x8bd,0x8bd,0x8bd,
-0xfd6,0x969,0x96d,0x9e4,0xfc6,0xfc6,0xfc6,0x941,0xfce,0x961,0xffe,0x9bc,0x949,0x951,0x951,0x2a0,
-0x9ac,0x9b4,0x9b4,0x9b4,0x6ce,0xe42,0xe42,0x6d6,0xe4a,0xe4a,0xe4a,0xe4a,0xe4a,0xe4a,0x6de,0x2ec,
-0xcd4,0xcec,0x6e6,0xcf4,0x6ee,0xcfc,0xd04,0xd0c,0x6f6,0x6fb,0xd14,0xd1b,0x700,0x708,0x92a,0x92e,
-0x710,0xd2b,0x718,0xd23,0xd34,0xd38,0xd30,0x720,0xd56,0xd56,0xd40,0xd46,0xd56,0xd56,0xd57,0xd4e,
-0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,
-0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,
-0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,
-0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,
-0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,
-0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,
-0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,
-0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,
-0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,
-0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,
-0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,
-0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,
-0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0x728,0xf86,0xf86,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0x730,0x737,0x737,
-0xe5a,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,
-0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,
-0xe60,0xe60,0xe60,0xe60,0x73f,0xe68,0x2f4,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-#else /* U_DARWIN */
-0x4f0,0x4f4,0x4fc,0x503,0x50b,0x513,0x51b,0x523,0xde1,0xde9,0x52b,0x533,0x53b,0x543,0x54b,0x550,
-0xea4,0x558,0x560,0x567,0x567,0xbe3,0x56f,0x573,0xda8,0xda8,0x57b,0xdb8,0xdb9,0x583,0xdb0,0x585,
-0xe2f,0xe31,0x58d,0xe31,0x595,0x59a,0x5a2,0xe36,0x5a8,0xe31,0x5ae,0x5b6,0x959,0xe3e,0xe3e,0x5be,
-0x5c6,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,
-0xe46,0xe46,0xe46,0x5cb,0x5d3,0xe4e,0xe4e,0x5db,0x868,0x870,0x878,0x880,0xeb4,0xeac,0x5e3,0x5eb,
-0x5f3,0xe56,0xe5e,0x5fb,0xe56,0x2e8,0x2a0,0x2a0,0x897,0x89f,0x8a7,0x8ac,0x1042,0x994,0x99c,0xf92,
-0x922,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x1052,0x1057,0x9d4,0x9dc,0x2a0,0x2a0,0x2a0,0x2a0,
-0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0xfb2,0xf9a,0xfaa,0xfa2,0x1022,0x101a,0x936,0x939,
-0xbeb,0xbeb,0xbeb,0xbeb,0x603,0xbeb,0xbeb,0x60b,0x613,0xbf3,0x617,0x61f,0xbf3,0x627,0x62f,0x637,
-0xa6a,0xa62,0xbfb,0x63f,0x647,0x64f,0x655,0x65d,0xa72,0xa7a,0x665,0xa82,0x66d,0xc03,0xa8a,0xc0a,
-0xa92,0xa9a,0xaa2,0xaaa,0xab2,0xab9,0xc12,0xc1a,0xac1,0xc22,0xc25,0xc27,0xe66,0xf47,0xf4d,0x675,
-0xc2f,0x67d,0x685,0xac9,0xace,0xad1,0xad7,0xa4a,0xadf,0xadf,0xae4,0xa52,0xaec,0xaf4,0xafc,0xb04,
-0xb0c,0xc37,0xb13,0xb1b,0x68d,0x695,0x69a,0x69a,0x6a2,0x6a8,0x6b0,0x6b8,0x6c0,0x6c6,0x888,0x88f,
-0xe6e,0xe6e,0xe6e,0xe6e,0xe6e,0xe6e,0xe6e,0xe6e,0xf55,0xf55,0xf55,0xf55,0xf5d,0xf64,0xf66,0xf6d,
-0xf75,0xf79,0xf79,0xf7c,0xf79,0xf79,0xf82,0xf79,0x8b4,0x8bc,0x8bd,0x8bd,0x8bd,0x8bd,0x8bd,0x8bd,
-0x100a,0x969,0x96d,0x9e4,0xffa,0xffa,0xffa,0x941,0x1002,0x961,0x1032,0x9bc,0x949,0x951,0x951,0x2a0,
-0x9ac,0x9b4,0x9b4,0x9b4,0x6ce,0xe76,0xe76,0x6d6,0xe7e,0xe7e,0xe7e,0xe7e,0xe7e,0xe7e,0x6de,0x2ec,
-0xd08,0xd20,0x6e6,0xd28,0x6ee,0xd30,0xd38,0xd40,0x6f6,0x6fb,0xd48,0xd4f,0x700,0x708,0x92a,0x92e,
-0x710,0xd5f,0x718,0xd57,0xd68,0xd6c,0xd64,0x720,0xd8a,0xd8a,0xd74,0xd7a,0xd8a,0xd8a,0xd8b,0xd82,
-0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,
-0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,
-0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,
-0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,
-0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,
-0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,
-0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,
-0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,
-0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,
-0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,
-0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,
-0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,
-0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0x728,0xfba,0xfba,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,
-0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0x730,0x737,0x737,
-0xe8e,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,
-0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,
-0xe94,0xe94,0xe94,0xe94,0x73f,0xe9c,0x2f4,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-#endif /* U_DARWIN */
-0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x98c,0x9ec,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,
-#ifndef U_DARWIN
-0xff6,0x2fc,0x102b,0x9f5,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-#else /* U_DARWIN */
-0x102a,0x2fc,0x105f,0x9f5,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-#endif /* U_DARWIN */
-0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-#ifndef U_DARWIN
-0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,
-0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,
-0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,
-0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,
-0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,
-0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,
-0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,
-0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,
-0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,
-0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,
-0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,
-0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,
-0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,
-0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,
-0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,
-0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,
-0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,
-0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,
-0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,
-0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,
-0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,
-0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0x304,0x2a0,0x2a0,
-0x1043,0x1046,0x104e,0x1054,0x105c,0x105d,0x2a0,0x1065,0x2a0,0x1065,0x2a0,0x1065,0x2a0,0x1065,0x2a0,0x1065,
-0x2a0,0x1065,0x2a0,0x1065,0x2a0,0x1065,0x2a0,0x1065,0x2a0,0x1065,0x106d,0x1065,0x1075,0x1076,0x107e,0x107f,
-0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,
-0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,
-#else /* U_DARWIN */
-0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,
-0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,
-0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,
-0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,
-0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,
-0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,
-0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,
-0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,
-0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,
-0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,
-0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,
-0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,
-0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,
-0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,
-0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,
-0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,
-0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,
-0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,
-0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,
-0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,
-0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,
-0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0x304,0x2a0,0x2a0,
-0x1077,0x107a,0x1082,0x1088,0x1090,0x1091,0x2a0,0x1099,0x2a0,0x1099,0x2a0,0x1099,0x2a0,0x1099,0x2a0,0x1099,
-0x2a0,0x1099,0x2a0,0x1099,0x2a0,0x1099,0x2a0,0x1099,0x2a0,0x1099,0x10a1,0x1099,0x10a9,0x10aa,0x10b2,0x10b3,
-0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,
-0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,
-#endif /* U_DARWIN */
-0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,
-0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,
-0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,
-0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,
-0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,
-0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,
-0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,
-0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,
-0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,
-0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,
-0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,
-0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,
-#ifndef U_DARWIN
-0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xd67,0xd67,0xd67,0xd67,0xd67,0xd67,0xd67,0xd67,
-0xd6c,0x747,0xf56,0x74d,0x1006,0x1006,0x751,0x758,0x760,0x768,0x770,0xc3f,0xc46,0x778,0x77d,0xc4e,
-0xc84,0xc84,0xc2f,0xc37,0xc56,0xc7b,0xc7c,0xc8c,0xc5e,0xc63,0x785,0xc6b,0x78d,0xc73,0x795,0x799,
-0x9c4,0x7a1,0x7a9,0x7b1,0xc94,0xc9a,0xc9f,0x7b9,0x7c9,0xcc4,0xccc,0xcaf,0xcb4,0x7d1,0x7d9,0x7c1,
-0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,
-0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdc5,0xdc5,0xdc5,0xdc5,
-0x8c5,0x8cc,0x8d4,0x8dc,0xf8e,0xf8e,0xf8e,0x8e4,0x8ec,0x8ef,0xfbe,0xfb6,0x30c,0x2a0,0x2a0,0x2a0,
-0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x7e1,0x7e9,0x314,0x2a0,0x8f7,0xfde,0x9a4,0x2a0,
-0xe95,0xe88,0xe8d,0xf96,0x8ff,0x31c,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-#else /* U_DARWIN */
-0xa42,0xc3f,0xc43,0xcdb,0xc4b,0xb23,0xc53,0xc3f,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,
-0xda0,0x747,0xf8a,0x74d,0x103a,0x103a,0x751,0x758,0x760,0x768,0x770,0xc6b,0xc72,0x778,0x77d,0xc7a,
-0xcb0,0xcb0,0xc5b,0xc63,0xc82,0xca7,0xca8,0xcb8,0xc8a,0xc8f,0x785,0xc97,0x78d,0xc9f,0x795,0x799,
-0x9c4,0x7a1,0x7a9,0x7b1,0xcc0,0xcc6,0xccb,0x7b9,0x7c9,0xcf8,0xd00,0xce3,0xce8,0x7d1,0x7d9,0x7c1,
-0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,
-0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf9,0xdf9,0xdf9,0xdf9,
-0x8c5,0x8cc,0x8d4,0x8dc,0xfc2,0xfc2,0xfc2,0x8e4,0x8ec,0x8ef,0xff2,0xfea,0x30c,0x2a0,0x2a0,0x2a0,
-0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x7e1,0x7e9,0x314,0x2a0,0x8f7,0x1012,0x9a4,0x2a0,
-0xec9,0xebc,0xec1,0xfca,0x8ff,0x31c,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-#endif /* U_DARWIN */
-0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-0x907,0x90a,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x9fd,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-0x975,0x97c,0x984,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-#ifndef U_DARWIN
-0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,
-0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0xa05,0xa09,0xa09,0xa09,0xa09,
-0x103b,0x103b,0x103b,0xa11,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-#else /* U_DARWIN */
-0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,
-0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0xa05,0xa09,0xa09,0xa09,0xa09,
-0x106f,0x106f,0x106f,0xa11,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-#endif /* U_DARWIN */
-0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-#ifndef U_DARWIN
-0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0x7f1,0xea5,0x7f9,0xea6,0xeae,0xeb6,0xebc,0x801,0x809,
-0xfae,0xfae,0x324,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0xf9e,0xf9e,0x912,0xa19,0x2a0,0x2a0,0x2a0,0x2a0,
-0xee5,0xee0,0x811,0xee3,0x819,0x821,0x829,0xee9,0x831,0x839,0x841,0xee2,0xeea,0xee5,0xee0,0xee8,
-0xee3,0xeeb,0xee6,0xee1,0xee9,0x848,0xec4,0xecc,0xed3,0xeda,0xec7,0xecf,0xed6,0xedd,0x850,0xf0b,
-#else /* U_DARWIN */
-0xed1,0xed1,0xed1,0xed1,0xed1,0xed1,0xed1,0x7f1,0xed9,0x7f9,0xeda,0xee2,0xeea,0xef0,0x801,0x809,
-0xfe2,0xfe2,0x324,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0xfd2,0xfd2,0x912,0xa19,0x2a0,0x2a0,0x2a0,0x2a0,
-0xf19,0xf14,0x811,0xf17,0x819,0x821,0x829,0xf1d,0x831,0x839,0x841,0xf16,0xf1e,0xf19,0xf14,0xf1c,
-0xf17,0xf1f,0xf1a,0xf15,0xf1d,0x848,0xef8,0xf00,0xf07,0xf0e,0xefb,0xf03,0xf0a,0xf11,0x850,0xf3f,
-#endif /* U_DARWIN */
-0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x328,
-#ifndef U_DARWIN
-0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,
-0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,
-0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,
-0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xa2a,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,
-#else /* U_DARWIN */
-0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,
-0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,
-0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,
-0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xa2a,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,
-#endif /* U_DARWIN */
-0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,
-0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,
+static const uint16_t propsVectorsTrie_index[18316]={
+#else /* U_DARWIN */
+static const uint16_t propsVectorsTrie_index[18496]={
+#endif /* U_DARWIN */
+0x2b0,0x2b8,0x2c0,0x2c8,0x2d0,0x2d8,0x2e0,0x2e8,0xa6f,0xa76,0xa7e,0xa85,0xa8d,0xa95,0xa9d,0xaa5,
#ifndef U_DARWIN
-0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,
+0xaac,0xe50,0xab4,0xab8,0xabb,0xac1,0xac9,0xad1,0xcf9,0xcf9,0xd01,0x340,0x348,0x350,0xae1,0xad9,
+0xb15,0xd09,0xaf1,0xaf9,0xae9,0xaff,0xb07,0xb0d,0xfaa,0x358,0x35d,0x365,0x36c,0xb1d,0x374,0x37a,
+0x382,0x38a,0x392,0xb2d,0xb3d,0xb3f,0xb25,0xb35,0x39a,0xe58,0x3a2,0x1067,0xe60,0x3aa,0x10e7,0x978,
#else /* U_DARWIN */
-0xf37,0xf37,0xf37,0xf37,0xf37,0xf37,0xf37,0xf37,0xf37,0xf37,0xf37,0xf37,0xf37,0xf37,0xf37,0xf37,
+0xaac,0xe7d,0xab4,0xab8,0xabb,0xac1,0xac9,0xad1,0xd1e,0xd1e,0xd26,0x340,0x348,0x350,0xae1,0xad9,
+0xb15,0xd2e,0xaf1,0xaf9,0xae9,0xaff,0xb07,0xb0d,0xfd7,0x358,0x35d,0x365,0x36c,0xb1d,0x374,0x37a,
+0x382,0x38a,0x392,0xb2d,0xb3d,0xb3f,0xb25,0xb35,0x39a,0xe85,0x3a2,0x1094,0xe8d,0x3aa,0x1114,0x978,
#endif /* U_DARWIN */
-0xa32,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,
-0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,
-0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa22,
+0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x3b2,0x3b8,0x3c0,0x3c8,0x3d0,0x3d6,0x3de,0x3e6,
+0x3ee,0x3f4,0x3fc,0x404,0x40c,0x412,0x41a,0x422,0x42a,0x430,0x438,0x440,0x448,0x450,0x458,0x45f,
+0x467,0x46d,0x475,0x47d,0x485,0x48b,0x493,0x49b,0x4a3,0x4a9,0x4b1,0x4b9,0x4c1,0x4c8,0x4d0,0x4d8,
#ifndef U_DARWIN
-0x858,0xef3,0xef3,0xef3,0x330,0x330,0x330,0x330,0xfa6,0xfa6,0xfa6,0xfa6,0xfa6,0xfa6,0xfa6,0x338,
+0x4e0,0x4e4,0x4ec,0x4f3,0x4fb,0x503,0x50b,0x513,0xdfa,0xe02,0x51b,0x523,0x52b,0x533,0x53b,0x541,
+0xe78,0xe68,0xe70,0x111c,0x549,0xb47,0x551,0x555,0xd5f,0xd5f,0x55d,0xb57,0xb58,0x565,0xb4f,0x567,
+0xe80,0xe82,0x56f,0xe82,0x577,0x57c,0x584,0xe87,0x58a,0xe82,0x590,0x598,0x910,0xe8f,0xe8f,0x5a0,
+0x5a8,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,
+0xe97,0xe97,0xe97,0x5ad,0x5b5,0xe9f,0xe9f,0x5bd,0x830,0x838,0x840,0x848,0xeaf,0xea7,0x5c5,0x5cd,
+0x5d5,0xeb7,0xebf,0x5dd,0xeb7,0x2f0,0x2a8,0x2a8,0x858,0x860,0x868,0x86d,0x1097,0x943,0x94b,0xff7,
+0x8e0,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x10ef,0x10f4,0x980,0x988,0x1130,0x9d2,0x2a8,0x2a8,
+0x1138,0x9da,0x9e2,0x1140,0x2a8,0x2a8,0x2a8,0x2a8,0x1017,0xfff,0x100f,0x1007,0x10af,0x10a7,0x106f,0x8f0,
#else /* U_DARWIN */
-0x858,0xf27,0xf27,0xf27,0x330,0x330,0x330,0x330,0xfda,0xfda,0xfda,0xfda,0xfda,0xfda,0xfda,0x338,
+0x4e0,0x4e4,0x4ec,0x4f3,0x4fb,0x503,0x50b,0x513,0xe27,0xe2f,0x51b,0x523,0x52b,0x533,0x53b,0x541,
+0xea5,0xe95,0xe9d,0x1149,0x549,0xb47,0x551,0x555,0xd8c,0xd8c,0x55d,0xb57,0xb58,0x565,0xb4f,0x567,
+0xead,0xeaf,0x56f,0xeaf,0x577,0x57c,0x584,0xeb4,0x58a,0xeaf,0x590,0x598,0x910,0xebc,0xebc,0x5a0,
+0x5a8,0xec4,0xec4,0xec4,0xec4,0xec4,0xec4,0xec4,0xec4,0xec4,0xec4,0xec4,0xec4,0xec4,0xec4,0xec4,
+0xec4,0xec4,0xec4,0x5ad,0x5b5,0xecc,0xecc,0x5bd,0x830,0x838,0x840,0x848,0xedc,0xed4,0x5c5,0x5cd,
+0x5d5,0xee4,0xeec,0x5dd,0xee4,0x2f0,0x2a8,0x2a8,0x858,0x860,0x868,0x86d,0x10c4,0x943,0x94b,0x1024,
+0x8e0,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x111c,0x1121,0x980,0x988,0x115d,0x9d2,0x2a8,0x2a8,
+0x1165,0x9da,0x9e2,0x116d,0x2a8,0x2a8,0x2a8,0x2a8,0x1044,0x102c,0x103c,0x1034,0x10dc,0x10d4,0x109c,0x8f0,
#endif /* U_DARWIN */
-0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,
-0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,
-0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,
+0xb60,0xb60,0xb60,0xb60,0xb63,0xb60,0xb60,0xb6b,0x5e5,0xb73,0x5e9,0x5f1,0xb73,0x5f9,0x601,0x609,
+0xb83,0xb7b,0xb8b,0x611,0x619,0x621,0x627,0x62f,0xb93,0xb9b,0x637,0xba3,0x63f,0xbab,0xbb2,0xbba,
#ifndef U_DARWIN
-0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,
-0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,
-0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,
-0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd8d,
-0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,
-0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,
-0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,
-0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xd95,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x426,0x621,0x450,0x450,0x54c,0x495,0x495,
-0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,
-0x747,0x561,0x717,0x3ff,0x6fc,0x6d2,0x3ff,0x71a,0x69f,0x474,0x3ff,0x6ff,0x61b,0x573,0x61e,0x74a,
-0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x618,0x61b,0x402,0x402,0x402,0x561,
-0x3ff,0x417,0x417,0x417,0x417,0x417,0x417,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,
-0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x69f,0x6fc,0x474,0x408,0x40b,
-0x405,0x414,0x414,0x414,0x414,0x414,0x414,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,
-0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x69f,0x447,0x474,0x402,0x495,
-0x498,0x498,0x498,0x498,0x498,0x750,0x498,0x498,0x498,0x498,0x498,0x498,0x498,0x498,0x498,0x498,
-0x498,0x498,0x498,0x498,0x498,0x498,0x498,0x498,0x498,0x498,0x498,0x498,0x498,0x498,0x498,0x498,
-0x567,0x17d,0x6d5,0x702,0x6ed,0x702,0x41a,0x17d,0x183,0x1f2,0x189,0x708,0x41d,0x43b,0x3a8,0x420,
-0x6c0,0x6f0,0x17a,0x17a,0x44d,0x1f5,0x17d,0x186,0x183,0x17a,0x189,0x708,0x177,0x177,0x177,0x17d,
-0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x3b1,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,
-0x3b1,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x180,0x3b1,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x3b1,0x3ab,
-0x3ae,0x3ae,0x1f8,0x1f8,0x1f8,0x1f8,0x3ab,0x1f8,0x3ae,0x3ae,0x3ae,0x1f8,0x3ae,0x3ae,0x1f8,0x1f8,
-0x3ab,0x1f8,0x3ae,0x3ae,0x1f8,0x1f8,0x1f8,0x180,0x3ab,0x3ae,0x3ae,0x1f8,0x3ae,0x1f8,0x3ab,0x1f8,
-0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x8b8,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x8d9,0x8d9,0x8dc,0x8dc,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d,0x8d,0x8d,0x8d,
-0x8ee,0xa41,0x8ee,0x8ee,0x8ee,0xa41,0x8ee,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xbf1,0xbf1,0xbf1,0xc4b,0xc4b,0xc42,0xc42,0xc4b,0xbee,0xbee,0xbee,0xbee,0x138,0x138,0x138,0x138,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x7c5,0x7c5,0x7c5,0x7c5,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0x10b,0x10b,0x10b,0x10b,0x10b,
-#else /* U_DARWIN */
-0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,
-0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,
-0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,
-0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdc1,
-0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,
-0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,
-0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,
-0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdc9,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0xbc2,0xbca,0xbd2,0xbda,0xbe2,0xbe9,0xbf1,0xbf9,0xc01,0xc09,0xc0c,0xc0e,0xec7,0xf9c,0xfa2,0x647,
+0xc16,0x64f,0x657,0xd11,0xd16,0xd19,0xd1f,0xc1e,0xd27,0xd27,0xc2e,0xc26,0xc36,0xc3e,0xc46,0xc4e,
+0xc56,0xc5e,0xc66,0xc6e,0x65f,0x667,0x66f,0x670,0x678,0x67e,0x686,0x68e,0x696,0x69c,0x850,0xfb2,
+0xecf,0xecf,0xecf,0xecf,0xecf,0xecf,0xecf,0xecf,0xfba,0xfba,0xfba,0xfba,0xfc2,0xfc9,0xfcb,0xfd2,
+0xfda,0xfde,0xfde,0xfe1,0xfde,0xfde,0xfe7,0xfde,0x101f,0x10df,0x875,0x87b,0x87b,0x87b,0x87b,0x87b,
+0x1087,0x920,0x924,0x990,0x1077,0x1077,0x1077,0x8f8,0x107f,0x918,0x10c7,0x968,0x900,0x908,0x908,0x1148,
+0x10b7,0x95b,0x960,0x960,0x6a4,0xed7,0xed7,0x6ac,0xedf,0xedf,0xedf,0xedf,0xedf,0xedf,0x6b4,0x2f4,
+0xd47,0xc76,0x6bc,0xd67,0x6c4,0xd77,0xd7f,0xd6f,0x6cc,0x6d1,0xd87,0xd8e,0x6d6,0x6de,0x10d7,0x8e8,
+0x6e6,0xd9e,0x6ee,0xd96,0xdab,0xdaf,0xda3,0x6f6,0xdd6,0xdd6,0xdb7,0xdbd,0xdcd,0xdcd,0xdce,0xdc5,
+0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,
+0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,
+0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,
+0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,
+0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,
+0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,
+0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,
+0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,
+0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,
+0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,
+0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,
+0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,
+0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0xee7,0x6fe,0x1027,0x1027,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,
+0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xdde,0xde5,0x706,0x707,
+0xeef,0xef5,0xef5,0xef5,0xef5,0xef5,0xef5,0xef5,0xef5,0xef5,0xef5,0xef5,0xef5,0xef5,0xef5,0xef5,
+0xef5,0xef5,0xef5,0xef5,0xef5,0xef5,0xef5,0xef5,0xef5,0xef5,0xef5,0xef5,0xef5,0xef5,0xef5,0xef5,
+0xef5,0xef5,0xef5,0xef5,0x70f,0xefd,0x2fc,0x2a8,0x1154,0x1154,0x1154,0x1154,0x1154,0x1154,0x1154,0x1154,
+0x1150,0x9ea,0x115c,0x9f2,0x9fa,0x2a8,0x2a8,0x2a8,0x108f,0x10fc,0x1124,0x1128,0x998,0x99c,0x99c,0x99e,
+0x10bf,0x304,0x1104,0x9a6,0x1164,0x1167,0xa02,0x2a8,0x1177,0x116f,0xa0a,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+0x117f,0xa12,0xa1a,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,
+0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,
+0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,
+0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,
+0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,
+0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,
+0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,
+0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,
+0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,
+0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,
+0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,
+0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,
+0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,
+0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,
+0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,
+0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,
+0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,
+0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,
+0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,
+0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,
+0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,
+0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0xe48,0xe42,0xe43,0xe44,0xe45,0xe46,0xe47,0x30c,0x2a8,0x2a8,
+0x119f,0x11a2,0x11aa,0x11b0,0x11b8,0x11b9,0x2a8,0x11c1,0x2a8,0x11c1,0x2a8,0x11c1,0x2a8,0x11c1,0x2a8,0x11c1,
+0x2a8,0x11c1,0x2a8,0x11c1,0x2a8,0x11c1,0x2a8,0x11c1,0x2a8,0x11c1,0x11c9,0x11c1,0x11d1,0x11d2,0x11da,0x11db,
+0xe1a,0xe1a,0xe1a,0xe1a,0xe1a,0xe1a,0xe1a,0xe1a,0xe1a,0xe1a,0xe1a,0xe1a,0xe1a,0xe1a,0xe1a,0xe1a,
+0xe1a,0xe1a,0xe1a,0xe1a,0xe1a,0xe1a,0xe1a,0xe1a,0xe1a,0xe1a,0xe1a,0xe1a,0xe1a,0xe1a,0xe1a,0xe1a,
+0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,
+0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,
+0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,
+0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,
+0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,
+0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,
+0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,
+0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,
+0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,
+0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,
+0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,
+0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,
+0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xded,0xded,0xded,0xded,0xded,0xded,0xded,0xded,
+0xdf2,0x717,0xfef,0x71d,0x10cf,0x10cf,0x721,0x728,0x730,0x738,0x740,0xc96,0xc9d,0x748,0x74d,0xca5,
+0xcd6,0xcd6,0xc86,0xc8e,0xcad,0xccd,0xcce,0xcde,0xcb5,0xc7e,0x755,0xcbd,0x75d,0xcc5,0x765,0x769,
+0x970,0x771,0x779,0x781,0xce6,0xcec,0xcf1,0x789,0x799,0xd4f,0xd57,0xd3f,0xd37,0x7a1,0x7a9,0x791,
+0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,
+0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe12,0xe12,0xe12,0xe12,
+0x883,0x88a,0x892,0x89a,0x102f,0x102f,0x102f,0x8a2,0x8aa,0x8ad,0x105f,0x1057,0x8d8,0xa22,0xa26,0xa2a,
+0x2a8,0x2a8,0x2a8,0x2a8,0xa32,0x1187,0xa3a,0x2a8,0x7b1,0x7b9,0x314,0x2a8,0x8b5,0x109f,0x953,0x2a8,
+0xf12,0xf05,0xf0a,0x1037,0x8bd,0x31c,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+#else /* U_DARWIN */
+0xbc2,0xbca,0xbd2,0xbda,0xbe2,0xbe9,0xbf1,0xbf9,0xc01,0xc09,0xc0c,0xc0e,0xef4,0xfc9,0xfcf,0x647,
+0xc16,0x64f,0x657,0xd36,0xd3b,0xd3e,0xd44,0xc1e,0xd4c,0xd4c,0xc2e,0xc26,0xc36,0xc3e,0xc46,0xc4e,
+0xc56,0xc5e,0xc66,0xc6e,0x65f,0x667,0x66f,0x670,0x678,0x67e,0x686,0x68e,0x696,0x69c,0x850,0xfdf,
+0xefc,0xefc,0xefc,0xefc,0xefc,0xefc,0xefc,0xefc,0xfe7,0xfe7,0xfe7,0xfe7,0xfef,0xff6,0xff8,0xfff,
+0x1007,0x100b,0x100b,0x100e,0x100b,0x100b,0x1014,0x100b,0x104c,0x110c,0x875,0x87b,0x87b,0x87b,0x87b,0x87b,
+0x10b4,0x920,0x924,0x990,0x10a4,0x10a4,0x10a4,0x8f8,0x10ac,0x918,0x10f4,0x968,0x900,0x908,0x908,0x1175,
+0x10e4,0x95b,0x960,0x960,0x6a4,0xf04,0xf04,0x6ac,0xf0c,0xf0c,0xf0c,0xf0c,0xf0c,0xf0c,0x6b4,0x2f4,
+0xd74,0xc76,0x6bc,0xd94,0x6c4,0xda4,0xdac,0xd9c,0x6cc,0x6d1,0xdb4,0xdbb,0x6d6,0x6de,0x1104,0x8e8,
+0x6e6,0xdcb,0x6ee,0xdc3,0xdd8,0xddc,0xdd0,0x6f6,0xe03,0xe03,0xde4,0xdea,0xdfa,0xdfa,0xdfb,0xdf2,
+0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,
+0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,
+0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,
+0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,
+0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,
+0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,
+0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,
+0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,
+0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,
+0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,
+0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,
+0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,
+0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0xf14,0x6fe,0x1054,0x1054,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,
+0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe12,0x706,0x707,
+0xf1c,0xf22,0xf22,0xf22,0xf22,0xf22,0xf22,0xf22,0xf22,0xf22,0xf22,0xf22,0xf22,0xf22,0xf22,0xf22,
+0xf22,0xf22,0xf22,0xf22,0xf22,0xf22,0xf22,0xf22,0xf22,0xf22,0xf22,0xf22,0xf22,0xf22,0xf22,0xf22,
+0xf22,0xf22,0xf22,0xf22,0x70f,0xf2a,0x2fc,0x2a8,0x1181,0x1181,0x1181,0x1181,0x1181,0x1181,0x1181,0x1181,
+0x117d,0x9ea,0x1189,0x9f2,0x9fa,0x2a8,0x2a8,0x2a8,0x10bc,0x1129,0x1151,0x1155,0x998,0x99c,0x99c,0x99e,
+0x10ec,0x304,0x1131,0x9a6,0x1191,0x1194,0xa02,0x2a8,0x11a4,0x119c,0xa0a,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+0x11ac,0xa12,0xa1a,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,
+0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,
+0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,
+0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,
+0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,
+0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,
+0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,
+0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,
+0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,
+0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,
+0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,
+0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,
+0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,
+0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,
+0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,
+0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,
+0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,
+0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,
+0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,
+0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,
+0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,
+0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0xe75,0xe6f,0xe70,0xe71,0xe72,0xe73,0xe74,0x30c,0x2a8,0x2a8,
+0x11cc,0x11cf,0x11d7,0x11dd,0x11e5,0x11e6,0x2a8,0x11ee,0x2a8,0x11ee,0x2a8,0x11ee,0x2a8,0x11ee,0x2a8,0x11ee,
+0x2a8,0x11ee,0x2a8,0x11ee,0x2a8,0x11ee,0x2a8,0x11ee,0x2a8,0x11ee,0x11f6,0x11ee,0x11fe,0x11ff,0x1207,0x1208,
+0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,
+0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,
+0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,
+0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,
+0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,
+0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,
+0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,
+0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,
+0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,
+0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,
+0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,
+0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,
+0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,
+0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,
+0xc86,0xc87,0xc8b,0xd54,0xc7e,0xc9b,0xc93,0xc87,0xe1a,0xe1a,0xe1a,0xe1a,0xe1a,0xe1a,0xe1a,0xe1a,
+0xe1f,0x717,0x101c,0x71d,0x10fc,0x10fc,0x721,0x728,0x730,0x738,0x740,0xcbb,0xcc2,0x748,0x74d,0xcca,
+0xcfb,0xcfb,0xcab,0xcb3,0xcd2,0xcf2,0xcf3,0xd03,0xcda,0xca3,0x755,0xce2,0x75d,0xcea,0x765,0x769,
+0x970,0x771,0x779,0x781,0xd0b,0xd11,0xd16,0x789,0x799,0xd7c,0xd84,0xd6c,0xd64,0x7a1,0x7a9,0x791,
+0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,
+0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe3f,0xe3f,0xe3f,0xe3f,
+0x883,0x88a,0x892,0x89a,0x105c,0x105c,0x105c,0x8a2,0x8aa,0x8ad,0x108c,0x1084,0x8d8,0xa22,0xa26,0xa2a,
+0x2a8,0x2a8,0x2a8,0x2a8,0xa32,0x11b4,0xa3a,0x2a8,0x7b1,0x7b9,0x314,0x2a8,0x8b5,0x10cc,0x953,0x2a8,
+0xf3f,0xf32,0xf37,0x1064,0x8bd,0x31c,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+#endif /* U_DARWIN */
+0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+0x8c5,0x8c8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x9ae,0xa42,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+0x92c,0x933,0x93b,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+#ifndef U_DARWIN
+0x110c,0x110c,0x110c,0x110c,0x110c,0x110c,0x110c,0x110c,0x110c,0x110c,0x110c,0x110c,0x110c,0x110c,0x110c,0x110c,
+0x110c,0x110c,0x110c,0x110c,0x110c,0x110c,0x110c,0x110c,0x110c,0x110c,0x110c,0x9b6,0x9ba,0x9ba,0x9ba,0x9ba,
+0x1114,0x1114,0x1114,0x9c2,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+#else /* U_DARWIN */
+0x1139,0x1139,0x1139,0x1139,0x1139,0x1139,0x1139,0x1139,0x1139,0x1139,0x1139,0x1139,0x1139,0x1139,0x1139,0x1139,
+0x1139,0x1139,0x1139,0x1139,0x1139,0x1139,0x1139,0x1139,0x1139,0x1139,0x1139,0x9b6,0x9ba,0x9ba,0x9ba,0x9ba,
+0x1141,0x1141,0x1141,0x9c2,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+#endif /* U_DARWIN */
+0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+#ifndef U_DARWIN
+0xf1a,0xf1a,0xf1a,0xf1a,0xf1a,0xf1a,0xf1a,0x7c1,0xf2a,0x7c9,0xf2b,0xf22,0xf33,0xf39,0x7d1,0x7d9,
+0x104f,0x104f,0x324,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x103f,0x103f,0x8d0,0x9ca,0x2a8,0x2a8,0x2a8,0x2a8,
+0xf6a,0xf71,0x7e1,0xf74,0x7e9,0x7f1,0x7f9,0xf6e,0x801,0x809,0x811,0xf73,0xf7b,0xf6a,0xf71,0xf6d,
+0xf74,0xf7c,0xf6b,0xf72,0xf6e,0x818,0xf41,0xf49,0xf50,0xf57,0xf44,0xf4c,0xf53,0xf5a,0x820,0xf62,
+0x118f,0xa4a,0x1197,0x1197,0xa4e,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+#else /* U_DARWIN */
+0xf47,0xf47,0xf47,0xf47,0xf47,0xf47,0xf47,0x7c1,0xf57,0x7c9,0xf58,0xf4f,0xf60,0xf66,0x7d1,0x7d9,
+0x107c,0x107c,0x324,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x106c,0x106c,0x8d0,0x9ca,0x2a8,0x2a8,0x2a8,0x2a8,
+0xf97,0xf9e,0x7e1,0xfa1,0x7e9,0x7f1,0x7f9,0xf9b,0x801,0x809,0x811,0xfa0,0xfa8,0xf97,0xf9e,0xf9a,
+0xfa1,0xfa9,0xf98,0xf9f,0xf9b,0x818,0xf6e,0xf76,0xf7d,0xf84,0xf71,0xf79,0xf80,0xf87,0x820,0xf8f,
+0x11bc,0xa4a,0x11c4,0x11c4,0xa4e,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+#endif /* U_DARWIN */
+0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x328,
+#ifndef U_DARWIN
+0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,
+0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,
+0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,
+0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xf8c,0xa5f,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,
+#else /* U_DARWIN */
+0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,
+0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,
+0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,
+0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xfb9,0xa5f,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,
+#endif /* U_DARWIN */
+0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,
+0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,
+#ifndef U_DARWIN
+0xf94,0xf94,0xf94,0xf94,0xf94,0xf94,0xf94,0xf94,0xf94,0xf94,0xf94,0xf94,0xf94,0xf94,0xf94,0xf94,
+#else /* U_DARWIN */
+0xfc1,0xfc1,0xfc1,0xfc1,0xfc1,0xfc1,0xfc1,0xfc1,0xfc1,0xfc1,0xfc1,0xfc1,0xfc1,0xfc1,0xfc1,0xfc1,
+#endif /* U_DARWIN */
+0xa67,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,
+0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,
+0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa57,
+#ifndef U_DARWIN
+0x828,0xf84,0xf84,0xf84,0x330,0x330,0x330,0x330,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x338,
+#else /* U_DARWIN */
+0x828,0xfb1,0xfb1,0xfb1,0x330,0x330,0x330,0x330,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x338,
+#endif /* U_DARWIN */
+0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,
+0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,
+0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,
+#ifndef U_DARWIN
+0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,
+0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,
+0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,
+0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe32,0xe22,
+0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,
+0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,
+0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,
+0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe2a,
+#else /* U_DARWIN */
+0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,
+0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,
+0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,
+0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe5f,0xe4f,
+0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,
+0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,
+0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,
+0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe57,
+#endif /* U_DARWIN */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x438,0x64b,0x465,0x465,0x56d,0x4b0,0x4b0,
-0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,
-0x77d,0x582,0x74d,0x40b,0x732,0x705,0x40b,0x750,0x6d2,0x48c,0x40b,0x735,0x645,0x594,0x648,0x780,
-0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,0x642,0x645,0x40e,0x40e,0x40e,0x582,
-0x40b,0x423,0x423,0x423,0x423,0x423,0x423,0x41d,0x41d,0x41d,0x41d,0x41d,0x41d,0x41d,0x41d,0x41d,
-0x41d,0x41d,0x41d,0x41d,0x41d,0x41d,0x41d,0x41d,0x41d,0x41d,0x41d,0x6d2,0x732,0x48c,0x414,0x417,
-0x411,0x420,0x420,0x420,0x420,0x420,0x420,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,
-0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x6d2,0x459,0x48c,0x40e,0x4b0,
-0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x786,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,
-0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,
-0x588,0x17d,0x708,0x738,0x723,0x738,0x426,0x17d,0x183,0x1f5,0x189,0x73e,0x429,0x44d,0x3b1,0x42c,
-0x6f3,0x726,0x17a,0x17a,0x462,0x1f8,0x17d,0x186,0x183,0x17a,0x189,0x73e,0x177,0x177,0x177,0x17d,
-0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x3ba,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,
-0x3ba,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x180,0x3ba,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x3ba,0x3b4,
-0x3b7,0x3b7,0x1fb,0x1fb,0x1fb,0x1fb,0x3b4,0x1fb,0x3b7,0x3b7,0x3b7,0x1fb,0x3b7,0x3b7,0x1fb,0x1fb,
-0x3b4,0x1fb,0x3b7,0x3b7,0x1fb,0x1fb,0x1fb,0x180,0x3b4,0x3b7,0x3b7,0x1fb,0x3b7,0x1fb,0x3b4,0x1fb,
-0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x8ee,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x90f,0x90f,0x912,0x912,0x90f,0x90f,0x90f,0x90f,0x90f,0x90f,0x90f,0x90f,0x8d,0x8d,0x8d,0x8d,
-0x924,0xa77,0x924,0x924,0x924,0xa77,0x924,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,
+0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x183,0x18c,0x186,0x186,0x189,0x180,0x180,
+0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,
+#ifndef U_DARWIN
+0x6b4,0x6ae,0x690,0x67b,0x687,0x684,0x67b,0x693,0x681,0x67e,0x67b,0x6a5,0x69c,0x68d,0x6b1,0x68a,
+0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x699,0x696,0x69f,0x69f,0x69f,0x6ae,
+0x67b,0x6c0,0x6c0,0x6c0,0x6c0,0x6c0,0x6c0,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,
+0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x681,0x687,0x67e,0x6ab,0x675,
+0x6a8,0x6bd,0x6bd,0x6bd,0x6bd,0x6bd,0x6bd,0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,
+0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,0x681,0x6a2,0x67e,0x69f,0x180,
+#else /* U_DARWIN */
+0x6d2,0x6cc,0x6ae,0x699,0x6a5,0x6a2,0x699,0x6b1,0x69f,0x69c,0x699,0x6c3,0x6ba,0x6ab,0x6cf,0x6a8,
+0x696,0x696,0x696,0x696,0x696,0x696,0x696,0x696,0x696,0x696,0x6b7,0x6b4,0x6bd,0x6bd,0x6bd,0x6cc,
+0x699,0x6de,0x6de,0x6de,0x6de,0x6de,0x6de,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,
+0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x69f,0x6a5,0x69c,0x6c9,0x693,
+0x6c6,0x6db,0x6db,0x6db,0x6db,0x6db,0x6db,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,
+0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x69f,0x6c0,0x69c,0x6bd,0x180,
+#endif /* U_DARWIN */
+0x18f,0x18f,0x18f,0x18f,0x18f,0x19e,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,
+0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,
+#ifndef U_DARWIN
+0x192,0x513,0x6c9,0x6cc,0x519,0x6cc,0x6c6,0x50d,0x504,0x198,0x522,0x19b,0x6cf,0x4fb,0x510,0x6c3,
+0x516,0x51f,0x501,0x501,0x507,0x195,0x50d,0x50a,0x504,0x501,0x522,0x19b,0x4fe,0x4fe,0x4fe,0x513,
+0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x52b,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,
+0x52b,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x51c,0x52b,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x52b,0x525,
+0x528,0x528,0x1a1,0x1a1,0x1a1,0x1a1,0x525,0x1a1,0x528,0x528,0x528,0x1a1,0x528,0x528,0x1a1,0x1a1,
+0x525,0x1a1,0x528,0x528,0x1a1,0x1a1,0x1a1,0x51c,0x525,0x528,0x528,0x1a1,0x528,0x1a1,0x525,0x1a1,
+0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x909,0xdef,0x5a,0x5a,0x5a,0x5a,0x5a,
+#else /* U_DARWIN */
+0x192,0x51f,0x6e7,0x6ea,0x525,0x6ea,0x6e4,0x519,0x510,0x198,0x52e,0x19b,0x6ed,0x507,0x51c,0x6e1,
+0x522,0x52b,0x50d,0x50d,0x513,0x195,0x519,0x516,0x510,0x50d,0x52e,0x19b,0x50a,0x50a,0x50a,0x51f,
+0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x537,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,
+0x537,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x528,0x537,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x537,0x531,
+0x534,0x534,0x1a1,0x1a1,0x1a1,0x1a1,0x531,0x1a1,0x534,0x534,0x534,0x1a1,0x534,0x534,0x1a1,0x1a1,
+0x531,0x1a1,0x534,0x534,0x1a1,0x1a1,0x1a1,0x528,0x531,0x534,0x534,0x1a1,0x534,0x1a1,0x531,0x1a1,
+0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x93f,0xe25,0x5a,0x5a,0x5a,0x5a,0x5a,
+#endif /* U_DARWIN */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xc27,0xc27,0xc27,0xc81,0xc81,0xc78,0xc78,0xc81,0xc24,0xc24,0xc24,0xc24,0x138,0x138,0x138,0x138,
+#ifndef U_DARWIN
+0x96c,0x96c,0x96f,0x96f,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x84,0x84,0x84,0x84,
+0x984,0xab9,0x984,0x984,0x984,0xab9,0x984,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,
+#else /* U_DARWIN */
+0x9a2,0x9a2,0x9a5,0x9a5,0x9a2,0x9a2,0x9a2,0x9a2,0x9a2,0x9a2,0x9a2,0x9a2,0x84,0x84,0x84,0x84,
+0x9ba,0xaef,0x9ba,0x9ba,0x9ba,0xaef,0x9ba,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,
+#endif /* U_DARWIN */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x7fb,0x7fb,0x7fb,0x7fb,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,
+#ifndef U_DARWIN
+0xcae,0xcae,0xcae,0xcab,0xcab,0xca2,0xca2,0xcab,0xca8,0xca8,0xca8,0xca8,0x129,0x129,0x129,0x129,
+#else /* U_DARWIN */
+0xce4,0xce4,0xce4,0xce1,0xce1,0xcd8,0xcd8,0xce1,0xcde,0xcde,0xcde,0xcde,0x129,0x129,0x129,0x129,
+#endif /* U_DARWIN */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0x10b,0x10b,0x10b,0x10b,0x10b,
+#ifndef U_DARWIN
+0x810,0x810,0x810,0x810,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,
+#else /* U_DARWIN */
+0x846,0x846,0x846,0x846,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,
#endif /* U_DARWIN */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
#ifndef U_DARWIN
-0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0xc9,0xc9,0xc9,0xc9,0xc9,
+0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0xc0,0xc0,0xc0,0xc0,0xc0,
#else /* U_DARWIN */
-0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0xc9,0xc9,0xc9,0xc9,0xc9,
+0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0xc0,0xc0,0xc0,0xc0,0xc0,
#endif /* U_DARWIN */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
#ifndef U_DARWIN
-0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xff,0xff,0xff,0xff,0xff,0xff,
+0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,
#else /* U_DARWIN */
-0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xff,0xff,0xff,0xff,0xff,0xff,
+0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,
#endif /* U_DARWIN */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
#ifndef U_DARWIN
-0xba9,0xba9,0xc2a,0xc2a,0xc2a,0xba9,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,
+0xc27,0xc27,0xc24,0xc24,0xc24,0xc27,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
#else /* U_DARWIN */
-0xbdf,0xbdf,0xc60,0xc60,0xc60,0xbdf,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,
+0xc5d,0xc5d,0xc5a,0xc5a,0xc5a,0xc5d,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
#endif /* U_DARWIN */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
#ifndef U_DARWIN
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x765,0x765,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x7b0,0x7b0,
#else /* U_DARWIN */
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x79b,0x79b,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x7e6,0x7e6,
#endif /* U_DARWIN */
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
#ifndef U_DARWIN
-0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,
+0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,
#else /* U_DARWIN */
-0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,
+0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,
#endif /* U_DARWIN */
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
#ifndef U_DARWIN
-0x570,0x570,0x8cd,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,
-6,6,6,6,0x243,0x240,6,6,6,6,0x249,0xc93,0xc93,0xc93,0x60f,6,
-6,6,6,6,0x246,0x243,0x258,0x237,0x258,0x258,0x258,6,0x258,6,0x258,0x258,
-0x24f,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,
-0x3cf,0x3cf,6,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x258,0x258,0x24f,0x24f,0x24f,0x24f,
-0x24f,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,
-0x3cc,0x3cc,0x24c,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x24f,0x24f,0x24f,0x24f,0x24f,6,
-0x25b,0x25b,0x25e,0x258,0x258,0x25b,0x252,0x7e3,0x98d,0x98a,0x255,0x7e3,0x255,0x7e3,0x255,0x7e3,
-0x26a,0x264,0x261,0x49b,0x49b,0x49b,0x49b,9,0x894,0x894,0x993,0x990,0x7ec,0x7e6,0x7ec,0x7e6,
-0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,
-#else /* U_DARWIN */
-0x591,0x591,0x903,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,
-6,6,6,6,0x246,0x243,6,6,6,6,0x24c,0xcc9,0xcc9,0xcc9,0x639,6,
-6,6,6,6,0x249,0x246,0x25b,0x23a,0x25b,0x25b,0x25b,6,0x25b,6,0x25b,0x25b,
-0x252,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,
-0x3d8,0x3d8,6,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x25b,0x25b,0x252,0x252,0x252,0x252,
-0x252,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,
-0x3d5,0x3d5,0x24f,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x252,0x252,0x252,0x252,0x252,6,
-0x25e,0x25e,0x261,0x25b,0x25b,0x25e,0x255,0x819,0x9c3,0x9c0,0x258,0x819,0x258,0x819,0x258,0x819,
-0x26d,0x267,0x264,0x4b6,0x4b6,0x4b6,0x4b6,9,0x8ca,0x8ca,0x9c9,0x9c6,0x822,0x81c,0x822,0x81c,
-0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,
-#endif /* U_DARWIN */
-0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,
-#ifndef U_DARWIN
-0xc,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,
-0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0xc,0xc,0x27f,0x270,0x270,
-0x273,0x270,0x273,0x270,0xc,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,
-0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,
-0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x279,0xc,0x612,0x86a,0xc,0xc,0xc,0xc,0xc,
-0xf,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,
-0x282,0x49e,0x49e,0x28b,0x78f,0xc1e,0xc51,0xc1e,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,
-0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,
-0x28e,0x28e,0x28e,0xf,0xf,0xf,0xf,0xf,0x28e,0x28e,0x28e,0x288,0x285,0xf,0xf,0xf,
-0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xa89,0xa89,0xa89,0xa89,0x12,0x12,0x12,0x12,
-0x12,0x12,0x12,0xc7b,0x54f,0xb49,0xa8c,0xa8c,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0x12,0x12,
-0x12,0x12,0x12,0x54f,0x12,0x12,0xc54,0x552,0x12,0x29a,0x29d,0x29d,0x29d,0x29d,0x29d,0x29a,
-0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,
-0x29a,0x29a,0x29a,0x12,0x12,0x12,0x12,0x12,0x294,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,
-0x29a,0x29a,0x29a,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x897,0x897,0x897,0xb13,0xb19,
-0xb16,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0x12,0x801,0x801,0x801,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,
-0x7fe,0x7fe,0x7fe,0x7fb,0x7fe,0x7fb,0x15,0x7f8,0x804,0x89a,0x804,0x804,0x804,0x804,0x804,0x804,
-0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,
-0x89d,0x89d,0x89d,0x15,0x15,0xa92,0xa92,0xa92,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,
-0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0x807,0x807,0x807,0x807,0x807,0x807,0x8a3,0x8a3,
-0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x999,0x18,0x18,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x4b0,0x4b0,0x4b9,0xa95,0x2a9,0x2a9,0x2a9,
+0x555,0x555,0x960,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,
+0xd92,0xd8f,0xd92,0xd8f,0x1ec,0x1f5,0xd92,0xd8f,6,6,0x1fb,0xcea,0xcea,0xcea,0x1e3,6,
+#else /* U_DARWIN */
+0x561,0x561,0x996,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,
+0xdc8,0xdc5,0xdc8,0xdc5,0x1ec,0x1f5,0xdc8,0xdc5,6,6,0x1fb,0xd20,0xd20,0xd20,0x1e3,6,
+#endif /* U_DARWIN */
+6,6,6,6,0x1f8,0x1e6,0x20a,0x1e9,0x20a,0x20a,0x20a,6,0x20a,6,0x20a,0x20a,
+#ifndef U_DARWIN
+0x201,0x561,0x561,0x561,0x561,0x561,0x561,0x561,0x561,0x561,0x561,0x561,0x561,0x561,0x561,0x561,
+0x561,0x561,6,0x561,0x561,0x561,0x561,0x561,0x561,0x561,0x20a,0x20a,0x201,0x201,0x201,0x201,
+0x201,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,
+0xe10,0xe0d,0xe10,0xe0d,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,
+#else /* U_DARWIN */
+0x201,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,
+0x56d,0x56d,6,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,0x20a,0x20a,0x201,0x201,0x201,0x201,
+0x201,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,
+0xe46,0xe43,0xe46,0xe43,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,
+#endif /* U_DARWIN */
+9,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,
+0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,9,9,0x237,0x228,0x228,
+0x23a,0x22b,0x23a,0x228,9,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,
+0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,
+#ifndef U_DARWIN
+0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x231,9,0x225,0x840,9,9,9,9,9,
+0xc,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,
+0x240,0x23d,0x23d,0x24c,0x7b6,0xbc7,0xbca,0xbc7,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,
+#else /* U_DARWIN */
+0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x231,9,0x225,0x876,9,9,9,9,9,
+0xc,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,
+0x240,0x23d,0x23d,0x24c,0x7ec,0xbfd,0xc00,0xbfd,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,
+#endif /* U_DARWIN */
+0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,
+0x24f,0x24f,0x24f,0xc,0xc,0xc,0xc,0xc,0x24f,0x24f,0x24f,0x246,0x243,0xc,0xc,0xc,
+#ifndef U_DARWIN
+0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xad7,0xad7,0xad7,0xad7,0xf,0xf,0xd9e,0xd9e,
+0xd9e,0xd9b,0xd9b,0xbd3,0x258,0xae6,0xae3,0xae3,0xada,0xada,0xada,0xada,0xada,0xada,0xd98,0xd98,
+0xd98,0xd98,0xd98,0x255,0xf,0xf,0xbd0,0x261,0xf,0x282,0x285,0x285,0x285,0x285,0x285,0x282,
+#else /* U_DARWIN */
+0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xb0d,0xb0d,0xb0d,0xb0d,0xf,0xf,0xdd4,0xdd4,
+0xdd4,0xdd1,0xdd1,0xc09,0x258,0xb1c,0xb19,0xb19,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xdce,0xdce,
+0xdce,0xdce,0xdce,0x255,0xf,0xf,0xc06,0x261,0xf,0x282,0x285,0x285,0x285,0x285,0x285,0x282,
+#endif /* U_DARWIN */
+0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,
+#ifndef U_DARWIN
+0x282,0x282,0x282,0xda1,0xda1,0xda1,0xda1,0xda1,0x25e,0x282,0x282,0x282,0x282,0x282,0x282,0x282,
+0x282,0x282,0x282,0x267,0x267,0x267,0x267,0x267,0x267,0x267,0x267,0x843,0x843,0x843,0xada,0xae0,
+0xadd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xf,0x861,0x861,0x861,0x85b,0x85b,0x85b,0x85b,0x85b,
+0x85b,0x85b,0x85b,0x858,0x85b,0x858,0x12,0x84c,0x85e,0x84f,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,
+0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,
+0x852,0x852,0x852,0x12,0x12,0xaec,0xaec,0xaec,0xc30,0xc30,0xc30,0xc30,0xc30,0xc30,0xc30,0xc30,
+0xc30,0xc30,0xc30,0xc30,0xc30,0xc30,0xc30,0xc30,0x867,0x867,0x867,0x867,0x867,0x867,0x864,0x864,
+0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x9e4,0x15,0x15,0x15,0x15,0x15,0x15,
+0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x18,0x29a,0x29a,0x2a6,0xaef,0x2a9,0x2a9,0x2a9,
+#else /* U_DARWIN */
+0x282,0x282,0x282,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0x25e,0x282,0x282,0x282,0x282,0x282,0x282,0x282,
+0x282,0x282,0x282,0x267,0x267,0x267,0x267,0x267,0x267,0x267,0x267,0x879,0x879,0x879,0xb10,0xb16,
+0xb13,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xf,0x897,0x897,0x897,0x891,0x891,0x891,0x891,0x891,
+0x891,0x891,0x891,0x88e,0x891,0x88e,0x12,0x882,0x894,0x885,0x894,0x894,0x894,0x894,0x894,0x894,
+0x894,0x894,0x894,0x894,0x894,0x894,0x894,0x894,0x888,0x888,0x888,0x888,0x888,0x888,0x888,0x888,
+0x888,0x888,0x888,0x12,0x12,0xb22,0xb22,0xb22,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,
+0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89a,0x89a,
+0x89a,0x89a,0x89a,0x89a,0x89a,0x89a,0x89a,0x89a,0x89a,0xa1a,0x15,0x15,0x15,0x15,0x15,0x15,
+0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x18,0x29a,0x29a,0x2a6,0xb25,0x2a9,0x2a9,0x2a9,
+#endif /* U_DARWIN */
0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,
0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2ac,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,
-0x2a9,0x2ac,0x2a9,0x2a9,0x2ac,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x1b,0x1b,0x4b3,0x2a9,0x4b9,0x4b9,
-0x4b9,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b9,0x4b9,0x4b9,0x4b9,0x4b6,0x1b,0x1b,
-0x2a9,0x4b3,0x4b3,0x4b3,0x4b3,0x1b,0x1b,0x1b,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,
-0x2a9,0x2a9,0x4b0,0x4b0,0x42c,0x42c,0x666,0x666,0x666,0x666,0x666,0x666,0x666,0x666,0x666,0x666,
-0x2a6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0xc9c,0xc9c,0xb73,0xc9c,0xc9c,
-0x1e,0x4bc,0x4c5,0x4c5,0x1e,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x1e,0x1e,0x2b2,
-0x2b2,0x1e,0x1e,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,
-0x2b2,0x1e,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x1e,0x2b2,0x1e,0x1e,0x1e,0x2b2,0x2b2,
-0x2b2,0x2b2,0x1e,0x1e,0x4bf,0xa98,0x4bc,0x4c5,0x4c5,0x4bc,0x4bc,0x4bc,0x4bc,0x1e,0x1e,0x4c5,
-0x4c5,0x1e,0x1e,0x4c8,0x4c8,0x4c2,0xb76,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x4bc,
-0x1e,0x1e,0x1e,0x1e,0x2b5,0x2b5,0x1e,0x2b5,0x2b2,0x2b2,0x4bc,0x4bc,0x1e,0x1e,0x669,0x669,
-0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x2b2,0x2b2,0x6db,0x6db,0x2af,0x2af,0x2af,0x2af,
-0x2af,0x2af,0x2af,0x1e,0x1e,0x1e,0x1e,0x1e,0x21,0xb1c,0x4cb,0xb1f,0x21,0x2b8,0x2b8,0x2b8,
-0x2b8,0x2b8,0x2b8,0x21,0x21,0x21,0x21,0x2b8,0x2b8,0x21,0x21,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,
-0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x21,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,
-0x2b8,0x21,0x2b8,0x2bb,0x21,0x2b8,0x2bb,0x21,0x2b8,0x2b8,0x21,0x21,0x4ce,0x21,0x4d4,0x4d4,
-0x4d4,0x4cb,0x4cb,0x21,0x21,0x21,0x21,0x4cb,0x4cb,0x21,0x21,0x4cb,0x4cb,0x4d1,0x21,0x21,
-0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x2bb,0x2bb,0x2bb,0x2b8,0x21,0x2bb,0x21,
-0x21,0x21,0x21,0x21,0x21,0x21,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,
-0x4cb,0x4cb,0x2b8,0x2b8,0x2b8,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
-0x24,0x4d7,0x4d7,0x4e0,0x24,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0xa9b,0x2be,0x24,0x2be,
-0x2be,0x2be,0x24,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,
-0x2be,0x24,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x24,0x2be,0x2be,0x24,0x2be,0x2be,0x2be,
-0x2be,0x2be,0x24,0x24,0x4da,0x2be,0x4e0,0x4e0,0x4e0,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x24,0x4d7,
-0x4d7,0x4e0,0x24,0x4e0,0x4e0,0x4dd,0x24,0x24,0x2be,0x24,0x24,0x24,0x24,0x24,0x24,0x24,
-0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x2be,0xa9b,0xb22,0xb22,0x24,0x24,0x66f,0x66f,
-0x66f,0x66f,0x66f,0x66f,0x66f,0x66f,0x66f,0x66f,0x24,0xb55,0x24,0x24,0x24,0x24,0x24,0x24,
-0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x27,0x4e3,0x4ec,0x4ec,0x27,0x2c4,0x2c4,0x2c4,
-0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x27,0x27,0x2c4,0x2c4,0x27,0x27,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,
-0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x27,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,
-0x2c4,0x27,0x2c4,0x2c4,0x27,0xa9e,0x2c4,0x2c4,0x2c4,0x2c4,0x27,0x27,0x4e6,0x2c4,0x4e3,0x4e3,
-0x4ec,0x4e3,0x4e3,0x4e3,0x27,0x27,0x27,0x4ec,0x4ef,0x27,0x27,0x4ef,0x4ef,0x4e9,0x27,0x27,
-0x27,0x27,0x27,0x27,0x27,0x27,0x4e3,0x4e3,0x27,0x27,0x27,0x27,0x2c7,0x2c7,0x27,0x2c4,
-0x2c4,0x2c4,0x27,0x27,0x27,0x27,0x672,0x672,0x672,0x672,0x672,0x672,0x672,0x672,0x672,0x672,
-0x2c1,0xa9e,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,
-0x2a,0x2a,0x4f2,0x2cd,0x2a,0x2cd,0x2cd,0x2cd,0x2cd,0x2cd,0x2cd,0x2a,0x2a,0x2a,0x2cd,0x2cd,
-0x2cd,0x2a,0x2cd,0x2cd,0x2d0,0x2cd,0x2a,0x2a,0x2a,0x2cd,0x2cd,0x2a,0x2cd,0x2a,0x2cd,0x2cd,
-0x2a,0x2a,0x2a,0x2cd,0x2cd,0x2a,0x2a,0x2a,0x2cd,0x2cd,0x2cd,0x2a,0x2a,0x2a,0x2cd,0x2cd,
-0x2cd,0x2cd,0x2cd,0x2cd,0x2cd,0x2cd,0xb79,0x2cd,0x2cd,0x2cd,0x2a,0x2a,0x2a,0x2a,0x4f2,0x4f8,
-0x4f2,0x4f8,0x4f8,0x2a,0x2a,0x2a,0x4f8,0x4f8,0x4f8,0x2a,0x4fb,0x4fb,0x4fb,0x4f5,0x2a,0x2a,
-0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x4f2,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,
-0x2a,0x2a,0xc6f,0x675,0x675,0x675,0x675,0x675,0x675,0x675,0x675,0x675,0x2ca,0x2ca,0x2ca,0xaa1,
-0xaa1,0xaa1,0xaa1,0xaa1,0xaa1,0xb58,0xaa1,0x2a,0x2a,0x2a,0x2a,0x2a,0x2d,0x507,0x507,0x507,
-0x2d,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d,0x2d3,0x2d3,0x2d3,0x2d,0x2d3,0x2d3,
-0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d,0x2d3,0x2d3,
-0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d,0x2d,
-0x2d,0x2d,0x4fe,0x4fe,0x4fe,0x507,0x507,0x507,0x507,0x2d,0x4fe,0x4fe,0x501,0x2d,0x4fe,0x4fe,
-0x4fe,0x504,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x4fe,0x4fe,0x2d,0x2d,0x2d,0x2d,0x2d,
-0x2d,0x2d,0x2d,0x2d,0x2d3,0x2d3,0x2d,0x2d,0x2d,0x2d,0x678,0x678,0x678,0x678,0x678,0x678,
-0x678,0x678,0x678,0x678,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,
-0x2d,0x2d,0x2d,0x2d,0x30,0x30,0x510,0x510,0x30,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,
-0x2d6,0x30,0x2d6,0x2d6,0x2d6,0x30,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,
-0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x30,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,
-0x30,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x30,0x30,0xb25,0xaa4,0x510,0x50a,0x513,0x510,0x50a,0x510,
-0x510,0x30,0x50a,0x513,0x513,0x30,0x513,0x513,0x50a,0x50d,0x30,0x30,0x30,0x30,0x30,0x30,
-0x30,0x50a,0x50a,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x2d6,0x30,0x2d6,0x2d6,0xd0e,0xd0e,
-0x30,0x30,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x30,0xc9f,0xc9f,0x30,
-0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x33,0x33,0x51c,0x51c,
-0x33,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x33,0x2d9,0x2d9,0x2d9,0x33,0x2d9,0x2d9,
-0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x33,0x2d9,0x2d9,
-0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x33,0x33,
-0x33,0x33,0x516,0x51c,0x51c,0x516,0x516,0x516,0x33,0x33,0x51c,0x51c,0x51c,0x33,0x51f,0x51f,
-0x51f,0x519,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x516,0x33,0x33,0x33,0x33,
-0x33,0x33,0x33,0x33,0x2d9,0x2d9,0x33,0x33,0x33,0x33,0x67e,0x67e,0x67e,0x67e,0x67e,0x67e,
-0x67e,0x67e,0x67e,0x67e,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,
-0x33,0x33,0x33,0x33,0x36,0x36,0x8ac,0x8ac,0x36,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,
-0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x36,0x36,0x36,0x80d,0x80d,
-0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,
-0x80d,0x80d,0x36,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x36,0x80d,0x36,0x36,
-0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x36,0x36,0x36,0x8a9,0x36,0x36,0x36,0x36,0x8a6,
-0x8ac,0x8ac,0x8a6,0x8a6,0x8a6,0x36,0x8a6,0x36,0x8ac,0x8ac,0x8af,0x8ac,0x8af,0x8af,0x8af,0x8a6,
-#else /* U_DARWIN */
-0xc,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,
-0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0xc,0xc,0x282,0x273,0x273,
-0x276,0x273,0x276,0x273,0xc,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,
-0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,
-0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x27c,0xc,0x63c,0x8a0,0xc,0xc,0xc,0xc,0xc,
-0xf,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,
-0x285,0x4b9,0x4b9,0x28e,0x7c5,0xc54,0xc87,0xc54,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,
-0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,
-0x291,0x291,0x291,0xf,0xf,0xf,0xf,0xf,0x291,0x291,0x291,0x28b,0x288,0xf,0xf,0xf,
-0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xabf,0xabf,0xabf,0xabf,0x12,0x12,0x12,0x12,
-0x12,0x12,0x12,0xcb1,0x570,0xb7f,0xac2,0xac2,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0x12,0x12,
-0x12,0x12,0x12,0x570,0x12,0x12,0xc8a,0x573,0x12,0x29d,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x29d,
-0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,
-0x29d,0x29d,0x29d,0x12,0x12,0x12,0x12,0x12,0x297,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,
-0x29d,0x29d,0x29d,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x8cd,0x8cd,0x8cd,0xb49,0xb4f,
-0xb4c,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0x12,0x837,0x837,0x837,0x834,0x834,0x834,0x834,0x834,
-0x834,0x834,0x834,0x831,0x834,0x831,0x15,0x82e,0x83a,0x8d0,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,
-0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,
-0x8d3,0x8d3,0x8d3,0x15,0x15,0xac8,0xac8,0xac8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,
-0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x8d9,0x8d9,
-0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x9cf,0x18,0x18,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x4cb,0x4cb,0x4d4,0xacb,0x2ac,0x2ac,0x2ac,
-0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,
-0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2af,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,
-0x2ac,0x2af,0x2ac,0x2ac,0x2af,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x1b,0x1b,0x4ce,0x2ac,0x4d4,0x4d4,
-0x4d4,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4d4,0x4d4,0x4d4,0x4d4,0x4d1,0x1b,0x1b,
-0x2ac,0x4ce,0x4ce,0x4ce,0x4ce,0x1b,0x1b,0x1b,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,
-0x2ac,0x2ac,0x4cb,0x4cb,0x43e,0x43e,0x696,0x696,0x696,0x696,0x696,0x696,0x696,0x696,0x696,0x696,
-0x2a9,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0xcd2,0xcd2,0xba9,0xcd2,0xcd2,
-0x1e,0x4d7,0x4e0,0x4e0,0x1e,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x1e,0x1e,0x2b5,
-0x2b5,0x1e,0x1e,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,
-0x2b5,0x1e,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x1e,0x2b5,0x1e,0x1e,0x1e,0x2b5,0x2b5,
-0x2b5,0x2b5,0x1e,0x1e,0x4da,0xace,0x4d7,0x4e0,0x4e0,0x4d7,0x4d7,0x4d7,0x4d7,0x1e,0x1e,0x4e0,
-0x4e0,0x1e,0x1e,0x4e3,0x4e3,0x4dd,0xbac,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x4d7,
-0x1e,0x1e,0x1e,0x1e,0x2b8,0x2b8,0x1e,0x2b8,0x2b5,0x2b5,0x4d7,0x4d7,0x1e,0x1e,0x699,0x699,
-0x699,0x699,0x699,0x699,0x699,0x699,0x699,0x699,0x2b5,0x2b5,0x70e,0x70e,0x2b2,0x2b2,0x2b2,0x2b2,
-0x2b2,0x2b2,0x2b2,0x1e,0x1e,0x1e,0x1e,0x1e,0x21,0xb52,0x4e6,0xb55,0x21,0x2bb,0x2bb,0x2bb,
-0x2bb,0x2bb,0x2bb,0x21,0x21,0x21,0x21,0x2bb,0x2bb,0x21,0x21,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,
-0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x21,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,
-0x2bb,0x21,0x2bb,0x2be,0x21,0x2bb,0x2be,0x21,0x2bb,0x2bb,0x21,0x21,0x4e9,0x21,0x4ef,0x4ef,
-0x4ef,0x4e6,0x4e6,0x21,0x21,0x21,0x21,0x4e6,0x4e6,0x21,0x21,0x4e6,0x4e6,0x4ec,0x21,0x21,
-0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x2be,0x2be,0x2be,0x2bb,0x21,0x2be,0x21,
-0x21,0x21,0x21,0x21,0x21,0x21,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,
-0x4e6,0x4e6,0x2bb,0x2bb,0x2bb,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
-0x24,0x4f2,0x4f2,0x4fb,0x24,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0xad1,0x2c1,0x24,0x2c1,
-0x2c1,0x2c1,0x24,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,
-0x2c1,0x24,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x24,0x2c1,0x2c1,0x24,0x2c1,0x2c1,0x2c1,
-0x2c1,0x2c1,0x24,0x24,0x4f5,0x2c1,0x4fb,0x4fb,0x4fb,0x4f2,0x4f2,0x4f2,0x4f2,0x4f2,0x24,0x4f2,
-0x4f2,0x4fb,0x24,0x4fb,0x4fb,0x4f8,0x24,0x24,0x2c1,0x24,0x24,0x24,0x24,0x24,0x24,0x24,
-0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x2c1,0xad1,0xb58,0xb58,0x24,0x24,0x69f,0x69f,
-0x69f,0x69f,0x69f,0x69f,0x69f,0x69f,0x69f,0x69f,0x24,0xb8b,0x24,0x24,0x24,0x24,0x24,0x24,
-0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x27,0x4fe,0x507,0x507,0x27,0x2c7,0x2c7,0x2c7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x27,0x27,0x2c7,0x2c7,0x27,0x27,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x27,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x27,0x2c7,0x2c7,0x27,0xad4,0x2c7,0x2c7,0x2c7,0x2c7,0x27,0x27,0x501,0x2c7,0x4fe,0x4fe,
-0x507,0x4fe,0x4fe,0x4fe,0x27,0x27,0x27,0x507,0x50a,0x27,0x27,0x50a,0x50a,0x504,0x27,0x27,
-0x27,0x27,0x27,0x27,0x27,0x27,0x4fe,0x4fe,0x27,0x27,0x27,0x27,0x2ca,0x2ca,0x27,0x2c7,
-0x2c7,0x2c7,0x27,0x27,0x27,0x27,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,
-0x2c4,0xad4,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,
-0x2a,0x2a,0x50d,0x2d0,0x2a,0x2d0,0x2d0,0x2d0,0x2d0,0x2d0,0x2d0,0x2a,0x2a,0x2a,0x2d0,0x2d0,
-0x2d0,0x2a,0x2d0,0x2d0,0x2d3,0x2d0,0x2a,0x2a,0x2a,0x2d0,0x2d0,0x2a,0x2d0,0x2a,0x2d0,0x2d0,
-0x2a,0x2a,0x2a,0x2d0,0x2d0,0x2a,0x2a,0x2a,0x2d0,0x2d0,0x2d0,0x2a,0x2a,0x2a,0x2d0,0x2d0,
-0x2d0,0x2d0,0x2d0,0x2d0,0x2d0,0x2d0,0xbaf,0x2d0,0x2d0,0x2d0,0x2a,0x2a,0x2a,0x2a,0x50d,0x513,
-0x50d,0x513,0x513,0x2a,0x2a,0x2a,0x513,0x513,0x513,0x2a,0x516,0x516,0x516,0x510,0x2a,0x2a,
-0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x50d,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,
-0x2a,0x2a,0xca5,0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x2cd,0x2cd,0x2cd,0xad7,
-0xad7,0xad7,0xad7,0xad7,0xad7,0xb8e,0xad7,0x2a,0x2a,0x2a,0x2a,0x2a,0x2d,0x522,0x522,0x522,
-0x2d,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d,0x2d6,0x2d6,0x2d6,0x2d,0x2d6,0x2d6,
-0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d,0x2d6,0x2d6,
-0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d,0x2d,
-0x2d,0x2d,0x519,0x519,0x519,0x522,0x522,0x522,0x522,0x2d,0x519,0x519,0x51c,0x2d,0x519,0x519,
-0x519,0x51f,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x519,0x519,0x2d,0x2d,0x2d,0x2d,0x2d,
-0x2d,0x2d,0x2d,0x2d,0x2d6,0x2d6,0x2d,0x2d,0x2d,0x2d,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,
-0x6a8,0x6a8,0x6a8,0x6a8,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,
-0x2d,0x2d,0x2d,0x2d,0x30,0x30,0x52b,0x52b,0x30,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,
-0x2d9,0x30,0x2d9,0x2d9,0x2d9,0x30,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,
-0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x30,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,
-0x30,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x30,0x30,0xb5b,0xada,0x52b,0x525,0x52e,0x52b,0x525,0x52b,
-0x52b,0x30,0x525,0x52e,0x52e,0x30,0x52e,0x52e,0x525,0x528,0x30,0x30,0x30,0x30,0x30,0x30,
-0x30,0x525,0x525,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x2d9,0x30,0x2d9,0x2d9,0xd44,0xd44,
-0x30,0x30,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x30,0xcd5,0xcd5,0x30,
-0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x33,0x33,0x537,0x537,
-0x33,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x33,0x2dc,0x2dc,0x2dc,0x33,0x2dc,0x2dc,
-0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x33,0x2dc,0x2dc,
-0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x33,0x33,
-0x33,0x33,0x531,0x537,0x537,0x531,0x531,0x531,0x33,0x33,0x537,0x537,0x537,0x33,0x53a,0x53a,
-0x53a,0x534,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x531,0x33,0x33,0x33,0x33,
-0x33,0x33,0x33,0x33,0x2dc,0x2dc,0x33,0x33,0x33,0x33,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,
-0x6ae,0x6ae,0x6ae,0x6ae,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,
-0x33,0x33,0x33,0x33,0x36,0x36,0x8e2,0x8e2,0x36,0x843,0x843,0x843,0x843,0x843,0x843,0x843,
-0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x36,0x36,0x36,0x843,0x843,
-0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,
-0x843,0x843,0x36,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x36,0x843,0x36,0x36,
-0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x36,0x36,0x36,0x8df,0x36,0x36,0x36,0x36,0x8dc,
-0x8e2,0x8e2,0x8dc,0x8dc,0x8dc,0x36,0x8dc,0x36,0x8e2,0x8e2,0x8e5,0x8e2,0x8e5,0x8e5,0x8e5,0x8dc,
+0x2a9,0x2ac,0x2a9,0x2a9,0x2ac,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x18,0x18,0x29d,0x2a9,0x2a6,0x2a6,
+0x2a6,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x2a6,0x2a6,0x2a6,0x2a6,0x2a0,0x18,0x18,
+0x2a9,0x297,0x297,0x29d,0x29d,0x18,0x18,0x18,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,
+0x2a9,0x2a9,0x29a,0x29a,0x294,0x294,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,
+#ifndef U_DARWIN
+0x291,0xda7,0xda4,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xcf6,0xcf6,0xbd6,0xcf6,0xcf6,
+#else /* U_DARWIN */
+0x291,0xddd,0xdda,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xd2c,0xd2c,0xc0c,0xd2c,0xd2c,
#endif /* U_DARWIN */
-0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,
+0x1b,0x2af,0x2c1,0x2c1,0x1b,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x1b,0x1b,0x2c7,
+0x2c7,0x1b,0x1b,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x2c7,0x1b,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x1b,0x2c7,0x1b,0x1b,0x1b,0x2c7,0x2c7,
#ifndef U_DARWIN
-0x36,0x36,0x8ac,0x8ac,0x80a,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,
-0x39,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,
-0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,
-0x729,0x71d,0x729,0x726,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x723,0x39,0x39,0x39,0x39,0x6de,
-0x72f,0x72f,0x72f,0x72f,0x72f,0x729,0x72c,0x720,0x720,0x720,0x720,0x720,0x720,0x71d,0x720,0x2dc,
-0x681,0x681,0x681,0x681,0x681,0x681,0x681,0x681,0x681,0x681,0x42f,0x42f,0x39,0x39,0x39,0x39,
+0x2c7,0x2c7,0x1b,0x1b,0x2b2,0xaf2,0x2af,0x2c1,0x2c1,0x2af,0x2af,0x2af,0x2af,0x1b,0x1b,0x2c1,
+0x2c1,0x1b,0x1b,0x2c4,0x2c4,0x2b5,0xbd9,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x2af,
#else /* U_DARWIN */
-0x36,0x36,0x8e2,0x8e2,0x840,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,
-0x39,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,
-0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,
-0x75f,0x753,0x75f,0x75c,0x753,0x753,0x753,0x753,0x753,0x753,0x759,0x39,0x39,0x39,0x39,0x711,
-0x765,0x765,0x765,0x765,0x765,0x75f,0x762,0x756,0x756,0x756,0x756,0x756,0x756,0x753,0x756,0x2df,
-0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x441,0x441,0x39,0x39,0x39,0x39,
+0x2c7,0x2c7,0x1b,0x1b,0x2b2,0xb28,0x2af,0x2c1,0x2c1,0x2af,0x2af,0x2af,0x2af,0x1b,0x1b,0x2c1,
+0x2c1,0x1b,0x1b,0x2c4,0x2c4,0x2b5,0xc0f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x2af,
+#endif /* U_DARWIN */
+0x1b,0x1b,0x1b,0x1b,0x2ca,0x2ca,0x1b,0x2ca,0x2c7,0x2c7,0x2af,0x2af,0x1b,0x1b,0x2be,0x2be,
+0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2c7,0x2c7,0x2bb,0x2bb,0x2b8,0x2b8,0x2b8,0x2b8,
+#ifndef U_DARWIN
+0x2b8,0x2b8,0x2b8,0x1b,0x1b,0x1b,0x1b,0x1b,0x1e,0xaf5,0x2cd,0xaf8,0x1e,0x2dc,0x2dc,0x2dc,
+#else /* U_DARWIN */
+0x2b8,0x2b8,0x2b8,0x1b,0x1b,0x1b,0x1b,0x1b,0x1e,0xb2b,0x2cd,0xb2e,0x1e,0x2dc,0x2dc,0x2dc,
+#endif /* U_DARWIN */
+0x2dc,0x2dc,0x2dc,0x1e,0x1e,0x1e,0x1e,0x2dc,0x2dc,0x1e,0x1e,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,
+0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x1e,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,
+0x2dc,0x1e,0x2dc,0x2df,0x1e,0x2dc,0x2df,0x1e,0x2dc,0x2dc,0x1e,0x1e,0x2d0,0x1e,0x2d9,0x2d9,
+0x2d9,0x2cd,0x2cd,0x1e,0x1e,0x1e,0x1e,0x2cd,0x2cd,0x1e,0x1e,0x2cd,0x2cd,0x2d3,0x1e,0x1e,
+#ifndef U_DARWIN
+0x1e,0xdaa,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x2df,0x2df,0x2df,0x2dc,0x1e,0x2df,0x1e,
+#else /* U_DARWIN */
+0x1e,0xde0,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x2df,0x2df,0x2df,0x2dc,0x1e,0x2df,0x1e,
+#endif /* U_DARWIN */
+0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,
+#ifndef U_DARWIN
+0x2cd,0x2cd,0x2dc,0x2dc,0x2dc,0xdaa,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,
+0x21,0x2e2,0x2e2,0x2ee,0x21,0x2f1,0x2f1,0x2f1,0x2f1,0x2f1,0x2f1,0x2f1,0xb01,0x2f1,0x21,0x2f1,
+#else /* U_DARWIN */
+0x2cd,0x2cd,0x2dc,0x2dc,0x2dc,0xde0,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,
+0x21,0x2e2,0x2e2,0x2ee,0x21,0x2f1,0x2f1,0x2f1,0x2f1,0x2f1,0x2f1,0x2f1,0xb37,0x2f1,0x21,0x2f1,
+#endif /* U_DARWIN */
+0x2f1,0x2f1,0x21,0x2f1,0x2f1,0x2f1,0x2f1,0x2f1,0x2f1,0x2f1,0x2f1,0x2f1,0x2f1,0x2f1,0x2f1,0x2f1,
+0x2f1,0x21,0x2f1,0x2f1,0x2f1,0x2f1,0x2f1,0x2f1,0x2f1,0x21,0x2f1,0x2f1,0x21,0x2f1,0x2f1,0x2f1,
+0x2f1,0x2f1,0x21,0x21,0x2e5,0x2f1,0x2ee,0x2ee,0x2ee,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x21,0x2e2,
+0x2e2,0x2ee,0x21,0x2ee,0x2ee,0x2e8,0x21,0x21,0x2f1,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
+#ifndef U_DARWIN
+0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x2f1,0xb01,0xafb,0xafb,0x21,0x21,0x2eb,0x2eb,
+0x2eb,0x2eb,0x2eb,0x2eb,0x2eb,0x2eb,0x2eb,0x2eb,0x21,0xafe,0x21,0x21,0x21,0x21,0x21,0x21,
+#else /* U_DARWIN */
+0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x2f1,0xb37,0xb31,0xb31,0x21,0x21,0x2eb,0x2eb,
+0x2eb,0x2eb,0x2eb,0x2eb,0x2eb,0x2eb,0x2eb,0x2eb,0x21,0xb34,0x21,0x21,0x21,0x21,0x21,0x21,
+#endif /* U_DARWIN */
+0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x24,0x2f4,0x303,0x303,0x24,0x309,0x309,0x309,
+0x309,0x309,0x309,0x309,0x309,0x24,0x24,0x309,0x309,0x24,0x24,0x309,0x309,0x309,0x309,0x309,
+0x309,0x309,0x309,0x309,0x309,0x309,0x309,0x309,0x309,0x24,0x309,0x309,0x309,0x309,0x309,0x309,
+#ifndef U_DARWIN
+0x309,0x24,0x309,0x309,0x24,0xb04,0x309,0x309,0x309,0x309,0x24,0x24,0x2f7,0x309,0x2f4,0x2f4,
+0x303,0x2f4,0x2f4,0x2f4,0xdad,0x24,0x24,0x303,0x306,0x24,0x24,0x306,0x306,0x2fa,0x24,0x24,
+#else /* U_DARWIN */
+0x309,0x24,0x309,0x309,0x24,0xb3a,0x309,0x309,0x309,0x309,0x24,0x24,0x2f7,0x309,0x2f4,0x2f4,
+0x303,0x2f4,0x2f4,0x2f4,0xde3,0x24,0x24,0x303,0x306,0x24,0x24,0x306,0x306,0x2fa,0x24,0x24,
+#endif /* U_DARWIN */
+0x24,0x24,0x24,0x24,0x24,0x24,0x2f4,0x2f4,0x24,0x24,0x24,0x24,0x30c,0x30c,0x24,0x309,
+#ifndef U_DARWIN
+0x309,0x309,0xdad,0xdad,0x24,0x24,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,
+0x2fd,0xb04,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,
+#else /* U_DARWIN */
+0x309,0x309,0xde3,0xde3,0x24,0x24,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,
+0x2fd,0xb3a,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,
+#endif /* U_DARWIN */
+0x27,0x27,0x30f,0x321,0x27,0x321,0x321,0x321,0x321,0x321,0x321,0x27,0x27,0x27,0x321,0x321,
+0x321,0x27,0x321,0x321,0x324,0x321,0x27,0x27,0x27,0x321,0x321,0x27,0x321,0x27,0x321,0x321,
+0x27,0x27,0x27,0x321,0x321,0x27,0x27,0x27,0x321,0x321,0x321,0x27,0x27,0x27,0x321,0x321,
+#ifndef U_DARWIN
+0x321,0x321,0x321,0x321,0x321,0x321,0xbdf,0x321,0x321,0x321,0x27,0x27,0x27,0x27,0x30f,0x31b,
+#else /* U_DARWIN */
+0x321,0x321,0x321,0x321,0x321,0x321,0xc15,0x321,0x321,0x321,0x27,0x27,0x27,0x27,0x30f,0x31b,
+#endif /* U_DARWIN */
+0x30f,0x31b,0x31b,0x27,0x27,0x27,0x31b,0x31b,0x31b,0x27,0x31e,0x31e,0x31e,0x312,0x27,0x27,
+#ifndef U_DARWIN
+0xdb0,0x27,0x27,0x27,0x27,0x27,0x27,0x30f,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,
+0x27,0x27,0xbdc,0x318,0x318,0x318,0x318,0x318,0x318,0x318,0x318,0x318,0x315,0x315,0x315,0xb07,
+0xb07,0xb07,0xb07,0xb07,0xb07,0xb0a,0xb07,0x27,0x27,0x27,0x27,0x27,0x2a,0x333,0x333,0x333,
+#else /* U_DARWIN */
+0xde6,0x27,0x27,0x27,0x27,0x27,0x27,0x30f,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,
+0x27,0x27,0xc12,0x318,0x318,0x318,0x318,0x318,0x318,0x318,0x318,0x318,0x315,0x315,0x315,0xb3d,
+0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb40,0xb3d,0x27,0x27,0x27,0x27,0x27,0x2a,0x333,0x333,0x333,
+#endif /* U_DARWIN */
+0x2a,0x336,0x336,0x336,0x336,0x336,0x336,0x336,0x336,0x2a,0x336,0x336,0x336,0x2a,0x336,0x336,
+0x336,0x336,0x336,0x336,0x336,0x336,0x336,0x336,0x336,0x336,0x336,0x336,0x336,0x2a,0x336,0x336,
+0x336,0x336,0x336,0x336,0x336,0x336,0x336,0x336,0x2a,0x336,0x336,0x336,0x336,0x336,0x2a,0x2a,
+#ifndef U_DARWIN
+0x2a,0xdb9,0x327,0x327,0x327,0x333,0x333,0x333,0x333,0x2a,0x327,0x327,0x32a,0x2a,0x327,0x327,
+0x327,0x32d,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x327,0x327,0x2a,0xdb9,0xdb9,0x2a,0x2a,
+0x2a,0x2a,0x2a,0x2a,0x336,0x336,0xdb3,0xdb3,0x2a,0x2a,0x330,0x330,0x330,0x330,0x330,0x330,
+0x330,0x330,0x330,0x330,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0xdb6,0xdb6,0xdb6,0xdb6,
+0xdb6,0xdb6,0xdb6,0xdb6,0x2d,0x2d,0x342,0x342,0x2d,0x348,0x348,0x348,0x348,0x348,0x348,0x348,
+#else /* U_DARWIN */
+0x2a,0xdef,0x327,0x327,0x327,0x333,0x333,0x333,0x333,0x2a,0x327,0x327,0x32a,0x2a,0x327,0x327,
+0x327,0x32d,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x327,0x327,0x2a,0xdef,0xdef,0x2a,0x2a,
+0x2a,0x2a,0x2a,0x2a,0x336,0x336,0xde9,0xde9,0x2a,0x2a,0x330,0x330,0x330,0x330,0x330,0x330,
+0x330,0x330,0x330,0x330,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0xdec,0xdec,0xdec,0xdec,
+0xdec,0xdec,0xdec,0xdec,0x2d,0x2d,0x342,0x342,0x2d,0x348,0x348,0x348,0x348,0x348,0x348,0x348,
+#endif /* U_DARWIN */
+0x348,0x2d,0x348,0x348,0x348,0x2d,0x348,0x348,0x348,0x348,0x348,0x348,0x348,0x348,0x348,0x348,
+0x348,0x348,0x348,0x348,0x348,0x2d,0x348,0x348,0x348,0x348,0x348,0x348,0x348,0x348,0x348,0x348,
+#ifndef U_DARWIN
+0x2d,0x348,0x348,0x348,0x348,0x348,0x2d,0x2d,0xb0d,0xb10,0x342,0x339,0x345,0x342,0x339,0x342,
+#else /* U_DARWIN */
+0x2d,0x348,0x348,0x348,0x348,0x348,0x2d,0x2d,0xb43,0xb46,0x342,0x339,0x345,0x342,0x339,0x342,
+#endif /* U_DARWIN */
+0x342,0x2d,0x339,0x345,0x345,0x2d,0x345,0x345,0x339,0x33c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,
+#ifndef U_DARWIN
+0x2d,0x339,0x339,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x348,0x2d,0x348,0x348,0xcfc,0xcfc,
+0x2d,0x2d,0x33f,0x33f,0x33f,0x33f,0x33f,0x33f,0x33f,0x33f,0x33f,0x33f,0x2d,0xcf9,0xcf9,0x2d,
+#else /* U_DARWIN */
+0x2d,0x339,0x339,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x348,0x2d,0x348,0x348,0xd32,0xd32,
+0x2d,0x2d,0x33f,0x33f,0x33f,0x33f,0x33f,0x33f,0x33f,0x33f,0x33f,0x33f,0x2d,0xd2f,0xd2f,0x2d,
#endif /* U_DARWIN */
+0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x30,0x30,0x354,0x354,
+0x30,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x30,0x35a,0x35a,0x35a,0x30,0x35a,0x35a,
+0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x30,0x35a,0x35a,
+0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x30,0x30,
+#ifndef U_DARWIN
+0x30,0xdc5,0x34b,0x354,0x354,0x34b,0x34b,0x34b,0xdbc,0x30,0x354,0x354,0x354,0x30,0x357,0x357,
+#else /* U_DARWIN */
+0x30,0xdfb,0x34b,0x354,0x354,0x34b,0x34b,0x34b,0xdf2,0x30,0x354,0x354,0x354,0x30,0x357,0x357,
+#endif /* U_DARWIN */
+0x357,0x34e,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x34b,0x30,0x30,0x30,0x30,
+#ifndef U_DARWIN
+0x30,0x30,0x30,0x30,0x35a,0x35a,0xdbc,0xdbc,0x30,0x30,0x351,0x351,0x351,0x351,0x351,0x351,
+0x351,0x351,0x351,0x351,0xdbf,0xdbf,0xdbf,0xdbf,0xdbf,0xdbf,0x30,0x30,0x30,0xdc2,0xdc5,0xdc5,
+0xdc5,0xdc5,0xdc5,0xdc5,0x33,0x33,0x873,0x873,0x33,0x879,0x879,0x879,0x879,0x879,0x879,0x879,
+0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x33,0x33,0x33,0x879,0x879,
+0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,
+0x879,0x879,0x33,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x33,0x879,0x33,0x33,
+0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x33,0x33,0x33,0x86d,0x33,0x33,0x33,0x33,0x86a,
+0x873,0x873,0x86a,0x86a,0x86a,0x33,0x86a,0x33,0x873,0x873,0x876,0x873,0x876,0x876,0x876,0x86a,
+#else /* U_DARWIN */
+0x30,0x30,0x30,0x30,0x35a,0x35a,0xdf2,0xdf2,0x30,0x30,0x351,0x351,0x351,0x351,0x351,0x351,
+0x351,0x351,0x351,0x351,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0x30,0x30,0x30,0xdf8,0xdfb,0xdfb,
+0xdfb,0xdfb,0xdfb,0xdfb,0x33,0x33,0x8a9,0x8a9,0x33,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,
+0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x33,0x33,0x33,0x8af,0x8af,
+0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,
+0x8af,0x8af,0x33,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x33,0x8af,0x33,0x33,
+0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x33,0x33,0x33,0x8a3,0x33,0x33,0x33,0x33,0x8a0,
+0x8a9,0x8a9,0x8a0,0x8a0,0x8a0,0x33,0x8a0,0x33,0x8a9,0x8a9,0x8ac,0x8a9,0x8ac,0x8ac,0x8ac,0x8a0,
+#endif /* U_DARWIN */
+0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,
+#ifndef U_DARWIN
+0x33,0x33,0x873,0x873,0x870,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,
+#else /* U_DARWIN */
+0x33,0x33,0x8a9,0x8a9,0x8a6,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,
+#endif /* U_DARWIN */
+0x36,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,
+0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,
+0x378,0x360,0x378,0x372,0x360,0x360,0x360,0x360,0x360,0x360,0x366,0x36,0x36,0x36,0x36,0x35d,
+0x37e,0x37e,0x37e,0x37e,0x37e,0x378,0x37b,0x363,0x363,0x363,0x363,0x363,0x363,0x360,0x363,0x369,
+0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36c,0x36c,0x36,0x36,0x36,0x36,
+0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,
+0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x39,0x38d,0x38d,0x39,
+0x38d,0x39,0x39,0x38d,0x38d,0x39,0x38d,0x39,0x39,0x38d,0x39,0x39,0x39,0x39,0x39,0x39,
+0x38d,0x38d,0x38d,0x38d,0x39,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x39,0x38d,0x38d,0x38d,
+0x39,0x38d,0x39,0x38d,0x39,0x39,0x38d,0x38d,0x39,0x38d,0x38d,0x38d,0x393,0x381,0x393,0x38a,
+0x381,0x381,0x381,0x381,0x381,0x381,0x39,0x381,0x381,0x38d,0x39,0x39,0x399,0x399,0x399,0x399,
+0x399,0x39,0x396,0x39,0x384,0x384,0x384,0x384,0x384,0x381,0x39,0x39,0x387,0x387,0x387,0x387,
+0x387,0x387,0x387,0x387,0x387,0x387,0x39,0x39,0x390,0x390,0x39,0x39,0x39,0x39,0x39,0x39,
0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,
#ifndef U_DARWIN
-0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3c,0x73b,0x73b,0x3c,
-0x73b,0x3c,0x3c,0x73b,0x73b,0x3c,0x73b,0x3c,0x3c,0x73b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,
-0x73b,0x73b,0x73b,0x73b,0x3c,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x3c,0x73b,0x73b,0x73b,
-0x3c,0x73b,0x3c,0x73b,0x3c,0x3c,0x73b,0x73b,0x3c,0x73b,0x73b,0x73b,0x73b,0x732,0x73b,0x738,
-0x732,0x732,0x732,0x732,0x732,0x732,0x3c,0x732,0x732,0x73b,0x3c,0x3c,0x744,0x744,0x744,0x744,
-0x744,0x3c,0x741,0x3c,0x735,0x735,0x735,0x735,0x735,0x732,0x3c,0x3c,0x684,0x684,0x684,0x684,
-0x684,0x684,0x684,0x684,0x684,0x684,0x3c,0x3c,0x73e,0x73e,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,
-#else /* U_DARWIN */
-0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3c,0x771,0x771,0x3c,
-0x771,0x3c,0x3c,0x771,0x771,0x3c,0x771,0x3c,0x3c,0x771,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,
-0x771,0x771,0x771,0x771,0x3c,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x3c,0x771,0x771,0x771,
-0x3c,0x771,0x3c,0x771,0x3c,0x3c,0x771,0x771,0x3c,0x771,0x771,0x771,0x771,0x768,0x771,0x76e,
-0x768,0x768,0x768,0x768,0x768,0x768,0x3c,0x768,0x768,0x771,0x3c,0x3c,0x77a,0x77a,0x77a,0x77a,
-0x77a,0x3c,0x777,0x3c,0x76b,0x76b,0x76b,0x76b,0x76b,0x768,0x3c,0x3c,0x6b4,0x6b4,0x6b4,0x6b4,
-0x6b4,0x6b4,0x6b4,0x6b4,0x6b4,0x6b4,0x3c,0x3c,0x774,0x774,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,
+0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x7ec,0x7ec,0x7ec,0x7ef,
+0x7ec,0x7ec,0x7ec,0x7ec,0x3c,0x7ec,0x7ec,0x7ec,0x7ec,0x7ef,0x7ec,0x7ec,0x7ec,0x7ec,0x7ef,0x7ec,
+0x7ec,0x7ec,0x7ec,0x7ef,0x7ec,0x7ec,0x7ec,0x7ec,0x7ef,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,
+0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ef,0x888,0xdd1,0xdd1,0x3c,0x3c,0x3c,0x3c,0x7b9,0x7b9,0x7bc,
+0x7b9,0x7bc,0x7bc,0x7bf,0x7bc,0x7bf,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7e6,0x7b9,0x7bc,0x7c2,0x7c2,
+0x7c5,0x7cb,0x7c2,0x7c2,0x7ec,0x7ec,0x7ec,0x7ec,0x3c,0x3c,0x3c,0x3c,0x7b9,0x7b9,0x7b9,0x7bc,
+0x7b9,0x7b9,0x87c,0x7b9,0x3c,0x7b9,0x7b9,0x7b9,0x7b9,0x7bc,0x7b9,0x7b9,0x7b9,0x7b9,0x7bc,0x7b9,
+0x7b9,0x7b9,0x7b9,0x7bc,0x7b9,0x7b9,0x7b9,0x7b9,0x7bc,0x7b9,0x87c,0x87c,0x87c,0x7b9,0x7b9,0x7b9,
+0x7b9,0x7b9,0x7b9,0x7b9,0x87c,0x7bc,0x87c,0x87c,0x87c,0x3c,0x885,0x885,0x882,0x882,0x882,0x882,
+0x882,0x882,0x87f,0x882,0x882,0x882,0x882,0x882,0x882,0x3c,0xdc8,0x882,0xbe2,0xbe2,0xdcb,0xdce,
+0xdc8,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,
+#else /* U_DARWIN */
+0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x822,0x822,0x822,0x825,
+0x822,0x822,0x822,0x822,0x3c,0x822,0x822,0x822,0x822,0x825,0x822,0x822,0x822,0x822,0x825,0x822,
+0x822,0x822,0x822,0x825,0x822,0x822,0x822,0x822,0x825,0x822,0x822,0x822,0x822,0x822,0x822,0x822,
+0x822,0x822,0x822,0x822,0x822,0x825,0x8be,0xe07,0xe07,0x3c,0x3c,0x3c,0x3c,0x7ef,0x7ef,0x7f2,
+0x7ef,0x7f2,0x7f2,0x7f5,0x7f2,0x7f5,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x81c,0x7ef,0x7f2,0x7f8,0x7f8,
+0x7fb,0x801,0x7f8,0x7f8,0x822,0x822,0x822,0x822,0x3c,0x3c,0x3c,0x3c,0x7ef,0x7ef,0x7ef,0x7f2,
+0x7ef,0x7ef,0x8b2,0x7ef,0x3c,0x7ef,0x7ef,0x7ef,0x7ef,0x7f2,0x7ef,0x7ef,0x7ef,0x7ef,0x7f2,0x7ef,
+0x7ef,0x7ef,0x7ef,0x7f2,0x7ef,0x7ef,0x7ef,0x7ef,0x7f2,0x7ef,0x8b2,0x8b2,0x8b2,0x7ef,0x7ef,0x7ef,
+0x7ef,0x7ef,0x7ef,0x7ef,0x8b2,0x7f2,0x8b2,0x8b2,0x8b2,0x3c,0x8bb,0x8bb,0x8b8,0x8b8,0x8b8,0x8b8,
+0x8b8,0x8b8,0x8b5,0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x3c,0xdfe,0x8b8,0xc18,0xc18,0xe01,0xe04,
+0xdfe,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,
#endif /* U_DARWIN */
0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,
#ifndef U_DARWIN
-0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x777,0x777,0x777,0x77a,
-0x777,0x777,0x777,0x777,0x3f,0x777,0x777,0x777,0x777,0x77a,0x777,0x777,0x777,0x777,0x77a,0x777,
-0x777,0x777,0x777,0x77a,0x777,0x777,0x777,0x777,0x77a,0x777,0x777,0x777,0x777,0x777,0x777,0x777,
-0x777,0x777,0x777,0x777,0x777,0x77a,0x813,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x792,0x792,0x795,
-0x792,0x795,0x795,0x798,0x795,0x798,0x792,0x792,0x792,0x792,0x792,0x783,0x792,0x795,0x79b,0x79b,
-0x79e,0x780,0x79b,0x79b,0x777,0x777,0x777,0x777,0x3f,0x3f,0x3f,0x3f,0x792,0x792,0x792,0x795,
-0x792,0x792,0x8b2,0x792,0x3f,0x792,0x792,0x792,0x792,0x795,0x792,0x792,0x792,0x792,0x795,0x792,
-0x792,0x792,0x792,0x795,0x792,0x792,0x792,0x792,0x795,0x792,0x8b2,0x8b2,0x8b2,0x792,0x792,0x792,
-0x792,0x792,0x792,0x792,0x8b2,0x795,0x8b2,0x8b2,0x8b2,0x3f,0x86d,0x86d,0x810,0x810,0x810,0x810,
-0x810,0x810,0x8b5,0x810,0x810,0x810,0x810,0x810,0x810,0x3f,0x3f,0x810,0xc0f,0xc0f,0x3f,0x3f,
-#else /* U_DARWIN */
-0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x7ad,0x7ad,0x7ad,0x7b0,
-0x7ad,0x7ad,0x7ad,0x7ad,0x3f,0x7ad,0x7ad,0x7ad,0x7ad,0x7b0,0x7ad,0x7ad,0x7ad,0x7ad,0x7b0,0x7ad,
-0x7ad,0x7ad,0x7ad,0x7b0,0x7ad,0x7ad,0x7ad,0x7ad,0x7b0,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,
-0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7b0,0x849,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x7c8,0x7c8,0x7cb,
-0x7c8,0x7cb,0x7cb,0x7ce,0x7cb,0x7ce,0x7c8,0x7c8,0x7c8,0x7c8,0x7c8,0x7b9,0x7c8,0x7cb,0x7d1,0x7d1,
-0x7d4,0x7b6,0x7d1,0x7d1,0x7ad,0x7ad,0x7ad,0x7ad,0x3f,0x3f,0x3f,0x3f,0x7c8,0x7c8,0x7c8,0x7cb,
-0x7c8,0x7c8,0x8e8,0x7c8,0x3f,0x7c8,0x7c8,0x7c8,0x7c8,0x7cb,0x7c8,0x7c8,0x7c8,0x7c8,0x7cb,0x7c8,
-0x7c8,0x7c8,0x7c8,0x7cb,0x7c8,0x7c8,0x7c8,0x7c8,0x7cb,0x7c8,0x8e8,0x8e8,0x8e8,0x7c8,0x7c8,0x7c8,
-0x7c8,0x7c8,0x7c8,0x7c8,0x8e8,0x7cb,0x8e8,0x8e8,0x8e8,0x3f,0x8a3,0x8a3,0x846,0x846,0x846,0x846,
-0x846,0x846,0x8eb,0x846,0x846,0x846,0x846,0x846,0x846,0x3f,0x3f,0x846,0xc45,0xc45,0x3f,0x3f,
-#endif /* U_DARWIN */
-0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
-0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
-#ifndef U_DARWIN
-0x918,0x918,0x42,0x918,0x918,0x918,0x91b,0x918,0x42,0x918,0x918,0x42,0x915,0x90c,0x90c,0x90c,
-0x90c,0x915,0x90c,0x42,0x42,0x42,0x90c,0x90f,0x915,0x912,0x42,0x42,0x42,0x42,0x42,0x42,
-0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x870,0x870,0x816,0x816,0x816,0x816,
-0x918,0x918,0x918,0x918,0x918,0x918,0x915,0x915,0x90c,0x90c,0x42,0x42,0x42,0x42,0x42,0x42,
-#else /* U_DARWIN */
-0x94e,0x94e,0x42,0x94e,0x94e,0x94e,0x951,0x94e,0x42,0x94e,0x94e,0x42,0x94b,0x942,0x942,0x942,
-0x942,0x94b,0x942,0x42,0x42,0x42,0x942,0x945,0x94b,0x948,0x42,0x42,0x42,0x42,0x42,0x42,
-0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x8a6,0x8a6,0x84c,0x84c,0x84c,0x84c,
-0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94b,0x94b,0x942,0x942,0x42,0x42,0x42,0x42,0x42,0x42,
-#endif /* U_DARWIN */
-0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,
-#ifndef U_DARWIN
-0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x2e5,0x2e5,0x2e5,0x2e5,
-0x2e5,0x2e5,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x2e2,0x2e2,0x2e2,0x2e2,
-0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,
-0x2e2,0x2e2,0x2e2,0x99c,0x99c,0xb7c,0xb7c,0x2df,0xb7f,0x45,0x45,0x45,0x756,0x756,0x756,0x756,
-0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,
-0x756,0x756,0x756,0x756,0x756,0x756,0x48,0x48,0x48,0x48,0x48,0x759,0x75f,0x75f,0x75f,0x48,
-0x48,0x48,0x48,0x48,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,
-0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x48,0x48,
-0x48,0x48,0x48,0x48,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0xb85,0x825,0x4b,0x825,0x825,
-0x825,0x825,0x4b,0x4b,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x4b,0x825,0x4b,0x825,0x825,
-0x825,0x825,0x4b,0x4b,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0xb85,0x825,0x4b,0x825,0x825,
-0x825,0x825,0x4b,0x4b,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,
-0x825,0x825,0x825,0x825,0x825,0x825,0x825,0xb85,0x825,0x4b,0x825,0x825,0x825,0x825,0x4b,0x4b,
-0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x4b,0x825,0x4b,0x825,0x825,0x825,0x825,0x4b,0x4b,
-0x825,0x825,0x825,0x825,0x825,0x825,0x825,0xb85,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x4b,
-0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0xb85,
-0x825,0x4b,0x825,0x825,0x825,0x825,0x4b,0x4b,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0xb85,
-0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,
-0x825,0x825,0x825,0x4b,0x4b,0x4b,0x4b,0xc24,0xb82,0x873,0x81f,0x81c,0x81c,0x81c,0x81c,0x81f,
-0x81f,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x819,0x819,0x819,0x819,0x819,0x819,
-0x819,0x819,0x819,0x819,0x819,0x4b,0x4b,0x4b,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,
-0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x4e,0x4e,0x4e,
-0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x51,0x831,0x831,0x831,0x831,0x831,0x831,0x831,
-0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,
-0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x82b,0x82e,0x831,0x831,0x831,0x831,0x831,
-0x831,0x831,0x831,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x876,0x834,0x834,0x834,
-0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,
-0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x903,0x891,0x54,0x54,0x54,0x837,0x837,0x837,0x837,
-0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x879,0x879,0x879,0x837,0x837,0x837,0x57,0x57,0x57,
-0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x92d,0x92d,0x92d,0x92d,
-0x92d,0x92d,0x921,0x92d,0x92d,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x927,0x92a,
-0x87f,0x87f,0x8f1,0x930,0x87c,0x83a,0x87f,0x906,0x930,0xb5b,0x5a,0x5a,0x8fd,0x8fd,0x8fd,0x8fd,
-0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0xaa7,0xaa7,0xaa7,0xaa7,
-0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x83d,0x83d,0x882,0x885,
-0x888,0x882,0x88e,0x83d,0x888,0x88b,0x83d,0x8bb,0x8bb,0x8bb,0x8c7,0x5d,0x900,0x900,0x900,0x900,
-0x900,0x900,0x900,0x900,0x900,0x900,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x840,0x840,0x840,0x840,
-0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,
-0x840,0x840,0x840,0x840,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x2ee,0x2e8,0x2ee,0x2e8,
-0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,
-0x2ee,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2eb,0x77d,0x60,0x60,0x60,0x60,0x2ee,0x2e8,0x2ee,0x2e8,
-0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,
-0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x60,0x60,0x60,0x60,0x60,0x60,0x2f7,0x2f7,0x2f7,0x2f7,
-0x2f7,0x2f7,0x2f7,0x2f7,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2f7,0x2f7,0x2f7,0x2f7,
-0x2f7,0x2f7,0x63,0x63,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x63,0x63,0x2f7,0x2f7,0x2f7,0x2f7,
-0x2f7,0x2f7,0x2f7,0x2f7,0x63,0x2fa,0x63,0x2fa,0x63,0x2fa,0x63,0x2fa,0x2f7,0x2f7,0x2f7,0x2f7,
-0x2f7,0x2f7,0x2f7,0x2f7,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2f7,0x2f7,0x2f7,0x2f7,
-0x2f7,0x2f7,0x2f7,0x2f7,0x2f7,0x2f7,0x2f7,0x2f7,0x2f7,0x2f7,0x63,0x63,0x2f7,0x2f7,0x2f7,0x2f7,
-0x2f7,0x2f7,0x2f7,0x2f7,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2f7,0x2f7,0x2f7,0x2f7,
-0x2f7,0x63,0x2f7,0x2f7,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2f4,0x2f7,0x2f4,0x2f4,0x2f1,0x2f7,0x2f7,
-0x2f7,0x63,0x2f7,0x2f7,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2f1,0x2f1,0x2f1,0x2f7,0x2f7,0x2f7,0x2f7,
-0x63,0x63,0x2f7,0x2f7,0x2fa,0x2fa,0x2fa,0x2fa,0x63,0x2f1,0x2f1,0x2f1,0x2f7,0x2f7,0x2f7,0x2f7,
-0x2f7,0x2f7,0x2f7,0x2f7,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2f1,0x2f1,0x2f1,0x63,0x63,0x2f7,0x2f7,
-0x2f7,0x63,0x2f7,0x2f7,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2f1,0x2f4,0x63,0xa71,0x99f,0x99f,0x99f,
-0x66,0x66,0x66,0x66,0x66,0x66,0x528,0x528,0x528,0x528,0x528,0x528,0x30c,0x9ab,0x69,0x69,
-0x1a1,0x30c,0x30c,0x30c,0x30c,0x30c,0x312,0x318,0x312,0x693,0x45c,0x1a4,0x309,0x19e,0x19e,0x19e,
-0x19e,0x309,0x309,0x309,0x309,0x309,0x30f,0x315,0x30f,0x690,0x459,0x69,0xb8b,0xb8b,0xb8b,0xb8b,
-0xb8b,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x6e1,0x6e1,0x6e1,0x6e1,
-0x6e1,0x6e1,0x6e1,0x6bd,0x6e4,0x6f6,0x6e1,0x7b6,0x7cb,0x909,0x909,0x909,0xa6e,0xa6e,0xc7e,0xc7e,
-0xc7e,0xc7e,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,
-0x6c,0x6c,0x6c,0x6c,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
-0x531,0x52e,0x52e,0x52e,0x52e,0x531,0x8be,0x8be,0xa11,0xa17,0xa17,0xa14,0xa14,0xa14,0xa14,0xc27,
-0xd11,0xd11,0xd11,0xd11,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
-0x6f,0x6f,0x6f,0x6f,0x9b4,0x9b1,0x9b1,0x9b1,0x9b1,0x9ba,0x9b7,0x9b7,0x9b7,0x9b7,0x9ae,0x9b1,
-0xb8e,0xca2,0xca5,0x72,0x75,0x75,0x75,0x3e7,0x1b3,0x16b,0x33c,0x33c,0x33c,0x33c,0x33c,0x1b3,
-0x3e7,0x3e7,0x1b3,0x33c,0x342,0x342,0x342,0x84f,0xca8,0x75,0x75,0x75,0x75,0x75,0x75,0x75,
-0x75,0x75,0x75,0x75,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x351,0x351,
-0x348,0x348,0x348,0x348,0xcae,0xcae,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0x78,0x78,0x78,0x78,
-#else /* U_DARWIN */
-0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x2e8,0x2e8,0x2e8,0x2e8,
-0x2e8,0x2e8,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x2e5,0x2e5,0x2e5,0x2e5,
-0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,
-0x2e5,0x2e5,0x2e5,0x9d2,0x9d2,0xbb2,0xbb2,0x2e2,0xbb5,0x45,0x45,0x45,0x78c,0x78c,0x78c,0x78c,
-0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,
-0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x48,0x48,0x48,0x48,0x48,0x78f,0x795,0x795,0x795,0x48,
-0x48,0x48,0x48,0x48,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,
-0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x48,0x48,
-0x48,0x48,0x48,0x48,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0xbbb,0x85b,0x4b,0x85b,0x85b,
-0x85b,0x85b,0x4b,0x4b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x4b,0x85b,0x4b,0x85b,0x85b,
-0x85b,0x85b,0x4b,0x4b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0xbbb,0x85b,0x4b,0x85b,0x85b,
-0x85b,0x85b,0x4b,0x4b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,
-0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0xbbb,0x85b,0x4b,0x85b,0x85b,0x85b,0x85b,0x4b,0x4b,
-0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x4b,0x85b,0x4b,0x85b,0x85b,0x85b,0x85b,0x4b,0x4b,
-0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0xbbb,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x4b,
-0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0xbbb,
-0x85b,0x4b,0x85b,0x85b,0x85b,0x85b,0x4b,0x4b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0xbbb,
-0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,
-0x85b,0x85b,0x85b,0x4b,0x4b,0x4b,0x4b,0xc5a,0xbb8,0x8a9,0x855,0x852,0x852,0x852,0x852,0x855,
-0x855,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,
-0x84f,0x84f,0x84f,0x84f,0x84f,0x4b,0x4b,0x4b,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,
-0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x4e,0x4e,0x4e,
-0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x51,0x867,0x867,0x867,0x867,0x867,0x867,0x867,
-0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,
-0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x861,0x864,0x867,0x867,0x867,0x867,0x867,
-0x867,0x867,0x867,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x8ac,0x86a,0x86a,0x86a,
-0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,
-0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x939,0x8c7,0x54,0x54,0x54,0x86d,0x86d,0x86d,0x86d,
-0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x8af,0x8af,0x8af,0x86d,0x86d,0x86d,0x57,0x57,0x57,
-0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x963,0x963,0x963,0x963,
-0x963,0x963,0x957,0x963,0x963,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95d,0x960,
-0x8b5,0x8b5,0x927,0x966,0x8b2,0x870,0x8b5,0x93c,0x966,0xb91,0x5a,0x5a,0x933,0x933,0x933,0x933,
-0x933,0x933,0x933,0x933,0x933,0x933,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0xadd,0xadd,0xadd,0xadd,
-0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x873,0x873,0x8b8,0x8bb,
-0x8be,0x8b8,0x8c4,0x873,0x8be,0x8c1,0x873,0x8f1,0x8f1,0x8f1,0x8fd,0x5d,0x936,0x936,0x936,0x936,
-0x936,0x936,0x936,0x936,0x936,0x936,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x876,0x876,0x876,0x876,
-0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,
-0x876,0x876,0x876,0x876,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x2f1,0x2eb,0x2f1,0x2eb,
-0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,
-0x2f1,0x2eb,0x2eb,0x2eb,0x2eb,0x2eb,0x2ee,0x7b3,0x60,0x60,0x60,0x60,0x2f1,0x2eb,0x2f1,0x2eb,
-0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,
-0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x60,0x60,0x60,0x60,0x60,0x60,0x2fa,0x2fa,0x2fa,0x2fa,
-0x2fa,0x2fa,0x2fa,0x2fa,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fa,0x2fa,0x2fa,0x2fa,
-0x2fa,0x2fa,0x63,0x63,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x63,0x63,0x2fa,0x2fa,0x2fa,0x2fa,
-0x2fa,0x2fa,0x2fa,0x2fa,0x63,0x2fd,0x63,0x2fd,0x63,0x2fd,0x63,0x2fd,0x2fa,0x2fa,0x2fa,0x2fa,
-0x2fa,0x2fa,0x2fa,0x2fa,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fa,0x2fa,0x2fa,0x2fa,
-0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x63,0x63,0x2fa,0x2fa,0x2fa,0x2fa,
-0x2fa,0x2fa,0x2fa,0x2fa,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fa,0x2fa,0x2fa,0x2fa,
-0x2fa,0x63,0x2fa,0x2fa,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2f7,0x2fa,0x2f7,0x2f7,0x2f4,0x2fa,0x2fa,
-0x2fa,0x63,0x2fa,0x2fa,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2f4,0x2f4,0x2f4,0x2fa,0x2fa,0x2fa,0x2fa,
-0x63,0x63,0x2fa,0x2fa,0x2fd,0x2fd,0x2fd,0x2fd,0x63,0x2f4,0x2f4,0x2f4,0x2fa,0x2fa,0x2fa,0x2fa,
-0x2fa,0x2fa,0x2fa,0x2fa,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2f4,0x2f4,0x2f4,0x63,0x63,0x2fa,0x2fa,
-0x2fa,0x63,0x2fa,0x2fa,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2f4,0x2f7,0x63,0xaa7,0x9d5,0x9d5,0x9d5,
-0x66,0x66,0x66,0x66,0x66,0x66,0x543,0x543,0x543,0x543,0x543,0x543,0x30f,0x9e1,0x69,0x69,
-0x1a1,0x30f,0x30f,0x30f,0x30f,0x30f,0x315,0x31b,0x315,0x6c3,0x471,0x1a4,0x30c,0x19e,0x19e,0x19e,
-0x19e,0x30c,0x30c,0x30c,0x30c,0x30c,0x312,0x318,0x312,0x6c0,0x46e,0x69,0xbc1,0xbc1,0xbc1,0xbc1,
-0xbc1,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x714,0x714,0x714,0x714,
-0x714,0x714,0x714,0x6f0,0x717,0x72c,0x714,0x7ec,0x801,0x93f,0x93f,0x93f,0xaa4,0xaa4,0xcb4,0xcb4,
-0xcb4,0xcb4,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,
-0x6c,0x6c,0x6c,0x6c,0x54c,0x54c,0x54c,0x54c,0x54c,0x54c,0x54c,0x54c,0x54c,0x54c,0x54c,0x54c,
-0x54c,0x549,0x549,0x549,0x549,0x54c,0x8f4,0x8f4,0xa47,0xa4d,0xa4d,0xa4a,0xa4a,0xa4a,0xa4a,0xc5d,
-0xd47,0xd47,0xd47,0xd47,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
-0x6f,0x6f,0x6f,0x6f,0x9ea,0x9e7,0x9e7,0x9e7,0x9e7,0x9f0,0x9ed,0x9ed,0x9ed,0x9ed,0x9e4,0x9e7,
-0xbc4,0xcd8,0xcdb,0x72,0x75,0x75,0x75,0x3f0,0x1b3,0x16b,0x33f,0x33f,0x33f,0x33f,0x33f,0x1b3,
-0x3f0,0x3f0,0x1b3,0x33f,0x345,0x345,0x345,0x885,0xcde,0x75,0x75,0x75,0x75,0x75,0x75,0x75,
-0x75,0x75,0x75,0x75,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x354,0x354,
-0x34b,0x34b,0x34b,0x34b,0xce4,0xce4,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0x78,0x78,0x78,0x78,
+0x3c,0x3c,0x3c,0x3c,0xdec,0xdec,0xdd4,0xde6,0xde6,0xdd4,0xdd4,0xde9,0xde9,0xde9,0xde9,0xde9,
+0xde9,0xdd7,0xdec,0xde9,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0x3f,0x3f,
+0x3f,0x3f,0xddd,0xddd,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x42,0x42,0x42,0x42,0x42,0x42,
+#else /* U_DARWIN */
+0x3c,0x3c,0x3c,0x3c,0xe22,0xe22,0xe0a,0xe1c,0xe1c,0xe0a,0xe0a,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,
+0xe1f,0xe0d,0xe22,0xe1f,0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0x3f,0x3f,
+0x3f,0x3f,0xe13,0xe13,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x42,0x42,0x42,0x42,0x42,0x42,
+#endif /* U_DARWIN */
+0x42,0x42,0x42,0x42,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,
+#ifndef U_DARWIN
+0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x9e7,0x9e7,0xbe5,0xbe5,0x39c,
+0xbe8,0x42,0x42,0x42,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,
+0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x45,0x45,
+0x45,0x45,0x45,0x6d5,0x3a8,0x3a8,0x3a8,0x45,0x45,0x45,0x45,0x45,0x3a5,0x3a5,0x3a5,0x3a5,
+#else /* U_DARWIN */
+0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0xa1d,0xa1d,0xc1b,0xc1b,0x39c,
+0xc1e,0x42,0x42,0x42,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,
+0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x45,0x45,
+0x45,0x45,0x45,0x6f3,0x3a8,0x3a8,0x3a8,0x45,0x45,0x45,0x45,0x45,0x3a5,0x3a5,0x3a5,0x3a5,
+#endif /* U_DARWIN */
+0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,
+#ifndef U_DARWIN
+0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x45,0x45,0x45,0x45,0x45,0x45,0x8b2,0x8b2,0x8b2,0x8b2,
+0x8b2,0x8b2,0x8b2,0xbf1,0x8b2,0x48,0x8b2,0x8b2,0x8b2,0x8b2,0x48,0x48,0x8b2,0x8b2,0x8b2,0x8b2,
+0x8b2,0x8b2,0x8b2,0x48,0x8b2,0x48,0x8b2,0x8b2,0x8b2,0x8b2,0x48,0x48,0x8b2,0x8b2,0x8b2,0x8b2,
+0x8b2,0x8b2,0x8b2,0xbf1,0x8b2,0x48,0x8b2,0x8b2,0x8b2,0x8b2,0x48,0x48,0x8b2,0x8b2,0x8b2,0x8b2,
+0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0xbf1,
+0x8b2,0x48,0x8b2,0x8b2,0x8b2,0x8b2,0x48,0x48,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x48,
+0x8b2,0x48,0x8b2,0x8b2,0x8b2,0x8b2,0x48,0x48,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0xbf1,
+0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x48,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,
+0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0xbf1,0x8b2,0x48,0x8b2,0x8b2,0x8b2,0x8b2,0x48,0x48,
+0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0xbf1,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,
+0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x48,0x48,0x48,0x48,0xbeb,
+0xbee,0x8ac,0x8b5,0x8a9,0x8a9,0x8a9,0x8a9,0x8b5,0x8b5,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,
+0x8af,0x8af,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x8a6,0x48,0x48,0x48,
+0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,
+0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,
+0x4e,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,
+0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,
+0x8be,0x8bb,0x8c1,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x4e,0x4e,0x4e,0x4e,0x4e,
+0x4e,0x4e,0x4e,0x4e,0x8ca,0x8cd,0x8cd,0x8cd,0x8cd,0x8cd,0x8cd,0x8cd,0x8cd,0x8cd,0x8cd,0x8cd,
+0x8cd,0x8cd,0x8cd,0x8cd,0x8cd,0x8cd,0x8cd,0x8cd,0x8cd,0x8cd,0x8cd,0x8cd,0x8cd,0x8cd,0x8cd,0x8c7,
+0x8c4,0x51,0x51,0x51,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d0,
+0x8d0,0x8d0,0x8d3,0x8d3,0x8d3,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,
+0x54,0x54,0x54,0x54,0x8f7,0x8f7,0x8f7,0x8f7,0x8f7,0x8f7,0x8d9,0x8f7,0x8f7,0x8dc,0x8dc,0x8dc,
+0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8df,0x8e2,0x8ee,0x8ee,0x8f1,0x8fa,0x8e8,0x8e5,0x8ee,0x8eb,
+0x8fa,0xb13,0x57,0x57,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x57,0x57,
+0x57,0x57,0x57,0x57,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0x57,0x57,
+0x57,0x57,0x57,0x57,0x90c,0x90c,0x903,0x906,0x915,0x900,0x912,0x90c,0x918,0x924,0x90c,0x927,
+0x927,0x927,0x90f,0x5a,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x5a,0x5a,
+0x5a,0x5a,0x5a,0x5a,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,
+0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x5a,0x5a,0x5a,0x5a,
+#else /* U_DARWIN */
+0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x45,0x45,0x45,0x45,0x45,0x45,0x8e8,0x8e8,0x8e8,0x8e8,
+0x8e8,0x8e8,0x8e8,0xc27,0x8e8,0x48,0x8e8,0x8e8,0x8e8,0x8e8,0x48,0x48,0x8e8,0x8e8,0x8e8,0x8e8,
+0x8e8,0x8e8,0x8e8,0x48,0x8e8,0x48,0x8e8,0x8e8,0x8e8,0x8e8,0x48,0x48,0x8e8,0x8e8,0x8e8,0x8e8,
+0x8e8,0x8e8,0x8e8,0xc27,0x8e8,0x48,0x8e8,0x8e8,0x8e8,0x8e8,0x48,0x48,0x8e8,0x8e8,0x8e8,0x8e8,
+0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0xc27,
+0x8e8,0x48,0x8e8,0x8e8,0x8e8,0x8e8,0x48,0x48,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x48,
+0x8e8,0x48,0x8e8,0x8e8,0x8e8,0x8e8,0x48,0x48,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0xc27,
+0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x48,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,
+0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0xc27,0x8e8,0x48,0x8e8,0x8e8,0x8e8,0x8e8,0x48,0x48,
+0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0xc27,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,
+0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x48,0x48,0x48,0x48,0xc21,
+0xc24,0x8e2,0x8eb,0x8df,0x8df,0x8df,0x8df,0x8eb,0x8eb,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,
+0x8e5,0x8e5,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x48,0x48,0x48,
+0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,
+0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,
+0x4e,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,
+0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,
+0x8f4,0x8f1,0x8f7,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x4e,0x4e,0x4e,0x4e,0x4e,
+0x4e,0x4e,0x4e,0x4e,0x900,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,
+0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x8fd,
+0x8fa,0x51,0x51,0x51,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x906,
+0x906,0x906,0x909,0x909,0x909,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,
+0x54,0x54,0x54,0x54,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x90f,0x92d,0x92d,0x912,0x912,0x912,
+0x912,0x912,0x912,0x912,0x912,0x912,0x915,0x918,0x924,0x924,0x927,0x930,0x91e,0x91b,0x924,0x921,
+0x930,0xb49,0x57,0x57,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x57,0x57,
+0x57,0x57,0x57,0x57,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0x57,0x57,
+0x57,0x57,0x57,0x57,0x942,0x942,0x939,0x93c,0x94b,0x936,0x948,0x942,0x94e,0x95a,0x942,0x95d,
+0x95d,0x95d,0x945,0x5a,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x5a,0x5a,
+0x5a,0x5a,0x5a,0x5a,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,
+0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x5a,0x5a,0x5a,0x5a,
+#endif /* U_DARWIN */
+0x5a,0x5a,0x5a,0x5a,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c3,0x3c3,0x3c3,0x3c3,
+0x3c3,0x3c3,0x3c3,0x3c3,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x5d,0x5d,0x3c3,0x3c3,0x3c3,0x3c3,
+0x3c3,0x3c3,0x5d,0x5d,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x5d,0x3c3,0x5d,0x3c3,
+0x5d,0x3c3,0x5d,0x3c3,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c3,0x3c3,0x3c3,0x3c3,
+0x3c3,0x3c3,0x3c3,0x3c3,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,
+0x3c0,0x3c0,0x5d,0x5d,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c3,0x3c3,0x3c3,0x3c3,
+0x3c3,0x3c3,0x3c3,0x3c3,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x5d,0x3c0,0x3c0,0x3c3,0x3c3,0x3c3,0x3c3,
+0x3c3,0x3ba,0x3c0,0x3ba,0x3ba,0x3b7,0x3c0,0x3c0,0x3c0,0x5d,0x3c0,0x3c0,0x3c3,0x3c3,0x3c3,0x3c3,
+0x3c3,0x3b7,0x3b7,0x3b7,0x3c0,0x3c0,0x3c0,0x3c0,0x5d,0x5d,0x3c0,0x3c0,0x3c3,0x3c3,0x3c3,0x3c3,
+0x5d,0x3b7,0x3b7,0x3b7,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c3,0x3c3,0x3c3,0x3c3,
+0x3c3,0x3b7,0x3b7,0x3b7,0x5d,0x5d,0x3c0,0x3c0,0x3c0,0x5d,0x3c0,0x3c0,0x3c3,0x3c3,0x3c3,0x3c3,
+#ifndef U_DARWIN
+0x3c3,0x3bd,0x3ba,0x5d,0x9ea,0x9ed,0x9ed,0x9ed,0xdf8,0x60,0x60,0x60,0x60,0x60,0x3cc,0x3cc,
+0x3cc,0x3cc,0x3cc,0x3cc,0x414,0x9ff,0x63,0x63,0x5a3,0x414,0x414,0x414,0x414,0x414,0x41a,0x42c,
+0x41a,0x426,0x420,0x5a6,0x411,0x5a0,0x5a0,0x5a0,0x5a0,0x411,0x411,0x411,0x411,0x411,0x417,0x429,
+0x417,0x423,0x41d,0x63,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0x63,0x63,0x63,0x63,0x63,0x63,0x63,
+0x63,0x63,0x63,0x63,0x432,0x432,0x432,0x432,0x432,0x432,0x432,0x42f,0x435,0x606,0x432,0x7f5,
+0x816,0x933,0x933,0x933,0xa02,0xa02,0xbfd,0xbfd,0xbfd,0xbfd,0x66,0x66,0x66,0x66,0x66,0x66,
+#else /* U_DARWIN */
+0x3c3,0x3bd,0x3ba,0x5d,0xa20,0xa23,0xa23,0xa23,0xe2e,0x60,0x60,0x60,0x60,0x60,0x3cc,0x3cc,
+0x3cc,0x3cc,0x3cc,0x3cc,0x414,0xa35,0x63,0x63,0x5af,0x414,0x414,0x414,0x414,0x414,0x41a,0x42c,
+0x41a,0x426,0x420,0x5b2,0x411,0x5ac,0x5ac,0x5ac,0x5ac,0x411,0x411,0x411,0x411,0x411,0x417,0x429,
+0x417,0x423,0x41d,0x63,0xc30,0xc30,0xc30,0xc30,0xc30,0x63,0x63,0x63,0x63,0x63,0x63,0x63,
+0x63,0x63,0x63,0x63,0x432,0x432,0x432,0x432,0x432,0x432,0x432,0x42f,0x435,0x618,0x432,0x82b,
+0x84c,0x969,0x969,0x969,0xa38,0xa38,0xc33,0xc33,0xc33,0xc33,0x66,0x66,0x66,0x66,0x66,0x66,
+#endif /* U_DARWIN */
+0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x43b,0x43b,0x43b,0x43b,
+#ifndef U_DARWIN
+0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x438,0x438,0x438,0x438,0x43b,0x936,0x936,
+0xa05,0xa0b,0xa0b,0xa08,0xa08,0xa08,0xa08,0xc00,0xcff,0xcff,0xcff,0xcff,0xdfb,0x69,0x69,0x69,
+0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0xa14,0xa11,0xa11,0xa11,
+0xa11,0xa1a,0xa17,0xa17,0xa17,0xa17,0xa0e,0xa11,0xc03,0xd02,0xd05,0xdfe,0x6c,0x6c,0x6c,0x5c1,
+0x5be,0x45f,0x462,0x462,0x462,0x462,0x462,0x5be,0x5c1,0x5c1,0x5be,0x462,0x468,0x468,0x468,0x93f,
+0xd08,0xe01,0xe01,0xe01,0xe01,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x5cd,0x5cd,0x5cd,0x5cd,
+0x5cd,0x5cd,0x5cd,0x5cd,0x5cd,0x5cd,0x474,0x474,0x471,0x471,0x471,0x471,0xd0e,0xd0e,0xd0e,0xd0b,
+0xd0b,0xd0b,0xd0b,0xd0b,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+#else /* U_DARWIN */
+0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x438,0x438,0x438,0x438,0x43b,0x96c,0x96c,
+0xa3b,0xa41,0xa41,0xa3e,0xa3e,0xa3e,0xa3e,0xc36,0xd35,0xd35,0xd35,0xd35,0xe31,0x69,0x69,0x69,
+0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0xa4a,0xa47,0xa47,0xa47,
+0xa47,0xa50,0xa4d,0xa4d,0xa4d,0xa4d,0xa44,0xa47,0xc39,0xd38,0xd3b,0xe34,0x6c,0x6c,0x6c,0x5cd,
+0x5ca,0x45f,0x462,0x462,0x462,0x462,0x462,0x5ca,0x5cd,0x5cd,0x5ca,0x462,0x468,0x468,0x468,0x975,
+0xd3e,0xe37,0xe37,0xe37,0xe37,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x5d9,0x5d9,0x5d9,0x5d9,
+0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x474,0x474,0x471,0x471,0x471,0x471,0xd44,0xd44,0xd44,0xd41,
+0xd41,0xd41,0xd41,0xd41,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+#endif /* U_DARWIN */
+0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x48c,0x48c,0x48c,0x48c,
+#ifndef U_DARWIN
+0x48c,0x948,0x948,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,
+#else /* U_DARWIN */
+0x48c,0x97e,0x97e,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,
+#endif /* U_DARWIN */
+0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x48f,0x48f,0x48f,0x48f,
+0x48f,0x48f,0x48f,0x48f,0x48f,0x48f,0x48f,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,
+#ifndef U_DARWIN
+0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0xa32,0xa32,0xa32,0xa32,
+0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xc0c,0xc0c,
+0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xe04,0x78,0x78,0xb28,0xb28,0xc0c,0xc0c,
+0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xd11,0xe04,
+0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0x78,0x78,0x78,0xe04,0xe04,0xe04,0xe04,
+#else /* U_DARWIN */
+0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0xa68,0xa68,0xa68,0xa68,
+0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xc42,0xc42,
+0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xe3a,0x78,0x78,0xb5e,0xb5e,0xc42,0xc42,
+0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xd47,0xe3a,
+0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0x78,0x78,0x78,0xe3a,0xe3a,0xe3a,0xe3a,
#endif /* U_DARWIN */
0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,
+0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,
+0x7b,0x4ad,0x4ad,0x4ad,0x4ad,0x7b,0x4ad,0x4ad,0x4ad,0x4ad,0x7b,0x7b,0x4ad,0x4ad,0x4ad,0x4ad,
+0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,
+0x7b,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,
#ifndef U_DARWIN
-0x78,0x78,0x78,0x78,0x363,0x363,0x363,0x363,0x363,0x858,0x858,0x7b,0x7b,0x7b,0x7b,0x7b,
-#else /* U_DARWIN */
-0x78,0x78,0x78,0x78,0x366,0x366,0x366,0x366,0x366,0x88e,0x88e,0x7b,0x7b,0x7b,0x7b,0x7b,
-#endif /* U_DARWIN */
-0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,
-#ifndef U_DARWIN
-0x7b,0x7b,0x7b,0x7b,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x7e,
-#else /* U_DARWIN */
-0x7b,0x7b,0x7b,0x7b,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x7e,
-#endif /* U_DARWIN */
-0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,
-#ifndef U_DARWIN
-0x7e,0x7e,0x7e,0x7e,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0xab9,0xab9,
-0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,
-0xb97,0x81,0x81,0x81,0xab9,0xab9,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,
-0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xcb1,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,
-#else /* U_DARWIN */
-0x7e,0x7e,0x7e,0x7e,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xaef,0xaef,
-0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,
-0xbcd,0x81,0x81,0x81,0xaef,0xaef,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,
-0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xce7,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,
-#endif /* U_DARWIN */
-0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,
-#ifndef U_DARWIN
-0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x375,0x375,0x375,0x375,0x84,0x375,0x375,
-0x375,0x375,0x84,0x84,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,
-0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x84,0x375,0x375,0x375,0x375,0x375,0x375,0x375,
-0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x3ed,0x375,0x375,
-0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x84,0x375,0x84,0x375,
-0x375,0x375,0x375,0x84,0x84,0x84,0x375,0x84,0x375,0x375,0x375,0x70e,0x70e,0x70e,0x70e,0x84,
-0x84,0x375,0x55b,0x55b,0x375,0x375,0x375,0x375,0xa5c,0xa02,0xa5c,0xa02,0xa5c,0xa02,0xa5c,0xa02,
-0xa5c,0xa02,0xa5c,0xa02,0xa5c,0xa02,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,
-#else /* U_DARWIN */
-0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x378,0x378,0x378,0x378,0x84,0x378,0x378,
-0x378,0x378,0x84,0x84,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,
-0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x84,0x378,0x378,0x378,0x378,0x378,0x378,0x378,
-0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x3f6,0x378,0x378,
-0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x84,0x378,0x84,0x378,
-0x378,0x378,0x378,0x84,0x84,0x84,0x378,0x84,0x378,0x378,0x378,0x744,0x744,0x744,0x744,0x84,
-0x84,0x378,0x57c,0x57c,0x378,0x378,0x378,0x378,0xa92,0xa38,0xa92,0xa38,0xa92,0xa38,0xa92,0xa38,
-0xa92,0xa38,0xa92,0xa38,0xa92,0xa38,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,
-#endif /* U_DARWIN */
-0x174,0x174,0x174,0x174,0x174,0x174,0x174,0x174,0x174,0x174,0x174,0x174,0x174,0x174,0x174,0x174,
-#ifndef U_DARWIN
-0x174,0x174,0x174,0x174,0x375,0x84,0x84,0x84,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,
-0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x84,0x375,0x375,0x375,0x375,0x375,0x375,0x375,
-0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x84,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,
-0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,
-0x8d0,0x8d0,0x87,0x8d0,0x8d0,0x8d0,0x8d0,0x8d3,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,
-0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d3,0x87,0x87,0x87,0x87,
-0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,
-0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8a,0x8a,
-0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x90,0x642,0x5b5,0x642,0x5b5,0x642,0x5b5,0x642,
-0x5b5,0x642,0x5b5,0x5b5,0x5b8,0x5b5,0x5b8,0x5b5,0x5b8,0x5b5,0x5b8,0x5b5,0x5b8,0x5b5,0x5b8,0x5b5,
-0x5b8,0x5b5,0x5b8,0x5b5,0x5b8,0x5b5,0x5b8,0x5b5,0x5b5,0x5b5,0x5b5,0x642,0x5b5,0x642,0x5b5,0x642,
-0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x642,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b8,0xa53,0xa53,0x90,
-0x90,0x549,0x549,0x63f,0x63f,0x645,0x648,0xa38,0x93,0x93,0x93,0x93,0x93,0x5c1,0x5c1,0x5c1,
-0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,
-0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x93,0x93,0x93,0x96,0x5c4,0x5c4,0x5c4,
-0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x96,
-0x5ca,0x5ca,0x5cd,0x5cd,0x5cd,0x5cd,0x5cd,0x5cd,0x5cd,0x5cd,0x5cd,0x5cd,0x5cd,0x5cd,0x5cd,0x5cd,
-0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,
-0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
-0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,
-0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0xb40,0xb40,0x9c,
-0x5d3,0x5d3,0x5d3,0x5d3,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,
-0xb3d,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,
-0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,
-0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x9c,
-0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,
-0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,
-0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,
-0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xa2,0xa2,0xa2,0xa2,
-#else /* U_DARWIN */
-0x174,0x174,0x174,0x174,0x378,0x84,0x84,0x84,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,
-0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x84,0x378,0x378,0x378,0x378,0x378,0x378,0x378,
-0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x84,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,
-0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,
-0x906,0x906,0x87,0x906,0x906,0x906,0x906,0x909,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,
-0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x909,0x87,0x87,0x87,0x87,
-0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,
-0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x8a,0x8a,
-0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x90,0x66c,0x5dc,0x66c,0x5dc,0x66c,0x5dc,0x66c,
-0x5dc,0x66c,0x5dc,0x5dc,0x5df,0x5dc,0x5df,0x5dc,0x5df,0x5dc,0x5df,0x5dc,0x5df,0x5dc,0x5df,0x5dc,
-0x5df,0x5dc,0x5df,0x5dc,0x5df,0x5dc,0x5df,0x5dc,0x5dc,0x5dc,0x5dc,0x66c,0x5dc,0x66c,0x5dc,0x66c,
-0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x66c,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5df,0xa89,0xa89,0x90,
-0x90,0x56a,0x56a,0x669,0x669,0x66f,0x672,0xa6e,0x93,0x93,0x93,0x93,0x93,0x5e8,0x5e8,0x5e8,
-0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,
-0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x93,0x93,0x93,0x96,0x5eb,0x5eb,0x5eb,
-0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x96,
-0x5f1,0x5f1,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,
-0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,
-0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
-0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
-0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0xb76,0xb76,0x9c,
-0x5fa,0x5fa,0x5fa,0x5fa,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,
-0xb73,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,
-0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,
-0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x9c,
-0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,
-0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,
-0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,
-0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xa2,0xa2,0xa2,0xa2,
-#endif /* U_DARWIN */
-0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,
-#ifndef U_DARWIN
-0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0x8eb,0x8eb,0x8eb,0x8eb,
-0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0xa5,0xa5,0xa5,0x8ee,0x8ee,0x8ee,0x8ee,
-0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x5e8,0x5eb,0x5e8,0x5eb,
-0x5eb,0x5e8,0x5e8,0x5eb,0x5eb,0x5eb,0x5e8,0x5e8,0x5e8,0x5e8,0xae,0xae,0xa44,0xa44,0xa44,0xa44,
-0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xae,
-0xae,0xae,0xae,0xae,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,
-0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xae,0xae,
-#else /* U_DARWIN */
-0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0x921,0x921,0x921,0x921,
-0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0xa5,0xa5,0xa5,0x924,0x924,0x924,0x924,
-0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x60f,0x612,0x60f,0x612,
-0x612,0x60f,0x60f,0x612,0x612,0x612,0x60f,0x60f,0x60f,0x60f,0xae,0xae,0xa7a,0xa7a,0xa7a,0xa7a,
-0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xae,
-0xae,0xae,0xae,0xae,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,
-0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xae,0xae,
-#endif /* U_DARWIN */
-0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,
-0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,
-#ifndef U_DARWIN
-0x387,0x387,0x387,0x387,0x387,0x387,0x387,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0x378,0x378,0x378,0x378,0x378,0xb1,0xb1,0xb1,0xb1,0xb1,0x864,0x534,0x37e,
-0x384,0x384,0x384,0x384,0x384,0x384,0x384,0x384,0x384,0x37b,0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,
-0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0xb1,0x37e,0x37e,0x37e,0x37e,0x37e,0xb1,0x37e,0xb1,
-0x37e,0x37e,0xb1,0x37e,0x37e,0xb1,0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0x381,
-0x393,0x38d,0x393,0x38d,0x390,0x396,0x393,0x38d,0x390,0x396,0x393,0x38d,0x390,0x396,0x393,0x38d,
-0x393,0x38d,0x390,0x396,0x393,0x38d,0x393,0x38d,0x390,0x396,0x393,0x38d,0x390,0x396,0x393,0x38d,
-0x393,0x38d,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,
-0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0x393,0x38d,0x390,0x396,0x393,0x38d,0x393,0x38d,0x393,
-0x38d,0x393,0x393,0x38d,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,
-0xb4,0xb4,0xb4,0xb4,0x390,0x38d,0x390,0x390,0x390,0x390,0x390,0x390,0x38d,0x390,0x38d,0x38d,
-0x390,0x390,0x38d,0x38d,0x38d,0x38d,0x38d,0x390,0x38d,0x38d,0x390,0x38d,0x390,0x390,0x390,0x38d,
-0x390,0x390,0x390,0x390,0xb4,0xb4,0x390,0x390,0x390,0x390,0x38d,0x38d,0x390,0x38d,0x38d,0x38d,
-0x38d,0x390,0x38d,0x38d,0x38d,0x38d,0x38d,0x390,0x390,0x390,0x38d,0x38d,0xb4,0xb4,0xb4,0xb4,
-0xb4,0xb4,0xb4,0xb4,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,
-0x936,0x936,0x936,0x936,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x38a,0x38a,
-0xa6b,0xabc,0xb4,0xb4,0x537,0x537,0x537,0x537,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,
-0xb7,0xb7,0xb7,0xb7,0x5f1,0x5f4,0x5f4,0x5fa,0x5fa,0x6ab,0x486,0x6ab,0x486,0x6ab,0x486,0x6ab,
-0x486,0x6ab,0x486,0x6ab,0x486,0x6ae,0x489,0x6ae,0x489,0xa47,0xa47,0xb52,0xb10,0x5ee,0x5ee,0x5ee,
-0x5ee,0x5f7,0x5f7,0x5f7,0x48f,0x603,0x492,0xba,0x65a,0x65a,0x564,0x564,0x600,0x6b1,0x48c,0x6b1,
-0x48c,0x6b1,0x48c,0x5fd,0x5fd,0x606,0x606,0x609,0x606,0x606,0x606,0xba,0x606,0x705,0x6d8,0x5fd,
-0xba,0xba,0xba,0xba,0x399,0x3a5,0x399,0x9d2,0x399,0xbd,0x399,0x3a5,0x399,0x3a5,0x399,0x3a5,
-0x399,0x3a5,0x399,0x3a5,0x3a5,0x3a2,0x39c,0x39f,0x3a5,0x3a2,0x39c,0x39f,0x3a5,0x3a2,0x39c,0x39f,
-0x3a5,0x3a2,0x39c,0x3a2,0x39c,0x3a2,0x39c,0x39f,0x3a5,0x3a2,0x39c,0x3a2,0x39c,0x3a2,0x39c,0x3a2,
-0x39c,0xbd,0xbd,0x753,0x6cf,0x6f9,0x585,0x588,0x57c,0x6f9,0x6f9,0xc3,0x3f0,0x3f3,0x3f3,0x3f3,
-0x3f3,0x3f0,0x3f0,0xc3,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x8c1,0x8c1,0x8c1,
-0x7c8,0x1ef,0x165,0x165,0xc3,0x55e,0x582,0x57c,0x6f9,0x6cf,0x57c,0x582,0x69c,0x46b,0x57c,0x585,
-0x46e,0x57f,0x471,0x57c,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x636,0x636,
-0x585,0x585,0x585,0x55e,0x3f9,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,
-0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,
-0x3f6,0x3f6,0x3f6,0xc3,0xc3,0xc3,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0xc3,0xc3,0x3f6,0x3f6,
-0x3f6,0x3f6,0x3f6,0x3f6,0xc3,0xc3,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0xc3,0xc3,0x3f6,0x3f6,
-0x3f6,0xc3,0xc3,0xc3,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,
-0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,
-0x942,0x942,0x942,0xc6,0x93f,0x93f,0x93f,0x93f,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,
-0xc6,0xc6,0xc6,0xc6,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,
-0x945,0x945,0x945,0x945,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,
-0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,
-0xcc,0xcc,0xcc,0xcc,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0xcf,0xcf,0xcf,0x951,0x951,
-0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,
-0x951,0x951,0x951,0x951,0x954,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,
-0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,
-0x951,0x951,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,
-#else /* U_DARWIN */
-0x390,0x390,0x390,0x390,0x390,0x390,0x390,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0x381,0x381,0x381,0x381,0x381,0xb1,0xb1,0xb1,0xb1,0xb1,0x89a,0x552,0x387,
-0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x384,0x387,0x387,0x387,0x387,0x387,0x387,
-0x387,0x387,0x387,0x387,0x387,0x387,0x387,0xb1,0x387,0x387,0x387,0x387,0x387,0xb1,0x387,0xb1,
-0x387,0x387,0xb1,0x387,0x387,0xb1,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x38a,
-0x39c,0x396,0x39c,0x396,0x399,0x39f,0x39c,0x396,0x399,0x39f,0x39c,0x396,0x399,0x39f,0x39c,0x396,
-0x39c,0x396,0x399,0x39f,0x39c,0x396,0x39c,0x396,0x399,0x39f,0x39c,0x396,0x399,0x39f,0x39c,0x396,
-0x39c,0x396,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,
-0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0x39c,0x396,0x399,0x39f,0x39c,0x396,0x39c,0x396,0x39c,
-0x396,0x39c,0x39c,0x396,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,
-0xb4,0xb4,0xb4,0xb4,0x399,0x396,0x399,0x399,0x399,0x399,0x399,0x399,0x396,0x399,0x396,0x396,
-0x399,0x399,0x396,0x396,0x396,0x396,0x396,0x399,0x396,0x396,0x399,0x396,0x399,0x399,0x399,0x396,
-0x399,0x399,0x399,0x399,0xb4,0xb4,0x399,0x399,0x399,0x399,0x396,0x396,0x399,0x396,0x396,0x396,
-0x396,0x399,0x396,0x396,0x396,0x396,0x396,0x399,0x399,0x399,0x396,0x396,0xb4,0xb4,0xb4,0xb4,
-0xb4,0xb4,0xb4,0xb4,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,
-0x96c,0x96c,0x96c,0x96c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x393,0x393,
-0xaa1,0xaf2,0xb4,0xb4,0x555,0x555,0x555,0x555,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,
-0xb7,0xb7,0xb7,0xb7,0x618,0x61b,0x61b,0x621,0x621,0x6de,0x4a1,0x6de,0x4a1,0x6de,0x4a1,0x6de,
-0x4a1,0x6de,0x4a1,0x6de,0x4a1,0x6e1,0x4a4,0x6e1,0x4a4,0xa7d,0xa7d,0xb88,0xb46,0x615,0x615,0x615,
-0x615,0x61e,0x61e,0x61e,0x4aa,0x62a,0x4ad,0xba,0x68a,0x68a,0x585,0x585,0x627,0x6e4,0x4a7,0x6e4,
-0x4a7,0x6e4,0x4a7,0x624,0x624,0x62d,0x62d,0x630,0x62d,0x62d,0x62d,0xba,0x62d,0x73b,0x70b,0x624,
-0xba,0xba,0xba,0xba,0x3a2,0x3ae,0x3a2,0xa08,0x3a2,0xbd,0x3a2,0x3ae,0x3a2,0x3ae,0x3a2,0x3ae,
-0x3a2,0x3ae,0x3a2,0x3ae,0x3ae,0x3ab,0x3a5,0x3a8,0x3ae,0x3ab,0x3a5,0x3a8,0x3ae,0x3ab,0x3a5,0x3a8,
-0x3ae,0x3ab,0x3a5,0x3ab,0x3a5,0x3ab,0x3a5,0x3a8,0x3ae,0x3ab,0x3a5,0x3ab,0x3a5,0x3ab,0x3a5,0x3ab,
-0x3a5,0xbd,0xbd,0x789,0x702,0x72f,0x5ac,0x5af,0x5a3,0x72f,0x72f,0xc3,0x3fc,0x3ff,0x3ff,0x3ff,
-0x3ff,0x3fc,0x3fc,0xc3,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x8f7,0x8f7,0x8f7,
-0x7fe,0x1ef,0x165,0x165,0xc3,0x57f,0x5a9,0x5a3,0x72f,0x702,0x5a3,0x5a9,0x6cf,0x483,0x5a3,0x5ac,
-0x486,0x5a6,0x489,0x5a3,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x660,0x660,
-0x5ac,0x5ac,0x5ac,0x57f,0x405,0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402,
-0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402,
-0x402,0x402,0x402,0xc3,0xc3,0xc3,0x402,0x402,0x402,0x402,0x402,0x402,0xc3,0xc3,0x402,0x402,
-0x402,0x402,0x402,0x402,0xc3,0xc3,0x402,0x402,0x402,0x402,0x402,0x402,0xc3,0xc3,0x402,0x402,
-0x402,0xc3,0xc3,0xc3,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,
+0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x5fd,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,
+#else /* U_DARWIN */
+0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x609,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,
+#endif /* U_DARWIN */
+0x4ad,0x4ad,0x4ad,0x4ad,0x7b,0x4ad,0x7b,0x4ad,0x4ad,0x4ad,0x4ad,0x7b,0x7b,0x7b,0x4ad,0x7b,
+0x4ad,0x4ad,0x4ad,0x4b3,0x4b3,0x4b3,0x4b3,0x7b,0x7b,0x4ad,0x4b0,0x4b0,0x4ad,0x4ad,0x4ad,0x4ad,
+#ifndef U_DARWIN
+0xa38,0xa35,0xa38,0xa35,0xa38,0xa35,0xa38,0xa35,0xa38,0xa35,0xa38,0xa35,0xa38,0xa35,0x5fa,0x5fa,
+0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,
+#else /* U_DARWIN */
+0xa6e,0xa6b,0xa6e,0xa6b,0xa6e,0xa6b,0xa6e,0xa6b,0xa6e,0xa6b,0xa6e,0xa6b,0xa6e,0xa6b,0x606,0x606,
+0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,
+#endif /* U_DARWIN */
+0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4ad,0x7b,0x7b,0x7b,
+0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,
+0x7b,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x7b,
+#ifndef U_DARWIN
+0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,
+0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x7e,0x963,0x963,0x963,0x963,0x966,
+0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,
+0x963,0x963,0x963,0x966,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,
+0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,
+0x969,0x969,0x969,0x969,0x969,0x969,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,
+0x87,0x71a,0x714,0x71a,0x714,0x71a,0x714,0x71a,0x714,0x71a,0x714,0x714,0x717,0x714,0x717,0x714,
+0x717,0x714,0x717,0x714,0x717,0x714,0x717,0x714,0x717,0x714,0x717,0x714,0x717,0x714,0x717,0x714,
+0x714,0x714,0x714,0x71a,0x714,0x71a,0x714,0x71a,0x714,0x714,0x714,0x714,0x714,0x714,0x71a,0x714,
+0x714,0x714,0x714,0x714,0x717,0xaad,0xaad,0x87,0x87,0x711,0x711,0x70e,0x70e,0x71d,0x720,0xaaa,
+0x8a,0x8a,0x8a,0x8a,0x8a,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,
+0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,
+0x738,0xf2a,0x8a,0x8a,0x8d,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,
+0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x8d,0x741,0x741,0x744,0x744,0x744,0x744,0x744,0x744,
+0x744,0x744,0x744,0x744,0x744,0x744,0x744,0x744,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,
0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,
-0x978,0x978,0x978,0xc6,0x975,0x975,0x975,0x975,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,
-0xc6,0xc6,0xc6,0xc6,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,
-0x97b,0x97b,0x97b,0x97b,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,
-0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,
-0xcc,0xcc,0xcc,0xcc,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0xcf,0xcf,0xcf,0x987,0x987,
-0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,
-0x987,0x987,0x987,0x987,0x98a,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,
-0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,
-0x987,0x987,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,
-#endif /* U_DARWIN */
-0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,
-#ifndef U_DARWIN
-0xcf,0xcf,0xcf,0xcf,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,
-0x95d,0x95d,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0xd2,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,
-0x95a,0x95a,0x95a,0x95a,0x95d,0x95d,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,
-0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,
-0x95d,0xd2,0x95d,0x95d,0xd2,0xd2,0x95d,0xd2,0xd2,0x95d,0x95d,0xd2,0xd2,0x95d,0x95d,0x95d,
-0x95d,0xd2,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95a,0x95a,0x95a,0x95a,0xd2,0x95a,
-0xd2,0x95a,0x95a,0x95a,0x95a,0xac5,0x95a,0x95a,0xd2,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,
-0x95a,0x95a,0x95a,0x95a,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,
-0x95d,0x95d,0x95d,0x95d,0x95a,0x95a,0x95a,0x95a,0x95d,0x95d,0xd2,0x95d,0x95d,0x95d,0x95d,0xd2,
-0xd2,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0xd2,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,
-0x95d,0xd2,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,
-0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95d,0x95d,0xd2,0x95d,
-0x95d,0x95d,0x95d,0xd2,0x95d,0x95d,0x95d,0x95d,0x95d,0xd2,0x95d,0xd2,0xd2,0xd2,0x95d,0x95d,
-0x95d,0x95d,0x95d,0x95d,0x95d,0xd2,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,
-0x95a,0x95a,0x95a,0x95a,0xb9a,0xb9a,0xd2,0xd2,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,
-0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,
-0x95a,0x95a,0x95a,0x957,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0xcb7,0xcb4,0xd2,0xd2,0x97b,0x97b,
-0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,
-0xd5,0x972,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,
-#else /* U_DARWIN */
-0xcf,0xcf,0xcf,0xcf,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,
-0x993,0x993,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0xd2,0x990,0x990,0x990,0x990,0x990,0x990,
-0x990,0x990,0x990,0x990,0x993,0x993,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,
-0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,
-0x993,0xd2,0x993,0x993,0xd2,0xd2,0x993,0xd2,0xd2,0x993,0x993,0xd2,0xd2,0x993,0x993,0x993,
-0x993,0xd2,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x990,0x990,0x990,0x990,0xd2,0x990,
-0xd2,0x990,0x990,0x990,0x990,0xafb,0x990,0x990,0xd2,0x990,0x990,0x990,0x990,0x990,0x990,0x990,
-0x990,0x990,0x990,0x990,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,
-0x993,0x993,0x993,0x993,0x990,0x990,0x990,0x990,0x993,0x993,0xd2,0x993,0x993,0x993,0x993,0xd2,
-0xd2,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0xd2,0x993,0x993,0x993,0x993,0x993,0x993,
-0x993,0xd2,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,
-0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x993,0x993,0xd2,0x993,
-0x993,0x993,0x993,0xd2,0x993,0x993,0x993,0x993,0x993,0xd2,0x993,0xd2,0xd2,0xd2,0x993,0x993,
-0x993,0x993,0x993,0x993,0x993,0xd2,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,
-0x990,0x990,0x990,0x990,0xbd0,0xbd0,0xd2,0xd2,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,
-0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,
-0x990,0x990,0x990,0x98d,0x990,0x990,0x990,0x990,0x990,0x990,0xced,0xcea,0xd2,0xd2,0x9b1,0x9b1,
-0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,
-0xd5,0x9a8,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,
+0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,
+0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,
+0x750,0x750,0x750,0x750,0x750,0xba3,0xba3,0x93,0x74a,0x74a,0x74a,0x74a,0x93,0x93,0x93,0x93,
+0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0xba0,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,
+0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,
+#else /* U_DARWIN */
+0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,
+0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x7e,0x999,0x999,0x999,0x999,0x99c,
+0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,
+0x999,0x999,0x999,0x99c,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,
+0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,
+0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,
+0x87,0x738,0x732,0x738,0x732,0x738,0x732,0x738,0x732,0x738,0x732,0x732,0x735,0x732,0x735,0x732,
+0x735,0x732,0x735,0x732,0x735,0x732,0x735,0x732,0x735,0x732,0x735,0x732,0x735,0x732,0x735,0x732,
+0x732,0x732,0x732,0x738,0x732,0x738,0x732,0x738,0x732,0x732,0x732,0x732,0x732,0x732,0x738,0x732,
+0x732,0x732,0x732,0x732,0x735,0xae3,0xae3,0x87,0x87,0x72f,0x72f,0x72c,0x72c,0x73b,0x73e,0xae0,
+0x8a,0x8a,0x8a,0x8a,0x8a,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,
+#endif /* U_DARWIN */
+0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,
+#ifndef U_DARWIN
+0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x93,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,
+0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x96,0x96,
+0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0xf2d,0xf2d,0xf2d,0xf2d,0x99,0x99,0x99,0x99,
+#else /* U_DARWIN */
+0x756,0xf60,0x8a,0x8a,0x8d,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,
+0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x8d,0x75f,0x75f,0x762,0x762,0x762,0x762,0x762,0x762,
+0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,
+0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,
+0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,
+0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,
+0x76e,0x76e,0x76e,0x76e,0x76e,0xbd9,0xbd9,0x93,0x768,0x768,0x768,0x768,0x93,0x93,0x93,0x93,
+0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0xbd6,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,
+0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,
+0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,
+0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x93,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,
+0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x96,0x96,
+0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0xf63,0xf63,0xf63,0xf63,0x99,0x99,0x99,0x99,
+#endif /* U_DARWIN */
+0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+#ifndef U_DARWIN
+0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x97e,0x97e,0x97e,0x97e,
+0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x9c,0x9c,0x9c,0x984,0x984,0x984,0x984,
+0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x765,0x768,0x765,0x768,
+0x768,0x765,0x765,0x768,0x768,0x768,0x765,0x765,0x765,0x765,0xa5,0xa5,0xabc,0xabc,0xabc,0xabc,
+0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xa5,
+0xa5,0xa5,0xa5,0xa5,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,
+0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xa5,0xa5,
+#else /* U_DARWIN */
+0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x9b4,0x9b4,0x9b4,0x9b4,
+0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9c,0x9c,0x9c,0x9ba,0x9ba,0x9ba,0x9ba,
+0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x79b,0x79e,0x79b,0x79e,
+0x79e,0x79b,0x79b,0x79e,0x79e,0x79e,0x79b,0x79b,0x79b,0x79b,0xa5,0xa5,0xaf2,0xaf2,0xaf2,0xaf2,
+0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xa5,
+0xa5,0xa5,0xa5,0xa5,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,
+0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xa5,0xa5,
#endif /* U_DARWIN */
-0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,
+0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,
+0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,
#ifndef U_DARWIN
-0x9d8,0x9d5,0x9d8,0x9d5,0x9d8,0x9d5,0x9d8,0x9d5,0x9d8,0x9d5,0x9d8,0x9d5,0x9d8,0x9d5,0x9d8,0x9d5,
-0xcbd,0xcba,0xcbd,0xcba,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,
-0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0xdb,0x9db,0x9db,
-0x9db,0x9db,0xa1a,0xa1a,0xa1d,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,
-0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,
-0x9de,0x9de,0xa20,0xa20,0xa23,0x9ff,0x9ff,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,
+0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,
+0xa8,0xa8,0xa8,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0xa8,0xa8,0xa8,0xa8,0xa8,0x954,0x4bc,0x4c2,
+0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4bf,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,
+0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0xa8,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0xa8,0x4c2,0xa8,
+0x4c2,0x4c2,0xa8,0x4c2,0x4c2,0xa8,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4c5,
+0x4dd,0x4d7,0x4dd,0x4d7,0x4da,0x4e0,0x4dd,0x4d7,0x4da,0x4e0,0x4dd,0x4d7,0x4da,0x4e0,0x4dd,0x4d7,
+0x4dd,0x4d7,0x4da,0x4e0,0x4dd,0x4d7,0x4dd,0x4d7,0x4da,0x4e0,0x4dd,0x4d7,0x4da,0x4e0,0x4dd,0x4d7,
+0x4dd,0x4d7,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,
+0xab,0xab,0xab,0xab,0xab,0xab,0xab,0x4dd,0x4d7,0x4da,0x4e0,0x4dd,0x4d7,0x4dd,0x4d7,0x4dd,
+0x4d7,0x4dd,0x4dd,0x4d7,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,
+0xab,0xab,0xab,0xab,0x4da,0x4d7,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4d7,0x4da,0x4d7,0x4d7,
+0x4da,0x4da,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4da,0x4d7,0x4d7,0x4da,0x4d7,0x4da,0x4da,0x4da,0x4d7,
+0x4da,0x4da,0x4da,0x4da,0xab,0xab,0x4da,0x4da,0x4da,0x4da,0x4d7,0x4d7,0x4da,0x4d7,0x4d7,0x4d7,
+0x4d7,0x4da,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4da,0x4da,0x4da,0x4d7,0x4d7,0xab,0xab,0xab,0xab,
+0xab,0xab,0xab,0xab,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,
+0x98d,0x98d,0x98d,0x98d,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4d4,0x4d4,
+0xa3b,0xb2b,0xab,0xab,0x4e3,0x4e3,0x4e3,0x4e3,0xe07,0xe07,0xe07,0xae,0xae,0xae,0xae,0xae,
+0xae,0xae,0xae,0xae,0x771,0x777,0x777,0x783,0x783,0x774,0x76b,0x774,0x76b,0x774,0x76b,0x774,
+0x76b,0x774,0x76b,0x774,0x76b,0x77d,0x77a,0x77d,0x77a,0xabf,0xabf,0xbaf,0xbac,0x76e,0x76e,0x76e,
+0x76e,0x780,0x780,0x780,0x798,0x79b,0x7aa,0xb1,0x79e,0x7a1,0x7ad,0x7ad,0x795,0x78c,0x786,0x78c,
+0x786,0x78c,0x786,0x789,0x789,0x7a4,0x7a4,0x7a7,0x7a4,0x7a4,0x7a4,0xb1,0x7a4,0x792,0x78f,0x789,
+0xb1,0xb1,0xb1,0xb1,0x4e9,0x4f5,0x4e9,0xa3e,0x4e9,0xb4,0x4e9,0x4f5,0x4e9,0x4f5,0x4e9,0x4f5,
+0x4e9,0x4f5,0x4e9,0x4f5,0x4f5,0x4f2,0x4ec,0x4ef,0x4f5,0x4f2,0x4ec,0x4ef,0x4f5,0x4f2,0x4ec,0x4ef,
+0x4f5,0x4f2,0x4ec,0x4f2,0x4ec,0x4f2,0x4ec,0x4ef,0x4f5,0x4f2,0x4ec,0x4f2,0x4ec,0x4f2,0x4ec,0x4f2,
+0x4ec,0xb4,0xb4,0x4e6,0x63c,0x63f,0x654,0x657,0x636,0x63f,0x63f,0xba,0x60c,0x61b,0x61b,0x61b,
+0x61b,0x60c,0x60c,0xba,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0x957,0x957,0x957,
+0x813,0x603,0x4f8,0x4f8,0xba,0x666,0x645,0x636,0x63f,0x63c,0x636,0x648,0x639,0x633,0x636,0x654,
+0x64b,0x642,0x663,0x636,0x660,0x660,0x660,0x660,0x660,0x660,0x660,0x660,0x660,0x660,0x651,0x64e,
+0x654,0x654,0x654,0x666,0x627,0x624,0x624,0x624,0x624,0x624,0x624,0x624,0x624,0x624,0x624,0x624,
+0x624,0x624,0x624,0x624,0x624,0x624,0x624,0x624,0x624,0x624,0x624,0x624,0x624,0x624,0x624,0x624,
+0x624,0x624,0x624,0xba,0xba,0xba,0x624,0x624,0x624,0x624,0x624,0x624,0xba,0xba,0x624,0x624,
+0x624,0x624,0x624,0x624,0xba,0xba,0x624,0x624,0x624,0x624,0x624,0x624,0xba,0xba,0x624,0x624,
+0x624,0xba,0xba,0xba,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,
+0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,
+0x993,0x993,0x993,0xbd,0x990,0x990,0x990,0x990,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,
+0xbd,0xbd,0xbd,0xbd,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,
+0x996,0x996,0x996,0x996,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,
+0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,
+0xc3,0xc3,0xc3,0xc3,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0xc6,0xc6,0xe0a,0x9ab,0x9ab,
+0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,
+0x9ab,0x9ab,0x9ab,0x9ab,0x9ae,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,
+0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,
+0x9ab,0x9ab,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,
+#else /* U_DARWIN */
+0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,
+0xa8,0xa8,0xa8,0x4c5,0x4c5,0x4c5,0x4c5,0x4c5,0xa8,0xa8,0xa8,0xa8,0xa8,0x98a,0x4c8,0x4ce,
+0x4d4,0x4d4,0x4d4,0x4d4,0x4d4,0x4d4,0x4d4,0x4d4,0x4d4,0x4cb,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,
+0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0xa8,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0xa8,0x4ce,0xa8,
+0x4ce,0x4ce,0xa8,0x4ce,0x4ce,0xa8,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4d1,
+0x4e9,0x4e3,0x4e9,0x4e3,0x4e6,0x4ec,0x4e9,0x4e3,0x4e6,0x4ec,0x4e9,0x4e3,0x4e6,0x4ec,0x4e9,0x4e3,
+0x4e9,0x4e3,0x4e6,0x4ec,0x4e9,0x4e3,0x4e9,0x4e3,0x4e6,0x4ec,0x4e9,0x4e3,0x4e6,0x4ec,0x4e9,0x4e3,
+0x4e9,0x4e3,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,
+0xab,0xab,0xab,0xab,0xab,0xab,0xab,0x4e9,0x4e3,0x4e6,0x4ec,0x4e9,0x4e3,0x4e9,0x4e3,0x4e9,
+0x4e3,0x4e9,0x4e9,0x4e3,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,
+0xab,0xab,0xab,0xab,0x4e6,0x4e3,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4e3,0x4e6,0x4e3,0x4e3,
+0x4e6,0x4e6,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e6,0x4e3,0x4e3,0x4e6,0x4e3,0x4e6,0x4e6,0x4e6,0x4e3,
+0x4e6,0x4e6,0x4e6,0x4e6,0xab,0xab,0x4e6,0x4e6,0x4e6,0x4e6,0x4e3,0x4e3,0x4e6,0x4e3,0x4e3,0x4e3,
+0x4e3,0x4e6,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e6,0x4e6,0x4e6,0x4e3,0x4e3,0xab,0xab,0xab,0xab,
+0xab,0xab,0xab,0xab,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,
+0x9c3,0x9c3,0x9c3,0x9c3,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e0,0x4e0,
+0xa71,0xb61,0xab,0xab,0x4ef,0x4ef,0x4ef,0x4ef,0xe3d,0xe3d,0xe3d,0xae,0xae,0xae,0xae,0xae,
+0xae,0xae,0xae,0xae,0x7a7,0x7ad,0x7ad,0x7b9,0x7b9,0x7aa,0x7a1,0x7aa,0x7a1,0x7aa,0x7a1,0x7aa,
+0x7a1,0x7aa,0x7a1,0x7aa,0x7a1,0x7b3,0x7b0,0x7b3,0x7b0,0xaf5,0xaf5,0xbe5,0xbe2,0x7a4,0x7a4,0x7a4,
+0x7a4,0x7b6,0x7b6,0x7b6,0x7ce,0x7d1,0x7e0,0xb1,0x7d4,0x7d7,0x7e3,0x7e3,0x7cb,0x7c2,0x7bc,0x7c2,
+0x7bc,0x7c2,0x7bc,0x7bf,0x7bf,0x7da,0x7da,0x7dd,0x7da,0x7da,0x7da,0xb1,0x7da,0x7c8,0x7c5,0x7bf,
+0xb1,0xb1,0xb1,0xb1,0x4f5,0x501,0x4f5,0xa74,0x4f5,0xb4,0x4f5,0x501,0x4f5,0x501,0x4f5,0x501,
+0x4f5,0x501,0x4f5,0x501,0x501,0x4fe,0x4f8,0x4fb,0x501,0x4fe,0x4f8,0x4fb,0x501,0x4fe,0x4f8,0x4fb,
+0x501,0x4fe,0x4f8,0x4fe,0x4f8,0x4fe,0x4f8,0x4fb,0x501,0x4fe,0x4f8,0x4fe,0x4f8,0x4fe,0x4f8,0x4fe,
+0x4f8,0xb4,0xb4,0x4f2,0x65a,0x65d,0x672,0x675,0x654,0x65d,0x65d,0xba,0x61e,0x62d,0x62d,0x62d,
+0x62d,0x61e,0x61e,0xba,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0x98d,0x98d,0x98d,
+0x849,0x615,0x504,0x504,0xba,0x684,0x663,0x654,0x65d,0x65a,0x654,0x666,0x657,0x651,0x654,0x672,
+0x669,0x660,0x681,0x654,0x67e,0x67e,0x67e,0x67e,0x67e,0x67e,0x67e,0x67e,0x67e,0x67e,0x66f,0x66c,
+0x672,0x672,0x672,0x684,0x639,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,
+0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,
+0x636,0x636,0x636,0xba,0xba,0xba,0x636,0x636,0x636,0x636,0x636,0x636,0xba,0xba,0x636,0x636,
+0x636,0x636,0x636,0x636,0xba,0xba,0x636,0x636,0x636,0x636,0x636,0x636,0xba,0xba,0x636,0x636,
+0x636,0xba,0xba,0xba,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,
+0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,
+0x9c9,0x9c9,0x9c9,0xbd,0x9c6,0x9c6,0x9c6,0x9c6,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,
+0xbd,0xbd,0xbd,0xbd,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,
+0x9cc,0x9cc,0x9cc,0x9cc,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,
+0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,
+0xc3,0xc3,0xc3,0xc3,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0xc6,0xc6,0xe40,0x9e1,0x9e1,
+0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,
+0x9e1,0x9e1,0x9e1,0x9e1,0x9e4,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,
0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,
-0x9e1,0x9e1,0xa26,0xa26,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
-0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0xe4,0x9e4,0x9e4,
-0x9e4,0xe4,0xa29,0xa29,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,
-0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xc75,0xc12,0xcc0,0xcc0,0xcc0,0xcc0,0xe7,0xe7,0xe7,0xe7,0xe7,
-0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,
-0x9e7,0x9e7,0xa65,0xa0b,0xa65,0xa0b,0xa65,0xa0b,0xe7,0xe7,0xe7,0xe7,0x9ea,0x9ea,0x9ea,0x9ea,
-0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0xacb,0xacb,0xacb,0xacb,
-0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,
-0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xea,0xea,0xea,0xb28,0xb28,0xb28,0xb2e,
-0xb2e,0xb2e,0xb2e,0xb28,0xb28,0xb2e,0xb2e,0xb2e,0xea,0xea,0xea,0xea,0xb2e,0xb2e,0xb28,0xb2e,
-0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2b,0xb2b,0xb2b,0xea,0xea,0xea,0xea,0xac8,0xea,0xea,0xea,
-0xb37,0xb37,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb5e,0xb5e,0xb5e,0xb5e,
-0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xed,0xed,
-0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,
-0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xba6,0xba6,
-0xba6,0xba6,0xba6,0xba6,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xf0,0xf0,0xf0,0xf0,0xf0,
-0xcc3,0xcc3,0xcc3,0xcc3,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,
-#else /* U_DARWIN */
-0xa0e,0xa0b,0xa0e,0xa0b,0xa0e,0xa0b,0xa0e,0xa0b,0xa0e,0xa0b,0xa0e,0xa0b,0xa0e,0xa0b,0xa0e,0xa0b,
-0xcf3,0xcf0,0xcf3,0xcf0,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,
-0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xdb,0xa11,0xa11,
-0xa11,0xa11,0xa50,0xa50,0xa53,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,
-0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,
-0xa14,0xa14,0xa56,0xa56,0xa59,0xa35,0xa35,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,
-0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,
-0xa17,0xa17,0xa5c,0xa5c,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
-0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xe4,0xa1a,0xa1a,
-0xa1a,0xe4,0xa5f,0xa5f,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,
-0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xcab,0xc48,0xcf6,0xcf6,0xcf6,0xcf6,0xe7,0xe7,0xe7,0xe7,0xe7,
-0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,
-0xa1d,0xa1d,0xa9b,0xa41,0xa9b,0xa41,0xa9b,0xa41,0xe7,0xe7,0xe7,0xe7,0xa20,0xa20,0xa20,0xa20,
-0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xb01,0xb01,0xb01,0xb01,
-0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,
-0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xea,0xea,0xea,0xb5e,0xb5e,0xb5e,0xb64,
-0xb64,0xb64,0xb64,0xb5e,0xb5e,0xb64,0xb64,0xb64,0xea,0xea,0xea,0xea,0xb64,0xb64,0xb5e,0xb64,
-0xb64,0xb64,0xb64,0xb64,0xb64,0xb61,0xb61,0xb61,0xea,0xea,0xea,0xea,0xafe,0xea,0xea,0xea,
-0xb6d,0xb6d,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb94,0xb94,0xb94,0xb94,
-0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xed,0xed,
-0xb94,0xb94,0xb94,0xb94,0xb94,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,
-0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xbdc,0xbdc,
-0xbdc,0xbdc,0xbdc,0xbdc,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xf0,0xf0,0xf0,0xf0,0xf0,
-0xcf9,0xcf9,0xcf9,0xcf9,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,
-#endif /* U_DARWIN */
-0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,
-#ifndef U_DARWIN
-0xf0,0xf0,0xf0,0xf0,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,
-0xf3,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,
-0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xf3,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,
-0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xf3,0xaef,0xaef,0xf3,0xaef,
-0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xf3,0xf3,
-0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xf3,0xf3,
-#else /* U_DARWIN */
-0xf0,0xf0,0xf0,0xf0,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,
-0xf3,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,
-0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xf3,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,
-0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xf3,0xb25,0xb25,0xf3,0xb25,
-0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xf3,0xf3,
-0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xf3,0xf3,
-#endif /* U_DARWIN */
-0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,
-0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,
+0x9e1,0x9e1,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,
+#endif /* U_DARWIN */
+0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,
#ifndef U_DARWIN
-0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,
-0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xf6,0xf6,0xf6,0xf6,0xf6,
-0xb0a,0xb0a,0xb0a,0xf9,0xf9,0xf9,0xf9,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,
-0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,
-0xf9,0xf9,0xf9,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf8,0xaf8,0xaf8,0xaf8,
+0xc6,0xc6,0xc6,0xc6,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,
+0x9c3,0x9c3,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0xc9,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,
+0x9c0,0x9c0,0x9c0,0x9c0,0x9c3,0x9c3,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,
+0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,
+0x9c3,0xc9,0x9c3,0x9c3,0xc9,0xc9,0x9c3,0xc9,0xc9,0x9c3,0x9c3,0xc9,0xc9,0x9c3,0x9c3,0x9c3,
+0x9c3,0xc9,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c0,0x9c0,0x9c0,0x9c0,0xc9,0x9c0,
+0xc9,0x9c0,0x9c0,0x9c0,0x9c0,0xb34,0x9c0,0x9c0,0xc9,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,
+0x9c0,0x9c0,0x9c0,0x9c0,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,
+0x9c3,0x9c3,0x9c3,0x9c3,0x9c0,0x9c0,0x9c0,0x9c0,0x9c3,0x9c3,0xc9,0x9c3,0x9c3,0x9c3,0x9c3,0xc9,
+0xc9,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0xc9,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,
+0x9c3,0xc9,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,
+0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c3,0x9c3,0xc9,0x9c3,
+0x9c3,0x9c3,0x9c3,0xc9,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0xc9,0x9c3,0xc9,0xc9,0xc9,0x9c3,0x9c3,
+0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0xc9,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,
+0x9c0,0x9c0,0x9c0,0x9c0,0xc0f,0xc0f,0xc9,0xc9,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,
+0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,
+0x9c0,0x9c0,0x9c0,0x9ba,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0xd17,0xd14,0xc9,0xc9,0x9bd,0x9bd,
+0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,
+0xcc,0x9c6,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,
+#else /* U_DARWIN */
+0xc6,0xc6,0xc6,0xc6,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,
+0x9f9,0x9f9,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0xc9,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,
+0x9f6,0x9f6,0x9f6,0x9f6,0x9f9,0x9f9,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,
+0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,
+0x9f9,0xc9,0x9f9,0x9f9,0xc9,0xc9,0x9f9,0xc9,0xc9,0x9f9,0x9f9,0xc9,0xc9,0x9f9,0x9f9,0x9f9,
+0x9f9,0xc9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f6,0x9f6,0x9f6,0x9f6,0xc9,0x9f6,
+0xc9,0x9f6,0x9f6,0x9f6,0x9f6,0xb6a,0x9f6,0x9f6,0xc9,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,
+0x9f6,0x9f6,0x9f6,0x9f6,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,
+0x9f9,0x9f9,0x9f9,0x9f9,0x9f6,0x9f6,0x9f6,0x9f6,0x9f9,0x9f9,0xc9,0x9f9,0x9f9,0x9f9,0x9f9,0xc9,
+0xc9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0xc9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,
+0x9f9,0xc9,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,
+0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f9,0x9f9,0xc9,0x9f9,
+0x9f9,0x9f9,0x9f9,0xc9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0xc9,0x9f9,0xc9,0xc9,0xc9,0x9f9,0x9f9,
+0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0xc9,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,
+0x9f6,0x9f6,0x9f6,0x9f6,0xc45,0xc45,0xc9,0xc9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,
+0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,
+0x9f6,0x9f6,0x9f6,0x9f0,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0xd4d,0xd4a,0xc9,0xc9,0x9f3,0x9f3,
+0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,
+0xcc,0x9fc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,
+#endif /* U_DARWIN */
+0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,
+#ifndef U_DARWIN
+0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xd2,0xa4d,0xa4d,
+0xa4d,0xa4d,0xa47,0xa47,0xa4a,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,
+0xa59,0xa59,0xa59,0xa59,0xa59,0xa59,0xa59,0xa59,0xa59,0xa59,0xa59,0xa59,0xa59,0xa59,0xa59,0xa59,
+0xa59,0xa59,0xa53,0xa53,0xa56,0xa50,0xa50,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,
+0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,
+0xa5f,0xa5f,0xa5c,0xa5c,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,
+0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xdb,0xa65,0xa65,
+0xa65,0xdb,0xa62,0xa62,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,
+0xc12,0xc12,0xc12,0xc12,0xc12,0xc18,0xc15,0xd20,0xd20,0xd20,0xd20,0xde,0xe13,0xde,0xde,0xde,
+0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,
+0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,
+0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xe1,0xe1,0xe1,
+0xb37,0xb37,0xb37,0xb43,0xb43,0xb43,0xb43,0xb37,0xb37,0xb43,0xb43,0xb43,0xe1,0xe1,0xe1,0xe1,
+0xb43,0xb43,0xb37,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb3a,0xb3a,0xb3a,0xe1,0xe1,0xe1,0xe1,
+0xb3d,0xe1,0xe1,0xe1,0xb49,0xb49,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,
+0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,
+0xb4c,0xb4c,0xe4,0xe4,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,
+0xe4,0xe4,0xe4,0xe4,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1c,0xe1c,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,
+0xe1f,0xe7,0xe7,0xe7,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,
+#else /* U_DARWIN */
+0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xd2,0xa83,0xa83,
+0xa83,0xa83,0xa7d,0xa7d,0xa80,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,
+0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,
+0xa8f,0xa8f,0xa89,0xa89,0xa8c,0xa86,0xa86,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,
+0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,
+0xa95,0xa95,0xa92,0xa92,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,
+0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xdb,0xa9b,0xa9b,
+0xa9b,0xdb,0xa98,0xa98,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,
+0xc48,0xc48,0xc48,0xc48,0xc48,0xc4e,0xc4b,0xd56,0xd56,0xd56,0xd56,0xde,0xe49,0xde,0xde,0xde,
+0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,
+0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,
+0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xe1,0xe1,0xe1,
+0xb6d,0xb6d,0xb6d,0xb79,0xb79,0xb79,0xb79,0xb6d,0xb6d,0xb79,0xb79,0xb79,0xe1,0xe1,0xe1,0xe1,
+0xb79,0xb79,0xb6d,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb70,0xb70,0xb70,0xe1,0xe1,0xe1,0xe1,
+0xb73,0xe1,0xe1,0xe1,0xb7f,0xb7f,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,
+0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,
+0xb82,0xb82,0xe4,0xe4,0xb82,0xb82,0xb82,0xb82,0xb82,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,
+0xe4,0xe4,0xe4,0xe4,0xe55,0xe55,0xe55,0xe55,0xe55,0xe52,0xe52,0xe55,0xe55,0xe55,0xe55,0xe55,
+0xe55,0xe7,0xe7,0xe7,0xe52,0xe52,0xe52,0xe52,0xe52,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,
+#endif /* U_DARWIN */
+0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,
+#ifndef U_DARWIN
+0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xb70,0xb70,0xb70,0xb70,
+0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xea,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,
+0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xea,
+0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,
+0xb70,0xb70,0xb70,0xea,0xb70,0xb70,0xea,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,
+0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xea,0xea,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,
+0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,
+#else /* U_DARWIN */
+0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xba6,0xba6,0xba6,0xba6,
+0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xea,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,
+0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xea,
+0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,
+0xba6,0xba6,0xba6,0xea,0xba6,0xba6,0xea,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,
+0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xea,0xea,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,
+0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,
+#endif /* U_DARWIN */
+0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,
+#ifndef U_DARWIN
+0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,
+0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,
+0xb73,0xb73,0xb73,0xed,0xed,0xed,0xed,0xed,0xb79,0xb79,0xb79,0xf0,0xf0,0xf0,0xf0,0xb76,
+0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,
+0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xf0,0xf0,0xf0,0xb76,0xb76,0xb76,0xb76,0xb76,
+0xb76,0xb76,0xb76,0xb76,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,
+0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,
+0xb7f,0xb7f,0xf3,0xb7c,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,
+0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,
+0xb88,0xb88,0xf6,0xf6,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xf9,0xf9,0xb8b,0xf9,0xb8b,0xb8b,
+0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,
+0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xf9,0xb8b,0xb8b,0xf9,0xf9,0xf9,0xb8b,0xf9,0xf9,0xb8b,
+0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,
+0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,
+0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0x102,0x102,0x102,0x102,0x102,
+0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0x162,0x162,0x162,0x162,
+0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,
+0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc33,0xc33,0xc39,0xc39,0xc39,0x105,0x105,0xc36,0xc36,
+0xf30,0xf30,0xf30,0xf30,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,
+0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,
+0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,
+0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0xd26,0xd26,
+0xc4e,0xc4b,0xc4e,0xc4b,0xc4b,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0x10e,0x10e,0x10e,0x10e,0x10e,
+0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0xc48,0xc45,0xc45,0xc45,0xc42,0xc48,0xc45,
+0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,
+0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0x111,0x111,0x111,0x111,0x111,0x111,0x111,0x111,0x111,
+0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0x111,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0x111,
+0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0x111,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0x111,
+0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,
+0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0x114,0x114,0x114,0x114,0x114,0x114,
+0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,
+0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,
+0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0x11a,
+0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,
+0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0x11a,
+0xc72,0xc66,0xc66,0xc66,0x11d,0xc66,0xc66,0x11d,0x11d,0x11d,0x11d,0x11d,0xc66,0xc66,0xc66,0xc66,
+0xc72,0xc72,0xc72,0xc72,0x11d,0xc72,0xc72,0xc72,0x11d,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,
+#else /* U_DARWIN */
+0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,
+0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,
+0xba9,0xba9,0xba9,0xed,0xed,0xed,0xed,0xed,0xbaf,0xbaf,0xbaf,0xf0,0xf0,0xf0,0xf0,0xbac,
+0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,
+0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xf0,0xf0,0xf0,0xbac,0xbac,0xbac,0xbac,0xbac,
+0xbac,0xbac,0xbac,0xbac,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,
+0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,
+0xbb5,0xbb5,0xf3,0xbb2,0xbbe,0xbbe,0xbbe,0xbbe,0xbbe,0xbbe,0xbbe,0xbbe,0xbbe,0xbbe,0xbbe,0xbbe,
+0xbbe,0xbbe,0xbbe,0xbbe,0xbbe,0xbbe,0xbbe,0xbbe,0xbbe,0xbbe,0xbbe,0xbbe,0xbbe,0xbbe,0xbbe,0xbbe,
+0xbbe,0xbbe,0xf6,0xf6,0xbc1,0xbc1,0xbc1,0xbc1,0xbc1,0xbc1,0xf9,0xf9,0xbc1,0xf9,0xbc1,0xbc1,
+0xbc1,0xbc1,0xbc1,0xbc1,0xbc1,0xbc1,0xbc1,0xbc1,0xbc1,0xbc1,0xbc1,0xbc1,0xbc1,0xbc1,0xbc1,0xbc1,
+0xbc1,0xbc1,0xbc1,0xbc1,0xbc1,0xbc1,0xf9,0xbc1,0xbc1,0xf9,0xf9,0xf9,0xbc1,0xf9,0xf9,0xbc1,
+0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,
+0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,
+0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0x102,0x102,0x102,0x102,0x102,
+0xf3f,0xf3f,0xf3f,0xf3f,0xf3f,0xf3f,0xf3f,0xf3f,0xf3f,0xf3f,0xf3f,0xf3f,0x162,0x162,0x162,0x162,
+#endif /* U_DARWIN */
+0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,
+#ifndef U_DARWIN
+0x11d,0x11d,0x11d,0x11d,0xc63,0xc63,0xc63,0x11d,0x11d,0x11d,0x11d,0xc69,0xc6c,0xc6c,0xc6c,0xc6c,
+0xc6c,0xc6c,0xc6c,0xc6c,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0xc6f,0xc6f,0xc6f,0xc6f,
+0xc6f,0xc6f,0xc6f,0xc6f,0xc6c,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0xc81,0xc81,0xc81,0xc81,
+0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0x120,0x120,0x120,0x120,0x120,0x120,0xc7e,0xc7e,0xc7e,0xc7e,
+0xc7e,0xc7e,0xc7e,0xc7e,0xc7e,0xc7e,0xc7e,0xc7e,0xc7e,0xc7e,0xc7e,0xc7e,0xc7e,0xc81,0xc81,0xc81,
+0xc81,0xc81,0xc81,0xc81,0xc7e,0xc7e,0x120,0x120,0x120,0x120,0x120,0x120,0xc7b,0xc7b,0xc7b,0xc7b,
+0xc7b,0xc7b,0xc7b,0xc7b,0xc7b,0xc7b,0x120,0x120,0x120,0x120,0xc78,0xc78,0xc87,0xc87,0xc87,0xc87,
+0x123,0x123,0x123,0x123,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc84,0xc87,0xc87,0xc87,
+0xc87,0xc87,0x123,0x123,0x123,0x123,0x123,0x123,0x123,0x123,0x123,0x123,0xe3d,0xe3d,0xe3a,0xe34,
+0xe3a,0xe34,0xe3a,0xe34,0xe3a,0xe34,0xe31,0xe31,0xe31,0xe31,0xe46,0xe43,0xe31,0x126,0x126,0x126,
+#else /* U_DARWIN */
+0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc69,0xc69,0xc6f,0xc6f,0xc6f,0x105,0x105,0xc6c,0xc6c,
+0xf66,0xf66,0xf66,0xf66,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,
0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,
-0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xfc,0xb0d,0xafe,0xafe,0xafe,0xafe,
-0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,
-0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xff,0xff,0xb01,0xb01,0xb01,0xb01,
-0xb01,0xb01,0x102,0x102,0xb01,0x102,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,
-0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0x102,0xb01,
-0xb01,0x102,0x102,0x102,0xb01,0x102,0x102,0xb01,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,
-0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0x105,
-0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,
-0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,
-0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,
-0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xc2d,
-0xc2d,0xc30,0xc30,0xc30,0x111,0x111,0xbfd,0xbb5,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,
-0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,
-0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0xa59,0xa59,0xa59,0xa59,0xa59,0xa59,0xa59,0xa59,
-0xa59,0xa59,0xa59,0xa59,0xa59,0xa59,0xa59,0xa59,0xc33,0xc33,0xc33,0xc33,0xd14,0xd14,0xd14,0xd14,
-0xd14,0xd14,0xd14,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,
-#else /* U_DARWIN */
-0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,
-0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xf6,0xf6,0xf6,0xf6,0xf6,
-0xb40,0xb40,0xb40,0xf9,0xf9,0xf9,0xf9,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,
-0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,
-0xf9,0xf9,0xf9,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2e,0xb2e,0xb2e,0xb2e,
-0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,
-0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xfc,0xb43,0xb34,0xb34,0xb34,0xb34,
-0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,
-0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xff,0xff,0xb37,0xb37,0xb37,0xb37,
-0xb37,0xb37,0x102,0x102,0xb37,0x102,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,
-0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0x102,0xb37,
-0xb37,0x102,0x102,0x102,0xb37,0x102,0x102,0xb37,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,
-0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0x105,
-0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,
-0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,
-0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,
-0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xc63,
-0xc63,0xc66,0xc66,0xc66,0x111,0x111,0xc33,0xbeb,0xc9c,0xc9c,0xc9c,0xc9c,0xc9c,0xc9c,0xc9c,0xc9c,
-0xc9c,0xc9c,0xc9c,0xc9c,0xc9c,0xc9c,0xc9c,0xc9c,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,
-0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,
-0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xc69,0xc69,0xc69,0xc69,0xd4a,0xd4a,0xd4a,0xd4a,
-0xd4a,0xd4a,0xd4a,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,
-#endif /* U_DARWIN */
-0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,
-#ifndef U_DARWIN
-0x117,0x117,0xd14,0xd14,0xbc1,0xbbe,0xbc1,0xbbe,0xbbe,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0x11a,
-0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0xc00,0xc00,0xc00,
-0xc00,0xbbb,0xc00,0xc00,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,
-0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0x11d,0x11d,0x11d,0x11d,0x11d,
-0x11d,0x11d,0x11d,0x11d,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0x11d,0xbc4,0xbc4,0xbc4,0xbc4,
-0xbc4,0xbc4,0xbc4,0x11d,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0x11d,0xbc4,0xbc4,0xbc4,0xbc4,
-0xbc4,0xbc4,0xbc4,0x11d,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,
-0xbca,0xbca,0xbca,0xbca,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0x120,0x120,
-0x120,0x120,0x120,0x120,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0x123,0x123,0x123,0x123,0x123,0x123,
-0x123,0x123,0x123,0x123,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,
-0xbf4,0xbf4,0xbf4,0xbf4,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,
-0xbd3,0xbd3,0xbd3,0x126,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,
-0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,
-0xbd0,0xbd0,0xbd0,0x126,0xbd9,0xc39,0xc39,0xc39,0x129,0xc39,0xc39,0x129,0x129,0x129,0x129,0x129,
-0xc39,0xc39,0xc39,0xc39,0xbd9,0xbd9,0xbd9,0xbd9,0x129,0xbd9,0xbd9,0xbd9,0x129,0xbd9,0xbd9,0xbd9,
-0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,
-0xbd9,0xbd9,0xbd9,0xbd9,0x129,0x129,0x129,0x129,0xc36,0xc36,0xc36,0x129,0x129,0x129,0x129,0xc3c,
-0xbd6,0xbd6,0xbd6,0xbd6,0xbd6,0xbd6,0xbd6,0xbd6,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,
-0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xbd6,0x129,0x129,0x129,0x129,0x129,0x129,0x129,
-0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,
-0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xcc6,0xcc6,0xcc6,0xcc6,0x12c,0x12c,0x12c,0x12c,0x12c,
-0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,
+0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,
+0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0xd5c,0xd5c,
+0xc84,0xc81,0xc84,0xc81,0xc81,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0x10e,0x10e,0x10e,0x10e,0x10e,
+0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0xc7e,0xc7b,0xc7b,0xc7b,0xc78,0xc7e,0xc7b,
0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,
-0xc87,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc87,0xc87,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,
-0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0x12f,0x12f,0x12f,0x12f,0xc84,0xc84,
-0xbdf,0xbdf,0xbdf,0xbdf,0x132,0x132,0x132,0x132,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,
-0xc06,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,
-0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc09,0xc09,
-0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xbeb,0xc0c,0x135,0x135,0x135,0x135,0xc81,0xc81,0x135,0x135,
-#else /* U_DARWIN */
-0x117,0x117,0xd4a,0xd4a,0xbf7,0xbf4,0xbf7,0xbf4,0xbf4,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0x11a,
-0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0xc36,0xc36,0xc36,
-0xc36,0xbf1,0xc36,0xc36,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,
-0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0x11d,0x11d,0x11d,0x11d,0x11d,
-0x11d,0x11d,0x11d,0x11d,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0x11d,0xbfa,0xbfa,0xbfa,0xbfa,
-0xbfa,0xbfa,0xbfa,0x11d,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0x11d,0xbfa,0xbfa,0xbfa,0xbfa,
-0xbfa,0xbfa,0xbfa,0x11d,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,
-0xc00,0xc00,0xc00,0xc00,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0x120,0x120,
-0x120,0x120,0x120,0x120,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0x123,0x123,0x123,0x123,0x123,0x123,
-0x123,0x123,0x123,0x123,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,
-0xc2a,0xc2a,0xc2a,0xc2a,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,
-0xc09,0xc09,0xc09,0x126,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,
-0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,
-0xc06,0xc06,0xc06,0x126,0xc0f,0xc6f,0xc6f,0xc6f,0x129,0xc6f,0xc6f,0x129,0x129,0x129,0x129,0x129,
-0xc6f,0xc6f,0xc6f,0xc6f,0xc0f,0xc0f,0xc0f,0xc0f,0x129,0xc0f,0xc0f,0xc0f,0x129,0xc0f,0xc0f,0xc0f,
-0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,
-0xc0f,0xc0f,0xc0f,0xc0f,0x129,0x129,0x129,0x129,0xc6c,0xc6c,0xc6c,0x129,0x129,0x129,0x129,0xc72,
-0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,
-0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc0c,0x129,0x129,0x129,0x129,0x129,0x129,0x129,
-0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,
-0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xcfc,0xcfc,0xcfc,0xcfc,0x12c,0x12c,0x12c,0x12c,0x12c,
-0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,
-0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,
-0xcbd,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcbd,0xcbd,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,
-0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0x12f,0x12f,0x12f,0x12f,0xcba,0xcba,
-0xc15,0xc15,0xc15,0xc15,0x132,0x132,0x132,0x132,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,
-0xc3c,0xc15,0xc15,0xc15,0xc15,0xc15,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,
-0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xc3f,0xc3f,
-0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc21,0xc42,0x135,0x135,0x135,0x135,0xcb7,0xcb7,0x135,0x135,
+0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0x111,0x111,0x111,0x111,0x111,0x111,0x111,0x111,0x111,
+0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0x111,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0x111,
+0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0x111,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0x111,
+0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,
+0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0x114,0x114,0x114,0x114,0x114,0x114,
+0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,
+0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,
+0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0x11a,
+0xc93,0xc93,0xc93,0xc93,0xc93,0xc93,0xc93,0xc93,0xc93,0xc93,0xc93,0xc93,0xc93,0xc93,0xc93,0xc93,
+0xc93,0xc93,0xc93,0xc93,0xc93,0xc93,0xc93,0xc93,0xc93,0xc93,0xc93,0xc93,0xc93,0xc93,0xc93,0x11a,
+0xca8,0xc9c,0xc9c,0xc9c,0x11d,0xc9c,0xc9c,0x11d,0x11d,0x11d,0x11d,0x11d,0xc9c,0xc9c,0xc9c,0xc9c,
+0xca8,0xca8,0xca8,0xca8,0x11d,0xca8,0xca8,0xca8,0x11d,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,
+0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,
+0x11d,0x11d,0x11d,0x11d,0xc99,0xc99,0xc99,0x11d,0x11d,0x11d,0x11d,0xc9f,0xca2,0xca2,0xca2,0xca2,
+0xca2,0xca2,0xca2,0xca2,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0xca5,0xca5,0xca5,0xca5,
+0xca5,0xca5,0xca5,0xca5,0xca2,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0xcb7,0xcb7,0xcb7,0xcb7,
+0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0x120,0x120,0x120,0x120,0x120,0x120,0xcb4,0xcb4,0xcb4,0xcb4,
+0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb7,0xcb7,0xcb7,
+0xcb7,0xcb7,0xcb7,0xcb7,0xcb4,0xcb4,0x120,0x120,0x120,0x120,0x120,0x120,0xcb1,0xcb1,0xcb1,0xcb1,
+0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0x120,0x120,0x120,0x120,0xcae,0xcae,0xcbd,0xcbd,0xcbd,0xcbd,
+0x123,0x123,0x123,0x123,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcba,0xcbd,0xcbd,0xcbd,
+0xcbd,0xcbd,0x123,0x123,0x123,0x123,0x123,0x123,0x123,0x123,0x123,0x123,0xe73,0xe73,0xe70,0xe6a,
+0xe70,0xe6a,0xe70,0xe6a,0xe70,0xe6a,0xe67,0xe67,0xe67,0xe67,0xe7c,0xe79,0xe67,0x126,0x126,0x126,
#endif /* U_DARWIN */
-0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,
-0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,
+0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,
+0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,
#ifndef U_DARWIN
-0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0xbf7,
+0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0xcb4,
#else /* U_DARWIN */
-0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0xc2d,
+0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0xcea,
#endif /* U_DARWIN */
+0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,
+#ifndef U_DARWIN
+0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,
+0xcde,0xccf,0xcc9,0xcdb,0xcd8,0xcd2,0xcd2,0xce1,0xccc,0xcd5,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,
+0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,
+0xd2c,0xd2c,0xd2c,0xd2c,0xd3b,0xd3b,0xd2f,0xd2f,0xd32,0xd41,0xd3e,0x132,0x132,0x132,0x132,0x132,
+0xd59,0xd59,0xd44,0xd59,0xd5c,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0x135,0x135,0x135,0x135,
+0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd65,0xd65,0xd4d,0xd50,0xd65,0xd65,
+0xd4d,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd47,0xd47,0xd47,0xd47,0xd47,
+0xd47,0xd47,0xd47,0xd47,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0x135,0x135,0x135,
+0xd6b,0xd68,0xd6b,0xd6b,0xd6b,0xd68,0xd68,0xd6b,0xd68,0xd6b,0xd68,0xd6b,0xd68,0xe52,0xe52,0xe52,
+0x138,0xe49,0xe52,0xe49,0xd68,0xd6b,0xd68,0xd68,0xe49,0xe49,0xe49,0xe49,0xe4c,0xe4f,0x138,0x138,
+0xe64,0xe5b,0xe64,0xe5b,0xe64,0xe5b,0xe64,0xe5b,0xe58,0xe55,0xe55,0xe64,0xe5b,0x13b,0x13b,0x13b,
+#else /* U_DARWIN */
+0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,
+0xd14,0xd05,0xcff,0xd11,0xd0e,0xd08,0xd08,0xd17,0xd02,0xd0b,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,
+0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd62,0xd62,0xd62,0xd62,0xd62,
+0xd62,0xd62,0xd62,0xd62,0xd71,0xd71,0xd65,0xd65,0xd68,0xd77,0xd74,0x132,0x132,0x132,0x132,0x132,
+0xd8f,0xd8f,0xd7a,0xd8f,0xd92,0xd95,0xd95,0xd95,0xd95,0xd95,0xd95,0xd95,0x135,0x135,0x135,0x135,
+0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd9b,0xd9b,0xd83,0xd86,0xd9b,0xd9b,
+0xd83,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,
+0xd7d,0xd7d,0xd7d,0xd7d,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0x135,0x135,0x135,
+0xda1,0xd9e,0xda1,0xda1,0xda1,0xd9e,0xd9e,0xda1,0xd9e,0xda1,0xd9e,0xda1,0xd9e,0xe88,0xe88,0xe88,
+0x138,0xe7f,0xe88,0xe7f,0xd9e,0xda1,0xd9e,0xd9e,0xe7f,0xe7f,0xe7f,0xe7f,0xe82,0xe85,0x138,0x138,
+0xe9a,0xe91,0xe9a,0xe91,0xe9a,0xe91,0xe9a,0xe91,0xe8e,0xe8b,0xe8b,0xe9a,0xe91,0x13b,0x13b,0x13b,
+#endif /* U_DARWIN */
+0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,
0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,
#ifndef U_DARWIN
-0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,
-0xc6c,0xc15,0xc15,0xc6c,0xc6c,0xc57,0xc57,0xc78,0xc18,0xc69,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,
-0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xd17,0xd17,0xd17,0xd17,0xd17,
-0xd17,0xd17,0xd17,0xd17,0xccf,0xccf,0xcc9,0xcc9,0xd2f,0xd29,0xcd2,0x141,0x141,0x141,0x141,0x141,
-0xd23,0xd23,0xd1a,0xd23,0xd26,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0x144,0x144,0x144,0x144,
-0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xcff,0xcff,0xcf9,0xcfc,0xcff,0xcff,
-0xcf9,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,
-0xd1d,0xd1d,0xd1d,0xd1d,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0x144,0x144,0x144,
-0xce1,0xcde,0xce1,0xce1,0xce1,0xcde,0xcde,0xce1,0xcde,0xce1,0xcde,0xce1,0xcde,0x147,0x147,0x147,
-0x147,0x147,0x147,0x147,0xcde,0xce1,0xcde,0xcde,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147,
-0xce4,0xce4,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,
-#else /* U_DARWIN */
-0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,
-0xca2,0xc4b,0xc4b,0xca2,0xca2,0xc8d,0xc8d,0xcae,0xc4e,0xc9f,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,
-0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,
-0xd4d,0xd4d,0xd4d,0xd4d,0xd05,0xd05,0xcff,0xcff,0xd65,0xd5f,0xd08,0x141,0x141,0x141,0x141,0x141,
-0xd59,0xd59,0xd50,0xd59,0xd5c,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0x144,0x144,0x144,0x144,
-0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd35,0xd35,0xd2f,0xd32,0xd35,0xd35,
-0xd2f,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd53,0xd53,0xd53,0xd53,0xd53,
-0xd53,0xd53,0xd53,0xd53,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0x144,0x144,0x144,
-0xd17,0xd14,0xd17,0xd17,0xd17,0xd14,0xd14,0xd17,0xd14,0xd17,0xd14,0xd17,0xd14,0x147,0x147,0x147,
-0x147,0x147,0x147,0x147,0xd14,0xd17,0xd14,0xd14,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147,
-0xd1a,0xd1a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,
-#endif /* U_DARWIN */
-0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,
-#ifndef U_DARWIN
-0x14a,0x14a,0x14a,0x14a,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,
-0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xd08,0xd08,0xd2c,0xd2c,0x14d,0x14d,0x14d,0x14d,
-0x14d,0x14d,0x14d,0x14d,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,
-0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xcea,0xcea,0xcea,0xcea,0x150,0x150,
-0x150,0x150,0x150,0xd02,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,
-0xcf0,0xcf0,0xcf0,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,
-#else /* U_DARWIN */
-0x14a,0x14a,0x14a,0x14a,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,
-0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd3e,0xd3e,0xd62,0xd62,0x14d,0x14d,0x14d,0x14d,
-0x14d,0x14d,0x14d,0x14d,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,
-0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd20,0xd20,0xd20,0xd20,0x150,0x150,
-0x150,0x150,0x150,0xd38,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,
-0xd26,0xd26,0xd26,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,
-#endif /* U_DARWIN */
-0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,
-#ifndef U_DARWIN
-0x153,0x153,0x153,0x153,0xcf3,0xcf3,0xcf3,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156,
-0x156,0x156,0x156,0x156,0xd05,0xd05,0xd05,0xd05,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156,
-0x156,0x156,0x156,0x156,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,
-0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0x159,0x159,0x159,0x159,0x159,0x159,0x159,0x159,0x159,0x159,
-#else /* U_DARWIN */
-0x153,0x153,0x153,0x153,0xd29,0xd29,0xd29,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156,
-0x156,0x156,0x156,0x156,0xd3b,0xd3b,0xd3b,0xd3b,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156,
-0x156,0x156,0x156,0x156,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,
-0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0x159,0x159,0x159,0x159,0x159,0x159,0x159,0x159,0x159,0x159,
-#endif /* U_DARWIN */
-0x159,0x159,0x159,0x159,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,
-0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,
-#ifndef U_DARWIN
-0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x765,0x765,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,
-0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x15f,
-0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,
-0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,
-0x978,0x978,0x978,0x978,0x978,0x978,0x162,0x162,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,
+0x13b,0x13b,0x13b,0xe61,0xe61,0xe61,0xe61,0xe61,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,
+0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd71,0xd71,0xd77,0xd77,
+0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,
+0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd7a,0xd7a,
+0xd7a,0xd7a,0x141,0x141,0x141,0x141,0x141,0xd7d,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,
+0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,
#else /* U_DARWIN */
-0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x79b,0x79b,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,
-0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x15f,
-0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,
-0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,
-0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x162,0x162,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,
-#endif /* U_DARWIN */
-0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,
-#ifndef U_DARWIN
-0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,
-0x1d4,0x1d4,0x16e,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,
-0x981,0x981,0x981,0x981,0x981,0x981,0x981,0xb07,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,
-0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x171,0x369,0x369,0x369,
-0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x22b,0x22b,0x225,0x225,0x3c9,0x225,0x22e,0x18f,
-0x44a,0x18f,0x18f,0x18f,0x44a,0x18f,0x22e,0x22e,0x192,0x231,0x225,0x225,0x225,0x225,0x225,0x225,
-0x18c,0x18c,0x18c,0x18c,0x228,0x18c,0x225,0x867,0x195,0x195,0x3de,0x2fd,0x60c,0x60c,0x60c,0x43e,
-0x453,0x453,0x522,0x522,0x522,0x522,0x522,0x8ca,0x6c3,0x6b4,0x6c6,0x6c9,0x6ba,0x6c3,0x6b7,0x6b7,
-0x2fd,0x70b,0x70b,0x195,0x627,0x624,0x3e1,0x303,0x432,0x432,0x435,0x435,0x435,0x435,0x435,0x56a,
-0x435,0x435,0x435,0x74d,0x52b,0x52b,0x525,0x525,0x444,0x56d,0x438,0x441,0x423,0x198,0x19b,0x300,
-0x711,0x714,0x68d,0x70b,0x711,0x711,0x68d,0x70b,0x31e,0x31e,0x333,0x6cc,0x31b,0x1a7,0x31e,0x32a,
-0x31b,0x6cc,0x32d,0x333,0x333,0x333,0x32d,0x32d,0x333,0x333,0x333,0x1ad,0x31b,0x333,0x6f3,0x31b,
-0x327,0x333,0x333,0x333,0x333,0x333,0x31b,0x31b,0x321,0x1a7,0x1aa,0x31b,0x333,0x31b,0x3e4,0x31b,
-0x333,0x324,0x339,0x1b0,0x333,0x333,0x327,0x32d,0x333,0x333,0x336,0x333,0x32d,0x330,0x330,0x330,
-0x330,0x84c,0x849,0xab0,0xb91,0x9b7,0x9ba,0x9ba,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,
-0x1b9,0x1b9,0x1b9,0x1b9,0x345,0x345,0x345,0x345,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,
-0x1b6,0x1b6,0x33f,0x33f,0x33f,0x33f,0x33f,0x33f,0x348,0x348,0x348,0x348,0x348,0x348,0x348,0x348,
-0x348,0x348,0x348,0x348,0x348,0x34b,0x351,0x351,0x348,0x348,0x1bf,0x348,0x1bf,0x348,0x348,0x348,
-0x348,0x348,0x348,0x348,0x348,0x348,0x348,0x348,0x1c2,0x354,0x1c2,0x1c2,0x357,0x354,0x354,0x1c2,
-0x1c2,0x357,0x354,0x1c2,0x357,0x354,0x354,0x1c2,0x354,0x1c2,0x6ea,0x6e7,0x354,0x1c2,0x354,0x354,
-0x354,0x354,0x1c2,0x354,0x354,0x1c2,0x1c2,0x1c2,0x1c2,0x354,0x354,0x1c2,0x357,0x1c2,0x357,0x1c2,
-0x1c2,0x1c2,0x1c2,0x1c2,0x1c8,0x35a,0x1c2,0x35a,0x35a,0x354,0x354,0x354,0x1c2,0x1c2,0x1c2,0x1c2,
-0x354,0x354,0x354,0x354,0x1c2,0x1c2,0x354,0x354,0x354,0x357,0x354,0x354,0x357,0x354,0x354,0x357,
-0x1c2,0x357,0x354,0x354,0x1c2,0x354,0x354,0x354,0x354,0x354,0x1c2,0x354,0x354,0x354,0x354,0x354,
-0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x1c5,0x1c2,0x357,0x354,0x1c2,0x1c2,0x1c2,0x1c2,
-0x354,0x354,0x1c2,0x1c2,0x354,0x357,0x1c5,0x1c5,0x357,0x357,0x354,0x354,0x357,0x357,0x354,0x354,
-0x357,0x357,0x354,0x354,0x354,0x354,0x354,0x354,0x357,0x357,0x1c2,0x1c2,0x357,0x357,0x1c2,0x1c2,
-0x357,0x357,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x1c2,0x354,0x354,
-0x354,0x1c2,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x1c2,0x354,0x354,0x354,0x354,0x354,0x354,
-0x357,0x357,0x357,0x357,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,
-0x354,0x354,0x354,0x1c2,0x35d,0x855,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x360,0x360,0x360,0x360,
-0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x1cb,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,
-0x35d,0x35d,0x35d,0x35d,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,
-#else /* U_DARWIN */
-0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,
-0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,
-0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,
-0x1d4,0x1d4,0x16e,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,
-0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0xb3d,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,
-0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x171,0x36c,0x36c,0x36c,
-0x36c,0x36c,0x36c,0x36c,0x36c,0x36c,0x36c,0x36c,0x22e,0x22e,0x228,0x228,0x3d2,0x228,0x231,0x18f,
-0x45f,0x18f,0x18f,0x18f,0x45f,0x18f,0x231,0x231,0x192,0x234,0x228,0x228,0x228,0x228,0x228,0x228,
-0x18c,0x18c,0x18c,0x18c,0x22b,0x18c,0x228,0x89d,0x195,0x195,0x3e7,0x300,0x633,0x633,0x633,0x450,
-0x468,0x468,0x53d,0x53d,0x53d,0x53d,0x53d,0x900,0x6f6,0x6e7,0x6f9,0x6fc,0x6ed,0x6f6,0x6ea,0x6ea,
-0x300,0x741,0x741,0x195,0x651,0x64e,0x3ea,0x306,0x444,0x444,0x447,0x447,0x447,0x447,0x447,0x58b,
-0x447,0x447,0x447,0x783,0x546,0x546,0x540,0x540,0x456,0x58e,0x44a,0x453,0x435,0x198,0x19b,0x303,
-0x747,0x74a,0x6bd,0x741,0x747,0x747,0x6bd,0x741,0x321,0x321,0x336,0x6ff,0x31e,0x1a7,0x321,0x32d,
-0x31e,0x6ff,0x330,0x336,0x336,0x336,0x330,0x330,0x336,0x336,0x336,0x1ad,0x31e,0x336,0x729,0x31e,
-0x32a,0x336,0x336,0x336,0x336,0x336,0x31e,0x31e,0x324,0x1a7,0x1aa,0x31e,0x336,0x31e,0x3ed,0x31e,
-0x336,0x327,0x33c,0x1b0,0x336,0x336,0x32a,0x330,0x336,0x336,0x339,0x336,0x330,0x333,0x333,0x333,
-0x333,0x882,0x87f,0xae6,0xbc7,0x9ed,0x9f0,0x9f0,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,
-0x1b9,0x1b9,0x1b9,0x1b9,0x348,0x348,0x348,0x348,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,
-0x1b6,0x1b6,0x342,0x342,0x342,0x342,0x342,0x342,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,
-0x34b,0x34b,0x34b,0x34b,0x34b,0x34e,0x354,0x354,0x34b,0x34b,0x1bf,0x34b,0x1bf,0x34b,0x34b,0x34b,
-0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x1c2,0x357,0x1c2,0x1c2,0x35a,0x357,0x357,0x1c2,
-0x1c2,0x35a,0x357,0x1c2,0x35a,0x357,0x357,0x1c2,0x357,0x1c2,0x71d,0x71a,0x357,0x1c2,0x357,0x357,
-0x357,0x357,0x1c2,0x357,0x357,0x1c2,0x1c2,0x1c2,0x1c2,0x357,0x357,0x1c2,0x35a,0x1c2,0x35a,0x1c2,
-0x1c2,0x1c2,0x1c2,0x1c2,0x1c8,0x35d,0x1c2,0x35d,0x35d,0x357,0x357,0x357,0x1c2,0x1c2,0x1c2,0x1c2,
-0x357,0x357,0x357,0x357,0x1c2,0x1c2,0x357,0x357,0x357,0x35a,0x357,0x357,0x35a,0x357,0x357,0x35a,
-0x1c2,0x35a,0x357,0x357,0x1c2,0x357,0x357,0x357,0x357,0x357,0x1c2,0x357,0x357,0x357,0x357,0x357,
-0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x1c5,0x1c2,0x35a,0x357,0x1c2,0x1c2,0x1c2,0x1c2,
-0x357,0x357,0x1c2,0x1c2,0x357,0x35a,0x1c5,0x1c5,0x35a,0x35a,0x357,0x357,0x35a,0x35a,0x357,0x357,
-0x35a,0x35a,0x357,0x357,0x357,0x357,0x357,0x357,0x35a,0x35a,0x1c2,0x1c2,0x35a,0x35a,0x1c2,0x1c2,
-0x35a,0x35a,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x1c2,0x357,0x357,
-0x357,0x1c2,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x1c2,0x357,0x357,0x357,0x357,0x357,0x357,
-0x35a,0x35a,0x35a,0x35a,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,
-0x357,0x357,0x357,0x1c2,0x360,0x88b,0x360,0x360,0x360,0x360,0x360,0x360,0x363,0x363,0x363,0x363,
-0x360,0x360,0x360,0x360,0x360,0x360,0x1cb,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,
-0x360,0x360,0x360,0x360,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,
-#endif /* U_DARWIN */
-0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,
-0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,
-0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,
-0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d4,0x1d4,0x1d4,0x1d4,
-0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1da,0x1da,0x1da,0x1da,
-0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,
-#ifndef U_DARWIN
-0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x369,0x369,0x369,0x369,
-#else /* U_DARWIN */
-0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x36c,0x36c,0x36c,0x36c,
-#endif /* U_DARWIN */
-0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,
-0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,
-#ifndef U_DARWIN
-0x36c,0x36c,0x1dd,0x1dd,0x1dd,0x1dd,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,
-0x1e0,0x1e0,0x36f,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,
-0x36f,0x36f,0x1e0,0x1e0,0x36f,0x36f,0x1e0,0x1e3,0x36f,0x36f,0x36f,0x36f,0x1e0,0x1e0,0x36f,0x36f,
-0x1e0,0x1e3,0x36f,0x36f,0x36f,0x36f,0x1e0,0x1e0,0x1e0,0x36f,0x36f,0x1e0,0x36f,0x36f,0x1e0,0x1e0,
-0x1e0,0x1e0,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,
-0x36f,0x36f,0x1e0,0x1e0,0x1e0,0x1e0,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x1e0,
-0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,
-0x372,0x372,0x372,0x372,0x372,0x1e6,0x1e6,0x372,0x372,0x1e6,0x372,0x372,0x372,0x372,0x1e6,0x1e6,
-0x372,0x372,0x372,0x372,0xa74,0xa74,0x97e,0x97e,0xb97,0x85e,0x372,0x372,0x1e6,0x372,0x1e6,0x372,
-0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,
-0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x1e6,0x1e6,0x372,0x1e6,
-0x1e6,0x1e6,0x372,0x1e6,0x1e6,0x1e6,0x1e6,0x372,0x1e6,0x1e6,0x372,0x1e9,0x85e,0x85e,0x9cf,0x9cf,
-0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0xb97,0xb97,0x207,0x3b7,0x207,0x1fe,
-0x207,0x1fe,0x207,0x1fe,0x207,0x1fe,0x207,0x1fe,0x207,0x1fe,0x207,0x1fe,0x204,0x3b4,0x207,0x3b7,
-0x207,0x1fe,0x207,0x1fe,0x207,0x1fe,0x207,0x3b7,0x207,0x1fe,0x207,0x1fe,0x207,0x1fe,0x3bd,0x3b4,
-0x207,0x1fe,0x207,0x3b7,0x207,0x1fe,0x207,0x1fe,0x207,0x3b4,0x3c0,0x3ba,0x207,0x1fe,0x207,0x1fe,
-0x3b4,0x207,0x1fe,0x207,0x1fe,0x207,0x1fe,0x3c0,0x3ba,0x3bd,0x3b4,0x207,0x3b7,0x207,0x1fe,0x207,
-0x3b7,0x3ba,0x3bd,0x3b4,0x207,0x3b7,0x207,0x1fe,0x207,0x1fe,0x3bd,0x3b4,0x207,0x1fe,0x207,0x1fe,
-0x207,0x1fe,0x207,0x1fe,0x207,0x1fe,0x207,0x1fe,0x207,0x1fe,0x3bd,0x3b4,0x207,0x1fe,0x207,0x3b7,
-0x207,0x1fe,0x207,0x1fe,0x207,0x1fe,0x207,0x1fe,0x207,0x1fe,0x207,0x1fe,0x207,0x207,0x1fe,0x207,
-0x1fe,0x207,0x1fe,0x201,0x20a,0x216,0x216,0x20a,0x216,0x20a,0x216,0x216,0x20a,0x216,0x216,0x216,
-0x20a,0x20a,0x216,0x216,0x216,0x216,0x20a,0x216,0x216,0x20a,0x216,0x216,0x216,0x20a,0x20a,0x20a,
-0x216,0x216,0x20a,0x216,0x219,0x20d,0x216,0x20a,0x216,0x20a,0x216,0x216,0x20a,0x216,0x20a,0x20a,
-0x216,0x20a,0x216,0x219,0x20d,0x216,0x216,0x216,0x20a,0x216,0x20a,0x216,0x216,0x20a,0x20a,0x213,
-0x216,0x20a,0x20a,0x20a,0x213,0x213,0x213,0x213,0x21c,0x21c,0x210,0x21c,0x21c,0x210,0x21c,0x21c,
-0x210,0x219,0x3c3,0x219,0x3c3,0x219,0x3c3,0x219,0x3c3,0x219,0x3c3,0x219,0x3c3,0x219,0x3c3,0x219,
-0x3c3,0x20a,0x219,0x20d,0x219,0x20d,0x219,0x20d,0x216,0x20a,0x219,0x20d,0x219,0x20d,0x219,0x20d,
-0x219,0x20d,0x219,0x20d,0x20d,0x21c,0x21c,0x210,0x219,0x20d,0x7d4,0x7d4,0x7d7,0x7d1,0x219,0x20d,
-0x219,0x20d,0x219,0x20d,0x219,0x20d,0x219,0x20d,0x219,0x20d,0x219,0x20d,0x219,0x20d,0x219,0x20d,
-0x219,0x20d,0x219,0x20d,0x219,0x20d,0x219,0x20d,0x7d7,0x7d1,0x7d7,0x7d1,0x7d4,0x7ce,0x7d7,0x7d1,
-0xb61,0xb64,0xc8d,0xc90,0xc90,0xc90,0xc90,0xc8d,0xc90,0xc8d,0xc90,0xc8d,0xc90,0xc8d,0xc90,0xc8d,
-0x21f,0x3c6,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,
-0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,
-0x222,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x7da,0x7da,0x7da,
-0x7da,0x7da,0xa7a,0xa7a,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x22e,0x22e,0x22e,
-0x22e,0x22e,0x22e,0x22e,0x234,0x234,0x234,0x234,0x234,0x225,0x225,0x225,0x225,0x225,0x7dd,0x7dd,
-0x7dd,0x7dd,0x7e0,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,
-0xa7d,0xa7d,0xa7d,0xa7d,0x255,0x7e3,0x23d,0x23a,0x23d,0x23a,0x23d,0x23a,0x23d,0x23a,0x23d,0x23a,
-0x23d,0x23a,0x23d,0x23a,0x25b,0x25b,0x252,0x24c,0x93c,0x939,0x987,0xa83,0xa80,0xa86,0xa83,0xa80,
-0xb67,0xb6a,0xb6a,0xb6a,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,
-0x3d2,0x3d2,0x3d2,0x3d2,0x7e9,0x3d5,0x264,0x267,0x264,0x264,0x264,0x267,0x264,0x264,0x264,0x264,
-0x267,0x7e9,0x267,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,
-0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26d,0x267,0x26a,0x264,0x26a,0x264,
-0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,
-0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x26d,0x267,0x26a,
-0x264,0x993,0x990,0x26a,0x264,0x993,0x990,0x26a,0x264,0x993,0x990,0xc96,0x26d,0x267,0x26d,0x267,
-0x26a,0x264,0x26d,0x267,0x26a,0x264,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26a,0x264,0x26d,0x267,
-0x7ef,0x7e9,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0xb70,0xb6d,0x26d,0x267,0xc99,0xc96,
-0xc99,0xc96,0xc99,0xc96,0x7ef,0x3db,0x26a,0x26d,0x26a,0x26a,0x26a,0x26d,0x26a,0x26a,0x26a,0x26a,
-0x26d,0x7ef,0x26d,0x26a,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3db,0x3d8,0x3d8,
-0x3d8,0x3d8,0x3d8,0x3d8,0x29d,0x29a,0x29d,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,
-0x29a,0x29a,0x29a,0x7f5,0x29a,0x29a,0x29a,0x29d,0x558,0x29a,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,
-0x4aa,0x291,0x4a7,0x4ad,0x65d,0x65d,0x65d,0x65d,0x65d,0x65d,0x65d,0x65d,0x65d,0x65d,0x555,0x660,
-0x660,0x297,0x996,0x996,0x4a1,0x29a,0x29a,0x29a,0x29a,0x2a0,0x2a0,0x2a0,0x2a0,0x29a,0x29a,0x29a,
-0x29a,0x29a,0x29a,0x29a,0x4ad,0x4aa,0x4aa,0x4aa,0x4aa,0x2a3,0x2a3,0x4aa,0x4aa,0x297,0x4ad,0x4ad,
-0x4ad,0x4aa,0xa8f,0xa8f,0x663,0x663,0x663,0x663,0x663,0x663,0x663,0x663,0x663,0x663,0x7f5,0x7f5,
-0x7f5,0x7f2,0x7f2,0xa8f,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,
-0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,
-0x29a,0x29a,0x29a,0x29a,0x7f5,0x7f5,0x29a,0x29a,0x29a,0x29a,0x29a,0x7f5,0x2e5,0x2e5,0x2e5,0x2e5,
-0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,
-0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2ee,0x2e8,0x2ee,0x2e8,
-0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,
-0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2f7,0x2f7,0x2f7,0x2f7,
-0x2f7,0x2f7,0x2f7,0x2f7,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2f7,0x2f7,0x2f7,0x2f7,
-0x2f7,0x2f7,0x2f7,0x2f7,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x306,0x2fd,0x2fd,0x2fd,
-0x615,0x68a,0x456,0xa4a,0x8f4,0x8f4,0x846,0x846,0x846,0x846,0x9a2,0x9a2,0x9a2,0x9a2,0x9a8,0xaaa,
-0xaad,0xb88,0xbfa,0x9a5,0xbfa,0xbfa,0xbfa,0xbfa,0xb88,0xbfa,0xbfa,0x9fc,0x34e,0x348,0x348,0x34e,
-0x348,0x348,0x34e,0x348,0x348,0x348,0x348,0x348,0x348,0x348,0x351,0x348,0x348,0x348,0x348,0x348,
-0x348,0x348,0x348,0x348,0x3ea,0x3ea,0x348,0x348,0x348,0x348,0x348,0x348,0x348,0x348,0x348,0x3ea,
-0x348,0x348,0x348,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x9bd,0x9bd,0x9bd,0x9bd,
-0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,
-0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,
-0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x357,0x357,0x357,0x357,0x354,0x354,0x354,0x354,
-0x354,0x354,0x357,0x357,0x357,0x357,0x354,0x354,0x354,0x354,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,
-0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x360,0x360,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,
-0x35d,0x6a2,0x477,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,
-0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,
-0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x855,0x9c6,0x855,0x855,0x855,0x363,0x363,0x363,0x363,
-0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,
-0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x372,0x372,0x372,0x372,
-0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,
-0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x393,0x393,0x393,0x393,
-0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,
-0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,
-0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,
-0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x390,0x396,0x393,0x38d,
-0x390,0x396,0x393,0x38d,0x390,0x396,0x393,0x38d,0x390,0x396,0x393,0x38d,0x390,0x396,0x393,0x38d,
-0x390,0x396,0x393,0x38d,0x390,0x396,0x393,0x38d,0x390,0x396,0x393,0x38d,0x393,0x38d,0x393,0x38d,
-0x393,0x38d,0x393,0x38d,0x393,0x38d,0x393,0x38d,0x390,0x396,0x393,0x38d,0x390,0x396,0x393,0x38d,
-0x390,0x396,0x393,0x38d,0x390,0x396,0x393,0x38d,0x393,0x38d,0x393,0x38d,0x393,0x38d,0x390,0x396,
-0x390,0x396,0x393,0x38d,0x393,0x38d,0x393,0x38d,0x393,0x38d,0x393,0x38d,0x393,0x38d,0x393,0x38d,
-0x390,0x393,0x38d,0x390,0x393,0x38d,0x390,0x396,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,
-0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x390,
-0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,
-0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,
-0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x390,0x390,0x390,0x390,0x390,0x390,0x390,
-0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x38d,0x393,0x696,0x45f,0x390,0x390,0x38d,0x390,
-0x38d,0x390,0x38d,0x38d,0x390,0x38d,0x38d,0x390,0x38d,0x390,0x38d,0x38d,0x390,0x38d,0x390,0x390,
-0x38d,0x38d,0x38d,0x390,0x38d,0x38d,0x38d,0x38d,0x38d,0x390,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,
-0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,
-0x390,0x390,0x38d,0x38d,0x390,0x38d,0x390,0x38d,0x38d,0x38d,0x38d,0x38d,0x390,0x390,0x390,0x390,
-0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,
-0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x396,
-0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,
-0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,
-#else /* U_DARWIN */
-0x36f,0x36f,0x1dd,0x1dd,0x1dd,0x1dd,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,
-0x1e0,0x1e0,0x372,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x372,0x372,0x372,0x372,0x372,0x372,
-0x372,0x372,0x1e0,0x1e0,0x372,0x372,0x1e0,0x1e3,0x372,0x372,0x372,0x372,0x1e0,0x1e0,0x372,0x372,
-0x1e0,0x1e3,0x372,0x372,0x372,0x372,0x1e0,0x1e0,0x1e0,0x372,0x372,0x1e0,0x372,0x372,0x1e0,0x1e0,
-0x1e0,0x1e0,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,
-0x372,0x372,0x1e0,0x1e0,0x1e0,0x1e0,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x1e0,
-0x891,0x891,0x891,0x891,0x891,0x891,0x891,0x891,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,
-0x375,0x375,0x375,0x375,0x375,0x1e6,0x1e6,0x375,0x375,0x1e6,0x375,0x375,0x375,0x375,0x1e6,0x1e6,
-0x375,0x375,0x375,0x375,0xaaa,0xaaa,0x9b4,0x9b4,0xbcd,0x894,0x375,0x375,0x1e6,0x375,0x1e6,0x375,
-0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,
-0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x1e6,0x1e6,0x375,0x1e6,
-0x1e6,0x1e6,0x375,0x1e6,0x1e6,0x1e6,0x1e6,0x375,0x1e6,0x1e6,0x375,0x1e9,0x894,0x894,0xa05,0xa05,
-0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xbcd,0xbcd,0x720,0x42f,0x432,0x432,
-0x432,0x432,0x432,0x432,0x42f,0x42f,0x42f,0x42f,0x42f,0x42f,0x42f,0x42f,0x42f,0x42f,0x42f,0x42f,
-0x49e,0x49e,0x49e,0x59d,0x687,0x45c,0x684,0x1f2,0x5a0,0x636,0x6cc,0x480,0x20a,0x3c0,0x20a,0x201,
-0x20a,0x201,0x20a,0x201,0x20a,0x201,0x20a,0x201,0x20a,0x201,0x20a,0x201,0x207,0x3bd,0x20a,0x3c0,
-0x20a,0x201,0x20a,0x201,0x20a,0x201,0x20a,0x3c0,0x20a,0x201,0x20a,0x201,0x20a,0x201,0x3c6,0x3bd,
-0x20a,0x201,0x20a,0x3c0,0x20a,0x201,0x20a,0x201,0x20a,0x3bd,0x3c9,0x3c3,0x20a,0x201,0x20a,0x201,
-0x3bd,0x20a,0x201,0x20a,0x201,0x20a,0x201,0x3c9,0x3c3,0x3c6,0x3bd,0x20a,0x3c0,0x20a,0x201,0x20a,
-0x3c0,0x3c3,0x3c6,0x3bd,0x20a,0x3c0,0x20a,0x201,0x20a,0x201,0x3c6,0x3bd,0x20a,0x201,0x20a,0x201,
-0x20a,0x201,0x20a,0x201,0x20a,0x201,0x20a,0x201,0x20a,0x201,0x3c6,0x3bd,0x20a,0x201,0x20a,0x3c0,
-0x20a,0x201,0x20a,0x201,0x20a,0x201,0x20a,0x201,0x20a,0x201,0x20a,0x201,0x20a,0x20a,0x201,0x20a,
-0x201,0x20a,0x201,0x204,0x20d,0x219,0x219,0x20d,0x219,0x20d,0x219,0x219,0x20d,0x219,0x219,0x219,
-0x20d,0x20d,0x219,0x219,0x219,0x219,0x20d,0x219,0x219,0x20d,0x219,0x219,0x219,0x20d,0x20d,0x20d,
-0x219,0x219,0x20d,0x219,0x21c,0x210,0x219,0x20d,0x219,0x20d,0x219,0x219,0x20d,0x219,0x20d,0x20d,
-0x219,0x20d,0x219,0x21c,0x210,0x219,0x219,0x219,0x20d,0x219,0x20d,0x219,0x219,0x20d,0x20d,0x216,
-0x219,0x20d,0x20d,0x20d,0x216,0x216,0x216,0x216,0x21f,0x21f,0x213,0x21f,0x21f,0x213,0x21f,0x21f,
-0x213,0x21c,0x3cc,0x21c,0x3cc,0x21c,0x3cc,0x21c,0x3cc,0x21c,0x3cc,0x21c,0x3cc,0x21c,0x3cc,0x21c,
-0x3cc,0x20d,0x21c,0x210,0x21c,0x210,0x21c,0x210,0x219,0x20d,0x21c,0x210,0x21c,0x210,0x21c,0x210,
-0x21c,0x210,0x21c,0x210,0x210,0x21f,0x21f,0x213,0x21c,0x210,0x80a,0x80a,0x80d,0x807,0x21c,0x210,
-0x21c,0x210,0x21c,0x210,0x21c,0x210,0x21c,0x210,0x21c,0x210,0x21c,0x210,0x21c,0x210,0x21c,0x210,
-0x21c,0x210,0x21c,0x210,0x21c,0x210,0x21c,0x210,0x80d,0x807,0x80d,0x807,0x80a,0x804,0x80d,0x807,
-0xb97,0xb9a,0xcc3,0xcc6,0xcc6,0xcc6,0xcc6,0xcc3,0xcc6,0xcc3,0xcc6,0xcc3,0xcc6,0xcc3,0xcc6,0xcc3,
-0x222,0x3cf,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,
-0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,
-0x225,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x810,0x810,0x810,
-0x810,0x810,0xab0,0xab0,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x231,0x231,0x231,
-0x231,0x231,0x231,0x231,0x237,0x237,0x237,0x237,0x237,0x228,0x228,0x228,0x228,0x228,0x813,0x813,
-0x813,0x813,0x816,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,
-0xab3,0xab3,0xab3,0xab3,0x258,0x819,0x240,0x23d,0x240,0x23d,0x240,0x23d,0x240,0x23d,0x240,0x23d,
-0x240,0x23d,0x240,0x23d,0x25e,0x25e,0x255,0x24f,0x972,0x96f,0x9bd,0xab9,0xab6,0xabc,0xab9,0xab6,
-0xb9d,0xba0,0xba0,0xba0,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
-0x3db,0x3db,0x3db,0x3db,0x81f,0x3de,0x267,0x26a,0x267,0x267,0x267,0x26a,0x267,0x267,0x267,0x267,
-0x26a,0x81f,0x26a,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,
-0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x270,0x26a,0x26d,0x267,0x26d,0x267,
-0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,
-0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x270,0x26a,0x26d,
-0x267,0x9c9,0x9c6,0x26d,0x267,0x9c9,0x9c6,0x26d,0x267,0x9c9,0x9c6,0xccc,0x270,0x26a,0x270,0x26a,
-0x26d,0x267,0x270,0x26a,0x26d,0x267,0x270,0x26a,0x270,0x26a,0x270,0x26a,0x26d,0x267,0x270,0x26a,
-0x825,0x81f,0x270,0x26a,0x270,0x26a,0x270,0x26a,0x270,0x26a,0xba6,0xba3,0x270,0x26a,0xccf,0xccc,
-0xccf,0xccc,0xccf,0xccc,0x825,0x3e4,0x26d,0x270,0x26d,0x26d,0x26d,0x270,0x26d,0x26d,0x26d,0x26d,
-0x270,0x825,0x270,0x26d,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e4,0x3e1,0x3e1,
-0x3e1,0x3e1,0x3e1,0x3e1,0x2a0,0x29d,0x2a0,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,
-0x29d,0x29d,0x29d,0x82b,0x29d,0x29d,0x29d,0x2a0,0x579,0x29d,0x4c5,0x4c5,0x4c5,0x4c5,0x4c5,0x4c5,
-0x4c5,0x294,0x4c2,0x4c8,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x576,0x690,
-0x690,0x29a,0x9cc,0x9cc,0x4bc,0x29d,0x29d,0x29d,0x29d,0x2a3,0x2a3,0x2a3,0x2a3,0x29d,0x29d,0x29d,
-0x29d,0x29d,0x29d,0x29d,0x4c8,0x4c5,0x4c5,0x4c5,0x4c5,0x2a6,0x2a6,0x4c5,0x4c5,0x29a,0x4c8,0x4c8,
-0x4c8,0x4c5,0xac5,0xac5,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x82b,0x82b,
-0x82b,0x828,0x828,0xac5,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,
-0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,
-0x29d,0x29d,0x29d,0x29d,0x82b,0x82b,0x29d,0x29d,0x29d,0x29d,0x29d,0x82b,0x2e8,0x2e8,0x2e8,0x2e8,
-0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,
-0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2f1,0x2eb,0x2f1,0x2eb,
-0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,
-0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2fa,0x2fa,0x2fa,0x2fa,
-0x2fa,0x2fa,0x2fa,0x2fa,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fa,0x2fa,0x2fa,0x2fa,
-0x2fa,0x2fa,0x2fa,0x2fa,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x309,0x300,0x300,0x300,
-0x63f,0x6ba,0x46b,0xa80,0x92a,0x92a,0x87c,0x87c,0x87c,0x87c,0x9d8,0x9d8,0x9d8,0x9d8,0x9de,0xae0,
-0xae3,0xbbe,0xc30,0x9db,0xc30,0xc30,0xc30,0xc30,0xbbe,0xc30,0xc30,0xa32,0x351,0x34b,0x34b,0x351,
-0x34b,0x34b,0x351,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x354,0x34b,0x34b,0x34b,0x34b,0x34b,
-0x34b,0x34b,0x34b,0x34b,0x3f3,0x3f3,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x3f3,
-0x34b,0x34b,0x34b,0x888,0x888,0x888,0x888,0x888,0x888,0x888,0x888,0x888,0x9f3,0x9f3,0x9f3,0x9f3,
-0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,
-0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,
-0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x35a,0x35a,0x35a,0x35a,0x357,0x357,0x357,0x357,
-0x357,0x357,0x35a,0x35a,0x35a,0x35a,0x357,0x357,0x357,0x357,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,
-0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x363,0x363,0x360,0x360,0x360,0x360,0x360,0x360,
-0x360,0x6d5,0x48f,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,
-0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,
-0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x88b,0x9fc,0x88b,0x88b,0x88b,0x366,0x366,0x366,0x366,
-0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,
-0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x375,0x375,0x375,0x375,
-0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,
-0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x37b,0x37b,0x37b,0x37b,
-0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,
-0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x3f9,0x3f9,0x3f9,0x3f9,
-0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x42f,0x42f,0x37e,0x37b,
+0x13b,0x13b,0x13b,0xe97,0xe97,0xe97,0xe97,0xe97,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,
+0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xda7,0xda7,0xdad,0xdad,
+0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,
+0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0xdb0,0xdb0,
+0xdb0,0xdb0,0x141,0x141,0x141,0x141,0x141,0xdb3,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,
+0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,
+#endif /* U_DARWIN */
+0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,
+#ifndef U_DARWIN
+0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0xd89,0xd89,0xd89,0x147,0x147,0x147,0x147,0x147,
+0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0xd86,0xd86,0xd86,0xd86,0x147,0x147,0x147,0x147,
+0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,
+0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,
+0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0xe73,0xe6d,0xe67,0xe67,0xe67,0xe67,0xe6d,0xe6d,
+0xe67,0xe67,0xe70,0x14d,0x14d,0x14d,0xe73,0xe73,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,
+0xe6a,0xe6a,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0xe88,0xe88,0xe88,0xe88,0xe85,0xe85,0xe85,0xe85,
+0xe85,0xe85,0xe85,0xe85,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe85,0xe85,0xe7c,0xe79,
+0x150,0x150,0x150,0xe8b,0xe8b,0xe7f,0xe7f,0xe7f,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,
+0xe82,0xe82,0x150,0x150,0x150,0xe88,0xe88,0xe88,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,
+0xe8e,0xe8e,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,
+0xea3,0xea3,0xea6,0xea6,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,
+0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x156,0x156,0xec1,0xebb,0xec1,0xebb,0xec1,0xebb,
+0xec1,0xebb,0xec1,0xebb,0xec1,0xebb,0xebe,0xeb5,0xeb2,0xeb2,0xeb2,0xeb8,0x156,0x156,0x156,0x156,
+0x156,0x156,0x156,0x156,0xeb5,0xeb5,0xeb8,0xec4,0xec1,0xebb,0xec1,0xebb,0xec1,0xebb,0xec1,0xebb,
+0xec1,0xebb,0xec1,0xebb,0xec1,0xebb,0xec1,0xebb,0xec1,0xebb,0xec1,0xebb,0xec1,0xebb,0xec1,0xebb,
+0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0xecd,0xecd,0xecd,0xecd,0xec7,0x159,0x159,0x159,
+0x159,0x159,0x159,0x159,0x159,0x159,0xed3,0xed3,0xeca,0xeca,0xeca,0xeca,0xeca,0xeca,0xeca,0xeca,
+0xeca,0xeca,0x159,0x159,0x159,0x159,0x159,0x159,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xee8,
+0xee8,0xee8,0xee8,0xee8,0xee8,0xee8,0xee8,0xee8,0xee8,0xee8,0xeee,0xef1,0x15c,0x15c,0x15c,0x15c,
+0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0xeeb,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,
+0xf03,0xef7,0xef7,0xef7,0xef7,0xef7,0xef7,0xf00,0xf00,0xef7,0xef7,0xf00,0xf00,0xef7,0xef7,0x15f,
+0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0xf03,0xf03,0xf03,0xef7,0xf03,0xf03,0xf03,0xf03,
+0xf03,0xf03,0xf03,0xf03,0xef7,0xf00,0x15f,0x15f,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,
+0xefd,0xefd,0x15f,0x15f,0xefa,0xf06,0xf06,0xf06,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,
+#else /* U_DARWIN */
+0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0xdbf,0xdbf,0xdbf,0x147,0x147,0x147,0x147,0x147,
+0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0xdbc,0xdbc,0xdbc,0xdbc,0x147,0x147,0x147,0x147,
+0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,
+0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,
+0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0xea9,0xea3,0xe9d,0xe9d,0xe9d,0xe9d,0xea3,0xea3,
+0xe9d,0xe9d,0xea6,0x14d,0x14d,0x14d,0xea9,0xea9,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,
+0xea0,0xea0,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0xebe,0xebe,0xebe,0xebe,0xebb,0xebb,0xebb,0xebb,
+0xebb,0xebb,0xebb,0xebb,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xebb,0xebb,0xeb2,0xeaf,
+0x150,0x150,0x150,0xec1,0xec1,0xeb5,0xeb5,0xeb5,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,
+0xeb8,0xeb8,0x150,0x150,0x150,0xebe,0xebe,0xebe,0xec4,0xec4,0xec4,0xec4,0xec4,0xec4,0xec4,0xec4,
+0xec4,0xec4,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xed9,0xed9,0xed9,0xed9,0xed9,0xed9,0xed9,0xed9,
+0xed9,0xed9,0xedc,0xedc,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,
+0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x156,0x156,0xef7,0xef1,0xef7,0xef1,0xef7,0xef1,
+0xef7,0xef1,0xef7,0xef1,0xef7,0xef1,0xef4,0xeeb,0xee8,0xee8,0xee8,0xeee,0x156,0x156,0x156,0x156,
+0x156,0x156,0x156,0x156,0xeeb,0xeeb,0xeee,0xefa,0xef7,0xef1,0xef7,0xef1,0xef7,0xef1,0xef7,0xef1,
+0xef7,0xef1,0xef7,0xef1,0xef7,0xef1,0xef7,0xef1,0xef7,0xef1,0xef7,0xef1,0xef7,0xef1,0xef7,0xef1,
+0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0xf03,0xf03,0xf03,0xf03,0xefd,0x159,0x159,0x159,
+0x159,0x159,0x159,0x159,0x159,0x159,0xf09,0xf09,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,
+0xf00,0xf00,0x159,0x159,0x159,0x159,0x159,0x159,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf1e,
+0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf24,0xf27,0x15c,0x15c,0x15c,0x15c,
+0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0xf21,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,
+0xf39,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf36,0xf36,0xf2d,0xf2d,0xf36,0xf36,0xf2d,0xf2d,0x15f,
+0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0xf39,0xf39,0xf39,0xf2d,0xf39,0xf39,0xf39,0xf39,
+0xf39,0xf39,0xf39,0xf39,0xf2d,0xf36,0x15f,0x15f,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,
+0xf33,0xf33,0x15f,0x15f,0xf30,0xf3c,0xf3c,0xf3c,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,
+#endif /* U_DARWIN */
+0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,
+#ifndef U_DARWIN
+0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0xf0c,0xf0c,0xf0c,0xf0c,0xf0c,0xf0c,0xf0c,0xf0c,
+0xf0c,0xf0c,0xf0c,0xf0c,0xf0c,0xf0c,0xf0c,0xf0c,0xf0c,0xf0c,0xf0c,0xf0c,0xf0c,0xf0c,0xf0c,0xf0c,
+0xf0c,0xf0c,0xf0c,0xf0c,0xf0c,0xf0f,0x165,0x165,0xf12,0xf12,0xf12,0xf12,0xf12,0xf12,0xf12,0xf12,
+0xf12,0xf12,0xf12,0xf12,0xf12,0xf12,0xf12,0xf12,0xf12,0xf12,0xf12,0xf12,0xf12,0xf12,0xf12,0xf12,
+0xf12,0xf12,0xf12,0xf12,0xf12,0x168,0x168,0x168,0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,
+0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,0x16b,0x16b,0x16b,0x16b,0x16b,0x16b,0x16b,
+0x16b,0x16b,0x16b,0x16b,0x16b,0x16b,0x16b,0x16b,0xf1b,0xf1b,0xf1b,0xf1b,0xf1b,0xf1b,0xf1b,0xf1b,
+0xf1b,0xf1b,0xf1b,0xf1b,0xf1b,0xf1b,0xf1b,0xf1b,0xf1b,0xf1b,0xf1b,0xf1b,0xf1b,0xf1b,0xf1b,0xf1b,
+0xf1b,0xf1b,0x16e,0x16e,0x16e,0x16e,0x16e,0xf18,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,
+0xf1e,0xf1e,0xf1e,0xf1e,0x171,0x171,0x171,0x171,0xf21,0xf21,0xf21,0xf21,0xf21,0xf21,0xf21,0xf21,
+0xf21,0xf21,0xf21,0xf21,0xf21,0xf21,0xf21,0xf21,0xf21,0xf21,0xf21,0xf21,0x174,0x174,0x174,0x174,
+#else /* U_DARWIN */
+0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,
+0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,
+0xf42,0xf42,0xf42,0xf42,0xf42,0xf45,0x165,0x165,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,
+0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,
+0xf48,0xf48,0xf48,0xf48,0xf48,0x168,0x168,0x168,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,
+0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0x16b,0x16b,0x16b,0x16b,0x16b,0x16b,0x16b,
+0x16b,0x16b,0x16b,0x16b,0x16b,0x16b,0x16b,0x16b,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,
+0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,
+0xf51,0xf51,0x16e,0x16e,0x16e,0x16e,0x16e,0xf4e,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,
+0xf54,0xf54,0xf54,0xf54,0x171,0x171,0x171,0x171,0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,
+0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,0x174,0x174,0x174,0x174,
+#endif /* U_DARWIN */
+0x174,0x174,0x174,0x174,0x174,0x174,0x174,0x174,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,
+0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,
+#ifndef U_DARWIN
+0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x7b0,0x7b0,0x9c9,0x9c9,0x9c9,0x9c9,
+0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,
+0x9c9,0x9c9,0x9c9,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x9cc,0x9cc,0x9cc,0x9cc,
+0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,
+0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x17d,0x17d,0x1b0,0x531,0x1b0,0x1a7,
+0x1b0,0x1a7,0x1b0,0x1a7,0x1b0,0x1a7,0x1b0,0x1a7,0x1b0,0x1a7,0x1b0,0x1a7,0x1ad,0x52e,0x1b0,0x531,
+0x1b0,0x1a7,0x1b0,0x1a7,0x1b0,0x1a7,0x1b0,0x531,0x1b0,0x1a7,0x1b0,0x1a7,0x1b0,0x1a7,0x537,0x52e,
+0x1b0,0x1a7,0x1b0,0x531,0x1b0,0x1a7,0x1b0,0x1a7,0x1b0,0x52e,0x53a,0x534,0x1b0,0x1a7,0x1b0,0x1a7,
+0x52e,0x1b0,0x1a7,0x1b0,0x1a7,0x1b0,0x1a7,0x53a,0x534,0x537,0x52e,0x1b0,0x531,0x1b0,0x1a7,0x1b0,
+0x531,0x534,0x537,0x52e,0x1b0,0x531,0x1b0,0x1a7,0x1b0,0x1a7,0x537,0x52e,0x1b0,0x1a7,0x1b0,0x1a7,
+0x1b0,0x1a7,0x1b0,0x1a7,0x1b0,0x1a7,0x1b0,0x1a7,0x1b0,0x1a7,0x537,0x52e,0x1b0,0x1a7,0x1b0,0x531,
+#else /* U_DARWIN */
+0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x7e6,0x7e6,0x9ff,0x9ff,0x9ff,0x9ff,
+0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,
+0x9ff,0x9ff,0x9ff,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0xa02,0xa02,0xa02,0xa02,
+0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,
+0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0x17d,0x17d,0x1b0,0x53d,0x1b0,0x1a7,
+0x1b0,0x1a7,0x1b0,0x1a7,0x1b0,0x1a7,0x1b0,0x1a7,0x1b0,0x1a7,0x1b0,0x1a7,0x1ad,0x53a,0x1b0,0x53d,
+0x1b0,0x1a7,0x1b0,0x1a7,0x1b0,0x1a7,0x1b0,0x53d,0x1b0,0x1a7,0x1b0,0x1a7,0x1b0,0x1a7,0x543,0x53a,
+0x1b0,0x1a7,0x1b0,0x53d,0x1b0,0x1a7,0x1b0,0x1a7,0x1b0,0x53a,0x546,0x540,0x1b0,0x1a7,0x1b0,0x1a7,
+0x53a,0x1b0,0x1a7,0x1b0,0x1a7,0x1b0,0x1a7,0x546,0x540,0x543,0x53a,0x1b0,0x53d,0x1b0,0x1a7,0x1b0,
+0x53d,0x540,0x543,0x53a,0x1b0,0x53d,0x1b0,0x1a7,0x1b0,0x1a7,0x543,0x53a,0x1b0,0x1a7,0x1b0,0x1a7,
+0x1b0,0x1a7,0x1b0,0x1a7,0x1b0,0x1a7,0x1b0,0x1a7,0x1b0,0x1a7,0x543,0x53a,0x1b0,0x1a7,0x1b0,0x53d,
+#endif /* U_DARWIN */
+0x1b0,0x1a7,0x1b0,0x1a7,0x1b0,0x1a7,0x1b0,0x1a7,0x1b0,0x1a7,0x1b0,0x1a7,0x1b0,0x1b0,0x1a7,0x1b0,
+0x1a7,0x1b0,0x1a7,0x1aa,0x1b3,0x1bf,0x1bf,0x1b3,0x1bf,0x1b3,0x1bf,0x1bf,0x1b3,0x1bf,0x1bf,0x1bf,
+0x1b3,0x1b3,0x1bf,0x1bf,0x1bf,0x1bf,0x1b3,0x1bf,0x1bf,0x1b3,0x1bf,0x1bf,0x1bf,0x1b3,0x1b3,0x1b3,
+0x1bf,0x1bf,0x1b3,0x1bf,0x1c2,0x1b6,0x1bf,0x1b3,0x1bf,0x1b3,0x1bf,0x1bf,0x1b3,0x1bf,0x1b3,0x1b3,
+0x1bf,0x1b3,0x1bf,0x1c2,0x1b6,0x1bf,0x1bf,0x1bf,0x1b3,0x1bf,0x1b3,0x1bf,0x1bf,0x1b3,0x1b3,0x1bc,
+0x1bf,0x1b3,0x1b3,0x1b3,0x1bc,0x1bc,0x1bc,0x1bc,0x1c5,0x1c5,0x1b9,0x1c5,0x1c5,0x1b9,0x1c5,0x1c5,
+#ifndef U_DARWIN
+0x1b9,0x1c2,0x53d,0x1c2,0x53d,0x1c2,0x53d,0x1c2,0x53d,0x1c2,0x53d,0x1c2,0x53d,0x1c2,0x53d,0x1c2,
+0x53d,0x1b3,0x1c2,0x1b6,0x1c2,0x1b6,0x1c2,0x1b6,0x1bf,0x1b3,0x1c2,0x1b6,0x1c2,0x1b6,0x1c2,0x1b6,
+0x1c2,0x1b6,0x1c2,0x1b6,0x1b6,0x1c5,0x1c5,0x1b9,0x1c2,0x1b6,0x81f,0x81f,0x822,0x81c,0x1c2,0x1b6,
+#else /* U_DARWIN */
+0x1b9,0x1c2,0x549,0x1c2,0x549,0x1c2,0x549,0x1c2,0x549,0x1c2,0x549,0x1c2,0x549,0x1c2,0x549,0x1c2,
+0x549,0x1b3,0x1c2,0x1b6,0x1c2,0x1b6,0x1c2,0x1b6,0x1bf,0x1b3,0x1c2,0x1b6,0x1c2,0x1b6,0x1c2,0x1b6,
+0x1c2,0x1b6,0x1c2,0x1b6,0x1b6,0x1c5,0x1c5,0x1b9,0x1c2,0x1b6,0x855,0x855,0x858,0x852,0x1c2,0x1b6,
+#endif /* U_DARWIN */
+0x1c2,0x1b6,0x1c2,0x1b6,0x1c2,0x1b6,0x1c2,0x1b6,0x1c2,0x1b6,0x1c2,0x1b6,0x1c2,0x1b6,0x1c2,0x1b6,
+#ifndef U_DARWIN
+0x1c2,0x1b6,0x1c2,0x1b6,0x1c2,0x1b6,0x1c2,0x1b6,0x822,0x81c,0x822,0x81c,0x81f,0x819,0x822,0x81c,
+0xbb2,0xbb5,0xce4,0xce7,0xce7,0xce7,0xce7,0xce4,0xce7,0xce4,0xce7,0xce4,0xce7,0xce4,0xce7,0xce4,
+0x1c8,0x540,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,
+#else /* U_DARWIN */
+0x1c2,0x1b6,0x1c2,0x1b6,0x1c2,0x1b6,0x1c2,0x1b6,0x858,0x852,0x858,0x852,0x855,0x84f,0x858,0x852,
+0xbe8,0xbeb,0xd1a,0xd1d,0xd1d,0xd1d,0xd1d,0xd1a,0xd1d,0xd1a,0xd1d,0xd1a,0xd1d,0xd1a,0xd1d,0xd1a,
+0x1c8,0x54c,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,
+#endif /* U_DARWIN */
+0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,
+#ifndef U_DARWIN
+0x1cb,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x825,0x825,0x825,
+0x825,0x825,0xac8,0xac8,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1d7,0x1d7,0x1d7,
+0x1d7,0x1d7,0x1d7,0x1d7,0x1d4,0x1d4,0x1ce,0x1ce,0x546,0x1ce,0x1d7,0x549,0x1da,0x549,0x549,0x549,
+0x1da,0x549,0x1d7,0x1d7,0x54c,0x1dd,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x543,0x543,0x543,0x543,
+0x1d1,0x543,0x1ce,0x95a,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x828,0x828,
+0x82b,0x828,0x82b,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,
+0xacb,0xacb,0xacb,0xacb,0x207,0x82e,0x1f2,0x1ef,0x1f2,0x1ef,0x1f2,0x1ef,0x1f2,0x1ef,0x1f2,0x1ef,
+0x1f2,0x1ef,0x1f2,0x1ef,0x20d,0x20d,0x204,0x1fe,0x98a,0x987,0x9d2,0xad1,0xace,0xad4,0xad1,0xace,
+0xbb8,0xbbb,0xbbb,0xbbb,0x55e,0x55e,0x1fe,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,0x201,0x201,
+0x201,0x201,0x201,0xd92,0x20d,0x20d,0x210,0x20a,0x20a,0x20d,0x204,0x82e,0x9d8,0x9d5,0x207,0x82e,
+0x207,0x82e,0x207,0x82e,0x21f,0x219,0x216,0x213,0x213,0x213,0x213,0xd95,0x831,0x831,0x9de,0x9db,
+0x83a,0x834,0x83a,0x834,0x21f,0x219,0x21f,0x219,0x21f,0x219,0x21f,0x219,0x21f,0x219,0x21f,0x219,
+0x21f,0x219,0x21f,0x219,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,
+0x564,0x564,0x564,0x564,0x837,0x567,0x219,0x21c,0x219,0x219,0x219,0x21c,0x219,0x219,0x219,0x219,
+0x21c,0x837,0x21c,0x219,0x21f,0x219,0x21f,0x219,0x21f,0x219,0x21f,0x219,0x21f,0x219,0x21f,0x219,
+#else /* U_DARWIN */
+0x1cb,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x85b,0x85b,0x85b,
+0x85b,0x85b,0xafe,0xafe,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1d7,0x1d7,0x1d7,
+0x1d7,0x1d7,0x1d7,0x1d7,0x1d4,0x1d4,0x1ce,0x1ce,0x552,0x1ce,0x1d7,0x555,0x1da,0x555,0x555,0x555,
+0x1da,0x555,0x1d7,0x1d7,0x558,0x1dd,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x54f,0x54f,0x54f,0x54f,
+0x1d1,0x54f,0x1ce,0x990,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x85e,0x85e,
+0x861,0x85e,0x861,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,
+0xb01,0xb01,0xb01,0xb01,0x207,0x864,0x1f2,0x1ef,0x1f2,0x1ef,0x1f2,0x1ef,0x1f2,0x1ef,0x1f2,0x1ef,
+0x1f2,0x1ef,0x1f2,0x1ef,0x20d,0x20d,0x204,0x1fe,0x9c0,0x9bd,0xa08,0xb07,0xb04,0xb0a,0xb07,0xb04,
+0xbee,0xbf1,0xbf1,0xbf1,0x56a,0x56a,0x1fe,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x201,0x201,
+0x201,0x201,0x201,0xdc8,0x20d,0x20d,0x210,0x20a,0x20a,0x20d,0x204,0x864,0xa0e,0xa0b,0x207,0x864,
+0x207,0x864,0x207,0x864,0x21f,0x219,0x216,0x213,0x213,0x213,0x213,0xdcb,0x867,0x867,0xa14,0xa11,
+0x870,0x86a,0x870,0x86a,0x21f,0x219,0x21f,0x219,0x21f,0x219,0x21f,0x219,0x21f,0x219,0x21f,0x219,
+0x21f,0x219,0x21f,0x219,0x570,0x570,0x570,0x570,0x570,0x570,0x570,0x570,0x570,0x570,0x570,0x570,
+0x570,0x570,0x570,0x570,0x86d,0x573,0x219,0x21c,0x219,0x219,0x219,0x21c,0x219,0x219,0x219,0x219,
+0x21c,0x86d,0x21c,0x219,0x21f,0x219,0x21f,0x219,0x21f,0x219,0x21f,0x219,0x21f,0x219,0x21f,0x219,
+#endif /* U_DARWIN */
+0x21f,0x219,0x21f,0x219,0x21f,0x219,0x21f,0x219,0x21f,0x219,0x222,0x21c,0x21f,0x219,0x21f,0x219,
+0x21f,0x219,0x21f,0x219,0x21f,0x219,0x21f,0x219,0x21f,0x219,0x21f,0x219,0x21f,0x219,0x21f,0x219,
+0x21f,0x219,0x21f,0x219,0x21f,0x219,0x21f,0x219,0x21f,0x219,0x21f,0x219,0x21f,0x222,0x21c,0x21f,
+#ifndef U_DARWIN
+0x219,0x9de,0x9db,0x21f,0x219,0x9de,0x9db,0x21f,0x219,0x9de,0x9db,0xced,0x222,0x21c,0x222,0x21c,
+#else /* U_DARWIN */
+0x219,0xa14,0xa11,0x21f,0x219,0xa14,0xa11,0x21f,0x219,0xa14,0xa11,0xd23,0x222,0x21c,0x222,0x21c,
+#endif /* U_DARWIN */
+0x21f,0x219,0x222,0x21c,0x21f,0x219,0x222,0x21c,0x222,0x21c,0x222,0x21c,0x21f,0x219,0x222,0x21c,
+#ifndef U_DARWIN
+0x83d,0x837,0x222,0x21c,0x222,0x21c,0x222,0x21c,0x222,0x21c,0xbc1,0xbbe,0x222,0x21c,0xcf0,0xced,
+0xcf0,0xced,0xcf0,0xced,0x83d,0x56d,0x21f,0x222,0x21f,0x21f,0x21f,0x222,0x21f,0x21f,0x21f,0x21f,
+0x222,0x83d,0x222,0x21f,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56d,0x56a,0x56a,
+0x56a,0x56a,0x56a,0x56a,0x7b3,0x7b3,0xbc4,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,
+0x7b3,0x7b3,0x7b3,0x7b3,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0xcf3,0x23d,
+#else /* U_DARWIN */
+0x873,0x86d,0x222,0x21c,0x222,0x21c,0x222,0x21c,0x222,0x21c,0xbf7,0xbf4,0x222,0x21c,0xd26,0xd23,
+0xd26,0xd23,0xd26,0xd23,0x873,0x579,0x21f,0x222,0x21f,0x21f,0x21f,0x222,0x21f,0x21f,0x21f,0x21f,
+0x222,0x873,0x222,0x21f,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x579,0x576,0x576,
+0x576,0x576,0x576,0x576,0x7e9,0x7e9,0xbfa,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,
+0x7e9,0x7e9,0x7e9,0x7e9,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0xd29,0x23d,
+#endif /* U_DARWIN */
+0x23d,0x23d,0x249,0x23d,0x285,0x282,0x285,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,
+#ifndef U_DARWIN
+0x282,0x282,0x282,0x849,0x282,0x282,0x282,0x285,0x28e,0x282,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,
+#else /* U_DARWIN */
+0x282,0x282,0x282,0x87f,0x282,0x282,0x282,0x285,0x28e,0x282,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,
+#endif /* U_DARWIN */
+0x26d,0x252,0x26a,0x270,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x27c,0x279,
+#ifndef U_DARWIN
+0x276,0x273,0x9e1,0x9e1,0x264,0x282,0x282,0x282,0x282,0x288,0x288,0x288,0x288,0x282,0x282,0x282,
+#else /* U_DARWIN */
+0x276,0x273,0xa17,0xa17,0x264,0x282,0x282,0x282,0x282,0x288,0x288,0x288,0x288,0x282,0x282,0x282,
+#endif /* U_DARWIN */
+0x282,0x282,0x282,0x282,0x270,0x26d,0x26d,0x26d,0x26d,0x28b,0x28b,0x26d,0x26d,0x273,0x270,0x270,
+#ifndef U_DARWIN
+0x270,0x26d,0xae9,0xae9,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x849,0x849,
+0x849,0x846,0x846,0xae9,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,
+#else /* U_DARWIN */
+0x270,0x26d,0xb1f,0xb1f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x87f,0x87f,
+0x87f,0x87c,0x87c,0xb1f,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,
+#endif /* U_DARWIN */
+0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,
+#ifndef U_DARWIN
+0x282,0x282,0x282,0x282,0x849,0x849,0x282,0x282,0x282,0x282,0x282,0x849,0x3a2,0x3a2,0x3a2,0x3a2,
+#else /* U_DARWIN */
+0x282,0x282,0x282,0x282,0x87f,0x87f,0x282,0x282,0x282,0x282,0x282,0x87f,0x3a2,0x3a2,0x3a2,0x3a2,
+#endif /* U_DARWIN */
+0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,
+0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a5,0x3a5,0x3a5,0x3a5,
+0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,
+0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3ab,0x3a8,0x3a8,0x3a8,
+0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,
+0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,
+0x3b4,0x3ae,0x3b4,0x3ae,0x3b4,0x3ae,0x3b4,0x3ae,0x3b4,0x3ae,0x3b4,0x3ae,0x3b4,0x3ae,0x3b4,0x3ae,
+0x3b4,0x3ae,0x3b4,0x3ae,0x3b4,0x3ae,0x3b4,0x3ae,0x3b4,0x3ae,0x3b4,0x3ae,0x3b4,0x3ae,0x3b4,0x3ae,
+#ifndef U_DARWIN
+0x3b4,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3b1,0x7f2,0xdf2,0xdf2,0xdf5,0xdf2,0x3b4,0x3ae,0x3b4,0x3ae,
+#else /* U_DARWIN */
+0x3b4,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3b1,0x828,0xe28,0xe28,0xe2b,0xe28,0x3b4,0x3ae,0x3b4,0x3ae,
+#endif /* U_DARWIN */
+0x3b4,0x3ae,0x3b4,0x3ae,0x3b4,0x3ae,0x3b4,0x3ae,0x3b4,0x3ae,0x3b4,0x3ae,0x3b4,0x3ae,0x3b4,0x3ae,
+#ifndef U_DARWIN
+0x3b4,0x3ae,0x3b4,0x3ae,0x3b4,0x3ae,0xdf5,0xdf2,0xdf5,0xdf2,0xdf5,0xdf2,0x3c0,0x3c0,0x3c0,0x3c0,
+#else /* U_DARWIN */
+0x3b4,0x3ae,0x3b4,0x3ae,0x3b4,0x3ae,0xe2b,0xe28,0xe2b,0xe28,0xe2b,0xe28,0x3c0,0x3c0,0x3c0,0x3c0,
+#endif /* U_DARWIN */
+0x3c0,0x3c0,0x3c0,0x3c0,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c0,0x3c0,0x3c0,0x3c0,
+#ifndef U_DARWIN
+0x3c0,0x3c0,0x3c0,0x3c0,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x570,0x570,0x573,0x3de,
+0x57f,0x57c,0x57c,0x579,0x408,0x408,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x92a,0x582,0x3ea,0x59a,0x59d,
+0x3ff,0x582,0x3ed,0x3ed,0x3de,0x3f9,0x3f9,0x570,0x405,0x402,0x576,0x3d8,0x3cf,0x3cf,0x3d2,0x3d2,
+0x3d2,0x3d2,0x3d2,0x3d5,0x3d2,0x3d2,0x3d2,0x3c9,0x40e,0x40e,0x40b,0x40b,0x58e,0x3f3,0x3f0,0x58b,
+0x588,0x585,0x597,0x3e1,0x594,0x594,0x3f6,0x3f9,0x591,0x591,0x3f6,0x3f9,0x3db,0x3de,0x3de,0x3de,
+0x3fc,0x3e7,0x3e4,0x9fc,0x930,0x930,0x92d,0x92d,0x92d,0x92d,0x9f3,0x9f3,0x9f3,0x9f3,0x9f9,0xb1c,
+0xb19,0xbf4,0xbf7,0x9f6,0xbf7,0xbf7,0xbf7,0xbf7,0xbf4,0xbf7,0xbf7,0x9f0,0x441,0x441,0x456,0x5af,
+0x43e,0x5a9,0x441,0x44d,0x43e,0x5af,0x450,0x456,0x456,0x456,0x450,0x450,0x456,0x456,0x456,0x5b5,
+0x43e,0x456,0x5b2,0x43e,0x44a,0x456,0x456,0x456,0x456,0x456,0x43e,0x43e,0x444,0x5a9,0x5ac,0x43e,
+0x456,0x43e,0x5b8,0x43e,0x456,0x447,0x45c,0x5bb,0x456,0x456,0x44a,0x450,0x456,0x456,0x459,0x456,
+0x450,0x453,0x453,0x453,0x453,0x93c,0x939,0xb1f,0xc06,0xa17,0xa1a,0xa1a,0x5c7,0x5c7,0x5c7,0x5c7,
+0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x46b,0x46b,0x46b,0x46b,0x5c4,0x5c4,0x5c4,0x5c4,
+0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x465,0x465,0x465,0x465,0x465,0x465,0x471,0x471,0x471,0x471,
+#else /* U_DARWIN */
+0x3c0,0x3c0,0x3c0,0x3c0,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x57c,0x57c,0x57f,0x3de,
+0x58b,0x588,0x588,0x585,0x408,0x408,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x960,0x58e,0x3ea,0x5a6,0x5a9,
+0x3ff,0x58e,0x3ed,0x3ed,0x3de,0x3f9,0x3f9,0x57c,0x405,0x402,0x582,0x3d8,0x3cf,0x3cf,0x3d2,0x3d2,
+0x3d2,0x3d2,0x3d2,0x3d5,0x3d2,0x3d2,0x3d2,0x3c9,0x40e,0x40e,0x40b,0x40b,0x59a,0x3f3,0x3f0,0x597,
+0x594,0x591,0x5a3,0x3e1,0x5a0,0x5a0,0x3f6,0x3f9,0x59d,0x59d,0x3f6,0x3f9,0x3db,0x3de,0x3de,0x3de,
+0x3fc,0x3e7,0x3e4,0xa32,0x966,0x966,0x963,0x963,0x963,0x963,0xa29,0xa29,0xa29,0xa29,0xa2f,0xb52,
+0xb4f,0xc2a,0xc2d,0xa2c,0xc2d,0xc2d,0xc2d,0xc2d,0xc2a,0xc2d,0xc2d,0xa26,0x441,0x441,0x456,0x5bb,
+0x43e,0x5b5,0x441,0x44d,0x43e,0x5bb,0x450,0x456,0x456,0x456,0x450,0x450,0x456,0x456,0x456,0x5c1,
+0x43e,0x456,0x5be,0x43e,0x44a,0x456,0x456,0x456,0x456,0x456,0x43e,0x43e,0x444,0x5b5,0x5b8,0x43e,
+0x456,0x43e,0x5c4,0x43e,0x456,0x447,0x45c,0x5c7,0x456,0x456,0x44a,0x450,0x456,0x456,0x459,0x456,
+0x450,0x453,0x453,0x453,0x453,0x972,0x96f,0xb55,0xc3c,0xa4d,0xa50,0xa50,0x5d3,0x5d3,0x5d3,0x5d3,
+0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x46b,0x46b,0x46b,0x46b,0x5d0,0x5d0,0x5d0,0x5d0,
+0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x465,0x465,0x465,0x465,0x465,0x465,0x471,0x471,0x471,0x471,
+#endif /* U_DARWIN */
+0x471,0x471,0x471,0x471,0x46e,0x471,0x471,0x471,0x471,0x471,0x474,0x46e,0x471,0x471,0x46e,0x46e,
+#ifndef U_DARWIN
+0x46e,0x46e,0x471,0x471,0x5ca,0x5ca,0x46e,0x46e,0x471,0x471,0x471,0x471,0x471,0x471,0x471,0x471,
+0x471,0x471,0x471,0x471,0x471,0x474,0x474,0x474,0x471,0x471,0x5cd,0x471,0x5cd,0x471,0x471,0x471,
+0x471,0x471,0x471,0x471,0x46e,0x471,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x471,0x471,0x46e,0x5ca,
+0x46e,0x46e,0x46e,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0xa1d,0xa1d,0xa1d,0xa1d,
+0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0x5d0,0x477,0x5d0,0x5d0,0x47a,0x477,0x477,0x5d0,
+0x5d0,0x47a,0x477,0x5d0,0x47a,0x477,0x477,0x5d0,0x477,0x5d0,0x483,0x480,0x477,0x5d0,0x477,0x477,
+0x477,0x477,0x5d0,0x477,0x477,0x5d0,0x5d0,0x5d0,0x5d0,0x477,0x477,0x5d0,0x47a,0x5d0,0x47a,0x5d0,
+0x5d0,0x5d0,0x5d0,0x5d0,0x5d6,0x47d,0x5d0,0x47d,0x47d,0x477,0x477,0x477,0x5d0,0x5d0,0x5d0,0x5d0,
+0x477,0x477,0x477,0x477,0x5d0,0x5d0,0x477,0x477,0x477,0x47a,0x477,0x477,0x47a,0x477,0x477,0x47a,
+0x5d0,0x47a,0x477,0x477,0x5d0,0x477,0x477,0x477,0x477,0x477,0x5d0,0x477,0x477,0x477,0x477,0x477,
+0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x5d3,0x5d0,0x47a,0x477,0x5d0,0x5d0,0x5d0,0x5d0,
+0x477,0x477,0x5d0,0x5d0,0x477,0x47a,0x5d3,0x5d3,0x47a,0x47a,0x477,0x477,0x47a,0x47a,0x477,0x477,
+0x47a,0x47a,0x477,0x477,0x477,0x477,0x477,0x477,0x47a,0x47a,0x5d0,0x5d0,0x47a,0x47a,0x5d0,0x5d0,
+0x47a,0x47a,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x5d0,0x477,0x477,
+0x477,0x5d0,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x5d0,0x477,0x477,0x477,0x477,0x477,0x477,
+#else /* U_DARWIN */
+0x46e,0x46e,0x471,0x471,0x5d6,0x5d6,0x46e,0x46e,0x471,0x471,0x471,0x471,0x471,0x471,0x471,0x471,
+0x471,0x471,0x471,0x471,0x471,0x474,0x474,0x474,0x471,0x471,0x5d9,0x471,0x5d9,0x471,0x471,0x471,
+0x471,0x471,0x471,0x471,0x46e,0x471,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x471,0x471,0x46e,0x5d6,
+0x46e,0x46e,0x46e,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0xa53,0xa53,0xa53,0xa53,
+0xa53,0xa53,0xa53,0xa53,0xa53,0xa53,0xa53,0xa53,0x5dc,0x477,0x5dc,0x5dc,0x47a,0x477,0x477,0x5dc,
+0x5dc,0x47a,0x477,0x5dc,0x47a,0x477,0x477,0x5dc,0x477,0x5dc,0x483,0x480,0x477,0x5dc,0x477,0x477,
+0x477,0x477,0x5dc,0x477,0x477,0x5dc,0x5dc,0x5dc,0x5dc,0x477,0x477,0x5dc,0x47a,0x5dc,0x47a,0x5dc,
+0x5dc,0x5dc,0x5dc,0x5dc,0x5e2,0x47d,0x5dc,0x47d,0x47d,0x477,0x477,0x477,0x5dc,0x5dc,0x5dc,0x5dc,
+0x477,0x477,0x477,0x477,0x5dc,0x5dc,0x477,0x477,0x477,0x47a,0x477,0x477,0x47a,0x477,0x477,0x47a,
+0x5dc,0x47a,0x477,0x477,0x5dc,0x477,0x477,0x477,0x477,0x477,0x5dc,0x477,0x477,0x477,0x477,0x477,
+0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x5df,0x5dc,0x47a,0x477,0x5dc,0x5dc,0x5dc,0x5dc,
+0x477,0x477,0x5dc,0x5dc,0x477,0x47a,0x5df,0x5df,0x47a,0x47a,0x477,0x477,0x47a,0x47a,0x477,0x477,
+0x47a,0x47a,0x477,0x477,0x477,0x477,0x477,0x477,0x47a,0x47a,0x5dc,0x5dc,0x47a,0x47a,0x5dc,0x5dc,
+0x47a,0x47a,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x5dc,0x477,0x477,
+0x477,0x5dc,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x5dc,0x477,0x477,0x477,0x477,0x477,0x477,
+#endif /* U_DARWIN */
+0x47a,0x47a,0x47a,0x47a,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,
+#ifndef U_DARWIN
+0x477,0x477,0x477,0x5d0,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,
+#else /* U_DARWIN */
+0x477,0x477,0x477,0x5dc,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,
+#endif /* U_DARWIN */
+0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,
+0x477,0x477,0x477,0x477,0x47a,0x47a,0x47a,0x47a,0x477,0x477,0x477,0x477,0x477,0x477,0x47a,0x47a,
+#ifndef U_DARWIN
+0x47a,0x47a,0x477,0x477,0x477,0x477,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,
+0xa20,0xa20,0xa20,0xa20,0x486,0x945,0x486,0x486,0x486,0x486,0x486,0x486,0x489,0x489,0x489,0x489,
+0x486,0x486,0x486,0x486,0x486,0x486,0x5d9,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,
+0x486,0x486,0x486,0x486,0x489,0x489,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x6db,0x6d8,0x486,
+#else /* U_DARWIN */
+0x47a,0x47a,0x477,0x477,0x477,0x477,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,
+0xa56,0xa56,0xa56,0xa56,0x486,0x97b,0x486,0x486,0x486,0x486,0x486,0x486,0x489,0x489,0x489,0x489,
+0x486,0x486,0x486,0x486,0x486,0x486,0x5e5,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,
+0x486,0x486,0x486,0x486,0x489,0x489,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x6f9,0x6f6,0x486,
+#endif /* U_DARWIN */
+0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,
+0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,
+#ifndef U_DARWIN
+0x486,0x486,0x486,0x945,0xa26,0x945,0x945,0x945,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,
+#else /* U_DARWIN */
+0x486,0x486,0x486,0x97b,0xa5c,0x97b,0x97b,0x97b,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,
+#endif /* U_DARWIN */
+0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,
+#ifndef U_DARWIN
+0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,
+0x5e2,0x5e2,0x492,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,
+0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xb97,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,
+0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x495,0x498,0x498,0x498,
+0x498,0x498,0x498,0x498,0x498,0x498,0x498,0x498,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,
+0x5e8,0x5e8,0x5e8,0x5e8,0x498,0x498,0x498,0x498,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,
+0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,
+0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x49b,0x49b,0x5eb,0x5eb,0x5eb,0x5eb,0xa29,0xa29,
+0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0x5f1,0x5f1,0x49e,0x5ee,0x5ee,0x5ee,0x5ee,0x5ee,
+0x5ee,0x5ee,0x49e,0x49e,0x49e,0x49e,0x4a1,0x4a1,0x4a1,0x4a1,0x5f1,0x5f1,0x4a1,0x4a1,0x5f1,0x5f1,
+0x49e,0x49e,0x49e,0x49e,0x5f1,0x5f1,0x4a1,0x4a1,0x5f1,0x5f1,0x49e,0x49e,0x49e,0x49e,0x5f1,0x5f1,
+0x5ee,0x49e,0x4a1,0x5f1,0x49e,0x49e,0x5ee,0x5f1,0x5f1,0x5f1,0x4a1,0x4a1,0x49e,0x49e,0x49e,0x49e,
+0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x5f1,0x5ee,0x5f1,0x5ee,0x49e,0x4a1,
+0x4a1,0x4a1,0x4a1,0x4a1,0x4a1,0x49e,0x49e,0x5ee,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,
+0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x5f7,0x5f7,0x4a4,
+0x4a4,0x5f4,0x4a4,0x4a4,0x4a4,0x4a4,0x5f4,0x5f4,0x4a4,0x4a4,0x4a4,0x4a4,0xb9a,0xb9a,0xa2f,0xa2f,
+0xc0c,0x94e,0x4a4,0x4a4,0x5f4,0x4a4,0x5f4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,
+#else /* U_DARWIN */
+0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x5ee,0x5ee,0x5ee,0x5ee,0x5ee,0x5ee,0x5ee,0x5ee,
+0x5ee,0x5ee,0x492,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,
+0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xbcd,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,
+0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x495,0x498,0x498,0x498,
+0x498,0x498,0x498,0x498,0x498,0x498,0x498,0x498,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,
+0x5f4,0x5f4,0x5f4,0x5f4,0x498,0x498,0x498,0x498,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,
+0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x49b,0x49b,0x5f7,0x5f7,0x5f7,0x5f7,0xa5f,0xa5f,
+0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0x5fd,0x5fd,0x49e,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,
+0x5fa,0x5fa,0x49e,0x49e,0x49e,0x49e,0x4a1,0x4a1,0x4a1,0x4a1,0x5fd,0x5fd,0x4a1,0x4a1,0x5fd,0x5fd,
+0x49e,0x49e,0x49e,0x49e,0x5fd,0x5fd,0x4a1,0x4a1,0x5fd,0x5fd,0x49e,0x49e,0x49e,0x49e,0x5fd,0x5fd,
+0x5fa,0x49e,0x4a1,0x5fd,0x49e,0x49e,0x5fa,0x5fd,0x5fd,0x5fd,0x4a1,0x4a1,0x49e,0x49e,0x49e,0x49e,
+0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x5fd,0x5fa,0x5fd,0x5fa,0x49e,0x4a1,
+0x4a1,0x4a1,0x4a1,0x4a1,0x4a1,0x49e,0x49e,0x5fa,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,
+0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x603,0x603,0x4a4,
+0x4a4,0x600,0x4a4,0x4a4,0x4a4,0x4a4,0x600,0x600,0x4a4,0x4a4,0x4a4,0x4a4,0xbd0,0xbd0,0xa65,0xa65,
+0xc42,0x984,0x4a4,0x4a4,0x600,0x4a4,0x600,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,
+#endif /* U_DARWIN */
+0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,
+#ifndef U_DARWIN
+0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x5f7,0x4a4,0x5f7,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,
+#else /* U_DARWIN */
+0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x603,0x4a4,0x603,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,
+#endif /* U_DARWIN */
+0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,
+#ifndef U_DARWIN
+0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x5f7,0x5f7,0x4a7,0x5f7,0x5f4,0x5f4,0x4a4,0x5f4,
+0x5f4,0x5f4,0x5f4,0x4a4,0x5f4,0x5f7,0x4a7,0x5f7,0x94e,0x94e,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,
+0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xc0c,0xc0c,0x6ed,0x708,0x708,0x708,0x708,0x708,0x708,0x708,
+0x708,0x708,0x705,0x705,0x705,0x705,0x705,0x705,0x6f3,0x6e7,0x6e7,0x6e7,0x6e7,0x6e7,0x6e1,0x6de,
+0x975,0x975,0x975,0xaa7,0xaa4,0xaa1,0x972,0x4b6,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,
+0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4e0,0x4e0,0x4e0,0x4e0,
+0x4e0,0x4e0,0x4e0,0x4e0,0x4d7,0x4dd,0x4d1,0x4ce,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,
+0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,
+0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4d4,0x4d4,0x4d4,0x4d4,0x4d4,0x4d4,0x4d7,0x4d7,0x4d7,0x4d7,
+0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,
+0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4da,0x4e0,0x4dd,0x4d7,0x4da,0x4e0,0x4dd,0x4d7,
+0x4da,0x4e0,0x4dd,0x4d7,0x4da,0x4e0,0x4dd,0x4d7,0x4da,0x4e0,0x4dd,0x4d7,0x4da,0x4e0,0x4dd,0x4d7,
+0x4da,0x4e0,0x4dd,0x4d7,0x4da,0x4e0,0x4dd,0x4d7,0x4dd,0x4d7,0x4dd,0x4d7,0x4dd,0x4d7,0x4dd,0x4d7,
+0x4dd,0x4d7,0x4dd,0x4d7,0x4da,0x4e0,0x4dd,0x4d7,0x4da,0x4e0,0x4dd,0x4d7,0x4da,0x4e0,0x4dd,0x4d7,
+0x4da,0x4e0,0x4dd,0x4d7,0x4dd,0x4d7,0x4dd,0x4d7,0x4dd,0x4d7,0x4da,0x4e0,0x4da,0x4e0,0x4dd,0x4d7,
+0x4dd,0x4d7,0x4dd,0x4d7,0x4dd,0x4d7,0x4dd,0x4d7,0x4dd,0x4d7,0x4dd,0x4d7,0x4da,0x4dd,0x4d7,0x4da,
+0x4dd,0x4d7,0x4da,0x4e0,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,
+0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4da,0x4da,0x4da,0x4da,0x4da,
+0x4da,0x4da,0x4da,0x4da,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,
+0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,
+0x4d7,0x4d7,0x4d7,0x4d7,0x4da,0x4da,0x4d7,0x4da,0x4d7,0x4da,0x4d7,0x4d7,0x4da,0x4d7,0x4d7,0x4da,
+0x4d7,0x4da,0x4d7,0x4d7,0x4da,0x4d7,0x4da,0x4da,0x4d7,0x4d7,0x4d7,0x4da,0x4d7,0x4d7,0x4d7,0x4d7,
+0x4d7,0x4da,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,
+0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4da,0x4da,0x4d7,0x4d7,0x4da,0x4d7,0x4da,0x4d7,
+0x4d7,0x4d7,0x4d7,0x4d7,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,
+0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,
+0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4e0,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,
+0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,
+0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4e0,0x4e0,0x4e0,0x4e0,0x4e0,0x4e0,0x4e0,0x4e0,
+0x4e0,0x4e0,0x4e0,0x4e0,0x4e0,0x4e0,0x4e0,0x4e0,0x4e0,0x4e0,0x4e0,0x4e0,0x4e0,0x4dd,0x4dd,0x4dd,
+0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4f2,0x4f2,0x4ec,0x4f2,0x4ec,0x4f2,0x4ec,0x4f2,
+0x4ec,0x4f2,0x4ec,0x4ef,0x4f5,0x4f2,0x4ec,0x4f2,0x4ec,0x4ef,0x4f5,0x4f2,0x4ec,0x4f2,0x4ec,0x4ef,
+0x4f5,0x4f2,0x4ec,0x4ef,0x4f5,0x4f2,0x4ec,0x4ef,0x4f5,0x4f2,0x4ec,0x4f2,0x4ec,0x4f2,0x4ec,0x4f2,
+0x4ec,0x4f2,0x4ec,0x4ef,0x4f5,0x4f2,0x4ec,0x4ef,0x4f5,0x4f2,0x4ec,0x4ef,0x4f5,0x4f2,0x4ec,0x4ef,
+0x4f5,0x4f2,0x4ec,0x4ef,0x4f5,0x4f2,0x4ec,0x4ef,0x4f5,0x4f2,0x4ec,0x4ef,0x4f5,0x4f2,0x4ec,0x4ef,
+0x4f5,0x4f2,0x4ec,0x4ef,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,
0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,
-0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x37e,0x37e,0x37e,0x37e,0x37e,0x54f,0x5a0,0x687,0x687,0x687,
-0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,
-0x687,0x687,0x687,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x393,0x393,0x393,0x393,0x393,0x393,
-#endif /* U_DARWIN */
-0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,
-#ifndef U_DARWIN
-0x396,0x396,0x396,0x396,0x396,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,
-0x3a2,0x3a2,0x39c,0x3a2,0x39c,0x3a2,0x39c,0x3a2,0x39c,0x3a2,0x39c,0x39f,0x3a5,0x3a2,0x39c,0x3a2,
-0x39c,0x39f,0x3a5,0x3a2,0x39c,0x3a2,0x39c,0x39f,0x3a5,0x3a2,0x39c,0x39f,0x3a5,0x3a2,0x39c,0x39f,
-0x3a5,0x3a2,0x39c,0x3a2,0x39c,0x3a2,0x39c,0x3a2,0x39c,0x3a2,0x39c,0x39f,0x3a5,0x3a2,0x39c,0x39f,
-0x3a5,0x3a2,0x39c,0x39f,0x3a5,0x3a2,0x39c,0x39f,0x3a5,0x3a2,0x39c,0x39f,0x3a5,0x3a2,0x39c,0x39f,
-0x3a5,0x3a2,0x39c,0x39f,0x3a5,0x3a2,0x39c,0x39f,0x3a5,0x3a2,0x39c,0x39f,0x3d8,0x3d8,0x3d8,0x3d8,
-0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d2,0x3d2,0x3d2,0x3d2,
-0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d5,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0xa08,0x468,0x699,0x462,
-0x465,0x62a,0x3fc,0x633,0x633,0x633,0x633,0x633,0x633,0x633,0x633,0x633,0x630,0x3fc,0x3fc,0x3fc,
-0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,
-0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x62d,0x62d,
-0x78c,0x78c,0xc1b,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,
-0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0xd0b,0x49e,0x49e,0x49e,0x429,0x49e,
-0x57c,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,
-0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x69c,0x585,0x46b,0x58b,0x58e,
-0x588,0x59a,0x59a,0x59a,0x59a,0x59a,0x59a,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,
-0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x69c,0x585,0x46b,0x585,0xa62,
-0x579,0x480,0x483,0x5a6,0x5a0,0x63c,0x5ac,0x5b2,0x6a5,0x47a,0x6a5,0x47a,0x6a8,0x47d,0x6a8,0x47d,
-0x6a5,0x47a,0x5a6,0x5a6,0x6a5,0x47a,0x6a5,0x47a,0x6a5,0x47a,0x6a5,0x47a,0x639,0x6a8,0x47d,0x47d,
-0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,
-0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,
-0x543,0x543,0x53a,0x53d,0x53d,0x540,0x8c4,0x8c4,0x8c4,0x8c4,0x8c4,0x8c4,0x8c4,0x8c4,0x8c4,0xa32,
-0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xc4e,0xc4e,0xc4e,0xc4e,0xc5a,0xb3a,0xb3a,0xb3a,
-0x5a6,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x546,0x546,0x546,0x546,0x546,0x546,
-0x5a9,0x5af,0x5af,0x5af,0x5af,0x5af,0x5a3,0x5a0,0x8e2,0x8e2,0x8e2,0xa50,0xa4d,0xa35,0x8df,0x576,
-0x5b8,0x5b5,0x5b8,0x642,0x5b5,0x5b8,0x5b5,0x5b8,0x5b5,0x5b8,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,
-0x5b8,0x5b8,0x5b5,0x5b8,0x5b8,0x5b5,0x5b8,0x5b8,0x5b5,0x5b8,0x5b8,0x5b5,0x5b8,0x5b8,0x5b5,0x5b5,
-0xa56,0x651,0x5bb,0x651,0x5bb,0x651,0x5bb,0x651,0x5bb,0x651,0x5bb,0x5bb,0x5be,0x5bb,0x5be,0x5bb,
-0x5be,0x5bb,0x5be,0x5bb,0x5be,0x5bb,0x5be,0x5bb,0x5be,0x5bb,0x5be,0x5bb,0x5be,0x5bb,0x5be,0x5bb,
-0x5be,0x5bb,0x5be,0x651,0x5bb,0x5be,0x5bb,0x5be,0x5bb,0x5be,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,
-0x5be,0x5be,0x5bb,0x5be,0x5be,0x5bb,0x5be,0x5be,0x5bb,0x5be,0x5be,0x5bb,0x5be,0x5be,0x5bb,0x5bb,
-0x5bb,0x5bb,0x5bb,0x651,0x5bb,0x651,0x5bb,0x651,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x651,0x5bb,
-0x5bb,0x5bb,0x5bb,0x5bb,0x5be,0x651,0x651,0x5be,0x5be,0x5be,0x5be,0x64b,0x64e,0x654,0x657,0xa3b,
-0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,
-0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,
-0x5c7,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,
-0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5dc,0x5dc,0x5dc,0x5dc,
+0x54f,0x54f,0x54f,0x54f,0x55b,0x55b,0x54f,0x552,0x552,0x558,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,
+0x95d,0x95d,0x95d,0xa86,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xcb7,0xcb7,0xcb7,0xcb7,
+0xcba,0xb94,0xb94,0xb94,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,
+0x56a,0x56a,0x56a,0x56a,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x567,0x564,0x564,
+0x564,0x564,0x564,0x564,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,
+0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,
0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,
-0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0xb43,0xb43,0xc5d,0x5d0,0x5d3,0x5d3,0x5d3,0x5d3,
-0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,
-0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0xb3d,0xb3d,0xb3d,0xb3d,
-0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,
-0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,
-0x5d6,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,
-0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,
-0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,
-0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0xb46,
-0xb46,0xb46,0xb46,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,
-0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,
-0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0xb46,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,
-0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,
-0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0xb46,0xb46,0x5e5,0x5e5,0x5e5,0x5e5,
-0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,
-0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e8,0x5e8,0x5e8,0x5e8,
+0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,
+0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e2,0x5e2,0x5e2,0x5e2,
+0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e8,0x5e8,0x5e8,0x5e8,
+#else /* U_DARWIN */
+0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x603,0x603,0x4a7,0x603,0x600,0x600,0x4a4,0x600,
+0x600,0x600,0x600,0x4a4,0x600,0x603,0x4a7,0x603,0x984,0x984,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,
+0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xc42,0xc42,0x70b,0x726,0x726,0x726,0x726,0x726,0x726,0x726,
+0x726,0x726,0x723,0x723,0x723,0x723,0x723,0x723,0x711,0x705,0x705,0x705,0x705,0x705,0x6ff,0x6fc,
+0x9ab,0x9ab,0x9ab,0xadd,0xada,0xad7,0x9a8,0x4b6,0x786,0x786,0x4c2,0x4bc,0x4b9,0x4b9,0x4b9,0x4b9,
+0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,
+0x4b9,0x4b9,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4b9,0x612,0x612,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,
+0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,
+0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x60c,0x60c,0x60c,0x60c,
+0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x64e,0x798,0x798,0x798,
+0x798,0x798,0x798,0x798,0x798,0x798,0x798,0x798,0x798,0x798,0x798,0x798,0x798,0x798,0x798,0x798,
+0x798,0x798,0x798,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bf,0x786,0x795,0x795,
+0x795,0x795,0x795,0x795,0x786,0x786,0x786,0x786,0x786,0x786,0x786,0x786,0x786,0x786,0x786,0x786,
+0x78c,0x78c,0x78c,0x648,0x798,0x789,0x78f,0x783,0x64e,0x792,0x64b,0x645,0x4e3,0x4e3,0x4e3,0x4e3,
+0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,
+0x4ec,0x4ec,0x4ec,0x4ec,0x4ec,0x4ec,0x4ec,0x4ec,0x4e3,0x4e9,0x4dd,0x4da,0x4e9,0x4e9,0x4e9,0x4e9,
+0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,
+0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e0,0x4e0,0x4e0,0x4e0,0x4e0,0x4e0,
+0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,
+0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e6,0x4ec,0x4e9,0x4e3,
+0x4e6,0x4ec,0x4e9,0x4e3,0x4e6,0x4ec,0x4e9,0x4e3,0x4e6,0x4ec,0x4e9,0x4e3,0x4e6,0x4ec,0x4e9,0x4e3,
+0x4e6,0x4ec,0x4e9,0x4e3,0x4e6,0x4ec,0x4e9,0x4e3,0x4e6,0x4ec,0x4e9,0x4e3,0x4e9,0x4e3,0x4e9,0x4e3,
+0x4e9,0x4e3,0x4e9,0x4e3,0x4e9,0x4e3,0x4e9,0x4e3,0x4e6,0x4ec,0x4e9,0x4e3,0x4e6,0x4ec,0x4e9,0x4e3,
+0x4e6,0x4ec,0x4e9,0x4e3,0x4e6,0x4ec,0x4e9,0x4e3,0x4e9,0x4e3,0x4e9,0x4e3,0x4e9,0x4e3,0x4e6,0x4ec,
+0x4e6,0x4ec,0x4e9,0x4e3,0x4e9,0x4e3,0x4e9,0x4e3,0x4e9,0x4e3,0x4e9,0x4e3,0x4e9,0x4e3,0x4e9,0x4e3,
+0x4e6,0x4e9,0x4e3,0x4e6,0x4e9,0x4e3,0x4e6,0x4ec,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,
+0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e6,
+0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,
+0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,
+0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e6,0x4e6,0x4e3,0x4e6,0x4e3,0x4e6,0x4e3,0x4e3,
+0x4e6,0x4e3,0x4e3,0x4e6,0x4e3,0x4e6,0x4e3,0x4e3,0x4e6,0x4e3,0x4e6,0x4e6,0x4e3,0x4e3,0x4e3,0x4e6,
+0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e6,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,
+0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e6,0x4e6,0x4e3,0x4e3,
+0x4e6,0x4e3,0x4e6,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,
+0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,
+0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4e6,0x4ec,0x4e9,0x4e9,0x4e9,0x4e9,
+0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,
+0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4ec,0x4ec,0x4ec,0x4ec,
+0x4ec,0x4ec,0x4ec,0x4ec,0x4ec,0x4ec,0x4ec,0x4ec,0x4ec,0x4ec,0x4ec,0x4ec,0x4ec,0x4ec,0x4ec,0x4ec,
+0x4ec,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4e9,0x4fe,0x4fe,0x4f8,0x4fe,
+0x4f8,0x4fe,0x4f8,0x4fe,0x4f8,0x4fe,0x4f8,0x4fb,0x501,0x4fe,0x4f8,0x4fe,0x4f8,0x4fb,0x501,0x4fe,
+0x4f8,0x4fe,0x4f8,0x4fb,0x501,0x4fe,0x4f8,0x4fb,0x501,0x4fe,0x4f8,0x4fb,0x501,0x4fe,0x4f8,0x4fe,
+0x4f8,0x4fe,0x4f8,0x4fe,0x4f8,0x4fe,0x4f8,0x4fb,0x501,0x4fe,0x4f8,0x4fb,0x501,0x4fe,0x4f8,0x4fb,
+0x501,0x4fe,0x4f8,0x4fb,0x501,0x4fe,0x4f8,0x4fb,0x501,0x4fe,0x4f8,0x4fb,0x501,0x4fe,0x4f8,0x4fb,
+0x501,0x4fe,0x4f8,0x4fb,0x501,0x4fe,0x4f8,0x4fb,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,
+0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,
+0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x567,0x567,0x55b,0x55e,0x55e,0x564,0x993,0x993,
+0x993,0x993,0x993,0x993,0x993,0x993,0x993,0xabc,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,
+0xced,0xced,0xced,0xced,0xcf0,0xbca,0xbca,0xbca,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x576,
+0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x570,0x570,0x570,0x570,0x570,0x570,0x570,0x570,
+0x570,0x573,0x570,0x570,0x570,0x570,0x570,0x570,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,
+0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5e8,0x5e8,0x5e8,0x5e8,
+#endif /* U_DARWIN */
0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,
-0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5eb,0x5eb,
-0x5e8,0x5eb,0x5e8,0x5eb,0x5eb,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5eb,
-0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,
-0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,
-0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,
+#ifndef U_DARWIN
+0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x600,0x600,0x600,0x600,
+0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
+0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x62a,0x62a,0x62a,0x62a,
+0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,
+0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x609,0x609,0xa8f,0x621,0x615,0x612,
+0x618,0x60f,0x62a,0x62d,0x62d,0x62d,0x62d,0x62d,0x62d,0x62d,0x62d,0x62d,0x61e,0x62a,0x62a,0x62a,
+0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x630,0x6ff,0x702,0x6ed,
+0x6de,0x70b,0x6e4,0x708,0x6f0,0x6ea,0x6f0,0x6ea,0x6fc,0x6f9,0x6fc,0x6f9,0x6f0,0x6ea,0x6ed,0x6ed,
+0x6f0,0x6ea,0x6f0,0x6ea,0x6f0,0x6ea,0x6f0,0x6ea,0x6f6,0x6fc,0x6f9,0x6f9,0x636,0x672,0x672,0x672,
+0x672,0x672,0x672,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,
+0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x639,0x654,0x633,0x65a,0x65d,0x657,0x66f,0x66f,0x66f,
+0x66f,0x66f,0x66f,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,
+0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x639,0x654,0x633,0x654,0xa92,0x6d2,0x6d2,0x6d2,0x6d2,
+0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,
+0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x6d2,0x717,0x714,0x717,0x71a,
+0x714,0x717,0x714,0x717,0x714,0x717,0x714,0x714,0x714,0x714,0x714,0x714,0x717,0x717,0x714,0x717,
+0x717,0x714,0x717,0x717,0x714,0x717,0x717,0x714,0x717,0x717,0x714,0x714,0x729,0x729,0x729,0x72f,
+0x729,0x72f,0x729,0x72f,0x729,0x729,0x729,0x729,0x729,0x729,0x72f,0x729,0x729,0x729,0x729,0x729,
+0x72c,0x72f,0x72f,0x72c,0x72c,0x72c,0x72c,0x723,0x726,0x732,0x735,0xab3,0xab0,0x72f,0x729,0x72f,
+0x729,0x72f,0x729,0x72f,0x729,0x72f,0x729,0x729,0x72c,0x729,0x72c,0x729,0x72c,0x729,0x72c,0x729,
+0x72c,0x729,0x72c,0x729,0x72c,0x729,0x72c,0x729,0x72c,0x729,0x72c,0x729,0x72c,0x729,0x72c,0x72f,
+0x729,0x72c,0x729,0x72c,0x729,0x72c,0x729,0x729,0x729,0x729,0x729,0x729,0x72c,0x72c,0x729,0x72c,
+0x72c,0x729,0x72c,0x72c,0x729,0x72c,0x72c,0x729,0x72c,0x72c,0x729,0x729,0x73b,0x73b,0x73b,0x73b,
+0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,
+0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73e,0x73b,0x73b,0x73b,
+0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,
+0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x753,0x753,0x753,0x753,0x753,0x753,0x753,0x753,
+0x753,0x753,0x753,0x753,0x753,0x753,0x753,0x753,0x753,0x753,0x753,0x753,0x753,0x753,0x753,0x753,
+0x753,0x753,0x753,0x753,0xba6,0xba6,0xcbd,0x747,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,
+0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,
+0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0xba0,0xba0,0xba0,0xba0,0x756,0x756,0x756,0x756,
+0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x74d,0x74d,0x74d,0x74d,
+0x74d,0x74d,0x74d,0x74d,0x74d,0x74d,0x74d,0x74d,0x74d,0x74d,0x74d,0x74d,0x74d,0x74d,0x74d,0x74d,
+0x74d,0x74d,0x74d,0x74d,0x74d,0x74d,0x74d,0x74d,0x74d,0x74d,0x74d,0x74d,0x74d,0xab6,0xab6,0xab6,
+0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0x75f,0x75f,0x75f,0x75f,
+0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,
+0x75f,0x75f,0x75f,0x75f,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,
+0x759,0x759,0x759,0x759,0x759,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0xba9,0xba9,0xba9,0xba9,0x75c,
+0x75c,0x75c,0x75c,0x75c,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,
+#else /* U_DARWIN */
+0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5f1,0x5f1,
+0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,
+0x5ee,0x5ee,0x5ee,0x5ee,0x5ee,0x5ee,0x5ee,0x5ee,0x5ee,0x5ee,0x5ee,0x5ee,0x5ee,0x5ee,0x5ee,0x5ee,
+0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,
+0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,
+0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,
+0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,
+0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,
+0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,
+0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,
+0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x61b,0x61b,
+0xac5,0x633,0x627,0x624,0x62a,0x621,0x63c,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,0x63f,
+0x630,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,
+0x642,0x71d,0x720,0x70b,0x6fc,0x729,0x702,0x726,0x70e,0x708,0x70e,0x708,0x71a,0x717,0x71a,0x717,
+0x70e,0x708,0x70b,0x70b,0x70e,0x708,0x70e,0x708,0x70e,0x708,0x70e,0x708,0x714,0x71a,0x717,0x717,
+0x654,0x690,0x690,0x690,0x690,0x690,0x690,0x68a,0x68a,0x68a,0x68a,0x68a,0x68a,0x68a,0x68a,0x68a,
+0x68a,0x68a,0x68a,0x68a,0x68a,0x68a,0x68a,0x68a,0x68a,0x68a,0x68a,0x657,0x672,0x651,0x678,0x67b,
+0x675,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,
+0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x657,0x672,0x651,0x672,0xac8,
+0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,
+0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,
+0x735,0x732,0x735,0x738,0x732,0x735,0x732,0x735,0x732,0x735,0x732,0x732,0x732,0x732,0x732,0x732,
+0x735,0x735,0x732,0x735,0x735,0x732,0x735,0x735,0x732,0x735,0x735,0x732,0x735,0x735,0x732,0x732,
+0x747,0x747,0x747,0x74d,0x747,0x74d,0x747,0x74d,0x747,0x747,0x747,0x747,0x747,0x747,0x74d,0x747,
+0x747,0x747,0x747,0x747,0x74a,0x74d,0x74d,0x74a,0x74a,0x74a,0x74a,0x741,0x744,0x750,0x753,0xae9,
+0xae6,0x74d,0x747,0x74d,0x747,0x74d,0x747,0x74d,0x747,0x74d,0x747,0x747,0x74a,0x747,0x74a,0x747,
+0x74a,0x747,0x74a,0x747,0x74a,0x747,0x74a,0x747,0x74a,0x747,0x74a,0x747,0x74a,0x747,0x74a,0x747,
+0x74a,0x747,0x74a,0x74d,0x747,0x74a,0x747,0x74a,0x747,0x74a,0x747,0x747,0x747,0x747,0x747,0x747,
+0x74a,0x74a,0x747,0x74a,0x74a,0x747,0x74a,0x74a,0x747,0x74a,0x74a,0x747,0x74a,0x74a,0x747,0x747,
+#endif /* U_DARWIN */
+0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,
+#ifndef U_DARWIN
+0x759,0x759,0x759,0xba9,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,
0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,
-0x762,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,
+0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0xba9,0xba9,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,
0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,
-0x75f,0x75f,0x75f,0x75f,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,
-0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,
-0x76e,0x76e,0x768,0x768,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,
-0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,
-0x771,0x771,0x76b,0x76b,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,
-0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,
-0x76e,0x76e,0x76e,0x76e,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,
-0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,
-0x771,0x771,0x771,0x771,0x777,0x786,0x786,0x786,0x786,0x774,0x786,0x786,0x7ad,0x786,0x786,0x780,
-0x7aa,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7ad,0x774,0x7a4,0x774,0x774,0x774,0x79b,0x79b,0x774,0x774,
-0x774,0x774,0x774,0x774,0x7b0,0x7b0,0x7b0,0x7b0,0x7b0,0x7b0,0x7b0,0x7b0,0x7b0,0x7b0,0x774,0x774,
-0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x780,0x79b,0x774,0x79b,0x774,0x79b,0x7b3,0x789,
-0x7b3,0x789,0x7a1,0x7a1,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,
-0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,
-0x7b9,0x7b9,0x7b9,0x7b9,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,
-0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,
-0x7bc,0x7bc,0x7bc,0x7bc,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,
-0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,
-0x7bf,0x7bf,0x7bf,0x7bf,0x7c2,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,
-0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,
-0x7c2,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,
-0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x984,0xa77,0x7d4,0x7ce,
-0x7d4,0x7ce,0x7d7,0x7d1,0x7d7,0x7d1,0x7d7,0x7d1,0x7d7,0x7d1,0x7d7,0x7d1,0x7d7,0x7d1,0x7d7,0x7d1,
-0xa77,0xa77,0xa77,0xb61,0xb61,0xb61,0xb64,0xb64,0xb61,0xb64,0xb64,0xb61,0x804,0x804,0x804,0x804,
-0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0xa92,0xa92,0xa92,0x8a0,0x8a0,0x8a0,0x8a0,
-0x8a0,0x8a0,0x8a0,0x8a0,0x8a0,0x8a0,0x8a0,0x8a0,0x8a0,0x8a0,0x8a0,0x8a0,0x807,0x807,0x807,0x807,
+0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,
+0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,
+0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,
+0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,
+0xf2d,0xf2d,0xf2d,0xf2d,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,
+0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,
+0x765,0x765,0x765,0x765,0x765,0x765,0x768,0x768,0x765,0x768,0x765,0x768,0x768,0x765,0x765,0x765,
+0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x768,0x7ec,0x7ce,0x7ce,0x7ce,0x7ce,0x7c8,0x7ce,0x7ce,
+0x7e0,0x7ce,0x7ce,0x7cb,0x7d7,0x7dd,0x7dd,0x7dd,0x7dd,0x7dd,0x7e0,0x7c8,0x7d4,0x7c8,0x7c8,0x7c8,
+0x7c2,0x7c2,0x7c8,0x7c8,0x7c8,0x7c8,0x7c8,0x7c8,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,
+0x7e3,0x7e3,0x7c8,0x7c8,0x7c8,0x7c8,0x7c8,0x7c8,0x7c8,0x7c8,0x7c8,0x7c8,0x7cb,0x7c2,0x7c8,0x7c2,
+0x7c8,0x7c2,0x7da,0x7d1,0x7da,0x7d1,0x7e9,0x7e9,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,
+0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,
+0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,
+0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,
+0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,
+0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,
+0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,
+0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,
+0x807,0x807,0x807,0x807,0x807,0x807,0x801,0x801,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,
+0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,
+0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x804,0x804,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,
0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,
-0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x825,0x825,0x825,0x825,
-0x825,0x825,0x825,0xb85,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,
-0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,
-0x825,0x825,0x825,0x825,0x825,0x825,0x825,0xb85,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,
-0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,
-0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,
-0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,
+0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,
+0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,
+0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80d,0x810,0x810,0x810,0x810,0x810,0x810,0x810,
+0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,
+0x810,0x810,0x810,0x810,0x80d,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,
+0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,
+0x9cf,0xac5,0x81f,0x819,0x81f,0x819,0x822,0x81c,0x822,0x81c,0x822,0x81c,0x822,0x81c,0x822,0x81c,
+0x822,0x81c,0x822,0x81c,0xac5,0xac5,0xac5,0xbb2,0xbb2,0xbb2,0xbb5,0xbb5,0xbb2,0xbb5,0xbb5,0xbb2,
+0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0xaec,0xaec,0xaec,
+0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,
+0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,
+0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,
+0x89d,0x89d,0xdec,0x89d,0x89d,0x89d,0x8a0,0x89d,0xdec,0x89d,0x89d,0xde6,0x89a,0x88b,0x88b,0x88b,
+0x88b,0x89a,0x88b,0xdd4,0xdd4,0xdd4,0x88b,0x88e,0x89a,0x891,0xdda,0xde6,0xde6,0xdd4,0xdd4,0xdec,
+0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x8a3,0x8a3,0x894,0x894,0x894,0x894,
+0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89a,0x89a,0x88b,0x88b,0xdec,0xdec,0xdec,0xdec,0xdd4,0xdd4,
+0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,
+#else /* U_DARWIN */
+0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,
+0x75c,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,
+0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x771,0x771,0x771,0x771,
+0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,
+0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0xbdc,0xbdc,0xcf3,0x765,0x768,0x768,0x768,0x768,
+0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,
+0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0xbd6,0xbd6,0xbd6,0xbd6,
+0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,
+0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,
+0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,
+0x76b,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,
+0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,
+0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,
+0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x77a,0x77a,0x77a,0x77a,0x77a,0x77a,0xbdf,
+0xbdf,0xbdf,0xbdf,0x77a,0x77a,0x77a,0x77a,0x77a,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,
+0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,
+0x777,0x777,0x777,0x777,0x777,0x777,0x777,0xbdf,0x77a,0x77a,0x77a,0x77a,0x77a,0x77a,0x77a,0x77a,
+0x77a,0x77a,0x77a,0x77a,0x77a,0x77a,0x77a,0x77a,0x77a,0x77a,0x77a,0x77a,0x77a,0x77a,0x77a,0x77a,
+0x77a,0x77a,0x77a,0x77a,0x77a,0x77a,0x77a,0x77a,0x77a,0x77a,0xbdf,0xbdf,0x77d,0x77d,0x77d,0x77d,
+0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,
+0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x780,0x780,0x780,0x780,
+0x780,0x780,0x780,0x780,0x780,0x780,0x780,0x780,0x780,0x780,0x780,0x780,0x780,0x780,0x780,0x780,
+0x780,0x780,0x780,0x780,0x780,0x780,0x780,0x780,0x780,0x780,0x780,0x780,0x780,0x780,0xcf6,0xcf6,
+0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,
+0xcf6,0xcf6,0xcf6,0xcf6,0xf63,0xf63,0xf63,0xf63,0x79b,0x79b,0x79b,0x79b,0x79b,0x79b,0x79b,0x79b,
+0x79b,0x79b,0x79b,0x79b,0x79b,0x79b,0x79b,0x79b,0x79b,0x79b,0x79b,0x79b,0x79b,0x79b,0x79b,0x79b,
+0x79b,0x79b,0x79b,0x79b,0x79b,0x79b,0x79b,0x79b,0x79b,0x79b,0x79e,0x79e,0x79b,0x79e,0x79b,0x79e,
+0x79e,0x79b,0x79b,0x79b,0x79b,0x79b,0x79b,0x79b,0x79b,0x79b,0x79b,0x79e,0x822,0x804,0x804,0x804,
+0x804,0x7fe,0x804,0x804,0x816,0x804,0x804,0x801,0x80d,0x813,0x813,0x813,0x813,0x813,0x816,0x7fe,
+0x80a,0x7fe,0x7fe,0x7fe,0x7f8,0x7f8,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x819,0x819,0x819,0x819,
+0x819,0x819,0x819,0x819,0x819,0x819,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,
+0x801,0x7f8,0x7fe,0x7f8,0x7fe,0x7f8,0x810,0x807,0x810,0x807,0x81f,0x81f,0x82e,0x82e,0x82e,0x82e,
+0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,
+0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x831,0x831,0x831,0x831,
0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,
-0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,
-0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,
-0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,
+0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x834,0x834,0x834,0x834,
+0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,
+0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x83d,0x83d,0x83d,0x83d,
+0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,
+0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x837,0x837,0x840,0x840,0x840,0x840,
0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,
-0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x843,0x840,0x840,0x840,0x840,
+0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x83a,0x83a,0x83d,0x83d,0x83d,0x83d,
+0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,
+0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x840,0x840,0x840,0x840,
0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,
-0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,
-0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,
-0x855,0x855,0x855,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,
-0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,
-0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,
-0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,
-0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,
-0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,
-0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,
+0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x843,0x846,0x846,0x846,
+0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,
+0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x843,0x846,0x846,0x846,0x846,0x846,0x846,0x846,
+0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,
+0x846,0x846,0x846,0x846,0xa05,0xafb,0x855,0x84f,0x855,0x84f,0x858,0x852,0x858,0x852,0x858,0x852,
+0x858,0x852,0x858,0x852,0x858,0x852,0x858,0x852,0xafb,0xafb,0xafb,0xbe8,0xbe8,0xbe8,0xbeb,0xbeb,
+0xbe8,0xbeb,0xbeb,0xbe8,0x894,0x894,0x894,0x894,0x894,0x894,0x894,0x894,0x894,0x894,0x894,0x894,
+0x894,0xb22,0xb22,0xb22,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,
+0x88b,0x88b,0x88b,0x88b,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,
+#endif /* U_DARWIN */
+0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,
+#ifndef U_DARWIN
+0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0xbf1,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,
+0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,
+0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0xbf1,0x8b2,0x8b2,0x8b2,0x8b2,
+0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b8,0x8b8,0x8b8,0x8b8,
+0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,
+0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x8b8,0x8be,0x8be,0x8be,0x8be,
+0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,
+0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8be,0x8d3,0x8d3,0x8d3,0x8d3,
+#else /* U_DARWIN */
+0x89d,0x89d,0x89d,0x89d,0x8d3,0x8d3,0xe22,0x8d3,0x8d3,0x8d3,0x8d6,0x8d3,0xe22,0x8d3,0x8d3,0xe1c,
+0x8d0,0x8c1,0x8c1,0x8c1,0x8c1,0x8d0,0x8c1,0xe0a,0xe0a,0xe0a,0x8c1,0x8c4,0x8d0,0x8c7,0xe10,0xe1c,
+0xe1c,0xe0a,0xe0a,0xe22,0x8cd,0x8cd,0x8cd,0x8cd,0x8cd,0x8cd,0x8cd,0x8cd,0x8cd,0x8cd,0x8d9,0x8d9,
+0x8ca,0x8ca,0x8ca,0x8ca,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d0,0x8d0,0x8c1,0x8c1,0xe22,0xe22,
+0xe22,0xe22,0xe0a,0xe0a,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,
+#endif /* U_DARWIN */
+0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,
+#ifndef U_DARWIN
+0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8fa,0x8fa,0x8fa,0x8fd,
+0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,
+0x8d6,0x8d6,0x8f7,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8f7,0x8f7,0x8fa,0x8fa,0x8fa,0x8fa,
+0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,
+0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x91e,0x91e,0x91e,0x91e,
+0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,
+0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x921,
+0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,
+0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x945,0x945,0x945,0x945,
+0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,
+0x945,0x945,0x945,0x945,0x945,0x945,0x945,0xa26,0xa26,0xa26,0xa26,0xa26,0x951,0x951,0x951,0x951,
+0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,
+0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x963,0x963,0x963,0x963,
+0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,
+0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x969,0x969,0x969,0x969,
+0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,
+0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x97b,0x97b,0x97b,0x97b,
+#else /* U_DARWIN */
+0x8d3,0x8d3,0x8d3,0x8d3,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0xc27,0x8e8,0x8e8,0x8e8,0x8e8,
0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,
-0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,
-0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8f7,0x8eb,0x8eb,
-0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,
-0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,
-0x8ee,0x8ee,0xa41,0xa41,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,
-0x8ee,0x8ee,0x8ee,0x8ee,0xa41,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,
-0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,
-0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,
+0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0xc27,
+0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,
+0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,
+0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,
+0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,
+0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4,
+0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,
+0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,
0x930,0x930,0x930,0x933,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,
-0x930,0x930,0x930,0x930,0x91e,0x91e,0x92d,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x92d,0x92d,
+0x930,0x930,0x930,0x930,0x90c,0x90c,0x92d,0x90f,0x90f,0x90f,0x90f,0x90f,0x90f,0x90f,0x92d,0x92d,
0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,
0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,
-0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0xac2,0xac2,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,
-0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,
-0x948,0x948,0xabf,0xabf,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,
-0xafb,0xafb,0xafb,0xafb,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,
-0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,
-0x94b,0x94b,0x94b,0x94b,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,
-#else /* U_DARWIN */
-0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x399,0x39f,0x39c,0x396,
-0x399,0x39f,0x39c,0x396,0x399,0x39f,0x39c,0x396,0x399,0x39f,0x39c,0x396,0x399,0x39f,0x39c,0x396,
-0x399,0x39f,0x39c,0x396,0x399,0x39f,0x39c,0x396,0x399,0x39f,0x39c,0x396,0x39c,0x396,0x39c,0x396,
-0x39c,0x396,0x39c,0x396,0x39c,0x396,0x39c,0x396,0x399,0x39f,0x39c,0x396,0x399,0x39f,0x39c,0x396,
-0x399,0x39f,0x39c,0x396,0x399,0x39f,0x39c,0x396,0x39c,0x396,0x39c,0x396,0x39c,0x396,0x399,0x39f,
-0x399,0x39f,0x39c,0x396,0x39c,0x396,0x39c,0x396,0x39c,0x396,0x39c,0x396,0x39c,0x396,0x39c,0x396,
-0x399,0x39c,0x396,0x399,0x39c,0x396,0x399,0x39f,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,
-0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x399,
-0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x396,0x396,0x396,0x396,0x396,0x396,0x396,
-0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x399,0x399,0x399,0x399,0x399,0x399,0x399,
-0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x396,0x39c,0x6c6,0x474,0x399,0x399,0x396,0x399,
-0x396,0x399,0x396,0x396,0x399,0x396,0x396,0x399,0x396,0x399,0x396,0x396,0x399,0x396,0x399,0x399,
-0x396,0x396,0x396,0x399,0x396,0x396,0x396,0x396,0x396,0x399,0x396,0x396,0x396,0x396,0x396,0x396,
-0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,
-0x399,0x399,0x396,0x396,0x399,0x396,0x399,0x396,0x396,0x396,0x396,0x396,0x399,0x399,0x399,0x399,
-0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,
-0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x39f,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,
-0x39f,0x39f,0x39f,0x39f,0x39f,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x3ab,0x3ab,0x3a5,0x3ab,0x3a5,0x3ab,0x3a5,0x3ab,0x3a5,0x3ab,0x3a5,0x3a8,0x3ae,0x3ab,0x3a5,0x3ab,
-0x3a5,0x3a8,0x3ae,0x3ab,0x3a5,0x3ab,0x3a5,0x3a8,0x3ae,0x3ab,0x3a5,0x3a8,0x3ae,0x3ab,0x3a5,0x3a8,
-0x3ae,0x3ab,0x3a5,0x3ab,0x3a5,0x3ab,0x3a5,0x3ab,0x3a5,0x3ab,0x3a5,0x3a8,0x3ae,0x3ab,0x3a5,0x3a8,
-0x3ae,0x3ab,0x3a5,0x3a8,0x3ae,0x3ab,0x3a5,0x3a8,0x3ae,0x3ab,0x3a5,0x3a8,0x3ae,0x3ab,0x3a5,0x3a8,
-0x3ae,0x3ab,0x3a5,0x3a8,0x3ae,0x3ab,0x3a5,0x3a8,0x3ae,0x3ab,0x3a5,0x3a8,0x3e1,0x3e1,0x3e1,0x3e1,
-0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3db,0x3db,0x3db,0x3db,
-0x3db,0x3db,0x3db,0x3db,0x3db,0x3de,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3f9,0x3f9,0x3f9,0x3f9,
-0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x564,0x564,0x564,0x564,
-0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0xa3e,0x47d,0x6c9,0x477,
-0x47a,0x654,0x408,0x65d,0x65d,0x65d,0x65d,0x65d,0x65d,0x65d,0x65d,0x65d,0x65a,0x408,0x408,0x408,
-0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,
-0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x657,0x657,
-0x7c2,0x7c2,0xc51,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,
-0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0xd41,0x4b9,0x4b9,0x4b9,0x43b,0x4b9,
-0x5a3,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,
-0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x6cf,0x5ac,0x483,0x5b2,0x5b5,
-0x5af,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,
-0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x6cf,0x5ac,0x483,0x5ac,0xa98,
-0x59a,0x498,0x49b,0x5cd,0x5c7,0x666,0x5d3,0x5d9,0x6d8,0x492,0x6d8,0x492,0x6db,0x495,0x6db,0x495,
-0x6d8,0x492,0x5cd,0x5cd,0x6d8,0x492,0x6d8,0x492,0x6d8,0x492,0x6d8,0x492,0x663,0x6db,0x495,0x495,
-0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,
-0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,
-0x561,0x561,0x558,0x55b,0x55b,0x55e,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0xa68,
-0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xc84,0xc84,0xc84,0xc84,0xc90,0xb70,0xb70,0xb70,
-0x5cd,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x567,0x567,0x567,0x567,0x567,0x567,
-0x5d0,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5ca,0x5c7,0x918,0x918,0x918,0xa86,0xa83,0xa6b,0x915,0x597,
-0x5df,0x5dc,0x5df,0x66c,0x5dc,0x5df,0x5dc,0x5df,0x5dc,0x5df,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,
-0x5df,0x5df,0x5dc,0x5df,0x5df,0x5dc,0x5df,0x5df,0x5dc,0x5df,0x5df,0x5dc,0x5df,0x5df,0x5dc,0x5dc,
-0xa8c,0x67b,0x5e2,0x67b,0x5e2,0x67b,0x5e2,0x67b,0x5e2,0x67b,0x5e2,0x5e2,0x5e5,0x5e2,0x5e5,0x5e2,
-0x5e5,0x5e2,0x5e5,0x5e2,0x5e5,0x5e2,0x5e5,0x5e2,0x5e5,0x5e2,0x5e5,0x5e2,0x5e5,0x5e2,0x5e5,0x5e2,
-0x5e5,0x5e2,0x5e5,0x67b,0x5e2,0x5e5,0x5e2,0x5e5,0x5e2,0x5e5,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,
-0x5e5,0x5e5,0x5e2,0x5e5,0x5e5,0x5e2,0x5e5,0x5e5,0x5e2,0x5e5,0x5e5,0x5e2,0x5e5,0x5e5,0x5e2,0x5e2,
-0x5e2,0x5e2,0x5e2,0x67b,0x5e2,0x67b,0x5e2,0x67b,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x67b,0x5e2,
-0x5e2,0x5e2,0x5e2,0x5e2,0x5e5,0x67b,0x67b,0x5e5,0x5e5,0x5e5,0x5e5,0x675,0x678,0x67e,0x681,0xa71,
-0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,
-0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,
-0x5ee,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,
-0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x603,0x603,0x603,0x603,
-0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,
-0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0xb79,0xb79,0xc93,0x5f7,0x5fa,0x5fa,0x5fa,0x5fa,
-0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,
-0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0xb73,0xb73,0xb73,0xb73,
-0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,
-0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,
-0x5fd,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,
-0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,
-0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,
-0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x609,0x609,0x609,0x609,0x609,0x609,0xb7c,
-0xb7c,0xb7c,0xb7c,0x609,0x609,0x609,0x609,0x609,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,
-0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,
-0x606,0x606,0x606,0x606,0x606,0x606,0x606,0xb7c,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,
-0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,
-0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0xb7c,0xb7c,0x60c,0x60c,0x60c,0x60c,
-0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,
-0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60f,0x60f,0x60f,0x60f,
-0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,
-0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x612,0x612,
-0x60f,0x612,0x60f,0x612,0x612,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x612,
-0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,
-0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,
-0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,
-0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,
-0x798,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,
-0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,
-0x795,0x795,0x795,0x795,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,
-0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,
-0x7a4,0x7a4,0x79e,0x79e,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,
-0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,
-0x7a7,0x7a7,0x7a1,0x7a1,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,
-0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,
-0x7a4,0x7a4,0x7a4,0x7a4,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,
-0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,
-0x7a7,0x7a7,0x7a7,0x7a7,0x7ad,0x7bc,0x7bc,0x7bc,0x7bc,0x7aa,0x7bc,0x7bc,0x7e3,0x7bc,0x7bc,0x7b6,
-0x7e0,0x7dd,0x7dd,0x7dd,0x7dd,0x7dd,0x7e3,0x7aa,0x7da,0x7aa,0x7aa,0x7aa,0x7d1,0x7d1,0x7aa,0x7aa,
-0x7aa,0x7aa,0x7aa,0x7aa,0x7e6,0x7e6,0x7e6,0x7e6,0x7e6,0x7e6,0x7e6,0x7e6,0x7e6,0x7e6,0x7aa,0x7aa,
-0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7b6,0x7d1,0x7aa,0x7d1,0x7aa,0x7d1,0x7e9,0x7bf,
-0x7e9,0x7bf,0x7d7,0x7d7,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,
-0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,
-0x7ef,0x7ef,0x7ef,0x7ef,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,
-0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,
-0x7f2,0x7f2,0x7f2,0x7f2,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,
-0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,
-0x7f5,0x7f5,0x7f5,0x7f5,0x7f8,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,
-0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,
-0x7f8,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,
-0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x9ba,0xaad,0x80a,0x804,
-0x80a,0x804,0x80d,0x807,0x80d,0x807,0x80d,0x807,0x80d,0x807,0x80d,0x807,0x80d,0x807,0x80d,0x807,
-0xaad,0xaad,0xaad,0xb97,0xb97,0xb97,0xb9a,0xb9a,0xb97,0xb9a,0xb9a,0xb97,0x83a,0x83a,0x83a,0x83a,
-0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0xac8,0xac8,0xac8,0x8d6,0x8d6,0x8d6,0x8d6,
-0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x83d,0x83d,0x83d,0x83d,
-0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,
-0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x85b,0x85b,0x85b,0x85b,
-0x85b,0x85b,0x85b,0xbbb,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,
-0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,
-0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0xbbb,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,
-0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,
-0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,
-0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,
-0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,
-0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,
-0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,
-0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,
-0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,
-0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x879,0x876,0x876,0x876,0x876,
-0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,
-0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,
-0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,
-0x88b,0x88b,0x88b,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,
-0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,
-0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,
-0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,
-0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,
-0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,
-0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,
-0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,
-0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,
-0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x92d,0x921,0x921,
-0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,
-0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,
-0x924,0x924,0xa77,0xa77,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,
-0x924,0x924,0x924,0x924,0xa77,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,
+0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,
+0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,
+0x954,0x954,0x954,0x957,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,
+0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,
#endif /* U_DARWIN */
-0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,
-#ifndef U_DARWIN
-0x94e,0x94e,0x94e,0x94e,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,
-0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,
-0x951,0x951,0x951,0x951,0x951,0x951,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x963,0x969,0x96f,
-0x96f,0x96f,0x951,0x951,0x951,0x96c,0x966,0x966,0x966,0x966,0x966,0x960,0x960,0x960,0x960,0x960,
-0x960,0x960,0x960,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x951,0x951,0x96f,0x96f,0x96f,
-0x96f,0x96f,0x96f,0x96f,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,
-0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x96f,0x96f,0x96f,0x96f,0x951,0x951,
-0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x954,0x954,0x954,0x954,0x954,
-0x95d,0x957,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,
-0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x957,0x95a,0x95a,0x95a,0x95a,
-0x95a,0x95a,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,
-0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x957,0x95a,0x95a,0x95a,0x95a,
-0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,
-0x95a,0x957,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,
-0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x957,0x95a,0x95a,
-0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,
-0x95a,0x95a,0x95a,0x95a,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,
-0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95a,0x95a,
-0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,
-0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95d,0x95d,0x95d,0x95d,0x972,0x972,0x972,0x972,
-0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,
-0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x975,0x975,0x975,0x975,
-0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,
-0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x978,0x978,0x978,0x978,
-0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,
-0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x97b,0x97b,0x97b,0x97b,
0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,
-0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x9c6,0x9c6,0x9c6,0x9c6,
-0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,
-0x9c3,0x9c3,0x9c3,0x9c6,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,
-0x9c3,0x9c3,0x9c3,0xab3,0xab6,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,
-0xcae,0xcae,0xcae,0xcae,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,
-0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,
-0x9ed,0x9ed,0x9ed,0x9ed,0x9f0,0x9f0,0x9f0,0xa5f,0xa05,0xa68,0xa0e,0xa5f,0xa05,0xa5f,0xa05,0xa5f,
-0xa05,0xa5f,0xa05,0xa5f,0xa05,0xa5f,0xa05,0xa5f,0xa05,0xa5f,0xa05,0xa5f,0xa05,0x9f0,0x9f0,0x9f0,
-0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,
-0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,
-0xa5f,0xa05,0xa5f,0xa05,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,
-0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,
-0xa5f,0xa05,0x9f0,0x9f0,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,
-0x9f9,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,
-0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,
-0x9f3,0x9f3,0x9f3,0x9f3,0x9f9,0x9f9,0x9f9,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,
-0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,
-0x9f3,0x9f3,0x9f3,0x9f3,0x9f6,0x9f3,0x9f3,0x9f3,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,
-0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,
-0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xace,0xace,0xace,0xace,0xace,0xace,0xace,0xace,
-0xace,0xace,0xace,0xace,0xace,0xace,0xace,0xace,0xace,0xace,0xace,0xace,0xace,0xace,0xace,0xace,
-0xace,0xace,0xace,0xace,0xace,0xace,0xace,0xace,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xad4,0xad4,
-0xad4,0xad4,0xad4,0xad1,0xae6,0xae6,0xae6,0xae0,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,
-0xae6,0xae6,0xae6,0xae0,0xae6,0xae6,0xae6,0xae6,0xada,0xada,0xae3,0xae3,0xae3,0xae3,0xad7,0xad7,
-0xad7,0xad7,0xad7,0xadd,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,
-0xba0,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,
-0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae0,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,
-0xae6,0xae6,0xae6,0xae6,0xae6,0xada,0xada,0xada,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,
-0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,
-0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,
-0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,
-0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,
-0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,
-0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,
-0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,
-0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,
-#else /* U_DARWIN */
-0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,
-0x966,0x966,0x966,0x969,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,
-0x966,0x966,0x966,0x966,0x954,0x954,0x963,0x957,0x957,0x957,0x957,0x957,0x957,0x957,0x963,0x963,
-0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,
-0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,
-0x981,0x981,0x981,0x981,0x981,0x981,0xaf8,0xaf8,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,
+#ifndef U_DARWIN
+0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97e,0x97e,0x97e,0x97e,
0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,
-0x97e,0x97e,0xaf5,0xaf5,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,
-0xb31,0xb31,0xb31,0xb31,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,
-0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,
-0x981,0x981,0x981,0x981,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,
-0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,
-0x984,0x984,0x984,0x984,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,
+0x97e,0x981,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,
+0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,
+0x97e,0x97e,0x97e,0x97e,0x984,0x984,0xab9,0xab9,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,
+0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0xab9,0x984,0x984,0x984,0x984,0x984,0x984,0x984,
+0x984,0x984,0x984,0x984,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0xb31,0xb31,0x999,0x999,0x999,0x999,
+#else /* U_DARWIN */
+0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,
+0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,
0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,
-0x987,0x987,0x987,0x987,0x987,0x987,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x999,0x99f,0x9a5,
-0x9a5,0x9a5,0x987,0x987,0x987,0x9a2,0x99c,0x99c,0x99c,0x99c,0x99c,0x996,0x996,0x996,0x996,0x996,
-0x996,0x996,0x996,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x987,0x987,0x9a5,0x9a5,0x9a5,
-0x9a5,0x9a5,0x9a5,0x9a5,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,
-0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x9a5,0x9a5,0x9a5,0x9a5,0x987,0x987,
-0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x98a,0x98a,0x98a,0x98a,0x98a,
-0x993,0x98d,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,
-0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x98d,0x990,0x990,0x990,0x990,
-0x990,0x990,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,
-0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x98d,0x990,0x990,0x990,0x990,
-0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,
-0x990,0x98d,0x990,0x990,0x990,0x990,0x990,0x990,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,
-0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x98d,0x990,0x990,
-0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,
-0x990,0x990,0x990,0x990,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,
-0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x990,0x990,
-0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,
-0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x993,0x993,0x993,0x993,0x9a8,0x9a8,0x9a8,0x9a8,
-0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,
-0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9ab,0x9ab,0x9ab,0x9ab,
+0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,
+#endif /* U_DARWIN */
+0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,
+#ifndef U_DARWIN
+0x999,0x999,0x999,0x999,0x999,0x999,0xb2e,0xb2e,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,
+0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,
+0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,
+0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,
+#endif /* ! U_DARWIN */
+0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,
+#ifndef U_DARWIN
+0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9a5,0x9b1,0x9b7,
+0x9b7,0x9b7,0x9ab,0x9ab,0x9ab,0x9b4,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a2,0x9a2,0x9a2,0x9a2,0x9a2,
+0x9a2,0x9a2,0x9a2,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,
0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,
-0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ae,0x9ae,0x9ae,0x9ae,
-0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,
-0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9b1,0x9b1,0x9b1,0x9b1,
-0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,
-0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9fc,0x9fc,0x9fc,0x9fc,
-0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,
-0x9f9,0x9f9,0x9f9,0x9fc,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,
-0x9f9,0x9f9,0x9f9,0xae9,0xaec,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,
-0xce4,0xce4,0xce4,0xce4,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,
-0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,
-0xa23,0xa23,0xa23,0xa23,0xa26,0xa26,0xa26,0xa95,0xa3b,0xa9e,0xa44,0xa95,0xa3b,0xa95,0xa3b,0xa95,
-0xa3b,0xa95,0xa3b,0xa95,0xa3b,0xa95,0xa3b,0xa95,0xa3b,0xa95,0xa3b,0xa95,0xa3b,0xa26,0xa26,0xa26,
-0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,
-0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,
-0xa95,0xa3b,0xa95,0xa3b,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,
+0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ae,0x9ae,0x9b7,0x9b7,0x9b7,0x9ab,
+0x9ab,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,
+0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9b7,0x9b7,
+0x9b7,0x9b7,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ae,
+0x9ae,0x9ae,0x9ae,0x9ae,0x9c3,0x9ba,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,
+0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9ba,
+0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,
+0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9ba,
+0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,
+0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9ba,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c3,0x9c3,0x9c3,0x9c3,
+0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,
+0x9c3,0x9ba,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,
+0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,
+0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,
+0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,
+0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,
+0x9c3,0x9c3,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,
+0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,
+0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,
+0x9c3,0x9c3,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,
+0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c3,0x9c3,0x9c3,0x9c3,
+0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,
+0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,
+0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,
+0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,
+0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,
+0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,
0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,
-0xa95,0xa3b,0xa26,0xa26,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,
-0xa2f,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,
-0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,
-0xa29,0xa29,0xa29,0xa29,0xa2f,0xa2f,0xa2f,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,
-0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,
-0xa29,0xa29,0xa29,0xa29,0xa2c,0xa29,0xa29,0xa29,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,
+0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa23,0xa26,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,
+0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xb22,0xb25,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,
+0xc09,0xc09,0xc09,0xc09,0xd0e,0xd0e,0xd0e,0xd0e,0xa44,0xa41,0xa44,0xa41,0xa44,0xa41,0xa44,0xa41,
+0xa44,0xa41,0xa44,0xa41,0xa44,0xa41,0xa44,0xa41,0xd1d,0xd1a,0xd1d,0xd1a,0xe10,0xe0d,0xe10,0xe0d,
+0xe10,0xe0d,0xe10,0xe0d,0xe10,0xe0d,0xe10,0xe0d,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa98,0xa95,
+0xa98,0xa95,0xa98,0xa95,0xf27,0xf24,0xe19,0xe16,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,
+0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,
+0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,
+0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa6e,0xa71,0xa71,0xa71,0xa77,0xa74,0xa9e,0xa9b,0xa77,
+0xa74,0xa77,0xa74,0xa77,0xa74,0xa77,0xa74,0xa77,0xa74,0xa77,0xa74,0xa77,0xa74,0xa77,0xa74,0xa77,
+0xa74,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,
+0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,
+0xa71,0xa71,0xa71,0xa71,0xa77,0xa74,0xa77,0xa74,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,
+0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,
+0xa71,0xa71,0xa71,0xa71,0xa77,0xa74,0xa71,0xa71,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,
+0xa7a,0xa7a,0xa7a,0xa7a,0xa80,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,
0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,
-0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,
-#endif /* U_DARWIN */
-0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,
-#ifndef U_DARWIN
-0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,
-0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,
-0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,
+0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa80,0xa80,0xa80,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,
+0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,
+0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7d,0xa7a,0xa7a,0xa7a,0xabc,0xabc,0xabc,0xabc,
+0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,
+0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xb4f,0xb4f,0xb4f,0xb4f,
+0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,
+0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb5e,0xb5e,0xb5e,0xb5e,
+0xb5e,0xb5e,0xb55,0xb55,0xb55,0xb55,0xb55,0xb52,0xb67,0xb67,0xb67,0xb61,0xb67,0xb67,0xb67,0xb67,
+0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb61,0xb67,0xb67,0xb67,0xb67,0xb5b,0xb5b,0xb64,0xb64,
+0xb64,0xb64,0xb58,0xb58,0xb58,0xb58,0xb58,0xb5e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,
+0xc1e,0xc1e,0xc1e,0xc1e,0xc1b,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xb67,0xb67,0xb67,0xb67,
+0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb61,0xb67,0xb67,0xb67,0xb67,0xb67,
+0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb5b,0xb5b,0xb5b,0xb5e,0xb5e,0xb5e,0xb5e,
+0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,
+0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb6a,0xb6a,0xb6a,0xb6a,
+0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,
+0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xb6d,0xb6d,0xb6d,0xb6d,
+0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,
+0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb73,0xb73,0xb73,0xb73,
+0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,
+0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb82,0xb82,0xb82,0xb82,
+0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,
+0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb8e,0xb8e,0xb8e,0xb8e,
+0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,
+0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb9d,0xb9d,0xb9d,0xb9d,
+0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,
+0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xc27,0xc27,0xc27,0xc27,
+0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,
+0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc2d,0xc2d,0xc2d,0xc2d,
+0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,
+0xc2d,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2d,0xc2d,0xc2d,0xc2d,
+0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,
+0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc30,0xc30,0xc30,0xc30,
+0xc30,0xc30,0xc30,0xc30,0xc30,0xc30,0xc30,0xc30,0xc30,0xc30,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,
+0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xc3f,0xc3f,0xc3f,0xc3f,
+0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xe28,0xe28,0xe28,0xe28,0xe28,0xe25,0xe25,0xe25,0xe25,
+0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xc4e,0xc4b,0xc4e,0xc4b,
+0xc4e,0xc4b,0xc4e,0xc4b,0xc4e,0xc4b,0xc4e,0xc4b,0xc4e,0xc4b,0xc4e,0xc4b,0xc4e,0xc4b,0xc4e,0xc4b,
+0xc4e,0xc4b,0xc4e,0xc4b,0xc4e,0xc4b,0xc4e,0xc4b,0xc4e,0xc4b,0xc4e,0xc4b,0xc5a,0xc5a,0xc5a,0xc5a,
+0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,
+0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc60,0xc60,0xc60,0xc60,
+0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,
+0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc75,0xc75,0xc75,0xc75,
+0xc75,0xc75,0xc75,0xc75,0xc75,0xc75,0xc75,0xc75,0xc75,0xc75,0xc75,0xc75,0xc75,0xc75,0xc75,0xc75,
+0xc75,0xc75,0xc75,0xd29,0xd29,0xd29,0xd29,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xc81,0xc81,0xc81,0xc81,
+0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,
+0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc87,0xc87,0xc87,0xc87,
+0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,
+0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc90,0xc90,0xc90,0xc90,
+#else /* U_DARWIN */
+0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,
+0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,
+0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,
+0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,
+0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b7,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,
+0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,
+0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9ba,0x9ba,0xaef,0xaef,0x9ba,0x9ba,0x9ba,0x9ba,
+0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0xaef,0x9ba,0x9ba,0x9ba,
+0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0xb67,0xb67,
+0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,
+0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0xb64,0xb64,0xbb8,0xbb8,0xbb8,0xbb8,
+0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0x9d2,0x9d2,0x9d2,0x9d2,
+0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,
+0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d5,0x9d5,0x9d5,0x9d5,
+0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,
+0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9e4,0x9e4,0x9e4,0x9e4,
+0x9e4,0x9db,0x9e7,0x9ed,0x9ed,0x9ed,0x9e1,0x9e1,0x9e1,0x9ea,0x9de,0x9de,0x9de,0x9de,0x9de,0x9d8,
+0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9e1,0x9e1,0x9e1,0x9e1,
+0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,
+0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e4,0x9e4,
+0x9ed,0x9ed,0x9ed,0x9e1,0x9e1,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9e1,0x9e1,0x9e1,0x9e1,
+0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,
+0x9e1,0x9e1,0x9ed,0x9ed,0x9ed,0x9ed,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,
+0x9e1,0x9e1,0x9e1,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9f9,0x9f0,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,
+0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,
+0x9f6,0x9f6,0x9f6,0x9f0,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,
+0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,
+0x9f9,0x9f9,0x9f9,0x9f0,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,
+0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f0,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,
+0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,
+0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f0,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,
+0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f3,0x9f3,0x9f3,0x9f3,
+0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,
+0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f9,0x9f9,0x9f9,0x9f9,
+0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,
+0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,
+0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f9,0x9f9,0x9f9,0x9f9,
+0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,
+0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,
+0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,
+0x9f9,0x9f9,0x9f9,0x9f9,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,
+0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,
+0x9fc,0x9fc,0x9fc,0x9fc,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,
+0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,
+0x9ff,0x9ff,0x9ff,0x9ff,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,
+0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,
+0xa02,0xa02,0xa02,0xa02,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,
+0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa59,0xa5c,0xa59,0xa59,0xa59,0xa59,
+0xa59,0xa59,0xa59,0xa59,0xa59,0xa59,0xa59,0xa59,0xa59,0xa59,0xa59,0xb58,0xb5b,0xc3f,0xc3f,0xc3f,
+0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xd44,0xd44,0xd44,0xd44,0xa7a,0xa77,0xa7a,0xa77,
+0xa7a,0xa77,0xa7a,0xa77,0xa7a,0xa77,0xa7a,0xa77,0xa7a,0xa77,0xa7a,0xa77,0xd53,0xd50,0xd53,0xd50,
+0xe46,0xe43,0xe46,0xe43,0xe46,0xe43,0xe46,0xe43,0xe46,0xe43,0xe46,0xe43,0xa9e,0xa9e,0xa9e,0xa9e,
+0xa9e,0xa9e,0xace,0xacb,0xace,0xacb,0xace,0xacb,0xf5d,0xf5a,0xe4f,0xe4c,0xaa1,0xaa1,0xaa1,0xaa1,
+0xaa1,0xaa1,0xaa1,0xaa1,0xaa1,0xaa1,0xaa1,0xaa1,0xaa1,0xaa1,0xaa1,0xaa1,0xaa4,0xaa4,0xaa4,0xaa4,
+0xaa4,0xaa4,0xaa4,0xaa4,0xaa4,0xaa4,0xaa4,0xaa4,0xaa4,0xaa4,0xaa4,0xaa4,0xaa4,0xaa4,0xaa4,0xaa4,
+0xaa4,0xaa4,0xaa4,0xaa4,0xaa4,0xaa4,0xaa4,0xaa4,0xaa4,0xaa4,0xaa4,0xaa4,0xaa7,0xaa7,0xaa7,0xaad,
+0xaaa,0xad4,0xad1,0xaad,0xaaa,0xaad,0xaaa,0xaad,0xaaa,0xaad,0xaaa,0xaad,0xaaa,0xaad,0xaaa,0xaad,
+0xaaa,0xaad,0xaaa,0xaad,0xaaa,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,
+0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,
+0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaad,0xaaa,0xaad,0xaaa,0xaa7,0xaa7,0xaa7,0xaa7,
+0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,
+0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaad,0xaaa,0xaa7,0xaa7,0xab0,0xab0,0xab0,0xab0,
+0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab6,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,
+0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,
+0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab6,0xab6,0xab6,0xab0,
+0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,
+0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab3,0xab0,0xab0,0xab0,
+0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,
+0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,
+0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,
+0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,
+0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb88,0xb9d,0xb9d,0xb9d,0xb97,
+0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb97,0xb9d,0xb9d,0xb9d,0xb9d,
+0xb91,0xb91,0xb9a,0xb9a,0xb9a,0xb9a,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb94,0xc54,0xc54,0xc54,0xc54,
+0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc51,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,
+0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb97,0xb9d,
+0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb91,0xb91,0xb91,
+0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,
+0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,
+0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xc57,0xc57,
+0xc57,0xc57,0xc57,0xc57,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xe52,0xe52,0xe52,0xe52,0xe52,
+0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,
+0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,
0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,
-0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,
-0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbac,0xbac,0xbac,
-0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,
-0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,
-0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbc1,0xbbe,0xbc1,0xbbe,0xbc1,0xbbe,0xbc1,0xbbe,
-0xbc1,0xbbe,0xbc1,0xbbe,0xbc1,0xbbe,0xbc1,0xbbe,0xbc1,0xbbe,0xbc1,0xbbe,0xbc1,0xbbe,0xbc1,0xbbe,
-0xbc1,0xbbe,0xbc1,0xbbe,0xbc1,0xbbe,0xbc1,0xbbe,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,
-0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,
-0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,
+0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,
+0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,
+0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,
+0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,
+0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,
+0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,
0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,
-0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,
-#else /* U_DARWIN */
-0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb0a,0xb0a,
-0xb0a,0xb0a,0xb0a,0xb07,0xb1c,0xb1c,0xb1c,0xb16,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,
-0xb1c,0xb1c,0xb1c,0xb16,0xb1c,0xb1c,0xb1c,0xb1c,0xb10,0xb10,0xb19,0xb19,0xb19,0xb19,0xb0d,0xb0d,
-0xb0d,0xb0d,0xb0d,0xb13,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,
-0xbd6,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,
-0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb16,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,
-0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb10,0xb10,0xb10,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,
-0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,
-0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,
-0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,
-0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,
-0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,
-0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,
-0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,
-0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,
-0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,
-0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,
-0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,
-0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,
-#endif /* U_DARWIN */
-0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,
-#ifndef U_DARWIN
-0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,
-0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,
-0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe2,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,
-#else /* U_DARWIN */
-0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,
-0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe2,0xbe2,0xbe2,
-0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,
-#endif /* U_DARWIN */
-0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,
-#ifndef U_DARWIN
-0xbe5,0xbe5,0xbe5,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbf1,0xbf1,0xc48,0xbf1,0xbf1,0xbf1,0xc45,0xbf1,
-0xbf1,0xbf1,0xbf1,0xc3f,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,
-0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,
-0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,
-0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,
+0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,
+0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,
0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,
-0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,
-0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,
-0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,
-0xd32,0xd32,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,
-0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xd1a,0xd1a,0xd1a,0xd1a,0xd20,0xcd8,0xcdb,0xcd8,
-0xcdb,0xcd8,0xcdb,0xcd8,0xcdb,0xcd8,0xcdb,0xcd8,0xcd8,0xcd8,0xcdb,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,
-0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,
-0xd1d,0xd20,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd23,0xd1a,0xd23,0xd20,0xd20,0xce7,0xce7,0xce7,0xce7,
-0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,
-0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xcf0,0xcf0,0xcf0,0xcf0,
-0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,
-0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf3,0xcf3,0xcf3,0xcf3,
-0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,
-0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0x820,0x840,0x860,0,
-#else /* U_DARWIN */
-0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbf7,0xbf4,0xbf7,0xbf4,0xbf7,0xbf4,0xbf7,0xbf4,
-0xbf7,0xbf4,0xbf7,0xbf4,0xbf7,0xbf4,0xbf7,0xbf4,0xbf7,0xbf4,0xbf7,0xbf4,0xbf7,0xbf4,0xbf7,0xbf4,
-0xbf7,0xbf4,0xbf7,0xbf4,0xbf7,0xbf4,0xbf7,0xbf4,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,
-0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,
-0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,
-0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,
-0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,
-0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,
-0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,
-0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,
-0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc18,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,
-0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,
-0xc1b,0xc1b,0xc1b,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc27,0xc27,0xc7e,0xc27,0xc27,0xc27,0xc7b,0xc27,
-0xc27,0xc27,0xc27,0xc75,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,
-0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,
-0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,
-0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,
-0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,
-0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,
-0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,
-0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,
-0xd68,0xd68,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,
-0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd50,0xd50,0xd50,0xd50,0xd56,0xd0e,0xd11,0xd0e,
-0xd11,0xd0e,0xd11,0xd0e,0xd11,0xd0e,0xd11,0xd0e,0xd0e,0xd0e,0xd11,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,
-0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,
-0xd53,0xd56,0xd50,0xd50,0xd50,0xd50,0xd50,0xd59,0xd50,0xd59,0xd56,0xd56,0xd1d,0xd1d,0xd1d,0xd1d,
-0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,
-0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd26,0xd26,0xd26,0xd26,
-0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,
-0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd29,0xd29,0xd29,0xd29,
-0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,
-0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0x820,0x840,0x860,0,
+0xc63,0xc63,0xc63,0xc63,0xc63,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,
+0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,
+0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,
+0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xe58,0xe58,
+0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,
+0xc75,0xc75,0xc75,0xc75,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,
+0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,
+0xc84,0xc81,0xc84,0xc81,0xc84,0xc81,0xc84,0xc81,0xc84,0xc81,0xc84,0xc81,0xc84,0xc81,0xc84,0xc81,
+0xc84,0xc81,0xc84,0xc81,0xc84,0xc81,0xc84,0xc81,0xc84,0xc81,0xc84,0xc81,0xc84,0xc81,0xc84,0xc81,
+#endif /* U_DARWIN */
+0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,
+#ifndef U_DARWIN
+0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc8a,0xc8d,0xc8d,0xc8d,0xc8d,
+0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,
+0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc90,0xc90,0xc90,0xc90,0xc90,0xc99,0xc99,0xc99,0xc99,
+0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,
+0xc96,0xc96,0xc93,0xc9c,0xe37,0xe31,0xe40,0xe2e,0xc99,0xc99,0xe2e,0xe2e,0xcae,0xcae,0xc9f,0xcae,
+0xcae,0xcae,0xca5,0xcae,0xcae,0xcae,0xcae,0xc9f,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,
+0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcb1,0xcb1,0xcb1,0xcb1,
+0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,
+0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcc3,0xcc3,0xcc3,0xcc3,
+#else /* U_DARWIN */
+0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,
+0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,
+0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,
+0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,
+0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xd5f,0xd5f,0xd5f,0xd5f,0xe61,0xe61,0xe61,0xe61,0xe61,
+0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,
+0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,
+0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,
+0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,
+0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,
+0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xcc0,
#endif /* U_DARWIN */
+0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,
+#ifndef U_DARWIN
+0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc6,0xcc6,0xcc6,0xcc6,
+0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xf30,0xf30,0xf30,0xf30,
+0xf30,0xf30,0xf30,0xf30,0xf30,0xf30,0xf30,0xf30,0xf30,0xf30,0xf30,0xf30,0xd23,0xd23,0xd23,0xd23,
+0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1f,0xe1f,0xe1f,0xe1f,
+0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xd35,0xd35,0xd35,0xd35,
+0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,
+0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd44,0xd44,0xd44,0xd44,
+0xd56,0xd5f,0xd62,0xd5f,0xd62,0xd5f,0xd62,0xd5f,0xd62,0xd5f,0xd62,0xd5f,0xd5f,0xd5f,0xd62,0xd5f,
+0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
+0xd5f,0xd5f,0xd5f,0xd5f,0xd47,0xd56,0xd44,0xd44,0xd44,0xd44,0xd44,0xd59,0xd44,0xd59,0xd56,0xd56,
+0xd6e,0xd6e,0xe64,0xe5b,0xe64,0xe5b,0xe64,0xe5b,0xe64,0xe5b,0xe64,0xe5b,0xe64,0xe5b,0xe64,0xe5b,
+0xe5b,0xe5b,0xe64,0xe5b,0xe64,0xe5b,0xe64,0xe5b,0xe64,0xe5b,0xe64,0xe5b,0xe64,0xe5b,0xe64,0xe5b,
+0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,
+0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,
+0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,
+0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,
+0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,
+0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,
+0xdd4,0xdec,0xde6,0xde3,0xde3,0xdec,0xdec,0xde6,0xde6,0xde3,0xde3,0xde3,0xde3,0xde3,0xdec,0xdec,
+0xdec,0xdd4,0xdd4,0xdd4,0xdd4,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,
+0xe64,0xe5b,0xe64,0xe5b,0xe64,0xe5b,0xe64,0xe5b,0xe64,0xe5b,0xe64,0xe5b,0xe64,0xe5b,0xe64,0xe5b,
+0xe64,0xe5b,0xe64,0xe5b,0xe64,0xe5b,0xe64,0xe5b,0xe64,0xe5b,0xe64,0xe5b,0xe64,0xe5b,0xe64,0xe5b,
+0xe5e,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe64,0xe5b,0xe64,0xe5b,0xe64,0xe64,0xe5b,
+0xe67,0xe67,0xe6d,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,
+0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,
+0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,
+0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,
+0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,
+0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe94,0xe94,0xe94,0xe97,0xe94,0xe94,0xe9a,0xe9a,
+0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,
+0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,
+0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea9,0xea0,0xeaf,0xeac,
+0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,
+0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,
+0xec1,0xebb,0xec1,0xebb,0xec1,0xebb,0xec1,0xebb,0xec1,0xebb,0xec1,0xebb,0xec1,0xebb,0xec1,0xebb,
+0xec1,0xebb,0xec1,0xebb,0xec1,0xebb,0xec1,0xebb,0xec1,0xebb,0xec1,0xebb,0xec1,0xebb,0xec1,0xebb,
+0xecd,0xecd,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,
+0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,
+0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0xee2,0xee2,0xee2,0xee2,
+0xee2,0xee2,0xed6,0xed6,0xed6,0xed6,0xed6,0xed9,0xed9,0xed9,0xedc,0xee5,0xef4,0xef4,0xef4,0xef4,
+0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xedf,0xedf,0xedf,0xedf,
+0xedf,0xedf,0xedf,0xedf,0xedf,0xedf,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,
+0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xf03,0xf03,0xf03,0xf03,
+0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,
+0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf15,0xf15,0xf15,0xf15,
+0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,
+0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,0xf1e,0xf1e,0xf1e,0xf1e,
+0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,
+0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf21,0xf21,0xf21,0xf21,
+0xf21,0xf21,0xf21,0xf21,0xf21,0xf21,0xf21,0xf21,0xf21,0xf21,0xf21,0xf21,0xf21,0xf21,0xf21,0xf21,
+0xf21,0xf21,0xf21,0xf21,0xf21,0xf21,0xf21,0xf21,0xf21,0xf21,0xf21,0xf21,0x820,0x840,0x860,0,
0,0,0,0,0x880,0x8a0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0x8c0,0x8e0,0,0,
-0,0,0,0,0,0,0,0x900,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920,
-0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920,
-0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x940,0x960,0x960,0x960,0x960,0x960,0x960,
-0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x980,0x9a0,
-0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,
-0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,
-0x960,0x960,0x960,0x9a0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x900,0,0,0x920,0x940,0x940,0x940,0x940,0x940,0x940,0x940,0x940,
+#else /* U_DARWIN */
+0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,
+0xccf,0xccf,0xccf,0xccf,0xccf,0xccf,0xccf,0xccf,0xccf,0xccf,0xccf,0xccf,0xccf,0xccf,0xccc,0xccc,
+0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xcc9,0xcd2,0xe6d,0xe67,0xe76,0xe64,0xccf,0xccf,0xe64,0xe64,
+0xce4,0xce4,0xcd5,0xce4,0xce4,0xce4,0xcdb,0xce4,0xce4,0xce4,0xce4,0xcd5,0xce4,0xce4,0xce4,0xce4,
+0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,
+0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,
+0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,
+0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,
+0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,
+0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,
+0xf66,0xf66,0xf66,0xf66,0xf66,0xf66,0xf66,0xf66,0xf66,0xf66,0xf66,0xf66,0xf66,0xf66,0xf66,0xf66,
+0xd59,0xd59,0xd59,0xd59,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,
+0xe55,0xe55,0xe55,0xe55,0xe55,0xe55,0xe55,0xe55,0xe55,0xe55,0xe55,0xe55,0xe55,0xe55,0xe55,0xe55,
+0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,
+0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,
+0xd7a,0xd7a,0xd7a,0xd7a,0xd8c,0xd95,0xd98,0xd95,0xd98,0xd95,0xd98,0xd95,0xd98,0xd95,0xd98,0xd95,
+0xd95,0xd95,0xd98,0xd95,0xd95,0xd95,0xd95,0xd95,0xd95,0xd95,0xd95,0xd95,0xd95,0xd95,0xd95,0xd95,
+0xd95,0xd95,0xd95,0xd95,0xd95,0xd95,0xd95,0xd95,0xd7d,0xd8c,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd8f,
+0xd7a,0xd8f,0xd8c,0xd8c,0xda4,0xda4,0xe9a,0xe91,0xe9a,0xe91,0xe9a,0xe91,0xe9a,0xe91,0xe9a,0xe91,
+0xe9a,0xe91,0xe9a,0xe91,0xe91,0xe91,0xe9a,0xe91,0xe9a,0xe91,0xe9a,0xe91,0xe9a,0xe91,0xe9a,0xe91,
+0xe9a,0xe91,0xe9a,0xe91,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,
+0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,
+0xdaa,0xdaa,0xdaa,0xdaa,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,
+0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,
+0xdb9,0xdb9,0xdb9,0xdb9,0xdbf,0xdbf,0xdbf,0xdbf,0xdbf,0xdbf,0xdbf,0xdbf,0xdbf,0xdbf,0xdbf,0xdbf,
+0xdbf,0xdbf,0xdbf,0xdbf,0xdbf,0xdbf,0xdbf,0xdbf,0xdbf,0xdbf,0xdbf,0xdbf,0xdbf,0xdbf,0xdbf,0xdbf,
+0xdbf,0xdbf,0xdbf,0xdbf,0xe0a,0xe22,0xe1c,0xe19,0xe19,0xe22,0xe22,0xe1c,0xe1c,0xe19,0xe19,0xe19,
+0xe19,0xe19,0xe22,0xe22,0xe22,0xe0a,0xe0a,0xe0a,0xe0a,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,
+0xe22,0xe22,0xe22,0xe22,0xe9a,0xe91,0xe9a,0xe91,0xe9a,0xe91,0xe9a,0xe91,0xe9a,0xe91,0xe9a,0xe91,
+0xe9a,0xe91,0xe9a,0xe91,0xe9a,0xe91,0xe9a,0xe91,0xe9a,0xe91,0xe9a,0xe91,0xe9a,0xe91,0xe9a,0xe91,
+0xe9a,0xe91,0xe9a,0xe91,0xe94,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe9a,0xe91,0xe9a,
+0xe91,0xe9a,0xe9a,0xe91,0xe9d,0xe9d,0xea3,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,
+0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,
+0xea9,0xea9,0xea9,0xea9,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,
+0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,
+0xebe,0xebe,0xebe,0xebe,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,
+0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xeca,0xeca,0xeca,0xecd,
+0xeca,0xeca,0xed0,0xed0,0xed3,0xed3,0xed3,0xed3,0xed3,0xed3,0xed3,0xed3,0xed3,0xed3,0xed3,0xed3,
+0xed3,0xed3,0xed3,0xed3,0xed3,0xed3,0xed3,0xed3,0xed3,0xed3,0xed3,0xed3,0xed3,0xed3,0xed3,0xed3,
+0xed3,0xed3,0xed3,0xed3,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,
+0xedf,0xed6,0xee5,0xee2,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,
+0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,
+0xedc,0xedc,0xedc,0xedc,0xef7,0xef1,0xef7,0xef1,0xef7,0xef1,0xef7,0xef1,0xef7,0xef1,0xef7,0xef1,
+0xef7,0xef1,0xef7,0xef1,0xef7,0xef1,0xef7,0xef1,0xef7,0xef1,0xef7,0xef1,0xef7,0xef1,0xef7,0xef1,
+0xef7,0xef1,0xef7,0xef1,0xf03,0xf03,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,
+0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,
+0xf06,0xf06,0xf06,0xf06,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,
+0xf18,0xf18,0xf18,0xf18,0xf18,0xf18,0xf0c,0xf0c,0xf0c,0xf0c,0xf0c,0xf0f,0xf0f,0xf0f,0xf12,0xf1b,
+0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,
+0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,0xf18,0xf18,0xf18,0xf18,0xf18,0xf18,
+0xf18,0xf18,0xf18,0xf18,0xf18,0xf18,0xf18,0xf18,0xf18,0xf18,0xf18,0xf18,0xf18,0xf18,0xf18,0xf18,
+0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,
+0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,
+0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,
+0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,
+0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,
+0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,
+0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,
+0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,0xf57,
+0x820,0x840,0x860,0,0,0,0,0,0x880,0x8a0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0x900,0x9c0,0x9e0,0x9e0,0x9e0,0,0,0,0,0,0,0,0,
+0x8c0,0x8e0,0,0,0,0,0,0,0x900,0,0,0x920,0x940,0x940,0x940,0x940,
+#endif /* U_DARWIN */
+0x940,0x940,0x940,0x940,0x940,0x940,0x940,0x940,0x940,0x940,0x940,0x940,0x940,0x940,0x940,0x940,
+#ifndef U_DARWIN
+0x940,0x940,0x940,0x940,0x940,0x940,0x940,0x940,0x940,0x960,0x980,0x980,0x980,0x980,0x980,0x980,
+0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x9a0,0x9c0,
+#else /* U_DARWIN */
+0x940,0x940,0x940,0x940,0x940,0x940,0x940,0x940,0x940,0x940,0x940,0x940,0x940,0x960,0x980,0x980,
+#endif /* U_DARWIN */
+0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x980,
+#ifdef U_DARWIN
+0x980,0x980,0x9a0,0x9c0,0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x980,
+#endif /* U_DARWIN */
+0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x980,
+#ifndef U_DARWIN
+0x980,0x980,0x980,0x9c0,0,0,0,0,0,0,0,0,0,0,0,0,
+#else /* U_DARWIN */
+0x980,0x980,0x980,0x980,0x980,0x980,0x980,0x9c0,0,0,0,0,0,0,0,0,
+#endif /* U_DARWIN */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,
-0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,
-0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa20,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa60
+#ifndef U_DARWIN
+0,0,0,0x920,0x9e0,0xa00,0xa00,0xa00,0,0,0,0,0,0,0,0,
+#else /* U_DARWIN */
+0,0,0,0,0,0,0,0x920,0x9e0,0xa00,0xa00,0xa00,0,0,0,0,
+#endif /* U_DARWIN */
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+#ifndef U_DARWIN
+0,0,0,0,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,
+#else /* U_DARWIN */
+0,0,0,0,0,0,0,0,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,
+#endif /* U_DARWIN */
+0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,
+#ifndef U_DARWIN
+0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa40,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,
+#else /* U_DARWIN */
+0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa40,0xa60,0xa60,0xa60,0xa60,
+#endif /* U_DARWIN */
+0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,
+#ifndef U_DARWIN
+0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa80
+#else /* U_DARWIN */
+0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa60,0xa80
+#endif /* U_DARWIN */
};
static const UTrie propsVectorsTrie={
propsVectorsTrie_index,
NULL,
utrie_defaultGetFoldingOffset,
- 2688,
+ 2720,
#ifndef U_DARWIN
- 14236,
+ 15596,
#else /* U_DARWIN */
- 14444,
+ 15776,
#endif /* U_DARWIN */
0,
TRUE
};
#ifndef U_DARWIN
-static const uint32_t propsVectors[3384]={
-#else /* U_DARWIN */
-static const uint32_t propsVectors[3438]={
-#endif /* U_DARWIN */
-0x67,0,0,0x67,0x800000,0,0x467,0,0,0x4e7,0,0,0x567,0,0,0x5e7,
-0,0,0x667,0,0,0x6e7,0,0,0x767,0,0,0x7e7,0,0,0x867,0,
-0,0x8e7,0,0,0x967,0,0,0x9e7,0,0,0xa67,0,0,0xae7,0,0,
-0xb67,0,0,0xbe7,0,0,0xc67,0,0,0xce7,0,0,0xd67,0,0,0xde7,
-0,0,0xe67,0,0,0xee7,0,0,0xf67,0,0,0xfe7,0,0,0x1067,0,
-0,0x10e7,0,0,0x1167,0,0,0x11e7,0,0,0x1267,0,0,0x12e7,0,0,
-0x1367,0,0,0x13e7,0,0,0x1467,0x800000,0,0x14e7,0,0,0x1567,0,0,0x15e7,
-0,0,0x1667,0,0,0x16e7,0,0,0x1867,0,0x4000000,0x18e7,0,0x4000000,0x1967,0,
-0x4000000,0x1be7,0,0x4000000,0x1c67,0,0x4000000,0x1d67,0,0,0x1de7,0,0,0x1e67,0,0,
-0x1f67,0,0,0x2067,0,0,0x20e7,0,0,0x21e7,0,0,0x2267,0,0,0x2367,
-0,0,0x23e7,0,0,0x2467,0,0,0x24e7,0,0,0x2567,0,0,0x27e7,0,
-0,0x2867,0,0,0x28e7,0,0,0x2967,0,0,0x2a67,0,0,0x2ae7,0,0,
-0x2b67,0x800000,0,0x2be7,0,0,0x2c67,0,0,0x2ce7,0,0,0x2de7,0,0,0x2e67,
-0,0,0x2ee7,0,0,0x3067,0x800000,0,0x30e7,0,0,0x3167,0,0,0x31e7,0,
-0,0x3267,0,0,0x32e7,0,0,0x3367,0,0x4000000,0x37e7,0,0,0x3867,0,0,
-0x39e7,0,0x4000000,0x3ae7,0,0,0x3b67,0,0,0x3be7,0,0,0x3c67,0,0,0x3d67,
-0,0,0x3de7,0,0,0x3e67,0,0,0x3f67,0,0,0x3fe7,0,0,0x4067,0,
-0,0x40e7,0,0,0x4167,0,0,0x41e7,0,0,0x4267,0,0,0x42e7,0,0,
-0x4367,0,0,0x43e7,0,0,0x4467,0,0,0x44e7,0,0,0x4567,0,0,0x45e7,
-0,0,0x4667,0,0,0x4767,0,0x4000000,0x47e7,0,0,0x4867,0,0,0x48e7,0,
-0,0x4967,0,0,0x49e7,0,0,0x4a67,0,0,0x4ae7,0,0,0x4b67,0,0,
-0x4be7,0,0,0x4c67,0,0,0x4ce7,0,0,0x4d67,0,0,0x28067,0,0,0x2af67,
-0,0,0x2afe7,0,0,0x11002b67,0x810000,0,0x1100a767,0,0,0x11041680,0x80000000,6,0x11041980,0x80000000,
-3,0x11041a00,0x80000000,0x4000000,0x11041c00,0x80000000,0,0x11048100,0x80000000,6,0x11048100,0x80000000,0xf,0x11048100,0x80000000,0x4000000,
-0x11048100,0x80000080,0x4000000,0x11048100,0x80001000,2,0x11048100,0x90003000,0x1000,0x11048119,0xf8000400,0x1040f,0x11048300,0x80001000,2,0x11048300,
-0xf8001400,0x18400,0x11048300,0xf8003400,0x18400,0x11049400,0x80000000,0x4000000,0x11049400,0x80000008,0x4000000,0x11049400,0x80000080,0x4000000,0x11049480,0x80000000,
-0xe,0x11049480,0x80000000,0xf,0x11049499,0xf8000400,0x1040f,0x11049600,0x80000000,2,0x11049600,0x80000000,0xf,0x11049600,0xf8000480,0x10405,
-0x11049619,0xf8000400,0x28401,0x11049680,0x80000000,6,0x11049680,0xf8000400,0x10402,0x11049680,0xf8000400,0x28402,0x11049700,0x80000000,0x4000000,0x11049700,
-0x80000080,0x4000000,0x11049780,0x80000080,0x4000000,0x11049780,0x80000080,0x4000001,0x11049780,0x80000080,0x4000002,0x11049800,0x80000000,0x4000000,0x11049980,0x80000000,
-2,0x11049980,0x80000000,3,0x11049980,0x80000400,0x10403,0x11049980,0x80000400,0x28403,0x11049a00,0x80000000,0x4000000,0x11049a80,0x80000000,0x4000000,
-0x11049b00,0x80000000,0x4000000,0x11049b00,0x80000080,0x4000000,0x11049b80,0x80000000,0x4000000,0x11049b80,0x80000080,0x4000000,0x11049c00,0x80000000,0,0x1104ab00,
-#ifndef U_DARWIN
-0x80000000,0,0x11080100,0x80000000,0x4000000,0x11080100,0xf8000400,0x10402,0x11080119,0xf8000400,0x10401,0x11080119,0xf8000400,0x28401,0x11080199,0xf8000400,
-0x10401,0x11080199,0xf8000400,0x10402,0x11080199,0xf8000400,0x28400,0x11080199,0xf8000400,0x28401,0x11080219,0xf8000400,0x10400,0x11080219,0xf8000400,0x10401,
-0x11080219,0xf8000400,0x10402,0x11080219,0xf8000400,0x18400,0x11080219,0xf8000400,0x28400,0x11080219,0xf8000400,0x28401,0x11080219,0xf8000400,0x28402,0x11080299,
-0xf8000400,0x10400,0x11080299,0xf8000400,0x18400,0x11080300,0x80001000,0,0x11080300,0x80001000,2,0x11080300,0xf8001400,0x10400,0x11080300,0xf8001400,
-0x18400,0x11080300,0xf8003400,0x18400,0x11080319,0xf8001400,0x1040f,0x11080400,0x80000040,1,0x11080407,0xf8000400,0x10400,0x11080407,0xf8000400,0x28400,
-0x1108040e,0x80001000,0,0x1108040e,0x80001000,1,0x1108040e,0x80001000,2,0x1108040e,0xe0001400,0x10402,0x1108040e,0xf8000400,0x10400,0x1108040e,
-0xf8000400,0x10401,0x1108040e,0xf8000400,0x10402,0x1108040e,0xf8000400,0x28400,0x1108040e,0xf8000400,0x28401,0x1108040e,0xf8000480,0x10402,0x1108040e,0xf8000480,
-0x28402,0x11080488,0x80000000,0,0x11080488,0xf8000400,0x10400,0x11080488,0xf8000400,0x10401,0x11080488,0xf8000400,0x28400,0x11080488,0xf8000400,0x28401,
-0x11080503,0x80000000,0,0x11080503,0x80000000,0x1024000,0x11080503,0xf8000400,0x10400,0x11080503,0xf8000400,0x10402,0x11080503,0xf8000400,0x28400,0x11080503,
-0xf8001400,0x18400,0x11080593,0x80000000,0,0x11080593,0x80000000,0x1000,0x11080593,0x80000000,0x18400,0x11080593,0x80000040,0,0x11080593,0xf8000400,
-0x18400,0x11080600,0x800000,0xc820,0x11080600,0xf8002400,0x18400,0x11080602,0x80000000,0,0x11080602,0xf8000400,0x18400,0x11080602,0xf8000400,0x18401,
-0x11080602,0xf8000400,0x18402,0x11080602,0xf8001400,0x18400,0x11080780,0x80000000,0,0x1108078a,0xf8000400,0x18400,0x1108078a,0xf8000400,0x18401,0x11080804,
-0x80000000,0,0x11080804,0xf8000400,0x18400,0x11080804,0xf8000400,0x18401,0x11080890,0xf8000400,0x18400,0x11080890,0xf8000400,0x18401,0x1108090f,0xf8000400,
-0x18400,0x1108099f,0x80000000,0,0x1108099f,0xf8000400,0x18400,0x1108099f,0xf8000400,0x18401,0x11080a23,0x80000000,0,0x11080a23,0xf8000400,0x18400,
-0x11080a23,0xf8000400,0x18401,0x11080aa4,0xf8000400,0x18400,0x11080b15,0xf8000400,0x18400,0x11080b9a,0xf8000400,0x18400,0x11080ca6,0x80000000,0,0x11080e80,
-0x80000000,0,0x11080e8c,0xf8000400,0x18400,0x11080e8c,0xf8000400,0x28400,0x11081319,0xf8000400,0x10401,0x11081319,0xf8000400,0x10402,0x11081319,0xf8000400,
-0x28401,0x1108138e,0x80001000,1,0x1108138e,0x80001000,2,0x1108138e,0xf8000400,0x10401,0x1108138e,0xf8000400,0x28401,0x11081400,0x80000000,0x4000000,
-0x11081400,0x80000000,0x4000002,0x11081400,0xd0000000,0x1c00,0x11081400,0xd0000080,0x1c00,0x11081480,0x80000000,0xe,0x11081480,0x80000000,0xf,0x11081480,
-0x80000080,0xe,0x11081480,0x80000080,0xf,0x11081480,0x80000088,0xe,0x11081480,0x80000088,0xf,0x11081600,0x80000000,0,0x11081600,0x80000000,
-2,0x11081600,0x80000000,0xf,0x11081600,0x80000080,0,0x11081600,0xf8000000,0,0x11081600,0xf8000400,0x28402,0x11081600,0xf8000480,0x10405,
-0x11081600,0xf8000480,0x18402,0x11081600,0xf8000480,0x28405,0x11081619,0xf8000400,0x28400,0x11081619,0xf8000400,0x28401,0x11081680,0x80000000,6,0x11081680,
-0xf8000400,0x10402,0x11081680,0xf8000400,0x18400,0x11081680,0xf8000400,0x28402,0x11081700,0x80000000,0x4000000,0x11081700,0x80000000,0x4000001,0x11081700,0x80000080,
-0x4000000,0x11081700,0x80000080,0x4000001,0x11081780,0x80000080,0x4000000,0x11081780,0x80000080,0x4000001,0x11081780,0x80000080,0x4000002,0x11081800,0x80000000,0x4000000,
-0x11081800,0x80000080,0x4000000,0x11081880,0x80000000,0x4000000,0x11081900,0x80000000,0x4000000,0x11081a00,0x80000000,0x4000000,0x11081a80,0x80000000,0x4000000,0x11081b00,
-0x80000000,0x4000000,0x11081b80,0x80000000,0x4000000,0x11081c00,0x80000000,0x4000000,0x11082803,0xf8000400,0x10402,0x11082813,0x80000080,5,0x11082813,0xf8000400,
-0x18401,0x11082813,0xf8000400,0x18402,0x11082813,0xf8000400,0x18405,0x11082819,0xf8000400,0x10402,0x11082882,0xe0000400,0x18408,0x11082882,0xf8000400,0x18404,
-0x11082882,0xf8000400,0x18407,0x11082882,0xf8000400,0x18408,0x11082882,0xf8000400,0x18409,0x11082a82,0xe0000400,0x18408,0x11082a82,0xf8000400,0x18404,0x11082a82,
-0xf8000400,0x18407,0x11082a82,0xf8000400,0x18408,0x11082a82,0xf8000400,0x18409,0x11088100,0x80000000,0x4000000,0x11088119,0xf8000400,0x10400,0x11088119,0xf8000400,
-0x10401,0x11088119,0xf8000400,0x28400,0x11088199,0xf8000400,0x10400,0x11088199,0xf8000400,0x10401,0x11088199,0xf8000400,0x10402,0x11088199,0xf8000400,0x28400,
-0x11088199,0xf8000400,0x28402,0x11088219,0xf8000400,0x10401,0x11088299,0xf8000400,0x10400,0x11088300,0x80001000,0,0x1108840e,0xf8000400,0x10400,0x1108840e,
-0xf8000400,0x28400,0x11088488,0xf8000400,0x10400,0x11088488,0xf8000400,0x10401,0x11088488,0xf8000400,0x28400,0x11088488,0xf8000400,0x28401,0x11089400,0x80000000,
-0x4000000,0x11089400,0x80000000,0x4000002,0x1108960e,0xf8000400,0x28401,0x11089680,0x80000000,6,0x11089700,0x80000000,0x4000000,0x11089c00,0x80000000,0x4000000,
-0x11092b80,0x80000000,0xa,0x11092b80,0x80000080,0xa,0x11092b92,0xf8000400,0x1840a,0x11092b92,0xf8800400,0x1840a,0x11092b96,0xf8000400,0x18c0a,0x110a0080,
-0x80000000,0x4000000,0x110a0080,0x80000080,0x4000000,0x110a0080,0x80001000,0x4000000,0x110a0080,0x80001080,0x4000000,0x110a0080,0xd0000000,0x1c00,0x110a0099,0xf8000400,
-0x10400,0x110a0099,0xf8000400,0x28400,0x110a0099,0xf8000700,0x10400,0x110a0099,0xf8000700,0x28400,0x110a0100,0x80000000,0x4000000,0x110a0100,0x80000080,0x4000000,
-0x110a0100,0x80001000,2,0x110c9400,0x80000008,0x4000000,0x11100080,1,0x8020020,0x11100593,0x80000008,0,0x11100780,0x80000040,0x1024000,0x11100ca6,
-0x80000040,0,0x11101400,0x80000001,0x20001,0x11101400,0x80000001,0x20002,0x11101400,0x80000008,0x4000000,0x11108100,0x800010,0xc820,0x11109400,0x80000000,
-0x4001000,0x11109400,0x80000008,0x4000000,0x11109400,0x80000018,0x4000000,0x11120080,0x80000080,0x4000000,0x11140300,0xf8001400,0x18400,0x11148100,0x80001000,2,
-0x11180080,1,0x8020020,0x11181400,1,0x801c020,0x11201400,0x80000000,0x4008000,0x11201480,0x80000080,0x800e,0x11201480,0x80000080,0x800f,0x11202880,
-0x80000000,0x4008000,0x11212b80,0x80000020,0x800a,0x11212b80,0x80000040,0xa,0x11212b80,0x80000040,0x102400a,0x1121ab80,0x80000000,0x8011,0x1121ab80,0x80000040,
-0x11,0x1121ab80,0x80000040,0x1024011,0x11220080,0x80000000,0x4008000,0x11229800,0x80000000,0x4008001,0x11229e80,0x80000000,0x4008000,0x11229e80,0x80000020,0x4008000,
-0x11229e80,0x80000040,0x4000000,0x11229e80,0x80000040,0x5024000,0x1122a980,0x80000000,0x8010,0x1122a980,0x80000020,0x8010,0x1122aa00,0x80000000,0x800c,0x1122aa00,
-0x80000040,0xc,0x1122aa00,0x80000040,0x102400c,0x11240080,0x800000,0x20,0x11240100,0x800000,0x20,0x11240488,0x50021000,0x60,0x11240593,0x50021400,
-0x60,0x11240601,0x50020400,0x60,0x11240601,0x50021400,0x60,0x11240602,0x20000,0x60,0x11240602,0x50020400,0x60,0x11240602,0x50021000,0x60,
-0x1124078a,0x50020400,0x60,0x1124078a,0x50021000,0x60,0x1124078a,0x50061000,0x60,0x1124078a,0xd0000400,0x18400,0x11240804,0x50020400,0x60,0x11240804,
-0x50021000,0x60,0x11240804,0x50061000,0x60,0x11240804,0xd0000400,0x18400,0x11240804,0xd0000400,0x18401,0x11240890,0x50020400,0x60,0x11240890,0x50021000,
-0x60,0x11240890,0x50061000,0x60,0x11240890,0xd0000400,0x18400,0x1124090f,0x50020400,0x60,0x1124090f,0x50021000,0x60,0x1124090f,0x50061000,0x60,
-0x1124090f,0xd0000400,0x18400,0x1124099f,0x50020400,0x60,0x1124099f,0x50021000,0x60,0x1124099f,0x50061000,0x60,0x1124099f,0xd0000400,0x18400,0x1124099f,
-0xd0000400,0x18401,0x11240a23,0x50020400,0x60,0x11240a23,0x50061000,0x60,0x11240a23,0xd0000400,0x18400,0x11240a23,0xd0000400,0x18401,0x11240aa4,0x50020400,
-0x60,0x11240aa4,0x50020400,0x61,0x11240aa4,0x50061000,0x60,0x11240aa4,0xd0000400,0x18400,0x11240b15,0x50020400,0x60,0x11240b15,0x50061000,0x60,
-0x11240b15,0xd0000400,0x18400,0x11240b15,0xd0000400,0x18401,0x11240b9a,0x50020400,0x60,0x11240b9a,0x50061000,0x60,0x11240b9a,0xd0000400,0x18400,0x11240b9a,
-0xd0000400,0x18401,0x11241400,0x800000,0xc820,0x11241400,0x800000,0x800c820,0x11241400,0x1800000,0xc820,0x11241401,0x820000,0x60,0x11241581,0x20000,
-0x60,0x11241581,0x50020080,0x60,0x11242813,0x50021400,0x60,0x11242901,0x50021000,0x60,0x11248381,0x50021000,0x60,0x11248381,0x50021000,0x61,
-0x11248381,0x50021400,0x60,0x11248381,0x51021000,0x61,0x11269e81,0x50021000,0x60,0x11269f01,0x50021000,0x60,0x11280080,1,0x801c040,0x112c0600,
-0x80000040,0,0x112c0600,0x80000040,0x1024000,0x112c0602,0x80000000,0,0x112c0602,0x80000040,0x1024000,0x112c1c00,0x80000000,0x4000000,0x112dab80,0x80000040,
-0x1024011,0x112e0080,0x80000040,0x5024000,0x112eaa00,0x80000040,0x102400c,0x11300100,0x80000001,0x1800b,0x11301400,0x80000001,0x2000b,0x11301400,0x80000018,0x400000b,
-0x11308381,0x50021000,0x60,0x11360080,0x80000018,0x4000000,0x11381e80,0x80000000,0,0x11399e80,0x80000001,0x20011,0x1139ab80,0x80000000,0x11,0x1139ab80,
-0x80000018,0x11,0x1139ab80,0x80000020,0x11,0x1139ab80,0x80000080,0x11,0x1139ab80,0x80001000,0x11,0x1139ab80,0x80001080,0x11,0x1139ab80,0xd0000000,
-0x1c11,0x1139ab80,0xd0000100,0x11,0x1139ab99,0xf8000400,0x10411,0x1139ab99,0xf8000400,0x28411,0x1139ab99,0xf8000500,0x10411,0x1139ab99,0xf8000500,0x28411,
-0x113a9e80,0x80000000,0,0x113a9e80,0x80000000,2,0x113a9e80,0x80000000,0x4000000,0x113a9e80,0x80000008,0x4000000,0x113a9e80,0xf8000c00,0x18000,0x113a9e80,
-0xf8002400,0x18c00,0x113a9e91,0xf8000c00,0x18000,0x113a9f14,0xf8000400,0x18000,0x113a9f14,0xf8000400,0x18001,0x113a9f96,0xf8000400,0x18c00,0x113a9f96,0xf8000400,
-0x18c01,0x113aa005,0xf8000400,0x18400,0x113aa092,0xf8000400,0x18402,0x113aa092,0xf8800400,0x18402,0x113aa100,0x80000000,0,0x113aa100,0x80000000,0xf,
-0x113aa200,0x80000000,0,0x113aa200,0x80000000,2,0x113aa200,0x80000000,3,0x113aa212,0x80000000,2,0x113aa212,0x80000000,3,0x113aa280,
-0x80000000,2,0x113aa280,0x80000000,0xd,0x113aa391,0xf8400c00,0x18000,0x113aa791,0xf8000c00,0x18001,0x113aa791,0xf8400c00,0x18000,0x113aa980,0x80000000,
-2,0x113aa980,0x80000000,0x10,0x113aa980,0x80000008,0x10,0x113aa980,0xd0000000,0x1c02,0x113aa980,0xd0000000,0x1c10,0x113aaa00,0x80000000,0xc,
-0x113aaa00,0x80000008,0xc,0x113aaa00,0x80000040,0xc,0x113aaa00,0x80000080,0xc,0x113aaa00,0x80000098,0xc,0x113c9400,0x80000000,0x4000002,0x11400400,
-0x80000040,0x1401,0x11400500,0x80000040,0x1025400,0x11401400,0x80000080,0x4001400,0x11420080,0x80000040,0x4001000,0x11420080,0x80000040,0x4001400,0x11420080,0x80000040,
-0x5005400,0x11440080,1,0x801c0a0,0x11481400,0x80000040,0x5024000,0x11481400,0x80000040,0x5024002,0x11492b80,0x80000010,0xa,0x11492b80,0xf0001400,0x18c0a,
-0x11492b80,0xf8003400,0x18c0a,0x11492b96,0xf8000400,0x18c0a,0x1149ab80,0x80000040,0x11,0x114a9e80,0x80000008,0x4000000,0x114a9e91,0xf8002400,0x18400,0x114a9f00,
-0xe0001000,0xc02,0x114a9f14,0xf8000400,0x18000,0x114a9f14,0xf8002400,0x18000,0x114a9f14,0xf8002400,0x18001,0x114a9f80,0x80000010,0,0x114a9f80,0xf8003400,
-0x18c00,0x114a9f96,0xf8000400,0x18c00,0x114a9f96,0xf8002400,0x18c00,0x114a9f96,0xf8002400,0x18c01,0x114aaa00,0x80000040,0xc,0x114c0600,0xd0000000,0x15800,
-#else /* U_DARWIN */
-0x80000000,0,0x1106a700,0x80000000,0,0x11080100,0x80000000,0x4000000,0x11080100,0xf8000400,0x10402,0x11080119,0xf8000400,0x10401,0x11080119,0xf8000400,
-0x28401,0x11080199,0xf8000400,0x10401,0x11080199,0xf8000400,0x10402,0x11080199,0xf8000400,0x28400,0x11080199,0xf8000400,0x28401,0x11080219,0xf8000400,0x10400,
-0x11080219,0xf8000400,0x10401,0x11080219,0xf8000400,0x10402,0x11080219,0xf8000400,0x18400,0x11080219,0xf8000400,0x28400,0x11080219,0xf8000400,0x28401,0x11080219,
-0xf8000400,0x28402,0x11080299,0xf8000400,0x10400,0x11080299,0xf8000400,0x18400,0x11080300,0x80001000,0,0x11080300,0x80001000,2,0x11080300,0xf8001400,
-0x10400,0x11080300,0xf8001400,0x18400,0x11080300,0xf8003400,0x18400,0x11080319,0xf8001400,0x1040f,0x11080400,0x80000040,1,0x11080407,0xf8000400,0x10400,
-0x11080407,0xf8000400,0x28400,0x1108040e,0x80001000,0,0x1108040e,0x80001000,1,0x1108040e,0x80001000,2,0x1108040e,0xe0001400,0x10402,0x1108040e,
-0xf8000400,0x10400,0x1108040e,0xf8000400,0x10401,0x1108040e,0xf8000400,0x10402,0x1108040e,0xf8000400,0x28400,0x1108040e,0xf8000400,0x28401,0x1108040e,0xf8000480,
-0x10402,0x1108040e,0xf8000480,0x28402,0x11080488,0x80000000,0,0x11080488,0xf8000400,0x10400,0x11080488,0xf8000400,0x10401,0x11080488,0xf8000400,0x28400,
-0x11080488,0xf8000400,0x28401,0x11080503,0x80000000,0,0x11080503,0x80000000,0x1024000,0x11080503,0xf8000400,0x10400,0x11080503,0xf8000400,0x10402,0x11080503,
-0xf8000400,0x28400,0x11080503,0xf8001400,0x18400,0x11080593,0x80000000,0,0x11080593,0x80000000,0x1000,0x11080593,0x80000000,0x18400,0x11080593,0x80000040,
-0,0x11080593,0xf8000400,0x18400,0x11080600,0x800000,0xc820,0x11080600,0xf8002400,0x18400,0x11080602,0x80000000,0,0x11080602,0xf8000400,0x18400,
-0x11080602,0xf8000400,0x18401,0x11080602,0xf8000400,0x18402,0x11080602,0xf8001400,0x18400,0x11080780,0x80000000,0,0x1108078a,0xf8000400,0x18400,0x1108078a,
-0xf8000400,0x18401,0x11080804,0x80000000,0,0x11080804,0xf8000400,0x18400,0x11080804,0xf8000400,0x18401,0x11080890,0xf8000400,0x18400,0x11080890,0xf8000400,
-0x18401,0x1108090f,0xf8000400,0x18400,0x1108099f,0x80000000,0,0x1108099f,0xf8000400,0x18400,0x1108099f,0xf8000400,0x18401,0x11080a23,0x80000000,0,
-0x11080a23,0xf8000400,0x18400,0x11080a23,0xf8000400,0x18401,0x11080aa4,0xf8000400,0x18400,0x11080b15,0xf8000400,0x18400,0x11080b9a,0xf8000400,0x18400,0x11080ca6,
-0x80000000,0,0x11080e80,0x80000000,0,0x11080e8c,0xf8000400,0x18400,0x11080e8c,0xf8000400,0x28400,0x11081319,0xf8000400,0x10401,0x11081319,0xf8000400,
-0x10402,0x11081319,0xf8000400,0x28401,0x1108138e,0x80001000,1,0x1108138e,0x80001000,2,0x1108138e,0xf8000400,0x10401,0x1108138e,0xf8000400,0x28401,
-0x11081400,0x80000000,0x4000000,0x11081400,0x80000000,0x4000002,0x11081400,0xd0000000,0x1c00,0x11081400,0xd0000080,0x1c00,0x11081480,0x80000000,0xe,0x11081480,
-0x80000000,0xf,0x11081480,0x80000080,0xe,0x11081480,0x80000080,0xf,0x11081480,0x80000088,0xe,0x11081480,0x80000088,0xf,0x11081600,0x80000000,
-0,0x11081600,0x80000000,2,0x11081600,0x80000000,0xf,0x11081600,0x80000080,0,0x11081600,0xf8000000,0,0x11081600,0xf8000400,0x28402,
-0x11081600,0xf8000480,0x10405,0x11081600,0xf8000480,0x18402,0x11081600,0xf8000480,0x28405,0x11081619,0xf8000400,0x28400,0x11081619,0xf8000400,0x28401,0x11081680,
-0x80000000,6,0x11081680,0xf8000400,0x10402,0x11081680,0xf8000400,0x18400,0x11081680,0xf8000400,0x28402,0x11081700,0x80000000,0x4000000,0x11081700,0x80000000,
-0x4000001,0x11081700,0x80000080,0x4000000,0x11081700,0x80000080,0x4000001,0x11081780,0x80000080,0x4000000,0x11081780,0x80000080,0x4000001,0x11081780,0x80000080,0x4000002,
-0x11081800,0x80000000,0x4000000,0x11081800,0x80000080,0x4000000,0x11081880,0x80000000,0x4000000,0x11081900,0x80000000,0x4000000,0x11081a00,0x80000000,0x4000000,0x11081a80,
-0x80000000,0x4000000,0x11081b00,0x80000000,0x4000000,0x11081b80,0x80000000,0x4000000,0x11081c00,0x80000000,0x4000000,0x11082700,0x80000000,0,0x11082700,0x80000400,
-0,0x11082803,0xf8000400,0x10402,0x11082813,0x80000080,5,0x11082813,0xf8000400,0x18401,0x11082813,0xf8000400,0x18402,0x11082813,0xf8000400,0x18405,
-0x11082819,0xf8000400,0x10402,0x11082882,0xe0000400,0x18408,0x11082882,0xf8000400,0x18404,0x11082882,0xf8000400,0x18407,0x11082882,0xf8000400,0x18408,0x11082882,
-0xf8000400,0x18409,0x11082a82,0xe0000400,0x18408,0x11082a82,0xf8000400,0x18404,0x11082a82,0xf8000400,0x18407,0x11082a82,0xf8000400,0x18408,0x11082a82,0xf8000400,
-0x18409,0x11088100,0x80000000,0x4000000,0x11088119,0xf8000400,0x10400,0x11088119,0xf8000400,0x10401,0x11088119,0xf8000400,0x28400,0x11088199,0xf8000400,0x10400,
-0x11088199,0xf8000400,0x10401,0x11088199,0xf8000400,0x10402,0x11088199,0xf8000400,0x28400,0x11088199,0xf8000400,0x28402,0x11088219,0xf8000400,0x10401,0x11088299,
-0xf8000400,0x10400,0x11088300,0x80001000,0,0x1108840e,0xf8000400,0x10400,0x1108840e,0xf8000400,0x28400,0x11088488,0xf8000400,0x10400,0x11088488,0xf8000400,
-0x10401,0x11088488,0xf8000400,0x28400,0x11088488,0xf8000400,0x28401,0x11089400,0x80000000,0x4000000,0x11089400,0x80000000,0x4000002,0x1108960e,0xf8000400,0x28401,
-0x11089680,0x80000000,6,0x11089700,0x80000000,0x4000000,0x11089c00,0x80000000,0x4000000,0x1108a700,0,0,0x11092b80,0x80000000,0xa,0x11092b80,
-0x80000080,0xa,0x11092b92,0xf8000400,0x1840a,0x11092b92,0xf8800400,0x1840a,0x11092b96,0xf8000400,0x18c0a,0x110a0080,0x80000000,0x4000000,0x110a0080,0x80000080,
-0x4000000,0x110a0080,0x80001000,0x4000000,0x110a0080,0x80001080,0x4000000,0x110a0080,0xd0000000,0x1c00,0x110a0099,0xf8000400,0x10400,0x110a0099,0xf8000400,0x28400,
-0x110a0099,0xf8000700,0x10400,0x110a0099,0xf8000700,0x28400,0x110a0100,0x80000000,0x4000000,0x110a0100,0x80000080,0x4000000,0x110a0100,0x80001000,2,0x110aa700,
-0x80000000,0,0x110aa700,0x80000400,0,0x110c9400,0x80000008,0x4000000,0x11100080,1,0x8020020,0x11100593,0x80000008,0,0x11100780,0x80000040,
-0x1024000,0x11100ca6,0x80000040,0,0x11101400,0x80000001,0x20001,0x11101400,0x80000001,0x20002,0x11101400,0x80000008,0x4000000,0x11108100,0x800010,0xc820,
-0x11109400,0x80000000,0x4001000,0x11109400,0x80000008,0x4000000,0x11109400,0x80000018,0x4000000,0x11120080,0x80000080,0x4000000,0x1112a700,0x80000000,0,0x11140300,
-0xf8001400,0x18400,0x11148100,0x80001000,2,0x11180080,1,0x8020020,0x11181400,1,0x801c020,0x11201400,0x80000000,0x4008000,0x11201480,0x80000080,
-0x800e,0x11201480,0x80000080,0x800f,0x11202880,0x80000000,0x4008000,0x11212b80,0x80000020,0x800a,0x11212b80,0x80000040,0xa,0x11212b80,0x80000040,0x102400a,
-0x1121a700,0x80000000,0,0x1121ab80,0x80000000,0x8011,0x1121ab80,0x80000040,0x11,0x1121ab80,0x80000040,0x1024011,0x11220080,0x80000000,0x4008000,0x11229800,
-0x80000000,0x4008001,0x11229e80,0x80000000,0x4008000,0x11229e80,0x80000020,0x4008000,0x11229e80,0x80000040,0x4000000,0x11229e80,0x80000040,0x5024000,0x1122a700,0x80000000,
-0,0x1122a980,0x80000000,0x8010,0x1122a980,0x80000020,0x8010,0x1122aa00,0x80000000,0x800c,0x1122aa00,0x80000040,0xc,0x1122aa00,0x80000040,0x102400c,
-0x11240080,0x800000,0x20,0x11240100,0x800000,0x20,0x11240488,0x50021000,0x60,0x11240593,0x50021400,0x60,0x11240601,0x50020400,0x60,0x11240601,
-0x50021400,0x60,0x11240602,0x20000,0x60,0x11240602,0x50020400,0x60,0x11240602,0x50021000,0x60,0x1124078a,0x50020400,0x60,0x1124078a,0x50021000,
-0x60,0x1124078a,0x50061000,0x60,0x1124078a,0xd0000400,0x18400,0x11240804,0x50020400,0x60,0x11240804,0x50021000,0x60,0x11240804,0x50061000,0x60,
-0x11240804,0xd0000400,0x18400,0x11240804,0xd0000400,0x18401,0x11240890,0x50020400,0x60,0x11240890,0x50021000,0x60,0x11240890,0x50061000,0x60,0x11240890,
-0xd0000400,0x18400,0x1124090f,0x50020400,0x60,0x1124090f,0x50021000,0x60,0x1124090f,0x50061000,0x60,0x1124090f,0xd0000400,0x18400,0x1124099f,0x50020400,
-0x60,0x1124099f,0x50021000,0x60,0x1124099f,0x50061000,0x60,0x1124099f,0xd0000400,0x18400,0x1124099f,0xd0000400,0x18401,0x11240a23,0x50020400,0x60,
-0x11240a23,0x50061000,0x60,0x11240a23,0xd0000400,0x18400,0x11240a23,0xd0000400,0x18401,0x11240aa4,0x50020400,0x60,0x11240aa4,0x50020400,0x61,0x11240aa4,
-0x50061000,0x60,0x11240aa4,0xd0000400,0x18400,0x11240b15,0x50020400,0x60,0x11240b15,0x50061000,0x60,0x11240b15,0xd0000400,0x18400,0x11240b15,0xd0000400,
-0x18401,0x11240b9a,0x50020400,0x60,0x11240b9a,0x50061000,0x60,0x11240b9a,0xd0000400,0x18400,0x11240b9a,0xd0000400,0x18401,0x11241400,0x800000,0xc820,
-0x11241400,0x800000,0x800c820,0x11241400,0x1800000,0xc820,0x11241401,0x820000,0x60,0x11241581,0x20000,0x60,0x11241581,0x50020080,0x60,0x11242700,
-0x20000,0x60,0x11242813,0x50021400,0x60,0x11242901,0x50021000,0x60,0x11248381,0x50021000,0x60,0x11248381,0x50021000,0x61,0x11248381,0x50021400,
-0x60,0x11248381,0x51021000,0x61,0x1124a700,0x20000,0x60,0x11269e81,0x50021000,0x60,0x11269f01,0x50021000,0x60,0x11280080,1,0x801c040,
-0x112c0600,0x80000040,0,0x112c0600,0x80000040,0x1024000,0x112c0602,0x80000000,0,0x112c0602,0x80000040,0x1024000,0x112c1c00,0x80000000,0x4000000,0x112dab80,
-0x80000040,0x1024011,0x112e0080,0x80000040,0x5024000,0x112eaa00,0x80000040,0x102400c,0x11300100,0x80000001,0x1800b,0x11301400,0x80000001,0x2000b,0x11301400,0x80000018,
-0x400000b,0x11308381,0x50021000,0x60,0x11360080,0x80000018,0x4000000,0x11381e80,0x80000000,0,0x11399e80,0x80000001,0x20011,0x1139a700,0x80000000,0,
-0x1139a700,0x80000080,0,0x1139ab80,0x80000000,0x11,0x1139ab80,0x80000018,0x11,0x1139ab80,0x80000020,0x11,0x1139ab80,0x80000080,0x11,0x1139ab80,
-0x80001000,0x11,0x1139ab80,0x80001080,0x11,0x1139ab80,0xd0000000,0x1c11,0x1139ab80,0xd0000100,0x11,0x1139ab99,0xf8000400,0x10411,0x1139ab99,0xf8000400,
-0x28411,0x1139ab99,0xf8000500,0x10411,0x1139ab99,0xf8000500,0x28411,0x113a9e80,0x80000000,0,0x113a9e80,0x80000000,2,0x113a9e80,0x80000000,0x4000000,
-0x113a9e80,0x80000008,0x4000000,0x113a9e80,0xf8000c00,0x18000,0x113a9e80,0xf8002400,0x18c00,0x113a9e91,0xf8000c00,0x18000,0x113a9f14,0xf8000400,0x18000,0x113a9f14,
-0xf8000400,0x18001,0x113a9f96,0xf8000400,0x18c00,0x113a9f96,0xf8000400,0x18c01,0x113aa005,0xf8000400,0x18400,0x113aa092,0xf8000400,0x18402,0x113aa092,0xf8800400,
-0x18402,0x113aa100,0x80000000,0,0x113aa100,0x80000000,0xf,0x113aa200,0x80000000,0,0x113aa200,0x80000000,2,0x113aa200,0x80000000,3,
-0x113aa212,0x80000000,2,0x113aa212,0x80000000,3,0x113aa280,0x80000000,2,0x113aa280,0x80000000,0xd,0x113aa391,0xf8400c00,0x18000,0x113aa791,
-0xf8000c00,0x18001,0x113aa791,0xf8400c00,0x18000,0x113aa980,0x80000000,2,0x113aa980,0x80000000,0x10,0x113aa980,0x80000008,0x10,0x113aa980,0xd0000000,
-0x1c02,0x113aa980,0xd0000000,0x1c10,0x113aaa00,0x80000000,0xc,0x113aaa00,0x80000008,0xc,0x113aaa00,0x80000040,0xc,0x113aaa00,0x80000080,0xc,
-0x113aaa00,0x80000098,0xc,0x113c9400,0x80000000,0x4000002,0x113ea700,0x80000080,0,0x11400400,0x80000040,0x1401,0x11400500,0x80000040,0x1025400,0x11401400,
-0x80000080,0x4001400,0x11420080,0x80000040,0x4001000,0x11420080,0x80000040,0x4001400,0x11420080,0x80000040,0x5005400,0x11440080,1,0x801c0a0,0x11481400,0x80000040,
-0x5024000,0x11481400,0x80000040,0x5024002,0x11492b80,0x80000010,0xa,0x11492b80,0xf0001400,0x18c0a,0x11492b80,0xf8003400,0x18c0a,0x11492b96,0xf8000400,0x18c0a,
-0x1149ab80,0x80000040,0x11,0x114a9e80,0x80000008,0x4000000,0x114a9e91,0xf8002400,0x18400,0x114a9f00,0xe0001000,0xc02,0x114a9f14,0xf8000400,0x18000,0x114a9f14,
-0xf8002400,0x18000,0x114a9f14,0xf8002400,0x18001,0x114a9f80,0x80000010,0,0x114a9f80,0xf8003400,0x18c00,0x114a9f96,0xf8000400,0x18c00,0x114a9f96,0xf8002400,
-0x18c00,0x114a9f96,0xf8002400,0x18c01,0x114aa700,0x80000000,0,0x114aa700,0x80000400,0,0x114aaa00,0x80000040,0xc,0x114c0600,0xd0000000,0x15800,
-#endif /* U_DARWIN */
-0x114c0602,0x80000000,0x15800,0x114c0602,0xd0000000,0x15800,0x114c078a,0xd0000000,0x15800,0x114c0804,0xd0000000,0x15800,0x114c0890,0xd0000000,0x15800,0x114c090f,
-0xd0000000,0x15800,0x114c099f,0xd0000000,0x15800,0x114c0a23,0xd0000000,0x15800,0x114c0aa4,0xd0000000,0x15800,0x114c0b15,0xd0000000,0x15800,0x114c0b9a,0xd0000000,
-0x15800,0x114c0ca6,0xd0000000,0x15800,0x114c0d18,0xd0000000,0x15800,0x114e0080,0xd0000300,0x15800,0x11501400,0x80000000,0x4008000,0x11501400,0x80000020,0x4008000,
-#ifndef U_DARWIN
-0x11501480,0x80000080,0x800e,0x11501480,0x80000080,0x800f,0x11502880,0x80000000,0x4008000,0x11512b80,0x80000020,0x800a,0x1151ab80,0x80000000,0x8011,0x11520080,
-0x80000000,0x4008000,0x11529800,0x80000000,0x4008001,0x11529e80,0x80000000,0x4008000,0x11529e80,0x80000020,0x4008000,0x1152a980,0x80000000,0x8010,0x1152a980,0x80000020,
-0x8010,0x1152aa00,0x80000000,0x800c,0x11541400,0x80000000,0x4000000,0x11541400,0x80000000,0x4000002,0x11541400,0x80000080,0x4000002,0x11541500,0x80000000,0,
-0x11548100,0x80000000,0x4000000,0x11549400,0x80000000,0x4000000,0x11549400,0x80000080,0x4000000,0x11549400,0x80000080,0x4000002,0x11549600,0x80000000,2,0x1155ab80,
-0x80000000,0x11,0x11560080,0x80000000,0x4000000,0x11560100,0x80000000,0x4000000,0x1156aa00,0x80000000,0xc,0x11580804,0x80000000,0,0x11580c80,0x80000000,
-0,0x11581500,0x80000000,0,0x11581500,0x80000000,2,0x11581780,0x80000080,0x4000000,0x11581780,0x80000088,0x4000000,0x11588100,0x80000000,0x4000000,
-0x11588100,0x80000080,0x4000000,0x11589600,0x80000000,2,0x11591500,0x80000000,0,0x1159ab80,0x80000000,0x11,0x115a0080,0x80000000,0x4000000,0x115a0080,
-0x80000080,0x4000000,0x115a0100,0x80000000,0x4000000,0x115aaa00,0x80000000,0xc,0x115c0100,0x80000020,0x4008000,0x115c1400,0x80000020,0x4008000,0x115c1c00,0x80000000,
-0x4008000,0x115c9400,0x80000020,0x4008000,0x115c9400,0x80000020,0x4009000,0x115e0080,0x80000020,0x4008000,0x115e0080,0x80000020,0x4009000,0x11600ca6,0x50020400,0x60,
-0x11600ca6,0x50021000,0x60,0x11600ca6,0x50060400,0x60,0x11600ca6,0xf0000400,0x18002,0x11600ca6,0xf8000400,0x18000,0x11600ca6,0xf8002400,0x18000,0x11600ca6,
-0xfc000400,0x18000,0x11600d18,0x50020400,0x60,0x11600d18,0x50021000,0x60,0x11600d18,0xf0000400,0x18002,0x11600d18,0xf8000400,0x18000,0x11600d18,0xf8000400,
-0x18002,0x11600d18,0xf8002400,0x18000,0x11600d18,0xfc000400,0x18000,0x116a0080,0x80000001,0x8020000,0x116e0080,0x80000000,0x4000000,0x11701400,0x800000,0xc820,
-0x11740100,1,0x801c020,0x11782a80,0x800000,0xc820,0x11868f12,0xf8000400,0x18480,0x11868f12,0xf8800400,0x18480,0x11880f12,0xf8000400,0x18500,0x118c0f12,
-0xf8000400,0x18520,0x118c0f12,0xf8800400,0x18520,0x20000067,0x810000,0,0x200036e7,0x810000,0,0x20003767,0x810000,0,0x2000b6e7,0,
-0,0x2000b767,0,0,0x20080da7,0x80000000,0,0x20080da7,0xf8000400,0x18400,0x20080da7,0xf8000400,0x18401,0x20081319,0xf8000400,0x10401,
-0x20100da7,0x80000000,0,0x20100da7,0xd0000400,0x18400,0x20140da7,0x80000000,0,0x20200da7,0x80000000,0x8000,0x20240593,0x50021000,0x60,0x20240593,
-0x50021400,0x60,0x20240da7,0x50020400,0x60,0x20240da7,0x50020400,0x61,0x20240da7,0x50020400,0x62,0x20240da7,0x50021000,0x60,0x20240da7,0x50061000,
-0x60,0x20240da7,0xd0001000,0,0x202c0da7,0x80000000,0,0x202c0da7,0x80000040,0,0x20300da7,0x80000000,0xb,0x20300da7,0x80000040,0,
-0x204c0da7,0xd0000000,0x15800,0x20500da7,0x80000000,0x8000,0x20581500,0x80000000,0,0x206425e7,0x800000,0,0x20642667,0x800000,0,0x206426e7,
-0x800000,0,0x207ea512,0xf8000400,0x184c1,0x2082a512,0xf8000400,0x184e1,0x211c2b00,0x80000000,0,0x21589500,0x80000000,0,0x30080219,0xf8000400,
-0x10400,0x30080219,0xf8000400,0x10401,0x30080219,0xf8000400,0x28400,0x30080219,0xf8000400,0x28401,0x30080299,0xf8000400,0x10400,0x30080300,0x80001000,0,
-0x30080300,0xf8001400,0x18400,0x3008040e,0xf8000400,0x10400,0x30080488,0xf8000400,0x10400,0x30080488,0xf8000400,0x10401,0x30080488,0xf8000400,0x28400,0x30080488,
-0xf8000400,0x28401,0x30080602,0x80000000,0,0x30080602,0xf8000400,0x18400,0x300806a2,0x800000,0xc820,0x300806a2,0x80000000,0,0x300806a2,0x80000040,
-0,0x300806a2,0x80000040,0x1024000,0x300806a2,0xf8000400,0x18400,0x30080725,0xf8000400,0x18400,0x30080c21,0x80000000,0,0x30080c21,0xf8000400,0x18400,
-0x30080da7,0x80000000,0,0x30080da7,0xf8000400,0x18400,0x30080e1c,0x80000000,0,0x30080f8b,0x80000000,0,0x30080f8b,0x80000040,0,0x30080f8b,
-0x80000040,0x1024000,0x30080f8b,0xd0000000,0,0x30080f8b,0xf8000400,0x18400,0x30081006,0xf8000400,0x18400,0x300810a8,0x80000040,0,0x300810a8,0x80000040,
-0x1024000,0x300810a8,0xf8000400,0x18400,0x3008111d,0xf8000400,0x18400,0x300811a0,0xf8000400,0x18400,0x30081217,0x80000000,0,0x3008129b,0x80000000,0,
-0x3008129b,0xf8000400,0x18400,0x3008129b,0xf8002400,0x18400,0x30081400,0x80000000,0x4000000,0x30081600,0x80000000,0,0x30081600,0xf8000400,0x10405,0x30081680,
-0xf8000400,0x28400,0x30081700,0x80000000,0x4000000,0x30081800,0x80000000,0x4000000,0x30081880,0x80000000,0x4000000,0x30081b00,0x80000000,0x4000000,0x30081b80,0x80000000,
-0x4000000,0x30081cae,0x80000000,0x4000000,0x30082813,0xf8000400,0x18401,0x30088300,0x80001000,0,0x30100503,0x80000018,0,0x30100da7,0x80000000,0,
-0x30100e1c,0x80000040,0x1024000,0x30100f8b,0x80000040,0,0x3010111d,0x80000001,0x20000,0x30101180,0x80000040,0,0x30101217,0x80000000,0,0x30101217,
-0x80000040,0,0x30101280,0x80000040,0,0x30101280,0x80000040,0x1024000,0x3010129b,0x80000040,0,0x3010129b,0x80000040,0x1024000,0x3014129b,0x80000018,
-0,0x3020111d,0x80000000,0x8000,0x30240488,0x20000,0x60,0x30240601,0x50020400,0x60,0x302406a2,0x50020400,0x60,0x302406a2,0x50021000,0x60,
-0x302406a2,0x50021400,0x60,0x30240725,0x50021400,0x60,0x30240c21,0x50020400,0x60,0x30240c21,0x50061000,0x60,0x30240c21,0xd0000400,0x18400,0x30240c21,
-0xd0000400,0x18401,0x30240da7,0x50020400,0x60,0x30240da7,0x50021000,0x60,0x3024129b,0x50020400,0x60,0x3024129b,0x50820000,0x2000060,0x30241581,0x20000,
-0x60,0x30242b00,0,0xc820,0x30248381,0x50021000,0x60,0x3030129b,0x80000001,0x20000,0x30301400,0x80000001,0x2000b,0x30308381,0x50021000,0x60,
-0x303a9d11,0x80200000,0,0x303a9d11,0x80200000,2,0x303a9d91,0x80200000,2,0x303a9e00,0x80080000,0,0x303a9e00,0x80100000,0,0x303a9e80,
-0x80000000,0,0x303a9e91,0xf8000c00,0x18002,0x303aa185,0xf8000400,0x18400,0x303aa311,0xf8400c00,0x18000,0x303aa429,0xf8000400,0x18400,0x303aa4a9,0x80000000,
-0,0x30481217,0x80000040,0,0x30481400,0x80000040,0x5024002,0x304aa429,0xf8002400,0x18400,0x304c0e1c,0xd0000000,0x15800,0x304c1217,0xd0000000,0x15800,
-0x304c129b,0xd0000000,0x15800,0x3050111d,0x80000000,0x8000,0x30581217,0x80000000,0,0x30581500,0x80000000,0,0x30600e1c,0x50020400,0x60,0x30600e1c,
-0x50021000,0x60,0x30600e1c,0x50061000,0x60,0x30600e1c,0xd0000400,0x18000,0x30600e1c,0xf8000400,0x18000,0x30600e1c,0xf8000400,0x18001,0x30601217,0x800000,
-0xc820,0x30601217,0x50020400,0x60,0x30601217,0x50021000,0x60,0x30601217,0x50061000,0x60,0x30601217,0x51021000,0x60,0x30601217,0xd0000400,0x18000,
-0x30601217,0xf8000400,0x18000,0x30601217,0xf9000400,0x18000,0x310028e7,0x810000,0,0x3108040e,0xf8000480,0x10402,0x3108040e,0xf8000480,0x28402,0x31082c1e,
-0x80000000,0,0x31082c1e,0xf8000400,0x18400,0x31082c8d,0xf8000400,0x18400,0x31082d09,0xf8000400,0x10400,0x31082d09,0xf8000400,0x28400,0x31082d80,0x80000000,
-0,0x31082e00,0x80000000,0,0x31082e00,0x80000000,1,0x31082e80,0x80000080,5,0x31082e80,0xf8000480,0x10405,0x31082e80,0xf8000480,0x28405,
-0x31242e00,0x800000,0xc820,0x31242e00,0x50020000,0x60,0x31242e00,0x50021000,0x60,0x31242e00,0xd0000000,0,0x31242e00,0xd0001000,0,0x31242e01,
-0x50021000,0x60,0x31243000,0x800000,0xc820,0x313aaf11,0xf8400c00,0x18000,0x313aaf91,0xf8000c00,0x18001,0x314c2e80,0xd0000080,0x15805,0x32041b80,0x80000000,
-0x4000000,0x32049980,0x80000000,0,0x32080219,0xf8000400,0x28400,0x3208040e,0x80000080,0,0x3208040e,0xf8000400,0x10400,0x3208040e,0xf8000400,0x28400,
-0x32080488,0xf8000400,0x10400,0x32080488,0xf8000400,0x28400,0x32080602,0xf8000400,0x18400,0x32080725,0xf8000400,0x18400,0x32080e8c,0xf8000400,0x18400,0x32081400,
-0x800080,0xc820,0x32081400,0x80000000,0x4000000,0x32081400,0x80000000,0x4000002,0x32081400,0x80000080,0x4000000,0x32081499,0xf8000400,0x1040f,0x32081600,0x80000000,
-0,0x32081600,0x80000080,0,0x32081600,0x80000080,5,0x32081600,0xf8000480,0x10405,0x32081600,0xf8000480,0x28405,0x32081700,0x80000080,0x4000000,
-0x32081780,0x80000080,0x4000000,0x32081800,0x80000000,0x4000000,0x32081800,0x80000080,0x4000000,0x32081a80,0x80000000,0x4000000,0x32081b00,0x80000080,0x4000000,0x32081b80,
-0x80000000,0x4000000,0x32082a82,0xf8000400,0x18400,0x32083088,0xf8000400,0x10400,0x32083088,0xf8000400,0x28400,0x3208312a,0xf8000400,0x18400,0x320831ab,0xf8000400,
-0x18400,0x3208322c,0xf8000400,0x18400,0x320832ad,0xf8000400,0x18400,0x32083300,0x80000080,0x4000000,0x32083380,0x80000080,0x4000000,0x32083400,0x80000080,0x4000000,
-0x32083480,0x80000080,0x4000000,0x32083500,0x80000080,0x4000000,0x32083500,0x80000080,0x4000001,0x32083500,0x80000080,0x4000002,0x32101400,0x80000001,0x20002,0x32103180,
-0x80000000,0,0x32201c00,0x80000000,0x4008000,0x32203480,0x80000080,0x4008000,0x3221ab80,0x80000000,0x8011,0x32223300,0x80000080,0x4008000,0x32223480,0x80000080,
-0x4008000,0x32241581,0x20000,0x60,0x32241581,0x50020000,0x60,0x32241581,0x50020080,0x60,0x3224312a,0x50020400,0x60,0x3224312a,0x50060000,0x60,
-0x322431ab,0x50020400,0x60,0x322431ab,0x50060000,0x60,0x3224322c,0x50020400,0x60,0x322432ad,0x50020400,0x60,0x32248381,0x50020000,0x60,0x3224b601,
-0x50820000,0x2000060,0x32308381,0x50820000,0x60,0x323a9e80,0x80000000,0,0x323a9f14,0xf8000400,0x18010,0x323a9f96,0xf8000400,0x18c10,0x323aa200,0x80000000,
-3,0x323aa4a9,0x80000000,0,0x323aa791,0xf8000400,0x18401,0x323aa980,0x80000000,0x4000000,0x32481400,0x80000040,0x5024002,0x324a9e80,0xf8000400,0x18400,
-0x324a9e91,0xf8000400,0x18400,0x324a9f14,0xf8000400,0x18000,0x324a9f80,0x80000008,0xc00,0x324ab596,0xf8000400,0x18c00,0x32501c00,0x80000000,0x4008000,0x32503480,
-0x80000080,0x4008000,0x3251ab80,0x80000000,0x8011,0x32523300,0x80000080,0x4008000,0x32523480,0x80000080,0x4008000,0x32542882,0x80000000,8,0x32581500,0x80000000,
-0,0x32781400,0x800000,0xc820,0x40049b80,0x80000000,0x4000000,0x40080219,0xf8000400,0x10400,0x40080299,0xf8000400,0x10400,0x40080300,0x80001000,0,
-0x4008040e,0xf8000400,0x10400,0x4008040e,0xf8000400,0x28400,0x4008040e,0xf8000400,0x28402,0x40080600,0x800000,0xc820,0x40080602,0x80000000,0,0x40080602,
-0xf8000400,0x18400,0x400806a2,0xf8000400,0x18400,0x4008078a,0xf8000400,0x18400,0x40080804,0xf8000400,0x18400,0x4008090f,0xf8000400,0x18400,0x4008099f,0xf8000400,
-0x18400,0x40080a23,0x80000000,0,0x40080b15,0xf8000400,0x18400,0x40081217,0x80000000,0,0x40081400,0x80000008,0x4000000,0x40081400,0xd0000000,0x1c00,
-0x40081600,0x80000000,2,0x40081800,0x80000000,0x4000000,0x40081800,0x80000080,0x4000000,0x40081b80,0x80000000,0x4000000,0x40082880,0x80000000,0,0x40082d09,
-0xf8000400,0x10400,0x40082d09,0xf8000400,0x28400,0x40082e80,0xf8000480,0x10405,0x400837b0,0x80000000,0,0x400837b0,0xf8000400,0x18400,0x40083897,0x80000000,
-0,0x40083908,0xf8000400,0x10400,0x4008390e,0xf8000400,0x10400,0x4008390e,0xf8001400,0x1040e,0x4008390e,0xf8001400,0x1040f,0x40083919,0xf8000400,0x10400,
-0x40083919,0xf8001400,0x10400,0x40083919,0xf8001400,0x1040e,0x40083919,0xf8001400,0x1040f,0x40083980,0x80000000,0x4000000,0x40083a00,0x80000000,0,0x40083ab1,
-0xf8000400,0x18400,0x40083b31,0xf8000400,0x18400,0x40083b80,0x80000000,0,0x40083c35,0xf8000400,0x18400,0x40083cb3,0xf8000400,0x18400,0x40083d32,0xf8000400,
-0x18400,0x40083daf,0xf8000400,0x18400,0x40083e00,0x80000000,0,0x40089980,0x80000000,0,0x40103b80,0x80000000,0,0x40103c35,0x80000040,0,
-0x4022a980,0x80000000,0x8010,0x40240602,0x50020400,0x60,0x40240602,0x50021000,0x60,0x40240602,0x50021400,0x60,0x40240890,0x50020400,0x60,0x40240890,
-0xd0000400,0x18400,0x4024090f,0x50020400,0x60,0x40240b15,0x50021000,0x60,0x402437b0,0x50020400,0x60,0x402437b0,0x50021000,0x60,0x402437b0,0xd0000400,
-0x18400,0x40248381,0x50021000,0x60,0x4024be81,0x50820000,0x2000060,0x402c37b0,0x80000040,0x1024000,0x40308381,0x50021000,0x60,0x403aa200,0x80000000,0xd,
-0x403aa212,0x80000000,2,0x403aa212,0x80000000,3,0x403aa280,0x80000000,0xd,0x40400602,0x80000000,0x1400,0x404c37b0,0xd0000000,0x15800,0x404c3d32,
-0xd0000000,0x15800,0x4052a980,0x80000000,0x8010,0x4058090f,0x80000000,0,0x40580a23,0x80000000,0,0x40601217,0x50021000,0x60,0x40603834,0xf8000400,
-0x18000,0x41080219,0xf8000400,0x10400,0x41080219,0xf8000400,0x28400,0x4108040e,0xf8000400,0x10400,0x4108040e,0xf8000400,0x28400,0x41080488,0xf8000400,0x10400,
-0x41080488,0xf8000400,0x28400,0x4108078a,0xf8000400,0x18400,0x41080804,0xf8000400,0x18400,0x41080a23,0xf8000400,0x18400,0x41080e8c,0xf8000400,0x18400,0x41080e8c,
-0xf8000400,0x1840f,0x41080f8b,0x80000000,0,0x41080f8b,0xf8000400,0x18400,0x41081400,0x80000000,0x4000000,0x41081499,0xf8000400,0x1040e,0x41081600,0x80000000,
-0,0x41081600,0xf8000480,0x10405,0x41081800,0x80000000,0x4000000,0x41081b80,0x80000000,0x4000000,0x41082e80,0xf8000480,0x10405,0x41083300,0x80000080,0x4000000,
-0x41083908,0xf8000400,0x1040f,0x41083919,0xf8000400,0x10400,0x41083980,0x80000000,0x4000000,0x41083f0e,0x80000000,0,0x41083f8e,0x80000000,0,0x41083f8e,
-0xf8000400,0x18400,0x41084002,0xf8000400,0x18400,0x410840b7,0x80000000,0,0x410840b7,0xf8000400,0x18400,0x41084207,0x80000000,0,0x41084207,0xf8000400,
-0x10400,0x41084207,0xf8000400,0x28400,0x4108428b,0xf8000400,0x18400,0x4108430b,0x80000000,0,0x4108430b,0xf8000400,0x18400,0x4108438c,0xf8000400,0x10400,
-0x41084438,0xf8000400,0x10400,0x41084438,0xf8000400,0x28400,0x410844b9,0x80000000,0,0x410844b9,0xf8000400,0x18400,0x41084500,0x80000000,0,0x4108463d,
-0xf8000400,0x18400,0x4108468e,0xf8000400,0x1040f,0x41084699,0xf8000400,0x10400,0x41084699,0xf8000400,0x1040f,0x41084700,0x80000000,0x4000000,0x410847ba,0x80000000,
-0,0x410847ba,0xf8000400,0x18400,0x4108483c,0xf8000400,0x18400,0x4108483c,0xf8000400,0x1840f,0x41101400,0x80000000,0x4000000,0x411040b7,0x80000000,0,
-0x41104207,0x80000000,0,0x411044b9,0x80000000,0,0x4110463d,0x80000040,0,0x41104700,0x80000000,0x4000000,0x41104700,0x80000018,0x4000000,0x41140da7,
-0x80000000,0,0x41203300,0x80000080,0x4008000,0x4122c880,0x80000000,0x10,0x4122c880,0x80000000,0x8010,0x41240593,0x50020000,0x60,0x41240593,0x50020400,
-0x60,0x41240602,0x50020400,0x60,0x41240f8b,0x50020400,0x60,0x41241581,0x50020000,0x60,0x41243f0e,0x50020000,0x60,0x412440b7,0x50020400,0x60,
-0x412440b7,0xd0000400,0x18400,0x41244181,0x50020000,0x60,0x412444b9,0x50020000,0x60,0x412444b9,0x50020400,0x60,0x412444b9,0x50060000,0x60,0x412447ba,
-0x50020000,0x60,0x412447ba,0x50020400,0x60,0x412447ba,0x50060000,0x60,0x412447ba,0xd0000000,0,0x412447ba,0xd0000400,0x18400,0x41248381,0x50020000,
-0x60,0x412c0593,0x80000000,0,0x412c0602,0x80000000,0,0x412ec880,0x80000000,0x10,0x41308381,0x50020000,0x60,0x413aa200,0x80000000,3,
-0x413aa391,0xf8400c00,0x18000,0x413aa791,0xf8000c00,0x18001,0x413ac100,0x80000000,0,0x413ec880,0x80000000,0x10,0x4142c880,0x80000000,0x1410,0x414c0a23,
-0xd0000000,0x15800,0x414c45bb,0xd0000000,0x15800,0x41503300,0x80000080,0x4008000,0x4152c880,0x80000000,0x8010,0x41540602,0x80000000,0,0x41581500,0x80000000,
-0,0x415c4700,0x80000000,0x4008000,0x416045bb,0x80000000,0,0x416045bb,0xd0000400,0x18000,0x416045bb,0xf8000400,0x18000,0x50080219,0xf8000400,0x10400,
-0x50080219,0xf8000400,0x28400,0x5008040e,0xf8000400,0x10400,0x50080488,0xf8000400,0x10400,0x50080488,0xf8000400,0x28400,0x5008078a,0xf8000400,0x18400,0x50080b15,
-0x80000000,0,0x50081600,0x80000000,0,0x50081619,0xf8000400,0x10400,0x50081699,0xf8000400,0x10400,0x50081800,0x80000000,0x4000000,0x50081800,0x80000080,
-0x4000000,0x50081b80,0x80000000,0x4000000,0x50082e80,0xf8000480,0x10405,0x50082e80,0xf8000480,0x28405,0x50083088,0xf8000400,0x10400,0x50083088,0xf8000400,0x28400,
-0x50083300,0x80000080,0x4000000,0x50083980,0x80000000,0x4000000,0x50084500,0xf8001400,0x18400,0x50084957,0x80000000,0,0x50084957,0xf8000400,0x18400,0x50084957,
-0xf8001400,0x18400,0x50084957,0xf8002400,0x18400,0x500849be,0x80000000,0,0x500849be,0xf8000400,0x18400,0x500849be,0xf8000400,0x18401,0x50084a19,0xf8000400,
-0x10400,0x50084a19,0xf8000400,0x28400,0x50084a80,0x80001000,0,0x50084b5a,0xf8000400,0x18400,0x50084bdb,0x80000000,0,0x50084bdb,0xf8000400,0x18400,
-0x50084c65,0xf8000400,0x18400,0x50084ce5,0xf8000400,0x18400,0x50084d00,0x80000000,0,0x501049be,0x80000000,0,0x501049be,0x80000040,0,0x501049be,
-0x80000040,0x1024000,0x50104bdb,0x80000040,0,0x50104ce5,0x80000040,0,0x50144b5a,0x80000000,0,0x50240593,0x50021400,0x60,0x50240b15,0x50020400,
-0x60,0x50241581,0x50020080,0x60,0x50244181,0x50021000,0x60,0x50244957,0x50021000,0x60,0x502449be,0x50020400,0x60,0x502449be,0x50021000,0x60,
-0x502449be,0xd0000400,0x18400,0x502449be,0xd0000400,0x18401,0x502449be,0xd0041000,0,0x502c4957,0x80000040,0x1024000,0x502c4b5a,0x80000040,0x1024000,0x50404957,
-0x80000040,0x1400,0x504c4957,0xd0000000,0x15800,0x504c49be,0xd0000000,0x15800};
-#else /* U_DARWIN */
-0x11501480,0x80000080,0x800e,0x11501480,0x80000080,0x800f,0x11502880,0x80000000,0x4008000,0x11512b80,0x80000020,0x800a,0x1151a700,0x80000000,0,0x1151ab80,
-0x80000000,0x8011,0x11520080,0x80000000,0x4008000,0x11529800,0x80000000,0x4008001,0x11529e80,0x80000000,0x4008000,0x11529e80,0x80000020,0x4008000,0x1152a980,0x80000000,
-0x8010,0x1152a980,0x80000020,0x8010,0x1152aa00,0x80000000,0x800c,0x11541400,0x80000000,0x4000000,0x11541400,0x80000000,0x4000002,0x11541400,0x80000080,0x4000002,
-0x11541500,0x80000000,0,0x11548100,0x80000000,0x4000000,0x11549400,0x80000000,0x4000000,0x11549400,0x80000080,0x4000000,0x11549400,0x80000080,0x4000002,0x11549600,
-0x80000000,2,0x1155ab80,0x80000000,0x11,0x11560080,0x80000000,0x4000000,0x11560100,0x80000000,0x4000000,0x1156aa00,0x80000000,0xc,0x11580804,0x80000000,
-0,0x11580c80,0x80000000,0,0x11581500,0x80000000,0,0x11581500,0x80000000,2,0x11581780,0x80000080,0x4000000,0x11581780,0x80000088,0x4000000,
-0x11582700,0x80000000,0,0x11588100,0x80000000,0x4000000,0x11588100,0x80000080,0x4000000,0x11589600,0x80000000,2,0x11591500,0x80000000,0,0x1159ab80,
-0x80000000,0x11,0x115a0080,0x80000000,0x4000000,0x115a0080,0x80000080,0x4000000,0x115a0100,0x80000000,0x4000000,0x115aaa00,0x80000000,0xc,0x115c0100,0x80000020,
-0x4008000,0x115c1400,0x80000020,0x4008000,0x115c1c00,0x80000000,0x4008000,0x115c9400,0x80000020,0x4008000,0x115c9400,0x80000020,0x4009000,0x115e0080,0x80000020,0x4008000,
-0x115e0080,0x80000020,0x4009000,0x11600ca6,0x50020400,0x60,0x11600ca6,0x50021000,0x60,0x11600ca6,0x50060400,0x60,0x11600ca6,0xf0000400,0x18002,0x11600ca6,
-0xf8000400,0x18000,0x11600ca6,0xf8002400,0x18000,0x11600ca6,0xfc000400,0x18000,0x11600d18,0x50020400,0x60,0x11600d18,0x50021000,0x60,0x11600d18,0xf0000400,
-0x18002,0x11600d18,0xf8000400,0x18000,0x11600d18,0xf8000400,0x18002,0x11600d18,0xf8002400,0x18000,0x11600d18,0xfc000400,0x18000,0x116a0080,0x80000001,0x8020000,
-0x116e0080,0x80000000,0x4000000,0x11701400,0x800000,0xc820,0x11740100,1,0x801c020,0x11782a80,0x800000,0xc820,0x11868f12,0xf8000400,0x18480,0x11868f12,
-0xf8800400,0x18480,0x11880f12,0xf8000400,0x18500,0x118c0f12,0xf8000400,0x18520,0x118c0f12,0xf8800400,0x18520,0x20000067,0x810000,0,0x200036e7,0x810000,
-0,0x20003767,0x810000,0,0x2000b6e7,0,0,0x2000b767,0,0,0x20080da7,0x80000000,0,0x20080da7,0xf8000400,0x18400,
-0x20080da7,0xf8000400,0x18401,0x20081319,0xf8000400,0x10401,0x20100da7,0x80000000,0,0x20100da7,0xd0000400,0x18400,0x20140da7,0x80000000,0,0x20200da7,
-0x80000000,0x8000,0x20240593,0x50021000,0x60,0x20240593,0x50021400,0x60,0x20240da7,0x50020400,0x60,0x20240da7,0x50020400,0x61,0x20240da7,0x50020400,
-0x62,0x20240da7,0x50021000,0x60,0x20240da7,0x50061000,0x60,0x20240da7,0xd0001000,0,0x202c0da7,0x80000000,0,0x202c0da7,0x80000040,0,
-0x20300da7,0x80000000,0xb,0x20300da7,0x80000040,0,0x204c0da7,0xd0000000,0x15800,0x20500da7,0x80000000,0x8000,0x20581500,0x80000000,0,0x206425e7,
-0x800000,0,0x20642667,0x800000,0,0x206426e7,0x800000,0,0x207ea512,0xf8000400,0x184c1,0x2082a512,0xf8000400,0x184e1,0x211c2b00,0x80000000,
-0,0x21589500,0x80000000,0,0x30080219,0xf8000400,0x10400,0x30080219,0xf8000400,0x10401,0x30080219,0xf8000400,0x28400,0x30080219,0xf8000400,0x28401,
-0x30080299,0xf8000400,0x10400,0x30080300,0x80001000,0,0x30080300,0xf8001400,0x18400,0x3008040e,0xf8000400,0x10400,0x30080488,0xf8000400,0x10400,0x30080488,
-0xf8000400,0x10401,0x30080488,0xf8000400,0x28400,0x30080488,0xf8000400,0x28401,0x30080602,0x80000000,0,0x30080602,0xf8000400,0x18400,0x300806a2,0x800000,
-0xc820,0x300806a2,0x80000000,0,0x300806a2,0x80000040,0,0x300806a2,0x80000040,0x1024000,0x300806a2,0xf8000400,0x18400,0x30080725,0xf8000400,0x18400,
-0x30080c21,0x80000000,0,0x30080c21,0xf8000400,0x18400,0x30080da7,0x80000000,0,0x30080da7,0xf8000400,0x18400,0x30080e1c,0x80000000,0,0x30080f8b,
-0x80000000,0,0x30080f8b,0x80000040,0,0x30080f8b,0x80000040,0x1024000,0x30080f8b,0xd0000000,0,0x30080f8b,0xf8000400,0x18400,0x30081006,0xf8000400,
-0x18400,0x300810a8,0x80000040,0,0x300810a8,0x80000040,0x1024000,0x300810a8,0xf8000400,0x18400,0x3008111d,0xf8000400,0x18400,0x300811a0,0xf8000400,0x18400,
-0x30081217,0x80000000,0,0x3008129b,0x80000000,0,0x3008129b,0xf8000400,0x18400,0x3008129b,0xf8002400,0x18400,0x30081400,0x80000000,0x4000000,0x30081600,
-0x80000000,0,0x30081600,0xf8000400,0x10405,0x30081680,0xf8000400,0x28400,0x30081700,0x80000000,0x4000000,0x30081800,0x80000000,0x4000000,0x30081880,0x80000000,
-0x4000000,0x30081b00,0x80000000,0x4000000,0x30081b80,0x80000000,0x4000000,0x30081cae,0x80000000,0x4000000,0x30082813,0xf8000400,0x18401,0x30088300,0x80001000,0,
-0x30100503,0x80000018,0,0x30100da7,0x80000000,0,0x30100e1c,0x80000040,0x1024000,0x30100f8b,0x80000040,0,0x3010111d,0x80000001,0x20000,0x30101180,
-0x80000040,0,0x30101217,0x80000000,0,0x30101217,0x80000040,0,0x30101280,0x80000040,0,0x30101280,0x80000040,0x1024000,0x3010129b,0x80000040,
-0,0x3010129b,0x80000040,0x1024000,0x3014129b,0x80000018,0,0x3020111d,0x80000000,0x8000,0x30240488,0x20000,0x60,0x30240601,0x50020400,0x60,
-0x302406a2,0x50020400,0x60,0x302406a2,0x50021000,0x60,0x302406a2,0x50021400,0x60,0x30240725,0x50021400,0x60,0x30240c21,0x50020400,0x60,0x30240c21,
-0x50061000,0x60,0x30240c21,0xd0000400,0x18400,0x30240c21,0xd0000400,0x18401,0x30240da7,0x50020400,0x60,0x30240da7,0x50021000,0x60,0x3024129b,0x50020400,
-0x60,0x3024129b,0x50820000,0x2000060,0x30241581,0x20000,0x60,0x30242b00,0,0xc820,0x30248381,0x50021000,0x60,0x3030129b,0x80000001,0x20000,
-0x30301400,0x80000001,0x2000b,0x30308381,0x50021000,0x60,0x303a9d11,0x80200000,0,0x303a9d11,0x80200000,2,0x303a9d91,0x80200000,2,0x303a9e00,
-0x80080000,0,0x303a9e00,0x80100000,0,0x303a9e80,0x80000000,0,0x303a9e91,0xf8000c00,0x18002,0x303aa185,0xf8000400,0x18400,0x303aa311,0xf8400c00,
-0x18000,0x303aa429,0xf8000400,0x18400,0x303aa4a9,0x80000000,0,0x30481217,0x80000040,0,0x30481400,0x80000040,0x5024002,0x304aa429,0xf8002400,0x18400,
-0x304c0e1c,0xd0000000,0x15800,0x304c1217,0xd0000000,0x15800,0x304c129b,0xd0000000,0x15800,0x3050111d,0x80000000,0x8000,0x30581217,0x80000000,0,0x30581500,
-0x80000000,0,0x30600e1c,0x50020400,0x60,0x30600e1c,0x50021000,0x60,0x30600e1c,0x50061000,0x60,0x30600e1c,0xd0000400,0x18000,0x30600e1c,0xf8000400,
-0x18000,0x30600e1c,0xf8000400,0x18001,0x30601217,0x800000,0xc820,0x30601217,0x50020400,0x60,0x30601217,0x50021000,0x60,0x30601217,0x50061000,0x60,
-0x30601217,0x51021000,0x60,0x30601217,0xd0000400,0x18000,0x30601217,0xf8000400,0x18000,0x30601217,0xf9000400,0x18000,0x310028e7,0x810000,0,0x3108040e,
-0xf8000480,0x10402,0x3108040e,0xf8000480,0x28402,0x31082c1e,0x80000000,0,0x31082c1e,0xf8000400,0x18400,0x31082c8d,0xf8000400,0x18400,0x31082d09,0xf8000400,
-0x10400,0x31082d09,0xf8000400,0x28400,0x31082d80,0x80000000,0,0x31082e00,0x80000000,0,0x31082e00,0x80000000,1,0x31082e80,0x80000080,5,
-0x31082e80,0xf8000480,0x10405,0x31082e80,0xf8000480,0x28405,0x31242e00,0x800000,0xc820,0x31242e00,0x50020000,0x60,0x31242e00,0x50021000,0x60,0x31242e00,
-0xd0000000,0,0x31242e00,0xd0001000,0,0x31242e01,0x50021000,0x60,0x31243000,0x800000,0xc820,0x313aaf11,0xf8400c00,0x18000,0x313aaf91,0xf8000c00,
-0x18001,0x314c2e80,0xd0000080,0x15805,0x32041b80,0x80000000,0x4000000,0x32049980,0x80000000,0,0x32080219,0xf8000400,0x28400,0x3208040e,0x80000080,0,
-0x3208040e,0xf8000400,0x10400,0x3208040e,0xf8000400,0x28400,0x32080488,0xf8000400,0x10400,0x32080488,0xf8000400,0x28400,0x32080602,0xf8000400,0x18400,0x32080725,
-0xf8000400,0x18400,0x32080e8c,0xf8000400,0x18400,0x32081400,0x800080,0xc820,0x32081400,0x80000000,0x4000000,0x32081400,0x80000000,0x4000002,0x32081400,0x80000080,
-0x4000000,0x32081499,0xf8000400,0x1040f,0x32081600,0x80000000,0,0x32081600,0x80000080,0,0x32081600,0x80000080,5,0x32081600,0xf8000480,0x10405,
-0x32081600,0xf8000480,0x28405,0x32081700,0x80000080,0x4000000,0x32081780,0x80000080,0x4000000,0x32081800,0x80000000,0x4000000,0x32081800,0x80000080,0x4000000,0x32081a80,
-0x80000000,0x4000000,0x32081b00,0x80000080,0x4000000,0x32081b80,0x80000000,0x4000000,0x32082a82,0xf8000400,0x18400,0x32083088,0xf8000400,0x10400,0x32083088,0xf8000400,
-0x28400,0x3208312a,0xf8000400,0x18400,0x320831ab,0xf8000400,0x18400,0x3208322c,0xf8000400,0x18400,0x320832ad,0xf8000400,0x18400,0x32083300,0x80000080,0x4000000,
-0x32083380,0x80000080,0x4000000,0x32083400,0x80000080,0x4000000,0x32083480,0x80000080,0x4000000,0x32083500,0x80000080,0x4000000,0x32083500,0x80000080,0x4000001,0x32083500,
-0x80000080,0x4000002,0x32101400,0x80000001,0x20002,0x32103180,0x80000000,0,0x32201c00,0x80000000,0x4008000,0x32203480,0x80000080,0x4008000,0x3221ab80,0x80000000,
-0x8011,0x32223300,0x80000080,0x4008000,0x32223480,0x80000080,0x4008000,0x32241581,0x20000,0x60,0x32241581,0x50020000,0x60,0x32241581,0x50020080,0x60,
-0x3224312a,0x50020400,0x60,0x3224312a,0x50060000,0x60,0x322431ab,0x50020400,0x60,0x322431ab,0x50060000,0x60,0x3224322c,0x50020400,0x60,0x322432ad,
-0x50020400,0x60,0x32248381,0x50020000,0x60,0x3224b601,0x50820000,0x2000060,0x32308381,0x50820000,0x60,0x323a9e80,0x80000000,0,0x323a9f14,0xf8000400,
-0x18010,0x323a9f96,0xf8000400,0x18c10,0x323aa200,0x80000000,3,0x323aa4a9,0x80000000,0,0x323aa791,0xf8000400,0x18401,0x323aa980,0x80000000,0x4000000,
-0x32481400,0x80000040,0x5024002,0x324a9e80,0xf8000400,0x18400,0x324a9e91,0xf8000400,0x18400,0x324a9f14,0xf8000400,0x18000,0x324a9f80,0x80000008,0xc00,0x324ab596,
-0xf8000400,0x18c00,0x32501c00,0x80000000,0x4008000,0x32503480,0x80000080,0x4008000,0x3251ab80,0x80000000,0x8011,0x32523300,0x80000080,0x4008000,0x32523480,0x80000080,
-0x4008000,0x32542882,0x80000000,8,0x32581500,0x80000000,0,0x32781400,0x800000,0xc820,0x40049b80,0x80000000,0x4000000,0x40080219,0xf8000400,0x10400,
-0x40080299,0xf8000400,0x10400,0x40080300,0x80001000,0,0x4008040e,0xf8000400,0x10400,0x4008040e,0xf8000400,0x28400,0x4008040e,0xf8000400,0x28402,0x40080600,
-0x800000,0xc820,0x40080602,0x80000000,0,0x40080602,0xf8000400,0x18400,0x400806a2,0xf8000400,0x18400,0x4008078a,0xf8000400,0x18400,0x40080804,0xf8000400,
-0x18400,0x4008090f,0xf8000400,0x18400,0x4008099f,0xf8000400,0x18400,0x40080a23,0x80000000,0,0x40080b15,0xf8000400,0x18400,0x40081217,0x80000000,0,
-0x40081400,0x80000008,0x4000000,0x40081400,0xd0000000,0x1c00,0x40081600,0x80000000,2,0x40081800,0x80000000,0x4000000,0x40081800,0x80000080,0x4000000,0x40081b80,
-0x80000000,0x4000000,0x40082880,0x80000000,0,0x40082d09,0xf8000400,0x10400,0x40082d09,0xf8000400,0x28400,0x40082e80,0xf8000480,0x10405,0x400837b0,0x80000000,
-0,0x400837b0,0xf8000400,0x18400,0x40083897,0x80000000,0,0x40083908,0xf8000400,0x10400,0x4008390e,0xf8000400,0x10400,0x4008390e,0xf8001400,0x1040e,
-0x4008390e,0xf8001400,0x1040f,0x40083919,0xf8000400,0x10400,0x40083919,0xf8001400,0x10400,0x40083919,0xf8001400,0x1040e,0x40083919,0xf8001400,0x1040f,0x40083980,
-0x80000000,0x4000000,0x40083a00,0x80000000,0,0x40083ab1,0xf8000400,0x18400,0x40083b31,0xf8000400,0x18400,0x40083b80,0x80000000,0,0x40083c35,0xf8000400,
-0x18400,0x40083cb3,0xf8000400,0x18400,0x40083d32,0xf8000400,0x18400,0x40083daf,0xf8000400,0x18400,0x40083e00,0x80000000,0,0x40089980,0x80000000,0,
-0x40103b80,0x80000000,0,0x40103c35,0x80000040,0,0x4022a980,0x80000000,0x8010,0x40240602,0x50020400,0x60,0x40240602,0x50021000,0x60,0x40240602,
-0x50021400,0x60,0x40240890,0x50020400,0x60,0x40240890,0xd0000400,0x18400,0x4024090f,0x50020400,0x60,0x40240b15,0x50021000,0x60,0x402437b0,0x50020400,
-0x60,0x402437b0,0x50021000,0x60,0x402437b0,0xd0000400,0x18400,0x40248381,0x50021000,0x60,0x4024be81,0x50820000,0x2000060,0x402c37b0,0x80000040,0x1024000,
-0x40308381,0x50021000,0x60,0x403aa200,0x80000000,0xd,0x403aa212,0x80000000,2,0x403aa212,0x80000000,3,0x403aa280,0x80000000,0xd,0x40400602,
-0x80000000,0x1400,0x404c37b0,0xd0000000,0x15800,0x404c3d32,0xd0000000,0x15800,0x4052a980,0x80000000,0x8010,0x4058090f,0x80000000,0,0x40580a23,0x80000000,
-0,0x40601217,0x50021000,0x60,0x40603834,0xf8000400,0x18000,0x41080219,0xf8000400,0x10400,0x41080219,0xf8000400,0x28400,0x4108040e,0xf8000400,0x10400,
-0x4108040e,0xf8000400,0x28400,0x41080488,0xf8000400,0x10400,0x41080488,0xf8000400,0x28400,0x4108078a,0xf8000400,0x18400,0x41080804,0xf8000400,0x18400,0x41080a23,
-0xf8000400,0x18400,0x41080e8c,0xf8000400,0x18400,0x41080e8c,0xf8000400,0x1840f,0x41080f8b,0x80000000,0,0x41080f8b,0xf8000400,0x18400,0x41081400,0x80000000,
-0x4000000,0x41081499,0xf8000400,0x1040e,0x41081600,0x80000000,0,0x41081600,0xf8000480,0x10405,0x41081800,0x80000000,0x4000000,0x41081b80,0x80000000,0x4000000,
-0x41082e80,0xf8000480,0x10405,0x41083300,0x80000080,0x4000000,0x41083908,0xf8000400,0x1040f,0x41083919,0xf8000400,0x10400,0x41083980,0x80000000,0x4000000,0x41083f0e,
-0x80000000,0,0x41083f8e,0x80000000,0,0x41083f8e,0xf8000400,0x18400,0x41084002,0xf8000400,0x18400,0x410840b7,0x80000000,0,0x410840b7,0xf8000400,
-0x18400,0x41084207,0x80000000,0,0x41084207,0xf8000400,0x10400,0x41084207,0xf8000400,0x28400,0x4108428b,0xf8000400,0x18400,0x4108430b,0x80000000,0,
-0x4108430b,0xf8000400,0x18400,0x4108438c,0xf8000400,0x10400,0x41084438,0xf8000400,0x10400,0x41084438,0xf8000400,0x28400,0x410844b9,0x80000000,0,0x410844b9,
-0xf8000400,0x18400,0x41084500,0x80000000,0,0x4108463d,0xf8000400,0x18400,0x4108468e,0xf8000400,0x1040f,0x41084699,0xf8000400,0x10400,0x41084699,0xf8000400,
-0x1040f,0x41084700,0x80000000,0x4000000,0x410847ba,0x80000000,0,0x410847ba,0xf8000400,0x18400,0x4108483c,0xf8000400,0x18400,0x4108483c,0xf8000400,0x1840f,
-0x41101400,0x80000000,0x4000000,0x411040b7,0x80000000,0,0x41104207,0x80000000,0,0x411044b9,0x80000000,0,0x4110463d,0x80000040,0,0x41104700,
-0x80000000,0x4000000,0x41104700,0x80000018,0x4000000,0x41140da7,0x80000000,0,0x41203300,0x80000080,0x4008000,0x4122c880,0x80000000,0x10,0x4122c880,0x80000000,
-0x8010,0x41240593,0x50020000,0x60,0x41240593,0x50020400,0x60,0x41240602,0x50020400,0x60,0x41240f8b,0x50020400,0x60,0x41241581,0x50020000,0x60,
-0x41243f0e,0x50020000,0x60,0x412440b7,0x50020400,0x60,0x412440b7,0xd0000400,0x18400,0x41244181,0x50020000,0x60,0x412444b9,0x50020000,0x60,0x412444b9,
-0x50020400,0x60,0x412444b9,0x50060000,0x60,0x412447ba,0x50020000,0x60,0x412447ba,0x50020400,0x60,0x412447ba,0x50060000,0x60,0x412447ba,0xd0000000,
-0,0x412447ba,0xd0000400,0x18400,0x41248381,0x50020000,0x60,0x412c0593,0x80000000,0,0x412c0602,0x80000000,0,0x412ec880,0x80000000,0x10,
-0x41308381,0x50020000,0x60,0x413aa200,0x80000000,3,0x413aa391,0xf8400c00,0x18000,0x413aa791,0xf8000c00,0x18001,0x413ac100,0x80000000,0,0x413ec880,
-0x80000000,0x10,0x4142c880,0x80000000,0x1410,0x414c0a23,0xd0000000,0x15800,0x414c45bb,0xd0000000,0x15800,0x41503300,0x80000080,0x4008000,0x4152c880,0x80000000,
-0x8010,0x41540602,0x80000000,0,0x41581500,0x80000000,0,0x415c4700,0x80000000,0x4008000,0x416045bb,0x80000000,0,0x416045bb,0xd0000400,0x18000,
-0x416045bb,0xf8000400,0x18000,0x50080219,0xf8000400,0x10400,0x50080219,0xf8000400,0x28400,0x5008040e,0xf8000400,0x10400,0x50080488,0xf8000400,0x10400,0x50080488,
-0xf8000400,0x28400,0x5008078a,0xf8000400,0x18400,0x50080b15,0x80000000,0,0x50081600,0x80000000,0,0x50081619,0xf8000400,0x10400,0x50081699,0xf8000400,
-0x10400,0x50081800,0x80000000,0x4000000,0x50081800,0x80000080,0x4000000,0x50081b80,0x80000000,0x4000000,0x50082e80,0xf8000480,0x10405,0x50082e80,0xf8000480,0x28405,
-0x50083088,0xf8000400,0x10400,0x50083088,0xf8000400,0x28400,0x50083300,0x80000080,0x4000000,0x50083980,0x80000000,0x4000000,0x50084500,0xf8001400,0x18400,0x50084957,
-0x80000000,0,0x50084957,0xf8000400,0x18400,0x50084957,0xf8001400,0x18400,0x50084957,0xf8002400,0x18400,0x500849be,0x80000000,0,0x500849be,0xf8000400,
-0x18400,0x500849be,0xf8000400,0x18401,0x50084a19,0xf8000400,0x10400,0x50084a19,0xf8000400,0x28400,0x50084a80,0x80001000,0,0x50084b5a,0xf8000400,0x18400,
-0x50084bdb,0x80000000,0,0x50084bdb,0xf8000400,0x18400,0x50084c65,0xf8000400,0x18400,0x50084ce5,0xf8000400,0x18400,0x50084d00,0x80000000,0,0x501049be,
-0x80000000,0,0x501049be,0x80000040,0,0x501049be,0x80000040,0x1024000,0x50104bdb,0x80000040,0,0x50104ce5,0x80000040,0,0x50144b5a,0x80000000,
-0,0x50240593,0x50021400,0x60,0x50240b15,0x50020400,0x60,0x50241581,0x50020080,0x60,0x50244181,0x50021000,0x60,0x50244957,0x50021000,0x60,
-0x502449be,0x50020400,0x60,0x502449be,0x50021000,0x60,0x502449be,0xd0000400,0x18400,0x502449be,0xd0000400,0x18401,0x502449be,0xd0041000,0,0x502c4957,
-0x80000040,0x1024000,0x502c4b5a,0x80000040,0x1024000,0x50404957,0x80000040,0x1400,0x504c4957,0xd0000000,0x15800,0x504c49be,0xd0000000,0x15800};
+static const uint32_t propsVectors[3891]={
+#else /* U_DARWIN */
+static const uint32_t propsVectors[3945]={
+#endif /* U_DARWIN */
+0x67,0,0,0x67,0x80000,0,0x867,0,0,0xa67,0,0,0xb67,0,0,0xc67,
+0,0,0xd67,0,0,0xe67,0,0,0xf67,0,0,0x1067,0,0,0x1167,0,
+0,0x1267,0,0,0x1367,0,0,0x1467,0,0,0x1567,0,0,0x1667,0,0,
+0x1767,0,0,0x1867,0,0,0x1967,0,0,0x1a67,0,0,0x1b67,0,0,0x1c67,
+0,0,0x1d67,0,0,0x1e67,0,0,0x1f67,0,0,0x2067,0,0,0x2167,0,
+0,0x2267,0,0,0x2367,0,0,0x2467,0,0,0x2567,0,0,0x2767,0,0,
+0x2867,0x80000,0,0x2967,0,0,0x2a67,0,0,0x2b67,0,0,0x2d67,0,0,0x3067,
+0x20000000,0,0x3167,0x20000000,0,0x3267,0x20000000,0,0x3767,0x20000000,0,0x3867,0x20000000,0,0x3a67,0,
+0,0x3b67,0,0,0x3c67,0,0,0x3e67,0,0,0x4067,0,0,0x4167,0,0,
+0x4367,0,0,0x4467,0,0,0x4667,0,0,0x4767,0,0,0x4867,0,0,0x4967,
+0,0,0x4a67,0,0,0x4f67,0,0,0x5067,0,0,0x5167,0,0,0x5267,0,
+0,0x5467,0,0,0x5567,0,0,0x5667,0x80000,0,0x5767,0,0,0x5867,0,0,
+0x5967,0,0,0x5b67,0,0,0x5c67,0,0,0x5d67,0,0,0x6067,0x80000,0,0x6167,
+0,0,0x6267,0,0,0x6367,0,0,0x6467,0,0,0x6567,0,0,0x6667,0x20000000,
+0,0x6f67,0,0,0x7067,0,0,0x7367,0x20000000,0,0x7567,0,0,0x7667,0,0,
+0x7767,0,0,0x7867,0,0,0x7a67,0,0,0x7b67,0,0,0x7c67,0,0,0x7e67,
+0,0,0x7f67,0,0,0x8167,0,0,0x8267,0,0,0x8367,0,0,0x8467,0,
+0,0x8567,0,0,0x8667,0,0,0x8767,0,0,0x8867,0,0,0x8967,0,0,
+0x8b67,0,0,0x8c67,0,0,0x8e67,0x20000000,0,0x8f67,0,0,0x9067,0,0,0x9167,
+0,0,0x9267,0,0,0x9367,0,0,0x9467,0,0,0x9567,0,0,0x9667,0,
+0,0x9767,0,0,0x9867,0,0,0x9967,0,0,0x9a67,0,0,0x9b67,0,0,
+0x9c67,0,0,0x9f67,0,0,0xa067,0,0,0xa167,0,0,0xa367,0,0,0xa467,
+0,0,0xa567,0,0,0xa667,0,0,0xa767,0,0,0xa867,0,0,0xa967,0,
+0,0xaa67,0,0,0xab67,0,0,0xa0067,0,0,0xa5e67,0,0,0xa5f67,0,0,
+0x11000100,0,0x900020,0x11000100,0x40000001,0x440020,0x11000100,0x40000001,0x643020,0x11000100,0x40000001,0xa5a040,0x11000100,0x40000001,0x116a8a0,0x11000200,
+0,0x900020,0x11000200,0x4000001,0xc4000b,0x11000200,0x7c00100,0x220402,0x11000200,0x24000000,0x200000,0x11000200,0x24000008,0x1710000,0x11000200,0x40000001,
+0x1d3b020,0x11000219,0x7c00100,0x220401,0x11000219,0x7c00100,0x250401,0x11000319,0x7c00100,0x220401,0x11000319,0x7c00100,0x220402,0x11000319,0x7c00100,0x250400,
+0x11000319,0x7c00100,0x250401,0x11000419,0x7c00100,0x220400,0x11000419,0x7c00100,0x220401,0x11000419,0x7c00100,0x220402,0x11000419,0x7c00100,0x230400,0x11000419,
+0x7c00100,0x250400,0x11000419,0x7c00100,0x250401,0x11000419,0x7c00100,0x250402,0x11000519,0x7c00100,0x220400,0x11000519,0x7c00100,0x230400,0x11000600,0x4000400,
+0x200000,0x11000600,0x4000400,0x200002,0x11000600,0x7c00500,0x220400,0x11000600,0x7c00500,0x230400,0x11000600,0x7c00500,0x530400,0x11000600,0x7c00d00,0x230400,
+0x11000619,0x7c00500,0x22040f,0x11000800,0x4000010,0x1001401,0x11000800,0x4000400,0x200001,0x11000800,0x6800010,0x201001,0x11000800,0x7c00500,0x230401,0x11000807,
+0x7c00100,0x220400,0x11000807,0x7c00100,0x250400,0x1100080e,0x4000400,0x200000,0x1100080e,0x4000400,0x200002,0x1100080e,0x7000500,0x220402,0x1100080e,0x7c00100,
+0x220400,0x1100080e,0x7c00100,0x220401,0x1100080e,0x7c00100,0x220402,0x1100080e,0x7c00100,0x250400,0x1100080e,0x7c00100,0x250401,0x1100080e,0x7c00120,0x220402,
+0x1100080e,0x7c00120,0x250402,0x11000908,0x2802400,0x962460,0x11000908,0x4000000,0x200000,0x11000908,0x7c00100,0x220400,0x11000908,0x7c00100,0x220401,0x11000908,
+0x7c00100,0x250400,0x11000908,0x7c00100,0x250401,0x11000a00,0xc000010,0x1049400,0x11000a03,0x4000000,0x200000,0x11000a03,0x4000000,0x270000,0x11000a03,0x7c00100,
+0x220400,0x11000a03,0x7c00100,0x220402,0x11000a03,0x7c00100,0x250400,0x11000a03,0x7c00500,0x230400,0x11000a03,0xc000000,0x248000,0x11000b13,0x2802500,0x962460,
+0x11000b13,0x4000000,0x200000,0x11000b13,0x4000000,0x201000,0x11000b13,0x4000000,0x230400,0x11000b13,0x4000002,0x400000,0x11000b13,0x4000010,0x200000,0x11000b13,
+0x7c00100,0x230400,0x11000c00,0,0x218820,0x11000c00,0x4000010,0xb00000,0x11000c00,0x4000010,0x1071400,0x11000c00,0x6800000,0x1329800,0x11000c00,0x7c00900,
+0x230400,0x11000c00,0xc000010,0xb48000,0x11000c01,0x2802100,0x962460,0x11000c01,0x2802500,0x962460,0x11000c02,0x2000,0x962460,0x11000c02,0x2802100,0x962460,
+0x11000c02,0x2802400,0x962460,0x11000c02,0x4000000,0x200000,0x11000c02,0x4000000,0x1329400,0x11000c02,0x4000000,0x1329800,0x11000c02,0x4000000,0x1500000,0x11000c02,
+0x6800000,0x1329800,0x11000c02,0x7c00100,0x230400,0x11000c02,0x7c00100,0x230401,0x11000c02,0x7c00100,0x230402,0x11000c02,0x7c00500,0x230400,0x11000c02,0xc000010,
+0xb48000,0x11000f00,0x4000000,0x200000,0x11000f00,0xc000010,0x448000,0x11000f01,0x2802400,0x962460,0x11000f0a,0x2802100,0x962460,0x11000f0a,0x2802400,0x962460,
+0x11000f0a,0x2806400,0x962460,0x11000f0a,0x6800000,0x1329800,0x11000f0a,0x6800100,0x962540,0x11000f0a,0x7c00100,0x230400,0x11000f0a,0x7c00100,0x230401,0x11001004,
+0x2802100,0x962460,0x11001004,0x2802400,0x962460,0x11001004,0x2806400,0x962460,0x11001004,0x4000000,0x200000,0x11001004,0x4000000,0x1600000,0x11001004,0x6800000,
+0x1329800,0x11001004,0x6800100,0x962540,0x11001004,0x6800100,0x962541,0x11001004,0x7c00100,0x230400,0x11001004,0x7c00100,0x230401,0x11001110,0x2802100,0x962460,
+0x11001110,0x2802400,0x962460,0x11001110,0x2806400,0x962460,0x11001110,0x6800000,0x1329800,0x11001110,0x6800100,0x962540,0x11001110,0x7c00100,0x230400,0x11001110,
+0x7c00100,0x230401,0x1100120f,0x2802100,0x962460,0x1100120f,0x2802400,0x962460,0x1100120f,0x2806400,0x962460,0x1100120f,0x6800000,0x1329800,0x1100120f,0x6800100,
+0x962540,0x1100120f,0x7c00100,0x230400,0x1100131f,0x2802100,0x962460,0x1100131f,0x2802400,0x962460,0x1100131f,0x2806400,0x962460,0x1100131f,0x4000000,0x200000,
+0x1100131f,0x6800000,0x1329800,0x1100131f,0x6800100,0x962540,0x1100131f,0x6800100,0x962541,0x1100131f,0x7c00100,0x230400,0x1100131f,0x7c00100,0x230401,0x11001423,
+0x2802100,0x962460,0x11001423,0x2806400,0x962460,0x11001423,0x4000000,0x200000,0x11001423,0x6800000,0x1329800,0x11001423,0x6800100,0x962540,0x11001423,0x6800100,
+0x962541,0x11001423,0x7c00100,0x230400,0x11001423,0x7c00100,0x230401,0x11001524,0x2802100,0x962460,0x11001524,0x2802100,0x962461,0x11001524,0x2806400,0x962460,
+0x11001524,0x6800000,0x1329800,0x11001524,0x6800100,0x962540,0x11001524,0x7c00100,0x230400,0x11001615,0x2802100,0x962460,0x11001615,0x2806400,0x962460,0x11001615,
+0x6800000,0x1329800,0x11001615,0x6800100,0x962540,0x11001615,0x6800100,0x962541,0x11001615,0x7c00100,0x230400,0x1100171a,0x2802100,0x962460,0x1100171a,0x2806400,
+0x962460,0x1100171a,0x6800000,0x1329800,0x1100171a,0x6800100,0x962540,0x1100171a,0x6800100,0x962541,0x1100171a,0x7c00100,0x230400,0x11001900,0x4000000,0x1600000,
+0x11001926,0x2802100,0x1862460,0x11001926,0x2802400,0x1862460,0x11001926,0x2806100,0x1862460,0x11001926,0x4000000,0x200000,0x11001926,0x4000010,0x400000,0x11001926,
+0x6800000,0x1329800,0x11001926,0x7800100,0x1830062,0x11001926,0x7c00100,0x1830000,0x11001926,0x7c00100,0x1830060,0x11001926,0x7c00900,0x1830000,0x11001926,0x7e00100,
+0x1830160,0x11001a18,0x2802100,0x1862460,0x11001a18,0x2802400,0x1862460,0x11001a18,0x6800000,0x1329800,0x11001a18,0x7800100,0x1830062,0x11001a18,0x7c00100,0x1830000,
+0x11001a18,0x7c00100,0x1830002,0x11001a18,0x7c00100,0x1830060,0x11001a18,0x7c00900,0x1830000,0x11001a18,0x7e00100,0x1830160,0x11001d00,0x4000000,0x200000,0x11001d0c,
+0x7c00100,0x230400,0x11001d0c,0x7c00100,0x250400,0x11001e12,0x7c00100,0x2230500,0x11001e12,0x7c00100,0x2330520,0x11001e12,0x7c80100,0x2330520,0x11002619,0x7c00100,
+0x220401,0x11002619,0x7c00100,0x220402,0x11002619,0x7c00100,0x250401,0x1100270e,0x4000400,0x200001,0x1100270e,0x4000400,0x200002,0x1100270e,0x4000400,0x500001,
+0x1100270e,0x7c00100,0x220401,0x1100270e,0x7c00100,0x250401,0x11002800,0x80000,0x918820,0x11002800,0x80000,0x1c18820,0x11002800,0x180000,0x918820,0x11002800,
+0x4000001,0x440001,0x11002800,0x4000001,0x440002,0x11002800,0x4000001,0xc4000b,0x11002800,0x6800000,0x201c00,0x11002800,0x6800020,0x201c00,0x11002800,0x24000000,
+0x200000,0x11002800,0x24000000,0x200002,0x11002800,0x24000000,0x810000,0x11002800,0x24000000,0x1410000,0x11002800,0x24000000,0x1500000,0x11002800,0x24000000,0x1500002,
+0x11002800,0x24000002,0x400000,0x11002800,0x24000006,0xc0000b,0x11002800,0x24000008,0x1410000,0x11002800,0x24000008,0x1710000,0x11002800,0x24000020,0x1001400,0x11002800,
+0x24000020,0x1500002,0x11002800,0x2c000010,0x1248000,0x11002800,0x2c000010,0x1248002,0x11002800,0x40000001,0x63b020,0x11002800,0x40080000,0x918820,0x11002801,0x82000,
+0x962460,0x11002900,0x4000000,0x20000e,0x11002900,0x4000000,0x20000f,0x11002900,0x4000020,0x20000e,0x11002900,0x4000020,0x20000f,0x11002900,0x4000020,0x81000e,
+0x11002900,0x4000020,0x81000f,0x11002900,0x4000020,0x141000e,0x11002900,0x4000020,0x141000f,0x11002900,0x4000022,0x20000e,0x11002900,0x4000022,0x20000f,0x11002a00,
+0x4000000,0x1500000,0x11002a00,0x4000000,0x1600000,0x11002a00,0x4000000,0x1600002,0x11002b01,0x2000,0x962460,0x11002b01,0x2802020,0x962460,0x11002c00,0x4000000,
+0x200000,0x11002c00,0x4000000,0x200002,0x11002c00,0x4000000,0x20000f,0x11002c00,0x4000020,0x200000,0x11002c00,0x7c00000,0x200000,0x11002c00,0x7c00100,0x250402,
+0x11002c00,0x7c00120,0x220405,0x11002c00,0x7c00120,0x230402,0x11002c00,0x7c00120,0x250405,0x11002c19,0x7c00100,0x250400,0x11002c19,0x7c00100,0x250401,0x11002d00,
+0x4000000,0x100006,0x11002d00,0x4000000,0x200006,0x11002d19,0x7c00100,0x220402,0x11002d19,0x7c00100,0x230400,0x11002d19,0x7c00100,0x250402,0x11002e00,0x24000000,
+0x200000,0x11002e00,0x24000020,0x200000,0x11002e00,0x24000020,0x200001,0x11002f00,0x24000020,0x200000,0x11002f00,0x24000020,0x200001,0x11002f00,0x24000020,0x200002,
+0x11002f00,0x24000020,0x1600000,0x11002f00,0x24000022,0x1600000,0x11003000,0x24000000,0x200000,0x11003000,0x24000020,0x200000,0x11003100,0x24000000,0x200000,0x11003200,
+0x24000000,0x200000,0x11003300,0x4000000,0x100003,0x11003400,0x24000000,0x100000,0x11003400,0x24000000,0x200000,0x11003500,0x24000000,0x200000,0x11003600,0x24000000,
+0x200000,0x11003600,0x24000020,0x200000,0x11003700,0x24000000,0x200000,0x11003700,0x24000020,0x200000,0x11003800,0x4000000,0x100000,0x11003800,0x24000000,0x200000,
+#ifndef U_DARWIN
+0x11003800,0x24000000,0xb00000,0x11003800,0x24000000,0x1710000,0x11003d00,0x4000000,0xe00000,0x11005003,0x7c00100,0x220402,0x11005013,0x2802500,0x962460,0x11005013,
+0x4000020,0x200005,0x11005013,0x7c00100,0x230401,0x11005013,0x7c00100,0x230402,0x11005013,0x7c00100,0x230405,0x11005019,0x7c00100,0x220402,0x11005100,0x24000000,
+0x810000,0x11005100,0x24000000,0x1410000,0x11005102,0x7000100,0x230408,0x11005102,0x7c00100,0x230404,0x11005102,0x7c00100,0x230407,0x11005102,0x7c00100,0x230408,
+0x11005102,0x7c00100,0x230409,0x11005201,0x2802400,0x962460,0x11005500,0x80000,0x1e18820,0x11005502,0x7000100,0x230408,0x11005502,0x7c00100,0x230404,0x11005502,
+0x7c00100,0x230407,0x11005502,0x7c00100,0x230408,0x11005502,0x7c00100,0x230409,0x11005667,0x1000,0,0x11020200,0x80004,0x418820,0x11020200,0x4000000,
+0x100006,0x11020200,0x4000000,0x10000f,0x11020200,0x4000400,0x100002,0x11020200,0x4000400,0x500002,0x11020200,0x6800c00,0x101000,0x11020200,0x24000000,0x100000,
+0x11020200,0x24000000,0x200000,0x11020200,0x24000000,0x1400000,0x11020200,0x24000000,0x1500000,0x11020200,0x24000000,0x1600000,0x11020200,0x24000020,0x100000,0x11020200,
+0x24000020,0x1600000,0x11020219,0x7c00100,0x12040f,0x11020219,0x7c00100,0x220400,0x11020219,0x7c00100,0x220401,0x11020219,0x7c00100,0x250400,0x11020319,0x7c00100,
+0x220400,0x11020319,0x7c00100,0x220401,0x11020319,0x7c00100,0x220402,0x11020319,0x7c00100,0x250400,0x11020319,0x7c00100,0x250402,0x11020419,0x7c00100,0x220401,
+0x11020519,0x7c00100,0x220400,0x11020600,0x4000400,0x100002,0x11020600,0x4000400,0x200000,0x11020600,0x7c00500,0x130400,0x11020600,0x7c00d00,0x130400,0x11020701,
+0x2802400,0x962460,0x11020701,0x2802400,0x962461,0x11020701,0x2802400,0xc62460,0x11020701,0x2802500,0x962460,0x11020701,0x2902400,0x962461,0x1102080e,0x7c00100,
+0x220400,0x1102080e,0x7c00100,0x250400,0x11020908,0x7c00100,0x220400,0x11020908,0x7c00100,0x220401,0x11020908,0x7c00100,0x250400,0x11020908,0x7c00100,0x250401,
+0x11022800,0x24000000,0x100000,0x11022800,0x24000000,0x200000,0x11022800,0x24000000,0x200002,0x11022800,0x24000000,0x401000,0x11022800,0x24000000,0xf00002,0x11022800,
+0x24000000,0xf0ac02,0x11022800,0x24000000,0x1500000,0x11022800,0x24000002,0x100000,0x11022800,0x24000002,0x370000,0x11022800,0x24000002,0x470000,0x11022800,0x24000006,
+0x400000,0x11022800,0x24000008,0x1710000,0x11022800,0x24000008,0x1712c00,0x11022800,0x24000020,0x100000,0x11022800,0x24000020,0x1500000,0x11022800,0x24000020,0x1500002,
+0x11022900,0x4000000,0x10000e,0x11022900,0x4000000,0x10000f,0x11022919,0x7c00100,0x12040f,0x11022c00,0x4000000,0x100002,0x11022c00,0x4000000,0x10000f,0x11022c00,
+0x4000000,0x1500002,0x11022c00,0x4000000,0x1600002,0x11022c00,0x7c00120,0x120405,0x11022c0e,0x7c00100,0x250401,0x11022c19,0x7c00100,0x150401,0x11022d00,0x4000000,
+0x100006,0x11022d00,0x4000000,0x200006,0x11022d19,0x7c00100,0x120402,0x11022d19,0x7c00100,0x150402,0x11022e00,0x24000000,0x200000,0x11022e00,0x24000020,0x100000,
+0x11022f00,0x24000020,0x100000,0x11022f00,0x24000020,0x100001,0x11022f00,0x24000020,0x100002,0x11023000,0x24000000,0x100000,0x11023300,0x4000000,0x100002,0x11023300,
+0x4000000,0x100003,0x11023300,0x4000100,0x120403,0x11023300,0x4000100,0x150403,0x11023400,0x24000000,0x100000,0x11023500,0x24000000,0x100000,0x11023600,0x24000000,
+0x100000,0x11023600,0x24000020,0x100000,0x11023700,0x24000000,0x100000,0x11023700,0x24000020,0x100000,0x11023800,0x4000000,0x100000,0x11023800,0x24000000,0x200000,
+0x11024e67,0,0,0x11025600,0x4000000,0x100000,0x11042a00,0x4000000,0x1600000,0x11045700,0x3802500,0x126246a,0x11045700,0x4000000,0x20000a,0x11045700,
+0x4000004,0x120000a,0x11045700,0x4000008,0x81000a,0x11045700,0x4000008,0x141000a,0x11045700,0x4000010,0x87000a,0x11045700,0x4000020,0x20000a,0x11045700,0x7c00d00,
+0x1230c0a,0x11045700,0xc000010,0x84800a,0x11045712,0x7c00100,0x23040a,0x11045712,0x7c80100,0x23040a,0x11045716,0x7c00100,0x230c0a,0x11045716,0x7c00100,0x1230c0a,
+0x11063d00,0x4000001,0xe40011,0x11065700,0x4000000,0x810011,0x11065700,0x4000000,0xe00011,0x11065700,0x4000000,0x1410011,0x11065700,0x4000000,0x1500011,0x11065700,
+0x4000000,0x1600011,0x11065700,0x4000006,0xe70011,0x11065700,0x4000008,0xe00011,0x11065700,0x4000008,0xe02c11,0x11065700,0x4000010,0x871411,0x11065700,0x4000010,
+0x1201411,0x11065700,0x4000010,0x1271011,0x11065700,0x4000020,0xe00011,0x11065700,0x4000400,0xe00011,0x11065700,0x4000420,0xe00011,0x11065700,0x6800000,0xe01c11,
+0x11065700,0x6800040,0xe00011,0x11065700,0xc000010,0x80ac11,0x11065700,0xc000010,0xb48011,0x11065719,0x7c00100,0xe20411,0x11065719,0x7c00100,0xe50411,0x11065719,
+0x7c00140,0xe20411,0x11065719,0x7c00140,0xe50411,0x11080100,0x6800000,0x201c00,0x11080100,0x68000c0,0x1329800,0x11080100,0x24000000,0x200000,0x11080100,0x24000000,
+0x810000,0x11080100,0x24000000,0x1410000,0x11080100,0x24000000,0x1500000,0x11080100,0x24000000,0x1600000,0x11080100,0x24000000,0x1b00000,0x11080100,0x24000006,0xd70000,
+0x11080100,0x24000008,0x1710000,0x11080100,0x24000008,0x1712c00,0x11080100,0x24000010,0x1001400,0x11080100,0x24000010,0x1071000,0x11080100,0x24000010,0x1071400,0x11080100,
+0x24000020,0x200000,0x11080100,0x24000020,0x400000,0x11080100,0x24000020,0x1600000,0x11080100,0x24000400,0x200000,0x11080100,0x24000420,0x200000,0x11080100,0x2c000010,
+0xb48000,0x11080100,0x2c000010,0x100ac00,0x11080100,0x44000001,0x1a40000,0x11080119,0x7c00100,0x220400,0x11080119,0x7c00100,0x250400,0x11080119,0x7c001c0,0x220400,
+0x11080119,0x7c001c0,0x250400,0x11080200,0x4000400,0x200002,0x11080200,0x24000000,0x200000,0x11080200,0x24000000,0x1500000,0x11080200,0x24000000,0x1600000,0x11080200,
+0x24000020,0x200000,0x110a1e12,0x7c00100,0x2130480,0x110a1e12,0x7c80100,0x2130480,0x110a3000,0x24000000,0x810001,0x110a3000,0x24000000,0x1410001,0x110a3d00,0x4000000,
+0xe00000,0x110a3d00,0x4000000,0xe00002,0x110a3d00,0x7c00300,0xe30000,0x110a3d00,0x7c00900,0xe30c00,0x110a3d00,0x24000000,0x810000,0x110a3d00,0x24000000,0xe00000,
+0x110a3d00,0x24000000,0x1410000,0x110a3d00,0x24000002,0xe00000,0x110a3d00,0x24000002,0x1200000,0x110a3d00,0x24000008,0x810000,0x110a3d00,0x24000008,0x1410000,0x110a3d00,
+0x24000010,0x870000,0x110a3d00,0x2c000010,0x848000,0x110a3d01,0x2802400,0x962460,0x110a3d11,0x7c00300,0xe30000,0x110a3d11,0x7c00900,0x1230400,0x110a3e00,0x7000400,
+0x1200c02,0x110a3e01,0x2802400,0x962460,0x110a3e14,0x7c00100,0xe30000,0x110a3e14,0x7c00100,0xe30001,0x110a3e14,0x7c00100,0x1230000,0x110a3e14,0x7c00900,0x1230000,
+0x110a3e14,0x7c00900,0x1230001,0x110a3f00,0x4000004,0x1200000,0x110a3f00,0x7c00d00,0x1230c00,0x110a3f16,0x7c00100,0xe30c00,0x110a3f16,0x7c00100,0xe30c01,0x110a3f16,
+0x7c00100,0x1230c00,0x110a3f16,0x7c00900,0x1230c00,0x110a3f16,0x7c00900,0x1230c01,0x110a4005,0x7c00100,0xe30400,0x110a4112,0x7c00100,0xe30402,0x110a4112,0x7c80100,
+0xe30402,0x110a4200,0x4000000,0xe00000,0x110a4200,0x4000000,0xe0000f,0x110a4400,0x4000000,0xe00000,0x110a4400,0x4000000,0xe00002,0x110a4400,0x4000000,0xe00003,
+0x110a4412,0x4000000,0xe00002,0x110a4412,0x4000000,0xe00003,0x110a4416,0x4000000,0xe00c03,0x110a4500,0x4000000,0xe00002,0x110a4500,0x4000000,0xe0000d,0x110a4516,
+0x4000000,0xe00c0d,0x110a4711,0x7c40300,0xe30000,0x110a4f11,0x7c00300,0xe30001,0x110a4f11,0x7c40300,0xe30000,0x110a5300,0x4000000,0x810010,0x110a5300,0x4000000,
+0xe00002,0x110a5300,0x4000000,0xe00010,0x110a5300,0x4000000,0x1410010,0x110a5300,0x4000002,0xe70010,0x110a5300,0x4000008,0x810010,0x110a5300,0x4000008,0x1410010,
+0x110a5300,0x6800000,0xe01c02,0x110a5300,0x6800000,0xe01c10,0x110a5400,0x4000000,0x81000c,0x110a5400,0x4000000,0xe0000c,0x110a5400,0x4000000,0x141000c,0x110a5400,
+0x4000000,0x150000c,0x110a5400,0x4000000,0x160000c,0x110a5400,0x4000002,0xe7000c,0x110a5400,0x4000010,0x87140c,0x110a5400,0x4000010,0xe7000c,0x110a5400,0x4000010,
+0x120140c,0x110a5400,0x4000010,0x127100c,0x110a5400,0x4000020,0xe0000c,0x110a5400,0x4000026,0xe7000c,0x110a5400,0xc000010,0x80ac0c,0x110a5400,0xc000010,0xb4800c,
+0x20000067,0x1000,0,0x20000b13,0x2802400,0x962460,0x20000b13,0x2802500,0x962460,0x20001b27,0x2802100,0x962460,0x20001b27,0x2802100,0x962461,0x20001b27,
+0x2802100,0x962462,0x20001b27,0x2802400,0x962460,0x20001b27,0x2806400,0x962460,0x20001b27,0x4000000,0x200000,0x20001b27,0x4000000,0x400000,0x20001b27,0x4000000,
+0x500000,0x20001b27,0x4000000,0x810000,0x20001b27,0x4000000,0xb00000,0x20001b27,0x4000000,0xc0000b,0x20001b27,0x4000000,0x1410000,0x20001b27,0x4000010,0xb00000,
+0x20001b27,0x4000010,0xc00000,0x20001b27,0x6800000,0x1329800,0x20001b27,0x6800100,0x462540,0x20001b27,0x6800400,0x962540,0x20001b27,0x7c00100,0x230400,0x20001b27,
+0x7c00100,0x230401,0x20002619,0x7c00100,0x220401,0x20002a00,0x4000000,0x1600000,0x20004b67,0,0x1900000,0x20004c67,0,0x1900000,0x20004d67,0,
+0x1900000,0x20006d67,0x1000,0,0x20006e67,0x1000,0,0x20026d67,0,0,0x20026e67,0,0,0x200a4a12,0x7c00100,0x1f304c1,
+0x200a4a12,0x7c00100,0x20304e1,0x21005600,0x4000000,0x700000,0x21022a00,0x4000000,0x1600000,0x30000419,0x7c00100,0x220400,0x30000419,0x7c00100,0x220401,0x30000419,
+0x7c00100,0x250400,0x30000419,0x7c00100,0x250401,0x30000519,0x7c00100,0x220400,0x30000600,0x4000400,0x200000,0x30000600,0x7c00500,0x230400,0x3000080e,0x7c00100,
+0x220400,0x30000908,0x2000,0x962460,0x30000908,0x7c00100,0x220400,0x30000908,0x7c00100,0x220401,0x30000908,0x7c00100,0x250400,0x30000908,0x7c00100,0x250401,
+0x30000a03,0x4000006,0x400000,0x30000c01,0x2802100,0x962460,0x30000c02,0x4000000,0x200000,0x30000c02,0x7c00100,0x230400,0x30000d22,0,0x218820,0x30000d22,
+0x2802100,0x962460,0x30000d22,0x2802400,0x962460,0x30000d22,0x2802500,0x962460,0x30000d22,0x4000000,0x200000,0x30000d22,0x4000010,0x200000,0x30000d22,0x7c00100,
+0x230400,0x30000d22,0xc000010,0x248000,0x30000e25,0x2802500,0x962460,0x30000e25,0x7c00100,0x230400,0x30001821,0x2802100,0x962460,0x30001821,0x2806400,0x962460,
+0x30001821,0x4000000,0x200000,0x30001821,0x6800100,0x962540,0x30001821,0x6800100,0x962541,0x30001821,0x7c00100,0x230400,0x30001b27,0x2802100,0x962460,0x30001b27,
+0x2802400,0x962460,0x30001b27,0x4000000,0x200000,0x30001b27,0x4000000,0x400000,0x30001b27,0x7c00100,0x230400,0x30001c1c,0x2802100,0x1862460,0x30001c1c,0x2802400,
+0x1862460,0x30001c1c,0x2806400,0x1862460,0x30001c1c,0x4000000,0x200000,0x30001c1c,0x6800000,0x1329800,0x30001c1c,0x6800100,0x1862540,0x30001c1c,0x7c00100,0x1830000,
+0x30001c1c,0x7c00100,0x1830001,0x30001c1c,0xc000010,0x448000,0x30001f0b,0x4000000,0x200000,0x30001f0b,0x4000010,0x200000,0x30001f0b,0x4000010,0x400000,0x30001f0b,
+0x6800000,0x200000,0x30001f0b,0x7c00100,0x230400,0x30001f0b,0xc000010,0x248000,0x30002006,0x7c00100,0x230400,0x30002128,0x4000010,0x200000,0x30002128,0x7c00100,
+0x230400,0x30002128,0xc000010,0x248000,0x3000221d,0x4000000,0x810000,0x3000221d,0x4000000,0x1410000,0x3000221d,0x4000001,0x440000,0x3000221d,0x7c00100,0x230400,
+0x30002300,0x4000010,0x400000,0x30002320,0x7c00100,0x230400,0x30002417,0x80000,0x1818820,0x30002417,0x2802100,0x1862460,0x30002417,0x2802400,0x1862460,0x30002417,
+0x2806400,0x1862460,0x30002417,0x2902400,0x1862460,0x30002417,0x4000000,0x200000,0x30002417,0x4000000,0x400000,0x30002417,0x4000000,0x1600000,0x30002417,0x4000010,
+0x400000,0x30002417,0x4000010,0x1200000,0x30002417,0x6800000,0x1329800,0x30002417,0x6800100,0x1862540,0x30002417,0x7c00100,0x1830000,0x30002417,0x7d00100,0x1830000,
+0x30002500,0x4000010,0x400000,0x30002500,0x4000010,0xb70000,0x30002500,0xc000010,0xb48000,0x3000251b,0x2802100,0x962460,0x3000251b,0x4000000,0x200000,0x3000251b,
+0x4000001,0xc40000,0x3000251b,0x4000006,0x500000,0x3000251b,0x4000010,0x400000,0x3000251b,0x4000010,0xb70000,0x3000251b,0x6800000,0x1329800,0x3000251b,0x7c00100,
+0x230400,0x3000251b,0x7c00900,0x230400,0x3000251b,0xc000010,0xb48000,0x3000251b,0x12882000,0x962460,0x30002800,0x4000001,0xc4000b,0x30002800,0x24000000,0x200000,
+0x30002800,0x2c000010,0x1248002,0x30002a00,0x4000000,0x1600000,0x30002b01,0x2000,0x962460,0x30002c00,0x4000000,0x200000,0x30002c00,0x7c00100,0x220405,0x30002d19,
+0x7c00100,0x250400,0x30002e00,0x24000000,0x200000,0x30003000,0x24000000,0x200000,0x30003100,0x24000000,0x200000,0x30003600,0x24000000,0x200000,0x30003700,0x24000000,
+0x200000,0x3000392e,0x24000000,0x200000,0x30005013,0x7c00100,0x230401,0x30005600,0,0x918820,0x30020600,0x4000400,0x500000,0x30020701,0x2802400,0x962460,
+0x30020701,0x2802400,0xc62460,0x300a3a11,0x4020000,0xe00000,0x300a3a11,0x4020000,0xe00002,0x300a3b11,0x4020000,0xe00002,0x300a3c00,0x4008000,0xe00000,0x300a3c00,
+0x4010000,0xe00000,0x300a3d00,0x4000000,0xe00000,0x300a3d11,0x7c00300,0xe30002,0x300a4305,0x7c00100,0xe30400,0x300a4611,0x7c40300,0xe30000,0x300a4829,0x7c00100,
+0xe30400,0x300a4829,0x7c00900,0x1230400,0x300a4929,0x4000000,0xe00000,0x3100080e,0x7c00120,0x220402,0x3100080e,0x7c00120,0x250402,0x31005167,0x1000,0,
+0x3100581e,0x4000000,0x200000,0x3100581e,0x7c00100,0x230400,0x3100590d,0x7c00100,0x230400,0x31005a09,0x7c00100,0x220400,0x31005a09,0x7c00100,0x250400,0x31005b00,
+0x4000000,0x200000,0x31005c00,0x80000,0x918820,0x31005c00,0x2802000,0x962460,0x31005c00,0x2802400,0x962460,0x31005c00,0x4000000,0x200000,0x31005c00,0x4000000,
+0x200001,0x31005c00,0x6800000,0x962540,0x31005c00,0x6800400,0x962540,0x31005c01,0x2802400,0x962460,0x31005d00,0x4000020,0x200005,0x31005d00,0x6800020,0x1329805,
+0x31005d00,0x7c00120,0x220405,0x31005d00,0x7c00120,0x250405,0x31006000,0x180000,0x918820,0x310a5e11,0x7c40300,0xe30000,0x310a5f11,0x7c00300,0xe30001,0x32000419,
+0x7c00100,0x250400,0x3200080e,0x4000020,0x200000,0x3200080e,0x7c00100,0x220400,0x3200080e,0x7c00100,0x250400,0x32000908,0x7c00100,0x220400,0x32000908,0x7c00100,
+0x250400,0x32000c02,0x7c00100,0x230400,0x32000e25,0x7c00100,0x230400,0x32001d0c,0x7c00100,0x230400,0x32002800,0x80000,0x1e18820,0x32002800,0x80020,0x218820,
+0x32002800,0x4000001,0x440002,0x32002800,0x24000000,0x200000,0x32002800,0x24000000,0x200002,0x32002800,0x24000020,0x200000,0x32002800,0x2c000010,0x1248002,0x32002919,
+0x7c00100,0x22040f,0x32002a00,0x4000000,0x1600000,0x32002b01,0x2000,0x962460,0x32002b01,0x2802000,0x962460,0x32002b01,0x2802020,0x962460,0x32002c00,0x4000000,
+0x200000,0x32002c00,0x4000020,0x200000,0x32002c00,0x4000020,0x200005,0x32002c00,0x7c00120,0x220405,0x32002c00,0x7c00120,0x250405,0x32002e00,0x24000020,0x200000,
+0x32002f00,0x24000020,0x200000,0x32003000,0x24000000,0x200000,0x32003000,0x24000020,0x200000,0x32003500,0x24000000,0x200000,0x32003600,0x24000020,0x200000,0x32003700,
+0x24000000,0x100000,0x32003700,0x24000000,0x200000,0x32003800,0x24000000,0x810000,0x32003800,0x24000000,0x1410000,0x32005102,0x4000000,0x1500008,0x32005502,0x7c00100,
+0x230400,0x32006108,0x7c00100,0x220400,0x32006108,0x7c00100,0x250400,0x3200622a,0x2802100,0x962460,0x3200622a,0x2806000,0x962460,0x3200622a,0x7c00100,0x230400,
+0x32006300,0x4000000,0x400000,0x3200632b,0x2802100,0x962460,0x3200632b,0x2806000,0x962460,0x3200632b,0x7c00100,0x230400,0x3200642c,0x2802100,0x962460,0x3200642c,
+0x7c00100,0x230400,0x3200652d,0x2802100,0x962460,0x3200652d,0x7c00100,0x230400,0x32006600,0x24000020,0x200000,0x32006700,0x24000020,0x200000,0x32006800,0x24000020,
+0x200000,0x32006900,0x24000020,0x200000,0x32006900,0x24000020,0x810000,0x32006900,0x24000020,0x1410000,0x32006a00,0x24000020,0x200000,0x32006a00,0x24000020,0x200001,
+0x32006a00,0x24000020,0x200002,0x32020701,0x2802000,0x962460,0x32020701,0x2882000,0xc62460,0x32023300,0x4000000,0x100000,0x32026c01,0x12882000,0x962460,0x32065700,
+0x4000000,0x810011,0x32065700,0x4000000,0x1410011,0x32086600,0x24000020,0x810000,0x32086600,0x24000020,0x1410000,0x32086900,0x24000020,0x810000,0x32086900,0x24000020,
+0x1410000,0x320a3d00,0x4000000,0xe00000,0x320a3d00,0x7c00100,0x1230400,0x320a3d11,0x7c00100,0x1230400,0x320a3e14,0x7c00100,0xe30010,0x320a3e14,0x7c00100,0x1230000,
+0x320a3f00,0x4000002,0x1200c00,0x320a3f16,0x7c00100,0xe30c10,0x320a4400,0x4000000,0xe00003,0x320a4929,0x4000000,0xe00000,0x320a4f11,0x7c00300,0xe30001,0x320a5300,
+0x24000000,0xe00000,0x320a6b16,0x7c00100,0x1230c00,0x40000419,0x7c00100,0x220400,0x40000519,0x7c00100,0x220400,0x40000600,0x4000400,0x200000,0x4000080e,0x7c00100,
+0x220400,0x4000080e,0x7c00100,0x250400,0x4000080e,0x7c00100,0x250402,0x40000c00,0,0x218820,0x40000c02,0x2802100,0x962460,0x40000c02,0x2802400,0x962460,
+0x40000c02,0x2802500,0x962460,0x40000c02,0x4000000,0x200000,0x40000c02,0x4000000,0x1071400,0x40000c02,0x7c00100,0x230400,0x40000d22,0x7c00100,0x230400,0x40000f0a,
+0x7c00100,0x230400,0x40001004,0x7c00100,0x230400,0x40001110,0x2802100,0x962460,0x40001110,0x6800100,0x962540,0x4000120f,0x2802100,0x962460,0x4000120f,0x4000000,
+0x1600000,0x4000120f,0x7c00100,0x230400,0x4000131f,0x7c00100,0x230400,0x40001423,0x4000000,0x200000,0x40001423,0x4000000,0x1600000,0x40001615,0x2802400,0x962460,
+0x40001615,0x7c00100,0x230400,0x40002417,0x2802400,0x1862460,0x40002417,0x4000000,0x200000,0x40002800,0x6800000,0x201c00,0x40002800,0x24000002,0x200000,0x40002c00,
+0x4000000,0x200002,0x40003000,0x24000000,0x200000,0x40003000,0x24000020,0x200000,0x40003700,0x24000000,0x200000,0x40005100,0x4000000,0x200000,0x40005a09,0x7c00100,
+0x220400,0x40005a09,0x7c00100,0x250400,0x40005d00,0x7c00120,0x220405,0x40006f30,0x2802100,0x962460,0x40006f30,0x2802400,0x962460,0x40006f30,0x4000000,0x200000,
+0x40006f30,0x6800000,0x1329800,0x40006f30,0x6800100,0x962540,0x40006f30,0x7c00100,0x230400,0x40006f30,0xc000010,0xb48000,0x40007034,0x7c00100,0x1830000,0x40007117,
+0x4000000,0x200000,0x40007208,0x7c00100,0x220400,0x4000720e,0x7c00100,0x220400,0x4000720e,0x7c00500,0x22040e,0x4000720e,0x7c00500,0x22040f,0x40007219,0x7c00100,
+0x220400,0x40007219,0x7c00500,0x220400,0x40007219,0x7c00500,0x22040e,0x40007219,0x7c00500,0x22040f,0x40007300,0x24000000,0x200000,0x40007400,0x4000000,0x200000,
+0x40007531,0x7c00100,0x230400,0x40007631,0x7c00100,0x230400,0x40007700,0x4000000,0x200000,0x40007700,0x4000000,0x400000,0x40007835,0x4000010,0x400000,0x40007835,
+0x7c00100,0x230400,0x40007933,0x7c00100,0x230400,0x40007a32,0x6800000,0x1329800,0x40007a32,0x7c00100,0x230400,0x40007b2f,0x7c00100,0x230400,0x40007c00,0x4000000,
+0x200000,0x40020701,0x2802400,0x962460,0x40020701,0x2802400,0xc62460,0x40023300,0x4000000,0x200000,0x40023700,0x24000000,0x100000,0x40027d01,0x12882000,0x962460,
+0x400a4400,0x4000000,0xe0000d,0x400a4412,0x4000000,0xe00002,0x400a4412,0x4000000,0xe00003,0x400a4500,0x4000000,0xe0000d,0x400a5300,0x4000000,0x810010,0x400a5300,
+0x4000000,0x1410010,0x41000419,0x7c00100,0x220400,0x41000419,0x7c00100,0x250400,0x4100080e,0x7c00100,0x220400,0x4100080e,0x7c00100,0x250400,0x41000908,0x7c00100,
+0x220400,0x41000908,0x7c00100,0x250400,0x41000b13,0x2802000,0x962460,0x41000b13,0x2802100,0x962460,0x41000b13,0x4000000,0xb00000,0x41000c02,0x2802100,0x962460,
+0x41000c02,0x4000000,0xb00000,0x41000c02,0x4000000,0x1500000,0x41000f0a,0x7c00100,0x230400,0x41001004,0x7c00100,0x230400,0x41001423,0x6800000,0x1329800,0x41001423,
+0x7c00100,0x230400,0x41001b27,0x4000000,0x500000,0x41001d0c,0x7c00100,0x230400,0x41001d0c,0x7c00100,0x23040f,0x41001f0b,0x2802100,0x962460,0x41001f0b,0x4000000,
+0x200000,0x41001f0b,0x7c00100,0x230400,0x41002800,0x24000000,0x200000,0x41002800,0x24000000,0x400000,0x41002919,0x7c00100,0x22040e,0x41002a00,0x4000000,0x1600000,
+0x41002b01,0x2802020,0x962460,0x41002c00,0x4000000,0x200000,0x41002c00,0x7c00120,0x220405,0x41003000,0x24000000,0x200000,0x41003700,0x24000000,0x200000,0x41005d00,
+0x7c00120,0x220405,0x41006600,0x24000020,0x200000,0x41006600,0x24000020,0x810000,0x41006600,0x24000020,0x1410000,0x41007208,0x7c00100,0x22040f,0x41007219,0x7c00100,
+0x220400,0x41007300,0x24000000,0x200000,0x41007e0e,0x2802000,0x962460,0x41007e0e,0x4000000,0x200000,0x41007f0e,0x4000000,0x200000,0x41007f0e,0x7c00100,0x230400,
+0x41008002,0x7c00100,0x230400,0x41008137,0x2802100,0x962460,0x41008137,0x4000000,0x200000,0x41008137,0x6800100,0x962540,0x41008137,0x7c00100,0x230400,0x41008301,
+0x2802000,0x962460,0x41008407,0x4000000,0x200000,0x41008407,0x4000000,0x400000,0x41008407,0x4000000,0xb00000,0x41008407,0x7c00100,0x220400,0x41008407,0x7c00100,
+0x250400,0x4100850b,0x7c00100,0x230400,0x4100860b,0x4000000,0x200000,0x4100860b,0x7c00100,0x230400,0x4100870c,0x7c00100,0x220400,0x41008838,0x7c00100,0x220400,
+0x41008838,0x7c00100,0x250400,0x41008939,0x2802000,0x962460,0x41008939,0x2802100,0x962460,0x41008939,0x2806000,0x962460,0x41008939,0x4000000,0x200000,0x41008939,
+0x4000000,0x400000,0x41008939,0x7c00100,0x230400,0x41008a00,0x4000000,0x200000,0x41008b3b,0x4000000,0x1800000,0x41008b3b,0x6800000,0x1329800,0x41008b3b,0x6800100,
+0x1862540,0x41008b3b,0x7c00100,0x1830000,0x41008c3d,0x4000010,0x400000,0x41008c3d,0x7c00100,0x230400,0x41008d0e,0x7c00100,0x22040f,0x41008d19,0x7c00100,0x220400,
+0x41008d19,0x7c00100,0x22040f,0x41008e00,0x24000000,0x200000,0x41008e00,0x24000000,0x400000,0x41008e00,0x24000000,0x1710000,0x41008e00,0x24000006,0x400000,0x41008f3a,
+0x2802000,0x962460,0x41008f3a,0x2802100,0x962460,0x41008f3a,0x2806000,0x962460,0x41008f3a,0x4000000,0x200000,0x41008f3a,0x6800100,0x962540,0x41008f3a,0x7c00100,
+0x230400,0x4100903c,0x7c00100,0x230400,0x4100903c,0x7c00100,0x23040f,0x41020701,0x2802000,0x962460,0x41020701,0x2802000,0xc62460,0x410a4412,0x4000000,0xe00003,
+0x410a4711,0x7c40300,0xe30000,0x410a4f11,0x7c00300,0xe30001,0x410a8200,0x4000000,0xe00000,0x410a9100,0x4000000,0x800010,0x410a9100,0x4000000,0x810010,0x410a9100,
+0x4000000,0x870010,0x410a9100,0x4000000,0xb00010,0x410a9100,0x4000000,0xf00010,0x410a9100,0x4000000,0x1001410,0x410a9100,0x4000000,0x1071010,0x410a9100,0x4000000,
+0x1071410,0x410a9100,0x4000000,0x1410010,0x50000419,0x7c00100,0x220400,0x50000419,0x7c00100,0x250400,0x5000080e,0x7c00100,0x220400,0x50000908,0x7c00100,0x220400,
+0x50000908,0x7c00100,0x250400,0x50000b13,0x2802500,0x962460,0x50000f0a,0x7c00100,0x230400,0x50001600,0x4000000,0x200000,0x50001615,0x2802100,0x962460,0x50002b01,
+0x2802020,0x962460,0x50002c00,0x4000000,0x200000,0x50002c19,0x7c00100,0x220400,0x50002d19,0x7c00100,0x220400,0x50003000,0x24000000,0x200000,0x50003000,0x24000020,
+0x200000,0x50003700,0x24000000,0x200000,0x50005d00,0x7c00120,0x220405,0x50005d00,0x7c00120,0x250405,0x50006108,0x7c00100,0x220400,0x50006108,0x7c00100,0x250400,
+0x50006600,0x24000020,0x200000,0x50007300,0x24000000,0x200000,0x50008301,0x2802400,0x962460,0x50008a00,0x7c00500,0x230400,0x50009257,0x2802400,0x962460,0x50009257,
+0x4000000,0x200000,0x50009257,0x4000010,0x1071400,0x50009257,0x6800000,0x1329800,0x50009257,0x7c00100,0x230400,0x50009257,0x7c00500,0x230400,0x50009257,0x7c00900,
+0x230400,0x50009257,0xc000010,0xb48000,0x5000933e,0x2802100,0x962460,0x5000933e,0x2802400,0x962460,0x5000933e,0x4000000,0x200000,0x5000933e,0x4000000,0x400000,
+0x5000933e,0x4000010,0x400000,0x5000933e,0x6800000,0x1329800,0x5000933e,0x6800100,0x962540,0x5000933e,0x6800100,0x962541,0x5000933e,0x6804400,0x962540,0x5000933e,
+0x7c00100,0x230400,0x5000933e,0x7c00100,0x230401,0x5000933e,0xc000010,0x448000,0x50009419,0x7c00100,0x220400,0x50009419,0x7c00100,0x250400,0x50009500,0x4000400,
+0x200000,0x5000965a,0x4000000,0x500000,0x5000965a,0x7c00100,0x230400,0x5000965a,0xc000010,0xb48000,0x5000975b,0x4000000,0x200000,0x5000975b,0x4000010,0x400000,
+0x5000975b,0x7c00100,0x230400,0x50009865,0x7c00100,0x230400,0x50009965,0x4000010,0x400000,0x50009965,0x7c00100,0x230400,0x50009a00,0x4000000,0x200000,0x5100080e,
+0x7c00100,0x220400,0x5100080e,0x7c00100,0x250400,0x51000908,0x2802400,0x962460,0x51000c02,0x2802100,0x962460,0x51000c02,0x4000000,0x1500000,0x51000c02,0x4000020,
+0x200000,0x51000c02,0x7c00100,0x230400,0x51000f0a,0x7c00100,0x230400,0x51000f0a,0x7c00500,0x230400,0x51001110,0x2802100,0x962460,0x5100131f,0x2802100,0x962460,
+0x51001423,0x7c00100,0x230400,0x51001524,0x2802100,0x962460,0x51001524,0x4000000,0x200000,0x51001524,0x7c00100,0x230400,0x5100171a,0x2802100,0x962460,0x5100171a,
+0x4000000,0x200000,0x5100171a,0x4000000,0x1500000,0x5100171a,0x7c00100,0x230400,0x51001b27,0x4000000,0x200000,0x51001b27,0x4000000,0x400000,0x51001b27,0x4000000,
+0x500000,0x51001b27,0x7c00100,0x230400,0x51001c1c,0x2802100,0x1862460,0x51001c1c,0x2802400,0x1862460,0x51001c1c,0x2806400,0x1862460,0x51001c1c,0x4000000,0x1800000,
+0x51001c1c,0x6800000,0x1329800,0x51001c1c,0x6800000,0x1862540,0x51001c1c,0x6800100,0x1862540,0x51001c1c,0x6800400,0x1862540,0x51001c1c,0x7c00100,0x1830000,0x5100251b,
+0x7c00100,0x230400,0x51002619,0x7c00100,0x220400,0x51002619,0x7c00100,0x250400,0x51002800,0x80020,0x218820,0x51002b01,0x2802000,0x962460,0x51002c00,0x4000000,
+0x200000,0x51002d19,0x7c00100,0x230400,0x51003700,0x24000000,0x200000,0x51005201,0x2802400,0x962460,0x51005c00,0x4000000,0x200000,0x51006108,0x7c00100,0x220400,
+0x51006108,0x7c00100,0x250400,0x51006600,0x24000020,0x200000,0x51006600,0x24000020,0x810000,0x51006600,0x24000020,0x1410000,0x51007300,0x24000000,0x200000,0x51007300,
+0x24000020,0x200000,0x51008002,0x7c00100,0x230400,0x51008301,0x2802000,0x962460,0x51008301,0x2802400,0x962460,0x51008a00,0x7c00500,0x230400,0x51008e00,0x24000000,
+0x200000,0x51008e00,0x24000000,0x400000,0x51008e00,0x24000000,0x810000,0x51008e00,0x24000000,0x1400000,0x51008e00,0x24000000,0x1410000,0x51008e00,0x24000000,0x1710000,
+0x51008e00,0x24000002,0x200000,0x51008e00,0x24000500,0x230400,0x51008e00,0x2c000010,0xb48000,0x51009419,0x7c00100,0x220400,0x51009419,0x7c00100,0x22040e,0x51009419,
+0x7c00100,0x22040f,0x51009419,0x7c00100,0x250400,0x51009500,0x4000000,0x200000,0x51009500,0x7c00500,0x230400,0x51009519,0x7c00100,0x220400,0x51009519,0x7c00100,
+0x22040f,0x51009519,0x7c00100,0x230400,0x51009519,0x7c00100,0x250400,0x51009b71,0x2802100,0x962460,0x51009b71,0x6800000,0x1329800,0x51009b71,0x6800100,0x962540,
+0x51009b71,0x6804400,0x962540,0x51009b71,0x7c00100,0x230400,0x51009c52,0x2802100,0x962460,0x51009c52,0x2802400,0x962460,0x51009c52,0x2802c00,0x962460,0x51009c52,
+0x4000010,0x400000,0x51009c52,0x6800000,0x1329800,0x51009c52,0x6800100,0x962540,0x51009c52,0x7c00100,0x230400,0x51009c52,0xc000010,0x448000,0x51009d6d,0x6800000,
+0x1329800,0x51009d6d,0x7c00100,0x230400,0x51009d6d,0x7c00500,0x230400,0x51009d6d,0x7c00d00,0x230400,0x51009d6d,0xc000010,0x448000,0x51009e08,0x2802100,0x962460,
+0x51009f63,0x4000010,0x400000,0x51009f63,0x6800000,0x1329800,0x51009f63,0x7c00100,0x230400,0x51009f63,0x7c00900,0x230400,0x51009f63,0xc000010,0x448000,0x51009f63,
+0xc000010,0xb48000,0x5100a008,0x2000,0x962460,0x5100a008,0x2802400,0x962460,0x5100a008,0x4000000,0x200000,0x5100a008,0x7c00100,0x220400,0x5100a008,0x7c00100,
+0x230400,0x5100a008,0x7c00100,0x250400,0x5100a008,0x7c00500,0x230400,0x5100a16f,0x2806400,0x962460,0x5100a16f,0x6800000,0x1329800,0x5100a16f,0x6800100,0x962540,
+0x5100a16f,0x7c00100,0x230400,0x5100a16f,0xc000010,0x448000,0x5100a24f,0x2802100,0x962460,0x5100a24f,0x2802400,0x962460,0x5100a24f,0x4000400,0x400000,0x5100a24f,
+0x6800000,0x1329800,0x5100a24f,0x7c00100,0x230400,0x5100a24f,0xc000010,0x448000,0x5100a36e,0x2802100,0x962460,0x5100a36e,0x4000000,0x200000,0x5100a36e,0x6800100,
+0x962540,0x5100a36e,0x6804400,0x962540,0x5100a36e,0x7c00100,0x230400,0x5100a442,0x2802100,0x962460,0x5100a442,0x4000000,0x200000,0x5100a442,0x6800000,0x1329800,
+0x5100a442,0x6800100,0x962540,0x5100a442,0x7c00100,0x230400,0x5100a442,0xc000010,0x448000,0x5100a500,0x4000000,0x200000,0x5100a600,0x4000000,0x200000,0x5100a601,
+0x2802000,0x962460,0x5100a76b,0x7c00100,0x230400,0x5100a868,0x7c00100,0x230400,0x5100a96c,0x4000000,0x200000,0x5100a96c,0x7c00100,0x230400,0x5100aa00,0x4000000,
+0x200000,0x5100ab00,0x4000000,0x200000,0x51086600,0x24000020,0x810000,0x51086600,0x24000020,0x1410000,0x510a4005,0x7c00100,0xe30400,0x510a4711,0x7c40300,0xe30000,
+0x510a8200,0x4000000,0xe00000};
+#else /* U_DARWIN */
+0x11003800,0x24000000,0xb00000,0x11003800,0x24000000,0x1710000,0x11003d00,0x4000000,0xe00000,0x11004e00,0x2000,0x900060,0x11004e00,0x4000000,0x200000,0x11004e00,
+0x4000000,0x1600000,0x11004e00,0x4000100,0x200000,0x11005003,0x7c00100,0x220402,0x11005013,0x2802500,0x962460,0x11005013,0x4000020,0x200005,0x11005013,0x7c00100,
+0x230401,0x11005013,0x7c00100,0x230402,0x11005013,0x7c00100,0x230405,0x11005019,0x7c00100,0x220402,0x11005100,0x24000000,0x810000,0x11005100,0x24000000,0x1410000,
+0x11005102,0x7000100,0x230408,0x11005102,0x7c00100,0x230404,0x11005102,0x7c00100,0x230407,0x11005102,0x7c00100,0x230408,0x11005102,0x7c00100,0x230409,0x11005201,
+0x2802400,0x962460,0x11005500,0x80000,0x1e18820,0x11005502,0x7000100,0x230408,0x11005502,0x7c00100,0x230404,0x11005502,0x7c00100,0x230407,0x11005502,0x7c00100,
+0x230408,0x11005502,0x7c00100,0x230409,0x11005667,0x1000,0,0x11020200,0x80004,0x418820,0x11020200,0x4000000,0x100006,0x11020200,0x4000000,0x10000f,
+0x11020200,0x4000400,0x100002,0x11020200,0x4000400,0x500002,0x11020200,0x6800c00,0x101000,0x11020200,0x24000000,0x100000,0x11020200,0x24000000,0x200000,0x11020200,
+0x24000000,0x1400000,0x11020200,0x24000000,0x1500000,0x11020200,0x24000000,0x1600000,0x11020200,0x24000020,0x100000,0x11020200,0x24000020,0x1600000,0x11020219,0x7c00100,
+0x12040f,0x11020219,0x7c00100,0x220400,0x11020219,0x7c00100,0x220401,0x11020219,0x7c00100,0x250400,0x11020319,0x7c00100,0x220400,0x11020319,0x7c00100,0x220401,
+0x11020319,0x7c00100,0x220402,0x11020319,0x7c00100,0x250400,0x11020319,0x7c00100,0x250402,0x11020419,0x7c00100,0x220401,0x11020519,0x7c00100,0x220400,0x11020600,
+0x4000400,0x100002,0x11020600,0x4000400,0x200000,0x11020600,0x7c00500,0x130400,0x11020600,0x7c00d00,0x130400,0x11020701,0x2802400,0x962460,0x11020701,0x2802400,
+0x962461,0x11020701,0x2802400,0xc62460,0x11020701,0x2802500,0x962460,0x11020701,0x2902400,0x962461,0x1102080e,0x7c00100,0x220400,0x1102080e,0x7c00100,0x250400,
+0x11020908,0x7c00100,0x220400,0x11020908,0x7c00100,0x220401,0x11020908,0x7c00100,0x250400,0x11020908,0x7c00100,0x250401,0x11022800,0x24000000,0x100000,0x11022800,
+0x24000000,0x200000,0x11022800,0x24000000,0x200002,0x11022800,0x24000000,0x401000,0x11022800,0x24000000,0xf00002,0x11022800,0x24000000,0xf0ac02,0x11022800,0x24000000,
+0x1500000,0x11022800,0x24000002,0x100000,0x11022800,0x24000002,0x370000,0x11022800,0x24000002,0x470000,0x11022800,0x24000006,0x400000,0x11022800,0x24000008,0x1710000,
+0x11022800,0x24000008,0x1712c00,0x11022800,0x24000020,0x100000,0x11022800,0x24000020,0x1500000,0x11022800,0x24000020,0x1500002,0x11022900,0x4000000,0x10000e,0x11022900,
+0x4000000,0x10000f,0x11022919,0x7c00100,0x12040f,0x11022c00,0x4000000,0x100002,0x11022c00,0x4000000,0x10000f,0x11022c00,0x4000000,0x1500002,0x11022c00,0x4000000,
+0x1600002,0x11022c00,0x7c00120,0x120405,0x11022c0e,0x7c00100,0x250401,0x11022c19,0x7c00100,0x150401,0x11022d00,0x4000000,0x100006,0x11022d00,0x4000000,0x200006,
+0x11022d19,0x7c00100,0x120402,0x11022d19,0x7c00100,0x150402,0x11022e00,0x24000000,0x200000,0x11022e00,0x24000020,0x100000,0x11022f00,0x24000020,0x100000,0x11022f00,
+0x24000020,0x100001,0x11022f00,0x24000020,0x100002,0x11023000,0x24000000,0x100000,0x11023300,0x4000000,0x100002,0x11023300,0x4000000,0x100003,0x11023300,0x4000100,
+0x120403,0x11023300,0x4000100,0x150403,0x11023400,0x24000000,0x100000,0x11023500,0x24000000,0x100000,0x11023600,0x24000000,0x100000,0x11023600,0x24000020,0x100000,
+0x11023700,0x24000000,0x100000,0x11023700,0x24000020,0x100000,0x11023800,0x4000000,0x100000,0x11023800,0x24000000,0x200000,0x11024e00,0,0x200000,0x11024e00,
+0x2000,0x900060,0x11024e67,0,0,0x11025600,0x4000000,0x100000,0x11042a00,0x4000000,0x1600000,0x11045700,0x3802500,0x126246a,0x11045700,0x4000000,
+0x20000a,0x11045700,0x4000004,0x120000a,0x11045700,0x4000008,0x81000a,0x11045700,0x4000008,0x141000a,0x11045700,0x4000010,0x87000a,0x11045700,0x4000020,0x20000a,
+0x11045700,0x7c00d00,0x1230c0a,0x11045700,0xc000010,0x84800a,0x11045712,0x7c00100,0x23040a,0x11045712,0x7c80100,0x23040a,0x11045716,0x7c00100,0x230c0a,0x11045716,
+0x7c00100,0x1230c0a,0x11063d00,0x4000001,0xe40011,0x11064e00,0x4000000,0x800000,0x11064e00,0x4000000,0xe00000,0x11064e00,0x4000000,0x1400000,0x11064e00,0x4000020,
+0xe00000,0x11065700,0x4000000,0x810011,0x11065700,0x4000000,0xe00011,0x11065700,0x4000000,0x1410011,0x11065700,0x4000000,0x1500011,0x11065700,0x4000000,0x1600011,
+0x11065700,0x4000006,0xe70011,0x11065700,0x4000008,0xe00011,0x11065700,0x4000008,0xe02c11,0x11065700,0x4000010,0x871411,0x11065700,0x4000010,0x1201411,0x11065700,
+0x4000010,0x1271011,0x11065700,0x4000020,0xe00011,0x11065700,0x4000400,0xe00011,0x11065700,0x4000420,0xe00011,0x11065700,0x6800000,0xe01c11,0x11065700,0x6800040,
+0xe00011,0x11065700,0xc000010,0x80ac11,0x11065700,0xc000010,0xb48011,0x11065719,0x7c00100,0xe20411,0x11065719,0x7c00100,0xe50411,0x11065719,0x7c00140,0xe20411,
+0x11065719,0x7c00140,0xe50411,0x11080100,0x6800000,0x201c00,0x11080100,0x68000c0,0x1329800,0x11080100,0x24000000,0x200000,0x11080100,0x24000000,0x810000,0x11080100,
+0x24000000,0x1410000,0x11080100,0x24000000,0x1500000,0x11080100,0x24000000,0x1600000,0x11080100,0x24000000,0x1b00000,0x11080100,0x24000006,0xd70000,0x11080100,0x24000008,
+0x1710000,0x11080100,0x24000008,0x1712c00,0x11080100,0x24000010,0x1001400,0x11080100,0x24000010,0x1071000,0x11080100,0x24000010,0x1071400,0x11080100,0x24000020,0x200000,
+0x11080100,0x24000020,0x400000,0x11080100,0x24000020,0x1600000,0x11080100,0x24000400,0x200000,0x11080100,0x24000420,0x200000,0x11080100,0x2c000010,0xb48000,0x11080100,
+0x2c000010,0x100ac00,0x11080100,0x44000001,0x1a40000,0x11080119,0x7c00100,0x220400,0x11080119,0x7c00100,0x250400,0x11080119,0x7c001c0,0x220400,0x11080119,0x7c001c0,
+0x250400,0x11080200,0x4000400,0x200002,0x11080200,0x24000000,0x200000,0x11080200,0x24000000,0x1500000,0x11080200,0x24000000,0x1600000,0x11080200,0x24000020,0x200000,
+0x110a1e12,0x7c00100,0x2130480,0x110a1e12,0x7c80100,0x2130480,0x110a3000,0x24000000,0x810001,0x110a3000,0x24000000,0x1410001,0x110a3d00,0x4000000,0xe00000,0x110a3d00,
+0x4000000,0xe00002,0x110a3d00,0x7c00300,0xe30000,0x110a3d00,0x7c00900,0xe30c00,0x110a3d00,0x24000000,0x810000,0x110a3d00,0x24000000,0xe00000,0x110a3d00,0x24000000,
+0x1410000,0x110a3d00,0x24000002,0xe00000,0x110a3d00,0x24000002,0x1200000,0x110a3d00,0x24000008,0x810000,0x110a3d00,0x24000008,0x1410000,0x110a3d00,0x24000010,0x870000,
+0x110a3d00,0x2c000010,0x848000,0x110a3d01,0x2802400,0x962460,0x110a3d11,0x7c00300,0xe30000,0x110a3d11,0x7c00900,0x1230400,0x110a3e00,0x7000400,0x1200c02,0x110a3e01,
+0x2802400,0x962460,0x110a3e14,0x7c00100,0xe30000,0x110a3e14,0x7c00100,0xe30001,0x110a3e14,0x7c00100,0x1230000,0x110a3e14,0x7c00900,0x1230000,0x110a3e14,0x7c00900,
+0x1230001,0x110a3f00,0x4000004,0x1200000,0x110a3f00,0x7c00d00,0x1230c00,0x110a3f16,0x7c00100,0xe30c00,0x110a3f16,0x7c00100,0xe30c01,0x110a3f16,0x7c00100,0x1230c00,
+0x110a3f16,0x7c00900,0x1230c00,0x110a3f16,0x7c00900,0x1230c01,0x110a4005,0x7c00100,0xe30400,0x110a4112,0x7c00100,0xe30402,0x110a4112,0x7c80100,0xe30402,0x110a4200,
+0x4000000,0xe00000,0x110a4200,0x4000000,0xe0000f,0x110a4400,0x4000000,0xe00000,0x110a4400,0x4000000,0xe00002,0x110a4400,0x4000000,0xe00003,0x110a4412,0x4000000,
+0xe00002,0x110a4412,0x4000000,0xe00003,0x110a4416,0x4000000,0xe00c03,0x110a4500,0x4000000,0xe00002,0x110a4500,0x4000000,0xe0000d,0x110a4516,0x4000000,0xe00c0d,
+0x110a4711,0x7c40300,0xe30000,0x110a4e00,0x4000000,0x100000,0x110a4e00,0x4000000,0x200000,0x110a4e00,0x4000000,0x400000,0x110a4e00,0x4000000,0x800000,0x110a4e00,
+0x4000000,0x1200000,0x110a4e00,0x4000020,0xf00000,0x110a4e00,0x4000100,0x200000,0x110a4e00,0x4000100,0x1200000,0x110a4f11,0x7c00300,0xe30001,0x110a4f11,0x7c40300,
+0xe30000,0x110a5300,0x4000000,0x810010,0x110a5300,0x4000000,0xe00002,0x110a5300,0x4000000,0xe00010,0x110a5300,0x4000000,0x1410010,0x110a5300,0x4000002,0xe70010,
+0x110a5300,0x4000008,0x810010,0x110a5300,0x4000008,0x1410010,0x110a5300,0x6800000,0xe01c02,0x110a5300,0x6800000,0xe01c10,0x110a5400,0x4000000,0x81000c,0x110a5400,
+0x4000000,0xe0000c,0x110a5400,0x4000000,0x141000c,0x110a5400,0x4000000,0x150000c,0x110a5400,0x4000000,0x160000c,0x110a5400,0x4000002,0xe7000c,0x110a5400,0x4000010,
+0x87140c,0x110a5400,0x4000010,0xe7000c,0x110a5400,0x4000010,0x120140c,0x110a5400,0x4000010,0x127100c,0x110a5400,0x4000020,0xe0000c,0x110a5400,0x4000026,0xe7000c,
+0x110a5400,0xc000010,0x80ac0c,0x110a5400,0xc000010,0xb4800c,0x20000067,0x1000,0,0x20000b13,0x2802400,0x962460,0x20000b13,0x2802500,0x962460,0x20001b27,
+0x2802100,0x962460,0x20001b27,0x2802100,0x962461,0x20001b27,0x2802100,0x962462,0x20001b27,0x2802400,0x962460,0x20001b27,0x2806400,0x962460,0x20001b27,0x4000000,
+0x200000,0x20001b27,0x4000000,0x400000,0x20001b27,0x4000000,0x500000,0x20001b27,0x4000000,0x810000,0x20001b27,0x4000000,0xb00000,0x20001b27,0x4000000,0xc0000b,
+0x20001b27,0x4000000,0x1410000,0x20001b27,0x4000010,0xb00000,0x20001b27,0x4000010,0xc00000,0x20001b27,0x6800000,0x1329800,0x20001b27,0x6800100,0x462540,0x20001b27,
+0x6800400,0x962540,0x20001b27,0x7c00100,0x230400,0x20001b27,0x7c00100,0x230401,0x20002619,0x7c00100,0x220401,0x20002a00,0x4000000,0x1600000,0x20004b67,0,
+0x1900000,0x20004c67,0,0x1900000,0x20004d67,0,0x1900000,0x20006d67,0x1000,0,0x20006e67,0x1000,0,0x20026d67,0,0,
+0x20026e67,0,0,0x200a4a12,0x7c00100,0x1f304c1,0x200a4a12,0x7c00100,0x20304e1,0x21005600,0x4000000,0x700000,0x21022a00,0x4000000,0x1600000,0x30000419,
+0x7c00100,0x220400,0x30000419,0x7c00100,0x220401,0x30000419,0x7c00100,0x250400,0x30000419,0x7c00100,0x250401,0x30000519,0x7c00100,0x220400,0x30000600,0x4000400,
+0x200000,0x30000600,0x7c00500,0x230400,0x3000080e,0x7c00100,0x220400,0x30000908,0x2000,0x962460,0x30000908,0x7c00100,0x220400,0x30000908,0x7c00100,0x220401,
+0x30000908,0x7c00100,0x250400,0x30000908,0x7c00100,0x250401,0x30000a03,0x4000006,0x400000,0x30000c01,0x2802100,0x962460,0x30000c02,0x4000000,0x200000,0x30000c02,
+0x7c00100,0x230400,0x30000d22,0,0x218820,0x30000d22,0x2802100,0x962460,0x30000d22,0x2802400,0x962460,0x30000d22,0x2802500,0x962460,0x30000d22,0x4000000,
+0x200000,0x30000d22,0x4000010,0x200000,0x30000d22,0x7c00100,0x230400,0x30000d22,0xc000010,0x248000,0x30000e25,0x2802500,0x962460,0x30000e25,0x7c00100,0x230400,
+0x30001821,0x2802100,0x962460,0x30001821,0x2806400,0x962460,0x30001821,0x4000000,0x200000,0x30001821,0x6800100,0x962540,0x30001821,0x6800100,0x962541,0x30001821,
+0x7c00100,0x230400,0x30001b27,0x2802100,0x962460,0x30001b27,0x2802400,0x962460,0x30001b27,0x4000000,0x200000,0x30001b27,0x4000000,0x400000,0x30001b27,0x7c00100,
+0x230400,0x30001c1c,0x2802100,0x1862460,0x30001c1c,0x2802400,0x1862460,0x30001c1c,0x2806400,0x1862460,0x30001c1c,0x4000000,0x200000,0x30001c1c,0x6800000,0x1329800,
+0x30001c1c,0x6800100,0x1862540,0x30001c1c,0x7c00100,0x1830000,0x30001c1c,0x7c00100,0x1830001,0x30001c1c,0xc000010,0x448000,0x30001f0b,0x4000000,0x200000,0x30001f0b,
+0x4000010,0x200000,0x30001f0b,0x4000010,0x400000,0x30001f0b,0x6800000,0x200000,0x30001f0b,0x7c00100,0x230400,0x30001f0b,0xc000010,0x248000,0x30002006,0x7c00100,
+0x230400,0x30002128,0x4000010,0x200000,0x30002128,0x7c00100,0x230400,0x30002128,0xc000010,0x248000,0x3000221d,0x4000000,0x810000,0x3000221d,0x4000000,0x1410000,
+0x3000221d,0x4000001,0x440000,0x3000221d,0x7c00100,0x230400,0x30002300,0x4000010,0x400000,0x30002320,0x7c00100,0x230400,0x30002417,0x80000,0x1818820,0x30002417,
+0x2802100,0x1862460,0x30002417,0x2802400,0x1862460,0x30002417,0x2806400,0x1862460,0x30002417,0x2902400,0x1862460,0x30002417,0x4000000,0x200000,0x30002417,0x4000000,
+0x400000,0x30002417,0x4000000,0x1600000,0x30002417,0x4000010,0x400000,0x30002417,0x4000010,0x1200000,0x30002417,0x6800000,0x1329800,0x30002417,0x6800100,0x1862540,
+0x30002417,0x7c00100,0x1830000,0x30002417,0x7d00100,0x1830000,0x30002500,0x4000010,0x400000,0x30002500,0x4000010,0xb70000,0x30002500,0xc000010,0xb48000,0x3000251b,
+0x2802100,0x962460,0x3000251b,0x4000000,0x200000,0x3000251b,0x4000001,0xc40000,0x3000251b,0x4000006,0x500000,0x3000251b,0x4000010,0x400000,0x3000251b,0x4000010,
+0xb70000,0x3000251b,0x6800000,0x1329800,0x3000251b,0x7c00100,0x230400,0x3000251b,0x7c00900,0x230400,0x3000251b,0xc000010,0xb48000,0x3000251b,0x12882000,0x962460,
+0x30002800,0x4000001,0xc4000b,0x30002800,0x24000000,0x200000,0x30002800,0x2c000010,0x1248002,0x30002a00,0x4000000,0x1600000,0x30002b01,0x2000,0x962460,0x30002c00,
+0x4000000,0x200000,0x30002c00,0x7c00100,0x220405,0x30002d19,0x7c00100,0x250400,0x30002e00,0x24000000,0x200000,0x30003000,0x24000000,0x200000,0x30003100,0x24000000,
+0x200000,0x30003600,0x24000000,0x200000,0x30003700,0x24000000,0x200000,0x3000392e,0x24000000,0x200000,0x30005013,0x7c00100,0x230401,0x30005600,0,0x918820,
+0x30020600,0x4000400,0x500000,0x30020701,0x2802400,0x962460,0x30020701,0x2802400,0xc62460,0x300a3a11,0x4020000,0xe00000,0x300a3a11,0x4020000,0xe00002,0x300a3b11,
+0x4020000,0xe00002,0x300a3c00,0x4008000,0xe00000,0x300a3c00,0x4010000,0xe00000,0x300a3d00,0x4000000,0xe00000,0x300a3d11,0x7c00300,0xe30002,0x300a4305,0x7c00100,
+0xe30400,0x300a4611,0x7c40300,0xe30000,0x300a4829,0x7c00100,0xe30400,0x300a4829,0x7c00900,0x1230400,0x300a4929,0x4000000,0xe00000,0x3100080e,0x7c00120,0x220402,
+0x3100080e,0x7c00120,0x250402,0x31005167,0x1000,0,0x3100581e,0x4000000,0x200000,0x3100581e,0x7c00100,0x230400,0x3100590d,0x7c00100,0x230400,0x31005a09,
+0x7c00100,0x220400,0x31005a09,0x7c00100,0x250400,0x31005b00,0x4000000,0x200000,0x31005c00,0x80000,0x918820,0x31005c00,0x2802000,0x962460,0x31005c00,0x2802400,
+0x962460,0x31005c00,0x4000000,0x200000,0x31005c00,0x4000000,0x200001,0x31005c00,0x6800000,0x962540,0x31005c00,0x6800400,0x962540,0x31005c01,0x2802400,0x962460,
+0x31005d00,0x4000020,0x200005,0x31005d00,0x6800020,0x1329805,0x31005d00,0x7c00120,0x220405,0x31005d00,0x7c00120,0x250405,0x31006000,0x180000,0x918820,0x310a5e11,
+0x7c40300,0xe30000,0x310a5f11,0x7c00300,0xe30001,0x32000419,0x7c00100,0x250400,0x3200080e,0x4000020,0x200000,0x3200080e,0x7c00100,0x220400,0x3200080e,0x7c00100,
+0x250400,0x32000908,0x7c00100,0x220400,0x32000908,0x7c00100,0x250400,0x32000c02,0x7c00100,0x230400,0x32000e25,0x7c00100,0x230400,0x32001d0c,0x7c00100,0x230400,
+0x32002800,0x80000,0x1e18820,0x32002800,0x80020,0x218820,0x32002800,0x4000001,0x440002,0x32002800,0x24000000,0x200000,0x32002800,0x24000000,0x200002,0x32002800,
+0x24000020,0x200000,0x32002800,0x2c000010,0x1248002,0x32002919,0x7c00100,0x22040f,0x32002a00,0x4000000,0x1600000,0x32002b01,0x2000,0x962460,0x32002b01,0x2802000,
+0x962460,0x32002b01,0x2802020,0x962460,0x32002c00,0x4000000,0x200000,0x32002c00,0x4000020,0x200000,0x32002c00,0x4000020,0x200005,0x32002c00,0x7c00120,0x220405,
+0x32002c00,0x7c00120,0x250405,0x32002e00,0x24000020,0x200000,0x32002f00,0x24000020,0x200000,0x32003000,0x24000000,0x200000,0x32003000,0x24000020,0x200000,0x32003500,
+0x24000000,0x200000,0x32003600,0x24000020,0x200000,0x32003700,0x24000000,0x100000,0x32003700,0x24000000,0x200000,0x32003800,0x24000000,0x810000,0x32003800,0x24000000,
+0x1410000,0x32005102,0x4000000,0x1500008,0x32005502,0x7c00100,0x230400,0x32006108,0x7c00100,0x220400,0x32006108,0x7c00100,0x250400,0x3200622a,0x2802100,0x962460,
+0x3200622a,0x2806000,0x962460,0x3200622a,0x7c00100,0x230400,0x32006300,0x4000000,0x400000,0x3200632b,0x2802100,0x962460,0x3200632b,0x2806000,0x962460,0x3200632b,
+0x7c00100,0x230400,0x3200642c,0x2802100,0x962460,0x3200642c,0x7c00100,0x230400,0x3200652d,0x2802100,0x962460,0x3200652d,0x7c00100,0x230400,0x32006600,0x24000020,
+0x200000,0x32006700,0x24000020,0x200000,0x32006800,0x24000020,0x200000,0x32006900,0x24000020,0x200000,0x32006900,0x24000020,0x810000,0x32006900,0x24000020,0x1410000,
+0x32006a00,0x24000020,0x200000,0x32006a00,0x24000020,0x200001,0x32006a00,0x24000020,0x200002,0x32020701,0x2802000,0x962460,0x32020701,0x2882000,0xc62460,0x32023300,
+0x4000000,0x100000,0x32026c01,0x12882000,0x962460,0x32065700,0x4000000,0x810011,0x32065700,0x4000000,0x1410011,0x32086600,0x24000020,0x810000,0x32086600,0x24000020,
+0x1410000,0x32086900,0x24000020,0x810000,0x32086900,0x24000020,0x1410000,0x320a3d00,0x4000000,0xe00000,0x320a3d00,0x7c00100,0x1230400,0x320a3d11,0x7c00100,0x1230400,
+0x320a3e14,0x7c00100,0xe30010,0x320a3e14,0x7c00100,0x1230000,0x320a3f00,0x4000002,0x1200c00,0x320a3f16,0x7c00100,0xe30c10,0x320a4400,0x4000000,0xe00003,0x320a4929,
+0x4000000,0xe00000,0x320a4f11,0x7c00300,0xe30001,0x320a5300,0x24000000,0xe00000,0x320a6b16,0x7c00100,0x1230c00,0x40000419,0x7c00100,0x220400,0x40000519,0x7c00100,
+0x220400,0x40000600,0x4000400,0x200000,0x4000080e,0x7c00100,0x220400,0x4000080e,0x7c00100,0x250400,0x4000080e,0x7c00100,0x250402,0x40000c00,0,0x218820,
+0x40000c02,0x2802100,0x962460,0x40000c02,0x2802400,0x962460,0x40000c02,0x2802500,0x962460,0x40000c02,0x4000000,0x200000,0x40000c02,0x4000000,0x1071400,0x40000c02,
+0x7c00100,0x230400,0x40000d22,0x7c00100,0x230400,0x40000f0a,0x7c00100,0x230400,0x40001004,0x7c00100,0x230400,0x40001110,0x2802100,0x962460,0x40001110,0x6800100,
+0x962540,0x4000120f,0x2802100,0x962460,0x4000120f,0x4000000,0x1600000,0x4000120f,0x7c00100,0x230400,0x4000131f,0x7c00100,0x230400,0x40001423,0x4000000,0x200000,
+0x40001423,0x4000000,0x1600000,0x40001615,0x2802400,0x962460,0x40001615,0x7c00100,0x230400,0x40002417,0x2802400,0x1862460,0x40002417,0x4000000,0x200000,0x40002800,
+0x6800000,0x201c00,0x40002800,0x24000002,0x200000,0x40002c00,0x4000000,0x200002,0x40003000,0x24000000,0x200000,0x40003000,0x24000020,0x200000,0x40003700,0x24000000,
+0x200000,0x40005100,0x4000000,0x200000,0x40005a09,0x7c00100,0x220400,0x40005a09,0x7c00100,0x250400,0x40005d00,0x7c00120,0x220405,0x40006f30,0x2802100,0x962460,
+0x40006f30,0x2802400,0x962460,0x40006f30,0x4000000,0x200000,0x40006f30,0x6800000,0x1329800,0x40006f30,0x6800100,0x962540,0x40006f30,0x7c00100,0x230400,0x40006f30,
+0xc000010,0xb48000,0x40007034,0x7c00100,0x1830000,0x40007117,0x4000000,0x200000,0x40007208,0x7c00100,0x220400,0x4000720e,0x7c00100,0x220400,0x4000720e,0x7c00500,
+0x22040e,0x4000720e,0x7c00500,0x22040f,0x40007219,0x7c00100,0x220400,0x40007219,0x7c00500,0x220400,0x40007219,0x7c00500,0x22040e,0x40007219,0x7c00500,0x22040f,
+0x40007300,0x24000000,0x200000,0x40007400,0x4000000,0x200000,0x40007531,0x7c00100,0x230400,0x40007631,0x7c00100,0x230400,0x40007700,0x4000000,0x200000,0x40007700,
+0x4000000,0x400000,0x40007835,0x4000010,0x400000,0x40007835,0x7c00100,0x230400,0x40007933,0x7c00100,0x230400,0x40007a32,0x6800000,0x1329800,0x40007a32,0x7c00100,
+0x230400,0x40007b2f,0x7c00100,0x230400,0x40007c00,0x4000000,0x200000,0x40020701,0x2802400,0x962460,0x40020701,0x2802400,0xc62460,0x40023300,0x4000000,0x200000,
+0x40023700,0x24000000,0x100000,0x40027d01,0x12882000,0x962460,0x400a4400,0x4000000,0xe0000d,0x400a4412,0x4000000,0xe00002,0x400a4412,0x4000000,0xe00003,0x400a4500,
+0x4000000,0xe0000d,0x400a5300,0x4000000,0x810010,0x400a5300,0x4000000,0x1410010,0x41000419,0x7c00100,0x220400,0x41000419,0x7c00100,0x250400,0x4100080e,0x7c00100,
+0x220400,0x4100080e,0x7c00100,0x250400,0x41000908,0x7c00100,0x220400,0x41000908,0x7c00100,0x250400,0x41000b13,0x2802000,0x962460,0x41000b13,0x2802100,0x962460,
+0x41000b13,0x4000000,0xb00000,0x41000c02,0x2802100,0x962460,0x41000c02,0x4000000,0xb00000,0x41000c02,0x4000000,0x1500000,0x41000f0a,0x7c00100,0x230400,0x41001004,
+0x7c00100,0x230400,0x41001423,0x6800000,0x1329800,0x41001423,0x7c00100,0x230400,0x41001b27,0x4000000,0x500000,0x41001d0c,0x7c00100,0x230400,0x41001d0c,0x7c00100,
+0x23040f,0x41001f0b,0x2802100,0x962460,0x41001f0b,0x4000000,0x200000,0x41001f0b,0x7c00100,0x230400,0x41002800,0x24000000,0x200000,0x41002800,0x24000000,0x400000,
+0x41002919,0x7c00100,0x22040e,0x41002a00,0x4000000,0x1600000,0x41002b01,0x2802020,0x962460,0x41002c00,0x4000000,0x200000,0x41002c00,0x7c00120,0x220405,0x41003000,
+0x24000000,0x200000,0x41003700,0x24000000,0x200000,0x41005d00,0x7c00120,0x220405,0x41006600,0x24000020,0x200000,0x41006600,0x24000020,0x810000,0x41006600,0x24000020,
+0x1410000,0x41007208,0x7c00100,0x22040f,0x41007219,0x7c00100,0x220400,0x41007300,0x24000000,0x200000,0x41007e0e,0x2802000,0x962460,0x41007e0e,0x4000000,0x200000,
+0x41007f0e,0x4000000,0x200000,0x41007f0e,0x7c00100,0x230400,0x41008002,0x7c00100,0x230400,0x41008137,0x2802100,0x962460,0x41008137,0x4000000,0x200000,0x41008137,
+0x6800100,0x962540,0x41008137,0x7c00100,0x230400,0x41008301,0x2802000,0x962460,0x41008407,0x4000000,0x200000,0x41008407,0x4000000,0x400000,0x41008407,0x4000000,
+0xb00000,0x41008407,0x7c00100,0x220400,0x41008407,0x7c00100,0x250400,0x4100850b,0x7c00100,0x230400,0x4100860b,0x4000000,0x200000,0x4100860b,0x7c00100,0x230400,
+0x4100870c,0x7c00100,0x220400,0x41008838,0x7c00100,0x220400,0x41008838,0x7c00100,0x250400,0x41008939,0x2802000,0x962460,0x41008939,0x2802100,0x962460,0x41008939,
+0x2806000,0x962460,0x41008939,0x4000000,0x200000,0x41008939,0x4000000,0x400000,0x41008939,0x7c00100,0x230400,0x41008a00,0x4000000,0x200000,0x41008b3b,0x4000000,
+0x1800000,0x41008b3b,0x6800000,0x1329800,0x41008b3b,0x6800100,0x1862540,0x41008b3b,0x7c00100,0x1830000,0x41008c3d,0x4000010,0x400000,0x41008c3d,0x7c00100,0x230400,
+0x41008d0e,0x7c00100,0x22040f,0x41008d19,0x7c00100,0x220400,0x41008d19,0x7c00100,0x22040f,0x41008e00,0x24000000,0x200000,0x41008e00,0x24000000,0x400000,0x41008e00,
+0x24000000,0x1710000,0x41008e00,0x24000006,0x400000,0x41008f3a,0x2802000,0x962460,0x41008f3a,0x2802100,0x962460,0x41008f3a,0x2806000,0x962460,0x41008f3a,0x4000000,
+0x200000,0x41008f3a,0x6800100,0x962540,0x41008f3a,0x7c00100,0x230400,0x4100903c,0x7c00100,0x230400,0x4100903c,0x7c00100,0x23040f,0x41020701,0x2802000,0x962460,
+0x41020701,0x2802000,0xc62460,0x410a4412,0x4000000,0xe00003,0x410a4711,0x7c40300,0xe30000,0x410a4f11,0x7c00300,0xe30001,0x410a8200,0x4000000,0xe00000,0x410a9100,
+0x4000000,0x800010,0x410a9100,0x4000000,0x810010,0x410a9100,0x4000000,0x870010,0x410a9100,0x4000000,0xb00010,0x410a9100,0x4000000,0xf00010,0x410a9100,0x4000000,
+0x1001410,0x410a9100,0x4000000,0x1071010,0x410a9100,0x4000000,0x1071410,0x410a9100,0x4000000,0x1410010,0x50000419,0x7c00100,0x220400,0x50000419,0x7c00100,0x250400,
+0x5000080e,0x7c00100,0x220400,0x50000908,0x7c00100,0x220400,0x50000908,0x7c00100,0x250400,0x50000b13,0x2802500,0x962460,0x50000f0a,0x7c00100,0x230400,0x50001600,
+0x4000000,0x200000,0x50001615,0x2802100,0x962460,0x50002b01,0x2802020,0x962460,0x50002c00,0x4000000,0x200000,0x50002c19,0x7c00100,0x220400,0x50002d19,0x7c00100,
+0x220400,0x50003000,0x24000000,0x200000,0x50003000,0x24000020,0x200000,0x50003700,0x24000000,0x200000,0x50005d00,0x7c00120,0x220405,0x50005d00,0x7c00120,0x250405,
+0x50006108,0x7c00100,0x220400,0x50006108,0x7c00100,0x250400,0x50006600,0x24000020,0x200000,0x50007300,0x24000000,0x200000,0x50008301,0x2802400,0x962460,0x50008a00,
+0x7c00500,0x230400,0x50009257,0x2802400,0x962460,0x50009257,0x4000000,0x200000,0x50009257,0x4000010,0x1071400,0x50009257,0x6800000,0x1329800,0x50009257,0x7c00100,
+0x230400,0x50009257,0x7c00500,0x230400,0x50009257,0x7c00900,0x230400,0x50009257,0xc000010,0xb48000,0x5000933e,0x2802100,0x962460,0x5000933e,0x2802400,0x962460,
+0x5000933e,0x4000000,0x200000,0x5000933e,0x4000000,0x400000,0x5000933e,0x4000010,0x400000,0x5000933e,0x6800000,0x1329800,0x5000933e,0x6800100,0x962540,0x5000933e,
+0x6800100,0x962541,0x5000933e,0x6804400,0x962540,0x5000933e,0x7c00100,0x230400,0x5000933e,0x7c00100,0x230401,0x5000933e,0xc000010,0x448000,0x50009419,0x7c00100,
+0x220400,0x50009419,0x7c00100,0x250400,0x50009500,0x4000400,0x200000,0x5000965a,0x4000000,0x500000,0x5000965a,0x7c00100,0x230400,0x5000965a,0xc000010,0xb48000,
+0x5000975b,0x4000000,0x200000,0x5000975b,0x4000010,0x400000,0x5000975b,0x7c00100,0x230400,0x50009865,0x7c00100,0x230400,0x50009965,0x4000010,0x400000,0x50009965,
+0x7c00100,0x230400,0x50009a00,0x4000000,0x200000,0x5100080e,0x7c00100,0x220400,0x5100080e,0x7c00100,0x250400,0x51000908,0x2802400,0x962460,0x51000c02,0x2802100,
+0x962460,0x51000c02,0x4000000,0x1500000,0x51000c02,0x4000020,0x200000,0x51000c02,0x7c00100,0x230400,0x51000f0a,0x7c00100,0x230400,0x51000f0a,0x7c00500,0x230400,
+0x51001110,0x2802100,0x962460,0x5100131f,0x2802100,0x962460,0x51001423,0x7c00100,0x230400,0x51001524,0x2802100,0x962460,0x51001524,0x4000000,0x200000,0x51001524,
+0x7c00100,0x230400,0x5100171a,0x2802100,0x962460,0x5100171a,0x4000000,0x200000,0x5100171a,0x4000000,0x1500000,0x5100171a,0x7c00100,0x230400,0x51001b27,0x4000000,
+0x200000,0x51001b27,0x4000000,0x400000,0x51001b27,0x4000000,0x500000,0x51001b27,0x7c00100,0x230400,0x51001c1c,0x2802100,0x1862460,0x51001c1c,0x2802400,0x1862460,
+0x51001c1c,0x2806400,0x1862460,0x51001c1c,0x4000000,0x1800000,0x51001c1c,0x6800000,0x1329800,0x51001c1c,0x6800000,0x1862540,0x51001c1c,0x6800100,0x1862540,0x51001c1c,
+0x6800400,0x1862540,0x51001c1c,0x7c00100,0x1830000,0x5100251b,0x7c00100,0x230400,0x51002619,0x7c00100,0x220400,0x51002619,0x7c00100,0x250400,0x51002800,0x80020,
+0x218820,0x51002b01,0x2802000,0x962460,0x51002c00,0x4000000,0x200000,0x51002d19,0x7c00100,0x230400,0x51003700,0x24000000,0x200000,0x51005201,0x2802400,0x962460,
+0x51005c00,0x4000000,0x200000,0x51006108,0x7c00100,0x220400,0x51006108,0x7c00100,0x250400,0x51006600,0x24000020,0x200000,0x51006600,0x24000020,0x810000,0x51006600,
+0x24000020,0x1410000,0x51007300,0x24000000,0x200000,0x51007300,0x24000020,0x200000,0x51008002,0x7c00100,0x230400,0x51008301,0x2802000,0x962460,0x51008301,0x2802400,
+0x962460,0x51008a00,0x7c00500,0x230400,0x51008e00,0x24000000,0x200000,0x51008e00,0x24000000,0x400000,0x51008e00,0x24000000,0x810000,0x51008e00,0x24000000,0x1400000,
+0x51008e00,0x24000000,0x1410000,0x51008e00,0x24000000,0x1710000,0x51008e00,0x24000002,0x200000,0x51008e00,0x24000500,0x230400,0x51008e00,0x2c000010,0xb48000,0x51009419,
+0x7c00100,0x220400,0x51009419,0x7c00100,0x22040e,0x51009419,0x7c00100,0x22040f,0x51009419,0x7c00100,0x250400,0x51009500,0x4000000,0x200000,0x51009500,0x7c00500,
+0x230400,0x51009519,0x7c00100,0x220400,0x51009519,0x7c00100,0x22040f,0x51009519,0x7c00100,0x230400,0x51009519,0x7c00100,0x250400,0x51009b71,0x2802100,0x962460,
+0x51009b71,0x6800000,0x1329800,0x51009b71,0x6800100,0x962540,0x51009b71,0x6804400,0x962540,0x51009b71,0x7c00100,0x230400,0x51009c52,0x2802100,0x962460,0x51009c52,
+0x2802400,0x962460,0x51009c52,0x2802c00,0x962460,0x51009c52,0x4000010,0x400000,0x51009c52,0x6800000,0x1329800,0x51009c52,0x6800100,0x962540,0x51009c52,0x7c00100,
+0x230400,0x51009c52,0xc000010,0x448000,0x51009d6d,0x6800000,0x1329800,0x51009d6d,0x7c00100,0x230400,0x51009d6d,0x7c00500,0x230400,0x51009d6d,0x7c00d00,0x230400,
+0x51009d6d,0xc000010,0x448000,0x51009e08,0x2802100,0x962460,0x51009f63,0x4000010,0x400000,0x51009f63,0x6800000,0x1329800,0x51009f63,0x7c00100,0x230400,0x51009f63,
+0x7c00900,0x230400,0x51009f63,0xc000010,0x448000,0x51009f63,0xc000010,0xb48000,0x5100a008,0x2000,0x962460,0x5100a008,0x2802400,0x962460,0x5100a008,0x4000000,
+0x200000,0x5100a008,0x7c00100,0x220400,0x5100a008,0x7c00100,0x230400,0x5100a008,0x7c00100,0x250400,0x5100a008,0x7c00500,0x230400,0x5100a16f,0x2806400,0x962460,
+0x5100a16f,0x6800000,0x1329800,0x5100a16f,0x6800100,0x962540,0x5100a16f,0x7c00100,0x230400,0x5100a16f,0xc000010,0x448000,0x5100a24f,0x2802100,0x962460,0x5100a24f,
+0x2802400,0x962460,0x5100a24f,0x4000400,0x400000,0x5100a24f,0x6800000,0x1329800,0x5100a24f,0x7c00100,0x230400,0x5100a24f,0xc000010,0x448000,0x5100a36e,0x2802100,
+0x962460,0x5100a36e,0x4000000,0x200000,0x5100a36e,0x6800100,0x962540,0x5100a36e,0x6804400,0x962540,0x5100a36e,0x7c00100,0x230400,0x5100a442,0x2802100,0x962460,
+0x5100a442,0x4000000,0x200000,0x5100a442,0x6800000,0x1329800,0x5100a442,0x6800100,0x962540,0x5100a442,0x7c00100,0x230400,0x5100a442,0xc000010,0x448000,0x5100a500,
+0x4000000,0x200000,0x5100a600,0x4000000,0x200000,0x5100a601,0x2802000,0x962460,0x5100a76b,0x7c00100,0x230400,0x5100a868,0x7c00100,0x230400,0x5100a96c,0x4000000,
+0x200000,0x5100a96c,0x7c00100,0x230400,0x5100aa00,0x4000000,0x200000,0x5100ab00,0x4000000,0x200000,0x51086600,0x24000020,0x810000,0x51086600,0x24000020,0x1410000,
+0x510a4005,0x7c00100,0xe30400,0x510a4711,0x7c40300,0xe30000,0x510a8200,0x4000000,0xe00000};
#endif /* U_DARWIN */
#ifndef U_DARWIN
-static const int32_t countPropsVectors=3384;
+static const int32_t countPropsVectors=3891;
#else /* U_DARWIN */
-static const int32_t countPropsVectors=3438;
+static const int32_t countPropsVectors=3945;
#endif /* U_DARWIN */
static const int32_t propsVectorsColumns=3;
#ifndef U_DARWIN
-static const int32_t indexes[UPROPS_INDEX_COUNT]={0x1a54,0x1a54,0x1a54,0x1a54,0x3b66,3,0x489e,0,0,0,0x8ecd67,0x29d31,0,0,0,0};
+static const int32_t indexes[UPROPS_INDEX_COUNT]={0x1c14,0x1c14,0x1c14,0x1c14,0x3fde,3,0x4f11,0,0,0,0xaab81,0x2373171,0,0,0,0};
#else /* U_DARWIN */
-static const int32_t indexes[UPROPS_INDEX_COUNT]={0x1aaa,0x1aaa,0x1aaa,0x1aaa,0x3c24,3,0x4992,0,0,0,0x8ecd67,0x29d31,0,0,0,0};
+static const int32_t indexes[UPROPS_INDEX_COUNT]={0x1c6a,0x1c6a,0x1c6a,0x1c6a,0x408e,3,0x4ff7,0,0,0,0xaab81,0x2373171,0,0,0,0};
#endif /* U_DARWIN */
diff --git a/icuSources/common/ucln.h b/icuSources/common/ucln.h
index 2f3f98c8..a4573e93 100644
--- a/icuSources/common/ucln.h
+++ b/icuSources/common/ucln.h
@@ -1,7 +1,7 @@
/*
******************************************************************************
* *
-* Copyright (C) 2001-2004, International Business Machines *
+* Copyright (C) 2001-2007, International Business Machines *
* Corporation and others. All Rights Reserved. *
* *
******************************************************************************
@@ -50,6 +50,7 @@
typedef enum ECleanupLibraryType {
UCLN_START = -1,
UCLN_CUSTOM, /* Custom is for anyone else. */
+ UCLN_CTESTFW,
UCLN_LAYOUTEX,
UCLN_LAYOUT,
UCLN_IO,
diff --git a/icuSources/common/ucnv.c b/icuSources/common/ucnv.c
index f764f361..ed980e83 100644
--- a/icuSources/common/ucnv.c
+++ b/icuSources/common/ucnv.c
@@ -1,7 +1,7 @@
/*
******************************************************************************
*
-* Copyright (C) 1998-2006,2008 International Business Machines
+* Copyright (C) 1998-2008, International Business Machines
* Corporation and others. All Rights Reserved.
*
******************************************************************************
@@ -46,10 +46,15 @@ typedef struct UAmbiguousConverter {
} UAmbiguousConverter;
static const UAmbiguousConverter ambiguousConverters[]={
+ { "ibm-897_P100-1995", 0xa5 },
{ "ibm-942_P120-1999", 0xa5 },
{ "ibm-943_P130-1999", 0xa5 },
- { "ibm-897_P100-1995", 0xa5 },
+ { "ibm-946_P100-1995", 0xa5 },
{ "ibm-33722_P120-1999", 0xa5 },
+ /*{ "ibm-54191_P100-2006", 0xa5 },*/
+ /*{ "ibm-62383_P100-2007", 0xa5 },*/
+ /*{ "ibm-891_P100-1995", 0x20a9 },*/
+ { "ibm-944_P100-1995", 0x20a9 },
{ "ibm-949_P110-1999", 0x20a9 },
{ "ibm-1363_P110-1997", 0x20a9 },
{ "ISO_2022,locale=ko,version=0", 0x20a9 }
@@ -461,7 +466,7 @@ ucnv_setSubstChars (UConverter * converter,
return;
}
-U_DRAFT void U_EXPORT2
+U_CAPI void U_EXPORT2
ucnv_setSubstString(UConverter *cnv,
const UChar *s,
int32_t length,
@@ -559,8 +564,11 @@ static void _reset(UConverter *converter, UConverterResetChoice choice,
if(callCallback) {
/* first, notify the callback functions that the converter is reset */
- UConverterToUnicodeArgs toUArgs = {
- sizeof(UConverterToUnicodeArgs),
+ UErrorCode errorCode;
+
+ if(choice<=UCNV_RESET_TO_UNICODE && converter->fromCharErrorBehaviour != UCNV_TO_U_DEFAULT_CALLBACK) {
+ UConverterToUnicodeArgs toUArgs = {
+ sizeof(UConverterToUnicodeArgs),
TRUE,
NULL,
NULL,
@@ -568,9 +576,14 @@ static void _reset(UConverter *converter, UConverterResetChoice choice,
NULL,
NULL,
NULL
- };
- UConverterFromUnicodeArgs fromUArgs = {
- sizeof(UConverterFromUnicodeArgs),
+ };
+ toUArgs.converter = converter;
+ errorCode = U_ZERO_ERROR;
+ converter->fromCharErrorBehaviour(converter->toUContext, &toUArgs, NULL, 0, UCNV_RESET, &errorCode);
+ }
+ if(choice!=UCNV_RESET_TO_UNICODE && converter->fromUCharErrorBehaviour != UCNV_FROM_U_DEFAULT_CALLBACK) {
+ UConverterFromUnicodeArgs fromUArgs = {
+ sizeof(UConverterFromUnicodeArgs),
TRUE,
NULL,
NULL,
@@ -578,15 +591,8 @@ static void _reset(UConverter *converter, UConverterResetChoice choice,
NULL,
NULL,
NULL
- };
- UErrorCode errorCode;
-
- toUArgs.converter = fromUArgs.converter = converter;
- if(choice<=UCNV_RESET_TO_UNICODE) {
- errorCode = U_ZERO_ERROR;
- converter->fromCharErrorBehaviour(converter->toUContext, &toUArgs, NULL, 0, UCNV_RESET, &errorCode);
- }
- if(choice!=UCNV_RESET_TO_UNICODE) {
+ };
+ fromUArgs.converter = converter;
errorCode = U_ZERO_ERROR;
converter->fromUCharErrorBehaviour(converter->fromUContext, &fromUArgs, NULL, 0, 0, UCNV_RESET, &errorCode);
}
@@ -889,20 +895,25 @@ _fromUnicodeWithCallback(UConverterFromUnicodeArgs *pArgs, UErrorCode *err) {
* }
*/
for(;;) {
- /* convert */
- fromUnicode(pArgs, err);
+ if(U_SUCCESS(*err)) {
+ /* convert */
+ fromUnicode(pArgs, err);
- /*
- * set a flag for whether the converter
- * successfully processed the end of the input
- *
- * need not check cnv->preFromULength==0 because a replay (<0) will cause
- * sflush && pArgs->source==pArgs->sourceLimit &&
- cnv->fromUChar32==0);
+ /*
+ * set a flag for whether the converter
+ * successfully processed the end of the input
+ *
+ * need not check cnv->preFromULength==0 because a replay (<0) will cause
+ * sflush && pArgs->source==pArgs->sourceLimit &&
+ cnv->fromUChar32==0);
+ } else {
+ /* handle error from ucnv_convertEx() */
+ converterSawEndOfInput=FALSE;
+ }
/* no callback called yet for this iteration */
calledCallback=FALSE;
@@ -1093,6 +1104,64 @@ _fromUnicodeWithCallback(UConverterFromUnicodeArgs *pArgs, UErrorCode *err) {
}
}
+/*
+ * Output the fromUnicode overflow buffer.
+ * Call this function if(cnv->charErrorBufferLength>0).
+ * @return TRUE if overflow
+ */
+static UBool
+ucnv_outputOverflowFromUnicode(UConverter *cnv,
+ char **target, const char *targetLimit,
+ int32_t **pOffsets,
+ UErrorCode *err) {
+ int32_t *offsets;
+ char *overflow, *t;
+ int32_t i, length;
+
+ t=*target;
+ if(pOffsets!=NULL) {
+ offsets=*pOffsets;
+ } else {
+ offsets=NULL;
+ }
+
+ overflow=(char *)cnv->charErrorBuffer;
+ length=cnv->charErrorBufferLength;
+ i=0;
+ while(icharErrorBufferLength=(int8_t)j;
+ *target=t;
+ if(offsets!=NULL) {
+ *pOffsets=offsets;
+ }
+ *err=U_BUFFER_OVERFLOW_ERROR;
+ return TRUE;
+ }
+
+ /* copy the overflow contents to the target */
+ *t++=overflow[i++];
+ if(offsets!=NULL) {
+ *offsets++=-1; /* no source index available for old output */
+ }
+ }
+
+ /* the overflow buffer is completely copied to the target */
+ cnv->charErrorBufferLength=0;
+ *target=t;
+ if(offsets!=NULL) {
+ *pOffsets=offsets;
+ }
+ return FALSE;
+}
+
U_CAPI void U_EXPORT2
ucnv_fromUnicode(UConverter *cnv,
char **target, const char *targetLimit,
@@ -1116,13 +1185,22 @@ ucnv_fromUnicode(UConverter *cnv,
s=*source;
t=*target;
- if(sourceLimit= to the address source or target
+ *
+ * 2) Make sure that the buffer sizes do not exceed the number range for
* int32_t because some functions use the size (in units or bytes)
* rather than comparing pointers, and because offsets are int32_t values.
*
@@ -1132,52 +1210,30 @@ ucnv_fromUnicode(UConverter *cnv,
* not be able to maintain the semantics that either the source must be
* consumed or the target filled (unless an error occurs).
* An adjustment would be targetLimit=t+0x7fffffff; for example.
+ *
+ * 3) Make sure that the user didn't incorrectly cast a UChar * pointer
+ * to a char * pointer and provide an incomplete UChar code unit.
*/
- if(
+ if (sourceLimit(size_t)0x3fffffff && sourceLimit>s) ||
- ((size_t)(targetLimit-t)>(size_t)0x7fffffff && targetLimit>t)
- ) {
+ ((size_t)(targetLimit-t)>(size_t)0x7fffffff && targetLimit>t) ||
+ (((const char *)sourceLimit-(const char *)s) & 1) != 0)
+ {
*err=U_ILLEGAL_ARGUMENT_ERROR;
return;
}
- /* flush the target overflow buffer */
- if(cnv->charErrorBufferLength>0) {
- char *overflow;
- int32_t i, length;
-
- overflow=(char *)cnv->charErrorBuffer;
- length=cnv->charErrorBufferLength;
- i=0;
- do {
- if(t==targetLimit) {
- /* the overflow buffer contains too much, keep the rest */
- int32_t j=0;
-
- do {
- overflow[j++]=overflow[i++];
- } while(icharErrorBufferLength=(int8_t)j;
- *target=t;
- *err=U_BUFFER_OVERFLOW_ERROR;
- return;
- }
-
- /* copy the overflow contents to the target */
- *t++=overflow[i++];
- if(offsets!=NULL) {
- *offsets++=-1; /* no source index available for old output */
- }
- } while(icharErrorBufferLength=0;
+ /* output the target overflow buffer */
+ if( cnv->charErrorBufferLength>0 &&
+ ucnv_outputOverflowFromUnicode(cnv, target, targetLimit, &offsets, err)
+ ) {
+ /* U_BUFFER_OVERFLOW_ERROR */
+ return;
}
+ /* *target may have moved, therefore stop using t */
if(!flush && s==sourceLimit && cnv->preFromULength>=0) {
/* the overflow buffer is emptied and there is no new input: we are done */
- *target=t;
return;
}
@@ -1195,7 +1251,7 @@ ucnv_fromUnicode(UConverter *cnv,
args.offsets=offsets;
args.source=s;
args.sourceLimit=sourceLimit;
- args.target=t;
+ args.target=*target;
args.targetLimit=targetLimit;
args.size=sizeof(args);
@@ -1300,7 +1356,7 @@ _toUnicodeWithCallback(UConverterToUnicodeArgs *pArgs, UErrorCode *err) {
pArgs->flush && pArgs->source==pArgs->sourceLimit &&
cnv->toULength==0);
} else {
- /* handle error from getNextUChar() */
+ /* handle error from getNextUChar() or ucnv_convertEx() */
converterSawEndOfInput=FALSE;
}
@@ -1429,8 +1485,7 @@ _toUnicodeWithCallback(UConverterToUnicodeArgs *pArgs, UErrorCode *err) {
e!=U_ILLEGAL_CHAR_FOUND &&
e!=U_TRUNCATED_CHAR_FOUND &&
e!=U_ILLEGAL_ESCAPE_SEQUENCE &&
- e!=U_UNSUPPORTED_ESCAPE_SEQUENCE &&
- e!=U_PARSE_ERROR) /* temporary err to flag empty segment, will be reset to U_ILLEGAL_ESCAPE_SEQUENCE below */
+ e!=U_UNSUPPORTED_ESCAPE_SEQUENCE)
) {
/*
* the callback did not or cannot resolve the error:
@@ -1474,18 +1529,14 @@ _toUnicodeWithCallback(UConverterToUnicodeArgs *pArgs, UErrorCode *err) {
cnv->toULength=0;
/* call the callback function */
- {
- UConverterCallbackReason reason;
- if (*err == U_PARSE_ERROR) { /* Here U_PARSE_ERROR indicates empty segment */
- *err = U_ILLEGAL_ESCAPE_SEQUENCE;
- reason = UCNV_IRREGULAR;
- } else {
- reason = (*err==U_INVALID_CHAR_FOUND || *err==U_UNSUPPORTED_ESCAPE_SEQUENCE) ?
- UCNV_UNASSIGNED : UCNV_ILLEGAL;
- }
- cnv->fromCharErrorBehaviour(cnv->toUContext, pArgs,
- cnv->invalidCharBuffer, errorInputLength, reason, err);
+ if(cnv->toUCallbackReason==UCNV_ILLEGAL && *err==U_INVALID_CHAR_FOUND) {
+ cnv->toUCallbackReason = UCNV_UNASSIGNED;
}
+ cnv->fromCharErrorBehaviour(cnv->toUContext, pArgs,
+ cnv->invalidCharBuffer, errorInputLength,
+ cnv->toUCallbackReason,
+ err);
+ cnv->toUCallbackReason = UCNV_ILLEGAL; /* reset to default value */
/*
* loop back to the offset handling
@@ -1499,6 +1550,64 @@ _toUnicodeWithCallback(UConverterToUnicodeArgs *pArgs, UErrorCode *err) {
}
}
+/*
+ * Output the toUnicode overflow buffer.
+ * Call this function if(cnv->UCharErrorBufferLength>0).
+ * @return TRUE if overflow
+ */
+static UBool
+ucnv_outputOverflowToUnicode(UConverter *cnv,
+ UChar **target, const UChar *targetLimit,
+ int32_t **pOffsets,
+ UErrorCode *err) {
+ int32_t *offsets;
+ UChar *overflow, *t;
+ int32_t i, length;
+
+ t=*target;
+ if(pOffsets!=NULL) {
+ offsets=*pOffsets;
+ } else {
+ offsets=NULL;
+ }
+
+ overflow=cnv->UCharErrorBuffer;
+ length=cnv->UCharErrorBufferLength;
+ i=0;
+ while(iUCharErrorBufferLength=(int8_t)j;
+ *target=t;
+ if(offsets!=NULL) {
+ *pOffsets=offsets;
+ }
+ *err=U_BUFFER_OVERFLOW_ERROR;
+ return TRUE;
+ }
+
+ /* copy the overflow contents to the target */
+ *t++=overflow[i++];
+ if(offsets!=NULL) {
+ *offsets++=-1; /* no source index available for old output */
+ }
+ }
+
+ /* the overflow buffer is completely copied to the target */
+ cnv->UCharErrorBufferLength=0;
+ *target=t;
+ if(offsets!=NULL) {
+ *pOffsets=offsets;
+ }
+ return FALSE;
+}
+
U_CAPI void U_EXPORT2
ucnv_toUnicode(UConverter *cnv,
UChar **target, const UChar *targetLimit,
@@ -1522,13 +1631,22 @@ ucnv_toUnicode(UConverter *cnv,
s=*source;
t=*target;
- if(sourceLimit= to the address source or target
+ *
+ * 2) Make sure that the buffer sizes do not exceed the number range for
* int32_t because some functions use the size (in units or bytes)
* rather than comparing pointers, and because offsets are int32_t values.
*
@@ -1538,52 +1656,30 @@ ucnv_toUnicode(UConverter *cnv,
* not be able to maintain the semantics that either the source must be
* consumed or the target filled (unless an error occurs).
* An adjustment would be sourceLimit=t+0x7fffffff; for example.
+ *
+ * 3) Make sure that the user didn't incorrectly cast a UChar * pointer
+ * to a char * pointer and provide an incomplete UChar code unit.
*/
- if(
+ if (sourceLimit(size_t)0x7fffffff && sourceLimit>s) ||
- ((size_t)(targetLimit-t)>(size_t)0x3fffffff && targetLimit>t)
+ ((size_t)(targetLimit-t)>(size_t)0x3fffffff && targetLimit>t) ||
+ (((const char *)targetLimit-(const char *)t) & 1) != 0
) {
*err=U_ILLEGAL_ARGUMENT_ERROR;
return;
}
- /* flush the target overflow buffer */
- if(cnv->UCharErrorBufferLength>0) {
- UChar *overflow;
- int32_t i, length;
-
- overflow=cnv->UCharErrorBuffer;
- length=cnv->UCharErrorBufferLength;
- i=0;
- do {
- if(t==targetLimit) {
- /* the overflow buffer contains too much, keep the rest */
- int32_t j=0;
-
- do {
- overflow[j++]=overflow[i++];
- } while(iUCharErrorBufferLength=(int8_t)j;
- *target=t;
- *err=U_BUFFER_OVERFLOW_ERROR;
- return;
- }
-
- /* copy the overflow contents to the target */
- *t++=overflow[i++];
- if(offsets!=NULL) {
- *offsets++=-1; /* no source index available for old output */
- }
- } while(iUCharErrorBufferLength=0;
+ /* output the target overflow buffer */
+ if( cnv->UCharErrorBufferLength>0 &&
+ ucnv_outputOverflowToUnicode(cnv, target, targetLimit, &offsets, err)
+ ) {
+ /* U_BUFFER_OVERFLOW_ERROR */
+ return;
}
+ /* *target may have moved, therefore stop using t */
if(!flush && s==sourceLimit && cnv->preToULength>=0) {
/* the overflow buffer is emptied and there is no new input: we are done */
- *target=t;
return;
}
@@ -1601,7 +1697,7 @@ ucnv_toUnicode(UConverter *cnv,
args.offsets=offsets;
args.source=s;
args.sourceLimit=sourceLimit;
- args.target=t;
+ args.target=*target;
args.targetLimit=targetLimit;
args.size=sizeof(args);
@@ -1951,7 +2047,14 @@ ucnv_convertEx(UConverter *targetCnv, UConverter *sourceCnv,
UBool reset, UBool flush,
UErrorCode *pErrorCode) {
UChar pivotBuffer[CHUNK_SIZE];
- UChar *myPivotSource, *myPivotTarget;
+ const UChar *myPivotSource;
+ UChar *myPivotTarget;
+ const char *s;
+ char *t;
+
+ UConverterToUnicodeArgs toUArgs;
+ UConverterFromUnicodeArgs fromUArgs;
+ UConverterConvert convert;
/* error checking */
if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
@@ -1966,6 +2069,25 @@ ucnv_convertEx(UConverter *targetCnv, UConverter *sourceCnv,
return;
}
+ s=*source;
+ t=*target;
+ if((sourceLimit!=NULL && sourceLimit(size_t)0x7fffffff && sourceLimit>s)) ||
+ ((size_t)(targetLimit-t)>(size_t)0x7fffffff && targetLimit>t)
+ ) {
+ *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+
if(pivotStart==NULL) {
if(!flush) {
/* streaming conversion requires an explicit pivot buffer */
@@ -1974,8 +2096,8 @@ ucnv_convertEx(UConverter *targetCnv, UConverter *sourceCnv,
}
/* use the stack pivot buffer */
- pivotStart=myPivotSource=myPivotTarget=pivotBuffer;
- pivotSource=&myPivotSource;
+ myPivotSource=myPivotTarget=pivotStart=pivotBuffer;
+ pivotSource=(UChar **)&myPivotSource;
pivotTarget=&myPivotTarget;
pivotLimit=pivotBuffer+CHUNK_SIZE;
} else if( pivotStart>=pivotLimit ||
@@ -1995,51 +2117,260 @@ ucnv_convertEx(UConverter *targetCnv, UConverter *sourceCnv,
if(reset) {
ucnv_resetToUnicode(sourceCnv);
ucnv_resetFromUnicode(targetCnv);
- *pivotTarget=*pivotSource=pivotStart;
+ *pivotSource=*pivotTarget=pivotStart;
+ } else if(targetCnv->charErrorBufferLength>0) {
+ /* output the targetCnv overflow buffer */
+ if(ucnv_outputOverflowFromUnicode(targetCnv, target, targetLimit, NULL, pErrorCode)) {
+ /* U_BUFFER_OVERFLOW_ERROR */
+ return;
+ }
+ /* *target has moved, therefore stop using t */
+
+ if( !flush &&
+ targetCnv->preFromULength>=0 && *pivotSource==*pivotTarget &&
+ sourceCnv->UCharErrorBufferLength==0 && sourceCnv->preToULength>=0 && s==sourceLimit
+ ) {
+ /* the fromUnicode overflow buffer is emptied and there is no new input: we are done */
+ return;
+ }
+ }
+
+ /* Is direct-UTF-8 conversion available? */
+ if( sourceCnv->sharedData->staticData->conversionType==UCNV_UTF8 &&
+ targetCnv->sharedData->impl->fromUTF8!=NULL
+ ) {
+ convert=targetCnv->sharedData->impl->fromUTF8;
+ } else if( targetCnv->sharedData->staticData->conversionType==UCNV_UTF8 &&
+ sourceCnv->sharedData->impl->toUTF8!=NULL
+ ) {
+ convert=sourceCnv->sharedData->impl->toUTF8;
+ } else {
+ convert=NULL;
}
- /* conversion loop */
+ /*
+ * If direct-UTF-8 conversion is available, then we use a smaller
+ * pivot buffer for error handling and partial matches
+ * so that we quickly return to direct conversion.
+ *
+ * 32 is large enough for UCNV_EXT_MAX_UCHARS and UCNV_ERROR_BUFFER_LENGTH.
+ *
+ * We could reduce the pivot buffer size further, at the cost of
+ * buffer overflows from callbacks.
+ * The pivot buffer should not be smaller than the maximum number of
+ * fromUnicode extension table input UChars
+ * (for m:n conversion, see
+ * targetCnv->sharedData->mbcs.extIndexes[UCNV_EXT_COUNT_UCHARS])
+ * or 2 for surrogate pairs.
+ *
+ * Too small a buffer can cause thrashing between pivoting and direct
+ * conversion, with function call overhead outweighing the benefits
+ * of direct conversion.
+ */
+ if(convert!=NULL && (pivotLimit-pivotStart)>32) {
+ pivotLimit=pivotStart+32;
+ }
+
+ /* prepare the converter arguments */
+ fromUArgs.converter=targetCnv;
+ fromUArgs.flush=FALSE;
+ fromUArgs.offsets=NULL;
+ fromUArgs.target=*target;
+ fromUArgs.targetLimit=targetLimit;
+ fromUArgs.size=sizeof(fromUArgs);
+
+ toUArgs.converter=sourceCnv;
+ toUArgs.flush=flush;
+ toUArgs.offsets=NULL;
+ toUArgs.source=s;
+ toUArgs.sourceLimit=sourceLimit;
+ toUArgs.targetLimit=pivotLimit;
+ toUArgs.size=sizeof(toUArgs);
+
+ /*
+ * TODO: Consider separating this function into two functions,
+ * extracting exactly the conversion loop,
+ * for readability and to reduce the set of visible variables.
+ *
+ * Otherwise stop using s and t from here on.
+ */
+ s=t=NULL;
+
+ /*
+ * conversion loop
+ *
+ * The sequence of steps in the loop may appear backward,
+ * but the principle is simple:
+ * In the chain of
+ * source - sourceCnv overflow - pivot - targetCnv overflow - target
+ * empty out later buffers before refilling them from earlier ones.
+ *
+ * The targetCnv overflow buffer is flushed out only once before the loop.
+ */
for(;;) {
- if(reset) {
+ /*
+ * if(pivot not empty or error or replay or flush fromUnicode) {
+ * fromUnicode(pivot -> target);
+ * }
+ *
+ * For pivoting conversion; and for direct conversion for
+ * error callback handling and flushing the replay buffer.
+ */
+ if( *pivotSource<*pivotTarget ||
+ U_FAILURE(*pErrorCode) ||
+ targetCnv->preFromULength<0 ||
+ fromUArgs.flush
+ ) {
+ fromUArgs.source=*pivotSource;
+ fromUArgs.sourceLimit=*pivotTarget;
+ _fromUnicodeWithCallback(&fromUArgs, pErrorCode);
+ if(U_FAILURE(*pErrorCode)) {
+ /* target overflow, or conversion error */
+ *pivotSource=(UChar *)fromUArgs.source;
+ break;
+ }
+
/*
- * if we did a reset in this function, we know that there is nothing
- * to convert to the target yet, so we save a function call
+ * _fromUnicodeWithCallback() must have consumed the pivot contents
+ * (*pivotSource==*pivotTarget) since it returned with U_SUCCESS()
*/
- reset=FALSE;
- } else {
+ }
+
+ /* The pivot buffer is empty; reset it so we start at pivotStart. */
+ *pivotSource=*pivotTarget=pivotStart;
+
+ /*
+ * if(sourceCnv overflow buffer not empty) {
+ * move(sourceCnv overflow buffer -> pivot);
+ * continue;
+ * }
+ */
+ /* output the sourceCnv overflow buffer */
+ if(sourceCnv->UCharErrorBufferLength>0) {
+ if(ucnv_outputOverflowToUnicode(sourceCnv, pivotTarget, pivotLimit, NULL, pErrorCode)) {
+ /* U_BUFFER_OVERFLOW_ERROR */
+ *pErrorCode=U_ZERO_ERROR;
+ }
+ continue;
+ }
+
+ /*
+ * check for end of input and break if done
+ *
+ * Checking both flush and fromUArgs.flush ensures that the converters
+ * have been called with the flush flag set if the ucnv_convertEx()
+ * caller set it.
+ */
+ if( toUArgs.source==sourceLimit &&
+ sourceCnv->preToULength>=0 && sourceCnv->toULength==0 &&
+ (!flush || fromUArgs.flush)
+ ) {
+ /* done successfully */
+ break;
+ }
+
+ /*
+ * use direct conversion if available
+ * but not if continuing a partial match
+ * or flushing the toUnicode replay buffer
+ */
+ if(convert!=NULL && targetCnv->preFromUFirstCP<0 && sourceCnv->preToULength==0) {
+ if(*pErrorCode==U_USING_DEFAULT_WARNING) {
+ /* remove a warning that may be set by this function */
+ *pErrorCode=U_ZERO_ERROR;
+ }
+ convert(&fromUArgs, &toUArgs, pErrorCode);
+ if(*pErrorCode==U_BUFFER_OVERFLOW_ERROR) {
+ break;
+ } else if(U_FAILURE(*pErrorCode)) {
+ if(sourceCnv->toULength>0) {
+ /*
+ * Fall through to calling _toUnicodeWithCallback()
+ * for callback handling.
+ *
+ * The pivot buffer will be reset with
+ * *pivotSource=*pivotTarget=pivotStart;
+ * which indicates a toUnicode error to the caller
+ * (*pivotSource==pivotStart shows no pivot UChars consumed).
+ */
+ } else {
+ /*
+ * Indicate a fromUnicode error to the caller
+ * (*pivotSource>pivotStart shows some pivot UChars consumed).
+ */
+ *pivotSource=*pivotTarget=pivotStart+1;
+ /*
+ * Loop around to calling _fromUnicodeWithCallbacks()
+ * for callback handling.
+ */
+ continue;
+ }
+ } else if(*pErrorCode==U_USING_DEFAULT_WARNING) {
+ /*
+ * No error, but the implementation requested to temporarily
+ * fall back to pivoting.
+ */
+ *pErrorCode=U_ZERO_ERROR;
/*
- * convert to the target first in case the pivot is filled at entry
- * or the targetCnv has some output bytes in its state
+ * The following else branches are almost identical to the end-of-input
+ * handling in _toUnicodeWithCallback().
+ * Avoid calling it just for the end of input.
*/
- ucnv_fromUnicode(targetCnv,
- target, targetLimit,
- (const UChar **)pivotSource, *pivotTarget,
- NULL,
- (UBool)(flush && *source==sourceLimit),
- pErrorCode);
- if(U_FAILURE(*pErrorCode)) {
+ } else if(flush && sourceCnv->toULength>0) { /* flush==toUArgs.flush */
+ /*
+ * the entire input stream is consumed
+ * and there is a partial, truncated input sequence left
+ */
+
+ /* inject an error and continue with callback handling */
+ *pErrorCode=U_TRUNCATED_CHAR_FOUND;
+ } else {
+ /* input consumed */
+ if(flush) {
+ /* reset the converters without calling the callback functions */
+ _reset(sourceCnv, UCNV_RESET_TO_UNICODE, FALSE);
+ _reset(targetCnv, UCNV_RESET_FROM_UNICODE, FALSE);
+ }
+
+ /* done successfully */
break;
}
-
- /* ucnv_fromUnicode() must have consumed the pivot contents since it returned with U_SUCCESS() */
- *pivotSource=*pivotTarget=pivotStart;
}
-
- /* convert from the source to the pivot */
- ucnv_toUnicode(sourceCnv,
- pivotTarget, pivotLimit,
- source, sourceLimit,
- NULL,
- flush,
- pErrorCode);
+
+ /*
+ * toUnicode(source -> pivot);
+ *
+ * For pivoting conversion; and for direct conversion for
+ * error callback handling, continuing partial matches
+ * and flushing the replay buffer.
+ *
+ * The pivot buffer is empty and reset.
+ */
+ toUArgs.target=pivotStart; /* ==*pivotTarget */
+ /* toUArgs.targetLimit=pivotLimit; already set before the loop */
+ _toUnicodeWithCallback(&toUArgs, pErrorCode);
+ *pivotTarget=toUArgs.target;
if(*pErrorCode==U_BUFFER_OVERFLOW_ERROR) {
/* pivot overflow: continue with the conversion loop */
*pErrorCode=U_ZERO_ERROR;
- } else if(U_FAILURE(*pErrorCode) || *pivotTarget==pivotStart) {
+ } else if(U_FAILURE(*pErrorCode) || (!flush && *pivotTarget==pivotStart)) {
/* conversion error, or there was nothing left to convert */
break;
}
- /* else ucnv_toUnicode() wrote into the pivot buffer: continue */
+ /*
+ * else:
+ * _toUnicodeWithCallback() wrote into the pivot buffer,
+ * continue with fromUnicode conversion.
+ *
+ * Set the fromUnicode flush flag if we flush and if toUnicode has
+ * processed the end of the input.
+ */
+ if( flush && toUArgs.source==sourceLimit &&
+ sourceCnv->preToULength>=0 &&
+ sourceCnv->UCharErrorBufferLength==0
+ ) {
+ fromUArgs.flush=TRUE;
+ }
}
/*
@@ -2049,6 +2380,9 @@ ucnv_convertEx(UConverter *targetCnv, UConverter *sourceCnv,
* - a conversion error occurred
*/
+ *source=toUArgs.source;
+ *target=fromUArgs.target;
+
/* terminate the target buffer if possible */
if(flush && U_SUCCESS(*pErrorCode)) {
if(*target!=targetLimit) {
@@ -2502,9 +2836,9 @@ ucnv_detectUnicodeSignature( const char* source,
return NULL;
}
- U_DRAFT int32_t U_EXPORT2
- ucnv_fromUCountPending(const UConverter* cnv, UErrorCode* status){
-
+U_CAPI int32_t U_EXPORT2
+ucnv_fromUCountPending(const UConverter* cnv, UErrorCode* status)
+{
if(status == NULL || U_FAILURE(*status)){
return -1;
}
@@ -2524,9 +2858,9 @@ ucnv_detectUnicodeSignature( const char* source,
}
return 0;
- }
+}
-U_DRAFT int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucnv_toUCountPending(const UConverter* cnv, UErrorCode* status){
if(status == NULL || U_FAILURE(*status)){
diff --git a/icuSources/common/ucnv2022.c b/icuSources/common/ucnv2022.c
index 67c8da9f..c1a17f78 100644
--- a/icuSources/common/ucnv2022.c
+++ b/icuSources/common/ucnv2022.c
@@ -1,6 +1,6 @@
/*
**********************************************************************
-* Copyright (C) 2000-2006,2008 International Business Machines
+* Copyright (C) 2000-2008, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
* file name: ucnv2022.c
@@ -84,6 +84,26 @@ static const char SHIFT_OUT_STR[] = "\x0E";
#define V_TAB 0x0B
#define SPACE 0x20
+enum {
+ HWKANA_START=0xff61,
+ HWKANA_END=0xff9f
+};
+
+/*
+ * 94-character sets with native byte values A1..FE are encoded in ISO 2022
+ * as bytes 21..7E. (Subtract 0x80.)
+ * 96-character sets with native byte values A0..FF are encoded in ISO 2022
+ * as bytes 20..7F. (Subtract 0x80.)
+ * Do not encode C1 control codes with native bytes 80..9F
+ * as bytes 00..1F (C0 control codes).
+ */
+enum {
+ GR94_START=0xa1,
+ GR94_END=0xfe,
+ GR96_START=0xa0,
+ GR96_END=0xff
+};
+
/*
* ISO 2022 control codes must not be converted from Unicode
* because they would mess up the byte stream.
@@ -190,10 +210,10 @@ typedef struct{
/* ISO-2022 ----------------------------------------------------------------- */
/*Forward declaration */
-U_CFUNC void
+U_CFUNC void
ucnv_fromUnicode_UTF8(UConverterFromUnicodeArgs * args,
UErrorCode * err);
-U_CFUNC void
+U_CFUNC void
ucnv_fromUnicode_UTF8_OFFSETS_LOGIC(UConverterFromUnicodeArgs * args,
UErrorCode * err);
@@ -325,7 +345,7 @@ static const char* const escSeqStateTable_Result_2022[MAX_STATES_2022] = {
#endif
-static const UCNV_TableStates_2022 escSeqStateTable_Value_2022[MAX_STATES_2022] = {
+static const int8_t escSeqStateTable_Value_2022[MAX_STATES_2022] = {
/* 0 1 2 3 4 5 6 7 8 9 */
VALID_NON_TERMINAL_2022 ,VALID_NON_TERMINAL_2022 ,VALID_NON_TERMINAL_2022 ,VALID_NON_TERMINAL_2022 ,VALID_NON_TERMINAL_2022 ,VALID_TERMINAL_2022 ,VALID_TERMINAL_2022 ,VALID_NON_TERMINAL_2022 ,VALID_TERMINAL_2022 ,VALID_TERMINAL_2022
,VALID_MAYBE_TERMINAL_2022 ,VALID_TERMINAL_2022 ,VALID_TERMINAL_2022 ,VALID_TERMINAL_2022 ,VALID_TERMINAL_2022 ,VALID_TERMINAL_2022 ,VALID_TERMINAL_2022 ,VALID_TERMINAL_2022 ,VALID_TERMINAL_2022 ,VALID_TERMINAL_2022
@@ -349,26 +369,26 @@ typedef enum{
} Variant2022;
/*********** ISO 2022 Converter Protos ***********/
-static void
+static void
_ISO2022Open(UConverter *cnv, const char *name, const char *locale,uint32_t options, UErrorCode *errorCode);
static void
_ISO2022Close(UConverter *converter);
-static void
+static void
_ISO2022Reset(UConverter *converter, UConverterResetChoice choice);
-static const char*
+static const char*
_ISO2022getName(const UConverter* cnv);
-static void
+static void
_ISO_2022_WriteSub(UConverterFromUnicodeArgs *args, int32_t offsetIndex, UErrorCode *err);
-static UConverter *
+static UConverter *
_ISO_2022_SafeClone(const UConverter *cnv, void *stackBuffer, int32_t *pBufferSize, UErrorCode *status);
#ifdef U_ENABLE_GENERIC_ISO_2022
-static void
+static void
T_UConverter_toUnicode_ISO_2022_OFFSETS_LOGIC(UConverterToUnicodeArgs* args, UErrorCode* err);
#endif
@@ -395,7 +415,7 @@ fromUWriteUInt8(UConverter *cnv,
}
-static U_INLINE void
+static U_INLINE void
setInitialStateToUnicodeKR(UConverter* converter, UConverterDataISO2022 *myConverterData){
if(myConverterData->version == 1) {
UConverter *cnv = myConverterData->currentConverter;
@@ -406,7 +426,7 @@ setInitialStateToUnicodeKR(UConverter* converter, UConverterDataISO2022 *myConve
}
}
-static U_INLINE void
+static U_INLINE void
setInitialStateFromUnicodeKR(UConverter* converter,UConverterDataISO2022 *myConverterData){
/* in ISO-2022-KR the designator sequence appears only once
* in a file so we append it only once
@@ -427,7 +447,7 @@ setInitialStateFromUnicodeKR(UConverter* converter,UConverterDataISO2022 *myConv
}
}
-static void
+static void
_ISO2022Open(UConverter *cnv, const char *name, const char *locale,uint32_t options, UErrorCode *errorCode){
char myLocale[6]={' ',' ',' ',' ',' ',' '};
@@ -445,7 +465,7 @@ _ISO2022Open(UConverter *cnv, const char *name, const char *locale,uint32_t opti
}
version = options & UCNV_OPTIONS_VERSION_MASK;
myConverterData->version = version;
- if(myLocale[0]=='j' && (myLocale[1]=='a'|| myLocale[1]=='p') &&
+ if(myLocale[0]=='j' && (myLocale[1]=='a'|| myLocale[1]=='p') &&
(myLocale[2]=='_' || myLocale[2]=='\0'))
{
size_t len=0;
@@ -453,8 +473,7 @@ _ISO2022Open(UConverter *cnv, const char *name, const char *locale,uint32_t opti
if(jpCharsetMasks[version]&CSM(ISO8859_7)) {
myConverterData->myConverterArray[ISO8859_7]= ucnv_loadSharedData("ISO8859_7", NULL, errorCode);
}
- myConverterData->myConverterArray[JISX201] = ucnv_loadSharedData("JISX0201", NULL, errorCode);
- myConverterData->myConverterArray[JISX208] = ucnv_loadSharedData("jisx-208", NULL, errorCode);
+ myConverterData->myConverterArray[JISX208] = ucnv_loadSharedData("Shift-JIS", NULL, errorCode);
if(jpCharsetMasks[version]&CSM(JISX212)) {
myConverterData->myConverterArray[JISX212] = ucnv_loadSharedData("jisx-212", NULL, errorCode);
}
@@ -469,12 +488,12 @@ _ISO2022Open(UConverter *cnv, const char *name, const char *locale,uint32_t opti
cnv->sharedData=(UConverterSharedData*)(&_ISO2022JPData);
uprv_strcpy(myConverterData->locale,"ja");
- uprv_strcpy(myConverterData->name,"ISO_2022,locale=ja,version=");
+ (void)uprv_strcpy(myConverterData->name,"ISO_2022,locale=ja,version=");
len = uprv_strlen(myConverterData->name);
myConverterData->name[len]=(char)(myConverterData->version+(int)'0');
myConverterData->name[len+1]='\0';
}
- else if(myLocale[0]=='k' && (myLocale[1]=='o'|| myLocale[1]=='r') &&
+ else if(myLocale[0]=='k' && (myLocale[1]=='o'|| myLocale[1]=='r') &&
(myLocale[2]=='_' || myLocale[2]=='\0'))
{
if (version==1){
@@ -486,7 +505,7 @@ _ISO2022Open(UConverter *cnv, const char *name, const char *locale,uint32_t opti
return;
}
- uprv_strcpy(myConverterData->name,"ISO_2022,locale=ko,version=1");
+ (void)uprv_strcpy(myConverterData->name,"ISO_2022,locale=ko,version=1");
uprv_memcpy(cnv->subChars, myConverterData->currentConverter->subChars, 4);
cnv->subCharLen = myConverterData->currentConverter->subCharLen;
}else{
@@ -498,7 +517,7 @@ _ISO2022Open(UConverter *cnv, const char *name, const char *locale,uint32_t opti
}
myConverterData->version = 0;
- uprv_strcpy(myConverterData->name,"ISO_2022,locale=ko,version=0");
+ (void)uprv_strcpy(myConverterData->name,"ISO_2022,locale=ko,version=0");
}
/* initialize the state variables */
@@ -509,7 +528,7 @@ _ISO2022Open(UConverter *cnv, const char *name, const char *locale,uint32_t opti
cnv->sharedData=(UConverterSharedData*)&_ISO2022KRData;
uprv_strcpy(myConverterData->locale,"ko");
}
- else if(((myLocale[0]=='z' && myLocale[1]=='h') || (myLocale[0]=='c'&& myLocale[1]=='n'))&&
+ else if(((myLocale[0]=='z' && myLocale[1]=='h') || (myLocale[0]=='c'&& myLocale[1]=='n'))&&
(myLocale[2]=='_' || myLocale[2]=='\0'))
{
@@ -526,10 +545,10 @@ _ISO2022Open(UConverter *cnv, const char *name, const char *locale,uint32_t opti
uprv_strcpy(myConverterData->locale,"cn");
if (version==1){
- uprv_strcpy(myConverterData->name,"ISO_2022,locale=zh,version=1");
+ (void)uprv_strcpy(myConverterData->name,"ISO_2022,locale=zh,version=1");
}else{
myConverterData->version = 0;
- uprv_strcpy(myConverterData->name,"ISO_2022,locale=zh,version=0");
+ (void)uprv_strcpy(myConverterData->name,"ISO_2022,locale=zh,version=0");
}
}
else{
@@ -605,7 +624,7 @@ _ISO2022Reset(UConverter *converter, UConverterResetChoice choice) {
ucnv_close (myConverterData->currentConverter);
myConverterData->currentConverter=NULL;
}
- converter->mode = UCNV_SI;
+ converter->mode = UCNV_SI;
}
if(choice!=UCNV_RESET_TO_UNICODE) {
/* re-append UTF-8 escape sequence */
@@ -630,7 +649,7 @@ _ISO2022Reset(UConverter *converter, UConverterResetChoice choice) {
}
}
-static const char*
+static const char*
_ISO2022getName(const UConverter* cnv){
if(cnv->extraInfo){
UConverterDataISO2022* myData= (UConverterDataISO2022*)cnv->extraInfo;
@@ -654,7 +673,7 @@ _ISO2022getName(const UConverter* cnv){
* $A GB2312
* $(C KSC5601
*/
-static const StateEnum nextStateToUnicodeJP[MAX_STATES_2022]= {
+static const int8_t nextStateToUnicodeJP[MAX_STATES_2022]= {
/* 0 1 2 3 4 5 6 7 8 9 */
INVALID_STATE ,INVALID_STATE ,INVALID_STATE ,INVALID_STATE ,INVALID_STATE ,SS2_STATE ,INVALID_STATE ,INVALID_STATE ,INVALID_STATE ,INVALID_STATE
,ASCII ,INVALID_STATE ,INVALID_STATE ,INVALID_STATE ,INVALID_STATE ,INVALID_STATE ,JISX201 ,HWKANA_7BIT ,JISX201 ,INVALID_STATE
@@ -667,7 +686,7 @@ static const StateEnum nextStateToUnicodeJP[MAX_STATES_2022]= {
};
/*************** to unicode *******************/
-static const StateEnum nextStateToUnicodeCN[MAX_STATES_2022]= {
+static const int8_t nextStateToUnicodeCN[MAX_STATES_2022]= {
/* 0 1 2 3 4 5 6 7 8 9 */
INVALID_STATE ,INVALID_STATE ,INVALID_STATE ,INVALID_STATE ,INVALID_STATE ,SS2_STATE ,SS3_STATE ,INVALID_STATE ,INVALID_STATE ,INVALID_STATE
,INVALID_STATE ,INVALID_STATE ,INVALID_STATE ,INVALID_STATE ,INVALID_STATE ,INVALID_STATE ,INVALID_STATE ,INVALID_STATE ,INVALID_STATE ,INVALID_STATE
@@ -680,7 +699,7 @@ static const StateEnum nextStateToUnicodeCN[MAX_STATES_2022]= {
};
-static UCNV_TableStates_2022
+static UCNV_TableStates_2022
getKey_2022(char c,int32_t* key,int32_t* offset){
int32_t togo;
int32_t low = 0;
@@ -700,7 +719,7 @@ getKey_2022(char c,int32_t* key,int32_t* offset){
register int32_t mid = (hi+low) >> 1; /*Finds median*/
- if (mid == oldmid)
+ if (mid == oldmid)
break;
if (escSeqStateTable_Key_2022[mid] > togo){
@@ -712,7 +731,7 @@ getKey_2022(char c,int32_t* key,int32_t* offset){
else /*we found it*/{
*key = togo;
*offset = mid;
- return escSeqStateTable_Value_2022[mid];
+ return (UCNV_TableStates_2022)escSeqStateTable_Value_2022[mid];
}
oldmid = mid;
@@ -725,9 +744,9 @@ getKey_2022(char c,int32_t* key,int32_t* offset){
/*runs through a state machine to determine the escape sequence - codepage correspondance
*/
-static void
+static void
changeState_2022(UConverter* _this,
- const char** source,
+ const char** source,
const char* sourceLimit,
Variant2022 var,
UErrorCode* err){
@@ -743,7 +762,7 @@ changeState_2022(UConverter* _this,
c = *(*source)++;
_this->toUBytes[_this->toULength++]=(uint8_t)c;
value = getKey_2022(c,(int32_t *) &key, &offset);
-
+
switch (value){
case VALID_NON_TERMINAL_2022 :
@@ -797,6 +816,7 @@ DONE:
if(chosenConverterName == NULL) {
/* SS2 or SS3 */
*err = U_UNSUPPORTED_ESCAPE_SEQUENCE;
+ _this->toUCallbackReason = UCNV_UNASSIGNED;
return;
}
@@ -812,7 +832,7 @@ DONE:
#endif
case ISO_2022_JP:
{
- StateEnum tempState=nextStateToUnicodeJP[offset];
+ StateEnum tempState=(StateEnum)nextStateToUnicodeJP[offset];
switch(tempState) {
case INVALID_STATE:
*err = U_UNSUPPORTED_ESCAPE_SEQUENCE;
@@ -851,7 +871,7 @@ DONE:
break;
case ISO_2022_CN:
{
- StateEnum tempState=nextStateToUnicodeCN[offset];
+ StateEnum tempState=(StateEnum)nextStateToUnicodeCN[offset];
switch(tempState) {
case INVALID_STATE:
*err = U_UNSUPPORTED_ESCAPE_SEQUENCE;
@@ -947,6 +967,8 @@ DONE:
}
_this->toULength=1;
}
+ } else if(*err==U_UNSUPPORTED_ESCAPE_SEQUENCE) {
+ _this->toUCallbackReason = UCNV_UNASSIGNED;
}
}
@@ -958,7 +980,7 @@ DONE:
*to determine the longest possible convertible
*data stream
*/
-static U_INLINE const char*
+static U_INLINE const char*
getEndOfBuffer_2022(const char** source,
const char* sourceLimit,
UBool flush){
@@ -966,7 +988,7 @@ getEndOfBuffer_2022(const char** source,
const char* mySource = *source;
#ifdef U_ENABLE_GENERIC_ISO_2022
- if (*source >= sourceLimit)
+ if (*source >= sourceLimit)
return sourceLimit;
do{
@@ -983,15 +1005,15 @@ getEndOfBuffer_2022(const char** source,
* is it possible to have an ESC character in a ISO2022
* byte stream which is valid in a code page? Is it legal?
*/
- for (i=0;
+ for (i=0;
(mySource+i < sourceLimit)&&(value == VALID_NON_TERMINAL_2022);
i++) {
value = getKey_2022(*(mySource+i), &key, &offset);
}
- if (value > 0 || *mySource==ESC_2022)
+ if (value > 0 || *mySource==ESC_2022)
return mySource;
- if ((value == VALID_NON_TERMINAL_2022)&&(!flush) )
+ if ((value == VALID_NON_TERMINAL_2022)&&(!flush) )
return sourceLimit;
}
}while (++mySource < sourceLimit);
@@ -1007,22 +1029,27 @@ getEndOfBuffer_2022(const char** source,
/* This inline function replicates code in _MBCSFromUChar32() function in ucnvmbcs.c
- * any future change in _MBCSFromUChar32() function should be reflected in
- * this macro
+ * any future change in _MBCSFromUChar32() function should be reflected here.
+ * @return number of bytes in *value; negative number if fallback; 0 if no mapping
*/
-static U_INLINE void
+static U_INLINE int32_t
MBCS_FROM_UCHAR32_ISO2022(UConverterSharedData* sharedData,
- UChar32 c,
- uint32_t* value,
- UBool useFallback,
- int32_t *length,
+ UChar32 c,
+ uint32_t* value,
+ UBool useFallback,
int outputType)
{
const int32_t *cx;
const uint16_t *table;
uint32_t stage2Entry;
uint32_t myValue;
+ int32_t length;
const uint8_t *p;
+ /*
+ * TODO(markus): Use and require new, faster MBCS conversion table structures.
+ * Use internal version of ucnv_open() that verifies that the new structures are available,
+ * else U_INTERNAL_PROGRAM_ERROR.
+ */
/* BMP-only codepages are stored without stage 1 entries for supplementary code points */
if(c<0x10000 || (sharedData->mbcs.unicodeMask&UCNV_HAS_SUPPLEMENTARY)) {
table=sharedData->mbcs.fromUnicodeTable;
@@ -1031,76 +1058,113 @@ MBCS_FROM_UCHAR32_ISO2022(UConverterSharedData* sharedData,
if(outputType==MBCS_OUTPUT_2){
myValue=MBCS_VALUE_2_FROM_STAGE_2(sharedData->mbcs.fromUnicodeBytes, stage2Entry, c);
if(myValue<=0xff) {
- *length=1;
+ length=1;
} else {
- *length=2;
+ length=2;
}
} else /* outputType==MBCS_OUTPUT_3 */ {
p=MBCS_POINTER_3_FROM_STAGE_2(sharedData->mbcs.fromUnicodeBytes, stage2Entry, c);
myValue=((uint32_t)*p<<16)|((uint32_t)p[1]<<8)|p[2];
if(myValue<=0xff) {
- *length=1;
+ length=1;
} else if(myValue<=0xffff) {
- *length=2;
+ length=2;
} else {
- *length=3;
+ length=3;
}
}
/* is this code point assigned, or do we use fallbacks? */
- if( (stage2Entry&(1<<(16+(c&0xf))))!=0 ||
- (FROM_U_USE_FALLBACK(useFallback, c) && myValue!=0)
- ) {
+ if((stage2Entry&(1<<(16+(c&0xf))))!=0) {
+ /* assigned */
+ *value=myValue;
+ return length;
+ } else if(FROM_U_USE_FALLBACK(useFallback, c) && myValue!=0) {
/*
* We allow a 0 byte output if the "assigned" bit is set for this entry.
* There is no way with this data structure for fallback output
* to be a zero byte.
*/
- /* assigned */
*value=myValue;
- return;
+ return -length;
}
}
cx=sharedData->mbcs.extIndexes;
if(cx!=NULL) {
- *length=ucnv_extSimpleMatchFromU(cx, c, value, useFallback);
- return;
+ return ucnv_extSimpleMatchFromU(cx, c, value, useFallback);
}
/* unassigned */
- *length=0;
+ return 0;
}
/* This inline function replicates code in _MBCSSingleFromUChar32() function in ucnvmbcs.c
- * any future change in _MBCSSingleFromUChar32() function should be reflected in
- * this macro
+ * any future change in _MBCSSingleFromUChar32() function should be reflected here.
+ * @param retval pointer to output byte
+ * @return 1 roundtrip byte 0 no mapping -1 fallback byte
*/
-static U_INLINE void
+static U_INLINE int32_t
MBCS_SINGLE_FROM_UCHAR32(UConverterSharedData* sharedData,
- UChar32 c,
- uint32_t* retval,
+ UChar32 c,
+ uint32_t* retval,
UBool useFallback)
{
- const uint16_t *table;
+ const uint16_t *table;
int32_t value;
/* BMP-only codepages are stored without stage 1 entries for supplementary code points */
if(c>=0x10000 && !(sharedData->mbcs.unicodeMask&UCNV_HAS_SUPPLEMENTARY)) {
- *retval=(uint16_t)-1;
- return;
+ return 0;
}
/* convert the Unicode code point in c into codepage bytes (same as in _MBCSFromUnicodeWithOffsets) */
table=sharedData->mbcs.fromUnicodeTable;
/* get the byte for the output */
value=MBCS_SINGLE_RESULT_FROM_U(table, (uint16_t *)sharedData->mbcs.fromUnicodeBytes, c);
/* is this code point assigned, or do we use fallbacks? */
- if(useFallback ? value>=0x800 : value>=0xc00) {
- value &=0xff;
+ *retval=(uint32_t)(value&0xff);
+ if(value>=0xf00) {
+ return 1; /* roundtrip */
+ } else if(useFallback ? value>=0x800 : value>=0xc00) {
+ return -1; /* fallback taken */
} else {
- value= -1;
+ return 0; /* no mapping */
}
- *retval=(uint16_t) value;
}
+/*
+ * Check that the result is a 2-byte value with each byte in the range A1..FE
+ * (strict EUC DBCS) before accepting it and subtracting 0x80 from each byte
+ * to move it to the ISO 2022 range 21..7E.
+ * Return 0 if out of range.
+ */
+static U_INLINE uint32_t
+_2022FromGR94DBCS(uint32_t value) {
+ if( (uint16_t)(value - 0xa1a1) <= (0xfefe - 0xa1a1) &&
+ (uint8_t)(value - 0xa1) <= (0xfe - 0xa1)
+ ) {
+ return value - 0x8080; /* shift down to 21..7e byte range */
+ } else {
+ return 0; /* not valid for ISO 2022 */
+ }
+}
+
+#if 0 /* 5691: Call sites now check for validity. They can just += 0x8080 after that. */
+/*
+ * This method does the reverse of _2022FromGR94DBCS(). Given the 2022 code point, it returns the
+ * 2 byte value that is in the range A1..FE for each byte. Otherwise it returns the 2022 code point
+ * unchanged.
+ */
+static U_INLINE uint32_t
+_2022ToGR94DBCS(uint32_t value) {
+ uint32_t returnValue = value + 0x8080;
+ if( (uint16_t)(returnValue - 0xa1a1) <= (0xfefe - 0xa1a1) &&
+ (uint8_t)(returnValue - 0xa1) <= (0xfe - 0xa1)) {
+ return returnValue;
+ } else {
+ return value;
+ }
+}
+#endif
+
#ifdef U_ENABLE_GENERIC_ISO_2022
/**********************************************************************************
@@ -1109,7 +1173,7 @@ MBCS_SINGLE_FROM_UCHAR32(UConverterSharedData* sharedData,
*
*/
-static void
+static void
T_UConverter_toUnicode_ISO_2022_OFFSETS_LOGIC(UConverterToUnicodeArgs* args,
UErrorCode* err){
const char* mySourceLimit, *realSourceLimit;
@@ -1202,7 +1266,7 @@ T_UConverter_toUnicode_ISO_2022_OFFSETS_LOGIC(UConverterToUnicodeArgs* args,
sourceStart = args->source;
changeState_2022(args->converter,
- &(args->source),
+ &(args->source),
realSourceLimit,
ISO_2022,
err);
@@ -1218,7 +1282,7 @@ T_UConverter_toUnicode_ISO_2022_OFFSETS_LOGIC(UConverterToUnicodeArgs* args,
/*
* To Unicode Callback helper function
*/
-static void
+static void
toUnicodeCallback(UConverter *cnv,
const uint32_t sourceChar, const uint32_t targetUniChar,
UErrorCode* err){
@@ -1245,24 +1309,24 @@ toUnicodeCallback(UConverter *cnv,
/************************************** IMPORTANT **************************************************
* The UConverter_fromUnicode_ISO2022_JP converter does not use ucnv_fromUnicode() functions for SBCS,DBCS and
* MBCS; instead, the values are obtained directly by calling _MBCSFromUChar32().
-* The converter iterates over each Unicode codepoint
-* to obtain the equivalent codepoints from the codepages supported. Since the source buffer is
-* processed one char at a time it would make sense to reduce the extra processing a canned converter
+* The converter iterates over each Unicode codepoint
+* to obtain the equivalent codepoints from the codepages supported. Since the source buffer is
+* processed one char at a time it would make sense to reduce the extra processing a canned converter
* would do as far as possible.
*
-* If the implementation of these macros or structure of sharedData struct change in the future, make
-* sure that ISO-2022 is also changed.
+* If the implementation of these macros or structure of sharedData struct change in the future, make
+* sure that ISO-2022 is also changed.
***************************************************************************************************
*/
/***************************************************************************************************
* Rules for ISO-2022-jp encoding
-* (i) Escape sequences must be fully contained within a line they should not
+* (i) Escape sequences must be fully contained within a line they should not
* span new lines or CRs
* (ii) If the last character on a line is represented by two bytes then an ASCII or
* JIS-Roman character escape sequence should follow before the line terminates
-* (iii) If the first character on the line is represented by two bytes then a two
-* byte character escape sequence should precede it
+* (iii) If the first character on the line is represented by two bytes then a two
+* byte character escape sequence should precede it
* (iv) If no escape sequence is encountered then the characters are ASCII
* (v) Latin(ISO-8859-1) and Greek(ISO-8859-7) characters must be designated to G2,
* and invoked with SS2 (ESC N).
@@ -1311,7 +1375,7 @@ static const char escSeqChars[][6] ={
"\x1B\x28\x49" /* (I HWKANA_7BIT */
};
-static const int32_t escSeqCharsLen[] ={
+static const int8_t escSeqCharsLen[] ={
3, /* length of (B ASCII */
3, /* length of .A ISO-8859-1 */
3, /* length of .F ISO-8859-7 */
@@ -1330,18 +1394,194 @@ static const int32_t escSeqCharsLen[] ={
* Yes -> a) set the initIterState to currentState
* b) remain in this state until an invalid character is found
* No -> a) go to the next code page and find the character
-* iii) Before changing the state increment the current state check if the current state
+* iii) Before changing the state increment the current state check if the current state
* is equal to the intitIteration state
* Yes -> A character that cannot be represented in any of the supported encodings
* break and return a U_INVALID_CHARACTER error
* No -> Continue and find the character in next code page
*
*
-* TODO: Implement a priority technique where the users are allowed to set the priority of code pages
+* TODO: Implement a priority technique where the users are allowed to set the priority of code pages
*/
-static void
+/* Map 00..7F to Unicode according to JIS X 0201. */
+static U_INLINE uint32_t
+jisx201ToU(uint32_t value) {
+ if(value < 0x5c) {
+ return value;
+ } else if(value == 0x5c) {
+ return 0xa5;
+ } else if(value == 0x7e) {
+ return 0x203e;
+ } else /* value <= 0x7f */ {
+ return value;
+ }
+}
+
+/* Map Unicode to 00..7F according to JIS X 0201. Return U+FFFE if unmappable. */
+static U_INLINE uint32_t
+jisx201FromU(uint32_t value) {
+ if(value<=0x7f) {
+ if(value!=0x5c && value!=0x7e) {
+ return value;
+ }
+ } else if(value==0xa5) {
+ return 0x5c;
+ } else if(value==0x203e) {
+ return 0x7e;
+ }
+ return 0xfffe;
+}
+
+/*
+ * Take a valid Shift-JIS byte pair, check that it is in the range corresponding
+ * to JIS X 0208, and convert it to a pair of 21..7E bytes.
+ * Return 0 if the byte pair is out of range.
+ */
+static U_INLINE uint32_t
+_2022FromSJIS(uint32_t value) {
+ uint8_t trail;
+
+ if(value > 0xEFFC) {
+ return 0; /* beyond JIS X 0208 */
+ }
+
+ trail = (uint8_t)value;
+
+ value &= 0xff00; /* lead byte */
+ if(value <= 0x9f00) {
+ value -= 0x7000;
+ } else /* 0xe000 <= value <= 0xef00 */ {
+ value -= 0xb000;
+ }
+ value <<= 1;
+
+ if(trail <= 0x9e) {
+ value -= 0x100;
+ if(trail <= 0x7e) {
+ value |= trail - 0x1f;
+ } else {
+ value |= trail - 0x20;
+ }
+ } else /* trail <= 0xfc */ {
+ value |= trail - 0x7e;
+ }
+ return value;
+}
+
+/*
+ * Convert a pair of JIS X 0208 21..7E bytes to Shift-JIS.
+ * If either byte is outside 21..7E make sure that the result is not valid
+ * for Shift-JIS so that the converter catches it.
+ * Some invalid byte values already turn into equally invalid Shift-JIS
+ * byte values and need not be tested explicitly.
+ */
+static U_INLINE void
+_2022ToSJIS(uint8_t c1, uint8_t c2, char bytes[2]) {
+ if(c1&1) {
+ ++c1;
+ if(c2 <= 0x5f) {
+ c2 += 0x1f;
+ } else if(c2 <= 0x7e) {
+ c2 += 0x20;
+ } else {
+ c2 = 0; /* invalid */
+ }
+ } else {
+ if((uint8_t)(c2-0x21) <= ((0x7e)-0x21)) {
+ c2 += 0x7e;
+ } else {
+ c2 = 0; /* invalid */
+ }
+ }
+ c1 >>= 1;
+ if(c1 <= 0x2f) {
+ c1 += 0x70;
+ } else if(c1 <= 0x3f) {
+ c1 += 0xb0;
+ } else {
+ c1 = 0; /* invalid */
+ }
+ bytes[0] = (char)c1;
+ bytes[1] = (char)c2;
+}
+
+/*
+ * JIS X 0208 has fallbacks from Unicode half-width Katakana to full-width (DBCS)
+ * Katakana.
+ * Now that we use a Shift-JIS table for JIS X 0208 we need to hardcode these fallbacks
+ * because Shift-JIS roundtrips half-width Katakana to single bytes.
+ * These were the only fallbacks in ICU's jisx-208.ucm file.
+ */
+static const uint16_t hwkana_fb[HWKANA_END - HWKANA_START + 1] = {
+ 0x2123, /* U+FF61 */
+ 0x2156,
+ 0x2157,
+ 0x2122,
+ 0x2126,
+ 0x2572,
+ 0x2521,
+ 0x2523,
+ 0x2525,
+ 0x2527,
+ 0x2529,
+ 0x2563,
+ 0x2565,
+ 0x2567,
+ 0x2543,
+ 0x213C, /* U+FF70 */
+ 0x2522,
+ 0x2524,
+ 0x2526,
+ 0x2528,
+ 0x252A,
+ 0x252B,
+ 0x252D,
+ 0x252F,
+ 0x2531,
+ 0x2533,
+ 0x2535,
+ 0x2537,
+ 0x2539,
+ 0x253B,
+ 0x253D,
+ 0x253F, /* U+FF80 */
+ 0x2541,
+ 0x2544,
+ 0x2546,
+ 0x2548,
+ 0x254A,
+ 0x254B,
+ 0x254C,
+ 0x254D,
+ 0x254E,
+ 0x254F,
+ 0x2552,
+ 0x2555,
+ 0x2558,
+ 0x255B,
+ 0x255E,
+ 0x255F, /* U+FF90 */
+ 0x2560,
+ 0x2561,
+ 0x2562,
+ 0x2564,
+ 0x2566,
+ 0x2568,
+ 0x2569,
+ 0x256A,
+ 0x256B,
+ 0x256C,
+ 0x256D,
+ 0x256F,
+ 0x2573,
+ 0x212B,
+ 0x212C /* U+FF9F */
+};
+
+static void
UConverter_fromUnicode_ISO_2022_JP_OFFSETS_LOGIC(UConverterFromUnicodeArgs* args, UErrorCode* err) {
+ UConverter *cnv = args->converter;
UConverterDataISO2022 *converterData;
ISO2022State *pFromU2022State;
uint8_t *target = (uint8_t *) args->target;
@@ -1361,14 +1601,13 @@ UConverter_fromUnicode_ISO_2022_JP_OFFSETS_LOGIC(UConverterFromUnicodeArgs* args
int8_t cs, g;
/* set up the state */
- converterData = (UConverterDataISO2022*)args->converter->extraInfo;
+ converterData = (UConverterDataISO2022*)cnv->extraInfo;
pFromU2022State = &converterData->fromU2022State;
- useFallback = args->converter->useFallback;
choiceCount = 0;
/* check if the last codepoint of previous buffer was a lead surrogate*/
- if((sourceChar = args->converter->fromUChar32)!=0 && target< targetLimit) {
+ if((sourceChar = cnv->fromUChar32)!=0 && target< targetLimit) {
goto getTrail;
}
@@ -1387,26 +1626,26 @@ getTrail:
if(UTF_IS_SECOND_SURROGATE(trail)) {
source++;
sourceChar=UTF16_GET_PAIR_VALUE(sourceChar, trail);
- args->converter->fromUChar32=0x00;
+ cnv->fromUChar32=0x00;
/* convert this supplementary code point */
/* exit this condition tree */
} else {
/* this is an unmatched lead code unit (1st surrogate) */
/* callback(illegal) */
*err=U_ILLEGAL_CHAR_FOUND;
- args->converter->fromUChar32=sourceChar;
+ cnv->fromUChar32=sourceChar;
break;
}
} else {
/* no more input */
- args->converter->fromUChar32=sourceChar;
+ cnv->fromUChar32=sourceChar;
break;
}
} else {
/* this is an unmatched trail code unit (2nd surrogate) */
/* callback(illegal) */
*err=U_ILLEGAL_CHAR_FOUND;
- args->converter->fromUChar32=sourceChar;
+ cnv->fromUChar32=sourceChar;
break;
}
}
@@ -1415,7 +1654,7 @@ getTrail:
if(IS_2022_CONTROL(sourceChar)) {
/* callback(illegal) */
*err=U_ILLEGAL_CHAR_FOUND;
- args->converter->fromUChar32=sourceChar;
+ cnv->fromUChar32=sourceChar;
break;
}
@@ -1433,9 +1672,10 @@ getTrail:
/* JIS7/8: try single-byte half-width Katakana before JISX208 */
if(converterData->version == 3 || converterData->version == 4) {
- choices[choiceCount++] = cs = (int8_t)HWKANA_7BIT;
- csm &= ~CSM(cs);
+ choices[choiceCount++] = (int8_t)HWKANA_7BIT;
}
+ /* Do not try single-byte half-width Katakana for other versions. */
+ csm &= ~CSM(HWKANA_7BIT);
/* try the current G0 charset */
choices[choiceCount++] = cs = pFromU2022State->cs[0];
@@ -1458,86 +1698,148 @@ getTrail:
}
cs = g = 0;
+ /*
+ * len==0: no mapping found yet
+ * len<0: found a fallback result: continue looking for a roundtrip but no further fallbacks
+ * len>0: found a roundtrip result, done
+ */
len = 0;
+ /*
+ * We will turn off useFallback after finding a fallback,
+ * but we still get fallbacks from PUA code points as usual.
+ * Therefore, we will also need to check that we don't overwrite
+ * an early fallback with a later one.
+ */
+ useFallback = cnv->useFallback;
- for(i = 0; i < choiceCount && len == 0; ++i) {
- cs = choices[i];
- switch(cs) {
+ for(i = 0; i < choiceCount && len <= 0; ++i) {
+ uint32_t value;
+ int32_t len2;
+ int8_t cs0 = choices[i];
+ switch(cs0) {
case ASCII:
if(sourceChar <= 0x7f) {
targetValue = (uint32_t)sourceChar;
len = 1;
+ cs = cs0;
+ g = 0;
}
break;
case ISO8859_1:
- if(0x80 <= sourceChar && sourceChar <= 0xff) {
+ if(GR96_START <= sourceChar && sourceChar <= GR96_END) {
targetValue = (uint32_t)sourceChar - 0x80;
len = 1;
+ cs = cs0;
g = 2;
}
break;
case HWKANA_7BIT:
- if((uint32_t)(0xff9f-sourceChar)<=(0xff9f-0xff61)) {
- targetValue = (uint32_t)(sourceChar - (0xff61 - 0x21));
- len = 1;
-
+ if((uint32_t)(sourceChar - HWKANA_START) <= (HWKANA_END - HWKANA_START)) {
if(converterData->version==3) {
/* JIS7: use G1 (SO) */
- pFromU2022State->cs[1] = cs; /* do not output an escape sequence */
+ /* Shift U+FF61..U+FF9F to bytes 21..5F. */
+ targetValue = (uint32_t)(sourceChar - (HWKANA_START - 0x21));
+ len = 1;
+ pFromU2022State->cs[1] = cs = cs0; /* do not output an escape sequence */
g = 1;
} else if(converterData->version==4) {
/* JIS8: use 8-bit bytes with any single-byte charset, see escape sequence output below */
- int8_t cs0;
-
- targetValue += 0x80;
+ /* Shift U+FF61..U+FF9F to bytes A1..DF. */
+ targetValue = (uint32_t)(sourceChar - (HWKANA_START - 0xa1));
+ len = 1;
- cs0 = pFromU2022State->cs[0];
- if(IS_JP_DBCS(cs0)) {
+ cs = pFromU2022State->cs[0];
+ if(IS_JP_DBCS(cs)) {
/* switch from a DBCS charset to JISX201 */
cs = (int8_t)JISX201;
- } else {
- /* stay in the current G0 charset */
- cs = cs0;
}
+ /* else stay in the current G0 charset */
+ g = 0;
}
+ /* else do not use HWKANA_7BIT with other versions */
}
break;
case JISX201:
/* G0 SBCS */
- MBCS_SINGLE_FROM_UCHAR32(
- converterData->myConverterArray[cs],
- sourceChar, &targetValue,
- useFallback);
- if(targetValue <= 0x7f) {
+ value = jisx201FromU(sourceChar);
+ if(value <= 0x7f) {
+ targetValue = value;
len = 1;
+ cs = cs0;
+ g = 0;
+ useFallback = FALSE;
+ }
+ break;
+ case JISX208:
+ /* G0 DBCS from Shift-JIS table */
+ len2 = MBCS_FROM_UCHAR32_ISO2022(
+ converterData->myConverterArray[cs0],
+ sourceChar, &value,
+ useFallback, MBCS_OUTPUT_2);
+ if(len2 == 2 || (len2 == -2 && len == 0)) { /* only accept DBCS: abs(len)==2 */
+ value = _2022FromSJIS(value);
+ if(value != 0) {
+ targetValue = value;
+ len = len2;
+ cs = cs0;
+ g = 0;
+ useFallback = FALSE;
+ }
+ } else if(len == 0 && useFallback &&
+ (uint32_t)(sourceChar - HWKANA_START) <= (HWKANA_END - HWKANA_START)) {
+ targetValue = hwkana_fb[sourceChar - HWKANA_START];
+ len = -2;
+ cs = cs0;
+ g = 0;
+ useFallback = FALSE;
}
break;
case ISO8859_7:
/* G0 SBCS forced to 7-bit output */
- MBCS_SINGLE_FROM_UCHAR32(
- converterData->myConverterArray[cs],
- sourceChar, &targetValue,
- useFallback);
- if(0x80 <= targetValue && targetValue <= 0xff) {
- targetValue -= 0x80;
- len = 1;
+ len2 = MBCS_SINGLE_FROM_UCHAR32(
+ converterData->myConverterArray[cs0],
+ sourceChar, &value,
+ useFallback);
+ if(len2 != 0 && !(len2 < 0 && len != 0) && GR96_START <= value && value <= GR96_END) {
+ targetValue = value - 0x80;
+ len = len2;
+ cs = cs0;
g = 2;
+ useFallback = FALSE;
}
break;
default:
/* G0 DBCS */
- MBCS_FROM_UCHAR32_ISO2022(
- converterData->myConverterArray[cs],
- sourceChar, &targetValue,
- useFallback, &len, MBCS_OUTPUT_2);
- if(len != 2) {
- len = 0;
+ len2 = MBCS_FROM_UCHAR32_ISO2022(
+ converterData->myConverterArray[cs0],
+ sourceChar, &value,
+ useFallback, MBCS_OUTPUT_2);
+ if(len2 == 2 || (len2 == -2 && len == 0)) { /* only accept DBCS: abs(len)==2 */
+ if(cs0 == KSC5601) {
+ /*
+ * Check for valid bytes for the encoding scheme.
+ * This is necessary because the sub-converter (windows-949)
+ * has a broader encoding scheme than is valid for 2022.
+ */
+ value = _2022FromGR94DBCS(value);
+ if(value == 0) {
+ break;
+ }
+ }
+ targetValue = value;
+ len = len2;
+ cs = cs0;
+ g = 0;
+ useFallback = FALSE;
}
break;
}
}
- if(len > 0) {
+ if(len != 0) {
+ if(len < 0) {
+ len = -len; /* fallback */
+ }
outLen = 0; /* count output bytes */
/* write SI if necessary (only for JIS7) */
@@ -1582,11 +1884,11 @@ getTrail:
}
} else {
/*
- * if we cannot find the character after checking all codepages
+ * if we cannot find the character after checking all codepages
* then this is an error
*/
*err = U_INVALID_CHAR_FOUND;
- args->converter->fromUChar32=sourceChar;
+ cnv->fromUChar32=sourceChar;
break;
}
@@ -1612,7 +1914,7 @@ getTrail:
}
} else {
fromUWriteUInt8(
- args->converter,
+ cnv,
buffer, outLen,
&target, (const char *)targetLimit,
&offsets, (int32_t)(source - args->source - U16_LENGTH(sourceChar)),
@@ -1641,7 +1943,7 @@ getTrail:
*/
if( U_SUCCESS(*err) &&
(pFromU2022State->g!=0 || pFromU2022State->cs[0]!=ASCII) &&
- args->flush && source>=sourceLimit && args->converter->fromUChar32==0
+ args->flush && source>=sourceLimit && cnv->fromUChar32==0
) {
int32_t sourceIndex;
@@ -1680,7 +1982,7 @@ getTrail:
}
fromUWriteUInt8(
- args->converter,
+ cnv,
buffer, outLen,
&target, (const char *)targetLimit,
&offsets, sourceIndex,
@@ -1694,15 +1996,16 @@ getTrail:
/*************** to unicode *******************/
-static void
+static void
UConverter_toUnicode_ISO_2022_JP_OFFSETS_LOGIC(UConverterToUnicodeArgs *args,
UErrorCode* err){
- char tempBuf[3];
+ char tempBuf[2];
const char *mySource = (char *) args->source;
UChar *myTarget = args->target;
const char *mySourceLimit = args->sourceLimit;
uint32_t targetUniChar = 0x0000;
uint32_t mySourceChar = 0x0000;
+ uint32_t tmpSourceChar = 0x0000;
UConverterDataISO2022* myData;
ISO2022State *pToU2022State;
StateEnum cs;
@@ -1760,16 +2063,17 @@ escape:
const char * mySourceBefore = mySource;
int8_t toULengthBefore = args->converter->toULength;
- changeState_2022(args->converter,&(mySource),
+ changeState_2022(args->converter,&(mySource),
mySourceLimit, ISO_2022_JP,err);
/* If in ISO-2022-JP only and we successully completed an escape sequence, but previous segment was empty, create an error */
- if ( myData->version == 0 && myData->key == 0 && U_SUCCESS(*err) && myData->isEmptySegment ) {
- *err = U_PARSE_ERROR; /* temporary err to flag empty segment, will be reset to U_ILLEGAL_ESCAPE_SEQUENCE in _toUnicodeWithCallback */
+ if(myData->version==0 && myData->key==0 && U_SUCCESS(*err) && myData->isEmptySegment) {
+ *err = U_ILLEGAL_ESCAPE_SEQUENCE;
+ args->converter->toUCallbackReason = UCNV_IRREGULAR;
args->converter->toULength = toULengthBefore + (mySource - mySourceBefore);
}
-
}
+
/* invalid or illegal escape sequence */
if(U_FAILURE(*err)){
args->target = myTarget;
@@ -1778,7 +2082,7 @@ escape:
return;
}
/* If we successfully completed an escape sequence, we begin a new segment, empty so far */
- if (myData->key == 0) {
+ if(myData->key==0) {
myData->isEmptySegment = TRUE;
}
continue;
@@ -1803,7 +2107,7 @@ escape:
!IS_JP_DBCS(cs)
) {
/* 8-bit halfwidth katakana in any single-byte mode for JIS8 */
- targetUniChar = mySourceChar + (0xff61 - 0xa1);
+ targetUniChar = mySourceChar + (HWKANA_START - 0xa1);
/* return from a single-shift state to the previous one */
if(pToU2022State->g >= 2) {
@@ -1835,16 +2139,13 @@ escape:
break;
case JISX201:
if(mySourceChar <= 0x7f) {
- targetUniChar =
- _MBCS_SINGLE_SIMPLE_GET_NEXT_BMP(
- myData->myConverterArray[cs],
- mySourceChar);
+ targetUniChar = jisx201ToU(mySourceChar);
}
break;
case HWKANA_7BIT:
if((uint8_t)(mySourceChar - 0x21) <= (0x5f - 0x21)) {
/* 7-bit halfwidth Katakana */
- targetUniChar = mySourceChar + (0xff61 - 0x21);
+ targetUniChar = mySourceChar + (HWKANA_START - 0x21);
}
break;
default:
@@ -1854,17 +2155,11 @@ escape:
uint8_t trailByte;
getTrailByte:
trailByte = (uint8_t)*mySource;
- /* old
- tempBuf[0] = (char) (mySourceChar);
- tempBuf[1] = trailByte = *mySource++;
- mySourceChar = (mySourceChar << 8) | (uint8_t)(trailByte);
- targetUniChar = ucnv_MBCSSimpleGetNextUChar(myData->myConverterArray[cs], tempBuf, 2, FALSE);
- */
/*
* Ticket 5691: consistent illegal sequences:
* - We include at least the first byte in the illegal sequence.
* - If any of the non-initial bytes could be the start of a character,
- *Ê Êwe stop the illegal sequence before the first one of those.
+ * we stop the illegal sequence before the first one of those.
*
* In ISO-2022 DBCS, if the second byte is in the 21..7e range or is
* an ESC/SO/SI, we report only the first byte as the illegal sequence.
@@ -1874,9 +2169,19 @@ getTrailByte:
trailIsOk = (uint8_t)(trailByte - 0x21) <= (0x7e - 0x21);
if (leadIsOk && trailIsOk) {
++mySource;
- tempBuf[0] = (char) (mySourceChar);
- tempBuf[1] = trailByte;
- mySourceChar = (mySourceChar << 8) | trailByte;
+ tmpSourceChar = (mySourceChar << 8) | trailByte;
+ if(cs == JISX208) {
+ _2022ToSJIS((uint8_t)mySourceChar, trailByte, tempBuf);
+ mySourceChar = tmpSourceChar;
+ } else {
+ /* Copy before we modify tmpSourceChar so toUnicodeCallback() sees the correct bytes. */
+ mySourceChar = tmpSourceChar;
+ if (cs == KSC5601) {
+ tmpSourceChar += 0x8080; /* = _2022ToGR94DBCS(tmpSourceChar) */
+ }
+ tempBuf[0] = (char)(tmpSourceChar >> 8);
+ tempBuf[1] = (char)(tmpSourceChar);
+ }
targetUniChar = ucnv_MBCSSimpleGetNextUChar(myData->myConverterArray[cs], tempBuf, 2, FALSE);
} else if (!(trailIsOk || IS_2022_CONTROL(trailByte))) {
/* report a pair of illegal bytes if the second byte is not a DBCS starter */
@@ -1889,9 +2194,9 @@ getTrailByte:
args->converter->toULength = 1;
goto endloop;
}
- }
+ } /* End of inner switch */
break;
- }
+ } /* End of outer switch */
if(targetUniChar < (missingCharMarker-1/*0xfffe*/)){
if(args->offsets){
args->offsets[myTarget - args->target] = (int32_t)(mySource - args->source - (mySourceChar <= 0xff ? 1 : 2));
@@ -1906,7 +2211,7 @@ getTrailByte:
args->offsets[myTarget - args->target] = (int32_t)(mySource - args->source - (mySourceChar <= 0xff ? 1 : 2));
}
++myTarget;
- if(myTarget< args->targetLimit){
+ if(myTarget< args->targetLimit){
*myTarget = (UChar)(0xdc00+(UChar)(targetUniChar&0x3ff));
if(args->offsets){
args->offsets[myTarget - args->target] = (int32_t)(mySource - args->source - (mySourceChar <= 0xff ? 1 : 2));
@@ -1924,7 +2229,7 @@ getTrailByte:
break;
}
}
- else{
+ else{ /* goes with "if(myTarget < args->targetLimit)" way up near top of function */
*err =U_BUFFER_OVERFLOW_ERROR;
break;
}
@@ -1937,13 +2242,13 @@ endloop:
/***************************************************************
* Rules for ISO-2022-KR encoding
-* i) The KSC5601 designator sequence should appear only once in a file,
+* i) The KSC5601 designator sequence should appear only once in a file,
* at the begining of a line before any KSC5601 characters. This usually
* means that it appears by itself on the first line of the file
* ii) There are only 2 shifting sequences SO to shift into double byte mode
* and SI to shift into single byte mode
*/
-static void
+static void
UConverter_fromUnicode_ISO_2022_KR_OFFSETS_LOGIC_IBM(UConverterFromUnicodeArgs* args, UErrorCode* err){
UConverter* saveConv = args->converter;
@@ -1967,7 +2272,7 @@ UConverter_fromUnicode_ISO_2022_KR_OFFSETS_LOGIC_IBM(UConverterFromUnicodeArgs*
args->converter=saveConv;
}
-static void
+static void
UConverter_fromUnicode_ISO_2022_KR_OFFSETS_LOGIC(UConverterFromUnicodeArgs* args, UErrorCode* err){
const UChar *source = args->source;
@@ -1985,8 +2290,8 @@ UConverter_fromUnicode_ISO_2022_KR_OFFSETS_LOGIC(UConverterFromUnicodeArgs* args
int32_t length =0;
converterData=(UConverterDataISO2022*)args->converter->extraInfo;
- /* if the version is 1 then the user is requesting
- * conversion with ibm-25546 pass the arguments to
+ /* if the version is 1 then the user is requesting
+ * conversion with ibm-25546 pass the arguments to
* MBCS converter and return
*/
if(converterData->version==1){
@@ -1999,13 +2304,13 @@ UConverter_fromUnicode_ISO_2022_KR_OFFSETS_LOGIC(UConverterFromUnicodeArgs* args
useFallback = args->converter->useFallback;
isTargetByteDBCS=(UBool)args->converter->fromUnicodeStatus;
oldIsTargetByteDBCS = isTargetByteDBCS;
-
+
isTargetByteDBCS = (UBool) args->converter->fromUnicodeStatus;
if((sourceChar = args->converter->fromUChar32)!=0 && target targetLimit){
@@ -2019,9 +2324,10 @@ UConverter_fromUnicode_ISO_2022_KR_OFFSETS_LOGIC(UConverterFromUnicodeArgs* args
break;
}
- /* length= ucnv_MBCSFromUChar32(converterData->currentConverter->sharedData,
- sourceChar,&targetByteUnit,args->converter->useFallback);*/
- MBCS_FROM_UCHAR32_ISO2022(sharedData,sourceChar,&targetByteUnit,useFallback,&length,MBCS_OUTPUT_2);
+ length = MBCS_FROM_UCHAR32_ISO2022(sharedData,sourceChar,&targetByteUnit,useFallback,MBCS_OUTPUT_2);
+ if(length < 0) {
+ length = -length; /* fallback */
+ }
/* only DBCS or SBCS characters are expected*/
/* DB characters with high bit set to 1 are expected */
if( length > 2 || length==0 ||
@@ -2038,10 +2344,10 @@ UConverter_fromUnicode_ISO_2022_KR_OFFSETS_LOGIC(UConverterFromUnicodeArgs* args
isTargetByteDBCS = (UBool)(targetByteUnit>0x00FF);
/* append the shift sequence */
if (oldIsTargetByteDBCS != isTargetByteDBCS ){
-
- if (isTargetByteDBCS)
+
+ if (isTargetByteDBCS)
*target++ = UCNV_SO;
- else
+ else
*target++ = UCNV_SI;
if(offsets)
*(offsets++) = (int32_t)(source - args->source-1);
@@ -2185,7 +2491,7 @@ getTrail:
/************************ To Unicode ***************************************/
-static void
+static void
UConverter_toUnicode_ISO_2022_KR_OFFSETS_LOGIC_IBM(UConverterToUnicodeArgs *args,
UErrorCode* err){
char const* sourceStart;
@@ -2276,14 +2582,14 @@ UConverter_toUnicode_ISO_2022_KR_OFFSETS_LOGIC_IBM(UConverterToUnicodeArgs *args
escape:
changeState_2022(args->converter,
- &(args->source),
+ &(args->source),
args->sourceLimit,
ISO_2022_KR,
err);
}
}
-static void
+static void
UConverter_toUnicode_ISO_2022_KR_OFFSETS_LOGIC(UConverterToUnicodeArgs *args,
UErrorCode* err){
char tempBuf[2];
@@ -2305,7 +2611,7 @@ UConverter_toUnicode_ISO_2022_KR_OFFSETS_LOGIC(UConverterToUnicodeArgs *args,
/* initialize state */
sharedData = myData->currentConverter->sharedData;
useFallback = args->converter->useFallback;
-
+
if(myData->key != 0) {
/* continue with a partial escape sequence */
goto escape;
@@ -2326,8 +2632,9 @@ UConverter_toUnicode_ISO_2022_KR_OFFSETS_LOGIC(UConverterToUnicodeArgs *args,
myData->toU2022State.g = 0;
if (myData->isEmptySegment) {
myData->isEmptySegment = FALSE; /* we are handling it, reset to avoid future spurious errors */
- *err = U_PARSE_ERROR; /* temporary err to flag empty segment, will be reset to U_ILLEGAL_ESCAPE_SEQUENCE in _toUnicodeWithCallback */
- args->converter->toUBytes[0] = mySourceChar;
+ *err = U_ILLEGAL_ESCAPE_SEQUENCE;
+ args->converter->toUCallbackReason = UCNV_IRREGULAR;
+ args->converter->toUBytes[0] = (uint8_t)mySourceChar;
args->converter->toULength = 1;
args->target = myTarget;
args->source = mySource;
@@ -2344,7 +2651,7 @@ UConverter_toUnicode_ISO_2022_KR_OFFSETS_LOGIC(UConverterToUnicodeArgs *args,
mySource--;
escape:
myData->isEmptySegment = FALSE; /* Any invalid ESC sequences will be detected separately, so just reset this */
- changeState_2022(args->converter,&(mySource),
+ changeState_2022(args->converter,&(mySource),
mySourceLimit, ISO_2022_KR, err);
if(U_FAILURE(*err)){
args->target = myTarget;
@@ -2352,7 +2659,7 @@ escape:
return;
}
continue;
- }
+ }
myData->isEmptySegment = FALSE; /* Any invalid char errors will be detected separately, so just reset this */
if(myData->toU2022State.g == 1) {
@@ -2360,14 +2667,6 @@ escape:
int leadIsOk, trailIsOk;
uint8_t trailByte;
getTrailByte:
- /* old
- trailByte = *mySource++;
- tempBuf[0] = (char)(mySourceChar + 0x80);
- tempBuf[1] = (char)(trailByte + 0x80);
- mySourceChar = (mySourceChar << 8) | (uint8_t)(trailByte);
- if((mySourceChar & 0x8080) == 0) {
- targetUniChar = ucnv_MBCSSimpleGetNextUChar(sharedData, tempBuf, 2, useFallback);
- */
targetUniChar = missingCharMarker;
trailByte = (uint8_t)*mySource;
/*
@@ -2469,21 +2768,21 @@ getTrailByte:
* SS2 is a Chinese character as defined in CNS
* 11643-plane-2, until another SS2designation
* appears
-* (Meaning N must preceed every 2 byte
+* (Meaning N must preceed every 2 byte
* sequence.)
*
* ESC $ + I Indicates the immediate two bytes following SS3
* is a Chinese character as defined in CNS
* 11643-plane-3, until another SS3designation
* appears
-* (Meaning O must preceed every 2 byte
+* (Meaning O must preceed every 2 byte
* sequence.)
*
* ESC $ + J Indicates the immediate two bytes following SS3
* is a Chinese character as defined in CNS
* 11643-plane-4, until another SS3designation
* appears
-* (In English: O must preceed every 2 byte
+* (In English: O must preceed every 2 byte
* sequence.)
*
* ESC $ + K Indicates the immediate two bytes following SS3
@@ -2532,9 +2831,9 @@ static const char* const escSeqCharsCN[10] ={
CNS_11643_1992_Plane_7_STR
};
-static void
+static void
UConverter_fromUnicode_ISO_2022_CN_OFFSETS_LOGIC(UConverterFromUnicodeArgs* args, UErrorCode* err){
-
+ UConverter *cnv = args->converter;
UConverterDataISO2022 *converterData;
ISO2022State *pFromU2022State;
uint8_t *target = (uint8_t *) args->target;
@@ -2551,14 +2850,13 @@ UConverter_fromUnicode_ISO_2022_CN_OFFSETS_LOGIC(UConverterFromUnicodeArgs* args
UBool useFallback;
/* set up the state */
- converterData = (UConverterDataISO2022*)args->converter->extraInfo;
+ converterData = (UConverterDataISO2022*)cnv->extraInfo;
pFromU2022State = &converterData->fromU2022State;
- useFallback = args->converter->useFallback;
choiceCount = 0;
/* check if the last codepoint of previous buffer was a lead surrogate*/
- if((sourceChar = args->converter->fromUChar32)!=0 && target< targetLimit) {
+ if((sourceChar = cnv->fromUChar32)!=0 && target< targetLimit) {
goto getTrail;
}
@@ -2577,26 +2875,26 @@ getTrail:
if(UTF_IS_SECOND_SURROGATE(trail)) {
source++;
sourceChar=UTF16_GET_PAIR_VALUE(sourceChar, trail);
- args->converter->fromUChar32=0x00;
+ cnv->fromUChar32=0x00;
/* convert this supplementary code point */
/* exit this condition tree */
} else {
/* this is an unmatched lead code unit (1st surrogate) */
/* callback(illegal) */
*err=U_ILLEGAL_CHAR_FOUND;
- args->converter->fromUChar32=sourceChar;
+ cnv->fromUChar32=sourceChar;
break;
}
} else {
/* no more input */
- args->converter->fromUChar32=sourceChar;
+ cnv->fromUChar32=sourceChar;
break;
}
} else {
/* this is an unmatched trail code unit (2nd surrogate) */
/* callback(illegal) */
*err=U_ILLEGAL_CHAR_FOUND;
- args->converter->fromUChar32=sourceChar;
+ cnv->fromUChar32=sourceChar;
break;
}
}
@@ -2607,7 +2905,7 @@ getTrail:
if(IS_2022_CONTROL(sourceChar)) {
/* callback(illegal) */
*err=U_ILLEGAL_CHAR_FOUND;
- args->converter->fromUChar32=sourceChar;
+ cnv->fromUChar32=sourceChar;
break;
}
@@ -2630,7 +2928,6 @@ getTrail:
}
else{
/* convert U+0080..U+10ffff */
- UConverterSharedData *cnv;
int32_t i;
int8_t cs, g;
@@ -2678,17 +2975,41 @@ getTrail:
}
cs = g = 0;
+ /*
+ * len==0: no mapping found yet
+ * len<0: found a fallback result: continue looking for a roundtrip but no further fallbacks
+ * len>0: found a roundtrip result, done
+ */
len = 0;
-
- for(i = 0; i < choiceCount && len == 0; ++i) {
- cs = choices[i];
- if(cs > 0) {
- if(cs > CNS_11643_0) {
- cnv = converterData->myConverterArray[CNS_11643];
- MBCS_FROM_UCHAR32_ISO2022(cnv,sourceChar,&targetValue,useFallback,&len,MBCS_OUTPUT_3);
- if(len==3) {
- cs = (int8_t)(CNS_11643_0 + (targetValue >> 16) - 0x80);
- len = 2;
+ /*
+ * We will turn off useFallback after finding a fallback,
+ * but we still get fallbacks from PUA code points as usual.
+ * Therefore, we will also need to check that we don't overwrite
+ * an early fallback with a later one.
+ */
+ useFallback = cnv->useFallback;
+
+ for(i = 0; i < choiceCount && len <= 0; ++i) {
+ int8_t cs0 = choices[i];
+ if(cs0 > 0) {
+ uint32_t value;
+ int32_t len2;
+ if(cs0 >= CNS_11643_0) {
+ len2 = MBCS_FROM_UCHAR32_ISO2022(
+ converterData->myConverterArray[CNS_11643],
+ sourceChar,
+ &value,
+ useFallback,
+ MBCS_OUTPUT_3);
+ if(len2 == 3 || (len2 == -3 && len == 0)) {
+ targetValue = value;
+ cs = (int8_t)(CNS_11643_0 + (value >> 16) - 0x80);
+ if(len2 >= 0) {
+ len = 2;
+ } else {
+ len = -2;
+ useFallback = FALSE;
+ }
if(cs == CNS_11643_1) {
g = 1;
} else if(cs == CNS_11643_2) {
@@ -2702,15 +3023,25 @@ getTrail:
}
} else {
/* GB2312_1 or ISO-IR-165 */
- cnv = converterData->myConverterArray[cs];
- MBCS_FROM_UCHAR32_ISO2022(cnv,sourceChar,&targetValue,useFallback,&len,MBCS_OUTPUT_2);
- g = 1; /* used if len == 2 */
+ len2 = MBCS_FROM_UCHAR32_ISO2022(
+ converterData->myConverterArray[cs0],
+ sourceChar,
+ &value,
+ useFallback,
+ MBCS_OUTPUT_2);
+ if(len2 == 2 || (len2 == -2 && len == 0)) {
+ targetValue = value;
+ len = len2;
+ cs = cs0;
+ g = 1;
+ useFallback = FALSE;
+ }
}
}
}
- if(len > 0) {
- len = 0; /* count output bytes; it must have been len == 2 */
+ if(len != 0) {
+ len = 0; /* count output bytes; it must have been abs(len) == 2 */
/* write the designation sequence if necessary */
if(cs != pFromU2022State->cs[g]) {
@@ -2751,11 +3082,11 @@ getTrail:
buffer[len++] = (char)(targetValue >> 8);
buffer[len++] = (char)targetValue;
} else {
- /* if we cannot find the character after checking all codepages
+ /* if we cannot find the character after checking all codepages
* then this is an error
*/
*err = U_INVALID_CHAR_FOUND;
- args->converter->fromUChar32=sourceChar;
+ cnv->fromUChar32=sourceChar;
break;
}
}
@@ -2776,7 +3107,7 @@ getTrail:
}
} else {
fromUWriteUInt8(
- args->converter,
+ cnv,
buffer, len,
&target, (const char *)targetLimit,
&offsets, (int32_t)(source - args->source - U16_LENGTH(sourceChar)),
@@ -2805,7 +3136,7 @@ getTrail:
*/
if( U_SUCCESS(*err) &&
pFromU2022State->g!=0 &&
- args->flush && source>=sourceLimit && args->converter->fromUChar32==0
+ args->flush && source>=sourceLimit && cnv->fromUChar32==0
) {
int32_t sourceIndex;
@@ -2833,7 +3164,7 @@ getTrail:
}
fromUWriteUInt8(
- args->converter,
+ cnv,
SHIFT_IN_STR, 1,
&target, (const char *)targetLimit,
&offsets, sourceIndex,
@@ -2846,7 +3177,7 @@ getTrail:
}
-static void
+static void
UConverter_toUnicode_ISO_2022_CN_OFFSETS_LOGIC(UConverterToUnicodeArgs *args,
UErrorCode* err){
char tempBuf[3];
@@ -2885,7 +3216,8 @@ UConverter_toUnicode_ISO_2022_CN_OFFSETS_LOGIC(UConverterToUnicodeArgs *args,
pToU2022State->g=0;
if (myData->isEmptySegment) {
myData->isEmptySegment = FALSE; /* we are handling it, reset to avoid future spurious errors */
- *err = U_PARSE_ERROR; /* temporary err to flag empty segment, will be reset to U_ILLEGAL_ESCAPE_SEQUENCE in _toUnicodeWithCallback */
+ *err = U_ILLEGAL_ESCAPE_SEQUENCE;
+ args->converter->toUCallbackReason = UCNV_IRREGULAR;
args->converter->toUBytes[0] = mySourceChar;
args->converter->toULength = 1;
args->target = myTarget;
@@ -2912,12 +3244,13 @@ escape:
const char * mySourceBefore = mySource;
int8_t toULengthBefore = args->converter->toULength;
- changeState_2022(args->converter,&(mySource),
+ changeState_2022(args->converter,&(mySource),
mySourceLimit, ISO_2022_CN,err);
/* After SO there must be at least one character before a designator (designator error handled separately) */
- if ( myData->key == 0 && U_SUCCESS(*err) && myData->isEmptySegment ) {
- *err = U_PARSE_ERROR; /* temporary err to flag empty segment, will be reset to U_ILLEGAL_ESCAPE_SEQUENCE in _toUnicodeWithCallback */
+ if(myData->key==0 && U_SUCCESS(*err) && myData->isEmptySegment) {
+ *err = U_ILLEGAL_ESCAPE_SEQUENCE;
+ args->converter->toUCallbackReason = UCNV_IRREGULAR;
args->converter->toULength = toULengthBefore + (mySource - mySourceBefore);
}
}
@@ -2949,22 +3282,6 @@ escape:
int leadIsOk, trailIsOk;
uint8_t trailByte;
getTrailByte:
- /* old
- trailByte = *mySource++;
- tempState = (StateEnum)pToU2022State->cs[pToU2022State->g];
- if(tempState > CNS_11643_0) {
- cnv = myData->myConverterArray[CNS_11643];
- tempBuf[0] = (char) (0x80+(tempState-CNS_11643_0));
- tempBuf[1] = (char) (mySourceChar);
- tempBuf[2] = trailByte;
- tempBufLen = 3;
-
- }else{
- cnv = myData->myConverterArray[tempState];
- tempBuf[0] = (char) (mySourceChar);
- tempBuf[1] = trailByte;
- tempBufLen = 2;
- */
trailByte = (uint8_t)*mySource;
/*
* Ticket 5691: consistent illegal sequences:
@@ -3033,7 +3350,7 @@ getTrailByte:
args->offsets[myTarget - args->target] = (int32_t)(mySource - args->source - (mySourceChar <= 0xff ? 1 : 2));
}
++myTarget;
- if(myTarget< args->targetLimit){
+ if(myTarget< args->targetLimit){
*myTarget = (UChar)(0xdc00+(UChar)(targetUniChar&0x3ff));
if(args->offsets){
args->offsets[myTarget - args->target] = (int32_t)(mySource - args->source - (mySourceChar <= 0xff ? 1 : 2));
@@ -3185,11 +3502,11 @@ struct cloneStruct
};
-static UConverter *
+static UConverter *
_ISO_2022_SafeClone(
- const UConverter *cnv,
- void *stackBuffer,
- int32_t *pBufferSize,
+ const UConverter *cnv,
+ void *stackBuffer,
+ int32_t *pBufferSize,
UErrorCode *status)
{
struct cloneStruct * localClone;
@@ -3258,6 +3575,9 @@ _ISO_2022_GetUnicodeSet(const UConverter *cnv,
/* open a set and initialize it with code points that are algorithmically round-tripped */
switch(cnvData->locale[0]){
case 'j':
+ /* include JIS X 0201 which is hardcoded */
+ sa->add(sa->set, 0xa5);
+ sa->add(sa->set, 0x203e);
if(jpCharsetMasks[cnvData->version]&CSM(ISO8859_1)) {
/* include Latin-1 for some variants of JP */
sa->addRange(sa->set, 0, 0xff);
@@ -3265,9 +3585,22 @@ _ISO_2022_GetUnicodeSet(const UConverter *cnv,
/* include ASCII for JP */
sa->addRange(sa->set, 0, 0x7f);
}
- if(jpCharsetMasks[cnvData->version]&CSM(HWKANA_7BIT)) {
+ if(cnvData->version==3 || cnvData->version==4 || which==UCNV_ROUNDTRIP_AND_FALLBACK_SET) {
+ /*
+ * Do not test (jpCharsetMasks[cnvData->version]&CSM(HWKANA_7BIT))!=0
+ * because the bit is on for all JP versions although only versions 3 & 4 (JIS7 & JIS8)
+ * use half-width Katakana.
+ * This is because all ISO-2022-JP variants are lenient in that they accept (in toUnicode)
+ * half-width Katakana via the ESC ( I sequence.
+ * However, we only emit (fromUnicode) half-width Katakana according to the
+ * definition of each variant.
+ *
+ * When including fallbacks,
+ * we need to include half-width Katakana Unicode code points for all JP variants because
+ * JIS X 0208 has hardcoded fallbacks for them (which map to full-width Katakana).
+ */
/* include half-width Katakana for JP */
- sa->addRange(sa->set, 0xff61, 0xff9f);
+ sa->addRange(sa->set, HWKANA_START, HWKANA_END);
}
break;
case 'c':
@@ -3285,15 +3618,7 @@ _ISO_2022_GetUnicodeSet(const UConverter *cnv,
break;
}
- /*
- * Version-specific for CN:
- * CN version 0 does not map CNS planes 3..7 although
- * they are all available in the CNS conversion table;
- * CN version 1 does map them all.
- * The two versions create different Unicode sets.
- */
- for (i=0; imyConverterArray[i]!=NULL) {
+#if 0 /* Replaced by ucnv_MBCSGetFilteredUnicodeSetForUnicode() until we implement ucnv_getUnicodeSet() with reverse fallbacks. */
if( (cnvData->locale[0]=='c' || cnvData->locale[0]=='z') &&
cnvData->version==0 && i==CNS_11643
) {
@@ -3303,9 +3628,39 @@ _ISO_2022_GetUnicodeSet(const UConverter *cnv,
sa, UCNV_ROUNDTRIP_SET,
0, 0x81, 0x82,
pErrorCode);
+ }
+#endif
+
+ for (i=0; imyConverterArray[i]!=NULL) {
+ if( (cnvData->locale[0]=='c' || cnvData->locale[0]=='z') &&
+ cnvData->version==0 && i==CNS_11643
+ ) {
+ /*
+ * Version-specific for CN:
+ * CN version 0 does not map CNS planes 3..7 although
+ * they are all available in the CNS conversion table;
+ * CN version 1 (-EXT) does map them all.
+ * The two versions create different Unicode sets.
+ */
+ filter=UCNV_SET_FILTER_2022_CN;
+ } else if(cnvData->locale[0]=='j' && i==JISX208) {
+ /*
+ * Only add code points that map to Shift-JIS codes
+ * corresponding to JIS X 0208.
+ */
+ filter=UCNV_SET_FILTER_SJIS;
+ } else if(i==KSC5601) {
+ /*
+ * Some of the KSC 5601 tables (convrtrs.txt has this aliases on multiple tables)
+ * are broader than GR94.
+ */
+ filter=UCNV_SET_FILTER_GR94DBCS;
} else {
- ucnv_MBCSGetUnicodeSetForUnicode(cnvData->myConverterArray[i], sa, which, pErrorCode);
+ filter=UCNV_SET_FILTER_NONE;
}
+ ucnv_MBCSGetFilteredUnicodeSetForUnicode(cnvData->myConverterArray[i], sa, which, filter, pErrorCode);
}
}
@@ -3317,6 +3672,9 @@ _ISO_2022_GetUnicodeSet(const UConverter *cnv,
sa->remove(sa->set, 0x0e);
sa->remove(sa->set, 0x0f);
sa->remove(sa->set, 0x1b);
+
+ /* ISO 2022 converters do not convert C1 controls either */
+ sa->removeRange(sa->set, 0x80, 0x9f);
}
static const UConverterImpl _ISO2022Impl={
diff --git a/icuSources/common/ucnv_bld.c b/icuSources/common/ucnv_bld.c
index 62e1609f..3a30cda7 100644
--- a/icuSources/common/ucnv_bld.c
+++ b/icuSources/common/ucnv_bld.c
@@ -1,7 +1,7 @@
/*
********************************************************************
* COPYRIGHT:
- * Copyright (c) 1996-2006, International Business Machines Corporation and
+ * Copyright (c) 1996-2008, International Business Machines Corporation and
* others. All Rights Reserved.
********************************************************************
*
@@ -158,38 +158,57 @@ static UMTX cnvCacheMutex = NULL; /* Mutex for synchronizing cnv cache a
static const char **gAvailableConverters = NULL;
static uint16_t gAvailableConverterCount = 0;
+/* This contains the resolved converter name. So no further alias lookup is needed again. */
static char gDefaultConverterNameBuffer[UCNV_MAX_CONVERTER_NAME_LENGTH + 1]; /* +1 for NULL */
static const char *gDefaultConverterName = NULL;
+
+/*
+If the default converter is an algorithmic converter, this is the cached value.
+We don't cache a full UConverter and clone it because ucnv_clone doesn't have
+less overhead than an algorithmic open. We don't cache non-algorithmic converters
+because ucnv_flushCache must be able to unload the default converter and its table.
+*/
static const UConverterSharedData *gDefaultAlgorithmicSharedData = NULL;
+
+/* Does gDefaultConverterName have a converter option and require extra parsing? */
static UBool gDefaultConverterContainsOption;
static const char DATA_TYPE[] = "cnv";
-/* ucnv_cleanup - delete all storage held by the converter cache, except any in use */
-/* by open converters. */
-/* Not thread safe. */
-/* Not supported API. Marked U_CAPI only for use by test programs. */
+static void
+ucnv_flushAvailableConverterCache() {
+ if (gAvailableConverters) {
+ umtx_lock(&cnvCacheMutex);
+ gAvailableConverterCount = 0;
+ uprv_free((char **)gAvailableConverters);
+ gAvailableConverters = NULL;
+ umtx_unlock(&cnvCacheMutex);
+ }
+}
+
+/* ucnv_cleanup - delete all storage held by the converter cache, except any */
+/* in use by open converters. */
+/* Not thread safe. */
+/* Not supported API. */
static UBool U_CALLCONV ucnv_cleanup(void) {
- if (SHARED_DATA_HASHTABLE != NULL) {
- ucnv_flushCache();
- if (SHARED_DATA_HASHTABLE != NULL && uhash_count(SHARED_DATA_HASHTABLE) == 0) {
- uhash_close(SHARED_DATA_HASHTABLE);
- SHARED_DATA_HASHTABLE = NULL;
- }
+ ucnv_flushCache();
+ if (SHARED_DATA_HASHTABLE != NULL && uhash_count(SHARED_DATA_HASHTABLE) == 0) {
+ uhash_close(SHARED_DATA_HASHTABLE);
+ SHARED_DATA_HASHTABLE = NULL;
}
- /* Called from ucnv_flushCache because it allocates the hashtable */
- /*ucnv_flushAvailableConverterCache();*/
+ /* Isn't called from flushCache because other threads may have preexisting references to the table. */
+ ucnv_flushAvailableConverterCache();
gDefaultConverterName = NULL;
gDefaultConverterNameBuffer[0] = 0;
gDefaultConverterContainsOption = FALSE;
gDefaultAlgorithmicSharedData = NULL;
- umtx_destroy(&cnvCacheMutex); /* Don't worry about destroying the mutex even */
- /* if the hash table still exists. The mutex */
- /* will lazily re-init itself if needed. */
+ umtx_destroy(&cnvCacheMutex); /* Don't worry about destroying the mutex even */
+ /* if the hash table still exists. The mutex */
+ /* will lazily re-init itself if needed. */
return (SHARED_DATA_HASHTABLE == NULL);
}
@@ -363,6 +382,16 @@ getAlgorithmicTypeFromName(const char *realName)
return NULL;
}
+/*
+* Based on the number of known converters, this determines how many times larger
+* the shared data hash table should be. When on small platforms, or just a couple
+* of converters are used, this number should be 2. When memory is plentiful, or
+* when ucnv_countAvailable is ever used with a lot of available converters,
+* this should be 4.
+* Larger numbers reduce the number of hash collisions, but use more memory.
+*/
+#define UCNV_CACHE_LOAD_FACTOR 2
+
/* Puts the shared data in the static hashtable SHARED_DATA_HASHTABLE */
/* Will always be called with the cnvCacheMutex alrady being held */
/* by the calling function. */
@@ -379,7 +408,7 @@ ucnv_shareConverterData(UConverterSharedData * data)
if (SHARED_DATA_HASHTABLE == NULL)
{
SHARED_DATA_HASHTABLE = uhash_openSize(uhash_hashChars, uhash_compareChars, NULL,
- ucnv_io_countTotalAliases(&err),
+ ucnv_io_countKnownConverters(&err)*UCNV_CACHE_LOAD_FACTOR,
&err);
ucln_common_registerCleanup(UCLN_COMMON_UCNV, ucnv_cleanup);
@@ -778,9 +807,14 @@ ucnv_createConverter(UConverter *myUConverter, const char *converterName, UError
if(U_SUCCESS(*err)) {
UTRACE_EXIT_PTR_STATUS(myUConverter, *err);
return myUConverter;
- } else {
- ucnv_unloadSharedDataIfReady(mySharedConverterData);
}
+ /*
+ else mySharedConverterData was already cleaned up by
+ ucnv_createConverterFromSharedData.
+ */
+ /*else {
+ ucnv_unloadSharedDataIfReady(mySharedConverterData);
+ }*/
}
}
@@ -914,6 +948,7 @@ ucnv_createConverterFromSharedData(UConverter *myUConverter,
myUConverter->subCharLen = mySharedConverterData->staticData->subCharLen;
myUConverter->subChars = (uint8_t *)myUConverter->subUChars;
uprv_memcpy(myUConverter->subChars, mySharedConverterData->staticData->subChar, myUConverter->subCharLen);
+ myUConverter->toUCallbackReason = UCNV_ILLEGAL; /* default reason to invoke (*fromCharErrorBehaviour) */
if(mySharedConverterData->impl->open != NULL) {
mySharedConverterData->impl->open(myUConverter, realName, locale, options, err);
@@ -926,17 +961,6 @@ ucnv_createConverterFromSharedData(UConverter *myUConverter,
return myUConverter;
}
-static void
-ucnv_flushAvailableConverterCache() {
- if (gAvailableConverters) {
- umtx_lock(&cnvCacheMutex);
- gAvailableConverterCount = 0;
- uprv_free((char **)gAvailableConverters);
- gAvailableConverters = NULL;
- umtx_unlock(&cnvCacheMutex);
- }
-}
-
/*Frees all shared immutable objects that aren't referred to (reference count = 0)
*/
U_CAPI int32_t U_EXPORT2
@@ -1006,8 +1030,6 @@ ucnv_flushCache ()
UTRACE_DATA1(UTRACE_INFO, "ucnv_flushCache() exits with %d converters remaining", remaining);
- ucnv_flushAvailableConverterCache();
-
UTRACE_EXIT_VALUE(tableDeletedNum);
return tableDeletedNum;
}
@@ -1040,6 +1062,10 @@ static UBool haveAvailableConverterList(UErrorCode *pErrorCode) {
return FALSE;
}
+ /* Open the default converter to make sure that it has first dibs in the hash table. */
+ localStatus = U_ZERO_ERROR;
+ ucnv_close(ucnv_createConverter(&tempConverter, NULL, &localStatus));
+
localConverterCount = 0;
for (idx = 0; idx < allConverterCount; idx++) {
@@ -1087,7 +1113,18 @@ ucnv_bld_getAvailableConverter(uint16_t n, UErrorCode *pErrorCode) {
/* default converter name --------------------------------------------------- */
-/* Copy the canonical converter name. */
+/*
+Copy the canonical converter name.
+ucnv_getDefaultName must be thread safe, which can call this function.
+
+ucnv_setDefaultName calls this function and it doesn't have to be
+thread safe because there is no reliable/safe way to reset the
+converter in use in all threads. If you did reset the converter, you
+would not be sure that retrieving a default converter for one string
+would be the same type of default converter for a successive string.
+Since the name is a returned via ucnv_getDefaultName without copying,
+you shouldn't be modifying or deleting the string from a separate thread.
+*/
static U_INLINE void
internalSetName(const char *name, UErrorCode *status) {
UConverterLookupData lookup;
@@ -1106,11 +1143,11 @@ internalSetName(const char *name, UErrorCode *status) {
umtx_lock(&cnvCacheMutex);
+ gDefaultAlgorithmicSharedData = algorithmicSharedData;
+ gDefaultConverterContainsOption = containsOption;
uprv_memcpy(gDefaultConverterNameBuffer, name, length);
gDefaultConverterNameBuffer[length]=0;
gDefaultConverterName = gDefaultConverterNameBuffer;
- gDefaultConverterContainsOption = containsOption;
- gDefaultAlgorithmicSharedData = algorithmicSharedData;
ucln_common_registerCleanup(UCLN_COMMON_UCNV, ucnv_cleanup);
@@ -1130,6 +1167,10 @@ ucnv_getDefaultName() {
/* local variable to be thread-safe */
const char *name;
+ /*
+ Multiple calls to ucnv_getDefaultName must be thread safe,
+ but ucnv_setDefaultName is not thread safe.
+ */
UMTX_CHECK(&cnvCacheMutex, gDefaultConverterName, name);
if(name==NULL) {
UErrorCode errorCode = U_ZERO_ERROR;
@@ -1169,13 +1210,15 @@ ucnv_getDefaultName() {
return name;
}
+/*
+This function is not thread safe, and it can't be thread safe.
+See internalSetName or the API reference for details.
+*/
U_CAPI void U_EXPORT2
ucnv_setDefaultName(const char *converterName) {
if(converterName==NULL) {
/* reset to the default codepage */
- umtx_lock(&cnvCacheMutex);
gDefaultConverterName=NULL;
- umtx_unlock(&cnvCacheMutex);
} else {
UErrorCode errorCode = U_ZERO_ERROR;
UConverter *cnv = NULL;
@@ -1222,8 +1265,13 @@ ucnv_swap(const UDataSwapper *ds,
const _MBCSHeader *inMBCSHeader;
_MBCSHeader *outMBCSHeader;
_MBCSHeader mbcsHeader;
+ uint32_t mbcsHeaderLength;
+ UBool noFromU=FALSE;
+
uint8_t outputType;
+ int32_t maxFastUChar, mbcsIndexLength;
+
const int32_t *inExtIndexes;
int32_t extOffset;
@@ -1309,7 +1357,15 @@ ucnv_swap(const UDataSwapper *ds,
*pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR;
return 0;
}
- if(!(inMBCSHeader->version[0]==4 && inMBCSHeader->version[1]>=1)) {
+ if(inMBCSHeader->version[0]==4 && inMBCSHeader->version[1]>=1) {
+ mbcsHeaderLength=MBCS_HEADER_V4_LENGTH;
+ } else if(inMBCSHeader->version[0]==5 && inMBCSHeader->version[1]>=3 &&
+ ((mbcsHeader.options=ds->readUInt32(inMBCSHeader->options))&
+ MBCS_OPT_UNKNOWN_INCOMPATIBLE_MASK)==0
+ ) {
+ mbcsHeaderLength=mbcsHeader.options&MBCS_OPT_LENGTH_MASK;
+ noFromU=(UBool)((mbcsHeader.options&MBCS_OPT_NO_FROM_U)!=0);
+ } else {
udata_printError(ds, "ucnv_swap(): unsupported _MBCSHeader.version %d.%d\n",
inMBCSHeader->version[0], inMBCSHeader->version[1]);
*pErrorCode=U_UNSUPPORTED_ERROR;
@@ -1324,9 +1380,15 @@ ucnv_swap(const UDataSwapper *ds,
mbcsHeader.offsetFromUBytes= ds->readUInt32(inMBCSHeader->offsetFromUBytes);
mbcsHeader.flags= ds->readUInt32(inMBCSHeader->flags);
mbcsHeader.fromUBytesLength= ds->readUInt32(inMBCSHeader->fromUBytesLength);
+ /* mbcsHeader.options have been read above */
extOffset=(int32_t)(mbcsHeader.flags>>8);
outputType=(uint8_t)mbcsHeader.flags;
+ if(noFromU && outputType==MBCS_OUTPUT_1) {
+ udata_printError(ds, "ucnv_swap(): unsupported combination of makeconv --small with SBCS\n");
+ *pErrorCode=U_UNSUPPORTED_ERROR;
+ return 0;
+ }
/* make sure that the output type is known */
switch(outputType) {
@@ -1348,8 +1410,27 @@ ucnv_swap(const UDataSwapper *ds,
}
/* calculate the length of the MBCS data */
+
+ /*
+ * utf8Friendly MBCS files (mbcsHeader.version 4.3)
+ * contain an additional mbcsIndex table:
+ * uint16_t[(maxFastUChar+1)>>6];
+ * where maxFastUChar=((mbcsHeader.version[2]<<8)|0xff).
+ */
+ maxFastUChar=0;
+ mbcsIndexLength=0;
+ if( outputType!=MBCS_OUTPUT_EXT_ONLY && outputType!=MBCS_OUTPUT_1 &&
+ mbcsHeader.version[1]>=3 && (maxFastUChar=mbcsHeader.version[2])!=0
+ ) {
+ maxFastUChar=(maxFastUChar<<8)|0xff;
+ mbcsIndexLength=((maxFastUChar+1)>>6)*2; /* number of bytes */
+ }
+
if(extOffset==0) {
- size=(int32_t)(mbcsHeader.offsetFromUBytes+mbcsHeader.fromUBytesLength);
+ size=(int32_t)(mbcsHeader.offsetFromUBytes+mbcsIndexLength);
+ if(!noFromU) {
+ size+=(int32_t)mbcsHeader.fromUBytesLength;
+ }
/* avoid compiler warnings - not otherwise necessary, and the value does not matter */
inExtIndexes=NULL;
@@ -1379,8 +1460,9 @@ ucnv_swap(const UDataSwapper *ds,
uprv_memcpy(outBytes, inBytes, size);
}
- /* swap the MBCSHeader */
- ds->swapArray32(ds, &inMBCSHeader->countStates, 7*4,
+ /* swap the MBCSHeader, except for the version field */
+ count=mbcsHeaderLength*4;
+ ds->swapArray32(ds, &inMBCSHeader->countStates, count-4,
&outMBCSHeader->countStates, pErrorCode);
if(outputType==MBCS_OUTPUT_EXT_ONLY) {
@@ -1390,18 +1472,23 @@ ucnv_swap(const UDataSwapper *ds,
*/
/* swap the base name, between the header and the extension data */
- ds->swapInvChars(ds, inMBCSHeader+1, (int32_t)uprv_strlen((const char *)(inMBCSHeader+1)),
- outMBCSHeader+1, pErrorCode);
+ const char *inBaseName=(const char *)inBytes+count;
+ char *outBaseName=(char *)outBytes+count;
+ ds->swapInvChars(ds, inBaseName, (int32_t)uprv_strlen(inBaseName),
+ outBaseName, pErrorCode);
} else {
/* normal file with base table data */
/* swap the state table, 1kB per state */
- ds->swapArray32(ds, inMBCSHeader+1, (int32_t)(mbcsHeader.countStates*1024),
- outMBCSHeader+1, pErrorCode);
+ offset=count;
+ count=mbcsHeader.countStates*1024;
+ ds->swapArray32(ds, inBytes+offset, (int32_t)count,
+ outBytes+offset, pErrorCode);
/* swap the toUFallbacks[] */
- offset=sizeof(_MBCSHeader)+mbcsHeader.countStates*1024;
- ds->swapArray32(ds, inBytes+offset, (int32_t)(mbcsHeader.countToUFallbacks*8),
+ offset+=count;
+ count=mbcsHeader.countToUFallbacks*8;
+ ds->swapArray32(ds, inBytes+offset, (int32_t)count,
outBytes+offset, pErrorCode);
/* swap the unicodeCodeUnits[] */
@@ -1438,7 +1525,7 @@ ucnv_swap(const UDataSwapper *ds,
/* stage 3/result bytes: sometimes uint16_t[] or uint32_t[] */
offset=mbcsHeader.offsetFromUBytes;
- count=mbcsHeader.fromUBytesLength;
+ count= noFromU ? 0 : mbcsHeader.fromUBytesLength;
switch(outputType) {
case MBCS_OUTPUT_2:
case MBCS_OUTPUT_3_EUC:
@@ -1454,6 +1541,13 @@ ucnv_swap(const UDataSwapper *ds,
/* just uint8_t[], nothing to swap */
break;
}
+
+ if(mbcsIndexLength!=0) {
+ offset+=count;
+ count=mbcsIndexLength;
+ ds->swapArray16(ds, inBytes+offset, (int32_t)count,
+ outBytes+offset, pErrorCode);
+ }
}
}
diff --git a/icuSources/common/ucnv_bld.h b/icuSources/common/ucnv_bld.h
index 75aa4d18..f104a2f3 100644
--- a/icuSources/common/ucnv_bld.h
+++ b/icuSources/common/ucnv_bld.h
@@ -1,6 +1,6 @@
/*
**********************************************************************
-* Copyright (C) 1999-2006, International Business Machines
+* Copyright (C) 1999-2006,2008 International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
*
@@ -226,6 +226,9 @@ struct UConverter {
char preToU[UCNV_EXT_MAX_BYTES];
int8_t preFromULength, preToULength; /* negative: replay */
int8_t preToUFirstLength; /* length of first character */
+
+ /* new fields for ICU 4.0 */
+ UConverterCallbackReason toUCallbackReason; /* (*fromCharErrorBehaviour) reason, set when error is detected */
};
U_CDECL_END /* end of UConverter */
diff --git a/icuSources/common/ucnv_cnv.h b/icuSources/common/ucnv_cnv.h
index e3de1014..a51faaf2 100644
--- a/icuSources/common/ucnv_cnv.h
+++ b/icuSources/common/ucnv_cnv.h
@@ -1,12 +1,11 @@
/*
**********************************************************************
-* Copyright (C) 1999-2004, International Business Machines
+* Copyright (C) 1999-2007, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
*
-* uconv_cnv.h:
-* defines all the low level conversion functions
-* T_UnicodeConverter_{to,from}Unicode_$ConversionType
+* ucnv_cnv.h:
+* Definitions for converter implementations.
*
* Modification History:
*
@@ -104,6 +103,23 @@ typedef void (*UConverterToUnicode) (UConverterToUnicodeArgs *, UErrorCode *);
*/
typedef void (*UConverterFromUnicode) (UConverterFromUnicodeArgs *, UErrorCode *);
+/*
+ * Converter implementation function for ucnv_convertEx(), for direct conversion
+ * between two charsets without pivoting through UTF-16.
+ * The rules are the same as for UConverterToUnicode and UConverterFromUnicode.
+ * In addition,
+ * - The toUnicode side must behave and keep state exactly like the
+ * UConverterToUnicode implementation for the same source charset.
+ * - A U_USING_DEFAULT_WARNING can be set to request to temporarily fall back
+ * to pivoting. When this function is called, the conversion framework makes
+ * sure that this warning is not set on input.
+ * - Continuing a partial match and flushing the toUnicode replay buffer
+ * are handled by pivoting, using the toUnicode and fromUnicode functions.
+ */
+typedef void (*UConverterConvert) (UConverterFromUnicodeArgs *pFromUArgs,
+ UConverterToUnicodeArgs *pToUArgs,
+ UErrorCode *pErrorCode);
+
/*
* Converter implementation function for ucnv_getNextUChar().
* If the function pointer is NULL, then the toUnicode function will be used.
@@ -159,6 +175,19 @@ typedef UConverter * (*UConverterSafeClone) (const UConverter *cnv,
int32_t *pBufferSize,
UErrorCode *status);
+/**
+ * Filters for some ucnv_getUnicodeSet() implementation code.
+ */
+typedef enum UConverterSetFilter {
+ UCNV_SET_FILTER_NONE,
+ UCNV_SET_FILTER_DBCS_ONLY,
+ UCNV_SET_FILTER_2022_CN,
+ UCNV_SET_FILTER_SJIS,
+ UCNV_SET_FILTER_GR94DBCS,
+ UCNV_SET_FILTER_HZ,
+ UCNV_SET_FILTER_COUNT
+} UConverterSetFilter;
+
/**
* Fills the set of Unicode code points that can be converted by an ICU converter.
* The API function ucnv_getUnicodeSet() clears the USet before calling
@@ -214,6 +243,9 @@ struct UConverterImpl {
UConverterWriteSub writeSub;
UConverterSafeClone safeClone;
UConverterGetUnicodeSet getUnicodeSet;
+
+ UConverterConvert toUTF8;
+ UConverterConvert fromUTF8;
};
extern const UConverterSharedData
diff --git a/icuSources/common/ucnv_err.c b/icuSources/common/ucnv_err.c
index d28e7495..75659fb5 100644
--- a/icuSources/common/ucnv_err.c
+++ b/icuSources/common/ucnv_err.c
@@ -1,7 +1,7 @@
/*
*****************************************************************************
*
- * Copyright (C) 1998-2004, International Business Machines
+ * Copyright (C) 1998-2007, International Business Machines
* Corporation and others. All Rights Reserved.
*
*****************************************************************************
@@ -40,12 +40,15 @@
#define UNICODE_PLUS_CODEPOINT 0x002B
#define UNICODE_LEFT_CURLY_CODEPOINT 0x007B
#define UNICODE_RIGHT_CURLY_CODEPOINT 0x007D
-#define UCNV_PRV_ESCAPE_ICU 0
-#define UCNV_PRV_ESCAPE_C 'C'
-#define UCNV_PRV_ESCAPE_XML_DEC 'D'
-#define UCNV_PRV_ESCAPE_XML_HEX 'X'
-#define UCNV_PRV_ESCAPE_JAVA 'J'
-#define UCNV_PRV_ESCAPE_UNICODE 'U'
+#define UNICODE_SPACE_CODEPOINT 0x0020
+#define UCNV_PRV_ESCAPE_ICU 0
+#define UCNV_PRV_ESCAPE_C 'C'
+#define UCNV_PRV_ESCAPE_XML_DEC 'D'
+#define UCNV_PRV_ESCAPE_XML_HEX 'X'
+#define UCNV_PRV_ESCAPE_JAVA 'J'
+#define UCNV_PRV_ESCAPE_UNICODE 'U'
+#define UCNV_PRV_ESCAPE_CSS2 'S'
+#define UCNV_PRV_STOP_ON_ILLEGAL 'i'
/*Function Pointer STOPS at the ILLEGAL_SEQUENCE */
U_CAPI void U_EXPORT2
@@ -58,8 +61,8 @@ UCNV_FROM_U_CALLBACK_STOP (
UConverterCallbackReason reason,
UErrorCode * err)
{
- /* the caller must have set the error code accordingly */
- return;
+ /* the caller must have set the error code accordingly */
+ return;
}
@@ -73,8 +76,8 @@ UCNV_TO_U_CALLBACK_STOP (
UConverterCallbackReason reason,
UErrorCode * err)
{
- /* the caller must have set the error code accordingly */
- return;
+ /* the caller must have set the error code accordingly */
+ return;
}
U_CAPI void U_EXPORT2
@@ -87,30 +90,15 @@ UCNV_FROM_U_CALLBACK_SKIP (
UConverterCallbackReason reason,
UErrorCode * err)
{
- if(context==NULL)
- {
- if (reason <= UCNV_IRREGULAR)
- {
- *err = U_ZERO_ERROR;
- return;
- }
-
- }
- else if(*(char*)context=='i')
+ if (reason <= UCNV_IRREGULAR)
{
- if(reason != UCNV_UNASSIGNED)
- {
- /* the caller must have set
- * the error code accordingly
- */
- return;
- }
- else
+ if (context == NULL || (*((char*)context) == UCNV_PRV_STOP_ON_ILLEGAL && reason == UCNV_UNASSIGNED))
{
*err = U_ZERO_ERROR;
- return;
}
+ /* else the caller must have set the error code accordingly. */
}
+ /* else ignore the reset, close and clone calls. */
}
U_CAPI void U_EXPORT2
@@ -123,33 +111,16 @@ UCNV_FROM_U_CALLBACK_SUBSTITUTE (
UConverterCallbackReason reason,
UErrorCode * err)
{
- if(context == NULL)
- {
- if (reason > UCNV_IRREGULAR)
- {
- return;
- }
-
- *err = U_ZERO_ERROR;
- ucnv_cbFromUWriteSub(fromArgs, 0, err);
- return;
- }
- else if(*((char*)context)=='i')
+ if (reason <= UCNV_IRREGULAR)
{
- if(reason != UCNV_UNASSIGNED)
- {
- /* the caller must have set
- * the error code accordingly
- */
- return;
- }
- else
+ if (context == NULL || (*((char*)context) == UCNV_PRV_STOP_ON_ILLEGAL && reason == UCNV_UNASSIGNED))
{
*err = U_ZERO_ERROR;
ucnv_cbFromUWriteSub(fromArgs, 0, err);
- return;
}
+ /* else the caller must have set the error code accordingly. */
}
+ /* else ignore the reset, close and clone calls. */
}
/*uses uprv_itou to get a unicode escape sequence of the offensive sequence,
@@ -182,7 +153,7 @@ UCNV_FROM_U_CALLBACK_ESCAPE (
if (reason > UCNV_IRREGULAR)
{
- return;
+ return;
}
ucnv_setFromUCallBack (fromArgs->converter,
@@ -210,77 +181,84 @@ UCNV_FROM_U_CALLBACK_ESCAPE (
{
switch(*((char*)context))
{
- case UCNV_PRV_ESCAPE_JAVA:
+ case UCNV_PRV_ESCAPE_JAVA:
while (i < length)
{
- valueString[valueStringLength++] = (UChar) UNICODE_RS_CODEPOINT; /* adding \ */
- valueString[valueStringLength++] = (UChar) UNICODE_U_LOW_CODEPOINT; /* adding u */
- valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint16_t)codeUnits[i++], 16, 4);
+ valueString[valueStringLength++] = (UChar) UNICODE_RS_CODEPOINT; /* adding \ */
+ valueString[valueStringLength++] = (UChar) UNICODE_U_LOW_CODEPOINT; /* adding u */
+ valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint16_t)codeUnits[i++], 16, 4);
}
break;
- case UCNV_PRV_ESCAPE_C:
- valueString[valueStringLength++] = (UChar) UNICODE_RS_CODEPOINT; /* adding \ */
+ case UCNV_PRV_ESCAPE_C:
+ valueString[valueStringLength++] = (UChar) UNICODE_RS_CODEPOINT; /* adding \ */
- if(length==2){
- valueString[valueStringLength++] = (UChar) UNICODE_U_CODEPOINT; /* adding U */
- valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, codePoint, 16, 8);
-
- }
- else{
- valueString[valueStringLength++] = (UChar) UNICODE_U_LOW_CODEPOINT; /* adding u */
- valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint16_t)codeUnits[0], 16, 4);
- }
+ if(length==2){
+ valueString[valueStringLength++] = (UChar) UNICODE_U_CODEPOINT; /* adding U */
+ valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, codePoint, 16, 8);
+
+ }
+ else{
+ valueString[valueStringLength++] = (UChar) UNICODE_U_LOW_CODEPOINT; /* adding u */
+ valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint16_t)codeUnits[0], 16, 4);
+ }
break;
- case UCNV_PRV_ESCAPE_XML_DEC:
-
- valueString[valueStringLength++] = (UChar) UNICODE_AMP_CODEPOINT; /* adding & */
- valueString[valueStringLength++] = (UChar) UNICODE_HASH_CODEPOINT; /* adding # */
- if(length==2){
- valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, codePoint, 10, 0);
- }
- else{
- valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint16_t)codeUnits[0], 10, 0);
- }
- valueString[valueStringLength++] = (UChar) UNICODE_SEMICOLON_CODEPOINT; /* adding ; */
+ case UCNV_PRV_ESCAPE_XML_DEC:
+
+ valueString[valueStringLength++] = (UChar) UNICODE_AMP_CODEPOINT; /* adding & */
+ valueString[valueStringLength++] = (UChar) UNICODE_HASH_CODEPOINT; /* adding # */
+ if(length==2){
+ valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, codePoint, 10, 0);
+ }
+ else{
+ valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint16_t)codeUnits[0], 10, 0);
+ }
+ valueString[valueStringLength++] = (UChar) UNICODE_SEMICOLON_CODEPOINT; /* adding ; */
break;
- case UCNV_PRV_ESCAPE_XML_HEX:
+ case UCNV_PRV_ESCAPE_XML_HEX:
- valueString[valueStringLength++] = (UChar) UNICODE_AMP_CODEPOINT; /* adding & */
- valueString[valueStringLength++] = (UChar) UNICODE_HASH_CODEPOINT; /* adding # */
- valueString[valueStringLength++] = (UChar) UNICODE_X_LOW_CODEPOINT; /* adding x */
- if(length==2){
- valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, codePoint, 16, 0);
- }
- else{
- valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint16_t)codeUnits[0], 16, 0);
- }
- valueString[valueStringLength++] = (UChar) UNICODE_SEMICOLON_CODEPOINT; /* adding ; */
+ valueString[valueStringLength++] = (UChar) UNICODE_AMP_CODEPOINT; /* adding & */
+ valueString[valueStringLength++] = (UChar) UNICODE_HASH_CODEPOINT; /* adding # */
+ valueString[valueStringLength++] = (UChar) UNICODE_X_LOW_CODEPOINT; /* adding x */
+ if(length==2){
+ valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, codePoint, 16, 0);
+ }
+ else{
+ valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint16_t)codeUnits[0], 16, 0);
+ }
+ valueString[valueStringLength++] = (UChar) UNICODE_SEMICOLON_CODEPOINT; /* adding ; */
break;
- case UCNV_PRV_ESCAPE_UNICODE:
+ case UCNV_PRV_ESCAPE_UNICODE:
valueString[valueStringLength++] = (UChar) UNICODE_LEFT_CURLY_CODEPOINT; /* adding { */
valueString[valueStringLength++] = (UChar) UNICODE_U_CODEPOINT; /* adding U */
valueString[valueStringLength++] = (UChar) UNICODE_PLUS_CODEPOINT; /* adding + */
if (length == 2) {
- valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, codePoint, 16, 4);
+ valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, codePoint, 16, 4);
} else {
- valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint16_t)codeUnits[0], 16, 4);
+ valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint16_t)codeUnits[0], 16, 4);
}
valueString[valueStringLength++] = (UChar) UNICODE_RIGHT_CURLY_CODEPOINT; /* adding } */
break;
- default:
+ case UCNV_PRV_ESCAPE_CSS2:
+ valueString[valueStringLength++] = (UChar) UNICODE_RS_CODEPOINT; /* adding \ */
+ valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, codePoint, 16, 0);
+ /* Always add space character, becase the next character might be whitespace,
+ which would erroneously be considered the termination of the escape sequence. */
+ valueString[valueStringLength++] = (UChar) UNICODE_SPACE_CODEPOINT;
+ break;
+
+ default:
while (i < length)
{
- valueString[valueStringLength++] = (UChar) UNICODE_PERCENT_SIGN_CODEPOINT; /* adding % */
- valueString[valueStringLength++] = (UChar) UNICODE_U_CODEPOINT; /* adding U */
- valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint16_t)codeUnits[i++], 16, 4);
+ valueString[valueStringLength++] = (UChar) UNICODE_PERCENT_SIGN_CODEPOINT; /* adding % */
+ valueString[valueStringLength++] = (UChar) UNICODE_U_CODEPOINT; /* adding U */
+ valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint16_t)codeUnits[i++], 16, 4);
}
}
-
}
myValueSource = valueString;
@@ -296,10 +274,10 @@ UCNV_FROM_U_CALLBACK_ESCAPE (
&ignoredContext,
&err2);
if (U_FAILURE (err2))
- {
+ {
*err = err2;
return;
- }
+ }
return;
}
@@ -315,30 +293,15 @@ UCNV_TO_U_CALLBACK_SKIP (
UConverterCallbackReason reason,
UErrorCode * err)
{
- if(context==NULL)
+ if (reason <= UCNV_IRREGULAR)
{
- if (reason <= UCNV_IRREGULAR)
+ if (context == NULL || (*((char*)context) == UCNV_PRV_STOP_ON_ILLEGAL && reason == UCNV_UNASSIGNED))
{
*err = U_ZERO_ERROR;
- return;
- }
-
- }
- else if(*((char*)context)=='i')
- {
- if(reason != UCNV_UNASSIGNED)
- {
- /* the caller must have set
- * the error code accordingly
- */
- return;
- }
- else
- {
- *err = U_ZERO_ERROR;
- return;
}
+ /* else the caller must have set the error code accordingly. */
}
+ /* else ignore the reset, close and clone calls. */
}
U_CAPI void U_EXPORT2
@@ -350,34 +313,16 @@ UCNV_TO_U_CALLBACK_SUBSTITUTE (
UConverterCallbackReason reason,
UErrorCode * err)
{
- if(context == NULL)
- {
- if (reason > UCNV_IRREGULAR)
- {
- return;
- }
-
- *err = U_ZERO_ERROR;
- ucnv_cbToUWriteSub(toArgs,0,err);
- return;
- }
- else if(*((char*)context)=='i')
+ if (reason <= UCNV_IRREGULAR)
{
- if(reason != UCNV_UNASSIGNED)
- {
- /* the caller must have set
- * the error code accordingly
- */
- return;
- }
- else
+ if (context == NULL || (*((char*)context) == UCNV_PRV_STOP_ON_ILLEGAL && reason == UCNV_UNASSIGNED))
{
*err = U_ZERO_ERROR;
ucnv_cbToUWriteSub(toArgs,0,err);
- return;
}
+ /* else the caller must have set the error code accordingly. */
}
-
+ /* else ignore the reset, close and clone calls. */
}
/*uses uprv_itou to get a unicode escape sequence of the offensive sequence,
@@ -401,57 +346,57 @@ UCNV_TO_U_CALLBACK_ESCAPE (
return;
}
- if(context==NULL)
- {
- while (i < length)
- {
- uniValueString[valueStringLength++] = (UChar) UNICODE_PERCENT_SIGN_CODEPOINT; /* adding % */
- uniValueString[valueStringLength++] = (UChar) UNICODE_X_CODEPOINT; /* adding X */
- valueStringLength += uprv_itou (uniValueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint8_t) codeUnits[i++], 16, 2);
+ if(context==NULL)
+ {
+ while (i < length)
+ {
+ uniValueString[valueStringLength++] = (UChar) UNICODE_PERCENT_SIGN_CODEPOINT; /* adding % */
+ uniValueString[valueStringLength++] = (UChar) UNICODE_X_CODEPOINT; /* adding X */
+ valueStringLength += uprv_itou (uniValueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint8_t) codeUnits[i++], 16, 2);
+ }
}
- }
- else
- {
- switch(*((char*)context))
- {
+ else
+ {
+ switch(*((char*)context))
+ {
case UCNV_PRV_ESCAPE_XML_DEC:
- while (i < length)
- {
+ while (i < length)
+ {
uniValueString[valueStringLength++] = (UChar) UNICODE_AMP_CODEPOINT; /* adding & */
uniValueString[valueStringLength++] = (UChar) UNICODE_HASH_CODEPOINT; /* adding # */
valueStringLength += uprv_itou (uniValueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint8_t)codeUnits[i++], 10, 0);
uniValueString[valueStringLength++] = (UChar) UNICODE_SEMICOLON_CODEPOINT; /* adding ; */
- }
- break;
+ }
+ break;
case UCNV_PRV_ESCAPE_XML_HEX:
- while (i < length)
- {
+ while (i < length)
+ {
uniValueString[valueStringLength++] = (UChar) UNICODE_AMP_CODEPOINT; /* adding & */
uniValueString[valueStringLength++] = (UChar) UNICODE_HASH_CODEPOINT; /* adding # */
uniValueString[valueStringLength++] = (UChar) UNICODE_X_LOW_CODEPOINT; /* adding x */
valueStringLength += uprv_itou (uniValueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint8_t)codeUnits[i++], 16, 0);
uniValueString[valueStringLength++] = (UChar) UNICODE_SEMICOLON_CODEPOINT; /* adding ; */
- }
- break;
+ }
+ break;
case UCNV_PRV_ESCAPE_C:
- while (i < length)
- {
+ while (i < length)
+ {
uniValueString[valueStringLength++] = (UChar) UNICODE_RS_CODEPOINT; /* adding \ */
uniValueString[valueStringLength++] = (UChar) UNICODE_X_LOW_CODEPOINT; /* adding x */
valueStringLength += uprv_itou (uniValueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint8_t)codeUnits[i++], 16, 2);
- }
- break;
+ }
+ break;
default:
- while (i < length)
- {
+ while (i < length)
+ {
uniValueString[valueStringLength++] = (UChar) UNICODE_PERCENT_SIGN_CODEPOINT; /* adding % */
uniValueString[valueStringLength++] = (UChar) UNICODE_X_CODEPOINT; /* adding X */
uprv_itou (uniValueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint8_t) codeUnits[i++], 16, 2);
valueStringLength += 2;
- }
- }
- }
+ }
+ }
+ }
/* reset the error */
*err = U_ZERO_ERROR;
diff --git a/icuSources/common/ucnv_ext.c b/icuSources/common/ucnv_ext.c
index 18fe3f94..38616f8a 100644
--- a/icuSources/common/ucnv_ext.c
+++ b/icuSources/common/ucnv_ext.c
@@ -1,7 +1,7 @@
/*
******************************************************************************
*
-* Copyright (C) 2003-2004, International Business Machines
+* Copyright (C) 2003-2007, International Business Machines
* Corporation and others. All Rights Reserved.
*
******************************************************************************
@@ -551,6 +551,12 @@ ucnv_extMatchFromU(const int32_t *cx,
return 0;
}
+ /*
+ * Tests for (value&UCNV_EXT_FROM_U_RESERVED_MASK)==0:
+ * Do not interpret values with reserved bits used, for forward compatibility,
+ * and do not even remember intermediate results with reserved bits used.
+ */
+
if(UCNV_EXT_TO_U_IS_PARTIAL(value)) {
/* partial match, enter the loop below */
index=(int32_t)UCNV_EXT_FROM_U_GET_PARTIAL_INDEX(value);
@@ -575,7 +581,8 @@ ucnv_extMatchFromU(const int32_t *cx,
value=*fromUSectionValues++;
if( value!=0 &&
(UCNV_EXT_FROM_U_IS_ROUNDTRIP(value) ||
- FROM_U_USE_FALLBACK(useFallback, firstCP))
+ FROM_U_USE_FALLBACK(useFallback, firstCP)) &&
+ (value&UCNV_EXT_FROM_U_RESERVED_MASK)==0
) {
/* remember longest match so far */
matchValue=value;
@@ -613,8 +620,9 @@ ucnv_extMatchFromU(const int32_t *cx,
/* partial match, continue */
index=(int32_t)UCNV_EXT_FROM_U_GET_PARTIAL_INDEX(value);
} else {
- if( UCNV_EXT_FROM_U_IS_ROUNDTRIP(value) ||
- FROM_U_USE_FALLBACK(useFallback, firstCP)
+ if( (UCNV_EXT_FROM_U_IS_ROUNDTRIP(value) ||
+ FROM_U_USE_FALLBACK(useFallback, firstCP)) &&
+ (value&UCNV_EXT_FROM_U_RESERVED_MASK)==0
) {
/* full match, stop with result */
matchValue=value;
@@ -632,8 +640,9 @@ ucnv_extMatchFromU(const int32_t *cx,
return 0;
}
} else /* result from firstCP trie lookup */ {
- if( UCNV_EXT_FROM_U_IS_ROUNDTRIP(value) ||
- FROM_U_USE_FALLBACK(useFallback, firstCP)
+ if( (UCNV_EXT_FROM_U_IS_ROUNDTRIP(value) ||
+ FROM_U_USE_FALLBACK(useFallback, firstCP)) &&
+ (value&UCNV_EXT_FROM_U_RESERVED_MASK)==0
) {
/* full match, stop with result */
matchValue=value;
@@ -644,20 +653,18 @@ ucnv_extMatchFromU(const int32_t *cx,
}
}
- if(matchValue&UCNV_EXT_FROM_U_RESERVED_MASK) {
- /* do not interpret values with reserved bits used, for forward compatibility */
- return 0;
- }
-
/* return result */
if(matchValue==UCNV_EXT_FROM_U_SUBCHAR1) {
return 1; /* assert matchLength==2 */
}
- *pMatchValue=UCNV_EXT_FROM_U_MASK_ROUNDTRIP(matchValue);
+ *pMatchValue=matchValue;
return matchLength;
}
+/*
+ * @param value fromUnicode mapping table value; ignores roundtrip and reserved bits
+ */
static U_INLINE void
ucnv_extWriteFromU(UConverter *cnv, const int32_t *cx,
uint32_t value,
@@ -792,6 +799,10 @@ ucnv_extInitialMatchFromU(UConverter *cnv, const int32_t *cx,
}
}
+/*
+ * Used by ISO 2022 implementation.
+ * @return number of bytes in *pValue; negative number if fallback; 0 for no mapping
+ */
U_CFUNC int32_t
ucnv_extSimpleMatchFromU(const int32_t *cx,
UChar32 cp, uint32_t *pValue,
@@ -809,13 +820,15 @@ ucnv_extSimpleMatchFromU(const int32_t *cx,
if(match>=2) {
/* write result for simple, single-character conversion */
int32_t length;
-
+ int isRoundtrip;
+
+ isRoundtrip=UCNV_EXT_FROM_U_IS_ROUNDTRIP(value);
length=UCNV_EXT_FROM_U_GET_LENGTH(value);
value=(uint32_t)UCNV_EXT_FROM_U_GET_DATA(value);
if(length<=UCNV_EXT_FROM_U_MAX_DIRECT_LENGTH) {
*pValue=value;
- return length;
+ return isRoundtrip ? length : -length;
#if 0 /* not currently used */
} else if(length==4) {
/* de-serialize a 4-byte result */
@@ -825,7 +838,7 @@ ucnv_extSimpleMatchFromU(const int32_t *cx,
((uint32_t)result[1]<<16)|
((uint32_t)result[2]<<8)|
result[3];
- return 4;
+ return isRoundtrip ? 4 : -4;
#endif
}
}
@@ -933,7 +946,7 @@ static void
ucnv_extGetUnicodeSetString(const UConverterSharedData *sharedData,
const int32_t *cx,
const USetAdder *sa,
- UConverterUnicodeSet which,
+ UBool useFallback,
int32_t minLength,
UChar32 c,
UChar s[UCNV_EXT_MAX_UCHARS], int32_t length,
@@ -953,7 +966,7 @@ ucnv_extGetUnicodeSetString(const UConverterSharedData *sharedData,
value=*fromUSectionValues++;
if( value!=0 &&
- UCNV_EXT_FROM_U_IS_ROUNDTRIP(value) &&
+ (UCNV_EXT_FROM_U_IS_ROUNDTRIP(value) || useFallback) &&
UCNV_EXT_FROM_U_GET_LENGTH(value)>=minLength
) {
if(c>=0) {
@@ -974,12 +987,14 @@ ucnv_extGetUnicodeSetString(const UConverterSharedData *sharedData,
/* no mapping, do nothing */
} else if(UCNV_EXT_FROM_U_IS_PARTIAL(value)) {
ucnv_extGetUnicodeSetString(
- sharedData, cx, sa, which, minLength,
+ sharedData, cx, sa, useFallback, minLength,
U_SENTINEL, s, length+1,
(int32_t)UCNV_EXT_FROM_U_GET_PARTIAL_INDEX(value),
pErrorCode);
- } else if(((value&(UCNV_EXT_FROM_U_ROUNDTRIP_FLAG|UCNV_EXT_FROM_U_RESERVED_MASK))==
- UCNV_EXT_FROM_U_ROUNDTRIP_FLAG) &&
+ } else if((useFallback ?
+ (value&UCNV_EXT_FROM_U_RESERVED_MASK)==0 :
+ ((value&(UCNV_EXT_FROM_U_ROUNDTRIP_FLAG|UCNV_EXT_FROM_U_RESERVED_MASK))==
+ UCNV_EXT_FROM_U_ROUNDTRIP_FLAG)) &&
UCNV_EXT_FROM_U_GET_LENGTH(value)>=minLength
) {
sa->addString(sa->set, s, length+1);
@@ -991,6 +1006,7 @@ U_CFUNC void
ucnv_extGetUnicodeSet(const UConverterSharedData *sharedData,
const USetAdder *sa,
UConverterUnicodeSet which,
+ UConverterSetFilter filter,
UErrorCode *pErrorCode) {
const int32_t *cx;
const uint16_t *stage12, *stage3, *ps2, *ps3;
@@ -998,6 +1014,7 @@ ucnv_extGetUnicodeSet(const UConverterSharedData *sharedData,
uint32_t value;
int32_t st1, stage1Length, st2, st3, minLength;
+ UBool useFallback;
UChar s[UCNV_EXT_MAX_UCHARS];
UChar32 c;
@@ -1014,10 +1031,16 @@ ucnv_extGetUnicodeSet(const UConverterSharedData *sharedData,
stage1Length=cx[UCNV_EXT_FROM_U_STAGE_1_LENGTH];
+ useFallback=(UBool)(which==UCNV_ROUNDTRIP_AND_FALLBACK_SET);
+
/* enumerate the from-Unicode trie table */
c=0; /* keep track of the current code point while enumerating */
- if(sharedData->mbcs.outputType==MBCS_OUTPUT_DBCS_ONLY) {
+ if(filter==UCNV_SET_FILTER_2022_CN) {
+ minLength=3;
+ } else if( sharedData->mbcs.outputType==MBCS_OUTPUT_DBCS_ONLY ||
+ filter!=UCNV_SET_FILTER_NONE
+ ) {
/* DBCS-only, ignore single-byte results */
minLength=2;
} else {
@@ -1051,14 +1074,48 @@ ucnv_extGetUnicodeSet(const UConverterSharedData *sharedData,
length=0;
U16_APPEND_UNSAFE(s, length, c);
ucnv_extGetUnicodeSetString(
- sharedData, cx, sa, which, minLength,
+ sharedData, cx, sa, useFallback, minLength,
c, s, length,
(int32_t)UCNV_EXT_FROM_U_GET_PARTIAL_INDEX(value),
pErrorCode);
- } else if(((value&(UCNV_EXT_FROM_U_ROUNDTRIP_FLAG|UCNV_EXT_FROM_U_RESERVED_MASK))==
- UCNV_EXT_FROM_U_ROUNDTRIP_FLAG) &&
+ } else if((useFallback ?
+ (value&UCNV_EXT_FROM_U_RESERVED_MASK)==0 :
+ ((value&(UCNV_EXT_FROM_U_ROUNDTRIP_FLAG|UCNV_EXT_FROM_U_RESERVED_MASK))==
+ UCNV_EXT_FROM_U_ROUNDTRIP_FLAG)) &&
UCNV_EXT_FROM_U_GET_LENGTH(value)>=minLength
) {
+ switch(filter) {
+ case UCNV_SET_FILTER_2022_CN:
+ if(!(UCNV_EXT_FROM_U_GET_LENGTH(value)==3 && UCNV_EXT_FROM_U_GET_DATA(value)<=0x82ffff)) {
+ continue;
+ }
+ break;
+ case UCNV_SET_FILTER_SJIS:
+ if(!(UCNV_EXT_FROM_U_GET_LENGTH(value)==2 && (value=UCNV_EXT_FROM_U_GET_DATA(value))>=0x8140 && value<=0xeffc)) {
+ continue;
+ }
+ break;
+ case UCNV_SET_FILTER_GR94DBCS:
+ if(!(UCNV_EXT_FROM_U_GET_LENGTH(value)==2 &&
+ (uint16_t)((value=UCNV_EXT_FROM_U_GET_DATA(value))-0xa1a1)<=(0xfefe - 0xa1a1) &&
+ (uint8_t)(value-0xa1)<=(0xfe - 0xa1))) {
+ continue;
+ }
+ break;
+ case UCNV_SET_FILTER_HZ:
+ if(!(UCNV_EXT_FROM_U_GET_LENGTH(value)==2 &&
+ (uint16_t)((value=UCNV_EXT_FROM_U_GET_DATA(value))-0xa1a1)<=(0xfdfe - 0xa1a1) &&
+ (uint8_t)(value-0xa1)<=(0xfe - 0xa1))) {
+ continue;
+ }
+ break;
+ default:
+ /*
+ * UCNV_SET_FILTER_NONE,
+ * or UCNV_SET_FILTER_DBCS_ONLY which is handled via minLength
+ */
+ break;
+ }
sa->add(sa->set, c);
}
} while((++c&0xf)!=0);
diff --git a/icuSources/common/ucnv_ext.h b/icuSources/common/ucnv_ext.h
index 6ccd7669..e3e46f4b 100644
--- a/icuSources/common/ucnv_ext.h
+++ b/icuSources/common/ucnv_ext.h
@@ -1,7 +1,7 @@
/*
******************************************************************************
*
-* Copyright (C) 2003-2004, International Business Machines
+* Copyright (C) 2003-2007, International Business Machines
* Corporation and others. All Rights Reserved.
*
******************************************************************************
@@ -382,10 +382,20 @@ ucnv_extContinueMatchFromU(UConverter *cnv,
UConverterFromUnicodeArgs *pArgs, int32_t srcIndex,
UErrorCode *pErrorCode);
+/*
+ * Add code points and strings to the set according to the extension mappings.
+ * Limitation on the UConverterSetFilter:
+ * The filters currently assume that they are used with 1:1 mappings.
+ * They only apply to single input code points, and then they pass through
+ * only mappings with single-charset-code results.
+ * For example, the Shift-JIS filter only works for 2-byte results and tests
+ * that those 2 bytes are in the JIS X 0208 range of Shift-JIS.
+ */
U_CFUNC void
ucnv_extGetUnicodeSet(const UConverterSharedData *sharedData,
const USetAdder *sa,
UConverterUnicodeSet which,
+ UConverterSetFilter filter,
UErrorCode *pErrorCode);
/* toUnicode helpers -------------------------------------------------------- */
@@ -452,7 +462,7 @@ ucnv_extGetUnicodeSet(const UConverterSharedData *sharedData,
#define UCNV_EXT_FROM_U_IS_ROUNDTRIP(value) (((value)&UCNV_EXT_FROM_U_ROUNDTRIP_FLAG)!=0)
#define UCNV_EXT_FROM_U_MASK_ROUNDTRIP(value) ((value)&~UCNV_EXT_FROM_U_ROUNDTRIP_FLAG)
-/* use after masking off the roundtrip flag */
+/* get length; masks away all other bits */
#define UCNV_EXT_FROM_U_GET_LENGTH(value) (int32_t)(((value)>>UCNV_EXT_FROM_U_LENGTH_SHIFT)&UCNV_EXT_MAX_BYTES)
/* get bytes or bytes index */
diff --git a/icuSources/common/ucnv_imp.h b/icuSources/common/ucnv_imp.h
index c1f48c0e..4a3b280e 100644
--- a/icuSources/common/ucnv_imp.h
+++ b/icuSources/common/ucnv_imp.h
@@ -1,6 +1,6 @@
/*
**********************************************************************
-* Copyright (C) 1999-2006, International Business Machines
+* Copyright (C) 1999-2007, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
*
@@ -87,6 +87,10 @@ ucnv_unloadSharedDataIfReady(UConverterSharedData *sharedData);
void
ucnv_incrementRefCount(UConverterSharedData *sharedData);
+/**
+ * These are the default error handling callbacks for the charset conversion framework.
+ * For performance reasons, they are only called to handle an error (not normally called for a reset or close).
+ */
#define UCNV_TO_U_DEFAULT_CALLBACK ((UConverterToUCallback) UCNV_TO_U_CALLBACK_SUBSTITUTE)
#define UCNV_FROM_U_DEFAULT_CALLBACK ((UConverterFromUCallback) UCNV_FROM_U_CALLBACK_SUBSTITUTE)
diff --git a/icuSources/common/ucnv_io.c b/icuSources/common/ucnv_io.c
index 4e570e55..29876a67 100644
--- a/icuSources/common/ucnv_io.c
+++ b/icuSources/common/ucnv_io.c
@@ -1,7 +1,7 @@
/*
******************************************************************************
*
-* Copyright (C) 1999-2006, International Business Machines
+* Copyright (C) 1999-2007, International Business Machines
* Corporation and others. All Rights Reserved.
*
******************************************************************************
@@ -236,8 +236,9 @@ haveAliasData(UErrorCode *pErrorCode) {
/* load converter alias data from file if necessary */
if (needInit) {
- UDataMemory *data = NULL;
- const uint16_t *table = NULL;
+ UDataMemory *data;
+ const uint16_t *table;
+ const uint32_t *sectionSizes;
uint32_t tableStart;
uint32_t currOffset;
@@ -246,9 +247,10 @@ haveAliasData(UErrorCode *pErrorCode) {
return FALSE;
}
- table = (const uint16_t *)udata_getMemory(data);
+ sectionSizes = (const uint32_t *)udata_getMemory(data);
+ table = (const uint16_t *)sectionSizes;
- tableStart = ((const uint32_t *)(table))[0];
+ tableStart = sectionSizes[0];
if (tableStart < minTocLength) {
*pErrorCode = U_INVALID_FORMAT_ERROR;
udata_close(data);
@@ -260,17 +262,17 @@ haveAliasData(UErrorCode *pErrorCode) {
gAliasData = data;
data=NULL;
- gMainTable.converterListSize = ((const uint32_t *)(table))[1];
- gMainTable.tagListSize = ((const uint32_t *)(table))[2];
- gMainTable.aliasListSize = ((const uint32_t *)(table))[3];
- gMainTable.untaggedConvArraySize = ((const uint32_t *)(table))[4];
- gMainTable.taggedAliasArraySize = ((const uint32_t *)(table))[5];
- gMainTable.taggedAliasListsSize = ((const uint32_t *)(table))[6];
- gMainTable.optionTableSize = ((const uint32_t *)(table))[7];
- gMainTable.stringTableSize = ((const uint32_t *)(table))[8];
-
- if (((const uint32_t *)(table))[0] > 8) {
- gMainTable.normalizedStringTableSize = ((const uint32_t *)(table))[9];
+ gMainTable.converterListSize = sectionSizes[1];
+ gMainTable.tagListSize = sectionSizes[2];
+ gMainTable.aliasListSize = sectionSizes[3];
+ gMainTable.untaggedConvArraySize = sectionSizes[4];
+ gMainTable.taggedAliasArraySize = sectionSizes[5];
+ gMainTable.taggedAliasListsSize = sectionSizes[6];
+ gMainTable.optionTableSize = sectionSizes[7];
+ gMainTable.stringTableSize = sectionSizes[8];
+
+ if (tableStart > 8) {
+ gMainTable.normalizedStringTableSize = sectionSizes[9];
}
currOffset = tableStart * (sizeof(uint32_t)/sizeof(uint16_t)) + (sizeof(uint32_t)/sizeof(uint16_t));
@@ -1069,9 +1071,9 @@ ucnv_openAllNames(UErrorCode *pErrorCode) {
}
U_CFUNC uint16_t
-ucnv_io_countTotalAliases(UErrorCode *pErrorCode) {
+ucnv_io_countKnownConverters(UErrorCode *pErrorCode) {
if (haveAliasData(pErrorCode)) {
- return (uint16_t)gMainTable.aliasListSize;
+ return (uint16_t)gMainTable.converterListSize;
}
return 0;
}
@@ -1122,6 +1124,7 @@ ucnv_swapAliases(const UDataSwapper *ds,
int32_t headerSize;
const uint16_t *inTable;
+ const uint32_t *inSectionSizes;
uint32_t toc[offsetsCount];
uint32_t offsets[offsetsCount]; /* 16-bit-addressed offsets from inTable/outTable */
uint32_t i, count, tocLength, topOffset;
@@ -1161,9 +1164,10 @@ ucnv_swapAliases(const UDataSwapper *ds,
return 0;
}
- inTable=(const uint16_t *)((const char *)inData+headerSize);
+ inSectionSizes=(const uint32_t *)((const char *)inData+headerSize);
+ inTable=(const uint16_t *)inSectionSizes;
uprv_memset(toc, 0, sizeof(toc));
- toc[tocLengthIndex]=tocLength=ds->readUInt32(((const uint32_t *)inTable)[tocLengthIndex]);
+ toc[tocLengthIndex]=tocLength=ds->readUInt32(inSectionSizes[tocLengthIndex]);
if(tocLengthreadUInt32(((const uint32_t *)inTable)[i]);
+ toc[i]=ds->readUInt32(inSectionSizes[i]);
}
/* compute offsets */
diff --git a/icuSources/common/ucnv_io.h b/icuSources/common/ucnv_io.h
index 91bc6e59..060ffd05 100644
--- a/icuSources/common/ucnv_io.h
+++ b/icuSources/common/ucnv_io.h
@@ -95,13 +95,12 @@ U_CFUNC const char *
ucnv_io_getConverterName(const char *alias, UBool *containsOption, UErrorCode *pErrorCode);
/**
- * Return the number of all aliases and converter names.
- * This is helpful if you need a number for creating an alias table.
+ * Return the number of all known converter names (no aliases).
* @param pErrorCode The error code
* @return the number of all aliases
*/
U_CFUNC uint16_t
-ucnv_io_countTotalAliases(UErrorCode *pErrorCode);
+ucnv_io_countKnownConverters(UErrorCode *pErrorCode);
/**
* Swap an ICU converter alias table. See implementation for details.
diff --git a/icuSources/common/ucnv_lmb.c b/icuSources/common/ucnv_lmb.c
index 79606af2..0d92c576 100644
--- a/icuSources/common/ucnv_lmb.c
+++ b/icuSources/common/ucnv_lmb.c
@@ -1,6 +1,6 @@
/*
**********************************************************************
-* Copyright (C) 2000-2006, International Business Machines
+* Copyright (C) 2000-2007, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
* file name: ucnv_lmb.cpp
@@ -536,7 +536,7 @@ static const UConverterImpl _LMBCSImpl##n={\
NULL,\
NULL,\
_LMBCSSafeClone,\
- _LMBCSGetUnicodeSet\
+ ucnv_getCompleteUnicodeSet\
};\
static const UConverterStaticData _LMBCSStaticData##n={\
sizeof(UConverterStaticData),\
@@ -662,15 +662,14 @@ _LMBCSSafeClone(const UConverter *cnv,
return &newLMBCS->cnv;
}
-static void
-_LMBCSGetUnicodeSet(const UConverter *cnv,
- const USetAdder *sa,
- UConverterUnicodeSet which,
- UErrorCode *pErrorCode) {
- /* all but U+F6xx, see LMBCS explanation above (search for F6xx) */
- sa->addRange(sa->set, 0, 0xf5ff);
- sa->addRange(sa->set, 0xf700, 0x10ffff);
-}
+/*
+ * There used to be a _LMBCSGetUnicodeSet() function here (up to svn revision 20117)
+ * which added all code points except for U+F6xx
+ * because those cannot be represented in the Unicode group.
+ * However, it turns out that windows-950 has roundtrips for all of U+F6xx
+ * which means that LMBCS can convert all Unicode code points after all.
+ * We now simply use ucnv_getCompleteUnicodeSet().
+ */
/*
Here's the basic helper function that we use when converting from
diff --git a/icuSources/common/ucnv_set.c b/icuSources/common/ucnv_set.c
index 772e7ed8..3d8d3927 100644
--- a/icuSources/common/ucnv_set.c
+++ b/icuSources/common/ucnv_set.c
@@ -1,7 +1,7 @@
/*
*******************************************************************************
*
-* Copyright (C) 2003-2005, International Business Machines
+* Copyright (C) 2003-2007, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
@@ -52,7 +52,8 @@ ucnv_getUnicodeSet(const UConverter *cnv,
uset_add,
uset_addRange,
uset_addString,
- uset_remove
+ uset_remove,
+ uset_removeRange
};
sa.set=setFillIn;
diff --git a/icuSources/common/ucnv_u16.c b/icuSources/common/ucnv_u16.c
index 6fc9e2a4..ff96e3b0 100644
--- a/icuSources/common/ucnv_u16.c
+++ b/icuSources/common/ucnv_u16.c
@@ -1,6 +1,6 @@
/*
**********************************************************************
-* Copyright (C) 2002-2006, International Business Machines
+* Copyright (C) 2002-2008, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
* file name: ucnv_u16.c
@@ -574,7 +574,7 @@ static const UConverterImpl _UTF16BEImpl={
static const UConverterStaticData _UTF16BEStaticData={
sizeof(UConverterStaticData),
"UTF-16BE",
- 1200, UCNV_IBM, UCNV_UTF16_BigEndian, 2, 2,
+ 1200, UCNV_IBM, UCNV_UTF16_BigEndian, 2, 4,
{ 0xff, 0xfd, 0, 0 },2,FALSE,FALSE,
0,
0,
@@ -1129,7 +1129,7 @@ static const UConverterImpl _UTF16LEImpl={
static const UConverterStaticData _UTF16LEStaticData={
sizeof(UConverterStaticData),
"UTF-16LE",
- 1202, UCNV_IBM, UCNV_UTF16_LittleEndian, 2, 2,
+ 1202, UCNV_IBM, UCNV_UTF16_LittleEndian, 2, 4,
{ 0xfd, 0xff, 0, 0 },2,FALSE,FALSE,
0,
0,
@@ -1351,7 +1351,7 @@ static const UConverterStaticData _UTF16StaticData = {
sizeof(UConverterStaticData),
"UTF-16",
1204, /* CCSID for BOM sensitive UTF-16 */
- UCNV_IBM, UCNV_UTF16, 2, 2,
+ UCNV_IBM, UCNV_UTF16, 2, 4,
#if U_IS_BIG_ENDIAN
{ 0xff, 0xfd, 0, 0 }, 2,
#else
diff --git a/icuSources/common/ucnv_u8.c b/icuSources/common/ucnv_u8.c
index 7b977019..75f554c4 100644
--- a/icuSources/common/ucnv_u8.c
+++ b/icuSources/common/ucnv_u8.c
@@ -1,6 +1,6 @@
/*
**********************************************************************
-* Copyright (C) 2002-2006, International Business Machines
+* Copyright (C) 2002-2007, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
* file name: ucnv_u8.c
@@ -40,7 +40,7 @@ U_CFUNC void ucnv_fromUnicode_UTF8_OFFSETS_LOGIC(UConverterFromUnicodeArgs *args
/* UTF-8 -------------------------------------------------------------------- */
/* UTF-8 Conversion DATA
- * for more information see Unicode Strandard 2.0 , Transformation Formats Appendix A-9
+ * for more information see Unicode Standard 2.0, Transformation Formats Appendix A-9
*/
/*static const uint32_t REPLACEMENT_CHARACTER = 0x0000FFFD;*/
#define MAXIMUM_UCS2 0x0000FFFF
@@ -87,24 +87,25 @@ utf8_minChar32[7]={ 0, 0, 0x80, 0x800, 0x10000, 0xffffffff, 0xffffffff };
static void ucnv_toUnicode_UTF8 (UConverterToUnicodeArgs * args,
UErrorCode * err)
{
+ UConverter *cnv = args->converter;
const unsigned char *mySource = (unsigned char *) args->source;
UChar *myTarget = args->target;
const unsigned char *sourceLimit = (unsigned char *) args->sourceLimit;
const UChar *targetLimit = args->targetLimit;
- unsigned char *toUBytes = args->converter->toUBytes;
- UBool isCESU8 = (UBool)(args->converter->sharedData == &_CESU8Data);
+ unsigned char *toUBytes = cnv->toUBytes;
+ UBool isCESU8 = (UBool)(cnv->sharedData == &_CESU8Data);
uint32_t ch, ch2 = 0;
int32_t i, inBytes;
/* Restore size of current sequence */
- if (args->converter->toUnicodeStatus && myTarget < targetLimit)
+ if (cnv->toUnicodeStatus && myTarget < targetLimit)
{
- inBytes = args->converter->mode; /* restore # of bytes to consume */
- i = args->converter->toULength; /* restore # of bytes consumed */
- args->converter->toULength = 0;
+ inBytes = cnv->mode; /* restore # of bytes to consume */
+ i = cnv->toULength; /* restore # of bytes consumed */
+ cnv->toULength = 0;
- ch = args->converter->toUnicodeStatus;/*Stores the previously calculated ch from a previous call*/
- args->converter->toUnicodeStatus = 0;
+ ch = cnv->toUnicodeStatus;/*Stores the previously calculated ch from a previous call*/
+ cnv->toUnicodeStatus = 0;
goto morebytes;
}
@@ -140,9 +141,9 @@ morebytes:
else
{
/* stores a partially calculated target*/
- args->converter->toUnicodeStatus = ch;
- args->converter->mode = inBytes;
- args->converter->toULength = (int8_t) i;
+ cnv->toUnicodeStatus = ch;
+ cnv->mode = inBytes;
+ cnv->toULength = (int8_t) i;
goto donefornow;
}
}
@@ -184,8 +185,8 @@ morebytes:
else
{
/* Put in overflow buffer (not handled here) */
- args->converter->UCharErrorBuffer[0] = (UChar) ch;
- args->converter->UCharErrorBufferLength = 1;
+ cnv->UCharErrorBuffer[0] = (UChar) ch;
+ cnv->UCharErrorBufferLength = 1;
*err = U_BUFFER_OVERFLOW_ERROR;
break;
}
@@ -193,7 +194,7 @@ morebytes:
}
else
{
- args->converter->toULength = (int8_t)i;
+ cnv->toULength = (int8_t)i;
*err = U_ILLEGAL_CHAR_FOUND;
break;
}
@@ -214,26 +215,27 @@ donefornow:
static void ucnv_toUnicode_UTF8_OFFSETS_LOGIC (UConverterToUnicodeArgs * args,
UErrorCode * err)
{
+ UConverter *cnv = args->converter;
const unsigned char *mySource = (unsigned char *) args->source;
UChar *myTarget = args->target;
int32_t *myOffsets = args->offsets;
int32_t offsetNum = 0;
const unsigned char *sourceLimit = (unsigned char *) args->sourceLimit;
const UChar *targetLimit = args->targetLimit;
- unsigned char *toUBytes = args->converter->toUBytes;
- UBool isCESU8 = (UBool)(args->converter->sharedData == &_CESU8Data);
+ unsigned char *toUBytes = cnv->toUBytes;
+ UBool isCESU8 = (UBool)(cnv->sharedData == &_CESU8Data);
uint32_t ch, ch2 = 0;
int32_t i, inBytes;
/* Restore size of current sequence */
- if (args->converter->toUnicodeStatus && myTarget < targetLimit)
+ if (cnv->toUnicodeStatus && myTarget < targetLimit)
{
- inBytes = args->converter->mode; /* restore # of bytes to consume */
- i = args->converter->toULength; /* restore # of bytes consumed */
- args->converter->toULength = 0;
+ inBytes = cnv->mode; /* restore # of bytes to consume */
+ i = cnv->toULength; /* restore # of bytes consumed */
+ cnv->toULength = 0;
- ch = args->converter->toUnicodeStatus;/*Stores the previously calculated ch from a previous call*/
- args->converter->toUnicodeStatus = 0;
+ ch = cnv->toUnicodeStatus;/*Stores the previously calculated ch from a previous call*/
+ cnv->toUnicodeStatus = 0;
goto morebytes;
}
@@ -267,9 +269,9 @@ morebytes:
}
else
{
- args->converter->toUnicodeStatus = ch;
- args->converter->mode = inBytes;
- args->converter->toULength = (int8_t)i;
+ cnv->toUnicodeStatus = ch;
+ cnv->mode = inBytes;
+ cnv->toULength = (int8_t)i;
goto donefornow;
}
}
@@ -313,8 +315,8 @@ morebytes:
}
else
{
- args->converter->UCharErrorBuffer[0] = (UChar) ch;
- args->converter->UCharErrorBufferLength = 1;
+ cnv->UCharErrorBuffer[0] = (UChar) ch;
+ cnv->UCharErrorBufferLength = 1;
*err = U_BUFFER_OVERFLOW_ERROR;
}
}
@@ -322,7 +324,7 @@ morebytes:
}
else
{
- args->converter->toULength = (int8_t)i;
+ cnv->toULength = (int8_t)i;
*err = U_ILLEGAL_CHAR_FOUND;
break;
}
@@ -345,13 +347,14 @@ U_CFUNC void ucnv_fromUnicode_UTF8 (UConverterFromUnicodeArgs * args,
{
UConverter *cnv = args->converter;
const UChar *mySource = args->source;
- unsigned char *myTarget = (unsigned char *) args->target;
const UChar *sourceLimit = args->sourceLimit;
- const unsigned char *targetLimit = (unsigned char *) args->targetLimit;
- UBool isCESU8 = (UBool)(args->converter->sharedData == &_CESU8Data);
+ uint8_t *myTarget = (uint8_t *) args->target;
+ const uint8_t *targetLimit = (uint8_t *) args->targetLimit;
+ uint8_t *tempPtr;
UChar32 ch;
- int16_t indexToWrite;
- char temp[4];
+ uint8_t tempBuf[4];
+ int32_t indexToWrite;
+ UBool isNotCESU8 = (UBool)(cnv->sharedData != &_CESU8Data);
if (cnv->fromUChar32 && myTarget < targetLimit)
{
@@ -366,81 +369,79 @@ U_CFUNC void ucnv_fromUnicode_UTF8 (UConverterFromUnicodeArgs * args,
if (ch < 0x80) /* Single byte */
{
- *(myTarget++) = (char) ch;
+ *(myTarget++) = (uint8_t) ch;
}
else if (ch < 0x800) /* Double byte */
{
- *(myTarget++) = (char) ((ch >> 6) | 0xc0);
+ *(myTarget++) = (uint8_t) ((ch >> 6) | 0xc0);
if (myTarget < targetLimit)
{
- *(myTarget++) = (char) ((ch & 0x3f) | 0x80);
+ *(myTarget++) = (uint8_t) ((ch & 0x3f) | 0x80);
}
else
{
- cnv->charErrorBuffer[0] = (char) ((ch & 0x3f) | 0x80);
+ cnv->charErrorBuffer[0] = (uint8_t) ((ch & 0x3f) | 0x80);
cnv->charErrorBufferLength = 1;
*err = U_BUFFER_OVERFLOW_ERROR;
}
}
- else
- /* Check for surrogates */
- {
- if(UTF_IS_SURROGATE(ch) && !isCESU8) {
- if(UTF_IS_SURROGATE_FIRST(ch)) {
+ else {
+ /* Check for surrogates */
+ if(UTF_IS_SURROGATE(ch) && isNotCESU8) {
lowsurrogate:
- if (mySource < sourceLimit) {
- /* test the following code unit */
- UChar trail=*mySource;
- if(UTF_IS_SECOND_SURROGATE(trail)) {
- ++mySource;
- ch=UTF16_GET_PAIR_VALUE(ch, trail);
- /* convert this supplementary code point */
- /* exit this condition tree */
- } else {
- /* this is an unmatched lead code unit (1st surrogate) */
- /* callback(illegal) */
- cnv->fromUChar32 = ch;
- *err = U_ILLEGAL_CHAR_FOUND;
- break;
- }
- } else {
- /* no more input */
+ if (mySource < sourceLimit) {
+ /* test both code units */
+ if(UTF_IS_SURROGATE_FIRST(ch) && UTF_IS_SECOND_SURROGATE(*mySource)) {
+ /* convert and consume this supplementary code point */
+ ch=UTF16_GET_PAIR_VALUE(ch, *mySource);
+ ++mySource;
+ /* exit this condition tree */
+ }
+ else {
+ /* this is an unpaired trail or lead code unit */
+ /* callback(illegal) */
cnv->fromUChar32 = ch;
+ *err = U_ILLEGAL_CHAR_FOUND;
break;
}
- } else {
- /* this is an unmatched trail code unit (2nd surrogate) */
- /* callback(illegal) */
+ }
+ else {
+ /* no more input */
cnv->fromUChar32 = ch;
- *err = U_ILLEGAL_CHAR_FOUND;
break;
}
}
- if (ch < 0x10000)
- {
+ /* Do we write the buffer directly for speed,
+ or do we have to be careful about target buffer space? */
+ tempPtr = (((targetLimit - myTarget) >= 4) ? myTarget : tempBuf);
+
+ if (ch <= MAXIMUM_UCS2) {
indexToWrite = 2;
- temp[2] = (char) ((ch >> 12) | 0xe0);
+ tempPtr[0] = (uint8_t) ((ch >> 12) | 0xe0);
}
- else
- {
+ else {
indexToWrite = 3;
- temp[3] = (char) ((ch >> 18) | 0xf0);
- temp[2] = (char) (((ch >> 12) & 0x3f) | 0x80);
+ tempPtr[0] = (uint8_t) ((ch >> 18) | 0xf0);
+ tempPtr[1] = (uint8_t) (((ch >> 12) & 0x3f) | 0x80);
}
- temp[1] = (char) (((ch >> 6) & 0x3f) | 0x80);
- temp[0] = (char) ((ch & 0x3f) | 0x80);
+ tempPtr[indexToWrite-1] = (uint8_t) (((ch >> 6) & 0x3f) | 0x80);
+ tempPtr[indexToWrite] = (uint8_t) ((ch & 0x3f) | 0x80);
- for (; indexToWrite >= 0; indexToWrite--)
- {
- if (myTarget < targetLimit)
- {
- *(myTarget++) = temp[indexToWrite];
- }
- else
- {
- cnv->charErrorBuffer[cnv->charErrorBufferLength++] = temp[indexToWrite];
- *err = U_BUFFER_OVERFLOW_ERROR;
+ if (tempPtr == myTarget) {
+ /* There was enough space to write the codepoint directly. */
+ myTarget += (indexToWrite + 1);
+ }
+ else {
+ /* We might run out of room soon. Write it slowly. */
+ for (; tempPtr <= (tempBuf + indexToWrite); tempPtr++) {
+ if (myTarget < targetLimit) {
+ *(myTarget++) = *tempPtr;
+ }
+ else {
+ cnv->charErrorBuffer[cnv->charErrorBufferLength++] = *tempPtr;
+ *err = U_BUFFER_OVERFLOW_ERROR;
+ }
}
}
}
@@ -460,15 +461,16 @@ U_CFUNC void ucnv_fromUnicode_UTF8_OFFSETS_LOGIC (UConverterFromUnicodeArgs * ar
{
UConverter *cnv = args->converter;
const UChar *mySource = args->source;
- unsigned char *myTarget = (unsigned char *) args->target;
int32_t *myOffsets = args->offsets;
const UChar *sourceLimit = args->sourceLimit;
- const unsigned char *targetLimit = (unsigned char *) args->targetLimit;
- UBool isCESU8 = (UBool)(args->converter->sharedData == &_CESU8Data);
+ uint8_t *myTarget = (uint8_t *) args->target;
+ const uint8_t *targetLimit = (uint8_t *) args->targetLimit;
+ uint8_t *tempPtr;
UChar32 ch;
int32_t offsetNum, nextSourceIndex;
- int16_t indexToWrite;
- char temp[4];
+ int32_t indexToWrite;
+ uint8_t tempBuf[4];
+ UBool isNotCESU8 = (UBool)(cnv->sharedData != &_CESU8Data);
if (cnv->fromUChar32 && myTarget < targetLimit)
{
@@ -493,15 +495,15 @@ U_CFUNC void ucnv_fromUnicode_UTF8_OFFSETS_LOGIC (UConverterFromUnicodeArgs * ar
else if (ch < 0x800) /* Double byte */
{
*(myOffsets++) = offsetNum;
- *(myTarget++) = (char) ((ch >> 6) | 0xc0);
+ *(myTarget++) = (uint8_t) ((ch >> 6) | 0xc0);
if (myTarget < targetLimit)
{
*(myOffsets++) = offsetNum++;
- *(myTarget++) = (char) ((ch & 0x3f) | 0x80);
+ *(myTarget++) = (uint8_t) ((ch & 0x3f) | 0x80);
}
else
{
- cnv->charErrorBuffer[0] = (char) ((ch & 0x3f) | 0x80);
+ cnv->charErrorBuffer[0] = (uint8_t) ((ch & 0x3f) | 0x80);
cnv->charErrorBufferLength = 1;
*err = U_BUFFER_OVERFLOW_ERROR;
}
@@ -511,64 +513,72 @@ U_CFUNC void ucnv_fromUnicode_UTF8_OFFSETS_LOGIC (UConverterFromUnicodeArgs * ar
{
nextSourceIndex = offsetNum + 1;
- if(UTF_IS_SURROGATE(ch) && !isCESU8) {
- if(UTF_IS_SURROGATE_FIRST(ch)) {
+ if(UTF_IS_SURROGATE(ch) && isNotCESU8) {
lowsurrogate:
- if (mySource < sourceLimit) {
- /* test the following code unit */
- UChar trail=*mySource;
- if(UTF_IS_SECOND_SURROGATE(trail)) {
- ++mySource;
- ++nextSourceIndex;
- ch=UTF16_GET_PAIR_VALUE(ch, trail);
- /* convert this supplementary code point */
- /* exit this condition tree */
- } else {
- /* this is an unmatched lead code unit (1st surrogate) */
- /* callback(illegal) */
- cnv->fromUChar32 = ch;
- *err = U_ILLEGAL_CHAR_FOUND;
- break;
- }
- } else {
- /* no more input */
+ if (mySource < sourceLimit) {
+ /* test both code units */
+ if(UTF_IS_SURROGATE_FIRST(ch) && UTF_IS_SECOND_SURROGATE(*mySource)) {
+ /* convert and consume this supplementary code point */
+ ch=UTF16_GET_PAIR_VALUE(ch, *mySource);
+ ++mySource;
+ ++nextSourceIndex;
+ /* exit this condition tree */
+ }
+ else {
+ /* this is an unpaired trail or lead code unit */
+ /* callback(illegal) */
cnv->fromUChar32 = ch;
+ *err = U_ILLEGAL_CHAR_FOUND;
break;
}
- } else {
- /* this is an unmatched trail code unit (2nd surrogate) */
- /* callback(illegal) */
+ }
+ else {
+ /* no more input */
cnv->fromUChar32 = ch;
- *err = U_ILLEGAL_CHAR_FOUND;
break;
}
}
- if (ch < 0x10000)
- {
+ /* Do we write the buffer directly for speed,
+ or do we have to be careful about target buffer space? */
+ tempPtr = (((targetLimit - myTarget) >= 4) ? myTarget : tempBuf);
+
+ if (ch <= MAXIMUM_UCS2) {
indexToWrite = 2;
- temp[2] = (char) ((ch >> 12) | 0xe0);
+ tempPtr[0] = (uint8_t) ((ch >> 12) | 0xe0);
}
- else
- {
+ else {
indexToWrite = 3;
- temp[3] = (char) ((ch >> 18) | 0xf0);
- temp[2] = (char) (((ch >> 12) & 0x3f) | 0x80);
+ tempPtr[0] = (uint8_t) ((ch >> 18) | 0xf0);
+ tempPtr[1] = (uint8_t) (((ch >> 12) & 0x3f) | 0x80);
}
- temp[1] = (char) (((ch >> 6) & 0x3f) | 0x80);
- temp[0] = (char) ((ch & 0x3f) | 0x80);
-
- for (; indexToWrite >= 0; indexToWrite--)
- {
- if (myTarget < targetLimit)
- {
- *(myOffsets++) = offsetNum;
- *(myTarget++) = temp[indexToWrite];
+ tempPtr[indexToWrite-1] = (uint8_t) (((ch >> 6) & 0x3f) | 0x80);
+ tempPtr[indexToWrite] = (uint8_t) ((ch & 0x3f) | 0x80);
+
+ if (tempPtr == myTarget) {
+ /* There was enough space to write the codepoint directly. */
+ myTarget += (indexToWrite + 1);
+ myOffsets[0] = offsetNum;
+ myOffsets[1] = offsetNum;
+ myOffsets[2] = offsetNum;
+ if (indexToWrite >= 3) {
+ myOffsets[3] = offsetNum;
}
- else
- {
- cnv->charErrorBuffer[cnv->charErrorBufferLength++] = temp[indexToWrite];
- *err = U_BUFFER_OVERFLOW_ERROR;
+ myOffsets += (indexToWrite + 1);
+ }
+ else {
+ /* We might run out of room soon. Write it slowly. */
+ for (; tempPtr <= (tempBuf + indexToWrite); tempPtr++) {
+ if (myTarget < targetLimit)
+ {
+ *(myOffsets++) = offsetNum;
+ *(myTarget++) = *tempPtr;
+ }
+ else
+ {
+ cnv->charErrorBuffer[cnv->charErrorBufferLength++] = *tempPtr;
+ *err = U_BUFFER_OVERFLOW_ERROR;
+ }
}
}
offsetNum = nextSourceIndex;
@@ -724,6 +734,263 @@ static UChar32 ucnv_getNextUChar_UTF8(UConverterToUnicodeArgs *args,
return 0xffff;
}
+/* UTF-8-from-UTF-8 conversion functions ------------------------------------ */
+
+/* minimum code point values for n-byte UTF-8 sequences, n=0..4 */
+static const UChar32
+utf8_minLegal[5]={ 0, 0, 0x80, 0x800, 0x10000 };
+
+/* offsets for n-byte UTF-8 sequences that were calculated with ((lead<<6)+trail)<<6+trail... */
+static const UChar32
+utf8_offsets[7]={ 0, 0, 0x3080, 0xE2080, 0x3C82080 };
+
+/* "Convert" UTF-8 to UTF-8: Validate and copy. Modified from ucnv_DBCSFromUTF8(). */
+static void
+ucnv_UTF8FromUTF8(UConverterFromUnicodeArgs *pFromUArgs,
+ UConverterToUnicodeArgs *pToUArgs,
+ UErrorCode *pErrorCode) {
+ UConverter *utf8, *cnv;
+ const uint8_t *source, *sourceLimit;
+ uint8_t *target;
+ int32_t targetCapacity;
+ int32_t count;
+
+ int8_t oldToULength, toULength, toULimit;
+
+ UChar32 c;
+ uint8_t b, t1, t2;
+
+ /* set up the local pointers */
+ utf8=pToUArgs->converter;
+ cnv=pFromUArgs->converter;
+ source=(uint8_t *)pToUArgs->source;
+ sourceLimit=(uint8_t *)pToUArgs->sourceLimit;
+ target=(uint8_t *)pFromUArgs->target;
+ targetCapacity=(int32_t)(pFromUArgs->targetLimit-pFromUArgs->target);
+
+ /* get the converter state from the UTF-8 UConverter */
+ c=(UChar32)utf8->toUnicodeStatus;
+ if(c!=0) {
+ toULength=oldToULength=utf8->toULength;
+ toULimit=(int8_t)utf8->mode;
+ } else {
+ toULength=oldToULength=toULimit=0;
+ }
+
+ count=(int32_t)(sourceLimit-source)+oldToULength;
+ if(counttargetCapacity) {
+ count=targetCapacity;
+ }
+
+ i=0;
+ while(i<3 && i<(count-toULimit)) {
+ b=source[count-oldToULength-i-1];
+ if(U8_IS_TRAIL(b)) {
+ ++i;
+ } else {
+ if(itoUnicodeStatus=0;
+ utf8->toULength=0;
+ goto moreBytes;
+ /* See note in ucnv_SBCSFromUTF8() about this goto. */
+ }
+
+ /* conversion loop */
+ while(count>0) {
+ b=*source++;
+ if((int8_t)b>=0) {
+ /* convert ASCII */
+ *target++=b;
+ --count;
+ continue;
+ } else {
+ if(b>0xe0) {
+ if( /* handle U+1000..U+D7FF inline */
+ (t1=source[0]) >= 0x80 && ((b<0xed && (t1 <= 0xbf)) ||
+ (b==0xed && (t1 <= 0x9f))) &&
+ (t2=source[1]) >= 0x80 && t2 <= 0xbf
+ ) {
+ source+=2;
+ *target++=b;
+ *target++=t1;
+ *target++=t2;
+ count-=3;
+ continue;
+ }
+ } else if(b<0xe0) {
+ if( /* handle U+0080..U+07FF inline */
+ b>=0xc2 &&
+ (t1=*source) >= 0x80 && t1 <= 0xbf
+ ) {
+ ++source;
+ *target++=b;
+ *target++=t1;
+ count-=2;
+ continue;
+ }
+ } else if(b==0xe0) {
+ if( /* handle U+0800..U+0FFF inline */
+ (t1=source[0]) >= 0xa0 && t1 <= 0xbf &&
+ (t2=source[1]) >= 0x80 && t2 <= 0xbf
+ ) {
+ source+=2;
+ *target++=b;
+ *target++=t1;
+ *target++=t2;
+ count-=3;
+ continue;
+ }
+ }
+
+ /* handle "complicated" and error cases, and continuing partial characters */
+ oldToULength=0;
+ toULength=1;
+ toULimit=utf8_countTrailBytes[b]+1;
+ c=b;
+moreBytes:
+ while(toULengthtoUBytes[oldToULength++]=*source++;
+ }
+ utf8->toUnicodeStatus=c;
+ utf8->toULength=toULength;
+ utf8->mode=toULimit;
+ pToUArgs->source=(char *)source;
+ pFromUArgs->target=(char *)target;
+ return;
+ }
+ }
+
+ if( toULength==toULimit && /* consumed all trail bytes */
+ (toULength==3 || toULength==2) && /* BMP */
+ (c-=utf8_offsets[toULength])>=utf8_minLegal[toULength] &&
+ (c<=0xd7ff || 0xe000<=c) /* not a surrogate */
+ ) {
+ /* legal byte sequence for BMP code point */
+ } else if(
+ toULength==toULimit && toULength==4 &&
+ (0x10000<=(c-=utf8_offsets[4]) && c<=0x10ffff)
+ ) {
+ /* legal byte sequence for supplementary code point */
+ } else {
+ /* error handling: illegal UTF-8 byte sequence */
+ source-=(toULength-oldToULength);
+ while(oldToULengthtoUBytes[oldToULength++]=*source++;
+ }
+ utf8->toULength=toULength;
+ pToUArgs->source=(char *)source;
+ pFromUArgs->target=(char *)target;
+ *pErrorCode=U_ILLEGAL_CHAR_FOUND;
+ return;
+ }
+
+ /* copy the legal byte sequence to the target */
+ {
+ int8_t i;
+
+ for(i=0; itoUBytes[i];
+ }
+ source-=(toULength-oldToULength);
+ for(; itargetLimit) {
+ *pErrorCode=U_BUFFER_OVERFLOW_ERROR;
+ } else {
+ b=*source;
+ toULimit=utf8_countTrailBytes[b]+1;
+ if(toULimit>(sourceLimit-source)) {
+ /* collect a truncated byte sequence */
+ toULength=0;
+ c=b;
+ for(;;) {
+ utf8->toUBytes[toULength++]=b;
+ if(++source==sourceLimit) {
+ /* partial byte sequence at end of source */
+ utf8->toUnicodeStatus=c;
+ utf8->toULength=toULength;
+ utf8->mode=toULimit;
+ break;
+ } else if(!U8_IS_TRAIL(b=*source)) {
+ /* lead byte in trail byte position */
+ utf8->toULength=toULength;
+ *pErrorCode=U_ILLEGAL_CHAR_FOUND;
+ break;
+ }
+ c=(c<<6)+b;
+ }
+ } else {
+ /* partial-sequence target overflow: fall back to the pivoting implementation */
+ *pErrorCode=U_USING_DEFAULT_WARNING;
+ }
+ }
+ }
+
+ /* write back the updated pointers */
+ pToUArgs->source=(char *)source;
+ pFromUArgs->target=(char *)target;
+}
+
/* UTF-8 converter data ----------------------------------------------------- */
static const UConverterImpl _UTF8Impl={
@@ -746,7 +1013,10 @@ static const UConverterImpl _UTF8Impl={
NULL,
NULL,
NULL,
- ucnv_getNonSurrogateUnicodeSet
+ ucnv_getNonSurrogateUnicodeSet,
+
+ ucnv_UTF8FromUTF8,
+ ucnv_UTF8FromUTF8
};
/* The 1208 CCSID refers to any version of Unicode of UTF-8 */
diff --git a/icuSources/common/ucnvhz.c b/icuSources/common/ucnvhz.c
index 4bab29b1..21c1ea3d 100644
--- a/icuSources/common/ucnvhz.c
+++ b/icuSources/common/ucnvhz.c
@@ -1,6 +1,6 @@
/*
**********************************************************************
-* Copyright (C) 2000-2006, 2008 International Business Machines
+* Copyright (C) 2000-2008, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
* file name: ucnvhz.c
@@ -73,7 +73,7 @@ _HZOpen(UConverter *cnv, const char *name,const char *locale,uint32_t options, U
cnv->extraInfo = uprv_malloc(sizeof(UConverterDataHZ));
if(cnv->extraInfo != NULL){
uprv_memset(cnv->extraInfo, 0, sizeof(UConverterDataHZ));
- ((UConverterDataHZ*)cnv->extraInfo)->gbConverter = ucnv_open("ibm-1386",errorCode);
+ ((UConverterDataHZ*)cnv->extraInfo)->gbConverter = ucnv_open("GBK",errorCode);
}
else {
*errorCode = U_MEMORY_ALLOCATION_ERROR;
@@ -132,6 +132,10 @@ _HZReset(UConverter *cnv, UConverterResetChoice choice){
* from-GB code '~}' ($7E7D) is outside the defined GB range.)
*
* Source: RFC 1842
+*
+* Note that the formal syntax in RFC 1842 is invalid. I assume that the
+* intended definition of single-byte-segment is as follows (pedberg):
+* single-byte-segment = single-byte-seq 1*single-byte-char
*/
@@ -147,79 +151,77 @@ UConverter_toUnicode_HZ_OFFSETS_LOGIC(UConverterToUnicodeArgs *args,
UConverterDataHZ* myData=(UConverterDataHZ*)(args->converter->extraInfo);
tempBuf[0]=0;
tempBuf[1]=0;
- if ((args->converter == NULL) || (args->targetLimit < args->target) || (mySourceLimit < args->source)){
+
+ /* Calling code already handles this situation. */
+ /*if ((args->converter == NULL) || (args->targetLimit < args->target) || (mySourceLimit < args->source)){
*err = U_ILLEGAL_ARGUMENT_ERROR;
return;
- }
+ }*/
while(mySource< mySourceLimit){
if(myTarget < args->targetLimit){
mySourceChar= (unsigned char) *mySource++;
-
+
if(args->converter->mode == UCNV_TILDE) {
/* second byte after ~ */
args->converter->mode=0;
switch(mySourceChar) {
- case 0x0A:
- /* no output for ~\n (line-continuation marker) */
- continue;
- case UCNV_TILDE:
- if(args->offsets) {
- args->offsets[myTarget - args->target]=(int32_t)(mySource - args->source - 2);
- }
- *(myTarget++)=(UChar)mySourceChar;
- myData->isEmptySegment = FALSE;
- continue;
- case UCNV_OPEN_BRACE:
- case UCNV_CLOSE_BRACE:
- myData->isStateDBCS = (mySourceChar == UCNV_OPEN_BRACE);
- if (myData->isEmptySegment) {
- myData->isEmptySegment = FALSE; /* we are handling it, reset to avoid future spurious errors */
- *err = U_PARSE_ERROR; /* temporary err to flag empty segment, will be reset to U_ILLEGAL_ESCAPE_SEQUENCE in _toUnicodeWithCallback */
- args->converter->toUBytes[0] = UCNV_TILDE;
- args->converter->toUBytes[1] = mySourceChar;
- args->converter->toULength = 2;
- args->target = myTarget;
- args->source = mySource;
- return;
- }
- myData->isEmptySegment = TRUE;
- continue;
- default:
- /* if the first byte is equal to TILDE and the trail byte
- * is not a valid byte then it is an error condition
- */
- /* old
- myData->isEmptySegment = FALSE;
- mySourceChar= (UChar)(((UCNV_TILDE+0x80) << 8) | ((mySourceChar & 0x00ff)+0x80));
- goto SAVE_STATE;
- */
- /*
- * Ticket 5691: consistent illegal sequences:
- * - We include at least the first byte in the illegal sequence.
- * - If any of the non-initial bytes could be the start of a character,
- * we stop the illegal sequence before the first one of those.
- */
- myData->isEmptySegment = FALSE; /* different error here, reset this to avoid spurious future error */
- *err = U_ILLEGAL_ESCAPE_SEQUENCE;
- args->converter->toUBytes[0] = UCNV_TILDE;
- if( myData->isStateDBCS ?
- (0x21 <= mySourceChar && mySourceChar <= 0x7e) :
- mySourceChar <= 0x7f
- ) {
- /* The current byte could be the start of a character: Back it out. */
- args->converter->toULength = 1;
- --mySource;
- } else {
- /* Include the current byte in the illegal sequence. */
- args->converter->toUBytes[1] = mySourceChar;
- args->converter->toULength = 2;
- }
- args->target = myTarget;
- args->source = mySource;
- return;
+ case 0x0A:
+ /* no output for ~\n (line-continuation marker) */
+ continue;
+ case UCNV_TILDE:
+ if(args->offsets) {
+ args->offsets[myTarget - args->target]=(int32_t)(mySource - args->source - 2);
+ }
+ *(myTarget++)=(UChar)mySourceChar;
+ myData->isEmptySegment = FALSE;
+ continue;
+ case UCNV_OPEN_BRACE:
+ case UCNV_CLOSE_BRACE:
+ myData->isStateDBCS = (mySourceChar == UCNV_OPEN_BRACE);
+ if (myData->isEmptySegment) {
+ myData->isEmptySegment = FALSE; /* we are handling it, reset to avoid future spurious errors */
+ *err = U_ILLEGAL_ESCAPE_SEQUENCE;
+ args->converter->toUCallbackReason = UCNV_IRREGULAR;
+ args->converter->toUBytes[0] = UCNV_TILDE;
+ args->converter->toUBytes[1] = mySourceChar;
+ args->converter->toULength = 2;
+ args->target = myTarget;
+ args->source = mySource;
+ return;
+ }
+ myData->isEmptySegment = TRUE;
+ continue;
+ default:
+ /* if the first byte is equal to TILDE and the trail byte
+ * is not a valid byte then it is an error condition
+ */
+ /*
+ * Ticket 5691: consistent illegal sequences:
+ * - We include at least the first byte in the illegal sequence.
+ * - If any of the non-initial bytes could be the start of a character,
+ * we stop the illegal sequence before the first one of those.
+ */
+ myData->isEmptySegment = FALSE; /* different error here, reset this to avoid spurious future error */
+ *err = U_ILLEGAL_ESCAPE_SEQUENCE;
+ args->converter->toUBytes[0] = UCNV_TILDE;
+ if( myData->isStateDBCS ?
+ (0x21 <= mySourceChar && mySourceChar <= 0x7e) :
+ mySourceChar <= 0x7f
+ ) {
+ /* The current byte could be the start of a character: Back it out. */
+ args->converter->toULength = 1;
+ --mySource;
+ } else {
+ /* Include the current byte in the illegal sequence. */
+ args->converter->toUBytes[1] = mySourceChar;
+ args->converter->toULength = 2;
+ }
+ args->target = myTarget;
+ args->source = mySource;
+ return;
}
} else if(myData->isStateDBCS) {
if(args->converter->toUnicodeStatus == 0x00){
@@ -235,14 +237,6 @@ UConverter_toUnicode_HZ_OFFSETS_LOGIC(UConverterToUnicodeArgs *args,
}
else{
/* trail byte */
- /* old
- tempBuf[0] = (char) (args->converter->toUnicodeStatus+0x80) ;
- tempBuf[1] = (char) (mySourceChar+0x80);
- mySourceChar= (UChar)(((args->converter->toUnicodeStatus+0x80) << 8) | ((mySourceChar & 0x00ff)+0x80));
- args->converter->toUnicodeStatus =0x00;
- targetUniChar = ucnv_MBCSSimpleGetNextUChar(myData->gbConverter->sharedData,
- tempBuf, 2, args->converter->useFallback);
- */
int leadIsOk, trailIsOk;
uint32_t leadByte = args->converter->toUnicodeStatus & 0xff;
targetUniChar = 0xffff;
@@ -305,8 +299,8 @@ UConverter_toUnicode_HZ_OFFSETS_LOGIC(UConverterToUnicodeArgs *args,
if(mySourceChar > 0xff){
args->converter->toUBytes[0] = (uint8_t)(mySourceChar >> 8);
args->converter->toUBytes[1] = (uint8_t)mySourceChar;
- args->converter->toULength=2;
- }
+ args->converter->toULength=2;
+ }
else{
args->converter->toUBytes[0] = (uint8_t)mySourceChar;
args->converter->toULength=1;
@@ -344,10 +338,11 @@ UConverter_fromUnicode_HZ_OFFSETS_LOGIC (UConverterFromUnicodeArgs * args,
int len =0;
const char* escSeq=NULL;
- if ((args->converter == NULL) || (args->targetLimit < myTarget) || (args->sourceLimit < args->source)){
+ /* Calling code already handles this situation. */
+ /*if ((args->converter == NULL) || (args->targetLimit < myTarget) || (args->sourceLimit < args->source)){
*err = U_ILLEGAL_ARGUMENT_ERROR;
return;
- }
+ }*/
if(args->converter->fromUChar32!=0 && myTargetIndex < targetLength) {
goto getTrail;
}
@@ -366,16 +361,21 @@ UConverter_fromUnicode_HZ_OFFSETS_LOGIC (UConverterFromUnicodeArgs * args,
escSeq = TILDE_ESCAPE;
CONCAT_ESCAPE_MACRO(args, myTargetIndex, targetLength, escSeq,err,len,mySourceIndex);
continue;
- }
- else{
+ } else if(mySourceChar <= 0x7f) {
+ length = 1;
+ targetUniChar = mySourceChar;
+ } else {
length= ucnv_MBCSFromUChar32(myConverterData->gbConverter->sharedData,
mySourceChar,&targetUniChar,args->converter->useFallback);
-
- }
- /* only DBCS or SBCS characters are expected*/
- /* DB haracters with high bit set to 1 are expected */
- if(length > 2 || length==0 ||(((targetUniChar & 0x8080) != 0x8080)&& length==2)){
- targetUniChar= missingCharMarker;
+ /* we can only use lead bytes 21..7D and trail bytes 21..7E */
+ if( length == 2 &&
+ (uint16_t)(targetUniChar - 0xa1a1) <= (0xfdfe - 0xa1a1) &&
+ (uint8_t)(targetUniChar - 0xa1) <= (0xfe - 0xa1)
+ ) {
+ targetUniChar -= 0x8080;
+ } else {
+ targetUniChar = missingCharMarker;
+ }
}
if (targetUniChar != missingCharMarker){
myConverterData->isTargetUCharDBCS = isTargetUCharDBCS = (UBool)(targetUniChar>0x00FF);
@@ -398,22 +398,22 @@ UConverter_fromUnicode_HZ_OFFSETS_LOGIC (UConverterFromUnicodeArgs * args,
if(isTargetUCharDBCS){
if( myTargetIndex > 8) -0x80);
+ myTarget[myTargetIndex++] =(char) (targetUniChar >> 8);
if(offsets){
*(offsets++) = mySourceIndex-1;
}
if(myTargetIndex < targetLength){
- myTarget[myTargetIndex++] =(char) ((targetUniChar & 0x00FF) -0x80);
+ myTarget[myTargetIndex++] =(char) targetUniChar;
if(offsets){
*(offsets++) = mySourceIndex-1;
}
}else{
- args->converter->charErrorBuffer[args->converter->charErrorBufferLength++] = (char) ((targetUniChar & 0x00FF) -0x80);
+ args->converter->charErrorBuffer[args->converter->charErrorBufferLength++] = (char) targetUniChar;
*err = U_BUFFER_OVERFLOW_ERROR;
}
}else{
- args->converter->charErrorBuffer[args->converter->charErrorBufferLength++] =(char) ((targetUniChar >> 8) -0x80);
- args->converter->charErrorBuffer[args->converter->charErrorBufferLength++] = (char) ((targetUniChar & 0x00FF) -0x80);
+ args->converter->charErrorBuffer[args->converter->charErrorBufferLength++] =(char) (targetUniChar >> 8);
+ args->converter->charErrorBuffer[args->converter->charErrorBufferLength++] = (char) targetUniChar;
*err = U_BUFFER_OVERFLOW_ERROR;
}
@@ -562,14 +562,14 @@ _HZ_GetUnicodeSet(const UConverter *cnv,
const USetAdder *sa,
UConverterUnicodeSet which,
UErrorCode *pErrorCode) {
- /* the tilde '~' is hardcoded in the converter */
- sa->add(sa->set, 0x7e);
+ /* HZ converts all of ASCII */
+ sa->addRange(sa->set, 0, 0x7f);
/* add all of the code points that the sub-converter handles */
- ((UConverterDataHZ*)cnv->extraInfo)->
- gbConverter->sharedData->impl->
- getUnicodeSet(((UConverterDataHZ*)cnv->extraInfo)->gbConverter,
- sa, which, pErrorCode);
+ ucnv_MBCSGetFilteredUnicodeSetForUnicode(
+ ((UConverterDataHZ*)cnv->extraInfo)->gbConverter->sharedData,
+ sa, which, UCNV_SET_FILTER_HZ,
+ pErrorCode);
}
static const UConverterImpl _HZImpl={
diff --git a/icuSources/common/ucnvisci.c b/icuSources/common/ucnvisci.c
index 84a2740f..d89f69f1 100644
--- a/icuSources/common/ucnvisci.c
+++ b/icuSources/common/ucnvisci.c
@@ -1,6 +1,6 @@
-/*
+/*
**********************************************************************
-* Copyright (C) 2000-2006, International Business Machines
+* Copyright (C) 2000-2008, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
* file name: ucnvisci.c
@@ -10,7 +10,7 @@
*
* created on: 2001JUN26
* created by: Ram Viswanadha
-*
+*
* Date Name Description
* 24/7/2001 Ram Added support for EXT character handling
*/
@@ -29,10 +29,10 @@
#define UCNV_OPTIONS_VERSION_MASK 0xf
#define NUKTA 0x093c
-#define HALANT 0x094d
+#define HALANT 0x094d
#define ZWNJ 0x200c /* Zero Width Non Joiner */
#define ZWJ 0x200d /* Zero width Joiner */
-#define INVALID_CHAR 0xffff
+#define INVALID_CHAR 0xffff
#define ATR 0xEF /* Attribute code */
#define EXT 0xF0 /* Extension code */
#define DANDA 0x0964
@@ -41,8 +41,9 @@
#define ISCII_HALANT 0xE8
#define ISCII_DANDA 0xEA
#define ISCII_INV 0xD9
+#define ISCII_VOWEL_SIGN_E 0xE0
#define INDIC_BLOCK_BEGIN 0x0900
-#define INDIC_BLOCK_END 0x0D7F
+#define INDIC_BLOCK_END 0x0D7F
#define INDIC_RANGE (INDIC_BLOCK_END - INDIC_BLOCK_BEGIN)
#define VOCALLIC_RR 0x0931
#define LF 0x0A
@@ -106,19 +107,21 @@ typedef enum{
ZERO =0x00
}MaskEnum;
+#define ISCII_CNV_PREFIX "ISCII,version="
+
typedef struct{
UChar contextCharToUnicode; /* previous Unicode codepoint for contextual analysis */
UChar contextCharFromUnicode; /* previous Unicode codepoint for contextual analysis */
- uint16_t defDeltaToUnicode; /* delta for switching to default state when DEF is encountered */
+ uint16_t defDeltaToUnicode; /* delta for switching to default state when DEF is encountered */
uint16_t currentDeltaFromUnicode;/* current delta in Indic block */
- uint16_t currentDeltaToUnicode; /* current delta in Indic block */
+ uint16_t currentDeltaToUnicode; /* current delta in Indic block */
MaskEnum currentMaskFromUnicode; /* mask for current state in toUnicode */
MaskEnum currentMaskToUnicode; /* mask for current state in toUnicode */
MaskEnum defMaskToUnicode; /* mask for default state in toUnicode */
UBool isFirstBuffer; /* boolean for fromUnicode to see if we need to announce the first script */
UBool resetToDefaultToUnicode; /* boolean for reseting to default delta and mask when a newline is encountered*/
- char name[30];
-}UConverterDataISCII;
+ char name[sizeof(ISCII_CNV_PREFIX) + 1];
+}UConverterDataISCII;
typedef struct LookupDataStruct
{
@@ -138,8 +141,8 @@ static const LookupDataStruct lookupInitialData[]={
{ KANNADA, KND_MASK, KND },
{ MALAYALAM, MLM_MASK, MLM }
};
-
-static void
+
+static void
_ISCIIOpen(UConverter *cnv, const char *name,const char *locale,uint32_t options, UErrorCode *errorCode){
cnv->extraInfo = uprv_malloc (sizeof (UConverterDataISCII));
@@ -157,11 +160,11 @@ _ISCIIOpen(UConverter *cnv, const char *name,const char *locale,uint32_t options
converterData->defDeltaToUnicode=
(uint16_t)(lookupInitialData[options & UCNV_OPTIONS_VERSION_MASK].uniLang * DELTA);
- converterData->currentMaskFromUnicode = converterData->currentMaskToUnicode =
+ converterData->currentMaskFromUnicode = converterData->currentMaskToUnicode =
converterData->defMaskToUnicode=lookupInitialData[options & UCNV_OPTIONS_VERSION_MASK].maskEnum;
-
+
converterData->isFirstBuffer=TRUE;
- uprv_strcpy(converterData->name,"ISCII,version=");
+ (void)uprv_strcpy(converterData->name, ISCII_CNV_PREFIX);
len = (int32_t)uprv_strlen(converterData->name);
converterData->name[len]= (char)((options & UCNV_OPTIONS_VERSION_MASK) + '0');
converterData->name[len+1]=0;
@@ -175,7 +178,7 @@ _ISCIIOpen(UConverter *cnv, const char *name,const char *locale,uint32_t options
*errorCode =U_MEMORY_ALLOCATION_ERROR;
}
}
-static void
+static void
_ISCIIClose(UConverter *cnv){
if(cnv->extraInfo!=NULL) {
if(!cnv->isExtraLocal) {
@@ -185,7 +188,7 @@ _ISCIIClose(UConverter *cnv){
}
}
-static const char*
+static const char*
_ISCIIgetName(const UConverter* cnv){
if(cnv->extraInfo){
UConverterDataISCII* myData= (UConverterDataISCII*)cnv->extraInfo;
@@ -194,7 +197,7 @@ _ISCIIgetName(const UConverter* cnv){
return NULL;
}
-static void
+static void
_ISCIIReset(UConverter *cnv, UConverterResetChoice choice){
UConverterDataISCII* data =(UConverterDataISCII *) (cnv->extraInfo);
if(choice<=UCNV_RESET_TO_UNICODE) {
@@ -205,7 +208,7 @@ _ISCIIReset(UConverter *cnv, UConverterResetChoice choice){
data->contextCharToUnicode=NO_CHAR_MARKER;
}
if(choice!=UCNV_RESET_TO_UNICODE) {
- cnv->fromUChar32=0x0000;
+ cnv->fromUChar32=0x0000;
data->contextCharFromUnicode=0x00;
data->currentMaskFromUnicode=data->defMaskToUnicode;
data->currentDeltaFromUnicode=data->defDeltaToUnicode;
@@ -214,19 +217,19 @@ _ISCIIReset(UConverter *cnv, UConverterResetChoice choice){
}
}
-/**
- * The values in validity table are indexed by the lower bits of Unicode
- * range 0x0900 - 0x09ff. The values have a structure like:
+/**
+ * The values in validity table are indexed by the lower bits of Unicode
+ * range 0x0900 - 0x09ff. The values have a structure like:
* ---------------------------------------------------------------
* | DEV | PNJ | GJR | ORI | BNG | TLG | MLM | TML |
- * | | | | | ASM | KND | | |
+ * | | | | | ASM | KND | | |
* ---------------------------------------------------------------
- * If a code point is valid in a particular script
+ * If a code point is valid in a particular script
* then that bit is turned on
- *
+ *
* Unicode does not distinguish between Bengali and Assamese so we use 1 bit for
* to represent these languages
- *
+ *
* Telugu and Kannada have same codepoints except for Vocallic_RR which we special case
* and combine and use 1 bit to represent these languages.
*
@@ -235,26 +238,27 @@ _ISCIIReset(UConverter *cnv, UConverterResetChoice choice){
*/
static const uint8_t validityTable[128] = {
-/* This state table is tool generated please donot edit unless you know exactly what you are doing */
+/* This state table is tool generated please do not edit unless you know exactly what you are doing */
+/* Note: This table was edited to mirror the Windows XP implementation */
/*ISCII:Valid:Unicode */
/*0xa0 : 0x00: 0x900 */ ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO ,
-/*0xa1 : 0xb8: 0x901 */ DEV_MASK + ZERO + GJR_MASK + ORI_MASK + BNG_MASK + ZERO + ZERO + ZERO ,
-/*0xa2 : 0xfe: 0x902 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO ,
-/*0xa3 : 0xbf: 0x903 */ DEV_MASK + ZERO + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
-/*0x00 : 0x00: 0x904 */ ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO ,
+/*0xa1 : 0xb8: 0x901 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + ZERO + ZERO + ZERO ,
+/*0xa2 : 0xfe: 0x902 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
+/*0xa3 : 0xbf: 0x903 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
+/*0x00 : 0x00: 0x904 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO ,
/*0xa4 : 0xff: 0x905 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
/*0xa5 : 0xff: 0x906 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
/*0xa6 : 0xff: 0x907 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
/*0xa7 : 0xff: 0x908 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
/*0xa8 : 0xff: 0x909 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
/*0xa9 : 0xff: 0x90a */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
-/*0xaa : 0xfe: 0x90b */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO ,
+/*0xaa : 0xfe: 0x90b */ DEV_MASK + ZERO + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO ,
/*0x00 : 0x00: 0x90c */ DEV_MASK + ZERO + ZERO + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO ,
-/*0xae : 0x80: 0x90d */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO ,
+/*0xae : 0x80: 0x90d */ DEV_MASK + ZERO + GJR_MASK + ZERO + ZERO + ZERO + ZERO + ZERO ,
/*0xab : 0x87: 0x90e */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + KND_MASK + MLM_MASK + TML_MASK ,
/*0xac : 0xff: 0x90f */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
/*0xad : 0xff: 0x910 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
-/*0xb2 : 0x80: 0x911 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO ,
+/*0xb2 : 0x80: 0x911 */ DEV_MASK + ZERO + GJR_MASK + ZERO + ZERO + ZERO + ZERO + ZERO ,
/*0xaf : 0x87: 0x912 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + KND_MASK + MLM_MASK + TML_MASK ,
/*0xb0 : 0xff: 0x913 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
/*0xb1 : 0xff: 0x914 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
@@ -283,21 +287,21 @@ static const uint8_t validityTable[128] = {
/*0xc9 : 0xfe: 0x92b */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO ,
/*0xca : 0xfe: 0x92c */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO ,
/*0xcb : 0xfe: 0x92d */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO ,
-/*0xcc : 0xfe: 0x92e */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO ,
+/*0xcc : 0xfe: 0x92e */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
/*0xcd : 0xff: 0x92f */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
/*0xcf : 0xff: 0x930 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
/*0xd0 : 0x87: 0x931 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + MLM_MASK + TML_MASK ,
/*0xd1 : 0xff: 0x932 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
-/*0xd2 : 0xb7: 0x933 */ DEV_MASK + ZERO + GJR_MASK + ORI_MASK + ZERO + KND_MASK + MLM_MASK + TML_MASK ,
+/*0xd2 : 0xb7: 0x933 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + ZERO + KND_MASK + MLM_MASK + TML_MASK ,
/*0xd3 : 0x83: 0x934 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + MLM_MASK + TML_MASK ,
-/*0xd4 : 0xff: 0x935 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
+/*0xd4 : 0xff: 0x935 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + ZERO + KND_MASK + MLM_MASK + TML_MASK ,
/*0xd5 : 0xfe: 0x936 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO ,
/*0xd6 : 0xbf: 0x937 */ DEV_MASK + ZERO + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
/*0xd7 : 0xff: 0x938 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
/*0xd8 : 0xff: 0x939 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
/*0x00 : 0x00: 0x93A */ ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO ,
/*0x00 : 0x00: 0x93B */ ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO ,
-/*0xe9 : 0xda: 0x93c */ DEV_MASK + PNJ_MASK + ZERO + ORI_MASK + BNG_MASK + ZERO + MLM_MASK + ZERO ,
+/*0xe9 : 0xda: 0x93c */ DEV_MASK + PNJ_MASK + ZERO + ORI_MASK + BNG_MASK + ZERO + ZERO + ZERO ,
/*0x00 : 0x00: 0x93d */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO ,
/*0xda : 0xff: 0x93e */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
/*0xdb : 0xff: 0x93f */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
@@ -305,12 +309,12 @@ static const uint8_t validityTable[128] = {
/*0xdd : 0xff: 0x941 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
/*0xde : 0xff: 0x942 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
/*0xdf : 0xbe: 0x943 */ DEV_MASK + ZERO + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO ,
-/*0x00 : 0x00: 0x944 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO ,
-/*0xe3 : 0x80: 0x945 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO ,
+/*0x00 : 0x00: 0x944 */ DEV_MASK + ZERO + GJR_MASK + ZERO + BNG_MASK + KND_MASK + ZERO + ZERO ,
+/*0xe3 : 0x80: 0x945 */ DEV_MASK + ZERO + GJR_MASK + ZERO + ZERO + ZERO + ZERO + ZERO ,
/*0xe0 : 0x87: 0x946 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + KND_MASK + MLM_MASK + TML_MASK ,
/*0xe1 : 0xff: 0x947 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
/*0xe2 : 0xff: 0x948 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
-/*0xe7 : 0x80: 0x949 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO ,
+/*0xe7 : 0x80: 0x949 */ DEV_MASK + ZERO + GJR_MASK + ZERO + ZERO + ZERO + ZERO + ZERO ,
/*0xe4 : 0x87: 0x94a */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + KND_MASK + MLM_MASK + TML_MASK ,
/*0xe5 : 0xff: 0x94b */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
/*0xe6 : 0xff: 0x94c */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
@@ -324,11 +328,11 @@ static const uint8_t validityTable[128] = {
/*0x00 : 0x00: 0x954 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO ,
/*0x00 : 0x00: 0x955 */ ZERO + ZERO + ZERO + ZERO + ZERO + KND_MASK + ZERO + ZERO ,
/*0x00 : 0x00: 0x956 */ ZERO + ZERO + ZERO + ORI_MASK + ZERO + KND_MASK + ZERO + ZERO ,
-/*0x00 : 0x00: 0x957 */ ZERO + ZERO + ZERO + ORI_MASK + ZERO + ZERO + MLM_MASK + ZERO ,
+/*0x00 : 0x00: 0x957 */ ZERO + ZERO + ZERO + ORI_MASK + BNG_MASK + ZERO + MLM_MASK + ZERO ,
/*0x00 : 0x00: 0x958 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO ,
/*0x00 : 0x00: 0x959 */ DEV_MASK + PNJ_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO ,
/*0x00 : 0x00: 0x95a */ DEV_MASK + PNJ_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO ,
-/*0x00 : 0x00: 0x95b */ DEV_MASK + PNJ_MASK + ZERO + ORI_MASK + ZERO + ZERO + ZERO + ZERO ,
+/*0x00 : 0x00: 0x95b */ DEV_MASK + PNJ_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO ,
/*0x00 : 0x00: 0x95c */ DEV_MASK + PNJ_MASK + ZERO + ZERO + BNG_MASK + ZERO + ZERO + ZERO ,
/*0x00 : 0x00: 0x95d */ DEV_MASK + ZERO + ZERO + ORI_MASK + BNG_MASK + ZERO + ZERO + ZERO ,
/*0x00 : 0x00: 0x95e */ DEV_MASK + PNJ_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO ,
@@ -337,8 +341,8 @@ static const uint8_t validityTable[128] = {
/*0x00 : 0x00: 0x961 */ DEV_MASK + ZERO + ZERO + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO ,
/*0x00 : 0x00: 0x962 */ DEV_MASK + ZERO + ZERO + ZERO + BNG_MASK + ZERO + ZERO + ZERO ,
/*0x00 : 0x00: 0x963 */ DEV_MASK + ZERO + ZERO + ZERO + BNG_MASK + ZERO + ZERO + ZERO ,
-/*0xea : 0xf8: 0x964 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + ZERO + ZERO + ZERO ,
-/*0xeaea : 0x00: 0x965*/ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + ZERO + ZERO + ZERO ,
+/*0xea : 0xf8: 0x964 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO ,
+/*0xeaea : 0x00: 0x965*/ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO ,
/*0xf1 : 0xff: 0x966 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
/*0xf2 : 0xff: 0x967 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
/*0xf3 : 0xff: 0x968 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
@@ -349,7 +353,7 @@ static const uint8_t validityTable[128] = {
/*0xf8 : 0xff: 0x96d */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
/*0xf9 : 0xff: 0x96e */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
/*0xfa : 0xff: 0x96f */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK ,
-/*0x00 : 0x80: 0x970 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO ,
+/*0x00 : 0x80: 0x970 */ DEV_MASK + PNJ_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO ,
/*
* The length of the array is 128 to provide values for 0x900..0x97f.
@@ -359,119 +363,119 @@ static const uint8_t validityTable[128] = {
/*0x00 : 0x00: 0x9yz */ ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO
};
-static const uint16_t fromUnicodeTable[128]={
- 0x00a0 ,/* 0x0900 */
- 0x00a1 ,/* 0x0901 */
- 0x00a2 ,/* 0x0902 */
- 0x00a3 ,/* 0x0903 */
- 0xFFFF ,/* 0x0904 */
- 0x00a4 ,/* 0x0905 */
- 0x00a5 ,/* 0x0906 */
- 0x00a6 ,/* 0x0907 */
- 0x00a7 ,/* 0x0908 */
- 0x00a8 ,/* 0x0909 */
- 0x00a9 ,/* 0x090a */
- 0x00aa ,/* 0x090b */
- 0xA6E9 ,/* 0x090c */
- 0x00ae ,/* 0x090d */
- 0x00ab ,/* 0x090e */
- 0x00ac ,/* 0x090f */
- 0x00ad ,/* 0x0910 */
- 0x00b2 ,/* 0x0911 */
- 0x00af ,/* 0x0912 */
- 0x00b0 ,/* 0x0913 */
- 0x00b1 ,/* 0x0914 */
- 0x00b3 ,/* 0x0915 */
- 0x00b4 ,/* 0x0916 */
- 0x00b5 ,/* 0x0917 */
- 0x00b6 ,/* 0x0918 */
- 0x00b7 ,/* 0x0919 */
- 0x00b8 ,/* 0x091a */
- 0x00b9 ,/* 0x091b */
- 0x00ba ,/* 0x091c */
- 0x00bb ,/* 0x091d */
- 0x00bc ,/* 0x091e */
- 0x00bd ,/* 0x091f */
- 0x00be ,/* 0x0920 */
- 0x00bf ,/* 0x0921 */
- 0x00c0 ,/* 0x0922 */
- 0x00c1 ,/* 0x0923 */
- 0x00c2 ,/* 0x0924 */
- 0x00c3 ,/* 0x0925 */
- 0x00c4 ,/* 0x0926 */
- 0x00c5 ,/* 0x0927 */
- 0x00c6 ,/* 0x0928 */
- 0x00c7 ,/* 0x0929 */
- 0x00c8 ,/* 0x092a */
- 0x00c9 ,/* 0x092b */
- 0x00ca ,/* 0x092c */
- 0x00cb ,/* 0x092d */
- 0x00cc ,/* 0x092e */
- 0x00cd ,/* 0x092f */
- 0x00cf ,/* 0x0930 */
- 0x00d0 ,/* 0x0931 */
- 0x00d1 ,/* 0x0932 */
- 0x00d2 ,/* 0x0933 */
- 0x00d3 ,/* 0x0934 */
- 0x00d4 ,/* 0x0935 */
- 0x00d5 ,/* 0x0936 */
- 0x00d6 ,/* 0x0937 */
- 0x00d7 ,/* 0x0938 */
- 0x00d8 ,/* 0x0939 */
- 0xFFFF ,/* 0x093A */
- 0xFFFF ,/* 0x093B */
- 0x00e9 ,/* 0x093c */
- 0xEAE9 ,/* 0x093d */
- 0x00da ,/* 0x093e */
- 0x00db ,/* 0x093f */
- 0x00dc ,/* 0x0940 */
- 0x00dd ,/* 0x0941 */
- 0x00de ,/* 0x0942 */
- 0x00df ,/* 0x0943 */
- 0xDFE9 ,/* 0x0944 */
- 0x00e3 ,/* 0x0945 */
- 0x00e0 ,/* 0x0946 */
- 0x00e1 ,/* 0x0947 */
- 0x00e2 ,/* 0x0948 */
- 0x00e7 ,/* 0x0949 */
- 0x00e4 ,/* 0x094a */
- 0x00e5 ,/* 0x094b */
- 0x00e6 ,/* 0x094c */
- 0x00e8 ,/* 0x094d */
- 0x00ec ,/* 0x094e */
- 0x00ed ,/* 0x094f */
+static const uint16_t fromUnicodeTable[128]={
+ 0x00a0 ,/* 0x0900 */
+ 0x00a1 ,/* 0x0901 */
+ 0x00a2 ,/* 0x0902 */
+ 0x00a3 ,/* 0x0903 */
+ 0xa4e0 ,/* 0x0904 */
+ 0x00a4 ,/* 0x0905 */
+ 0x00a5 ,/* 0x0906 */
+ 0x00a6 ,/* 0x0907 */
+ 0x00a7 ,/* 0x0908 */
+ 0x00a8 ,/* 0x0909 */
+ 0x00a9 ,/* 0x090a */
+ 0x00aa ,/* 0x090b */
+ 0xA6E9 ,/* 0x090c */
+ 0x00ae ,/* 0x090d */
+ 0x00ab ,/* 0x090e */
+ 0x00ac ,/* 0x090f */
+ 0x00ad ,/* 0x0910 */
+ 0x00b2 ,/* 0x0911 */
+ 0x00af ,/* 0x0912 */
+ 0x00b0 ,/* 0x0913 */
+ 0x00b1 ,/* 0x0914 */
+ 0x00b3 ,/* 0x0915 */
+ 0x00b4 ,/* 0x0916 */
+ 0x00b5 ,/* 0x0917 */
+ 0x00b6 ,/* 0x0918 */
+ 0x00b7 ,/* 0x0919 */
+ 0x00b8 ,/* 0x091a */
+ 0x00b9 ,/* 0x091b */
+ 0x00ba ,/* 0x091c */
+ 0x00bb ,/* 0x091d */
+ 0x00bc ,/* 0x091e */
+ 0x00bd ,/* 0x091f */
+ 0x00be ,/* 0x0920 */
+ 0x00bf ,/* 0x0921 */
+ 0x00c0 ,/* 0x0922 */
+ 0x00c1 ,/* 0x0923 */
+ 0x00c2 ,/* 0x0924 */
+ 0x00c3 ,/* 0x0925 */
+ 0x00c4 ,/* 0x0926 */
+ 0x00c5 ,/* 0x0927 */
+ 0x00c6 ,/* 0x0928 */
+ 0x00c7 ,/* 0x0929 */
+ 0x00c8 ,/* 0x092a */
+ 0x00c9 ,/* 0x092b */
+ 0x00ca ,/* 0x092c */
+ 0x00cb ,/* 0x092d */
+ 0x00cc ,/* 0x092e */
+ 0x00cd ,/* 0x092f */
+ 0x00cf ,/* 0x0930 */
+ 0x00d0 ,/* 0x0931 */
+ 0x00d1 ,/* 0x0932 */
+ 0x00d2 ,/* 0x0933 */
+ 0x00d3 ,/* 0x0934 */
+ 0x00d4 ,/* 0x0935 */
+ 0x00d5 ,/* 0x0936 */
+ 0x00d6 ,/* 0x0937 */
+ 0x00d7 ,/* 0x0938 */
+ 0x00d8 ,/* 0x0939 */
+ 0xFFFF ,/* 0x093A */
+ 0xFFFF ,/* 0x093B */
+ 0x00e9 ,/* 0x093c */
+ 0xEAE9 ,/* 0x093d */
+ 0x00da ,/* 0x093e */
+ 0x00db ,/* 0x093f */
+ 0x00dc ,/* 0x0940 */
+ 0x00dd ,/* 0x0941 */
+ 0x00de ,/* 0x0942 */
+ 0x00df ,/* 0x0943 */
+ 0xDFE9 ,/* 0x0944 */
+ 0x00e3 ,/* 0x0945 */
+ 0x00e0 ,/* 0x0946 */
+ 0x00e1 ,/* 0x0947 */
+ 0x00e2 ,/* 0x0948 */
+ 0x00e7 ,/* 0x0949 */
+ 0x00e4 ,/* 0x094a */
+ 0x00e5 ,/* 0x094b */
+ 0x00e6 ,/* 0x094c */
+ 0x00e8 ,/* 0x094d */
+ 0x00ec ,/* 0x094e */
+ 0x00ed ,/* 0x094f */
0xA1E9 ,/* 0x0950 */ /* OM Symbol */
- 0xFFFF ,/* 0x0951 */
- 0xF0B8 ,/* 0x0952 */
- 0xFFFF ,/* 0x0953 */
- 0xFFFF ,/* 0x0954 */
- 0xFFFF ,/* 0x0955 */
- 0xFFFF ,/* 0x0956 */
- 0xFFFF ,/* 0x0957 */
- 0xb3e9 ,/* 0x0958 */
- 0xb4e9 ,/* 0x0959 */
- 0xb5e9 ,/* 0x095a */
- 0xbae9 ,/* 0x095b */
- 0xbfe9 ,/* 0x095c */
- 0xC0E9 ,/* 0x095d */
- 0xc9e9 ,/* 0x095e */
- 0x00ce ,/* 0x095f */
- 0xAAe9 ,/* 0x0960 */
- 0xA7E9 ,/* 0x0961 */
- 0xDBE9 ,/* 0x0962 */
- 0xDCE9 ,/* 0x0963 */
- 0x00ea ,/* 0x0964 */
- 0xeaea ,/* 0x0965 */
- 0x00f1 ,/* 0x0966 */
- 0x00f2 ,/* 0x0967 */
- 0x00f3 ,/* 0x0968 */
- 0x00f4 ,/* 0x0969 */
- 0x00f5 ,/* 0x096a */
- 0x00f6 ,/* 0x096b */
- 0x00f7 ,/* 0x096c */
- 0x00f8 ,/* 0x096d */
- 0x00f9 ,/* 0x096e */
- 0x00fa ,/* 0x096f */
+ 0xFFFF ,/* 0x0951 */
+ 0xF0B8 ,/* 0x0952 */
+ 0xFFFF ,/* 0x0953 */
+ 0xFFFF ,/* 0x0954 */
+ 0xFFFF ,/* 0x0955 */
+ 0xFFFF ,/* 0x0956 */
+ 0xFFFF ,/* 0x0957 */
+ 0xb3e9 ,/* 0x0958 */
+ 0xb4e9 ,/* 0x0959 */
+ 0xb5e9 ,/* 0x095a */
+ 0xbae9 ,/* 0x095b */
+ 0xbfe9 ,/* 0x095c */
+ 0xC0E9 ,/* 0x095d */
+ 0xc9e9 ,/* 0x095e */
+ 0x00ce ,/* 0x095f */
+ 0xAAe9 ,/* 0x0960 */
+ 0xA7E9 ,/* 0x0961 */
+ 0xDBE9 ,/* 0x0962 */
+ 0xDCE9 ,/* 0x0963 */
+ 0x00ea ,/* 0x0964 */
+ 0xeaea ,/* 0x0965 */
+ 0x00f1 ,/* 0x0966 */
+ 0x00f2 ,/* 0x0967 */
+ 0x00f3 ,/* 0x0968 */
+ 0x00f4 ,/* 0x0969 */
+ 0x00f5 ,/* 0x096a */
+ 0x00f6 ,/* 0x096b */
+ 0x00f7 ,/* 0x096c */
+ 0x00f8 ,/* 0x096d */
+ 0x00f9 ,/* 0x096e */
+ 0x00fa ,/* 0x096f */
0xF0BF ,/* 0x0970 */
0xFFFF ,/* 0x0971 */
0xFFFF ,/* 0x0972 */
@@ -748,6 +752,11 @@ static const uint16_t toUnicodeTable[256]={
0xFFFF /* 0xff */
};
+static const uint16_t vowelSignESpecialCases[][2]={
+ { 2 /*length of array*/ , 0 },
+ { 0xA4 , 0x0904 },
+};
+
static const uint16_t nuktaSpecialCases[][2]={
{ 16 /*length of array*/ , 0 },
{ 0xA6 , 0x090c },
@@ -764,7 +773,7 @@ static const uint16_t nuktaSpecialCases[][2]={
{ 0xAA , 0x0960 },
{ 0xA7 , 0x0961 },
{ 0xDB , 0x0962 },
- { 0xDC , 0x0963 },
+ { 0xDC , 0x0963 },
};
#define WRITE_TO_TARGET_FROM_U(args,offsets,source,target,targetLimit,targetByteUnit,err){ \
@@ -800,16 +809,16 @@ static const uint16_t nuktaSpecialCases[][2]={
(uint8_t) (targetByteUnit); \
*err = U_BUFFER_OVERFLOW_ERROR; \
} \
-}
+}
/* Rules:
- * Explicit Halant :
+ * Explicit Halant :
* +
* Soft Halant :
- * +
+ * +
*/
-static void
+static void
UConverter_fromUnicode_ISCII_OFFSETS_LOGIC (UConverterFromUnicodeArgs * args,
UErrorCode * err){
const UChar *source = args->source;
@@ -832,13 +841,13 @@ UConverter_fromUnicode_ISCII_OFFSETS_LOGIC (UConverterFromUnicodeArgs * args,
converterData=(UConverterDataISCII*)args->converter->extraInfo;
newDelta=converterData->currentDeltaFromUnicode;
range = (uint16_t)(newDelta/DELTA);
-
+
if((sourceChar = args->converter->fromUChar32)!=0) {
goto getTrail;
}
/*writing the char to the output stream */
- while(source < sourceLimit){
+ while(source < sourceLimit){
targetByteUnit = missingCharMarker;
@@ -850,7 +859,7 @@ UConverter_fromUnicode_ISCII_OFFSETS_LOGIC (UConverterFromUnicodeArgs * args,
if(U_FAILURE(*err)){
break;
}
- if(sourceChar == LF){
+ if(sourceChar == LF){
targetByteUnit = ATR<<8;
targetByteUnit += (uint8_t) lookupInitialData[range].isciiLang;
args->converter->fromUnicodeStatus=sourceChar;
@@ -877,7 +886,7 @@ UConverter_fromUnicode_ISCII_OFFSETS_LOGIC (UConverterFromUnicodeArgs * args,
case ZWJ:
/* contextChar has HALANT */
if(converterData->contextCharFromUnicode){
- targetByteUnit = ISCII_NUKTA;
+ targetByteUnit = ISCII_NUKTA;
}else{
targetByteUnit =ISCII_INV;
}
@@ -886,12 +895,12 @@ UConverter_fromUnicode_ISCII_OFFSETS_LOGIC (UConverterFromUnicodeArgs * args,
default:
/* is the sourceChar in the INDIC_RANGE? */
if((uint16_t)(INDIC_BLOCK_END-sourceChar) <= INDIC_RANGE){
- /* Danda and Double Danda are valid in Northern scripts.. since Unicode
- * does not include these codepoints in all Northern scrips we need to
+ /* Danda and Double Danda are valid in Northern scripts.. since Unicode
+ * does not include these codepoints in all Northern scrips we need to
* filter them out
*/
if(sourceChar!= DANDA && sourceChar != DOUBLE_DANDA){
- /* find out to which block the souceChar belongs*/
+ /* find out to which block the souceChar belongs*/
range =(uint16_t)((sourceChar-INDIC_BLOCK_BEGIN)/DELTA);
newDelta =(uint16_t)(range*DELTA);
@@ -907,22 +916,22 @@ UConverter_fromUnicode_ISCII_OFFSETS_LOGIC (UConverterFromUnicodeArgs * args,
sourceChar -= converterData->currentDeltaFromUnicode ;
}
- /* get the target byte unit */
+ /* get the target byte unit */
targetByteUnit=fromUnicodeTable[(uint8_t)sourceChar];
-
+
/* is the code point valid in current script? */
if((validityTable[(uint8_t)sourceChar] & converterData->currentMaskFromUnicode)==0){
- /* Vocallic RR is assigne in ISCII Telugu and Unicode */
- if(converterData->currentDeltaFromUnicode!=(TELUGU_DELTA) && sourceChar!=VOCALLIC_RR){
+ /* Vocallic RR is assigned in ISCII Telugu and Unicode */
+ if(converterData->currentDeltaFromUnicode!=(TELUGU_DELTA) || sourceChar!=VOCALLIC_RR){
targetByteUnit=missingCharMarker;
}
}
-
+
if(deltaChanged){
- /* we are in a script block which is different than
- * previous sourceChar's script block write ATR and language codes
+ /* we are in a script block which is different than
+ * previous sourceChar's script block write ATR and language codes
*/
- uint16_t temp=0;
+ uint16_t temp=0;
temp =(uint16_t)(ATR<<8);
temp += (uint16_t)((uint8_t) lookupInitialData[range].isciiLang);
/* reset */
@@ -995,7 +1004,7 @@ getTrail:
args->target = (char*)target;
}
-static const int32_t lookupTable[][2]={
+static const uint16_t lookupTable[][2]={
{ ZERO, ZERO }, /*DEFALT*/
{ ZERO, ZERO }, /*ROMAN*/
{ DEVANAGARI, DEV_MASK },
@@ -1032,15 +1041,15 @@ static const int32_t lookupTable[][2]={
(UChar)targetUniChar; \
*err = U_BUFFER_OVERFLOW_ERROR; \
} \
-}
-
+}
+
#define GET_MAPPING(sourceChar,targetUniChar,data){ \
targetUniChar = toUnicodeTable[(sourceChar)] ; \
/* is the code point valid in current script? */ \
if(sourceChar> ASCII_END && \
(validityTable[(uint8_t)targetUniChar] & data->currentMaskToUnicode)==0){ \
/* Vocallic RR is assigne in ISCII Telugu and Unicode */ \
- if(data->currentDeltaToUnicode!=(TELUGU_DELTA) && \
+ if(data->currentDeltaToUnicode!=(TELUGU_DELTA) || \
targetUniChar!=VOCALLIC_RR){ \
targetUniChar=missingCharMarker; \
} \
@@ -1050,25 +1059,25 @@ static const int32_t lookupTable[][2]={
/***********
* Rules for ISCII to Unicode converter
* ISCII is stateful encoding. To convert ISCII bytes to Unicode,
- * which has both precomposed and decomposed forms characters
+ * which has both precomposed and decomposed forms characters
* pre-context and post-context need to be considered.
- *
+ *
* Post context
- * i) ATR : Attribute code is used to declare the font and script switching.
+ * i) ATR : Attribute code is used to declare the font and script switching.
* Currently we only switch scripts and font codes consumed without generating an error
- * ii) EXT : Extention code is used to declare switching to Sanskrit and for obscure,
+ * ii) EXT : Extention code is used to declare switching to Sanskrit and for obscure,
* obsolete characters
- * Pre context
+ * Pre context
* i) Halant: if preceeded by a halant then it is a explicit halant
- * ii) Nukta :
+ * ii) Nukta :
* a) if preceeded by a halant then it is a soft halant
* b) if preceeded by specific consonants and the ligatures have pre-composed
* characters in Unicode then convert to pre-composed characters
* iii) Danda: If Danda is preceeded by a Danda then convert to Double Danda
- *
+ *
*/
-static void
+static void
UConverter_toUnicode_ISCII_OFFSETS_LOGIC(UConverterToUnicodeArgs *args,
UErrorCode* err){
const char *source = ( char *) args->source;
@@ -1080,12 +1089,14 @@ UConverter_toUnicode_ISCII_OFFSETS_LOGIC(UConverterToUnicodeArgs *args,
UConverterDataISCII* data;
UChar32* toUnicodeStatus=NULL;
UChar* contextCharToUnicode = NULL;
+ UBool found;
+ int i;
if ((args->converter == NULL) || (target < args->target) || (source < args->source)){
*err = U_ILLEGAL_ARGUMENT_ERROR;
return;
}
-
+
data = (UConverterDataISCII*)(args->converter->extraInfo);
contextCharToUnicode = &data->contextCharToUnicode; /* contains previous ISCII codepoint visited */
toUnicodeStatus = (UChar32*)&args->converter->toUnicodeStatus;/* contains the mapping to Unicode of the above codepoint*/
@@ -1093,23 +1104,23 @@ UConverter_toUnicode_ISCII_OFFSETS_LOGIC(UConverterToUnicodeArgs *args,
while(sourcecurrentDeltaToUnicode =
+ data->currentDeltaToUnicode =
(uint16_t)(lookupTable[sourceChar & 0x0F][0] * DELTA);
- data->currentMaskToUnicode =
- (MaskEnum)lookupTable[sourceChar & 0x0F][1] ;
+ data->currentMaskToUnicode =
+ (MaskEnum)lookupTable[sourceChar & 0x0F][1];
}
else if(sourceChar==DEF){
/* switch back to default */
@@ -1127,8 +1138,8 @@ UConverter_toUnicode_ISCII_OFFSETS_LOGIC(UConverterToUnicodeArgs *args,
}
/* reset */
- *contextCharToUnicode=NO_CHAR_MARKER;
-
+ *contextCharToUnicode=NO_CHAR_MARKER;
+
continue;
}else if(*contextCharToUnicode==EXT){
@@ -1137,10 +1148,10 @@ UConverter_toUnicode_ISCII_OFFSETS_LOGIC(UConverterToUnicodeArgs *args,
/* We currently support only Anudatta and Devanagari abbreviation sign */
if(sourceChar==0xBF || sourceChar == 0xB8){
targetUniChar = (sourceChar==0xBF) ? DEV_ABBR_SIGN : DEV_ANUDATTA;
-
- /* find out if the mapping is valid in this state */
+
+ /* find out if the mapping is valid in this state */
if(validityTable[(uint8_t)targetUniChar] & data->currentMaskToUnicode){
-
+
*contextCharToUnicode= NO_CHAR_MARKER;
/* write to target */
@@ -1165,7 +1176,7 @@ UConverter_toUnicode_ISCII_OFFSETS_LOGIC(UConverterToUnicodeArgs *args,
}else{
targetUniChar = ZWJ;
}
-
+
/* write to target */
WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,(source-args->source -2),
targetUniChar,data->currentDeltaToUnicode,err);
@@ -1179,7 +1190,7 @@ UConverter_toUnicode_ISCII_OFFSETS_LOGIC(UConverterToUnicodeArgs *args,
case EXT: /*falls through*/
case ATR:
*contextCharToUnicode = (UChar)sourceChar;
-
+
if(*toUnicodeStatus != missingCharMarker){
WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,(source-args->source -2),
@@ -1217,7 +1228,30 @@ UConverter_toUnicode_ISCII_OFFSETS_LOGIC(UConverterToUnicodeArgs *args,
GET_MAPPING(sourceChar,targetUniChar,data);
*contextCharToUnicode = sourceChar;
break;
-
+
+ case ISCII_VOWEL_SIGN_E:
+ i=1;
+ found=FALSE;
+ for( ;icurrentMaskToUnicode){
+ /*targetUniChar += data->currentDeltaToUnicode ;*/
+ *contextCharToUnicode= NO_CHAR_MARKER;
+ *toUnicodeStatus = missingCharMarker;
+ break;
+ }
+ }
+ GET_MAPPING(sourceChar,targetUniChar,data);
+ *contextCharToUnicode = sourceChar;
+ break;
+
case ISCII_NUKTA:
/* handle soft halant */
if(*contextCharToUnicode == ISCII_HALANT){
@@ -1227,8 +1261,8 @@ UConverter_toUnicode_ISCII_OFFSETS_LOGIC(UConverterToUnicodeArgs *args,
break;
}else{
/* try to handle + ISCII_NUKTA special mappings */
- int i=1;
- UBool found =FALSE;
+ i=1;
+ found =FALSE;
for( ;icurrentMaskToUnicode){
+ /* find out if the mapping is valid in this state */
+ if(validityTable[(uint8_t)targetUniChar] & data->currentMaskToUnicode){
/*targetUniChar += data->currentDeltaToUnicode ;*/
*contextCharToUnicode= NO_CHAR_MARKER;
*toUnicodeStatus = missingCharMarker;
@@ -1253,7 +1287,7 @@ UConverter_toUnicode_ISCII_OFFSETS_LOGIC(UConverterToUnicodeArgs *args,
*contextCharToUnicode = sourceChar;
break;
}
-
+
if(*toUnicodeStatus != missingCharMarker){
/* write the previously mapped codepoint */
@@ -1272,8 +1306,8 @@ UConverter_toUnicode_ISCII_OFFSETS_LOGIC(UConverterToUnicodeArgs *args,
data->resetToDefaultToUnicode=FALSE;
}
}else{
-
- /* we reach here only if targetUniChar == missingCharMarker
+
+ /* we reach here only if targetUniChar == missingCharMarker
* so assign codes to reason and err
*/
*err = U_INVALID_CHAR_FOUND;
@@ -1325,10 +1359,10 @@ struct cloneISCIIStruct
};
-static UConverter *
-_ISCII_SafeClone(const UConverter *cnv,
- void *stackBuffer,
- int32_t *pBufferSize,
+static UConverter *
+_ISCII_SafeClone(const UConverter *cnv,
+ void *stackBuffer,
+ int32_t *pBufferSize,
UErrorCode *status)
{
struct cloneISCIIStruct * localClone;
@@ -1368,8 +1402,10 @@ _ISCIIGetUnicodeSet(const UConverter *cnv,
for (script = DEVANAGARI; script <= MALAYALAM; script++) {
mask = (uint8_t)(lookupInitialData[script].maskEnum);
for (idx = 0; idx < DELTA; idx++) {
- if (validityTable[idx] & mask) {
+ /* added check for TELUGU character */
+ if ((validityTable[idx] & mask) || (script==TELUGU && idx==0x31)) {
sa->add(sa->set, idx + (script * DELTA) + INDIC_BLOCK_BEGIN);
+
}
}
}
@@ -1382,20 +1418,20 @@ _ISCIIGetUnicodeSet(const UConverter *cnv,
static const UConverterImpl _ISCIIImpl={
UCNV_ISCII,
-
+
NULL,
NULL,
-
+
_ISCIIOpen,
_ISCIIClose,
_ISCIIReset,
-
+
UConverter_toUnicode_ISCII_OFFSETS_LOGIC,
UConverter_toUnicode_ISCII_OFFSETS_LOGIC,
UConverter_fromUnicode_ISCII_OFFSETS_LOGIC,
UConverter_fromUnicode_ISCII_OFFSETS_LOGIC,
NULL,
-
+
NULL,
_ISCIIgetName,
NULL,
@@ -1406,29 +1442,29 @@ static const UConverterImpl _ISCIIImpl={
static const UConverterStaticData _ISCIIStaticData={
sizeof(UConverterStaticData),
"ISCII",
- 0,
- UCNV_IBM,
- UCNV_ISCII,
- 1,
+ 0,
+ UCNV_IBM,
+ UCNV_ISCII,
+ 1,
4,
{ 0x1a, 0, 0, 0 },
0x1,
- FALSE,
+ FALSE,
FALSE,
0x0,
0x0,
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, /* reserved */
};
-
+
const UConverterSharedData _ISCIIData={
sizeof(UConverterSharedData),
~((uint32_t) 0),
- NULL,
- NULL,
- &_ISCIIStaticData,
- FALSE,
- &_ISCIIImpl,
+ NULL,
+ NULL,
+ &_ISCIIStaticData,
+ FALSE,
+ &_ISCIIImpl,
0
};
diff --git a/icuSources/common/ucnvlat1.c b/icuSources/common/ucnvlat1.c
index bbaece60..4e682dfd 100644
--- a/icuSources/common/ucnvlat1.c
+++ b/icuSources/common/ucnvlat1.c
@@ -1,6 +1,6 @@
/*
**********************************************************************
-* Copyright (C) 2000-2004, International Business Machines
+* Copyright (C) 2000-2007, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
* file name: ucnvlat1.cpp
@@ -22,9 +22,7 @@
#include "ucnv_cnv.h"
/* control optimizations according to the platform */
-#define LATIN1_UNROLL_TO_UNICODE 1
#define LATIN1_UNROLL_FROM_UNICODE 1
-#define ASCII_UNROLL_TO_UNICODE 1
/* ISO 8859-1 --------------------------------------------------------------- */
@@ -60,53 +58,39 @@ _Latin1ToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs,
length=targetCapacity;
}
-#if LATIN1_UNROLL_TO_UNICODE
- if(targetCapacity>=16) {
+ if(targetCapacity>=8) {
+ /* This loop is unrolled for speed and improved pipelining. */
int32_t count, loops;
- loops=count=targetCapacity>>4;
- length=targetCapacity&=0xf;
+ loops=count=targetCapacity>>3;
+ length=targetCapacity&=0x7;
do {
- *target++=*source++;
- *target++=*source++;
- *target++=*source++;
- *target++=*source++;
- *target++=*source++;
- *target++=*source++;
- *target++=*source++;
- *target++=*source++;
- *target++=*source++;
- *target++=*source++;
- *target++=*source++;
- *target++=*source++;
- *target++=*source++;
- *target++=*source++;
- *target++=*source++;
- *target++=*source++;
+ target[0]=source[0];
+ target[1]=source[1];
+ target[2]=source[2];
+ target[3]=source[3];
+ target[4]=source[4];
+ target[5]=source[5];
+ target[6]=source[6];
+ target[7]=source[7];
+ target+=8;
+ source+=8;
} while(--count>0);
if(offsets!=NULL) {
do {
- *offsets++=sourceIndex++;
- *offsets++=sourceIndex++;
- *offsets++=sourceIndex++;
- *offsets++=sourceIndex++;
- *offsets++=sourceIndex++;
- *offsets++=sourceIndex++;
- *offsets++=sourceIndex++;
- *offsets++=sourceIndex++;
- *offsets++=sourceIndex++;
- *offsets++=sourceIndex++;
- *offsets++=sourceIndex++;
- *offsets++=sourceIndex++;
- *offsets++=sourceIndex++;
- *offsets++=sourceIndex++;
- *offsets++=sourceIndex++;
- *offsets++=sourceIndex++;
+ offsets[0]=sourceIndex++;
+ offsets[1]=sourceIndex++;
+ offsets[2]=sourceIndex++;
+ offsets[3]=sourceIndex++;
+ offsets[4]=sourceIndex++;
+ offsets[5]=sourceIndex++;
+ offsets[6]=sourceIndex++;
+ offsets[7]=sourceIndex++;
+ offsets+=8;
} while(--loops>0);
}
}
-#endif
/* conversion loop */
while(targetCapacity>0) {
@@ -330,6 +314,105 @@ noMoreInput:
pArgs->offsets=offsets;
}
+/* Convert UTF-8 to Latin-1. Adapted from ucnv_SBCSFromUTF8(). */
+static void
+ucnv_Latin1FromUTF8(UConverterFromUnicodeArgs *pFromUArgs,
+ UConverterToUnicodeArgs *pToUArgs,
+ UErrorCode *pErrorCode) {
+ UConverter *utf8;
+ const uint8_t *source, *sourceLimit;
+ uint8_t *target;
+ int32_t targetCapacity;
+
+ UChar32 c;
+ uint8_t b, t1;
+
+ /* set up the local pointers */
+ utf8=pToUArgs->converter;
+ source=(uint8_t *)pToUArgs->source;
+ sourceLimit=(uint8_t *)pToUArgs->sourceLimit;
+ target=(uint8_t *)pFromUArgs->target;
+ targetCapacity=(int32_t)(pFromUArgs->targetLimit-pFromUArgs->target);
+
+ /* get the converter state from the UTF-8 UConverter */
+ c=(UChar32)utf8->toUnicodeStatus;
+ if(c!=0 && source=0xc2 && c<=0xc3 && (t1=(uint8_t)(*source-0x80)) <= 0x3f) {
+ ++source;
+ *target++=(uint8_t)(((c&3)<<6)|t1);
+ --targetCapacity;
+
+ utf8->toUnicodeStatus=0;
+ utf8->toULength=0;
+ } else {
+ /* complicated, illegal or unmappable input: fall back to the pivoting implementation */
+ *pErrorCode=U_USING_DEFAULT_WARNING;
+ return;
+ }
+ }
+
+ /*
+ * Make sure that the last byte sequence before sourceLimit is complete
+ * or runs into a lead byte.
+ * In the conversion loop compare source with sourceLimit only once
+ * per multi-byte character.
+ * For Latin-1, adjust sourceLimit only for 1 trail byte because
+ * the conversion loop handles at most 2-byte sequences.
+ */
+ if(source0) {
+ b=*source++;
+ if((int8_t)b>=0) {
+ /* convert ASCII */
+ *target++=(uint8_t)b;
+ --targetCapacity;
+ } else if( /* handle U+0080..U+00FF inline */
+ b>=0xc2 && b<=0xc3 &&
+ (t1=(uint8_t)(*source-0x80)) <= 0x3f
+ ) {
+ ++source;
+ *target++=(uint8_t)(((b&3)<<6)|t1);
+ --targetCapacity;
+ } else {
+ /* complicated, illegal or unmappable input: fall back to the pivoting implementation */
+ pToUArgs->source=(char *)(source-1);
+ pFromUArgs->target=(char *)target;
+ *pErrorCode=U_USING_DEFAULT_WARNING;
+ return;
+ }
+ } else {
+ /* target is full */
+ *pErrorCode=U_BUFFER_OVERFLOW_ERROR;
+ break;
+ }
+ }
+
+ /*
+ * The sourceLimit may have been adjusted before the conversion loop
+ * to stop before a truncated sequence.
+ * If so, then collect the truncated sequence now.
+ * For Latin-1, there is at most exactly one lead byte because of the
+ * smaller sourceLimit adjustment logic.
+ */
+ if(U_SUCCESS(*pErrorCode) && source<(sourceLimit=(uint8_t *)pToUArgs->sourceLimit)) {
+ utf8->toUnicodeStatus=utf8->toUBytes[0]=b=*source++;
+ utf8->toULength=1;
+ utf8->mode=utf8_countTrailBytes[b]+1;
+ }
+
+ /* write back the updated pointers */
+ pToUArgs->source=(char *)source;
+ pFromUArgs->target=(char *)target;
+}
+
static void
_Latin1GetUnicodeSet(const UConverter *cnv,
const USetAdder *sa,
@@ -358,7 +441,10 @@ static const UConverterImpl _Latin1Impl={
NULL,
NULL,
NULL,
- _Latin1GetUnicodeSet
+ _Latin1GetUnicodeSet,
+
+ NULL,
+ ucnv_Latin1FromUTF8
};
static const UConverterStaticData _Latin1StaticData={
@@ -411,66 +497,49 @@ _ASCIIToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs,
targetCapacity=length;
}
-#if ASCII_UNROLL_TO_UNICODE
- /* unroll the loop with the most common case */
- if(targetCapacity>=16) {
+ if(targetCapacity>=8) {
+ /* This loop is unrolled for speed and improved pipelining. */
int32_t count, loops;
UChar oredChars;
- loops=count=targetCapacity>>4;
+ loops=count=targetCapacity>>3;
do {
- oredChars=*target++=*source++;
- oredChars|=*target++=*source++;
- oredChars|=*target++=*source++;
- oredChars|=*target++=*source++;
- oredChars|=*target++=*source++;
- oredChars|=*target++=*source++;
- oredChars|=*target++=*source++;
- oredChars|=*target++=*source++;
- oredChars|=*target++=*source++;
- oredChars|=*target++=*source++;
- oredChars|=*target++=*source++;
- oredChars|=*target++=*source++;
- oredChars|=*target++=*source++;
- oredChars|=*target++=*source++;
- oredChars|=*target++=*source++;
- oredChars|=*target++=*source++;
+ oredChars=target[0]=source[0];
+ oredChars|=target[1]=source[1];
+ oredChars|=target[2]=source[2];
+ oredChars|=target[3]=source[3];
+ oredChars|=target[4]=source[4];
+ oredChars|=target[5]=source[5];
+ oredChars|=target[6]=source[6];
+ oredChars|=target[7]=source[7];
/* were all 16 entries really valid? */
if(oredChars>0x7f) {
/* no, return to the first of these 16 */
- source-=16;
- target-=16;
break;
}
+ source+=8;
+ target+=8;
} while(--count>0);
count=loops-count;
- targetCapacity-=16*count;
+ targetCapacity-=count*8;
if(offsets!=NULL) {
- oldTarget+=16*count;
+ oldTarget+=count*8;
while(count>0) {
- *offsets++=sourceIndex++;
- *offsets++=sourceIndex++;
- *offsets++=sourceIndex++;
- *offsets++=sourceIndex++;
- *offsets++=sourceIndex++;
- *offsets++=sourceIndex++;
- *offsets++=sourceIndex++;
- *offsets++=sourceIndex++;
- *offsets++=sourceIndex++;
- *offsets++=sourceIndex++;
- *offsets++=sourceIndex++;
- *offsets++=sourceIndex++;
- *offsets++=sourceIndex++;
- *offsets++=sourceIndex++;
- *offsets++=sourceIndex++;
- *offsets++=sourceIndex++;
+ offsets[0]=sourceIndex++;
+ offsets[1]=sourceIndex++;
+ offsets[2]=sourceIndex++;
+ offsets[3]=sourceIndex++;
+ offsets[4]=sourceIndex++;
+ offsets[5]=sourceIndex++;
+ offsets[6]=sourceIndex++;
+ offsets[7]=sourceIndex++;
+ offsets+=8;
--count;
}
}
}
-#endif
/* conversion loop */
c=0;
@@ -532,6 +601,95 @@ _ASCIIGetNextUChar(UConverterToUnicodeArgs *pArgs,
return 0xffff;
}
+/* "Convert" UTF-8 to US-ASCII: Validate and copy. */
+static void
+ucnv_ASCIIFromUTF8(UConverterFromUnicodeArgs *pFromUArgs,
+ UConverterToUnicodeArgs *pToUArgs,
+ UErrorCode *pErrorCode) {
+ const uint8_t *source, *sourceLimit;
+ uint8_t *target;
+ int32_t targetCapacity, length;
+
+ uint8_t c;
+
+ if(pToUArgs->converter->toUnicodeStatus!=0) {
+ /* no handling of partial UTF-8 characters here, fall back to pivoting */
+ *pErrorCode=U_USING_DEFAULT_WARNING;
+ return;
+ }
+
+ /* set up the local pointers */
+ source=(const uint8_t *)pToUArgs->source;
+ sourceLimit=(const uint8_t *)pToUArgs->sourceLimit;
+ target=(uint8_t *)pFromUArgs->target;
+ targetCapacity=(int32_t)(pFromUArgs->targetLimit-pFromUArgs->target);
+
+ /*
+ * since the conversion here is 1:1 uint8_t:uint8_t, we need only one counter
+ * for the minimum of the sourceLength and targetCapacity
+ */
+ length=(int32_t)(sourceLimit-source);
+ if(length=16) {
+ int32_t count, loops;
+ uint8_t oredChars;
+
+ loops=count=targetCapacity>>4;
+ do {
+ oredChars=*target++=*source++;
+ oredChars|=*target++=*source++;
+ oredChars|=*target++=*source++;
+ oredChars|=*target++=*source++;
+ oredChars|=*target++=*source++;
+ oredChars|=*target++=*source++;
+ oredChars|=*target++=*source++;
+ oredChars|=*target++=*source++;
+ oredChars|=*target++=*source++;
+ oredChars|=*target++=*source++;
+ oredChars|=*target++=*source++;
+ oredChars|=*target++=*source++;
+ oredChars|=*target++=*source++;
+ oredChars|=*target++=*source++;
+ oredChars|=*target++=*source++;
+ oredChars|=*target++=*source++;
+
+ /* were all 16 entries really valid? */
+ if(oredChars>0x7f) {
+ /* no, return to the first of these 16 */
+ source-=16;
+ target-=16;
+ break;
+ }
+ } while(--count>0);
+ count=loops-count;
+ targetCapacity-=16*count;
+ }
+
+ /* conversion loop */
+ c=0;
+ while(targetCapacity>0 && (c=*source)<=0x7f) {
+ ++source;
+ *target++=c;
+ --targetCapacity;
+ }
+
+ if(c>0x7f) {
+ /* non-ASCII character, handle in standard converter */
+ *pErrorCode=U_USING_DEFAULT_WARNING;
+ } else if(source=(const uint8_t *)pFromUArgs->targetLimit) {
+ /* target is full */
+ *pErrorCode=U_BUFFER_OVERFLOW_ERROR;
+ }
+
+ /* write back the updated pointers */
+ pToUArgs->source=(const char *)source;
+ pFromUArgs->target=(char *)target;
+}
+
static void
_ASCIIGetUnicodeSet(const UConverter *cnv,
const USetAdder *sa,
@@ -560,7 +718,10 @@ static const UConverterImpl _ASCIIImpl={
NULL,
NULL,
NULL,
- _ASCIIGetUnicodeSet
+ _ASCIIGetUnicodeSet,
+
+ NULL,
+ ucnv_ASCIIFromUTF8
};
static const UConverterStaticData _ASCIIStaticData={
diff --git a/icuSources/common/ucnvmbcs.c b/icuSources/common/ucnvmbcs.c
index 4be8e2dd..9b55c17d 100644
--- a/icuSources/common/ucnvmbcs.c
+++ b/icuSources/common/ucnvmbcs.c
@@ -1,7 +1,7 @@
/*
******************************************************************************
*
-* Copyright (C) 2000-2006,2008, International Business Machines
+* Copyright (C) 2000-2008, International Business Machines
* Corporation and others. All Rights Reserved.
*
******************************************************************************
@@ -61,9 +61,55 @@
#define MBCS_UNROLL_SINGLE_FROM_BMP 0
/*
- * _MBCSHeader versions 4.2
+ * _MBCSHeader versions 5.3 & 4.3
* (Note that the _MBCSHeader version is in addition to the converter formatVersion.)
*
+ * This version is optional. Version 5 is used for incompatible data format changes.
+ * makeconv will continue to generate version 4 files if possible.
+ *
+ * Changes from version 4:
+ *
+ * The main difference is an additional _MBCSHeader field with
+ * - the length (number of uint32_t) of the _MBCSHeader
+ * - flags for further incompatible data format changes
+ * - flags for further, backward compatible data format changes
+ *
+ * The MBCS_OPT_FROM_U flag indicates that most of the fromUnicode data is omitted from
+ * the file and needs to be reconstituted at load time.
+ * This requires a utf8Friendly format with an additional mbcsIndex table for fast
+ * (and UTF-8-friendly) fromUnicode conversion for Unicode code points up to maxFastUChar.
+ * (For details about these structures see below, and see ucnvmbcs.h.)
+ *
+ * utf8Friendly also implies that the fromUnicode mappings are stored in ascending order
+ * of the Unicode code points. (This requires that the .ucm file has the |0 etc.
+ * precision markers for all mappings.)
+ *
+ * All fallbacks have been moved to the extension table, leaving only roundtrips in the
+ * omitted data that can be reconstituted from the toUnicode data.
+ *
+ * Of the stage 2 table, the part corresponding to maxFastUChar and below is omitted.
+ * With only roundtrip mappings in the base fromUnicode data, this part is fully
+ * redundant with the mbcsIndex and will be reconstituted from that (also using the
+ * stage 1 table which contains the information about how stage 2 was compacted).
+ *
+ * The rest of the stage 2 table, the part for code points above maxFastUChar,
+ * is stored in the file and will be appended to the reconstituted part.
+ *
+ * The entire fromUBytes array is omitted from the file and will be reconstitued.
+ * This is done by enumerating all toUnicode roundtrip mappings, performing
+ * each mapping (using the stage 1 and reconstituted stage 2 tables) and
+ * writing instead of reading the byte values.
+ *
+ * _MBCSHeader version 4.3
+ *
+ * Change from version 4.2:
+ * - Optional utf8Friendly data structures, with 64-entry stage 3 block
+ * allocation for parts of the BMP, and an additional mbcsIndex in non-SBCS
+ * files which can be used instead of stages 1 & 2.
+ * Faster lookups for roundtrips from most commonly used characters,
+ * and lookups from UTF-8 byte sequences with a natural bit distribution.
+ * See ucnvmbcs.h for more details.
+ *
* Change from version 4.1:
* - Added an optional extension table structure at the end of the .cnv file.
* It is present if the upper bits of the header flags field contains a non-zero
@@ -232,7 +278,7 @@
* One trail byte state that results in code points, and one that only
* has "unassigned" and "illegal" terminal states.
*
- * Note: partly by accident, this data structure supports simple stateless
+ * Note: partly by accident, this data structure supports simple stateful
* encodings without any additional logic.
* Currently, only simple Shift-In/Shift-Out schemes are handled with
* appropriate state tables (especially EBCDIC_STATEFUL!).
@@ -269,6 +315,12 @@
* 0 unassigned
* Bits 7..0 contain the codepage byte. A zero byte is always possible.
*
+ * In version 4.3, the runtime code can build an sbcsIndex for a utf8Friendly
+ * file. For 2-byte UTF-8 byte sequences and some 3-byte sequences the lookup
+ * becomes a 2-stage (single-index) trie lookup with 6 bits for stage 3.
+ * ASCII code points can be looked up with a linear array access into stage 3.
+ * See maxFastUChar and other details in ucnvmbcs.h.
+ *
* Multi-byte lookup:
*
* Stage 2 contains a 32-bit word for each 16-block in stage 3:
@@ -289,6 +341,12 @@
* Note that stage 1 always contains 0x440=1088 entries (0x440==0x110000>>10),
* or (version 3 and up) for BMP-only codepages, it contains 64 entries.
*
+ * In version 4.3, a utf8Friendly file contains an mbcsIndex table.
+ * For 2-byte UTF-8 byte sequences and most 3-byte sequences the lookup
+ * becomes a 2-stage (single-index) trie lookup with 6 bits for stage 3.
+ * ASCII code points can be looked up with a linear array access into stage 3.
+ * See maxFastUChar, mbcsIndex and other details in ucnvmbcs.h.
+ *
* In version 3, stage 2 blocks may overlap by multiples of the multiplier
* for compaction.
* In version 4, stage 2 blocks (and for single-byte codepages, stage 3 blocks)
@@ -299,6 +357,8 @@
* adding new ones without crashing an unaware converter
*/
+static const UConverterImpl _SBCSUTF8Impl;
+static const UConverterImpl _DBCSUTF8Impl;
/* GB 18030 data ------------------------------------------------------------ */
@@ -340,103 +400,247 @@ gb18030Ranges[13][4]={
/* Miscellaneous ------------------------------------------------------------ */
+/**
+ * Callback from ucnv_MBCSEnumToUnicode(), takes 32 mappings from
+ * consecutive sequences of bytes, starting from the one encoded in value,
+ * to Unicode code points. (Multiple mappings to reduce per-function call overhead.)
+ * Does not currently support m:n mappings or reverse fallbacks.
+ * This function will not be called for sequences of bytes with leading zeros.
+ *
+ * @param context an opaque pointer, as passed into ucnv_MBCSEnumToUnicode()
+ * @param value contains 1..4 bytes of the first byte sequence, right-aligned
+ * @param codePoints resulting Unicode code points, or negative if a byte sequence does
+ * not map to anything
+ * @return TRUE to continue enumeration, FALSE to stop
+ */
+typedef UBool U_CALLCONV
+UConverterEnumToUCallback(const void *context, uint32_t value, UChar32 codePoints[32]);
+
/* similar to ucnv_MBCSGetNextUChar() but recursive */
-static void
-_getUnicodeSetForBytes(const UConverterSharedData *sharedData,
- const int32_t (*stateTable)[256], const uint16_t *unicodeCodeUnits,
- const USetAdder *sa,
- UConverterUnicodeSet which,
- uint8_t state, uint32_t offset, int32_t lowByte, int32_t highByte,
-
- UErrorCode *pErrorCode) {
- int32_t b, entry;
+static UBool
+enumToU(UConverterMBCSTable *mbcsTable, int8_t stateProps[],
+ int32_t state, uint32_t offset,
+ uint32_t value,
+ UConverterEnumToUCallback *callback, const void *context,
+ UErrorCode *pErrorCode) {
+ UChar32 codePoints[32];
+ const int32_t *row;
+ const uint16_t *unicodeCodeUnits;
+ UChar32 anyCodePoints;
+ int32_t b, limit;
+
+ row=mbcsTable->stateTable[state];
+ unicodeCodeUnits=mbcsTable->unicodeCodeUnits;
- for(b=lowByte; b<=highByte; ++b) {
- entry=stateTable[state][b];
+ value<<=8;
+ anyCodePoints=-1; /* becomes non-negative if there is a mapping */
+
+ b=(stateProps[state]&0x38)<<2;
+ if(b==0 && stateProps[state]>=0x40) {
+ /* skip byte sequences with leading zeros because they are not stored in the fromUnicode table */
+ codePoints[0]=U_SENTINEL;
+ b=1;
+ }
+ limit=((stateProps[state]&7)+1)<<5;
+ while(b=0) {
+ /* recurse to a state with non-ignorable actions */
+ if(!enumToU(
+ mbcsTable, stateProps, nextState,
+ offset+MBCS_ENTRY_TRANSITION_OFFSET(entry),
+ value|(uint32_t)b,
+ callback, context,
+ pErrorCode)) {
+ return FALSE;
+ }
+ }
+ codePoints[b&0x1f]=U_SENTINEL;
} else {
UChar32 c;
- int32_t rowOffset=offset;
- uint8_t action;
-
- c=U_SENTINEL;
+ int32_t action;
/*
* An if-else-if chain provides more reliable performance for
* the most common cases compared to a switch.
*/
- action=(uint8_t)(MBCS_ENTRY_FINAL_ACTION(entry));
+ action=MBCS_ENTRY_FINAL_ACTION(entry);
if(action==MBCS_STATE_VALID_DIRECT_16) {
/* output BMP code point */
c=(UChar)MBCS_ENTRY_FINAL_VALUE_16(entry);
} else if(action==MBCS_STATE_VALID_16) {
- offset+=MBCS_ENTRY_FINAL_VALUE_16(entry);
- c=unicodeCodeUnits[offset];
+ int32_t finalOffset=offset+MBCS_ENTRY_FINAL_VALUE_16(entry);
+ c=unicodeCodeUnits[finalOffset];
if(c<0xfffe) {
/* output BMP code point */
} else {
c=U_SENTINEL;
}
} else if(action==MBCS_STATE_VALID_16_PAIR) {
- offset+=MBCS_ENTRY_FINAL_VALUE_16(entry);
- c=unicodeCodeUnits[offset++];
+ int32_t finalOffset=offset+MBCS_ENTRY_FINAL_VALUE_16(entry);
+ c=unicodeCodeUnits[finalOffset++];
if(c<0xd800) {
/* output BMP code point below 0xd800 */
} else if(c<=0xdbff) {
/* output roundtrip or fallback supplementary code point */
- c=((c&0x3ff)<<10)+unicodeCodeUnits[offset]+(0x10000-0xdc00);
+ c=((c&0x3ff)<<10)+unicodeCodeUnits[finalOffset]+(0x10000-0xdc00);
} else if(c==0xe000) {
/* output roundtrip BMP code point above 0xd800 or fallback BMP code point */
- c=unicodeCodeUnits[offset];
+ c=unicodeCodeUnits[finalOffset];
} else {
c=U_SENTINEL;
}
} else if(action==MBCS_STATE_VALID_DIRECT_20) {
/* output supplementary code point */
c=(UChar32)(MBCS_ENTRY_FINAL_VALUE(entry)+0x10000);
+ } else {
+ c=U_SENTINEL;
+ }
+
+ codePoints[b&0x1f]=c;
+ anyCodePoints&=c;
+ }
+ if(((++b)&0x1f)==0) {
+ if(anyCodePoints>=0) {
+ if(!callback(context, value|(uint32_t)(b-0x20), codePoints)) {
+ return FALSE;
+ }
+ anyCodePoints=-1;
}
+ }
+ }
+ return TRUE;
+}
- if(c>=0) {
- sa->add(sa->set, c);
+/*
+ * Only called if stateProps[state]==-1.
+ * A recursive call may do stateProps[state]|=0x40 if this state is the target of an
+ * MBCS_STATE_CHANGE_ONLY.
+ */
+static int8_t
+getStateProp(const int32_t (*stateTable)[256], int8_t stateProps[], int state) {
+ const int32_t *row;
+ int32_t min, max, entry, nextState;
+
+ row=stateTable[state];
+ stateProps[state]=0;
+
+ /* find first non-ignorable state */
+ for(min=0;; ++min) {
+ entry=row[min];
+ nextState=MBCS_ENTRY_STATE(entry);
+ if(stateProps[nextState]==-1) {
+ getStateProp(stateTable, stateProps, nextState);
+ }
+ if(MBCS_ENTRY_IS_TRANSITION(entry)) {
+ if(stateProps[nextState]>=0) {
+ break;
+ }
+ } else if(MBCS_ENTRY_FINAL_ACTION(entry)>5)<<3);
+
+ /* find last non-ignorable state */
+ for(max=0xff; min=0) {
+ break;
+ }
+ } else if(MBCS_ENTRY_FINAL_ACTION(entry)>5);
+
+ /* recurse further and collect direct-state information */
+ while(min<=max) {
+ entry=row[min];
+ nextState=MBCS_ENTRY_STATE(entry);
+ if(stateProps[nextState]==-1) {
+ getStateProp(stateTable, stateProps, nextState);
+ }
+ if(MBCS_ENTRY_IS_FINAL(entry)) {
+ stateProps[nextState]|=0x40;
+ if(MBCS_ENTRY_FINAL_ACTION(entry)<=MBCS_STATE_FALLBACK_DIRECT_20) {
+ stateProps[state]|=0x40;
}
- offset=rowOffset;
}
+ ++min;
}
+ return stateProps[state];
}
/*
- * Internal function returning a UnicodeSet for toUnicode() conversion.
- * Currently only used for ISO-2022-CN, and only handles roundtrip mappings.
- * In the future, if we add support for reverse-fallback sets, this function
- * needs to be updated, and called for each initial state.
+ * Internal function enumerating the toUnicode data of an MBCS converter.
+ * Currently only used for reconstituting data for a MBCS_OPT_NO_FROM_U
+ * table, but could also be used for a future ucnv_getUnicodeSet() option
+ * that includes reverse fallbacks (after updating this function's implementation).
+ * Currently only handles roundtrip mappings.
* Does not currently handle extensions.
- * Does not empty the set first.
*/
-U_CFUNC void
-ucnv_MBCSGetUnicodeSetForBytes(const UConverterSharedData *sharedData,
- const USetAdder *sa,
- UConverterUnicodeSet which,
- uint8_t state, int32_t lowByte, int32_t highByte,
- UErrorCode *pErrorCode) {
- _getUnicodeSetForBytes(
- sharedData, sharedData->mbcs.stateTable, sharedData->mbcs.unicodeCodeUnits,
- sa, which,
- state, 0, lowByte, highByte,
- pErrorCode);
+static void
+ucnv_MBCSEnumToUnicode(UConverterMBCSTable *mbcsTable,
+ UConverterEnumToUCallback *callback, const void *context,
+ UErrorCode *pErrorCode) {
+ /*
+ * Properties for each state, to speed up the enumeration.
+ * Ignorable actions are unassigned/illegal/state-change-only:
+ * They do not lead to mappings.
+ *
+ * Bits 7..6:
+ * 1 direct/initial state (stateful converters have multiple)
+ * 0 non-initial state with transitions or with non-ignorable result actions
+ * -1 final state with only ignorable actions
+ *
+ * Bits 5..3:
+ * The lowest byte value with non-ignorable actions is
+ * value<<5 (rounded down).
+ *
+ * Bits 2..0:
+ * The highest byte value with non-ignorable actions is
+ * (value<<5)&0x1f (rounded up).
+ */
+ int8_t stateProps[MBCS_MAX_STATE_COUNT];
+ int32_t state;
+
+ uprv_memset(stateProps, -1, sizeof(stateProps));
+
+ /* recurse from state 0 and set all stateProps */
+ getStateProp(mbcsTable->stateTable, stateProps, 0);
+
+ for(state=0; statecountStates; ++state) {
+ /*if(stateProps[state]==-1) {
+ printf("unused/unreachable %d\n", state);
+ }*/
+ if(stateProps[state]>=0x40) {
+ /* start from each direct state */
+ enumToU(
+ mbcsTable, stateProps, state, 0, 0,
+ callback, context,
+ pErrorCode);
+ }
+ }
}
U_CFUNC void
-ucnv_MBCSGetUnicodeSetForUnicode(const UConverterSharedData *sharedData,
- const USetAdder *sa,
- UConverterUnicodeSet which,
- UErrorCode *pErrorCode) {
+ucnv_MBCSGetFilteredUnicodeSetForUnicode(const UConverterSharedData *sharedData,
+ const USetAdder *sa,
+ UConverterUnicodeSet which,
+ UConverterSetFilter filter,
+ UErrorCode *pErrorCode) {
const UConverterMBCSTable *mbcsTable;
const uint16_t *table;
@@ -458,9 +662,23 @@ ucnv_MBCSGetUnicodeSetForUnicode(const UConverterSharedData *sharedData,
if(mbcsTable->outputType==MBCS_OUTPUT_1) {
const uint16_t *stage2, *stage3, *results;
+ uint16_t minValue;
results=(const uint16_t *)mbcsTable->fromUnicodeBytes;
+ /*
+ * Set a threshold variable for selecting which mappings to use.
+ * See ucnv_MBCSSingleFromBMPWithOffsets() and
+ * MBCS_SINGLE_RESULT_FROM_U() for details.
+ */
+ if(which==UCNV_ROUNDTRIP_SET) {
+ /* use only roundtrips */
+ minValue=0xf00;
+ } else /* UCNV_ROUNDTRIP_AND_FALLBACK_SET */ {
+ /* use all roundtrip and fallback results */
+ minValue=0x800;
+ }
+
for(st1=0; st1maxStage1) {
@@ -470,15 +688,8 @@ ucnv_MBCSGetUnicodeSetForUnicode(const UConverterSharedData *sharedData,
/* read the stage 3 block */
stage3=results+st3;
- /*
- * Add code points for which the roundtrip flag is set.
- * Once we get a set for fallback mappings, we have to use
- * a threshold variable with a value of 0x800.
- * See ucnv_MBCSSingleFromBMPWithOffsets() and
- * MBCS_SINGLE_RESULT_FROM_U() for details.
- */
do {
- if(*stage3++>=0xf00) {
+ if(*stage3++>=minValue) {
sa->add(sa->set, c);
}
} while((++c&0xf)!=0);
@@ -490,50 +701,29 @@ ucnv_MBCSGetUnicodeSetForUnicode(const UConverterSharedData *sharedData,
c+=1024; /* empty stage 2 block */
}
}
- } else if(mbcsTable->outputType==MBCS_OUTPUT_DBCS_ONLY) {
- /* ignore single-byte results */
+ } else {
const uint32_t *stage2;
- const uint16_t *stage3, *results;
-
- results=(const uint16_t *)mbcsTable->fromUnicodeBytes;
+ const uint8_t *stage3, *bytes;
+ uint32_t st3Multiplier;
+ uint32_t value;
+ UBool useFallback;
- for(st1=0; st1(maxStage1>>1)) {
- stage2=(const uint32_t *)table+st2;
- for(st2=0; st2<64; ++st2) {
- if((st3=stage2[st2])!=0) {
- /* read the stage 3 block */
- stage3=results+16*(uint32_t)(uint16_t)st3;
+ bytes=mbcsTable->fromUnicodeBytes;
- /* get the roundtrip flags for the stage 3 block */
- st3>>=16;
+ useFallback=(UBool)(which==UCNV_ROUNDTRIP_AND_FALLBACK_SET);
- /*
- * Add code points for which the roundtrip flag is set.
- * Once we get a set for fallback mappings, we have to check
- * non-roundtrip stage 3 results for whether they are 0.
- * See ucnv_MBCSFromUnicodeWithOffsets() for details.
- *
- * Ignore single-byte results (<0x100).
- */
- do {
- if((st3&1)!=0 && *stage3>=0x100) {
- sa->add(sa->set, c);
- }
- st3>>=1;
- ++stage3;
- } while((++c&0xf)!=0);
- } else {
- c+=16; /* empty stage 3 block */
- }
- }
- } else {
- c+=1024; /* empty stage 2 block */
- }
+ switch(mbcsTable->outputType) {
+ case MBCS_OUTPUT_3:
+ case MBCS_OUTPUT_4_EUC:
+ st3Multiplier=3;
+ break;
+ case MBCS_OUTPUT_4:
+ st3Multiplier=4;
+ break;
+ default:
+ st3Multiplier=2;
+ break;
}
- } else {
- const uint32_t *stage2;
for(st1=0; st1>=16;
/*
- * Add code points for which the roundtrip flag is set.
- * Once we get a set for fallback mappings, we have to check
- * non-roundtrip stage 3 results for whether they are 0.
+ * Add code points for which the roundtrip flag is set,
+ * or which map to non-zero bytes if we use fallbacks.
* See ucnv_MBCSFromUnicodeWithOffsets() for details.
*/
- do {
- if(st3&1) {
- sa->add(sa->set, c);
- }
- st3>>=1;
- } while((++c&0xf)!=0);
+ switch(filter) {
+ case UCNV_SET_FILTER_NONE:
+ do {
+ if(st3&1) {
+ sa->add(sa->set, c);
+ stage3+=st3Multiplier;
+ } else if(useFallback) {
+ uint8_t b=0;
+ switch(st3Multiplier) {
+ case 4:
+ b|=*stage3++;
+ case 3:
+ b|=*stage3++;
+ case 2:
+ b|=stage3[0]|stage3[1];
+ stage3+=2;
+ default:
+ break;
+ }
+ if(b!=0) {
+ sa->add(sa->set, c);
+ }
+ }
+ st3>>=1;
+ } while((++c&0xf)!=0);
+ break;
+ case UCNV_SET_FILTER_DBCS_ONLY:
+ /* Ignore single-byte results (<0x100). */
+ do {
+ if(((st3&1)!=0 || useFallback) && *((const uint16_t *)stage3)>=0x100) {
+ sa->add(sa->set, c);
+ }
+ st3>>=1;
+ stage3+=2; /* +=st3Multiplier */
+ } while((++c&0xf)!=0);
+ break;
+ case UCNV_SET_FILTER_2022_CN:
+ /* Only add code points that map to CNS 11643 planes 1 & 2 for non-EXT ISO-2022-CN. */
+ do {
+ if(((st3&1)!=0 || useFallback) && ((value=*stage3)==0x81 || value==0x82)) {
+ sa->add(sa->set, c);
+ }
+ st3>>=1;
+ stage3+=3; /* +=st3Multiplier */
+ } while((++c&0xf)!=0);
+ break;
+ case UCNV_SET_FILTER_SJIS:
+ /* Only add code points that map to Shift-JIS codes corresponding to JIS X 0208. */
+ do {
+ if(((st3&1)!=0 || useFallback) && (value=*((const uint16_t *)stage3))>=0x8140 && value<=0xeffc) {
+ sa->add(sa->set, c);
+ }
+ st3>>=1;
+ stage3+=2; /* +=st3Multiplier */
+ } while((++c&0xf)!=0);
+ break;
+ case UCNV_SET_FILTER_GR94DBCS:
+ /* Only add code points that map to ISO 2022 GR 94 DBCS codes (each byte A1..FE). */
+ do {
+ if( ((st3&1)!=0 || useFallback) &&
+ (uint16_t)((value=*((const uint16_t *)stage3)) - 0xa1a1)<=(0xfefe - 0xa1a1) &&
+ (uint8_t)(value-0xa1)<=(0xfe - 0xa1)
+ ) {
+ sa->add(sa->set, c);
+ }
+ st3>>=1;
+ stage3+=2; /* +=st3Multiplier */
+ } while((++c&0xf)!=0);
+ break;
+ case UCNV_SET_FILTER_HZ:
+ /* Only add code points that are suitable for HZ DBCS (lead byte A1..FD). */
+ do {
+ if( ((st3&1)!=0 || useFallback) &&
+ (uint16_t)((value=*((const uint16_t *)stage3))-0xa1a1)<=(0xfdfe - 0xa1a1) &&
+ (uint8_t)(value-0xa1)<=(0xfe - 0xa1)
+ ) {
+ sa->add(sa->set, c);
+ }
+ st3>>=1;
+ stage3+=2; /* +=st3Multiplier */
+ } while((++c&0xf)!=0);
+ break;
+ default:
+ *pErrorCode=U_INTERNAL_PROGRAM_ERROR;
+ return;
+ }
} else {
c+=16; /* empty stage 3 block */
}
@@ -566,7 +838,20 @@ ucnv_MBCSGetUnicodeSetForUnicode(const UConverterSharedData *sharedData,
}
}
- ucnv_extGetUnicodeSet(sharedData, sa, which, pErrorCode);
+ ucnv_extGetUnicodeSet(sharedData, sa, which, filter, pErrorCode);
+}
+
+U_CFUNC void
+ucnv_MBCSGetUnicodeSetForUnicode(const UConverterSharedData *sharedData,
+ const USetAdder *sa,
+ UConverterUnicodeSet which,
+ UErrorCode *pErrorCode) {
+ ucnv_MBCSGetFilteredUnicodeSetForUnicode(
+ sharedData, sa, which,
+ sharedData->mbcs.outputType==MBCS_OUTPUT_DBCS_ONLY ?
+ UCNV_SET_FILTER_DBCS_ONLY :
+ UCNV_SET_FILTER_NONE,
+ pErrorCode);
}
static void
@@ -589,7 +874,7 @@ ucnv_MBCSGetUnicodeSet(const UConverter *cnv,
* Definition of LINEAR macros and gb18030Ranges see near the beginning of the file.
*
* In the future, conversion extensions may handle m:n mappings and delta tables,
- * see http://dev.icu-project.org/cgi-bin/viewcvs.cgi/~checkout~/icuhtml/design/conversion/conversion_extensions.html
+ * see http://source.icu-project.org/repos/icu/icuhtml/trunk/design/conversion/conversion_extensions.html
*
* If an input character cannot be mapped, then these functions set an error
* code. The framework will then call the callback function.
@@ -603,7 +888,7 @@ static UChar32
_extFromU(UConverter *cnv, const UConverterSharedData *sharedData,
UChar32 cp,
const UChar **source, const UChar *sourceLimit,
- char **target, const char *targetLimit,
+ uint8_t **target, const uint8_t *targetLimit,
int32_t **offsets, int32_t sourceIndex,
UBool flush,
UErrorCode *pErrorCode) {
@@ -615,7 +900,7 @@ _extFromU(UConverter *cnv, const UConverterSharedData *sharedData,
ucnv_extInitialMatchFromU(
cnv, cx,
cp, source, sourceLimit,
- target, targetLimit,
+ (char **)target, (char *)targetLimit,
offsets, sourceIndex,
flush,
pErrorCode)
@@ -649,7 +934,7 @@ _extFromU(UConverter *cnv, const UConverterSharedData *sharedData,
/* output this sequence */
ucnv_fromUWriteBytes(cnv,
- bytes, 4, target, targetLimit,
+ bytes, 4, (char **)target, (char *)targetLimit,
offsets, sourceIndex, pErrorCode);
return 0;
}
@@ -669,7 +954,7 @@ _extFromU(UConverter *cnv, const UConverterSharedData *sharedData,
static int8_t
_extToU(UConverter *cnv, const UConverterSharedData *sharedData,
int8_t length,
- const char **source, const char *sourceLimit,
+ const uint8_t **source, const uint8_t *sourceLimit,
UChar **target, const UChar *targetLimit,
int32_t **offsets, int32_t sourceIndex,
UBool flush,
@@ -679,7 +964,7 @@ _extToU(UConverter *cnv, const UConverterSharedData *sharedData,
if( (cx=sharedData->mbcs.extIndexes)!=NULL &&
ucnv_extInitialMatchToU(
cnv, cx,
- length, source, sourceLimit,
+ length, (const char **)source, (const char *)sourceLimit,
target, targetLimit,
offsets, sourceIndex,
flush,
@@ -898,6 +1183,156 @@ _EBCDICSwapLFNL(UConverterSharedData *sharedData, UErrorCode *pErrorCode) {
return TRUE;
}
+/* reconstitute omitted fromUnicode data ------------------------------------ */
+
+/* for details, compare with genmbcs.c MBCSAddFromUnicode() and transformEUC() */
+static UBool U_CALLCONV
+writeStage3Roundtrip(const void *context, uint32_t value, UChar32 codePoints[32]) {
+ UConverterMBCSTable *mbcsTable=(UConverterMBCSTable *)context;
+ const uint16_t *table;
+ uint32_t *stage2;
+ uint8_t *bytes, *p;
+ UChar32 c;
+ int32_t i, st3;
+
+ table=mbcsTable->fromUnicodeTable;
+ bytes=(uint8_t *)mbcsTable->fromUnicodeBytes;
+
+ /* for EUC outputTypes, modify the value like genmbcs.c's transformEUC() */
+ switch(mbcsTable->outputType) {
+ case MBCS_OUTPUT_3_EUC:
+ if(value<=0xffff) {
+ /* short sequences are stored directly */
+ /* code set 0 or 1 */
+ } else if(value<=0x8effff) {
+ /* code set 2 */
+ value&=0x7fff;
+ } else /* first byte is 0x8f */ {
+ /* code set 3 */
+ value&=0xff7f;
+ }
+ break;
+ case MBCS_OUTPUT_4_EUC:
+ if(value<=0xffffff) {
+ /* short sequences are stored directly */
+ /* code set 0 or 1 */
+ } else if(value<=0x8effffff) {
+ /* code set 2 */
+ value&=0x7fffff;
+ } else /* first byte is 0x8f */ {
+ /* code set 3 */
+ value&=0xff7fff;
+ }
+ break;
+ default:
+ break;
+ }
+
+ for(i=0; i<=0x1f; ++value, ++i) {
+ c=codePoints[i];
+ if(c<0) {
+ continue;
+ }
+
+ /* locate the stage 2 & 3 data */
+ stage2=((uint32_t *)table)+table[c>>10]+((c>>4)&0x3f);
+ p=bytes;
+ st3=(int32_t)(uint16_t)*stage2*16+(c&0xf);
+
+ /* write the codepage bytes into stage 3 */
+ switch(mbcsTable->outputType) {
+ case MBCS_OUTPUT_3:
+ case MBCS_OUTPUT_4_EUC:
+ p+=st3*3;
+ p[0]=(uint8_t)(value>>16);
+ p[1]=(uint8_t)(value>>8);
+ p[2]=(uint8_t)value;
+ break;
+ case MBCS_OUTPUT_4:
+ ((uint32_t *)p)[st3]=value;
+ break;
+ default:
+ /* 2 bytes per character */
+ ((uint16_t *)p)[st3]=(uint16_t)value;
+ break;
+ }
+
+ /* set the roundtrip flag */
+ *stage2|=(1UL<<(16+(c&0xf)));
+ }
+ return TRUE;
+ }
+
+static void
+reconstituteData(UConverterMBCSTable *mbcsTable,
+ uint32_t stage1Length, uint32_t stage2Length,
+ uint32_t fullStage2Length, /* lengths are numbers of units, not bytes */
+ UErrorCode *pErrorCode) {
+ uint16_t *stage1;
+ uint32_t *stage2;
+ uint8_t *bytes;
+ uint32_t dataLength=stage1Length*2+fullStage2Length*4+mbcsTable->fromUBytesLength;
+ mbcsTable->reconstitutedData=(uint8_t *)uprv_malloc(dataLength);
+ if(mbcsTable->reconstitutedData==NULL) {
+ *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ uprv_memset(mbcsTable->reconstitutedData, 0, dataLength);
+
+ /* copy existing data and reroute the pointers */
+ stage1=(uint16_t *)mbcsTable->reconstitutedData;
+ uprv_memcpy(stage1, mbcsTable->fromUnicodeTable, stage1Length*2);
+
+ stage2=(uint32_t *)(stage1+stage1Length);
+ uprv_memcpy(stage2+(fullStage2Length-stage2Length),
+ mbcsTable->fromUnicodeTable+stage1Length,
+ stage2Length*4);
+
+ mbcsTable->fromUnicodeTable=stage1;
+ mbcsTable->fromUnicodeBytes=bytes=(uint8_t *)(stage2+fullStage2Length);
+
+ /* indexes into stage 2 count from the bottom of the fromUnicodeTable */
+ stage2=(uint32_t *)stage1;
+
+ /* reconstitute the initial part of stage 2 from the mbcsIndex */
+ {
+ int32_t stageUTF8Length=((int32_t)mbcsTable->maxFastUChar+1)>>6;
+ int32_t stageUTF8Index=0;
+ int32_t st1, st2, st3, i;
+
+ for(st1=0; stageUTF8IndexmbcsIndex[stageUTF8Index++];
+ if(st3!=0) {
+ /* an stage 2 entry's index is per stage 3 16-block, not per stage 3 entry */
+ st3>>=4;
+ /*
+ * 4 stage 2 entries point to 4 consecutive stage 3 16-blocks which are
+ * allocated together as a single 64-block for access from the mbcsIndex
+ */
+ stage2[st2++]=st3++;
+ stage2[st2++]=st3++;
+ stage2[st2++]=st3++;
+ stage2[st2++]=st3;
+ } else {
+ /* no stage 3 block, skip */
+ st2+=4;
+ }
+ }
+ } else {
+ /* no stage 2 block, skip */
+ stageUTF8Index+=16;
+ }
+ }
+ }
+
+ /* reconstitute fromUnicodeBytes with roundtrips from toUnicode data */
+ ucnv_MBCSEnumToUnicode(mbcsTable, writeStage3Roundtrip, mbcsTable, pErrorCode);
+}
+
/* MBCS setup functions ----------------------------------------------------- */
static void
@@ -909,13 +1344,25 @@ ucnv_MBCSLoad(UConverterSharedData *sharedData,
UConverterMBCSTable *mbcsTable=&sharedData->mbcs;
_MBCSHeader *header=(_MBCSHeader *)raw;
uint32_t offset;
-
- if(header->version[0]!=4) {
+ uint32_t headerLength;
+ UBool noFromU=FALSE;
+
+ if(header->version[0]==4) {
+ headerLength=MBCS_HEADER_V4_LENGTH;
+ } else if(header->version[0]==5 && header->version[1]>=3 &&
+ (header->options&MBCS_OPT_UNKNOWN_INCOMPATIBLE_MASK)==0) {
+ headerLength=header->options&MBCS_OPT_LENGTH_MASK;
+ noFromU=(UBool)((header->options&MBCS_OPT_NO_FROM_U)!=0);
+ } else {
*pErrorCode=U_INVALID_TABLE_FORMAT;
return;
}
mbcsTable->outputType=(uint8_t)header->flags;
+ if(noFromU && mbcsTable->outputType==MBCS_OUTPUT_1) {
+ *pErrorCode=U_INVALID_TABLE_FORMAT;
+ return;
+ }
/* extension data, header version 4.2 and higher */
offset=header->flags>>8;
@@ -943,7 +1390,7 @@ ucnv_MBCSLoad(UConverterSharedData *sharedData,
}
/* load the base table */
- baseName=(const char *)(header+1);
+ baseName=(const char *)header+headerLength*4;
if(0==uprv_strcmp(baseName, sharedData->staticData->name)) {
/* forbid loading this same extension-only file */
*pErrorCode=U_INVALID_TABLE_FORMAT;
@@ -987,6 +1434,12 @@ ucnv_MBCSLoad(UConverterSharedData *sharedData,
mbcsTable->swapLFNLFromUnicodeBytes=NULL;
mbcsTable->swapLFNLName=NULL;
+ /*
+ * The reconstitutedData must be deleted only when the base converter
+ * is unloaded.
+ */
+ mbcsTable->reconstitutedData=NULL;
+
/*
* Set a special, runtime-only outputType if the extension converter
* is a DBCS version of a base converter that also maps single bytes.
@@ -1079,7 +1532,7 @@ ucnv_MBCSLoad(UConverterSharedData *sharedData,
mbcsTable->countStates=(uint8_t)header->countStates;
mbcsTable->countToUFallbacks=header->countToUFallbacks;
- mbcsTable->stateTable=(const int32_t (*)[256])(raw+sizeof(_MBCSHeader));
+ mbcsTable->stateTable=(const int32_t (*)[256])(raw+headerLength*4);
mbcsTable->toUFallbacks=(const _MBCSToUFallback *)(mbcsTable->stateTable+header->countStates);
mbcsTable->unicodeCodeUnits=(const uint16_t *)(raw+header->offsetToUCodeUnits);
@@ -1100,6 +1553,90 @@ ucnv_MBCSLoad(UConverterSharedData *sharedData,
/* for older versions, assume worst case: contains anything possible (prevent over-optimizations) */
mbcsTable->unicodeMask=UCNV_HAS_SUPPLEMENTARY|UCNV_HAS_SURROGATES;
}
+
+ /*
+ * _MBCSHeader.version 4.3 adds utf8Friendly data structures.
+ * Check for the header version, SBCS vs. MBCS, and for whether the
+ * data structures are optimized for code points as high as what the
+ * runtime code is designed for.
+ * The implementation does not handle mapping tables with entries for
+ * unpaired surrogates.
+ */
+ if( header->version[1]>=3 &&
+ (mbcsTable->unicodeMask&UCNV_HAS_SURROGATES)==0 &&
+ (mbcsTable->countStates==1 ?
+ (header->version[2]>=(SBCS_FAST_MAX>>8)) :
+ (header->version[2]>=(MBCS_FAST_MAX>>8))
+ )
+ ) {
+ mbcsTable->utf8Friendly=TRUE;
+
+ if(mbcsTable->countStates==1) {
+ /*
+ * SBCS: Stage 3 is allocated in 64-entry blocks for U+0000..SBCS_FAST_MAX or higher.
+ * Build a table with indexes to each block, to be used instead of
+ * the regular stage 1/2 table.
+ */
+ int32_t i;
+ for(i=0; i<(SBCS_FAST_LIMIT>>6); ++i) {
+ mbcsTable->sbcsIndex[i]=mbcsTable->fromUnicodeTable[mbcsTable->fromUnicodeTable[i>>4]+((i<<2)&0x3c)];
+ }
+ /* set SBCS_FAST_MAX to reflect the reach of sbcsIndex[] even if header->version[2]>(SBCS_FAST_MAX>>8) */
+ mbcsTable->maxFastUChar=SBCS_FAST_MAX;
+ } else {
+ /*
+ * MBCS: Stage 3 is allocated in 64-entry blocks for U+0000..MBCS_FAST_MAX or higher.
+ * The .cnv file is prebuilt with an additional stage table with indexes
+ * to each block.
+ */
+ mbcsTable->mbcsIndex=(const uint16_t *)
+ (mbcsTable->fromUnicodeBytes+
+ (noFromU ? 0 : mbcsTable->fromUBytesLength));
+ mbcsTable->maxFastUChar=(((UChar)header->version[2])<<8)|0xff;
+ }
+ }
+
+ /* calculate a bit set of 4 ASCII characters per bit that round-trip to ASCII bytes */
+ {
+ uint32_t asciiRoundtrips=0xffffffff;
+ int32_t i;
+
+ for(i=0; i<0x80; ++i) {
+ if(mbcsTable->stateTable[0][i]!=MBCS_ENTRY_FINAL(0, MBCS_STATE_VALID_DIRECT_16, i)) {
+ asciiRoundtrips&=~((uint32_t)1<<(i>>2));
+ }
+ }
+ mbcsTable->asciiRoundtrips=asciiRoundtrips;
+ }
+
+ if(noFromU) {
+ uint32_t stage1Length=
+ mbcsTable->unicodeMask&UCNV_HAS_SUPPLEMENTARY ?
+ 0x440 : 0x40;
+ uint32_t stage2Length=
+ (header->offsetFromUBytes-header->offsetFromUTable)/4-
+ stage1Length/2;
+ reconstituteData(mbcsTable, stage1Length, stage2Length, header->fullStage2Length, pErrorCode);
+ }
+ }
+
+ /* Set the impl pointer here so that it is set for both extension-only and base tables. */
+ if(mbcsTable->utf8Friendly) {
+ if(mbcsTable->countStates==1) {
+ sharedData->impl=&_SBCSUTF8Impl;
+ } else {
+ if(mbcsTable->outputType==MBCS_OUTPUT_2) {
+ sharedData->impl=&_DBCSUTF8Impl;
+ }
+ }
+ }
+
+ if(mbcsTable->outputType==MBCS_OUTPUT_DBCS_ONLY || mbcsTable->outputType==MBCS_OUTPUT_2_SISO) {
+ /*
+ * MBCS_OUTPUT_DBCS_ONLY: No SBCS mappings, therefore ASCII does not roundtrip.
+ * MBCS_OUTPUT_2_SISO: Bypass the ASCII fastpath to handle prevLength correctly.
+ */
+ mbcsTable->asciiRoundtrips=0;
}
}
@@ -1116,6 +1653,9 @@ ucnv_MBCSUnload(UConverterSharedData *sharedData) {
if(mbcsTable->baseSharedData!=NULL) {
ucnv_unload(mbcsTable->baseSharedData);
}
+ if(mbcsTable->reconstitutedData!=NULL) {
+ uprv_free(mbcsTable->reconstitutedData);
+ }
}
static void
@@ -1364,7 +1904,7 @@ ucnv_MBCSSingleToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs,
pArgs->source=(const char *)source;
cnv->toUBytes[0]=*(source-1);
cnv->toULength=_extToU(cnv, cnv->sharedData,
- 1, (const char **)&source, (const char *)sourceLimit,
+ 1, &source, sourceLimit,
&target, targetLimit,
&offsets, sourceIndex,
pArgs->flush,
@@ -1565,8 +2105,8 @@ unrolled:
lastSource=source;
cnv->toUBytes[0]=*(source-1);
cnv->toULength=_extToU(cnv, cnv->sharedData,
- 1, (const char **)&source, (const char *)sourceLimit,
- &target, target+targetCapacity,
+ 1, &source, sourceLimit,
+ &target, pArgs->targetLimit,
&offsets, sourceIndex,
pArgs->flush,
pErrorCode);
@@ -2058,7 +2598,7 @@ ucnv_MBCSToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs,
/* try an extension mapping */
pArgs->source=(const char *)source;
byteIndex=_extToU(cnv, cnv->sharedData,
- byteIndex, (const char **)&source, (const char *)sourceLimit,
+ byteIndex, &source, sourceLimit,
&target, targetLimit,
&offsets, sourceIndex,
pArgs->flush,
@@ -2621,6 +3161,7 @@ ucnv_MBCSDoubleFromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs,
int32_t *offsets;
const uint16_t *table;
+ const uint16_t *mbcsIndex;
const uint8_t *bytes;
UChar32 c;
@@ -2628,8 +3169,8 @@ ucnv_MBCSDoubleFromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs,
int32_t sourceIndex, nextSourceIndex;
uint32_t stage2Entry;
+ uint32_t asciiRoundtrips;
uint32_t value;
- int32_t length;
uint8_t unicodeMask;
/* use optimized function if possible */
@@ -2644,11 +3185,13 @@ ucnv_MBCSDoubleFromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs,
offsets=pArgs->offsets;
table=cnv->sharedData->mbcs.fromUnicodeTable;
+ mbcsIndex=cnv->sharedData->mbcs.mbcsIndex;
if((cnv->options&UCNV_OPTION_SWAP_LFNL)!=0) {
bytes=cnv->sharedData->mbcs.swapLFNLFromUnicodeBytes;
} else {
bytes=cnv->sharedData->mbcs.fromUnicodeBytes;
}
+ asciiRoundtrips=cnv->sharedData->mbcs.asciiRoundtrips;
/* get the converter state from UConverter */
c=cnv->fromUChar32;
@@ -2679,97 +3222,116 @@ ucnv_MBCSDoubleFromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs,
*/
c=*source++;
++nextSourceIndex;
+ if(c<=0x7f && IS_ASCII_ROUNDTRIP(c, asciiRoundtrips)) {
+ *target++=(uint8_t)c;
+ if(offsets!=NULL) {
+ *offsets++=sourceIndex;
+ sourceIndex=nextSourceIndex;
+ }
+ --targetCapacity;
+ c=0;
+ continue;
+ }
/*
- * This also tests if the codepage maps single surrogates.
- * If it does, then surrogates are not paired but mapped separately.
- * Note that in this case unmatched surrogates are not detected.
+ * utf8Friendly table: Test for <=0xd7ff rather than <=MBCS_FAST_MAX
+ * to avoid dealing with surrogates.
+ * MBCS_FAST_MAX must be >=0xd7ff.
*/
- if(UTF_IS_SURROGATE(c) && !(unicodeMask&UCNV_HAS_SURROGATES)) {
- if(UTF_IS_SURROGATE_FIRST(c)) {
+ if(c<=0xd7ff) {
+ value=DBCS_RESULT_FROM_MOST_BMP(mbcsIndex, (const uint16_t *)bytes, c);
+ /* There are only roundtrips (!=0) and no-mapping (==0) entries. */
+ if(value==0) {
+ goto unassigned;
+ }
+ /* output the value */
+ } else {
+ /*
+ * This also tests if the codepage maps single surrogates.
+ * If it does, then surrogates are not paired but mapped separately.
+ * Note that in this case unmatched surrogates are not detected.
+ */
+ if(UTF_IS_SURROGATE(c) && !(unicodeMask&UCNV_HAS_SURROGATES)) {
+ if(UTF_IS_SURROGATE_FIRST(c)) {
getTrail:
- if(sourcesource=source;
- c=_extFromU(cnv, cnv->sharedData,
- c, &source, sourceLimit,
- (char **)&target, (char *)target+targetCapacity,
- &offsets, sourceIndex,
- pArgs->flush,
- pErrorCode);
- nextSourceIndex+=(int32_t)(source-pArgs->source);
-
- if(U_FAILURE(*pErrorCode)) {
- /* not mappable or buffer overflow */
- break;
- } else {
- /* a mapping was written to the target, continue */
+ /* try an extension mapping */
+ pArgs->source=source;
+ c=_extFromU(cnv, cnv->sharedData,
+ c, &source, sourceLimit,
+ &target, target+targetCapacity,
+ &offsets, sourceIndex,
+ pArgs->flush,
+ pErrorCode);
+ nextSourceIndex+=(int32_t)(source-pArgs->source);
+
+ if(U_FAILURE(*pErrorCode)) {
+ /* not mappable or buffer overflow */
+ break;
+ } else {
+ /* a mapping was written to the target, continue */
- /* recalculate the targetCapacity after an extension mapping */
- targetCapacity=(int32_t)(pArgs->targetLimit-(char *)target);
+ /* recalculate the targetCapacity after an extension mapping */
+ targetCapacity=(int32_t)(pArgs->targetLimit-(char *)target);
- /* normal end of conversion: prepare for a new character */
- sourceIndex=nextSourceIndex;
- continue;
+ /* normal end of conversion: prepare for a new character */
+ sourceIndex=nextSourceIndex;
+ continue;
+ }
}
}
/* write the output character bytes from value and length */
/* from the first if in the loop we know that targetCapacity>0 */
- if(length==1) {
+ if(value<=0xff) {
/* this is easy because we know that there is enough space */
*target++=(uint8_t)value;
if(offsets!=NULL) {
@@ -2951,7 +3513,7 @@ unassigned:
pArgs->source=source;
c=_extFromU(cnv, cnv->sharedData,
c, &source, sourceLimit,
- (char **)&target, (char *)target+targetCapacity,
+ &target, target+targetCapacity,
&offsets, sourceIndex,
pArgs->flush,
pErrorCode);
@@ -2991,6 +3553,11 @@ unassigned:
* that map only to and from the BMP.
* In addition to single-byte/state optimizations, the offset calculations
* become much easier.
+ * It would be possible to use the sbcsIndex for UTF-8-friendly tables,
+ * but measurements have shown that this diminishes performance
+ * in more cases than it improves it.
+ * See SVN revision 21013 (2007-feb-06) for the last version with #if switches
+ * for various MBCS and SBCS optimizations.
*/
static void
ucnv_MBCSSingleFromBMPWithOffsets(UConverterFromUnicodeArgs *pArgs,
@@ -3008,6 +3575,7 @@ ucnv_MBCSSingleFromBMPWithOffsets(UConverterFromUnicodeArgs *pArgs,
int32_t sourceIndex;
+ uint32_t asciiRoundtrips;
uint16_t value, minValue;
/* set up the local pointers */
@@ -3024,6 +3592,7 @@ ucnv_MBCSSingleFromBMPWithOffsets(UConverterFromUnicodeArgs *pArgs,
} else {
results=(uint16_t *)cnv->sharedData->mbcs.fromUnicodeBytes;
}
+ asciiRoundtrips=cnv->sharedData->mbcs.asciiRoundtrips;
if(cnv->useFallback) {
/* use all roundtrip and fallback results */
@@ -3116,8 +3685,13 @@ unrolled:
* This speeds up the conversion of assigned characters.
*/
/* convert the Unicode code point in c into codepage bytes */
+ if(c<=0x7f && IS_ASCII_ROUNDTRIP(c, asciiRoundtrips)) {
+ *target++=(uint8_t)c;
+ --targetCapacity;
+ c=0;
+ continue;
+ }
value=MBCS_SINGLE_RESULT_FROM_U(table, results, c);
-
/* is this code point assigned, or do we use fallbacks? */
if(value>=minValue) {
/* assigned, write the output character bytes from value and length */
@@ -3149,6 +3723,9 @@ getTrail:
}
} else {
/* no more input */
+ if (pArgs->flush) {
+ *pErrorCode=U_TRUNCATED_CHAR_FOUND;
+ }
break;
}
} else {
@@ -3181,7 +3758,7 @@ getTrail:
lastSource=source;
c=_extFromU(cnv, cnv->sharedData,
c, &source, sourceLimit,
- (char **)&target, (char *)target+targetCapacity,
+ &target, (const uint8_t *)(pArgs->targetLimit),
&offsets, sourceIndex,
pArgs->flush,
pErrorCode);
@@ -3216,6 +3793,14 @@ getTrail:
/* set offsets since the start or the last callback */
if(offsets!=NULL) {
size_t count=source-lastSource;
+ if (count > 0 && *pErrorCode == U_TRUNCATED_CHAR_FOUND) {
+ /*
+ Caller gave us a partial supplementary character,
+ which this function couldn't convert in any case.
+ The callback will handle the offset.
+ */
+ count--;
+ }
while(count>0) {
*offsets++=sourceIndex++;
--count;
@@ -3241,6 +3826,7 @@ ucnv_MBCSFromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs,
int32_t *offsets;
const uint16_t *table;
+ const uint16_t *mbcsIndex;
const uint8_t *p, *bytes;
uint8_t outputType;
@@ -3249,6 +3835,7 @@ ucnv_MBCSFromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs,
int32_t prevSourceIndex, sourceIndex, nextSourceIndex;
uint32_t stage2Entry;
+ uint32_t asciiRoundtrips;
uint32_t value;
int32_t length, prevLength;
uint8_t unicodeMask;
@@ -3277,7 +3864,7 @@ ucnv_MBCSFromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs,
ucnv_MBCSSingleFromUnicodeWithOffsets(pArgs, pErrorCode);
}
return;
- } else if(outputType==MBCS_OUTPUT_2) {
+ } else if(outputType==MBCS_OUTPUT_2 && cnv->sharedData->mbcs.utf8Friendly) {
ucnv_MBCSDoubleFromUnicodeWithOffsets(pArgs, pErrorCode);
return;
}
@@ -3290,12 +3877,17 @@ ucnv_MBCSFromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs,
offsets=pArgs->offsets;
table=cnv->sharedData->mbcs.fromUnicodeTable;
-
+ if(cnv->sharedData->mbcs.utf8Friendly) {
+ mbcsIndex=cnv->sharedData->mbcs.mbcsIndex;
+ } else {
+ mbcsIndex=NULL;
+ }
if((cnv->options&UCNV_OPTION_SWAP_LFNL)!=0) {
bytes=cnv->sharedData->mbcs.swapLFNLFromUnicodeBytes;
} else {
bytes=cnv->sharedData->mbcs.fromUnicodeBytes;
}
+ asciiRoundtrips=cnv->sharedData->mbcs.asciiRoundtrips;
/* get the converter state from UConverter */
c=cnv->fromUChar32;
@@ -3351,268 +3943,435 @@ ucnv_MBCSFromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs,
*/
c=*source++;
++nextSourceIndex;
+ if(c<=0x7f && IS_ASCII_ROUNDTRIP(c, asciiRoundtrips)) {
+ *target++=(uint8_t)c;
+ if(offsets!=NULL) {
+ *offsets++=sourceIndex;
+ prevSourceIndex=sourceIndex;
+ sourceIndex=nextSourceIndex;
+ }
+ --targetCapacity;
+ c=0;
+ continue;
+ }
/*
- * This also tests if the codepage maps single surrogates.
- * If it does, then surrogates are not paired but mapped separately.
- * Note that in this case unmatched surrogates are not detected.
+ * utf8Friendly table: Test for <=0xd7ff rather than <=MBCS_FAST_MAX
+ * to avoid dealing with surrogates.
+ * MBCS_FAST_MAX must be >=0xd7ff.
*/
- if(UTF_IS_SURROGATE(c) && !(unicodeMask&UCNV_HAS_SURROGATES)) {
- if(UTF_IS_SURROGATE_FIRST(c)) {
+ if(c<=0xd7ff && mbcsIndex!=NULL) {
+ value=mbcsIndex[c>>6];
+
+ /* get the bytes and the length for the output (copied from below and adapted for utf8Friendly data) */
+ /* There are only roundtrips (!=0) and no-mapping (==0) entries. */
+ switch(outputType) {
+ case MBCS_OUTPUT_2:
+ value=((const uint16_t *)bytes)[value +(c&0x3f)];
+ if(value<=0xff) {
+ if(value==0) {
+ goto unassigned;
+ } else {
+ length=1;
+ }
+ } else {
+ length=2;
+ }
+ break;
+ case MBCS_OUTPUT_2_SISO:
+ /* 1/2-byte stateful with Shift-In/Shift-Out */
+ /*
+ * Save the old state in the converter object
+ * right here, then change the local prevLength state variable if necessary.
+ * Then, if this character turns out to be unassigned or a fallback that
+ * is not taken, the callback code must not save the new state in the converter
+ * because the new state is for a character that is not output.
+ * However, the callback must still restore the state from the converter
+ * in case the callback function changed it for its output.
+ */
+ cnv->fromUnicodeStatus=prevLength; /* save the old state */
+ value=((const uint16_t *)bytes)[value +(c&0x3f)];
+ if(value<=0xff) {
+ if(value==0) {
+ goto unassigned;
+ } else if(prevLength<=1) {
+ length=1;
+ } else {
+ /* change from double-byte mode to single-byte */
+ value|=(uint32_t)UCNV_SI<<8;
+ length=2;
+ prevLength=1;
+ }
+ } else {
+ if(prevLength==2) {
+ length=2;
+ } else {
+ /* change from single-byte mode to double-byte */
+ value|=(uint32_t)UCNV_SO<<16;
+ length=3;
+ prevLength=2;
+ }
+ }
+ break;
+ case MBCS_OUTPUT_DBCS_ONLY:
+ /* table with single-byte results, but only DBCS mappings used */
+ value=((const uint16_t *)bytes)[value +(c&0x3f)];
+ if(value<=0xff) {
+ /* no mapping or SBCS result, not taken for DBCS-only */
+ goto unassigned;
+ } else {
+ length=2;
+ }
+ break;
+ case MBCS_OUTPUT_3:
+ p=bytes+(value+(c&0x3f))*3;
+ value=((uint32_t)*p<<16)|((uint32_t)p[1]<<8)|p[2];
+ if(value<=0xff) {
+ if(value==0) {
+ goto unassigned;
+ } else {
+ length=1;
+ }
+ } else if(value<=0xffff) {
+ length=2;
+ } else {
+ length=3;
+ }
+ break;
+ case MBCS_OUTPUT_4:
+ value=((const uint32_t *)bytes)[value +(c&0x3f)];
+ if(value<=0xff) {
+ if(value==0) {
+ goto unassigned;
+ } else {
+ length=1;
+ }
+ } else if(value<=0xffff) {
+ length=2;
+ } else if(value<=0xffffff) {
+ length=3;
+ } else {
+ length=4;
+ }
+ break;
+ case MBCS_OUTPUT_3_EUC:
+ value=((const uint16_t *)bytes)[value +(c&0x3f)];
+ /* EUC 16-bit fixed-length representation */
+ if(value<=0xff) {
+ if(value==0) {
+ goto unassigned;
+ } else {
+ length=1;
+ }
+ } else if((value&0x8000)==0) {
+ value|=0x8e8000;
+ length=3;
+ } else if((value&0x80)==0) {
+ value|=0x8f0080;
+ length=3;
+ } else {
+ length=2;
+ }
+ break;
+ case MBCS_OUTPUT_4_EUC:
+ p=bytes+(value+(c&0x3f))*3;
+ value=((uint32_t)*p<<16)|((uint32_t)p[1]<<8)|p[2];
+ /* EUC 16-bit fixed-length representation applied to the first two bytes */
+ if(value<=0xff) {
+ if(value==0) {
+ goto unassigned;
+ } else {
+ length=1;
+ }
+ } else if(value<=0xffff) {
+ length=2;
+ } else if((value&0x800000)==0) {
+ value|=0x8e800000;
+ length=4;
+ } else if((value&0x8000)==0) {
+ value|=0x8f008000;
+ length=4;
+ } else {
+ length=3;
+ }
+ break;
+ default:
+ /* must not occur */
+ /*
+ * To avoid compiler warnings that value & length may be
+ * used without having been initialized, we set them here.
+ * In reality, this is unreachable code.
+ * Not having a default branch also causes warnings with
+ * some compilers.
+ */
+ value=0;
+ length=0;
+ break;
+ }
+ /* output the value */
+ } else {
+ /*
+ * This also tests if the codepage maps single surrogates.
+ * If it does, then surrogates are not paired but mapped separately.
+ * Note that in this case unmatched surrogates are not detected.
+ */
+ if(UTF_IS_SURROGATE(c) && !(unicodeMask&UCNV_HAS_SURROGATES)) {
+ if(UTF_IS_SURROGATE_FIRST(c)) {
getTrail:
- if(sourcefromUnicodeStatus=prevLength; /* save the old state */
- /* callback(unassigned) */
- goto unassigned;
+ if(sourcefromUnicodeStatus=prevLength; /* save the old state */
+ /* callback(unassigned) */
+ goto unassigned;
+ }
+ /* convert this supplementary code point */
+ /* exit this condition tree */
+ } else {
+ /* this is an unmatched lead code unit (1st surrogate) */
+ /* callback(illegal) */
+ *pErrorCode=U_ILLEGAL_CHAR_FOUND;
+ break;
}
- /* convert this supplementary code point */
- /* exit this condition tree */
} else {
- /* this is an unmatched lead code unit (1st surrogate) */
- /* callback(illegal) */
- *pErrorCode=U_ILLEGAL_CHAR_FOUND;
+ /* no more input */
break;
}
} else {
- /* no more input */
+ /* this is an unmatched trail code unit (2nd surrogate) */
+ /* callback(illegal) */
+ *pErrorCode=U_ILLEGAL_CHAR_FOUND;
break;
}
- } else {
- /* this is an unmatched trail code unit (2nd surrogate) */
- /* callback(illegal) */
- *pErrorCode=U_ILLEGAL_CHAR_FOUND;
- break;
}
- }
-
- /* convert the Unicode code point in c into codepage bytes */
- /*
- * The basic lookup is a triple-stage compact array (trie) lookup.
- * For details see the beginning of this file.
- *
- * Single-byte codepages are handled with a different data structure
- * by _MBCSSingle... functions.
- *
- * The result consists of a 32-bit value from stage 2 and
- * a pointer to as many bytes as are stored per character.
- * The pointer points to the character's bytes in stage 3.
- * Bits 15..0 of the stage 2 entry contain the stage 3 index
- * for that pointer, while bits 31..16 are flags for which of
- * the 16 characters in the block are roundtrip-assigned.
- *
- * For 2-byte and 4-byte codepages, the bytes are stored as uint16_t
- * respectively as uint32_t, in the platform encoding.
- * For 3-byte codepages, the bytes are always stored in big-endian order.
- *
- * For EUC encodings that use only either 0x8e or 0x8f as the first
- * byte of their longest byte sequences, the first two bytes in
- * this third stage indicate with their 7th bits whether these bytes
- * are to be written directly or actually need to be preceeded by
- * one of the two Single-Shift codes. With this, the third stage
- * stores one byte fewer per character than the actual maximum length of
- * EUC byte sequences.
- *
- * Other than that, leading zero bytes are removed and the other
- * bytes output. A single zero byte may be output if the "assigned"
- * bit in stage 2 was on.
- * The data structure does not support zero byte output as a fallback,
- * and also does not allow output of leading zeros.
- */
- stage2Entry=MBCS_STAGE_2_FROM_U(table, c);
+ /* convert the Unicode code point in c into codepage bytes */
- /* get the bytes and the length for the output */
- switch(outputType) {
- case MBCS_OUTPUT_2:
- value=MBCS_VALUE_2_FROM_STAGE_2(bytes, stage2Entry, c);
- if(value<=0xff) {
- length=1;
- } else {
- length=2;
- }
- break;
- case MBCS_OUTPUT_2_SISO:
- /* 1/2-byte stateful with Shift-In/Shift-Out */
/*
- * Save the old state in the converter object
- * right here, then change the local prevLength state variable if necessary.
- * Then, if this character turns out to be unassigned or a fallback that
- * is not taken, the callback code must not save the new state in the converter
- * because the new state is for a character that is not output.
- * However, the callback must still restore the state from the converter
- * in case the callback function changed it for its output.
+ * The basic lookup is a triple-stage compact array (trie) lookup.
+ * For details see the beginning of this file.
+ *
+ * Single-byte codepages are handled with a different data structure
+ * by _MBCSSingle... functions.
+ *
+ * The result consists of a 32-bit value from stage 2 and
+ * a pointer to as many bytes as are stored per character.
+ * The pointer points to the character's bytes in stage 3.
+ * Bits 15..0 of the stage 2 entry contain the stage 3 index
+ * for that pointer, while bits 31..16 are flags for which of
+ * the 16 characters in the block are roundtrip-assigned.
+ *
+ * For 2-byte and 4-byte codepages, the bytes are stored as uint16_t
+ * respectively as uint32_t, in the platform encoding.
+ * For 3-byte codepages, the bytes are always stored in big-endian order.
+ *
+ * For EUC encodings that use only either 0x8e or 0x8f as the first
+ * byte of their longest byte sequences, the first two bytes in
+ * this third stage indicate with their 7th bits whether these bytes
+ * are to be written directly or actually need to be preceeded by
+ * one of the two Single-Shift codes. With this, the third stage
+ * stores one byte fewer per character than the actual maximum length of
+ * EUC byte sequences.
+ *
+ * Other than that, leading zero bytes are removed and the other
+ * bytes output. A single zero byte may be output if the "assigned"
+ * bit in stage 2 was on.
+ * The data structure does not support zero byte output as a fallback,
+ * and also does not allow output of leading zeros.
*/
- cnv->fromUnicodeStatus=prevLength; /* save the old state */
- value=MBCS_VALUE_2_FROM_STAGE_2(bytes, stage2Entry, c);
- if(value<=0xff) {
- if(value==0 && MBCS_FROM_U_IS_ROUNDTRIP(stage2Entry, c)==0) {
- /* no mapping, leave value==0 */
+ stage2Entry=MBCS_STAGE_2_FROM_U(table, c);
+
+ /* get the bytes and the length for the output */
+ switch(outputType) {
+ case MBCS_OUTPUT_2:
+ value=MBCS_VALUE_2_FROM_STAGE_2(bytes, stage2Entry, c);
+ if(value<=0xff) {
+ length=1;
+ } else {
+ length=2;
+ }
+ break;
+ case MBCS_OUTPUT_2_SISO:
+ /* 1/2-byte stateful with Shift-In/Shift-Out */
+ /*
+ * Save the old state in the converter object
+ * right here, then change the local prevLength state variable if necessary.
+ * Then, if this character turns out to be unassigned or a fallback that
+ * is not taken, the callback code must not save the new state in the converter
+ * because the new state is for a character that is not output.
+ * However, the callback must still restore the state from the converter
+ * in case the callback function changed it for its output.
+ */
+ cnv->fromUnicodeStatus=prevLength; /* save the old state */
+ value=MBCS_VALUE_2_FROM_STAGE_2(bytes, stage2Entry, c);
+ if(value<=0xff) {
+ if(value==0 && MBCS_FROM_U_IS_ROUNDTRIP(stage2Entry, c)==0) {
+ /* no mapping, leave value==0 */
+ length=0;
+ } else if(prevLength<=1) {
+ length=1;
+ } else {
+ /* change from double-byte mode to single-byte */
+ value|=(uint32_t)UCNV_SI<<8;
+ length=2;
+ prevLength=1;
+ }
+ } else {
+ if(prevLength==2) {
+ length=2;
+ } else {
+ /* change from single-byte mode to double-byte */
+ value|=(uint32_t)UCNV_SO<<16;
+ length=3;
+ prevLength=2;
+ }
+ }
+ break;
+ case MBCS_OUTPUT_DBCS_ONLY:
+ /* table with single-byte results, but only DBCS mappings used */
+ value=MBCS_VALUE_2_FROM_STAGE_2(bytes, stage2Entry, c);
+ if(value<=0xff) {
+ /* no mapping or SBCS result, not taken for DBCS-only */
+ value=stage2Entry=0; /* stage2Entry=0 to reset roundtrip flags */
length=0;
- } else if(prevLength<=1) {
+ } else {
+ length=2;
+ }
+ break;
+ case MBCS_OUTPUT_3:
+ p=MBCS_POINTER_3_FROM_STAGE_2(bytes, stage2Entry, c);
+ value=((uint32_t)*p<<16)|((uint32_t)p[1]<<8)|p[2];
+ if(value<=0xff) {
+ length=1;
+ } else if(value<=0xffff) {
+ length=2;
+ } else {
+ length=3;
+ }
+ break;
+ case MBCS_OUTPUT_4:
+ value=MBCS_VALUE_4_FROM_STAGE_2(bytes, stage2Entry, c);
+ if(value<=0xff) {
+ length=1;
+ } else if(value<=0xffff) {
+ length=2;
+ } else if(value<=0xffffff) {
+ length=3;
+ } else {
+ length=4;
+ }
+ break;
+ case MBCS_OUTPUT_3_EUC:
+ value=MBCS_VALUE_2_FROM_STAGE_2(bytes, stage2Entry, c);
+ /* EUC 16-bit fixed-length representation */
+ if(value<=0xff) {
length=1;
+ } else if((value&0x8000)==0) {
+ value|=0x8e8000;
+ length=3;
+ } else if((value&0x80)==0) {
+ value|=0x8f0080;
+ length=3;
} else {
- /* change from double-byte mode to single-byte */
- value|=(uint32_t)UCNV_SI<<8;
length=2;
- prevLength=1;
}
- } else {
- if(prevLength==2) {
+ break;
+ case MBCS_OUTPUT_4_EUC:
+ p=MBCS_POINTER_3_FROM_STAGE_2(bytes, stage2Entry, c);
+ value=((uint32_t)*p<<16)|((uint32_t)p[1]<<8)|p[2];
+ /* EUC 16-bit fixed-length representation applied to the first two bytes */
+ if(value<=0xff) {
+ length=1;
+ } else if(value<=0xffff) {
length=2;
+ } else if((value&0x800000)==0) {
+ value|=0x8e800000;
+ length=4;
+ } else if((value&0x8000)==0) {
+ value|=0x8f008000;
+ length=4;
} else {
- /* change from single-byte mode to double-byte */
- value|=(uint32_t)UCNV_SO<<16;
length=3;
- prevLength=2;
}
- }
- break;
- case MBCS_OUTPUT_DBCS_ONLY:
- /* table with single-byte results, but only DBCS mappings used */
- value=MBCS_VALUE_2_FROM_STAGE_2(bytes, stage2Entry, c);
- if(value<=0xff) {
- /* no mapping or SBCS result, not taken for DBCS-only */
+ break;
+ default:
+ /* must not occur */
+ /*
+ * To avoid compiler warnings that value & length may be
+ * used without having been initialized, we set them here.
+ * In reality, this is unreachable code.
+ * Not having a default branch also causes warnings with
+ * some compilers.
+ */
value=stage2Entry=0; /* stage2Entry=0 to reset roundtrip flags */
length=0;
- } else {
- length=2;
+ break;
}
- break;
- case MBCS_OUTPUT_3:
- p=MBCS_POINTER_3_FROM_STAGE_2(bytes, stage2Entry, c);
- value=((uint32_t)*p<<16)|((uint32_t)p[1]<<8)|p[2];
- if(value<=0xff) {
- length=1;
- } else if(value<=0xffff) {
- length=2;
- } else {
- length=3;
+
+ /* is this code point assigned, or do we use fallbacks? */
+ if(!(MBCS_FROM_U_IS_ROUNDTRIP(stage2Entry, c)!=0 ||
+ (UCNV_FROM_U_USE_FALLBACK(cnv, c) && value!=0))
+ ) {
+ /*
+ * We allow a 0 byte output if the "assigned" bit is set for this entry.
+ * There is no way with this data structure for fallback output
+ * to be a zero byte.
+ */
+
+unassigned:
+ /* try an extension mapping */
+ pArgs->source=source;
+ c=_extFromU(cnv, cnv->sharedData,
+ c, &source, sourceLimit,
+ &target, target+targetCapacity,
+ &offsets, sourceIndex,
+ pArgs->flush,
+ pErrorCode);
+ nextSourceIndex+=(int32_t)(source-pArgs->source);
+ prevLength=cnv->fromUnicodeStatus; /* restore SISO state */
+
+ if(U_FAILURE(*pErrorCode)) {
+ /* not mappable or buffer overflow */
+ break;
+ } else {
+ /* a mapping was written to the target, continue */
+
+ /* recalculate the targetCapacity after an extension mapping */
+ targetCapacity=(int32_t)(pArgs->targetLimit-(char *)target);
+
+ /* normal end of conversion: prepare for a new character */
+ if(offsets!=NULL) {
+ prevSourceIndex=sourceIndex;
+ sourceIndex=nextSourceIndex;
+ }
+ continue;
+ }
}
- break;
- case MBCS_OUTPUT_4:
- value=MBCS_VALUE_4_FROM_STAGE_2(bytes, stage2Entry, c);
- if(value<=0xff) {
- length=1;
- } else if(value<=0xffff) {
- length=2;
- } else if(value<=0xffffff) {
- length=3;
- } else {
- length=4;
- }
- break;
- case MBCS_OUTPUT_3_EUC:
- value=MBCS_VALUE_2_FROM_STAGE_2(bytes, stage2Entry, c);
- /* EUC 16-bit fixed-length representation */
- if(value<=0xff) {
- length=1;
- } else if((value&0x8000)==0) {
- value|=0x8e8000;
- length=3;
- } else if((value&0x80)==0) {
- value|=0x8f0080;
- length=3;
- } else {
- length=2;
- }
- break;
- case MBCS_OUTPUT_4_EUC:
- p=MBCS_POINTER_3_FROM_STAGE_2(bytes, stage2Entry, c);
- value=((uint32_t)*p<<16)|((uint32_t)p[1]<<8)|p[2];
- /* EUC 16-bit fixed-length representation applied to the first two bytes */
- if(value<=0xff) {
- length=1;
- } else if(value<=0xffff) {
- length=2;
- } else if((value&0x800000)==0) {
- value|=0x8e800000;
- length=4;
- } else if((value&0x8000)==0) {
- value|=0x8f008000;
- length=4;
- } else {
- length=3;
- }
- break;
- default:
- /* must not occur */
- /*
- * To avoid compiler warnings that value & length may be
- * used without having been initialized, we set them here.
- * In reality, this is unreachable code.
- * Not having a default branch also causes warnings with
- * some compilers.
- */
- value=stage2Entry=0; /* stage2Entry=0 to reset roundtrip flags */
- length=0;
- break;
- }
-
- /* is this code point assigned, or do we use fallbacks? */
- if(!(MBCS_FROM_U_IS_ROUNDTRIP(stage2Entry, c)!=0 ||
- (UCNV_FROM_U_USE_FALLBACK(cnv, c) && value!=0))
- ) {
- /*
- * We allow a 0 byte output if the "assigned" bit is set for this entry.
- * There is no way with this data structure for fallback output
- * to be a zero byte.
- */
-
-unassigned:
- /* try an extension mapping */
- pArgs->source=source;
- c=_extFromU(cnv, cnv->sharedData,
- c, &source, sourceLimit,
- (char **)&target, (char *)target+targetCapacity,
- &offsets, sourceIndex,
- pArgs->flush,
- pErrorCode);
- nextSourceIndex+=(int32_t)(source-pArgs->source);
- prevLength=cnv->fromUnicodeStatus; /* restore SISO state */
-
- if(U_FAILURE(*pErrorCode)) {
- /* not mappable or buffer overflow */
- break;
- } else {
- /* a mapping was written to the target, continue */
-
- /* recalculate the targetCapacity after an extension mapping */
- targetCapacity=(int32_t)(pArgs->targetLimit-(char *)target);
-
- /* normal end of conversion: prepare for a new character */
- if(offsets!=NULL) {
- prevSourceIndex=sourceIndex;
- sourceIndex=nextSourceIndex;
- }
- continue;
- }
- }
-
- /* write the output character bytes from value and length */
- /* from the first if in the loop we know that targetCapacity>0 */
- if(length<=targetCapacity) {
- if(offsets==NULL) {
- switch(length) {
- /* each branch falls through to the next one */
- case 4:
- *target++=(uint8_t)(value>>24);
- case 3:
- *target++=(uint8_t)(value>>16);
- case 2:
- *target++=(uint8_t)(value>>8);
- case 1:
- *target++=(uint8_t)value;
- default:
- /* will never occur */
- break;
- }
+ }
+
+ /* write the output character bytes from value and length */
+ /* from the first if in the loop we know that targetCapacity>0 */
+ if(length<=targetCapacity) {
+ if(offsets==NULL) {
+ switch(length) {
+ /* each branch falls through to the next one */
+ case 4:
+ *target++=(uint8_t)(value>>24);
+ case 3:
+ *target++=(uint8_t)(value>>16);
+ case 2:
+ *target++=(uint8_t)(value>>8);
+ case 1:
+ *target++=(uint8_t)value;
+ default:
+ /* will never occur */
+ break;
+ }
} else {
switch(length) {
/* each branch falls through to the next one */
@@ -3894,7 +4653,8 @@ ucnv_MBCSFromUChar32(UConverterSharedData *sharedData,
cx=sharedData->mbcs.extIndexes;
if(cx!=NULL) {
- return ucnv_extSimpleMatchFromU(cx, c, pValue, useFallback);
+ length=ucnv_extSimpleMatchFromU(cx, c, pValue, useFallback);
+ return length>=0 ? length : -length; /* return abs(length); */
}
/* unassigned */
@@ -3941,6 +4701,619 @@ ucnv_MBCSSingleFromUChar32(UConverterSharedData *sharedData,
}
#endif
+/* MBCS-from-UTF-8 conversion functions ------------------------------------- */
+
+/* minimum code point values for n-byte UTF-8 sequences, n=0..4 */
+static const UChar32
+utf8_minLegal[5]={ 0, 0, 0x80, 0x800, 0x10000 };
+
+/* offsets for n-byte UTF-8 sequences that were calculated with ((lead<<6)+trail)<<6+trail... */
+static const UChar32
+utf8_offsets[7]={ 0, 0, 0x3080, 0xE2080, 0x3C82080 };
+
+static void
+ucnv_SBCSFromUTF8(UConverterFromUnicodeArgs *pFromUArgs,
+ UConverterToUnicodeArgs *pToUArgs,
+ UErrorCode *pErrorCode) {
+ UConverter *utf8, *cnv;
+ const uint8_t *source, *sourceLimit;
+ uint8_t *target;
+ int32_t targetCapacity;
+
+ const uint16_t *table, *sbcsIndex;
+ const uint16_t *results;
+
+ int8_t oldToULength, toULength, toULimit;
+
+ UChar32 c;
+ uint8_t b, t1, t2;
+
+ uint32_t asciiRoundtrips;
+ uint16_t value, minValue;
+ UBool hasSupplementary;
+
+ /* set up the local pointers */
+ utf8=pToUArgs->converter;
+ cnv=pFromUArgs->converter;
+ source=(uint8_t *)pToUArgs->source;
+ sourceLimit=(uint8_t *)pToUArgs->sourceLimit;
+ target=(uint8_t *)pFromUArgs->target;
+ targetCapacity=(int32_t)(pFromUArgs->targetLimit-pFromUArgs->target);
+
+ table=cnv->sharedData->mbcs.fromUnicodeTable;
+ sbcsIndex=cnv->sharedData->mbcs.sbcsIndex;
+ if((cnv->options&UCNV_OPTION_SWAP_LFNL)!=0) {
+ results=(uint16_t *)cnv->sharedData->mbcs.swapLFNLFromUnicodeBytes;
+ } else {
+ results=(uint16_t *)cnv->sharedData->mbcs.fromUnicodeBytes;
+ }
+ asciiRoundtrips=cnv->sharedData->mbcs.asciiRoundtrips;
+
+ if(cnv->useFallback) {
+ /* use all roundtrip and fallback results */
+ minValue=0x800;
+ } else {
+ /* use only roundtrips and fallbacks from private-use characters */
+ minValue=0xc00;
+ }
+ hasSupplementary=(UBool)(cnv->sharedData->mbcs.unicodeMask&UCNV_HAS_SUPPLEMENTARY);
+
+ /* get the converter state from the UTF-8 UConverter */
+ c=(UChar32)utf8->toUnicodeStatus;
+ if(c!=0) {
+ toULength=oldToULength=utf8->toULength;
+ toULimit=(int8_t)utf8->mode;
+ } else {
+ toULength=oldToULength=toULimit=0;
+ }
+
+ /*
+ * Make sure that the last byte sequence before sourceLimit is complete
+ * or runs into a lead byte.
+ * Do not go back into the bytes that will be read for finishing a partial
+ * sequence from the previous buffer.
+ * In the conversion loop compare source with sourceLimit only once
+ * per multi-byte character.
+ */
+ {
+ int32_t i, length;
+
+ length=(int32_t)(sourceLimit-source) - (toULimit-oldToULength);
+ for(i=0; i<3 && i0) {
+ utf8->toUnicodeStatus=0;
+ utf8->toULength=0;
+ goto moreBytes;
+ /*
+ * Note: We could avoid the goto by duplicating some of the moreBytes
+ * code, but only up to the point of collecting a complete UTF-8
+ * sequence; then recurse for the toUBytes[toULength]
+ * and then continue with normal conversion.
+ *
+ * If so, move this code to just after initializing the minimum
+ * set of local variables for reading the UTF-8 input
+ * (utf8, source, target, limits but not cnv, table, minValue, etc.).
+ *
+ * Potential advantages:
+ * - avoid the goto
+ * - oldToULength could become a local variable in just those code blocks
+ * that deal with buffer boundaries
+ * - possibly faster if the goto prevents some compiler optimizations
+ * (this would need measuring to confirm)
+ * Disadvantage:
+ * - code duplication
+ */
+ }
+
+ /* conversion loop */
+ while(source0) {
+ b=*source++;
+ if((int8_t)b>=0) {
+ /* convert ASCII */
+ if(IS_ASCII_ROUNDTRIP(b, asciiRoundtrips)) {
+ *target++=(uint8_t)b;
+ --targetCapacity;
+ continue;
+ } else {
+ c=b;
+ value=SBCS_RESULT_FROM_UTF8(sbcsIndex, results, 0, c);
+ }
+ } else {
+ if(b<0xe0) {
+ if( /* handle U+0080..U+07FF inline */
+ b>=0xc2 &&
+ (t1=(uint8_t)(*source-0x80)) <= 0x3f
+ ) {
+ c=b&0x1f;
+ ++source;
+ value=SBCS_RESULT_FROM_UTF8(sbcsIndex, results, c, t1);
+ if(value>=minValue) {
+ *target++=(uint8_t)value;
+ --targetCapacity;
+ continue;
+ } else {
+ c=(c<<6)|t1;
+ }
+ } else {
+ c=-1;
+ }
+ } else if(b==0xe0) {
+ if( /* handle U+0800..U+0FFF inline */
+ (t1=(uint8_t)(source[0]-0x80)) <= 0x3f && t1 >= 0x20 &&
+ (t2=(uint8_t)(source[1]-0x80)) <= 0x3f
+ ) {
+ c=t1;
+ source+=2;
+ value=SBCS_RESULT_FROM_UTF8(sbcsIndex, results, c, t2);
+ if(value>=minValue) {
+ *target++=(uint8_t)value;
+ --targetCapacity;
+ continue;
+ } else {
+ c=(c<<6)|t2;
+ }
+ } else {
+ c=-1;
+ }
+ } else {
+ c=-1;
+ }
+
+ if(c<0) {
+ /* handle "complicated" and error cases, and continuing partial characters */
+ oldToULength=0;
+ toULength=1;
+ toULimit=utf8_countTrailBytes[b]+1;
+ c=b;
+moreBytes:
+ while(toULengthtoUBytes[oldToULength++]=*source++;
+ }
+ utf8->toUnicodeStatus=c;
+ utf8->toULength=toULength;
+ utf8->mode=toULimit;
+ pToUArgs->source=(char *)source;
+ pFromUArgs->target=(char *)target;
+ return;
+ }
+ }
+
+ if( toULength==toULimit && /* consumed all trail bytes */
+ (toULength==3 || toULength==2) && /* BMP */
+ (c-=utf8_offsets[toULength])>=utf8_minLegal[toULength] &&
+ (c<=0xd7ff || 0xe000<=c) /* not a surrogate */
+ ) {
+ value=MBCS_SINGLE_RESULT_FROM_U(table, results, c);
+ } else if(
+ toULength==toULimit && toULength==4 &&
+ (0x10000<=(c-=utf8_offsets[4]) && c<=0x10ffff)
+ ) {
+ /* supplementary code point */
+ if(!hasSupplementary) {
+ /* BMP-only codepages are stored without stage 1 entries for supplementary code points */
+ value=0;
+ } else {
+ value=MBCS_SINGLE_RESULT_FROM_U(table, results, c);
+ }
+ } else {
+ /* error handling: illegal UTF-8 byte sequence */
+ source-=(toULength-oldToULength);
+ while(oldToULengthtoUBytes[oldToULength++]=*source++;
+ }
+ utf8->toULength=toULength;
+ pToUArgs->source=(char *)source;
+ pFromUArgs->target=(char *)target;
+ *pErrorCode=U_ILLEGAL_CHAR_FOUND;
+ return;
+ }
+ }
+ }
+
+ if(value>=minValue) {
+ /* output the mapping for c */
+ *target++=(uint8_t)value;
+ --targetCapacity;
+ } else {
+ /* valueUTF-16->charset conversion.
+ */
+ static const UChar nul=0;
+ const UChar *noSource=&nul;
+ c=_extFromU(cnv, cnv->sharedData,
+ c, &noSource, noSource,
+ &target, target+targetCapacity,
+ NULL, -1,
+ pFromUArgs->flush,
+ pErrorCode);
+
+ if(U_FAILURE(*pErrorCode)) {
+ /* not mappable or buffer overflow */
+ cnv->fromUChar32=c;
+ break;
+ } else if(cnv->preFromUFirstCP>=0) {
+ /*
+ * Partial match, return and revert to pivoting.
+ * In normal from-UTF-16 conversion, we would just continue
+ * but then exit the loop because the extension match would
+ * have consumed the source.
+ */
+ break;
+ } else {
+ /* a mapping was written to the target, continue */
+
+ /* recalculate the targetCapacity after an extension mapping */
+ targetCapacity=(int32_t)(pFromUArgs->targetLimit-(char *)target);
+ }
+ }
+ } else {
+ /* target is full */
+ *pErrorCode=U_BUFFER_OVERFLOW_ERROR;
+ break;
+ }
+ }
+
+ /*
+ * The sourceLimit may have been adjusted before the conversion loop
+ * to stop before a truncated sequence.
+ * If so, then collect the truncated sequence now.
+ */
+ if(U_SUCCESS(*pErrorCode) && source<(sourceLimit=(uint8_t *)pToUArgs->sourceLimit)) {
+ c=utf8->toUBytes[0]=b=*source++;
+ toULength=1;
+ toULimit=utf8_countTrailBytes[b]+1;
+ while(sourcetoUBytes[toULength++]=b=*source++;
+ c=(c<<6)+b;
+ }
+ utf8->toUnicodeStatus=c;
+ utf8->toULength=toULength;
+ utf8->mode=toULimit;
+ }
+
+ /* write back the updated pointers */
+ pToUArgs->source=(char *)source;
+ pFromUArgs->target=(char *)target;
+}
+
+static void
+ucnv_DBCSFromUTF8(UConverterFromUnicodeArgs *pFromUArgs,
+ UConverterToUnicodeArgs *pToUArgs,
+ UErrorCode *pErrorCode) {
+ UConverter *utf8, *cnv;
+ const uint8_t *source, *sourceLimit;
+ uint8_t *target;
+ int32_t targetCapacity;
+
+ const uint16_t *table, *mbcsIndex;
+ const uint16_t *results;
+
+ int8_t oldToULength, toULength, toULimit;
+
+ UChar32 c;
+ uint8_t b, t1, t2;
+
+ uint32_t stage2Entry;
+ uint32_t asciiRoundtrips;
+ uint16_t value, minValue;
+ UBool hasSupplementary;
+
+ /* set up the local pointers */
+ utf8=pToUArgs->converter;
+ cnv=pFromUArgs->converter;
+ source=(uint8_t *)pToUArgs->source;
+ sourceLimit=(uint8_t *)pToUArgs->sourceLimit;
+ target=(uint8_t *)pFromUArgs->target;
+ targetCapacity=(int32_t)(pFromUArgs->targetLimit-pFromUArgs->target);
+
+ table=cnv->sharedData->mbcs.fromUnicodeTable;
+ mbcsIndex=cnv->sharedData->mbcs.mbcsIndex;
+ if((cnv->options&UCNV_OPTION_SWAP_LFNL)!=0) {
+ results=(uint16_t *)cnv->sharedData->mbcs.swapLFNLFromUnicodeBytes;
+ } else {
+ results=(uint16_t *)cnv->sharedData->mbcs.fromUnicodeBytes;
+ }
+ asciiRoundtrips=cnv->sharedData->mbcs.asciiRoundtrips;
+
+ if(cnv->useFallback) {
+ /* use all roundtrip and fallback results */
+ minValue=0x800;
+ } else {
+ /* use only roundtrips and fallbacks from private-use characters */
+ minValue=0xc00;
+ }
+ hasSupplementary=(UBool)(cnv->sharedData->mbcs.unicodeMask&UCNV_HAS_SUPPLEMENTARY);
+
+ /* get the converter state from the UTF-8 UConverter */
+ c=(UChar32)utf8->toUnicodeStatus;
+ if(c!=0) {
+ toULength=oldToULength=utf8->toULength;
+ toULimit=(int8_t)utf8->mode;
+ } else {
+ toULength=oldToULength=toULimit=0;
+ }
+
+ /*
+ * Make sure that the last byte sequence before sourceLimit is complete
+ * or runs into a lead byte.
+ * Do not go back into the bytes that will be read for finishing a partial
+ * sequence from the previous buffer.
+ * In the conversion loop compare source with sourceLimit only once
+ * per multi-byte character.
+ */
+ {
+ int32_t i, length;
+
+ length=(int32_t)(sourceLimit-source) - (toULimit-oldToULength);
+ for(i=0; i<3 && i0) {
+ utf8->toUnicodeStatus=0;
+ utf8->toULength=0;
+ goto moreBytes;
+ /* See note in ucnv_SBCSFromUTF8() about this goto. */
+ }
+
+ /* conversion loop */
+ while(source0) {
+ b=*source++;
+ if((int8_t)b>=0) {
+ /* convert ASCII */
+ if(IS_ASCII_ROUNDTRIP(b, asciiRoundtrips)) {
+ *target++=b;
+ --targetCapacity;
+ continue;
+ } else {
+ value=DBCS_RESULT_FROM_UTF8(mbcsIndex, results, 0, b);
+ if(value==0) {
+ c=b;
+ goto unassigned;
+ }
+ }
+ } else {
+ if(b>0xe0) {
+ if( /* handle U+1000..U+D7FF inline */
+ (((t1=(uint8_t)(source[0]-0x80), b<0xed) && (t1 <= 0x3f)) ||
+ (b==0xed && (t1 <= 0x1f))) &&
+ (t2=(uint8_t)(source[1]-0x80)) <= 0x3f
+ ) {
+ c=((b&0xf)<<6)|t1;
+ source+=2;
+ value=DBCS_RESULT_FROM_UTF8(mbcsIndex, results, c, t2);
+ if(value==0) {
+ c=(c<<6)|t2;
+ goto unassigned;
+ }
+ } else {
+ c=-1;
+ }
+ } else if(b<0xe0) {
+ if( /* handle U+0080..U+07FF inline */
+ b>=0xc2 &&
+ (t1=(uint8_t)(*source-0x80)) <= 0x3f
+ ) {
+ c=b&0x1f;
+ ++source;
+ value=DBCS_RESULT_FROM_UTF8(mbcsIndex, results, c, t1);
+ if(value==0) {
+ c=(c<<6)|t1;
+ goto unassigned;
+ }
+ } else {
+ c=-1;
+ }
+ } else {
+ c=-1;
+ }
+
+ if(c<0) {
+ /* handle "complicated" and error cases, and continuing partial characters */
+ oldToULength=0;
+ toULength=1;
+ toULimit=utf8_countTrailBytes[b]+1;
+ c=b;
+moreBytes:
+ while(toULengthtoUBytes[oldToULength++]=*source++;
+ }
+ utf8->toUnicodeStatus=c;
+ utf8->toULength=toULength;
+ utf8->mode=toULimit;
+ pToUArgs->source=(char *)source;
+ pFromUArgs->target=(char *)target;
+ return;
+ }
+ }
+
+ if( toULength==toULimit && /* consumed all trail bytes */
+ (toULength==3 || toULength==2) && /* BMP */
+ (c-=utf8_offsets[toULength])>=utf8_minLegal[toULength] &&
+ (c<=0xd7ff || 0xe000<=c) /* not a surrogate */
+ ) {
+ stage2Entry=MBCS_STAGE_2_FROM_U(table, c);
+ } else if(
+ toULength==toULimit && toULength==4 &&
+ (0x10000<=(c-=utf8_offsets[4]) && c<=0x10ffff)
+ ) {
+ /* supplementary code point */
+ if(!hasSupplementary) {
+ /* BMP-only codepages are stored without stage 1 entries for supplementary code points */
+ stage2Entry=0;
+ } else {
+ stage2Entry=MBCS_STAGE_2_FROM_U(table, c);
+ }
+ } else {
+ /* error handling: illegal UTF-8 byte sequence */
+ source-=(toULength-oldToULength);
+ while(oldToULengthtoUBytes[oldToULength++]=*source++;
+ }
+ utf8->toULength=toULength;
+ pToUArgs->source=(char *)source;
+ pFromUArgs->target=(char *)target;
+ *pErrorCode=U_ILLEGAL_CHAR_FOUND;
+ return;
+ }
+
+ /* get the bytes and the length for the output */
+ /* MBCS_OUTPUT_2 */
+ value=MBCS_VALUE_2_FROM_STAGE_2(results, stage2Entry, c);
+
+ /* is this code point assigned, or do we use fallbacks? */
+ if(!(MBCS_FROM_U_IS_ROUNDTRIP(stage2Entry, c) ||
+ (UCNV_FROM_U_USE_FALLBACK(cnv, c) && value!=0))
+ ) {
+ goto unassigned;
+ }
+ }
+ }
+
+ /* write the output character bytes from value and length */
+ /* from the first if in the loop we know that targetCapacity>0 */
+ if(value<=0xff) {
+ /* this is easy because we know that there is enough space */
+ *target++=(uint8_t)value;
+ --targetCapacity;
+ } else /* length==2 */ {
+ *target++=(uint8_t)(value>>8);
+ if(2<=targetCapacity) {
+ *target++=(uint8_t)value;
+ targetCapacity-=2;
+ } else {
+ cnv->charErrorBuffer[0]=(char)value;
+ cnv->charErrorBufferLength=1;
+
+ /* target overflow */
+ *pErrorCode=U_BUFFER_OVERFLOW_ERROR;
+ break;
+ }
+ }
+ continue;
+
+unassigned:
+ {
+ /*
+ * Try an extension mapping.
+ * Pass in no source because we don't have UTF-16 input.
+ * If we have a partial match on c, we will return and revert
+ * to UTF-8->UTF-16->charset conversion.
+ */
+ static const UChar nul=0;
+ const UChar *noSource=&nul;
+ c=_extFromU(cnv, cnv->sharedData,
+ c, &noSource, noSource,
+ &target, target+targetCapacity,
+ NULL, -1,
+ pFromUArgs->flush,
+ pErrorCode);
+
+ if(U_FAILURE(*pErrorCode)) {
+ /* not mappable or buffer overflow */
+ cnv->fromUChar32=c;
+ break;
+ } else if(cnv->preFromUFirstCP>=0) {
+ /*
+ * Partial match, return and revert to pivoting.
+ * In normal from-UTF-16 conversion, we would just continue
+ * but then exit the loop because the extension match would
+ * have consumed the source.
+ */
+ break;
+ } else {
+ /* a mapping was written to the target, continue */
+
+ /* recalculate the targetCapacity after an extension mapping */
+ targetCapacity=(int32_t)(pFromUArgs->targetLimit-(char *)target);
+ continue;
+ }
+ }
+ } else {
+ /* target is full */
+ *pErrorCode=U_BUFFER_OVERFLOW_ERROR;
+ break;
+ }
+ }
+
+ /*
+ * The sourceLimit may have been adjusted before the conversion loop
+ * to stop before a truncated sequence.
+ * If so, then collect the truncated sequence now.
+ */
+ if(U_SUCCESS(*pErrorCode) && source<(sourceLimit=(uint8_t *)pToUArgs->sourceLimit)) {
+ c=utf8->toUBytes[0]=b=*source++;
+ toULength=1;
+ toULimit=utf8_countTrailBytes[b]+1;
+ while(sourcetoUBytes[toULength++]=b=*source++;
+ c=(c<<6)+b;
+ }
+ utf8->toUnicodeStatus=c;
+ utf8->toULength=toULength;
+ utf8->mode=toULimit;
+ }
+
+ /* write back the updated pointers */
+ pToUArgs->source=(char *)source;
+ pFromUArgs->target=(char *)target;
+}
+
/* miscellaneous ------------------------------------------------------------ */
static void
@@ -3993,8 +5366,7 @@ ucnv_MBCSWriteSub(UConverterFromUnicodeArgs *pArgs,
/* reset the selector for the next code point */
cnv->useSubChar1=FALSE;
- switch(cnv->sharedData->mbcs.outputType) {
- case MBCS_OUTPUT_2_SISO:
+ if (cnv->sharedData->mbcs.outputType == MBCS_OUTPUT_2_SISO) {
p=buffer;
/* fromUnicodeStatus contains prevLength */
@@ -4020,16 +5392,11 @@ ucnv_MBCSWriteSub(UConverterFromUnicodeArgs *pArgs,
*pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
return;
}
- ucnv_cbFromUWriteBytes(pArgs,
- buffer, (int32_t)(p-buffer),
- offsetIndex, pErrorCode);
- break;
- default:
- ucnv_cbFromUWriteBytes(pArgs,
- subchar, length,
- offsetIndex, pErrorCode);
- break;
+ subchar=buffer;
+ length=(int32_t)(p-buffer);
}
+
+ ucnv_cbFromUWriteBytes(pArgs, subchar, length, offsetIndex, pErrorCode);
}
U_CFUNC UConverterType
@@ -4045,6 +5412,58 @@ ucnv_MBCSGetType(const UConverter* converter) {
return (UConverterType)UCNV_MBCS;
}
+static const UConverterImpl _SBCSUTF8Impl={
+ UCNV_MBCS,
+
+ ucnv_MBCSLoad,
+ ucnv_MBCSUnload,
+
+ ucnv_MBCSOpen,
+ NULL,
+ NULL,
+
+ ucnv_MBCSToUnicodeWithOffsets,
+ ucnv_MBCSToUnicodeWithOffsets,
+ ucnv_MBCSFromUnicodeWithOffsets,
+ ucnv_MBCSFromUnicodeWithOffsets,
+ ucnv_MBCSGetNextUChar,
+
+ ucnv_MBCSGetStarters,
+ ucnv_MBCSGetName,
+ ucnv_MBCSWriteSub,
+ NULL,
+ ucnv_MBCSGetUnicodeSet,
+
+ NULL,
+ ucnv_SBCSFromUTF8
+};
+
+static const UConverterImpl _DBCSUTF8Impl={
+ UCNV_MBCS,
+
+ ucnv_MBCSLoad,
+ ucnv_MBCSUnload,
+
+ ucnv_MBCSOpen,
+ NULL,
+ NULL,
+
+ ucnv_MBCSToUnicodeWithOffsets,
+ ucnv_MBCSToUnicodeWithOffsets,
+ ucnv_MBCSFromUnicodeWithOffsets,
+ ucnv_MBCSFromUnicodeWithOffsets,
+ ucnv_MBCSGetNextUChar,
+
+ ucnv_MBCSGetStarters,
+ ucnv_MBCSGetName,
+ ucnv_MBCSWriteSub,
+ NULL,
+ ucnv_MBCSGetUnicodeSet,
+
+ NULL,
+ ucnv_DBCSFromUTF8
+};
+
static const UConverterImpl _MBCSImpl={
UCNV_MBCS,
diff --git a/icuSources/common/ucnvmbcs.h b/icuSources/common/ucnvmbcs.h
index 7a118311..9e4f2957 100644
--- a/icuSources/common/ucnvmbcs.h
+++ b/icuSources/common/ucnvmbcs.h
@@ -1,7 +1,7 @@
/*
******************************************************************************
*
-* Copyright (C) 2000-2004, International Business Machines
+* Copyright (C) 2000-2007, International Business Machines
* Corporation and others. All Rights Reserved.
*
******************************************************************************
@@ -23,6 +23,7 @@
#include "unicode/ucnv.h"
#include "ucnv_cnv.h"
+#include "ucnv_ext.h"
/**
* ICU conversion (.cnv) data file structure, following the usual UDataInfo
@@ -41,6 +42,77 @@
* the same toUnicode structures, while the fromUnicode structures for SBCS
* differ from those for other MBCS-style converters.
*
+ * _MBCSHeader.version 5 is optional and not backward-compatible
+ * (as usual for changes in the major version field).
+ *
+ * Versions 5.m work like versions 4.m except:
+ * - The _MBCSHeader has variable length (and is always longer than in version 4).
+ * See the struct _MBCSHeader further description below.
+ * - There is a set of flags which indicate further incompatible changes.
+ * (Reader code must reject the file if it does not recognize them all.)
+ * - In particular, one of these flags indicates that most of the fromUnicode
+ * data is missing and must be reconstituted from the toUnicode data
+ * and from the utf8Friendly mbcsIndex at load time.
+ * (This only works with a utf8Friendly table.)
+ * In this case, makeconv may increase maxFastUChar automatically to U+FFFF.
+ *
+ * The first of these versions is 5.3, which is like 4.3 except for the differences above.
+ *
+ * When possible, makeconv continues to generate version 4.m files.
+ *
+ * _MBCSHeader.version 4.3 optionally modifies the fromUnicode data structures
+ * slightly and optionally adds a table for conversion to MBCS (non-SBCS)
+ * charsets.
+ *
+ * The modifications are to make the data utf8Friendly. Not every 4.3 file
+ * file contains utf8Friendly data.
+ * It is utf8Friendly if _MBCSHeader.version[2]!=0.
+ * In this case, the data structures are utf8Friendly up to the code point
+ * maxFastUChar=((_MBCSHeader.version[2]<<8)|0xff)
+ *
+ * A utf8Friendly file has fromUnicode stage 3 entries for code points up to
+ * maxFastUChar allocated in blocks of 64 for indexing with the 6 bits from
+ * a UTF-8 trail byte. ASCII is allocated linearly with 128 contiguous entries.
+ *
+ * In addition, a utf8Friendly MBCS file contains an additional
+ * uint16_t mbcsIndex[(maxFastUChar+1)>>6];
+ * which replaces the stage 1 and 2 tables for indexing with bits from the
+ * UTF-8 lead byte and middle trail byte. Unlike the older MBCS stage 2 table,
+ * the mbcsIndex does not contain roundtrip flags. Therefore, all fallbacks
+ * from code points up to maxFastUChar (and roundtrips to 0x00) are moved to
+ * the extension data structure. This also allows for faster roundtrip
+ * conversion from UTF-16.
+ *
+ * SBCS files do not contain an additional sbcsIndex[] array because the
+ * proportional size increase would be noticeable, but the runtime
+ * code builds one for the code point range for which the runtime conversion
+ * code is optimized.
+ *
+ * For SBCS, maxFastUChar should be at least U+0FFF. The initial makeconv
+ * implementation sets it to U+1FFF. Because the sbcsIndex is not stored in
+ * the file, a larger maxFastUChar only affects stage 3 block allocation size
+ * and is free in empty blocks. (Larger blocks with sparse contents cause larger
+ * files.) U+1FFF includes almost all of the small scripts.
+ * U+0FFF covers UTF-8 two-byte sequences and three-byte sequences starting with
+ * 0xe0. This includes most scripts with legacy SBCS charsets.
+ * The initial runtime implementation using 4.3 files only builds an sbcsIndex
+ * for code points up to U+0FFF.
+ *
+ * For MBCS, maxFastUChar should be at least U+D7FF (=initial value).
+ * This boundary is convenient because practically all of the commonly used
+ * characters are below it, and because it is the boundary to surrogate
+ * code points, above which special handling is necessary anyway.
+ * (Surrogate pair assembly for UTF-16, validity checking for UTF-8.)
+ *
+ * maxFastUChar could be up to U+FFFF to cover the whole BMP, which could be
+ * useful especially for conversion from UTF-8 when the input can be assumed
+ * to be valid, because the surrogate range would then not have to be
+ * checked.
+ * (With maxFastUChar=0xffff, makeconv would have to check for mbcsIndex value
+ * overflow because with the all-unassigned block 0 and nearly full mappings
+ * from the BMP it is theoretically possible that an index into stage 3
+ * exceeds 16 bits.)
+ *
* _MBCSHeader.version 4.2 adds an optional conversion extension data structure.
* If it is present, then an ICU version reading header versions 4.0 or 4.1
* will be able to use the base table and ignore the extension.
@@ -60,7 +132,7 @@
* struct _MBCSHeader (see the definition in this header file below)
* contains 32-bit fields as follows:
* 8 values:
- * 0 uint8_t[4] MBCS version in UVersionInfo format (currently 4.2.0.0)
+ * 0 uint8_t[4] MBCS version in UVersionInfo format (currently 4.3.x.0)
* 1 uint32_t countStates
* 2 uint32_t countToUFallbacks
* 3 uint32_t offsetToUCodeUnits
@@ -74,6 +146,26 @@
* 7 uint32_t fromUBytesLength -- _MBCSHeader.version 4.1 (ICU 2.4) and higher
* counts bytes in fromUBytes[]
*
+ * New and required in version 5:
+ * 8 uint32_t options, bits:
+ * 31..16 reserved for flags that can be added without breaking
+ * backward compatibility
+ * 15.. 6 reserved for flags whose addition will break
+ * backward compatibility
+ * 6 MBCS_OPT_FROM_U -- if set,
+ * then most of the fromUnicode data is omitted;
+ * fullStage2Length is present and the missing
+ * bottom part of stage 2 must be reconstituted from
+ * the toUnicode data;
+ * stage 3 is missing completely as well;
+ * not used for SBCS tables
+ * 5.. 0 length of the _MBCSHeader (number of uint32_t)
+ *
+ * New and optional in version 5:
+ * 9 uint32_t fullStage2Length: used if MBCS_OPT_FROM_U is set
+ * specifies the full length of stage 2
+ * including the omitted part
+ *
* if(outputType==MBCS_OUTPUT_EXT_ONLY) {
* -- base table name for extension-only table
* char baseTableName[variable]; -- with NUL plus padding for 4-alignment
@@ -100,7 +192,7 @@
* -- BMP-only tables have a smaller stage 1 table
* uint16_t fromUTable[0x40]; (32-bit-aligned)
* }
- *
+ *
* -- stage 2 tables
* length determined by top of stage 1 and bottom of stage 3 tables
* if(outputType==MBCS_OUTPUT_1) {
@@ -109,17 +201,33 @@
* } else {
* -- DBCS, MBCS, EBCDIC_STATEFUL, ...: roundtrip flags and indexes
* uint32_t stage 2 flags and indexes[?];
+ * if(options&MBCS_OPT_NO_FROM_U) {
+ * stage 2 really has length fullStage2Length
+ * and the omitted lower part must be reconstituted from
+ * the toUnicode data
+ * }
* }
- *
+ *
* -- stage 3 tables with byte results
* if(outputType==MBCS_OUTPUT_1) {
* -- SBCS: each 16-bit result contains flags and the result byte, see ucnvmbcs.c
* uint16_t fromUBytes[fromUBytesLength/2];
- * } else {
+ * } else if(!(options&MBCS_OPT_NO_FROM_U)) {
* -- DBCS, MBCS, EBCDIC_STATEFUL, ... 2/3/4 bytes result, see ucnvmbcs.c
* uint8_t fromUBytes[fromUBytesLength]; or
* uint16_t fromUBytes[fromUBytesLength/2]; or
* uint32_t fromUBytes[fromUBytesLength/4];
+ * } else {
+ * fromUBytes[] must be reconstituted from the toUnicode data
+ * }
+ *
+ * -- optional utf8Friendly mbcsIndex -- _MBCSHeader.version 4.3 (ICU 3.8) and higher
+ * if(outputType!=MBCS_OUTPUT_1 &&
+ * _MBCSHeader.version[1]>=3 &&
+ * (maxFastUChar=_MBCSHeader.version[2])!=0
+ * ) {
+ * maxFastUChar=(maxFastUChar<<8)|0xff;
+ * uint16_t mbcsIndex[(maxFastUChar+1)>>6];
* }
* }
*
@@ -180,9 +288,17 @@ enum {
#define MBCS_ENTRY_FINAL_VALUE(entry) ((entry)&0xfffff)
#define MBCS_ENTRY_FINAL_VALUE_16(entry) (uint16_t)(entry)
+#define IS_ASCII_ROUNDTRIP(b, asciiRoundtrips) (((asciiRoundtrips) & (1<<((b)>>2)))!=0)
+
/* single-byte fromUnicode: get the 16-bit result word */
#define MBCS_SINGLE_RESULT_FROM_U(table, results, c) (results)[ (table)[ (table)[(c)>>10] +(((c)>>4)&0x3f) ] +((c)&0xf) ]
+/* single-byte fromUnicode using the sbcsIndex */
+#define SBCS_RESULT_FROM_LOW_BMP(table, results, c) (results)[ (table)[(c)>>6] +((c)&0x3f) ]
+
+/* single-byte fromUTF8 using the sbcsIndex; l and t must be masked externally; can be l=0 and t<=0x7f */
+#define SBCS_RESULT_FROM_UTF8(table, results, l, t) (results)[ (table)[l] +(t) ]
+
/* multi-byte fromUnicode: get the 32-bit stage 2 entry */
#define MBCS_STAGE_2_FROM_U(table, c) ((const uint32_t *)(table))[ (table)[(c)>>10] +(((c)>>4)&0x3f) ]
#define MBCS_FROM_U_IS_ROUNDTRIP(stage2Entry, c) ( ((stage2Entry) & ((uint32_t)1<< (16+((c)&0xf)) )) !=0)
@@ -192,6 +308,12 @@ enum {
#define MBCS_POINTER_3_FROM_STAGE_2(bytes, stage2Entry, c) ((bytes)+(16*(uint32_t)(uint16_t)(stage2Entry)+((c)&0xf))*3)
+/* double-byte fromUnicode using the mbcsIndex */
+#define DBCS_RESULT_FROM_MOST_BMP(table, results, c) (results)[ (table)[(c)>>6] +((c)&0x3f) ]
+
+/* double-byte fromUTF8 using the mbcsIndex; l and t1 combined into lt1; lt1 and t2 must be masked externally */
+#define DBCS_RESULT_FROM_UTF8(table, results, lt1, t2) (results)[ (table)[lt1] +(t2) ]
+
/**
* MBCS output types for conversions from Unicode.
@@ -226,9 +348,19 @@ typedef struct {
UChar32 codePoint;
} _MBCSToUFallback;
+/** Constants for fast and UTF-8-friendly conversion. */
+enum {
+ SBCS_FAST_MAX=0x0fff, /* maximum code point with UTF-8-friendly SBCS runtime code, see makeconv SBCS_UTF8_MAX */
+ SBCS_FAST_LIMIT=SBCS_FAST_MAX+1, /* =0x1000 */
+ MBCS_FAST_MAX=0xd7ff, /* maximum code point with UTF-8-friendly MBCS runtime code, see makeconv MBCS_UTF8_MAX */
+ MBCS_FAST_LIMIT=MBCS_FAST_MAX+1 /* =0xd800 */
+};
+
/**
* This is the MBCS part of the UConverterTable union (a runtime data structure).
* It keeps all the per-converter data and points into the loaded mapping tables.
+ *
+ * utf8Friendly data structures added with _MBCSHeader.version 4.3
*/
typedef struct UConverterMBCSTable {
/* toUnicode */
@@ -242,10 +374,20 @@ typedef struct UConverterMBCSTable {
/* fromUnicode */
const uint16_t *fromUnicodeTable;
+ const uint16_t *mbcsIndex; /* for fast conversion from most of BMP to MBCS (utf8Friendly data) */
+ uint16_t sbcsIndex[SBCS_FAST_LIMIT>>6]; /* for fast conversion from low BMP to SBCS (utf8Friendly data) */
const uint8_t *fromUnicodeBytes;
- uint8_t *swapLFNLFromUnicodeBytes; /* for swaplfnl */
+ uint8_t *swapLFNLFromUnicodeBytes; /* for swaplfnl */
uint32_t fromUBytesLength;
uint8_t outputType, unicodeMask;
+ UBool utf8Friendly; /* for utf8Friendly data */
+ UChar maxFastUChar; /* for utf8Friendly data */
+
+ /* roundtrips */
+ uint32_t asciiRoundtrips;
+
+ /* reconstituted data that was omitted from the .cnv file */
+ uint8_t *reconstitutedData;
/* converter name for swaplfnl */
char *swapLFNLName;
@@ -255,6 +397,26 @@ typedef struct UConverterMBCSTable {
const int32_t *extIndexes;
} UConverterMBCSTable;
+enum {
+ MBCS_OPT_LENGTH_MASK=0x3f,
+ MBCS_OPT_NO_FROM_U=0x40,
+ /*
+ * If any of the following options bits are set,
+ * then the file must be rejected.
+ */
+ MBCS_OPT_INCOMPATIBLE_MASK=0xffc0,
+ /*
+ * Remove bits from this mask as more options are recognized
+ * by all implementations that use this constant.
+ */
+ MBCS_OPT_UNKNOWN_INCOMPATIBLE_MASK=0xff80
+};
+
+enum {
+ MBCS_HEADER_V4_LENGTH=8,
+ MBCS_HEADER_V5_MIN_LENGTH=9
+};
+
/**
* MBCS data header. See data format description above.
*/
@@ -267,6 +429,12 @@ typedef struct {
offsetFromUBytes,
flags,
fromUBytesLength;
+
+ /* new and required in version 5 */
+ uint32_t options;
+
+ /* new and optional in version 5; used if options&MBCS_OPT_NO_FROM_U */
+ uint32_t fullStage2Length; /* number of 32-bit units */
} _MBCSHeader;
/*
@@ -363,21 +531,6 @@ U_CFUNC void
ucnv_MBCSToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs,
UErrorCode *pErrorCode);
-/*
- * Internal function returning a UnicodeSet for toUnicode() conversion.
- * Currently only used for ISO-2022-CN, and only handles roundtrip mappings.
- * In the future, if we add support for reverse-fallback sets, this function
- * needs to be updated, and called for each initial state.
- * Does not currently handle extensions.
- * Does not empty the set first.
- */
-U_CFUNC void
-ucnv_MBCSGetUnicodeSetForBytes(const UConverterSharedData *sharedData,
- const USetAdder *sa,
- UConverterUnicodeSet which,
- uint8_t state, int32_t lowByte, int32_t highByte,
- UErrorCode *pErrorCode);
-
/*
* Internal function returning a UnicodeSet for toUnicode() conversion.
* Currently only used for ISO-2022-CN, and only handles roundtrip mappings.
@@ -388,9 +541,22 @@ ucnv_MBCSGetUnicodeSetForBytes(const UConverterSharedData *sharedData,
*/
U_CFUNC void
ucnv_MBCSGetUnicodeSetForUnicode(const UConverterSharedData *sharedData,
- const USetAdder *sa,
- UConverterUnicodeSet which,
- UErrorCode *pErrorCode);
+ const USetAdder *sa,
+ UConverterUnicodeSet which,
+ UErrorCode *pErrorCode);
+
+/*
+ * Same as ucnv_MBCSGetUnicodeSetForUnicode() but
+ * the set can be filtered by encoding scheme.
+ * Used by stateful converters which share regular conversion tables
+ * but only use a subset of their mappings.
+ */
+U_CFUNC void
+ucnv_MBCSGetFilteredUnicodeSetForUnicode(const UConverterSharedData *sharedData,
+ const USetAdder *sa,
+ UConverterUnicodeSet which,
+ UConverterSetFilter filter,
+ UErrorCode *pErrorCode);
#endif
diff --git a/icuSources/common/udata.c b/icuSources/common/udata.c
index 5ffd8507..bb0da52f 100644
--- a/icuSources/common/udata.c
+++ b/icuSources/common/udata.c
@@ -1,7 +1,7 @@
/*
******************************************************************************
*
-* Copyright (C) 1999-2006, International Business Machines
+* Copyright (C) 1999-2008, International Business Machines
* Corporation and others. All Rights Reserved.
*
******************************************************************************
@@ -209,15 +209,17 @@ static UHashtable *udata_getHashTable() {
UBool cacheIsInitialized;
UHashtable *tHT = NULL;
- umtx_lock(NULL);
- cacheIsInitialized = (gCommonDataCache != NULL);
- umtx_unlock(NULL);
+ UMTX_CHECK(NULL, (gCommonDataCache != NULL), cacheIsInitialized);
if (cacheIsInitialized) {
return gCommonDataCache;
}
tHT = uhash_open(uhash_hashChars, uhash_compareChars, NULL, &err);
+ /* Check for null pointer. */
+ if (tHT == NULL) {
+ return NULL; /* TODO: Handle this error better. */
+ }
uhash_setValueDeleter(tHT, DataCacheElement_deleter);
umtx_lock(NULL);
@@ -479,6 +481,10 @@ static void udata_pathiter_init(UDataPathIterator *iter, const char *path, const
} else {
if(uprv_strlen(pkg) + 2 > U_DATA_PATHITER_BUFSIZ) {
iter->packageStub = uprv_malloc(uprv_strlen(pkg)+2);
+ /* Check for null pointer. */
+ if (iter->packageStub == NULL) {
+ return;
+ }
} else {
iter->packageStub = iter->packageStubBuf;
}
diff --git a/icuSources/common/uhash.c b/icuSources/common/uhash.c
index 7907205d..ce06d2ca 100644
--- a/icuSources/common/uhash.c
+++ b/icuSources/common/uhash.c
@@ -1,6 +1,6 @@
/*
******************************************************************************
-* Copyright (C) 1997-2006, International Business Machines
+* Copyright (C) 1997-2008, International Business Machines
* Corporation and others. All Rights Reserved.
******************************************************************************
* Date Name Description
@@ -389,13 +389,12 @@ _uhash_find(const UHashtable *hash, UHashTok key,
* arrays will be valid.
*/
static void
-_uhash_rehash(UHashtable *hash) {
+_uhash_rehash(UHashtable *hash, UErrorCode *status) {
UHashElement *old = hash->elements;
int32_t oldLength = hash->length;
int32_t newPrimeIndex = hash->primeIndex;
int32_t i;
- UErrorCode status = U_ZERO_ERROR;
if (hash->count > hash->highWaterMark) {
if (++newPrimeIndex >= PRIMES_LENGTH) {
@@ -409,9 +408,9 @@ _uhash_rehash(UHashtable *hash) {
return;
}
- _uhash_allocate(hash, newPrimeIndex, &status);
+ _uhash_allocate(hash, newPrimeIndex, status);
- if (U_FAILURE(status)) {
+ if (U_FAILURE(*status)) {
hash->elements = old;
hash->length = oldLength;
return;
@@ -445,11 +444,13 @@ _uhash_remove(UHashtable *hash,
UHashTok result;
UHashElement* e = _uhash_find(hash, key, hash->keyHasher(key));
U_ASSERT(e != NULL);
- result.pointer = NULL; result.integer = 0;
+ result.pointer = NULL;
+ result.integer = 0;
if (!IS_EMPTY_OR_DELETED(e->hashcode)) {
result = _uhash_internalRemoveElement(hash, e);
if (hash->count < hash->lowWaterMark) {
- _uhash_rehash(hash);
+ UErrorCode status = U_ZERO_ERROR;
+ _uhash_rehash(hash, &status);
}
}
return result;
@@ -483,7 +484,10 @@ _uhash_put(UHashtable *hash,
return _uhash_remove(hash, key);
}
if (hash->count > hash->highWaterMark) {
- _uhash_rehash(hash);
+ _uhash_rehash(hash, status);
+ if (U_FAILURE(*status)) {
+ goto err;
+ }
}
hashcode = (*hash->keyHasher)(key);
@@ -618,10 +622,11 @@ uhash_setValueDeleter(UHashtable *hash, UObjectDeleter *fn) {
U_CAPI void U_EXPORT2
uhash_setResizePolicy(UHashtable *hash, enum UHashResizePolicy policy) {
+ UErrorCode status = U_ZERO_ERROR;
_uhash_internalSetResizePolicy(hash, policy);
hash->lowWaterMark = (int32_t)(hash->length * hash->lowWaterRatio);
hash->highWaterMark = (int32_t)(hash->length * hash->highWaterRatio);
- _uhash_rehash(hash);
+ _uhash_rehash(hash, &status);
}
U_CAPI int32_t U_EXPORT2
@@ -877,12 +882,23 @@ uhash_equals(const UHashtable* hash1, const UHashtable* hash2){
return TRUE;
}
- if(hash1==NULL || hash2==NULL){
- return FALSE;
- }
- /* make sure that we are comparing 2 hashes of the same type */
- if( hash1->keyComparator != hash2->keyComparator ||
- hash2->valueComparator != hash2->valueComparator){
+ /*
+ * Make sure that we are comparing 2 valid hashes of the same type
+ * with valid comparison functions.
+ * Without valid comparison functions, a binary comparison
+ * of the hash values will yield random results on machines
+ * with 64-bit pointers and 32-bit integer hashes.
+ * A valueComparator is normally optional.
+ */
+ if (hash1==NULL || hash2==NULL ||
+ hash1->keyComparator != hash2->keyComparator ||
+ hash1->valueComparator != hash2->valueComparator ||
+ hash1->valueComparator == NULL)
+ {
+ /*
+ Normally we would return an error here about incompatible hash tables,
+ but we return FALSE instead.
+ */
return FALSE;
}
diff --git a/icuSources/common/uhash.h b/icuSources/common/uhash.h
index b5f3a67d..5d2be92f 100644
--- a/icuSources/common/uhash.h
+++ b/icuSources/common/uhash.h
@@ -1,6 +1,6 @@
/*
******************************************************************************
-* Copyright (C) 1997-2006, International Business Machines
+* Copyright (C) 1997-2007, International Business Machines
* Corporation and others. All Rights Reserved.
******************************************************************************
* Date Name Description
@@ -173,8 +173,6 @@ struct UHashtable {
* never let count == length (see code). */
int32_t length; /* The physical size of the arrays hashes, keys
* and values. Must be prime. */
- int32_t primeIndex; /* Index into our prime table for length.
- * length == PRIMES[primeIndex] */
/* Rehashing thresholds */
@@ -183,6 +181,8 @@ struct UHashtable {
float highWaterRatio; /* 0..1; high water as a fraction of length */
float lowWaterRatio; /* 0..1; low water as a fraction of length */
+ int8_t primeIndex; /* Index into our prime table for length.
+ * length == PRIMES[primeIndex] */
UBool allocated; /* Was this UHashtable allocated? */
};
typedef struct UHashtable UHashtable;
diff --git a/icuSources/common/uidna.cpp b/icuSources/common/uidna.cpp
index 5b030a0f..b86ed26b 100644
--- a/icuSources/common/uidna.cpp
+++ b/icuSources/common/uidna.cpp
@@ -24,6 +24,7 @@
#include "punycode.h"
#include "ustr_imp.h"
#include "cmemory.h"
+#include "uassert.h"
#include "sprpimpl.h"
/* it is official IDNA ACE Prefix is "xn--" */
@@ -31,15 +32,19 @@ static const UChar ACE_PREFIX[] ={ 0x0078,0x006E,0x002d,0x002d } ;
#define ACE_PREFIX_LENGTH 4
#define MAX_LABEL_LENGTH 63
-#define HYPHEN 0x002D
-/* The Max length of the labels should not be more than 64 */
-#define MAX_LABEL_BUFFER_SIZE 100
-#define MAX_IDN_BUFFER_SIZE 300
+/* The Max length of the labels should not be more than MAX_LABEL_LENGTH */
+#define MAX_LABEL_BUFFER_SIZE 100
+
+#define MAX_DOMAIN_NAME_LENGTH 255
+/* The Max length of the domain names should not be more than MAX_DOMAIN_NAME_LENGTH */
+#define MAX_IDN_BUFFER_SIZE MAX_DOMAIN_NAME_LENGTH+1
-#define CAPITAL_A 0x0041
-#define CAPITAL_Z 0x005A
#define LOWER_CASE_DELTA 0x0020
+#define HYPHEN 0x002D
#define FULL_STOP 0x002E
+#define CAPITAL_A 0x0041
+#define CAPITAL_Z 0x005A
+
#define DATA_FILE_NAME "uidna"
inline static UChar
@@ -139,9 +144,8 @@ static inline UBool isLabelSeparator(UChar ch){
// if *limit == separator then the length returned does not include
// the separtor.
static inline int32_t
-getNextSeparator(UChar *src,int32_t srcLength,
- UChar **limit,
- UBool *done){
+getNextSeparator(UChar *src, int32_t srcLength,
+ UChar **limit, UBool *done){
if(srcLength == -1){
int32_t i;
for(i=0 ; ;i++){
@@ -194,8 +198,10 @@ _internal_toASCII(const UChar* src, int32_t srcLength,
int32_t options,
UStringPrepProfile* nameprep,
UParseError* parseError,
- UErrorCode* status){
+ UErrorCode* status)
+{
+ // TODO Revisit buffer handling. The label should not be over 63 ASCII characters. ICU4J may need to be updated too.
UChar b1Stack[MAX_LABEL_BUFFER_SIZE], b2Stack[MAX_LABEL_BUFFER_SIZE];
//initialize pointers to stack buffers
UChar *b1 = b1Stack, *b2 = b2Stack;
@@ -369,7 +375,7 @@ _internal_toASCII(const UChar* src, int32_t srcLength,
goto CLEANUP;
}
}
- // step 8: verify the length of lable
+ // step 8: verify the length of label
if(reqLength > MAX_LABEL_LENGTH){
*status = U_IDNA_LABEL_TOO_LONG_ERROR;
}
@@ -392,12 +398,14 @@ _internal_toUnicode(const UChar* src, int32_t srcLength,
int32_t options,
UStringPrepProfile* nameprep,
UParseError* parseError,
- UErrorCode* status){
+ UErrorCode* status)
+{
//get the options
- UBool useSTD3ASCIIRules = (UBool)((options & UIDNA_USE_STD3_RULES) != 0);
+ //UBool useSTD3ASCIIRules = (UBool)((options & UIDNA_USE_STD3_RULES) != 0);
int32_t namePrepOptions = ((options & UIDNA_ALLOW_UNASSIGNED) != 0) ? USPREP_ALLOW_UNASSIGNED: 0;
-
+
+ // TODO Revisit buffer handling. The label should not be over 63 ASCII characters. ICU4J may need to be updated too.
UChar b1Stack[MAX_LABEL_BUFFER_SIZE], b2Stack[MAX_LABEL_BUFFER_SIZE], b3Stack[MAX_LABEL_BUFFER_SIZE];
//initialize pointers to stack buffers
@@ -412,8 +420,8 @@ _internal_toUnicode(const UChar* src, int32_t srcLength,
UBool* caseFlags = NULL;
UBool srcIsASCII = TRUE;
- UBool srcIsLDH = TRUE;
- int32_t failPos =0;
+ /*UBool srcIsLDH = TRUE;
+ int32_t failPos =0;*/
// step 1: find out if all the codepoints in src are ASCII
if(srcLength==-1){
@@ -421,31 +429,31 @@ _internal_toUnicode(const UChar* src, int32_t srcLength,
for(;src[srcLength]!=0;){
if(src[srcLength]> 0x7f){
srcIsASCII = FALSE;
- }else if(isLDHChar(src[srcLength])==FALSE){
+ }/*else if(isLDHChar(src[srcLength])==FALSE){
// here we do not assemble surrogates
// since we know that LDH code points
// are in the ASCII range only
srcIsLDH = FALSE;
failPos = srcLength;
- }
+ }*/
srcLength++;
}
}else if(srcLength > 0){
for(int32_t j=0; j 0x7f){
srcIsASCII = FALSE;
- }else if(isLDHChar(src[j])==FALSE){
+ }/*else if(isLDHChar(src[j])==FALSE){
// here we do not assemble surrogates
// since we know that LDH code points
// are in the ASCII range only
srcIsLDH = FALSE;
failPos = j;
- }
+ }*/
}
}else{
return 0;
}
-
+
if(srcIsASCII == FALSE){
// step 2: process the string
b1Len = usprep_prepare(nameprep, src, srcLength, b1, b1Capacity, namePrepOptions, parseError, status);
@@ -473,16 +481,22 @@ _internal_toUnicode(const UChar* src, int32_t srcLength,
b1Len = srcLength;
}
+ // The RFC states that
+ //
+ // ToUnicode never fails. If any step fails, then the original input
+ // is returned immediately in that step.
+ //
+
//step 3: verify ACE Prefix
- if(startsWithPrefix(src,srcLength)){
-
+ if(startsWithPrefix(b1,b1Len)){
+
//step 4: Remove the ACE Prefix
b1Prime = b1 + ACE_PREFIX_LENGTH;
b1PrimeLen = b1Len - ACE_PREFIX_LENGTH;
//step 5: Decode using punycode
b2Len = u_strFromPunycode(b1Prime, b1PrimeLen, b2, b2Capacity, caseFlags,status);
-
+
if(*status == U_BUFFER_OVERFLOW_ERROR){
// redo processing of string
/* we do not have enough room so grow the buffer*/
@@ -493,14 +507,14 @@ _internal_toUnicode(const UChar* src, int32_t srcLength,
}
*status = U_ZERO_ERROR; // reset error
-
+
b2Len = u_strFromPunycode(b1Prime, b1PrimeLen, b2, b2Len, caseFlags, status);
-
}
-
+
+
//step 6:Apply toASCII
- b3Len = uidna_toASCII(b2, b2Len, b3, b3Capacity,options,parseError, status);
-
+ b3Len = uidna_toASCII(b2, b2Len, b3, b3Capacity, options, parseError, status);
+
if(*status == U_BUFFER_OVERFLOW_ERROR){
// redo processing of string
/* we do not have enough room so grow the buffer*/
@@ -511,11 +525,10 @@ _internal_toUnicode(const UChar* src, int32_t srcLength,
}
*status = U_ZERO_ERROR; // reset error
-
+
b3Len = uidna_toASCII(b2,b2Len,b3,b3Len,options,parseError, status);
-
+
}
-
//bail out on error
if(U_FAILURE(*status)){
goto CLEANUP;
@@ -523,7 +536,8 @@ _internal_toUnicode(const UChar* src, int32_t srcLength,
//step 7: verify
if(compareCaseInsensitiveASCII(b1, b1Len, b3, b3Len) !=0){
- *status = U_IDNA_VERIFICATION_ERROR;
+ // Cause the original to be returned.
+ *status = U_IDNA_VERIFICATION_ERROR;
goto CLEANUP;
}
@@ -532,14 +546,16 @@ _internal_toUnicode(const UChar* src, int32_t srcLength,
if(b2Len <= destCapacity) {
uprv_memmove(dest, b2, b2Len * U_SIZEOF_UCHAR);
}
- }else{
+ }
+ else{
+ // See the start of this if statement for why this is commented out.
// verify that STD3 ASCII rules are satisfied
- if(useSTD3ASCIIRules == TRUE){
- if( srcIsLDH == FALSE /* source contains some non-LDH characters */
+ /*if(useSTD3ASCIIRules == TRUE){
+ if( srcIsLDH == FALSE // source contains some non-LDH characters
|| src[0] == HYPHEN || src[srcLength-1] == HYPHEN){
*status = U_IDNA_STD3_ASCII_RULES_ERROR;
- /* populate the parseError struct */
+ // populate the parseError struct
if(srcIsLDH==FALSE){
// failPos is always set the index of failure
uprv_syntaxError(src,failPos, srcLength,parseError);
@@ -553,7 +569,8 @@ _internal_toUnicode(const UChar* src, int32_t srcLength,
goto CLEANUP;
}
- }
+ }*/
+ // just return the source
//copy the source to destination
if(srcLength <= destCapacity){
uprv_memmove(dest,src,srcLength * U_SIZEOF_UCHAR);
@@ -561,6 +578,7 @@ _internal_toUnicode(const UChar* src, int32_t srcLength,
reqLength = srcLength;
}
+
CLEANUP:
if(b1 != b1Stack && b1!=src){
@@ -570,8 +588,7 @@ CLEANUP:
uprv_free(b2);
}
uprv_free(caseFlags);
-
-
+
// The RFC states that
//
// ToUnicode never fails. If any step fails, then the original input
@@ -581,13 +598,12 @@ CLEANUP:
if(U_FAILURE(*status)){
//copy the source to destination
if(dest && srcLength <= destCapacity){
- if(srcLength == -1) {
- uprv_memmove(dest,src,u_strlen(src)* U_SIZEOF_UCHAR);
- } else {
+ // srcLength should have already been set earlier.
+ U_ASSERT(srcLength >= 0);
uprv_memmove(dest,src,srcLength * U_SIZEOF_UCHAR);
- }
}
reqLength = srcLength;
+ *status = U_ZERO_ERROR;
}
return u_terminateUChars(dest, destCapacity, reqLength, status);
@@ -636,7 +652,7 @@ uidna_toUnicode(const UChar* src, int32_t srcLength,
*status = U_ILLEGAL_ARGUMENT_ERROR;
return 0;
}
-
+
UStringPrepProfile* nameprep = usprep_open(NULL, DATA_FILE_NAME, status);
if(U_FAILURE(*status)){
@@ -716,6 +732,7 @@ uidna_IDNToASCII( const UChar *src, int32_t srcLength,
// should never occur
remainingDestCapacity = 0;
}
+
if(done == TRUE){
break;
}
@@ -725,7 +742,7 @@ uidna_IDNToASCII( const UChar *src, int32_t srcLength,
*currentDest++ = FULL_STOP;
remainingDestCapacity--;
}
- reqLength++;
+ reqLength++;
labelStart = delimiter;
if(remainingLen >0 ){
@@ -733,7 +750,11 @@ uidna_IDNToASCII( const UChar *src, int32_t srcLength,
}
}
-
+
+ if(reqLength > MAX_DOMAIN_NAME_LENGTH){
+ *status = U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR;
+ }
+
usprep_close(nameprep);
return u_terminateUChars(dest, destCapacity, reqLength, status);
@@ -771,26 +792,31 @@ uidna_IDNToUnicode( const UChar* src, int32_t srcLength,
int32_t labelLen = 0, labelReqLength = 0;
UBool done = FALSE;
-
for(;;){
labelLen = getNextSeparator(labelStart,remainingLen, &delimiter,&done);
- if(labelLen==0 && done==FALSE){
+ // The RFC states that
+ //
+ // ToUnicode never fails. If any step fails, then the original input
+ // is returned immediately in that step.
+ //
+ // _internal_toUnicode will copy the label.
+ /*if(labelLen==0 && done==FALSE){
*status = U_IDNA_ZERO_LENGTH_LABEL_ERROR;
- }
+ break;
+ }*/
+
labelReqLength = _internal_toUnicode(labelStart, labelLen,
currentDest, remainingDestCapacity,
options, nameprep,
parseError, status);
if(*status == U_BUFFER_OVERFLOW_ERROR){
-
*status = U_ZERO_ERROR; // reset error
remainingDestCapacity = 0;
}
-
if(U_FAILURE(*status)){
break;
}
@@ -810,11 +836,12 @@ uidna_IDNToUnicode( const UChar* src, int32_t srcLength,
}
// add the label separator
+ // Unlike the ToASCII operation we don't normalize the label separators
if(remainingDestCapacity > 0){
- *currentDest++ = FULL_STOP;
+ *currentDest++ = *(labelStart + labelLen);
remainingDestCapacity--;
}
- reqLength++;
+ reqLength++;
labelStart = delimiter;
if(remainingLen >0 ){
@@ -822,7 +849,11 @@ uidna_IDNToUnicode( const UChar* src, int32_t srcLength,
}
}
-
+
+ if(reqLength > MAX_DOMAIN_NAME_LENGTH){
+ *status = U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR;
+ }
+
usprep_close(nameprep);
return u_terminateUChars(dest, destCapacity, reqLength, status);
diff --git a/icuSources/common/uinit.c b/icuSources/common/uinit.c
index a70e51d0..1f2c6d6b 100644
--- a/icuSources/common/uinit.c
+++ b/icuSources/common/uinit.c
@@ -1,7 +1,7 @@
/*
******************************************************************************
* *
-* Copyright (C) 2001-2006, International Business Machines *
+* Copyright (C) 2001-2007, International Business Machines *
* Corporation and others. All Rights Reserved. *
* *
******************************************************************************
@@ -48,9 +48,9 @@ u_cleanup(void)
cmemory_cleanup(); /* undo any heap functions set by u_setMemoryFunctions(). */
gICUInitialized = FALSE;
UTRACE_EXIT(); /* Must be before utrace_cleanup(), which turns off tracing. */
-#if U_ENABLE_TRACING
+/*#if U_ENABLE_TRACING*/
utrace_cleanup();
-#endif
+/*#endif*/
}
/*
@@ -85,7 +85,7 @@ u_init(UErrorCode *status) {
* available.
*/
#if !UCONFIG_NO_CONVERSION
- ucnv_io_countTotalAliases(status);
+ ucnv_io_countKnownConverters(status);
#endif
#else
/* Do any required init for services that don't have open operations
diff --git a/icuSources/common/uiter.cpp b/icuSources/common/uiter.cpp
index bfe92c6c..bec7190c 100644
--- a/icuSources/common/uiter.cpp
+++ b/icuSources/common/uiter.cpp
@@ -21,6 +21,8 @@
#include "unicode/uiter.h"
#include "cstring.h"
+U_NAMESPACE_USE
+
#define IS_EVEN(n) (((n)&1)==0)
#define IS_POINTER_EVEN(p) IS_EVEN((size_t)p)
diff --git a/icuSources/common/uloc.c b/icuSources/common/uloc.c
index a11193cb..c1ac14e3 100644
--- a/icuSources/common/uloc.c
+++ b/icuSources/common/uloc.c
@@ -1,6 +1,6 @@
/*
**********************************************************************
-* Copyright (C) 1997-2007, International Business Machines
+* Copyright (C) 1997-2008, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
*
@@ -151,7 +151,7 @@ static const char * const LANGUAGES[] = {
"mo", "moh", "mos", "mr", "ms", "mt", "mul", "mun",
"mus", "mwl", "mwr", "my", "myn", "myv", "na", "nah", "nai", "nap",
"nb", "nd", "nds", "ne", "new", "ng", "nia", "nic",
- "niu", "nl", "nn", "no", "nog", "non", "nr", "nso", "nub",
+ "niu", "nl", "nn", "no", "nog", "non", "nqo", "nr", "nso", "nub",
"nv", "nwc", "ny", "nym", "nyn", "nyo", "nzi", "oc", "oj",
"om", "or", "os", "osa", "ota", "oto", "pa", "paa",
"pag", "pal", "pam", "pap", "pau", "peo", "phi", "phn",
@@ -163,15 +163,15 @@ static const char * const LANGUAGES[] = {
"sk", "sl", "sla", "sm", "sma", "smi", "smj", "smn",
"sms", "sn", "snk", "so", "sog", "son", "sq", "sr",
"srn", "srr", "ss", "ssa", "st", "su", "suk", "sus", "sux",
- "sv", "sw", "syr", "ta", "tai", "te", "tem", "ter",
+ "sv", "sw", "syc", "syr", "ta", "tai", "te", "tem", "ter",
"tet", "tg", "th", "ti", "tig", "tiv", "tk", "tkl",
"tl", "tlh", "tli", "tmh", "tn", "to", "tog", "tpi", "tr",
"ts", "tsi", "tt", "tum", "tup", "tut", "tvl", "tw",
"ty", "tyv", "udm", "ug", "uga", "uk", "umb", "und", "ur",
"uz", "vai", "ve", "vi", "vo", "vot", "wa", "wak",
"wal", "war", "was", "wen", "wo", "xal", "xh", "yao", "yap",
- "yi", "yo", "ypk", "za", "zap", "zen", "zh", "znd",
- "zu", "zun", "zxx",
+ "yi", "yo", "ypk", "za", "zap", "zbl", "zen", "zh", "znd",
+ "zu", "zun", "zxx", "zza",
NULL,
"in", "iw", "ji", "jw", "sh", /* obsolete language codes */
NULL
@@ -232,8 +232,8 @@ static const char * const LANGUAGES_3[] = {
"enm", "epo", "spa", "est", "eus", "ewo", "fas",
/* "fan", "fat", "ff", "fi", "fil", "fiu", "fj", "fo", "fon", */
"fan", "fat", "ful", "fin", "fil", "fiu", "fij", "fao", "fon",
-/* "fr", "frm", "fro", "fur", "frr", "frs", "fy", "ga", "gaa", "gay", */
- "fra", "frm", "fro", "fur", "frr", "frs", "fry", "gle", "gaa", "gay",
+/* "fr", "frm", "fro", "frr", "frs", "fur", "fy", "ga", "gaa", "gay", */
+ "fra", "frm", "fro", "frr", "frs", "fur", "fry", "gle", "gaa", "gay",
/* "gba", "gd", "gem", "gez", "gil", "gl", "gmh", "gn", */
"gba", "gla", "gem", "gez", "gil", "glg", "gmh", "grn",
/* "goh", "gon", "gor", "got", "grb", "grc", "gsw", "gu", "gv", */
@@ -272,8 +272,8 @@ static const char * const LANGUAGES_3[] = {
"mus", "mwl", "mwr", "mya", "myn", "myv", "nau", "nah", "nai", "nap",
/* "nb", "nd", "nds", "ne", "new", "ng", "nia", "nic", */
"nob", "nde", "nds", "nep", "new", "ndo", "nia", "nic",
-/* "niu", "nl", "nn", "no", "nog", "non", "nr", "nso", "nub", */
- "niu", "nld", "nno", "nor", "nog", "non", "nbl", "nso", "nub",
+/* "niu", "nl", "nn", "no", "nog", "non", "nqo", "nr", "nso", "nub", */
+ "niu", "nld", "nno", "nor", "nog", "non", "nqo", "nbl", "nso", "nub",
/* "nv", "nwc", "ny", "nym", "nyn", "nyo", "nzi", "oc", "oj", */
"nav", "nwc", "nya", "nym", "nyn", "nyo", "nzi", "oci", "oji",
/* "om", "or", "os", "osa", "ota", "oto", "pa", "paa", */
@@ -296,8 +296,8 @@ static const char * const LANGUAGES_3[] = {
"sms", "sna", "snk", "som", "sog", "son", "sqi", "srp",
/* "srn", "srr", "ss", "ssa", "st", "su", "suk", "sus", "sux", */
"srn", "srr", "ssw", "ssa", "sot", "sun", "suk", "sus", "sux",
-/* "sv", "sw", "syr", "ta", "tai", "te", "tem", "ter", */
- "swe", "swa", "syr", "tam", "tai", "tel", "tem", "ter",
+/* "sv", "sw", "syc", "syr", "ta", "tai", "te", "tem", "ter", */
+ "swe", "swa", "syc", "syr", "tam", "tai", "tel", "tem", "ter",
/* "tet", "tg", "th", "ti", "tig", "tiv", "tk", "tkl", */
"tet", "tgk", "tha", "tir", "tig", "tiv", "tuk", "tkl",
/* "tl", "tlh", "tli", "tmh", "tn", "to", "tog", "tpi", "tr", */
@@ -310,10 +310,10 @@ static const char * const LANGUAGES_3[] = {
"uzb", "vai", "ven", "vie", "vol", "vot", "wln", "wak",
/* "wal", "war", "was", "wen", "wo", "xal", "xh", "yao", "yap", */
"wal", "war", "was", "wen", "wol", "xal", "xho", "yao", "yap",
-/* "yi", "yo", "ypk", "za", "zap", "zen", "zh", "znd", */
- "yid", "yor", "ypk", "zha", "zap", "zen", "zho", "znd",
-/* "zu", "zun", */
- "zul", "zun", "zxx",
+/* "yi", "yo", "ypk", "za", "zap", "zbl", "zen", "zh", "znd", */
+ "yid", "yor", "ypk", "zha", "zap", "zbl", "zen", "zho", "znd",
+/* "zu", "zun", "zxx", "zza", */
+ "zul", "zun", "zxx", "zza",
NULL,
/* "in", "iw", "ji", "jw", "sh", */
"ind", "heb", "yid", "jaw", "srp",
@@ -348,7 +348,7 @@ static const char * const COUNTRIES[] = {
"AD", "AE", "AF", "AG", "AI", "AL", "AM", "AN",
"AO", "AQ", "AR", "AS", "AT", "AU", "AW", "AX", "AZ",
"BA", "BB", "BD", "BE", "BF", "BG", "BH", "BI",
- "BJ", "BM", "BN", "BO", "BR", "BS", "BT", "BV",
+ "BJ", "BL", "BM", "BN", "BO", "BR", "BS", "BT", "BV",
"BW", "BY", "BZ", "CA", "CC", "CD", "CF", "CG",
"CH", "CI", "CK", "CL", "CM", "CN", "CO", "CR",
"CU", "CV", "CX", "CY", "CZ", "DE", "DJ", "DK",
@@ -361,31 +361,31 @@ static const char * const COUNTRIES[] = {
"IT", "JE", "JM", "JO", "JP", "KE", "KG", "KH", "KI",
"KM", "KN", "KP", "KR", "KW", "KY", "KZ", "LA",
"LB", "LC", "LI", "LK", "LR", "LS", "LT", "LU",
- "LV", "LY", "MA", "MC", "MD", "MG", "MH", "MK",
+ "LV", "LY", "MA", "MC", "MD", "ME", "MF", "MG", "MH", "MK",
"ML", "MM", "MN", "MO", "MP", "MQ", "MR", "MS",
"MT", "MU", "MV", "MW", "MX", "MY", "MZ", "NA",
"NC", "NE", "NF", "NG", "NI", "NL", "NO", "NP",
"NR", "NU", "NZ", "OM", "PA", "PE", "PF", "PG",
"PH", "PK", "PL", "PM", "PN", "PR", "PS", "PT",
- "PW", "PY", "QA", "RE", "RO", "RU", "RW", "SA",
+ "PW", "PY", "QA", "RE", "RO", "RS", "RU", "RW", "SA",
"SB", "SC", "SD", "SE", "SG", "SH", "SI", "SJ",
"SK", "SL", "SM", "SN", "SO", "SR", "ST", "SV",
"SY", "SZ", "TC", "TD", "TF", "TG", "TH", "TJ",
"TK", "TL", "TM", "TN", "TO", "TR", "TT", "TV",
"TW", "TZ", "UA", "UG", "UM", "US", "UY", "UZ",
"VA", "VC", "VE", "VG", "VI", "VN", "VU", "WF",
- "WS", "YE", "YT", "YU", "ZA", "ZM", "ZW", "ZZ",
+ "WS", "YE", "YT", "ZA", "ZM", "ZW",
NULL,
- "FX", "RO", "TP", "ZR", /* obsolete country codes */
+ "FX", "CS", "RO", "TP", "YU", "ZR", /* obsolete country codes */
NULL
};
static const char* const DEPRECATED_COUNTRIES[] ={
- "BU", "DY", "FX", "HV", "NH", "RH", "TP", "YU", "ZR", NULL, NULL /* deprecated country list */
+ "BU", "CS", "DY", "FX", "HV", "NH", "RH", "TP", "YU", "ZR", NULL, NULL /* deprecated country list */
};
static const char* const REPLACEMENT_COUNTRIES[] = {
-/* "BU", "DY", "FX", "HV", "NH", "RH", "TP", "YU", "ZR" */
- "MM", "BJ", "FR", "BF", "VU", "ZW", "TL", "CS", "CD", NULL, NULL /* replacement country codes */
+/* "BU", "CS", "DY", "FX", "HV", "NH", "RH", "TP", "YU", "ZR" */
+ "MM", "RS", "BJ", "FR", "BF", "VU", "ZW", "TL", "RS", "CD", NULL, NULL /* replacement country codes */
};
/**
@@ -408,8 +408,8 @@ static const char * const COUNTRIES_3[] = {
"AGO", "ATA", "ARG", "ASM", "AUT", "AUS", "ABW", "ALA", "AZE",
/* "BA", "BB", "BD", "BE", "BF", "BG", "BH", "BI", */
"BIH", "BRB", "BGD", "BEL", "BFA", "BGR", "BHR", "BDI",
-/* "BJ", "BM", "BN", "BO", "BR", "BS", "BT", "BV", */
- "BEN", "BMU", "BRN", "BOL", "BRA", "BHS", "BTN", "BVT",
+/* "BJ", "BL", "BM", "BN", "BO", "BR", "BS", "BT", "BV", */
+ "BEN", "BLM", "BMU", "BRN", "BOL", "BRA", "BHS", "BTN", "BVT",
/* "BW", "BY", "BZ", "CA", "CC", "CD", "CF", "CG", */
"BWA", "BLR", "BLZ", "CAN", "CCK", "COD", "CAF", "COG",
/* "CH", "CI", "CK", "CL", "CM", "CN", "CO", "CR", */
@@ -420,22 +420,22 @@ static const char * const COUNTRIES_3[] = {
"DMA", "DOM", "DZA", "ECU", "EST", "EGY", "ESH", "ERI",
/* "ES", "ET", "FI", "FJ", "FK", "FM", "FO", "FR", */
"ESP", "ETH", "FIN", "FJI", "FLK", "FSM", "FRO", "FRA",
-/* "GA", "GB", "GD", "GE", "GF", "GG", "GH", "GI", "GL", */
+/* "GA", "GB", "GD", "GE", "GF", "GG", "GH", "GI", "GL", */
"GAB", "GBR", "GRD", "GEO", "GUF", "GGY", "GHA", "GIB", "GRL",
/* "GM", "GN", "GP", "GQ", "GR", "GS", "GT", "GU", */
"GMB", "GIN", "GLP", "GNQ", "GRC", "SGS", "GTM", "GUM",
/* "GW", "GY", "HK", "HM", "HN", "HR", "HT", "HU", */
"GNB", "GUY", "HKG", "HMD", "HND", "HRV", "HTI", "HUN",
-/* ID", "IE", "IL", "IM", "IN", "IO", "IQ", "IR", "IS" */
- "IDN", "IRL", "ISR", "IMN", "IND", "IOT", "IRQ", "IRN", "ISL",
-/* "IT", "JE", "JM", "JO", "JP", "KE", "KG", "KH", "KI", */
+/* "ID", "IE", "IL", "IM", "IN", "IO", "IQ", "IR", "IS" */
+ "IDN", "IRL", "ISR", "IMN", "IND", "IOT", "IRQ", "IRN", "ISL",
+/* "IT", "JE", "JM", "JO", "JP", "KE", "KG", "KH", "KI", */
"ITA", "JEY", "JAM", "JOR", "JPN", "KEN", "KGZ", "KHM", "KIR",
/* "KM", "KN", "KP", "KR", "KW", "KY", "KZ", "LA", */
"COM", "KNA", "PRK", "KOR", "KWT", "CYM", "KAZ", "LAO",
/* "LB", "LC", "LI", "LK", "LR", "LS", "LT", "LU", */
"LBN", "LCA", "LIE", "LKA", "LBR", "LSO", "LTU", "LUX",
-/* "LV", "LY", "MA", "MC", "MD", "MG", "MH", "MK", */
- "LVA", "LBY", "MAR", "MCO", "MDA", "MDG", "MHL", "MKD",
+/* "LV", "LY", "MA", "MC", "MD", "ME", "MF", "MG", "MH", "MK", */
+ "LVA", "LBY", "MAR", "MCO", "MDA", "MNE", "MAF", "MDG", "MHL", "MKD",
/* "ML", "MM", "MN", "MO", "MP", "MQ", "MR", "MS", */
"MLI", "MMR", "MNG", "MAC", "MNP", "MTQ", "MRT", "MSR",
/* "MT", "MU", "MV", "MW", "MX", "MY", "MZ", "NA", */
@@ -446,8 +446,8 @@ static const char * const COUNTRIES_3[] = {
"NRU", "NIU", "NZL", "OMN", "PAN", "PER", "PYF", "PNG",
/* "PH", "PK", "PL", "PM", "PN", "PR", "PS", "PT", */
"PHL", "PAK", "POL", "SPM", "PCN", "PRI", "PSE", "PRT",
-/* "PW", "PY", "QA", "RE", "RO", "RU", "RW", "SA", */
- "PLW", "PRY", "QAT", "REU", "ROU", "RUS", "RWA", "SAU",
+/* "PW", "PY", "QA", "RE", "RO", "RS", "RU", "RW", "SA", */
+ "PLW", "PRY", "QAT", "REU", "ROU", "SRB", "RUS", "RWA", "SAU",
/* "SB", "SC", "SD", "SE", "SG", "SH", "SI", "SJ", */
"SLB", "SYC", "SDN", "SWE", "SGP", "SHN", "SVN", "SJM",
/* "SK", "SL", "SM", "SN", "SO", "SR", "ST", "SV", */
@@ -460,11 +460,11 @@ static const char * const COUNTRIES_3[] = {
"TWN", "TZA", "UKR", "UGA", "UMI", "USA", "URY", "UZB",
/* "VA", "VC", "VE", "VG", "VI", "VN", "VU", "WF", */
"VAT", "VCT", "VEN", "VGB", "VIR", "VNM", "VUT", "WLF",
-/* "WS", "YE", "YT", "YU", "ZA", "ZM", "ZW", "ZZZ" */
- "WSM", "YEM", "MYT", "YUG", "ZAF", "ZMB", "ZWE", "ZZZ",
+/* "WS", "YE", "YT", "ZA", "ZM", "ZW", */
+ "WSM", "YEM", "MYT", "ZAF", "ZMB", "ZWE",
NULL,
-/* "FX", "RO", "TP", "ZR", */
- "FXX", "ROM", "TMP", "ZAR",
+/* "FX", "CS", "RO", "TP", "YU", "ZR", */
+ "FXX", "SCG", "ROM", "TMP", "YUG", "ZAR",
NULL
};
@@ -490,7 +490,7 @@ static const CanonicalizationMap CANONICALIZE_MAP[] = {
{ "cel_GAULISH", "cel__GAULISH", NULL, NULL }, /* registered name */
{ "de_1901", "de__1901", NULL, NULL }, /* registered name */
{ "de_1906", "de__1906", NULL, NULL }, /* registered name */
- { "de__PHONEBOOK", "de", "collation", "phonebook" },
+ { "de__PHONEBOOK", "de", "collation", "phonebook" }, /* Old ICU name */
{ "de_AT_PREEURO", "de_AT", "currency", "ATS" },
{ "de_DE_PREEURO", "de_DE", "currency", "DEM" },
{ "de_LU_PREEURO", "de_LU", "currency", "LUF" },
@@ -499,7 +499,7 @@ static const CanonicalizationMap CANONICALIZE_MAP[] = {
{ "en_SCOUSE", "en__SCOUSE", NULL, NULL }, /* registered name */
{ "en_BE_PREEURO", "en_BE", "currency", "BEF" },
{ "en_IE_PREEURO", "en_IE", "currency", "IEP" },
- { "es__TRADITIONAL", "es", "collation", "traditional" },
+ { "es__TRADITIONAL", "es", "collation", "traditional" }, /* Old ICU name */
{ "es_ES_PREEURO", "es_ES", "currency", "ESP" },
{ "eu_ES_PREEURO", "eu_ES", "currency", "ESP" },
{ "fi_FI_PREEURO", "fi_FI", "currency", "FIM" },
@@ -508,22 +508,23 @@ static const CanonicalizationMap CANONICALIZE_MAP[] = {
{ "fr_LU_PREEURO", "fr_LU", "currency", "LUF" },
{ "ga_IE_PREEURO", "ga_IE", "currency", "IEP" },
{ "gl_ES_PREEURO", "gl_ES", "currency", "ESP" },
- { "hi__DIRECT", "hi", "collation", "direct" },
+ { "hi__DIRECT", "hi", "collation", "direct" }, /* Old ICU name */
{ "it_IT_PREEURO", "it_IT", "currency", "ITL" },
- { "ja_JP_TRADITIONAL", "ja_JP", "calendar", "japanese" },
+ { "ja_JP_TRADITIONAL", "ja_JP", "calendar", "japanese" }, /* Old ICU name */
{ "nb_NO_NY", "nn_NO", NULL, NULL }, /* "markus said this was ok" :-) */
{ "nl_BE_PREEURO", "nl_BE", "currency", "BEF" },
{ "nl_NL_PREEURO", "nl_NL", "currency", "NLG" },
{ "pt_PT_PREEURO", "pt_PT", "currency", "PTE" },
{ "sl_ROZAJ", "sl__ROZAJ", NULL, NULL }, /* registered name */
- { "sr_SP_CYRL", "sr_Cyrl_CS", NULL, NULL }, /* .NET name */
- { "sr_SP_LATN", "sr_Latn_CS", NULL, NULL }, /* .NET name */
- { "sr_YU_CYRILLIC", "sr_Cyrl_CS", NULL, NULL }, /* Linux name */
+ { "sr_SP_CYRL", "sr_Cyrl_RS", NULL, NULL }, /* .NET name */
+ { "sr_SP_LATN", "sr_Latn_RS", NULL, NULL }, /* .NET name */
+ { "sr_YU_CYRILLIC", "sr_Cyrl_RS", NULL, NULL }, /* Linux name */
+ { "th_TH_TRADITIONAL", "th_TH", "calendar", "buddhist" }, /* Old ICU name */
{ "uz_UZ_CYRILLIC", "uz_Cyrl_UZ", NULL, NULL }, /* Linux name */
{ "uz_UZ_CYRL", "uz_Cyrl_UZ", NULL, NULL }, /* .NET name */
{ "uz_UZ_LATN", "uz_Latn_UZ", NULL, NULL }, /* .NET name */
{ "zh_CHS", "zh_Hans", NULL, NULL }, /* .NET name */
- { "zh_CHT", "zh_Hant", NULL, NULL }, /* .NET name TODO: This should be zh_Hant once the locale structure is fixed. */
+ { "zh_CHT", "zh_Hant", NULL, NULL }, /* .NET name */
{ "zh_GAN", "zh__GAN", NULL, NULL }, /* registered name */
{ "zh_GUOYU", "zh", NULL, NULL }, /* registered name */
{ "zh_HAKKA", "zh__HAKKA", NULL, NULL }, /* registered name */
@@ -532,9 +533,18 @@ static const CanonicalizationMap CANONICALIZE_MAP[] = {
{ "zh_WUU", "zh__WUU", NULL, NULL }, /* registered name */
{ "zh_XIANG", "zh__XIANG", NULL, NULL }, /* registered name */
{ "zh_YUE", "zh__YUE", NULL, NULL }, /* registered name */
- { "th_TH_TRADITIONAL", "th_TH", "calendar", "buddhist" },
- { "zh_TW_STROKE", "zh_Hant_TW", "collation", "stroke" },
- { "zh__PINYIN", "zh", "collation", "pinyin" }
+};
+
+typedef struct VariantMap {
+ const char *variant; /* input ID */
+ const char *keyword; /* keyword, or NULL if none */
+ const char *value; /* keyword value, or NULL if kw==NULL */
+} VariantMap;
+
+static const VariantMap VARIANT_MAP[] = {
+ { "EURO", "currency", "EUR" },
+ { "PINYIN", "collation", "pinyin" }, /* Solaris variant */
+ { "STROKE", "collation", "stroke" } /* Solaris variant */
};
/* ### Keywords **************************************************/
@@ -1378,7 +1388,8 @@ _getVariant(const char *localeID,
*/
static int32_t
_deleteVariant(char* variants, int32_t variantsLen,
- const char* toDelete, int32_t toDeleteLen) {
+ const char* toDelete, int32_t toDeleteLen)
+{
int32_t delta = 0; /* number of chars deleted */
for (;;) {
UBool flag = FALSE;
@@ -1387,11 +1398,14 @@ _deleteVariant(char* variants, int32_t variantsLen,
}
if (uprv_strncmp(variants, toDelete, toDeleteLen) == 0 &&
(variantsLen == toDeleteLen ||
- (flag=(variants[toDeleteLen] == '_')))) {
+ (flag=(variants[toDeleteLen] == '_'))))
+ {
int32_t d = toDeleteLen + (flag?1:0);
variantsLen -= d;
delta += d;
- uprv_memmove(variants, variants+d, variantsLen);
+ if (variantsLen > 0) {
+ uprv_memmove(variants, variants+d, variantsLen);
+ }
} else {
char* p = _strnchr(variants, variantsLen, '_');
if (p == NULL) {
@@ -1466,26 +1480,31 @@ static const UEnumeration gKeywordsEnum = {
U_CAPI UEnumeration* U_EXPORT2
uloc_openKeywordList(const char *keywordList, int32_t keywordListSize, UErrorCode* status)
{
- UKeywordsContext *myContext = NULL;
- UEnumeration *result = NULL;
+ UKeywordsContext *myContext = NULL;
+ UEnumeration *result = NULL;
- if(U_FAILURE(*status)) {
- return NULL;
- }
- result = (UEnumeration *)uprv_malloc(sizeof(UEnumeration));
- uprv_memcpy(result, &gKeywordsEnum, sizeof(UEnumeration));
- myContext = uprv_malloc(sizeof(UKeywordsContext));
- if (myContext == NULL) {
- *status = U_MEMORY_ALLOCATION_ERROR;
- uprv_free(result);
- return NULL;
- }
- myContext->keywords = (char *)uprv_malloc(keywordListSize+1);
- uprv_memcpy(myContext->keywords, keywordList, keywordListSize);
- myContext->keywords[keywordListSize] = 0;
- myContext->current = myContext->keywords;
- result->context = myContext;
- return result;
+ if(U_FAILURE(*status)) {
+ return NULL;
+ }
+ result = (UEnumeration *)uprv_malloc(sizeof(UEnumeration));
+ /* Null pointer test */
+ if (result == NULL) {
+ *status = U_MEMORY_ALLOCATION_ERROR;
+ return NULL;
+ }
+ uprv_memcpy(result, &gKeywordsEnum, sizeof(UEnumeration));
+ myContext = uprv_malloc(sizeof(UKeywordsContext));
+ if (myContext == NULL) {
+ *status = U_MEMORY_ALLOCATION_ERROR;
+ uprv_free(result);
+ return NULL;
+ }
+ myContext->keywords = (char *)uprv_malloc(keywordListSize+1);
+ uprv_memcpy(myContext->keywords, keywordList, keywordListSize);
+ myContext->keywords[keywordListSize] = 0;
+ myContext->current = myContext->keywords;
+ result->context = myContext;
+ return result;
}
U_CAPI UEnumeration* U_EXPORT2
@@ -1559,14 +1578,13 @@ _canonicalize(const char* localeID,
UErrorCode* err) {
int32_t j, len, fieldCount=0, scriptSize=0, variantSize=0, nameCapacity;
char localeBuffer[ULOC_FULLNAME_CAPACITY];
- const char* origLocaleID = localeID;
+ const char* origLocaleID;
const char* keywordAssign = NULL;
const char* separatorIndicator = NULL;
const char* addKeyword = NULL;
const char* addValue = NULL;
char* name;
char* variant = NULL; /* pointer into name, or NULL */
- int32_t sawEuro = 0;
if (U_FAILURE(*err)) {
return 0;
@@ -1575,6 +1593,7 @@ _canonicalize(const char* localeID,
if (localeID==NULL) {
localeID=uloc_getDefault();
}
+ origLocaleID=localeID;
/* if we are doing a full canonicalization, then put results in
localeBuffer, if necessary; otherwise send them to result. */
@@ -1709,11 +1728,25 @@ _canonicalize(const char* localeID,
}
}
- /* Check for EURO variants. */
- sawEuro = _deleteVariant(variant, variantSize, "EURO", 4);
- len -= sawEuro;
- if (sawEuro > 0 && name[len-1] == '_') { /* delete trailing '_' */
- --len;
+ /* Handle generic variants first */
+ if (variant) {
+ for (j=0; j<(int32_t)(sizeof(VARIANT_MAP)/sizeof(VARIANT_MAP[0])); j++) {
+ const char* variantToCompare = VARIANT_MAP[j].variant;
+ int32_t n = (int32_t)uprv_strlen(variantToCompare);
+ int32_t variantLen = _deleteVariant(variant, uprv_min(variantSize, (nameCapacity-len)), variantToCompare, n);
+ len -= variantLen;
+ if (variantLen > 0) {
+ if (name[len-1] == '_') { /* delete trailing '_' */
+ --len;
+ }
+ addKeyword = VARIANT_MAP[j].keyword;
+ addValue = VARIANT_MAP[j].value;
+ break;
+ }
+ }
+ if (name[len-1] == '_') { /* delete trailing '_' */
+ --len;
+ }
}
/* Look up the ID in the canonicalization map */
@@ -1725,17 +1758,13 @@ _canonicalize(const char* localeID,
break; /* Don't remap "" if keywords present */
}
len = _copyCount(name, nameCapacity, CANONICALIZE_MAP[j].canonicalID);
- addKeyword = CANONICALIZE_MAP[j].keyword;
- addValue = CANONICALIZE_MAP[j].value;
+ if (CANONICALIZE_MAP[j].keyword) {
+ addKeyword = CANONICALIZE_MAP[j].keyword;
+ addValue = CANONICALIZE_MAP[j].value;
+ }
break;
}
}
-
- /* Explicit EURO variant overrides keyword in CANONICALIZE_MAP */
- if (sawEuro > 0) {
- addKeyword = "currency";
- addValue = "EUR";
- }
}
if (!OPTION_SET(options, _ULOC_STRIP_KEYWORDS)) {
@@ -1758,7 +1787,7 @@ _canonicalize(const char* localeID,
}
}
- if (U_SUCCESS(*err) && name == localeBuffer) {
+ if (U_SUCCESS(*err) && result != NULL && name == localeBuffer) {
uprv_strncpy(result, localeBuffer, (len > resultCapacity) ? resultCapacity : len);
}
@@ -2186,13 +2215,18 @@ _getStringOrCopyKey(const char *path, const char *locale,
ures_close(rb);
}
} else {
- /* second-level item, use special fallback */
- s=_res_getTableStringWithFallback(path, locale,
- tableKey,
- subTableKey,
- itemKey,
- &length,
- pErrorCode);
+ /* Language code should not be a number. If it is, set the error code. */
+ if (!uprv_strncmp(tableKey, "Languages", 9) && uprv_strtol(itemKey, NULL, 10)) {
+ *pErrorCode = U_MISSING_RESOURCE_ERROR;
+ } else {
+ /* second-level item, use special fallback */
+ s=_res_getTableStringWithFallback(path, locale,
+ tableKey,
+ subTableKey,
+ itemKey,
+ &length,
+ pErrorCode);
+ }
}
if(U_SUCCESS(*pErrorCode)) {
int32_t copyLength=uprv_min(length, destCapacity);
@@ -2640,9 +2674,7 @@ static void _load_installedLocales()
{
UBool localesLoaded;
- umtx_lock(NULL);
- localesLoaded = _installedLocales != NULL;
- umtx_unlock(NULL);
+ UMTX_CHECK(NULL, _installedLocales != NULL, localesLoaded);
if (localesLoaded == FALSE) {
UResourceBundle *index = NULL;
@@ -2659,26 +2691,28 @@ static void _load_installedLocales()
if(U_SUCCESS(status)) {
localeCount = ures_getSize(&installed);
temp = (char **) uprv_malloc(sizeof(char*) * (localeCount+1));
-
- ures_resetIterator(&installed);
- while(ures_hasNext(&installed)) {
- ures_getNextString(&installed, NULL, (const char **)&temp[i++], &status);
+ /* Check for null pointer */
+ if (temp != NULL) {
+ ures_resetIterator(&installed);
+ while(ures_hasNext(&installed)) {
+ ures_getNextString(&installed, NULL, (const char **)&temp[i++], &status);
+ }
+ temp[i] = NULL;
+
+ umtx_lock(NULL);
+ if (_installedLocales == NULL)
+ {
+ _installedLocalesCount = localeCount;
+ _installedLocales = temp;
+ temp = NULL;
+ ucln_common_registerCleanup(UCLN_COMMON_ULOC, uloc_cleanup);
+ }
+ umtx_unlock(NULL);
+
+ uprv_free(temp);
}
- temp[i] = NULL;
-
- umtx_lock(NULL);
- if (_installedLocales == NULL)
- {
- _installedLocales = temp;
- _installedLocalesCount = localeCount;
- temp = NULL;
- ucln_common_registerCleanup(UCLN_COMMON_ULOC, uloc_cleanup);
- }
- umtx_unlock(NULL);
-
- uprv_free(temp);
- ures_close(&installed);
}
+ ures_close(&installed);
ures_close(index);
}
}
@@ -2733,44 +2767,42 @@ static /* U_CAPI */
double
/* U_EXPORT2 */
_uloc_strtod(const char *start, char **end) {
- char *decimal;
- char *myEnd;
- char buf[30];
- double rv;
- if (!gDecimal) {
- char rep[5];
- /* For machines that decide to change the decimal on you,
- and try to be too smart with localization.
- This normally should be just a '.'. */
- sprintf(rep, "%+1.1f", 1.0);
- gDecimal = rep[2];
- }
+ char *decimal;
+ char *myEnd;
+ char buf[30];
+ double rv;
+ if (!gDecimal) {
+ char rep[5];
+ /* For machines that decide to change the decimal on you,
+ and try to be too smart with localization.
+ This normally should be just a '.'. */
+ sprintf(rep, "%+1.1f", 1.0);
+ gDecimal = rep[2];
+ }
- if(gDecimal == '.') {
- return uprv_strtod(start, end); /* fall through to OS */
- } else {
- uprv_strncpy(buf, start, 29);
- buf[29]=0;
- decimal = uprv_strchr(buf, '.');
- if(decimal) {
- *decimal = gDecimal;
+ if(gDecimal == '.') {
+ return uprv_strtod(start, end); /* fall through to OS */
} else {
- return uprv_strtod(start, end); /* no decimal point */
- }
- rv = uprv_strtod(buf, &myEnd);
- if(end) {
- *end = (char*)(start+(myEnd-buf)); /* cast away const (to follow uprv_strtod API.) */
+ uprv_strncpy(buf, start, 29);
+ buf[29]=0;
+ decimal = uprv_strchr(buf, '.');
+ if(decimal) {
+ *decimal = gDecimal;
+ } else {
+ return uprv_strtod(start, end); /* no decimal point */
+ }
+ rv = uprv_strtod(buf, &myEnd);
+ if(end) {
+ *end = (char*)(start+(myEnd-buf)); /* cast away const (to follow uprv_strtod API.) */
+ }
+ return rv;
}
- return rv;
- }
}
typedef struct {
- double q;
- char *locale;
-#if defined(ULOC_DEBUG_PURIFY)
+ float q;
int32_t dummy; /* to avoid uninitialized memory copy from qsort */
-#endif
+ char *locale;
} _acceptLangItem;
static int32_t U_CALLCONV
@@ -2802,6 +2834,78 @@ uloc_acceptLanguageCompare(const void *context, const void *a, const void *b)
return rc;
}
+static ULayoutType
+_uloc_getOrientationHelper(const char* localeId,
+ const char* key,
+ UErrorCode *status)
+{
+ ULayoutType result = ULOC_LAYOUT_UNKNOWN;
+
+ if (!U_FAILURE(*status)) {
+ int32_t length = 0;
+ char localeBuffer[ULOC_FULLNAME_CAPACITY];
+
+ uloc_canonicalize(localeId, localeBuffer, sizeof(localeBuffer), status);
+
+ if (!U_FAILURE(*status)) {
+ const UChar* const value =
+ _res_getTableStringWithFallback(
+ NULL,
+ localeBuffer,
+ "layout",
+ NULL,
+ key,
+ &length,
+ status);
+
+ if (!U_FAILURE(*status) && length != 0) {
+ switch(value[0])
+ {
+ case 0x0062: /* 'b' */
+ result = ULOC_LAYOUT_BTT;
+ break;
+ case 0x006C: /* 'l' */
+ result = ULOC_LAYOUT_LTR;
+ break;
+ case 0x0072: /* 'r' */
+ result = ULOC_LAYOUT_RTL;
+ break;
+ case 0x0074: /* 't' */
+ result = ULOC_LAYOUT_TTB;
+ break;
+ default:
+ *status = U_INTERNAL_PROGRAM_ERROR;
+ break;
+ }
+ }
+ }
+ }
+
+ return result;
+}
+
+U_DRAFT ULayoutType U_EXPORT2
+uloc_getCharacterOrientation(const char* localeId,
+ UErrorCode *status)
+{
+ return _uloc_getOrientationHelper(localeId, "characters", status);
+}
+
+/**
+ * Get the layout line orientation for the specified locale.
+ *
+ * @param localeID locale name
+ * @param status Error status
+ * @return an enum indicating the layout orientation for lines.
+ * @draft ICU 4.0
+ */
+U_DRAFT ULayoutType U_EXPORT2
+uloc_getLineOrientation(const char* localeId,
+ UErrorCode *status)
+{
+ return _uloc_getOrientationHelper(localeId, "lines", status);
+}
+
/*
mt-mt, ja;q=0.76, en-us;q=0.95, en;q=0.92, en-gb;q=0.89, fr;q=0.87, iu-ca;q=0.84, iu;q=0.82, ja-jp;q=0.79, mt;q=0.97, de-de;q=0.74, de;q=0.71, es;q=0.68, it-it;q=0.66, it;q=0.63, vi-vn;q=0.61, vi;q=0.58, nl-nl;q=0.55, nl;q=0.53
*/
@@ -2825,6 +2929,7 @@ uloc_acceptLanguageFromHTTP(char *result, int32_t resultAvailable, UAcceptResult
int32_t i;
int32_t l = (int32_t)uprv_strlen(httpAcceptLanguage);
int32_t jSize;
+ char *tempstr; /* Use for null pointer check */
j = smallBuffer;
jSize = sizeof(smallBuffer)/sizeof(smallBuffer[0]);
@@ -2855,19 +2960,23 @@ uloc_acceptLanguageFromHTTP(char *result, int32_t resultAvailable, UAcceptResult
while(isspace(*t)) {
t++;
}
- j[n].q = _uloc_strtod(t,NULL);
+ j[n].q = (float)_uloc_strtod(t,NULL);
} else {
/* no semicolon - it's 1.0 */
- j[n].q = 1.0;
+ j[n].q = 1.0f;
paramEnd = itemEnd;
}
-#if defined(ULOC_DEBUG_PURIFY)
- j[n].dummy=0xDECAFBAD;
-#endif
+ j[n].dummy=0;
/* eat spaces prior to semi */
for(t=(paramEnd-1);(paramEnd>s)&&isspace(*t);t--)
;
- j[n].locale = uprv_strndup(s,(int32_t)((t+1)-s));
+ /* Check for null pointer from uprv_strndup */
+ tempstr = uprv_strndup(s,(int32_t)((t+1)-s));
+ if (tempstr == NULL) {
+ *status = U_MEMORY_ALLOCATION_ERROR;
+ return -1;
+ }
+ j[n].locale = tempstr;
uloc_canonicalize(j[n].locale,tmp,sizeof(tmp)/sizeof(tmp[0]),status);
if(strcmp(j[n].locale,tmp)) {
uprv_free(j[n].locale);
@@ -2882,38 +2991,44 @@ uloc_acceptLanguageFromHTTP(char *result, int32_t resultAvailable, UAcceptResult
s++;
}
if(n>=jSize) {
- if(j==smallBuffer) { /* overflowed the small buffer. */
- j = uprv_malloc(sizeof(j[0])*(jSize*2));
- if(j!=NULL) {
- uprv_memcpy(j,smallBuffer,sizeof(j[0])*jSize);
- }
+ if(j==smallBuffer) { /* overflowed the small buffer. */
+ j = uprv_malloc(sizeof(j[0])*(jSize*2));
+ if(j!=NULL) {
+ uprv_memcpy(j,smallBuffer,sizeof(j[0])*jSize);
+ }
#if defined(ULOC_DEBUG)
- fprintf(stderr,"malloced at size %d\n", jSize);
+ fprintf(stderr,"malloced at size %d\n", jSize);
#endif
- } else {
- j = uprv_realloc(j, sizeof(j[0])*jSize*2);
+ } else {
+ j = uprv_realloc(j, sizeof(j[0])*jSize*2);
#if defined(ULOC_DEBUG)
- fprintf(stderr,"re-alloced at size %d\n", jSize);
+ fprintf(stderr,"re-alloced at size %d\n", jSize);
#endif
- }
- jSize *= 2;
- if(j==NULL) {
- *status = U_MEMORY_ALLOCATION_ERROR;
- return -1;
- }
+ }
+ jSize *= 2;
+ if(j==NULL) {
+ *status = U_MEMORY_ALLOCATION_ERROR;
+ return -1;
+ }
}
}
uprv_sortArray(j, n, sizeof(j[0]), uloc_acceptLanguageCompare, NULL, TRUE, status);
if(U_FAILURE(*status)) {
- if(j != smallBuffer) {
+ if(j != smallBuffer) {
#if defined(ULOC_DEBUG)
- fprintf(stderr,"freeing j %p\n", j);
+ fprintf(stderr,"freeing j %p\n", j);
#endif
- uprv_free(j);
- }
- return -1;
+ uprv_free(j);
+ }
+ return -1;
}
strs = uprv_malloc((size_t)(sizeof(strs[0])*n));
+ /* Check for null pointer */
+ if (strs == NULL) {
+ uprv_free(j); /* Free to avoid memory leak */
+ *status = U_MEMORY_ALLOCATION_ERROR;
+ return -1;
+ }
for(i=0;i q <%g>\n", i, j[i].locale, j[i].q);*/
@@ -2928,9 +3043,9 @@ uloc_acceptLanguageFromHTTP(char *result, int32_t resultAvailable, UAcceptResult
uprv_free(strs);
if(j != smallBuffer) {
#if defined(ULOC_DEBUG)
- fprintf(stderr,"freeing j %p\n", j);
+ fprintf(stderr,"freeing j %p\n", j);
#endif
- uprv_free(j);
+ uprv_free(j);
}
return res;
}
@@ -2954,8 +3069,8 @@ uloc_acceptLanguage(char *result, int32_t resultAvailable,
}
fallbackList = uprv_malloc((size_t)(sizeof(fallbackList[0])*acceptListCount));
if(fallbackList==NULL) {
- *status = U_MEMORY_ALLOCATION_ERROR;
- return -1;
+ *status = U_MEMORY_ALLOCATION_ERROR;
+ return -1;
}
for(i=0;i= bufferLength) {
+ /* The buffer should never overflow. */
+ *err = U_INTERNAL_PROGRAM_ERROR;
+ }
+ else {
+ u_UCharsToChars(s, buffer, resLen + 1);
+ result = buffer;
+ }
+
+ ures_close(subtags);
+ }
+ }
+
+ return result;
+}
+
+/**
+ * Append a tag to a buffer, adding the separator if necessary. The buffer
+ * must be large enough to contain the resulting tag plus any separator
+ * necessary. The tag must not be a zero-length string.
+ *
+ * @param tag The tag to add.
+ * @param tagLength The length of the tag.
+ * @param buffer The output buffer.
+ * @param bufferLength The length of the output buffer. This is an input/ouput parameter.
+ **/
+static void U_CALLCONV
+appendTag(
+ const char* tag,
+ int32_t tagLength,
+ char* buffer,
+ int32_t* bufferLength) {
+
+ if (*bufferLength > 0) {
+ buffer[*bufferLength] = '_';
+ ++(*bufferLength);
+ }
+
+ uprv_memmove(
+ &buffer[*bufferLength],
+ tag,
+ tagLength);
+
+ *bufferLength += tagLength;
+}
+
+/**
+ * These are the canonical strings for unknown languages, scripts and regions.
+ **/
+static const char* const unknownLanguage = "und";
+static const char* const unknownScript = "Zzzz";
+static const char* const unknownRegion = "ZZ";
+
+/**
+ * Create a tag string from the supplied parameters. The lang, script and region
+ * parameters may be NULL pointers. If they are, their corresponding length parameters
+ * must be less than or equal to 0.
+ *
+ * If any of the language, script or region parameters are empty, and the alternateTags
+ * parameter is not NULL, it will be parsed for potential language, script and region tags
+ * to be used when constructing the new tag. If the alternateTags parameter is NULL, or
+ * it contains no language tag, the default tag for the unknown language is used.
+ *
+ * If the length of the new string exceeds the capacity of the output buffer,
+ * the function copies as many bytes to the output buffer as it can, and returns
+ * the error U_BUFFER_OVERFLOW_ERROR.
+ *
+ * If an illegal argument is provided, the function returns the error
+ * U_ILLEGAL_ARGUMENT_ERROR.
+ *
+ * Note that this function can return the warning U_STRING_NOT_TERMINATED_WARNING if
+ * the tag string fits in the output buffer, but the null terminator doesn't.
+ *
+ * @param lang The language tag to use.
+ * @param langLength The length of the language tag.
+ * @param script The script tag to use.
+ * @param scriptLength The length of the script tag.
+ * @param region The region tag to use.
+ * @param regionLength The length of the region tag.
+ * @param trailing Any trailing data to append to the new tag.
+ * @param trailingLength The length of the trailing data.
+ * @param alternateTags A string containing any alternate tags.
+ * @param tag The output buffer.
+ * @param tagCapacity The capacity of the output buffer.
+ * @param err A pointer to a UErrorCode for error reporting.
+ * @return The length of the tag string, which may be greater than tagCapacity, or -1 on error.
+ **/
+static int32_t U_CALLCONV
+createTagStringWithAlternates(
+ const char* lang,
+ int32_t langLength,
+ const char* script,
+ int32_t scriptLength,
+ const char* region,
+ int32_t regionLength,
+ const char* trailing,
+ int32_t trailingLength,
+ const char* alternateTags,
+ char* tag,
+ int32_t tagCapacity,
+ UErrorCode* err) {
+
+ if (U_FAILURE(*err)) {
+ goto error;
+ }
+ else if (tag == NULL ||
+ tagCapacity <= 0 ||
+ langLength >= ULOC_LANG_CAPACITY ||
+ scriptLength >= ULOC_SCRIPT_CAPACITY ||
+ regionLength >= ULOC_COUNTRY_CAPACITY) {
+ goto error;
+ }
+ else {
+ /**
+ * ULOC_FULLNAME_CAPACITY will provide enough capacity
+ * that we can build a string that contains the language,
+ * script and region code without worrying about overrunning
+ * the user-supplied buffer.
+ **/
+ char tagBuffer[ULOC_FULLNAME_CAPACITY];
+ int32_t tagLength = 0;
+ int32_t capacityRemaining = tagCapacity;
+ UBool regionAppended = FALSE;
+
+ if (langLength > 0) {
+ appendTag(
+ lang,
+ langLength,
+ tagBuffer,
+ &tagLength);
+ }
+ else if (alternateTags == NULL) {
+ /*
+ * Append the value for an unknown language, if
+ * we found no language.
+ */
+ appendTag(
+ unknownLanguage,
+ uprv_strlen(unknownLanguage),
+ tagBuffer,
+ &tagLength);
+ }
+ else {
+ /*
+ * Parse the alternateTags string for the language.
+ */
+ char alternateLang[ULOC_LANG_CAPACITY];
+ int32_t alternateLangLength = sizeof(alternateLang);
+
+ alternateLangLength =
+ uloc_getLanguage(
+ alternateTags,
+ alternateLang,
+ alternateLangLength,
+ err);
+ if(U_FAILURE(*err) ||
+ alternateLangLength >= ULOC_LANG_CAPACITY) {
+ goto error;
+ }
+ else if (alternateLangLength == 0) {
+ /*
+ * Append the value for an unknown language, if
+ * we found no language.
+ */
+ appendTag(
+ unknownLanguage,
+ uprv_strlen(unknownLanguage),
+ tagBuffer,
+ &tagLength);
+ }
+ else {
+ appendTag(
+ alternateLang,
+ alternateLangLength,
+ tagBuffer,
+ &tagLength);
+ }
+ }
+
+ if (scriptLength > 0) {
+ appendTag(
+ script,
+ scriptLength,
+ tagBuffer,
+ &tagLength);
+ }
+ else if (alternateTags != NULL) {
+ /*
+ * Parse the alternateTags string for the script.
+ */
+ char alternateScript[ULOC_SCRIPT_CAPACITY];
+
+ const int32_t alternateScriptLength =
+ uloc_getScript(
+ alternateTags,
+ alternateScript,
+ sizeof(alternateScript),
+ err);
+
+ if (U_FAILURE(*err) ||
+ alternateScriptLength >= ULOC_SCRIPT_CAPACITY) {
+ goto error;
+ }
+ else if (alternateScriptLength > 0) {
+ appendTag(
+ alternateScript,
+ alternateScriptLength,
+ tagBuffer,
+ &tagLength);
+ }
+ }
+
+ if (regionLength > 0) {
+ appendTag(
+ region,
+ regionLength,
+ tagBuffer,
+ &tagLength);
+
+ regionAppended = TRUE;
+ }
+ else if (alternateTags != NULL) {
+ /*
+ * Parse the alternateTags string for the region.
+ */
+ char alternateRegion[ULOC_COUNTRY_CAPACITY];
+
+ const int32_t alternateRegionLength =
+ uloc_getCountry(
+ alternateTags,
+ alternateRegion,
+ sizeof(alternateRegion),
+ err);
+ if (U_FAILURE(*err) ||
+ alternateRegionLength >= ULOC_COUNTRY_CAPACITY) {
+ goto error;
+ }
+ else if (alternateRegionLength > 0) {
+ appendTag(
+ alternateRegion,
+ alternateRegionLength,
+ tagBuffer,
+ &tagLength);
+
+ regionAppended = TRUE;
+ }
+ }
+
+ {
+ const int32_t toCopy =
+ tagLength >= tagCapacity ? tagCapacity : tagLength;
+
+ /**
+ * Copy the partial tag from our internal buffer to the supplied
+ * target.
+ **/
+ uprv_memcpy(
+ tag,
+ tagBuffer,
+ toCopy);
+
+ capacityRemaining -= toCopy;
+ }
+
+ if (trailingLength > 0) {
+ if (capacityRemaining > 0 && !regionAppended) {
+ tag[tagLength++] = '_';
+ --capacityRemaining;
+ }
+
+ if (capacityRemaining > 0) {
+ /*
+ * Copy the trailing data into the supplied buffer. Use uprv_memmove, since we
+ * don't know if the user-supplied buffers overlap.
+ */
+ const int32_t toCopy =
+ trailingLength >= capacityRemaining ? capacityRemaining : trailingLength;
+
+ uprv_memmove(
+ &tag[tagLength],
+ trailing,
+ toCopy);
+ }
+ }
+
+ tagLength += trailingLength;
+
+ return u_terminateChars(
+ tag,
+ tagCapacity,
+ tagLength,
+ err);
+ }
+
+error:
+
+ /**
+ * An overflow indicates the locale ID passed in
+ * is ill-formed. If we got here, and there was
+ * no previous error, it's an implicit overflow.
+ **/
+ if (*err == U_BUFFER_OVERFLOW_ERROR ||
+ U_SUCCESS(*err)) {
+ *err = U_ILLEGAL_ARGUMENT_ERROR;
+ }
+
+ return -1;
+}
+
+/**
+ * Create a tag string from the supplied parameters. The lang, script and region
+ * parameters may be NULL pointers. If they are, their corresponding length parameters
+ * must be less than or equal to 0. If the lang parameter is an empty string, the
+ * default value for an unknown language is written to the output buffer.
+ *
+ * If the length of the new string exceeds the capacity of the output buffer,
+ * the function copies as many bytes to the output buffer as it can, and returns
+ * the error U_BUFFER_OVERFLOW_ERROR.
+ *
+ * If an illegal argument is provided, the function returns the error
+ * U_ILLEGAL_ARGUMENT_ERROR.
+ *
+ * @param lang The language tag to use.
+ * @param langLength The length of the language tag.
+ * @param script The script tag to use.
+ * @param scriptLength The length of the script tag.
+ * @param region The region tag to use.
+ * @param regionLength The length of the region tag.
+ * @param trailing Any trailing data to append to the new tag.
+ * @param trailingLength The length of the trailing data.
+ * @param tag The output buffer.
+ * @param tagCapacity The capacity of the output buffer.
+ * @param err A pointer to a UErrorCode for error reporting.
+ * @return The length of the tag string, which may be greater than tagCapacity.
+ **/
+static int32_t U_CALLCONV
+createTagString(
+ const char* lang,
+ int32_t langLength,
+ const char* script,
+ int32_t scriptLength,
+ const char* region,
+ int32_t regionLength,
+ const char* trailing,
+ int32_t trailingLength,
+ char* tag,
+ int32_t tagCapacity,
+ UErrorCode* err)
+{
+ return createTagStringWithAlternates(
+ lang,
+ langLength,
+ script,
+ scriptLength,
+ region,
+ regionLength,
+ trailing,
+ trailingLength,
+ NULL,
+ tag,
+ tagCapacity,
+ err);
+}
+
+/**
+ * Parse the language, script, and region subtags from a tag string, and copy the
+ * results into the corresponding output parameters. The buffers are null-terminated,
+ * unless overflow occurs.
+ *
+ * The langLength, scriptLength, and regionLength parameters are input/output
+ * parameters, and must contain the capacity of their corresponding buffers on
+ * input. On output, they will contain the actual length of the buffers, not
+ * including the null terminator.
+ *
+ * If the length of any of the output subtags exceeds the capacity of the corresponding
+ * buffer, the function copies as many bytes to the output buffer as it can, and returns
+ * the error U_BUFFER_OVERFLOW_ERROR. It will not parse any more subtags once overflow
+ * occurs.
+ *
+ * If an illegal argument is provided, the function returns the error
+ * U_ILLEGAL_ARGUMENT_ERROR.
+ *
+ * @param localeID The locale ID to parse.
+ * @param lang The language tag buffer.
+ * @param langLength The length of the language tag.
+ * @param script The script tag buffer.
+ * @param scriptLength The length of the script tag.
+ * @param region The region tag buffer.
+ * @param regionLength The length of the region tag.
+ * @param err A pointer to a UErrorCode for error reporting.
+ * @return The number of chars of the localeID parameter consumed.
+ **/
+static int32_t U_CALLCONV
+parseTagString(
+ const char* localeID,
+ char* lang,
+ int32_t* langLength,
+ char* script,
+ int32_t* scriptLength,
+ char* region,
+ int32_t* regionLength,
+ UErrorCode* err)
+{
+ const char* position = localeID;
+ int32_t subtagLength = 0;
+
+ if(U_FAILURE(*err) ||
+ localeID == NULL ||
+ lang == NULL ||
+ langLength == NULL ||
+ script == NULL ||
+ scriptLength == NULL ||
+ region == NULL ||
+ regionLength == NULL) {
+ goto error;
+ }
+
+ subtagLength = _getLanguage(position, lang, *langLength, &position);
+ u_terminateChars(lang, *langLength, subtagLength, err);
+
+ /*
+ * Note that we explicit consider U_STRING_NOT_TERMINATED_WARNING
+ * to be an error, because it indicates the user-supplied tag is
+ * not well-formed.
+ */
+ if(*err != U_ZERO_ERROR) {
+ goto error;
+ }
+
+ *langLength = subtagLength;
+
+ /*
+ * If no language was present, use the value of unknownLanguage
+ * instead. Otherwise, move past any separator.
+ */
+ if (*langLength == 0) {
+ uprv_strcpy(
+ lang,
+ unknownLanguage);
+ *langLength = uprv_strlen(lang);
+ }
+ else if (_isIDSeparator(*position)) {
+ ++position;
+ }
+
+ subtagLength = _getScript(position, script, *scriptLength, &position);
+ u_terminateChars(script, *scriptLength, subtagLength, err);
+
+ if(*err != U_ZERO_ERROR) {
+ goto error;
+ }
+
+ *scriptLength = subtagLength;
+
+ if (*scriptLength > 0) {
+ if (uprv_strnicmp(script, unknownScript, *scriptLength) == 0) {
+ /**
+ * If the script part is the "unknown" script, then don't return it.
+ **/
+ *scriptLength = 0;
+ }
+
+ /*
+ * Move past any separator.
+ */
+ if (_isIDSeparator(*position)) {
+ ++position;
+ }
+ }
+
+ subtagLength = _getCountry(position, region, *regionLength, &position);
+ u_terminateChars(region, *regionLength, subtagLength, err);
+
+ if(*err != U_ZERO_ERROR) {
+ goto error;
+ }
+
+ *regionLength = subtagLength;
+
+ if (*regionLength > 0) {
+ if (uprv_strnicmp(region, unknownRegion, *regionLength) == 0) {
+ /**
+ * If the region part is the "unknown" region, then don't return it.
+ **/
+ *regionLength = 0;
+ }
+ }
+
+exit:
+
+ return (int32_t)(position - localeID);
+
+error:
+
+ /**
+ * If we get here, we have no explicit error, it's the result of an
+ * illegal argument.
+ **/
+ if (!U_FAILURE(*err)) {
+ *err = U_ILLEGAL_ARGUMENT_ERROR;
+ }
+
+ goto exit;
+}
+
+static int32_t U_CALLCONV
+createLikelySubtagsString(
+ const char* lang,
+ int32_t langLength,
+ const char* script,
+ int32_t scriptLength,
+ const char* region,
+ int32_t regionLength,
+ const char* variants,
+ int32_t variantsLength,
+ char* tag,
+ int32_t tagCapacity,
+ UErrorCode* err)
+{
+ /**
+ * ULOC_FULLNAME_CAPACITY will provide enough capacity
+ * that we can build a string that contains the language,
+ * script and region code without worrying about overrunning
+ * the user-supplied buffer.
+ **/
+ char tagBuffer[ULOC_FULLNAME_CAPACITY];
+ char likelySubtagsBuffer[ULOC_FULLNAME_CAPACITY];
+ int32_t tagBufferLength = 0;
+
+ if(U_FAILURE(*err)) {
+ goto error;
+ }
+
+ /**
+ * Try the language with the script and region first.
+ **/
+ if (scriptLength > 0 && regionLength > 0) {
+
+ const char* likelySubtags = NULL;
+
+ tagBufferLength = createTagString(
+ lang,
+ langLength,
+ script,
+ scriptLength,
+ region,
+ regionLength,
+ NULL,
+ 0,
+ tagBuffer,
+ sizeof(tagBuffer),
+ err);
+ if(U_FAILURE(*err)) {
+ goto error;
+ }
+
+ likelySubtags =
+ findLikelySubtags(
+ tagBuffer,
+ likelySubtagsBuffer,
+ sizeof(likelySubtagsBuffer),
+ err);
+ if(U_FAILURE(*err)) {
+ goto error;
+ }
+
+ if (likelySubtags != NULL) {
+ /* Always use the language tag from the
+ maximal string, since it may be more
+ specific than the one provided. */
+ return createTagStringWithAlternates(
+ NULL,
+ 0,
+ NULL,
+ 0,
+ NULL,
+ 0,
+ variants,
+ variantsLength,
+ likelySubtags,
+ tag,
+ tagCapacity,
+ err);
+ }
+ }
+
+ /**
+ * Try the language with just the script.
+ **/
+ if (scriptLength > 0) {
+
+ const char* likelySubtags = NULL;
+
+ tagBufferLength = createTagString(
+ lang,
+ langLength,
+ script,
+ scriptLength,
+ NULL,
+ 0,
+ NULL,
+ 0,
+ tagBuffer,
+ sizeof(tagBuffer),
+ err);
+ if(U_FAILURE(*err)) {
+ goto error;
+ }
+
+ likelySubtags =
+ findLikelySubtags(
+ tagBuffer,
+ likelySubtagsBuffer,
+ sizeof(likelySubtagsBuffer),
+ err);
+ if(U_FAILURE(*err)) {
+ goto error;
+ }
+
+ if (likelySubtags != NULL) {
+ /* Always use the language tag from the
+ maximal string, since it may be more
+ specific than the one provided. */
+ return createTagStringWithAlternates(
+ NULL,
+ 0,
+ NULL,
+ 0,
+ region,
+ regionLength,
+ variants,
+ variantsLength,
+ likelySubtags,
+ tag,
+ tagCapacity,
+ err);
+ }
+ }
+
+ /**
+ * Try the language with just the region.
+ **/
+ if (regionLength > 0) {
+
+ const char* likelySubtags = NULL;
+
+ createTagString(
+ lang,
+ langLength,
+ NULL,
+ 0,
+ region,
+ regionLength,
+ NULL,
+ 0,
+ tagBuffer,
+ sizeof(tagBuffer),
+ err);
+ if(U_FAILURE(*err)) {
+ goto error;
+ }
+
+ likelySubtags =
+ findLikelySubtags(
+ tagBuffer,
+ likelySubtagsBuffer,
+ sizeof(likelySubtagsBuffer),
+ err);
+ if(U_FAILURE(*err)) {
+ goto error;
+ }
+
+ if (likelySubtags != NULL) {
+ /* Always use the language tag from the
+ maximal string, since it may be more
+ specific than the one provided. */
+ return createTagStringWithAlternates(
+ NULL,
+ 0,
+ script,
+ scriptLength,
+ NULL,
+ 0,
+ variants,
+ variantsLength,
+ likelySubtags,
+ tag,
+ tagCapacity,
+ err);
+ }
+ }
+
+ /**
+ * Finally, try just the language.
+ **/
+ {
+ const char* likelySubtags = NULL;
+
+ createTagString(
+ lang,
+ langLength,
+ NULL,
+ 0,
+ NULL,
+ 0,
+ NULL,
+ 0,
+ tagBuffer,
+ sizeof(tagBuffer),
+ err);
+ if(U_FAILURE(*err)) {
+ goto error;
+ }
+
+ likelySubtags =
+ findLikelySubtags(
+ tagBuffer,
+ likelySubtagsBuffer,
+ sizeof(likelySubtagsBuffer),
+ err);
+ if(U_FAILURE(*err)) {
+ goto error;
+ }
+
+ if (likelySubtags != NULL) {
+ /* Always use the language tag from the
+ maximal string, since it may be more
+ specific than the one provided. */
+ return createTagStringWithAlternates(
+ NULL,
+ 0,
+ script,
+ scriptLength,
+ region,
+ regionLength,
+ variants,
+ variantsLength,
+ likelySubtags,
+ tag,
+ tagCapacity,
+ err);
+ }
+ }
+
+ return u_terminateChars(
+ tag,
+ tagCapacity,
+ 0,
+ err);
+
+error:
+
+ if (!U_FAILURE(*err)) {
+ *err = U_ILLEGAL_ARGUMENT_ERROR;
+ }
+
+ return -1;
+}
+
+static int32_t
+_uloc_addLikelySubtags(const char* localeID,
+ char* maximizedLocaleID,
+ int32_t maximizedLocaleIDCapacity,
+ UErrorCode* err)
+{
+ char lang[ULOC_LANG_CAPACITY];
+ int32_t langLength = sizeof(lang);
+ char script[ULOC_SCRIPT_CAPACITY];
+ int32_t scriptLength = sizeof(script);
+ char region[ULOC_COUNTRY_CAPACITY];
+ int32_t regionLength = sizeof(region);
+ const char* trailing = "";
+ int32_t trailingLength = 0;
+ int32_t trailingIndex = 0;
+ int32_t resultLength = 0;
+
+ if(U_FAILURE(*err)) {
+ goto error;
+ }
+ else if (localeID == NULL ||
+ maximizedLocaleID == NULL ||
+ maximizedLocaleIDCapacity <= 0) {
+ goto error;
+ }
+
+ trailingIndex = parseTagString(
+ localeID,
+ lang,
+ &langLength,
+ script,
+ &scriptLength,
+ region,
+ ®ionLength,
+ err);
+ if(U_FAILURE(*err)) {
+ /* Overflow indicates an illegal argument error */
+ if (*err == U_BUFFER_OVERFLOW_ERROR) {
+ *err = U_ILLEGAL_ARGUMENT_ERROR;
+ }
+
+ goto error;
+ }
+
+ /* Find the length of the trailing portion. */
+ trailing = &localeID[trailingIndex];
+ trailingLength = uprv_strlen(trailing);
+
+ resultLength =
+ createLikelySubtagsString(
+ lang,
+ langLength,
+ script,
+ scriptLength,
+ region,
+ regionLength,
+ trailing,
+ trailingLength,
+ maximizedLocaleID,
+ maximizedLocaleIDCapacity,
+ err);
+
+ if (resultLength == 0) {
+ const int32_t localIDLength =
+ uprv_strlen(localeID);
+
+ /*
+ * If we get here, we need to return localeID.
+ */
+ uprv_memcpy(
+ maximizedLocaleID,
+ localeID,
+ localIDLength <= maximizedLocaleIDCapacity ?
+ localIDLength : maximizedLocaleIDCapacity);
+
+ resultLength =
+ u_terminateChars(
+ maximizedLocaleID,
+ maximizedLocaleIDCapacity,
+ localIDLength,
+ err);
+ }
+
+ return resultLength;
+
+error:
+
+ if (!U_FAILURE(*err)) {
+ *err = U_ILLEGAL_ARGUMENT_ERROR;
+ }
+
+ return -1;
+}
+
+static int32_t
+_uloc_minimizeSubtags(const char* localeID,
+ char* minimizedLocaleID,
+ int32_t minimizedLocaleIDCapacity,
+ UErrorCode* err)
+{
+ /**
+ * ULOC_FULLNAME_CAPACITY will provide enough capacity
+ * that we can build a string that contains the language,
+ * script and region code without worrying about overrunning
+ * the user-supplied buffer.
+ **/
+ char maximizedTagBuffer[ULOC_FULLNAME_CAPACITY];
+ int32_t maximizedTagBufferLength = sizeof(maximizedTagBuffer);
+
+ char lang[ULOC_LANG_CAPACITY];
+ int32_t langLength = sizeof(lang);
+ char script[ULOC_SCRIPT_CAPACITY];
+ int32_t scriptLength = sizeof(script);
+ char region[ULOC_COUNTRY_CAPACITY];
+ int32_t regionLength = sizeof(region);
+ const char* trailing = "";
+ int32_t trailingLength = 0;
+ int32_t trailingIndex = 0;
+
+ if(U_FAILURE(*err)) {
+ goto error;
+ }
+ else if (localeID == NULL ||
+ minimizedLocaleID == NULL ||
+ minimizedLocaleIDCapacity <= 0) {
+ goto error;
+ }
+
+ trailingIndex =
+ parseTagString(
+ localeID,
+ lang,
+ &langLength,
+ script,
+ &scriptLength,
+ region,
+ ®ionLength,
+ err);
+ if(U_FAILURE(*err)) {
+
+ /* Overflow indicates an illegal argument error */
+ if (*err == U_BUFFER_OVERFLOW_ERROR) {
+ *err = U_ILLEGAL_ARGUMENT_ERROR;
+ }
+
+ goto error;
+ }
+
+ /* Find the spot where the variants begin, if any. */
+ trailing = &localeID[trailingIndex];
+ trailingLength = uprv_strlen(trailing);
+
+ createTagString(
+ lang,
+ langLength,
+ script,
+ scriptLength,
+ region,
+ regionLength,
+ NULL,
+ 0,
+ maximizedTagBuffer,
+ maximizedTagBufferLength,
+ err);
+ if(U_FAILURE(*err)) {
+ goto error;
+ }
+
+ /**
+ * First, we need to first get the maximization
+ * from AddLikelySubtags.
+ **/
+ maximizedTagBufferLength =
+ uloc_addLikelySubtags(
+ maximizedTagBuffer,
+ maximizedTagBuffer,
+ maximizedTagBufferLength,
+ err);
+
+ if(U_FAILURE(*err)) {
+ goto error;
+ }
+
+ /**
+ * Start first with just the language.
+ **/
+ {
+ char tagBuffer[ULOC_FULLNAME_CAPACITY];
+
+ const int32_t tagBufferLength =
+ createLikelySubtagsString(
+ lang,
+ langLength,
+ NULL,
+ 0,
+ NULL,
+ 0,
+ NULL,
+ 0,
+ tagBuffer,
+ sizeof(tagBuffer),
+ err);
+
+ if(U_FAILURE(*err)) {
+ goto error;
+ }
+ else if (uprv_strnicmp(
+ maximizedTagBuffer,
+ tagBuffer,
+ tagBufferLength) == 0) {
+
+ return createTagString(
+ lang,
+ langLength,
+ NULL,
+ 0,
+ NULL,
+ 0,
+ trailing,
+ trailingLength,
+ minimizedLocaleID,
+ minimizedLocaleIDCapacity,
+ err);
+ }
+ }
+
+ /**
+ * Next, try the language and region.
+ **/
+ if (regionLength > 0) {
+
+ char tagBuffer[ULOC_FULLNAME_CAPACITY];
+
+ const int32_t tagBufferLength =
+ createLikelySubtagsString(
+ lang,
+ langLength,
+ NULL,
+ 0,
+ region,
+ regionLength,
+ NULL,
+ 0,
+ tagBuffer,
+ sizeof(tagBuffer),
+ err);
+
+ if(U_FAILURE(*err)) {
+ goto error;
+ }
+ else if (uprv_strnicmp(
+ maximizedTagBuffer,
+ tagBuffer,
+ tagBufferLength) == 0) {
+
+ return createTagString(
+ lang,
+ langLength,
+ NULL,
+ 0,
+ region,
+ regionLength,
+ trailing,
+ trailingLength,
+ minimizedLocaleID,
+ minimizedLocaleIDCapacity,
+ err);
+ }
+ }
+
+ /**
+ * Finally, try the language and script. This is our last chance,
+ * since trying with all three subtags would only yield the
+ * maximal version that we already have.
+ **/
+ if (scriptLength > 0 && regionLength > 0) {
+ char tagBuffer[ULOC_FULLNAME_CAPACITY];
+
+ const int32_t tagBufferLength =
+ createLikelySubtagsString(
+ lang,
+ langLength,
+ script,
+ scriptLength,
+ NULL,
+ 0,
+ NULL,
+ 0,
+ tagBuffer,
+ sizeof(tagBuffer),
+ err);
+
+ if(U_FAILURE(*err)) {
+ goto error;
+ }
+ else if (uprv_strnicmp(
+ maximizedTagBuffer,
+ tagBuffer,
+ tagBufferLength) == 0) {
+
+ return createTagString(
+ lang,
+ langLength,
+ script,
+ scriptLength,
+ NULL,
+ 0,
+ trailing,
+ trailingLength,
+ minimizedLocaleID,
+ minimizedLocaleIDCapacity,
+ err);
+ }
+ }
+
+ {
+ /**
+ * If we got here, return the locale ID parameter.
+ **/
+ const int32_t localeIDLength = uprv_strlen(localeID);
+
+ uprv_memcpy(
+ minimizedLocaleID,
+ localeID,
+ localeIDLength <= minimizedLocaleIDCapacity ?
+ localeIDLength : minimizedLocaleIDCapacity);
+
+ return u_terminateChars(
+ minimizedLocaleID,
+ minimizedLocaleIDCapacity,
+ localeIDLength,
+ err);
+ }
+
+error:
+
+ if (!U_FAILURE(*err)) {
+ *err = U_ILLEGAL_ARGUMENT_ERROR;
+ }
+
+ return -1;
+
+
+}
+
+static UBool
+do_canonicalize(const char* localeID,
+ char* buffer,
+ int32_t bufferCapacity,
+ UErrorCode* err)
+{
+ uloc_canonicalize(
+ localeID,
+ buffer,
+ bufferCapacity,
+ err);
+
+ if (*err == U_STRING_NOT_TERMINATED_WARNING ||
+ *err == U_BUFFER_OVERFLOW_ERROR) {
+ *err = U_ILLEGAL_ARGUMENT_ERROR;
+
+ return FALSE;
+ }
+ else if (U_FAILURE(*err)) {
+
+ return FALSE;
+ }
+ else {
+ return TRUE;
+ }
+}
+
+U_DRAFT int32_t U_EXPORT2
+uloc_addLikelySubtags(const char* localeID,
+ char* maximizedLocaleID,
+ int32_t maximizedLocaleIDCapacity,
+ UErrorCode* err)
+{
+ char localeBuffer[ULOC_FULLNAME_CAPACITY];
+
+ if (!do_canonicalize(
+ localeID,
+ localeBuffer,
+ sizeof(localeBuffer),
+ err)) {
+ return -1;
+ }
+ else {
+ return _uloc_addLikelySubtags(
+ localeBuffer,
+ maximizedLocaleID,
+ maximizedLocaleIDCapacity,
+ err);
+ }
+}
+
+U_DRAFT int32_t U_EXPORT2
+uloc_minimizeSubtags(const char* localeID,
+ char* minimizedLocaleID,
+ int32_t minimizedLocaleIDCapacity,
+ UErrorCode* err)
+{
+ char localeBuffer[ULOC_FULLNAME_CAPACITY];
+
+ if (!do_canonicalize(
+ localeID,
+ localeBuffer,
+ sizeof(localeBuffer),
+ err)) {
+ return -1;
+ }
+ else {
+ return _uloc_minimizeSubtags(
+ localeBuffer,
+ minimizedLocaleID,
+ minimizedLocaleIDCapacity,
+ err);
+ }
+}
+
/*eof*/
diff --git a/icuSources/common/umapfile.c b/icuSources/common/umapfile.c
index 356e55ac..d0117e39 100644
--- a/icuSources/common/umapfile.c
+++ b/icuSources/common/umapfile.c
@@ -1,7 +1,7 @@
/*
******************************************************************************
*
-* Copyright (C) 1999-2006, International Business Machines
+* Copyright (C) 1999-2009, International Business Machines
* Corporation and others. All Rights Reserved.
*
******************************************************************************/
@@ -15,6 +15,12 @@
* wrapper functions.
*
*----------------------------------------------------------------------------*/
+
+/* Needed by OSF and z/OS to get the correct mmap version */
+#if !defined(_XOPEN_SOURCE_EXTENDED)
+#define _XOPEN_SOURCE_EXTENDED 1
+#endif
+
#include "unicode/putil.h"
@@ -48,17 +54,11 @@
# define MAP_IMPLEMENTATION MAP_WIN32
-/* ### Todo: properly auto detect mmap(). Until then, just add your platform here. */
-#elif U_HAVE_MMAP || defined(U_AIX) || defined(U_HPUX) || defined(OS390)
+#elif U_HAVE_MMAP || defined(OS390)
typedef size_t MemoryMap;
# define IS_MAP(map) ((map)!=0)
- /* Needed by OSF to get the correct mmap version */
-# ifndef _XOPEN_SOURCE_EXTENDED
-# define _XOPEN_SOURCE_EXTENDED
-# endif
-
# include
# include
# include
@@ -82,6 +82,9 @@
# define U_ICUDATA_ENTRY_NAME "icudt" U_ICU_VERSION_SHORT U_LIB_SUFFIX_C_NAME_STRING "_dat"
# else
# define MAP_IMPLEMENTATION MAP_POSIX
+# if defined(U_DARWIN)
+# include
+# endif
# endif
#else /* unknown platform, no memory map implementation: use stdio.h and uprv_malloc() instead */
@@ -133,7 +136,7 @@
UDataMemory_init(pData); /* Clear the output struct. */
/* open the input file */
- file=CreateFile(path, GENERIC_READ, FILE_SHARE_READ, NULL,
+ file=CreateFileA(path, GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_RANDOM_ACCESS, NULL);
if(file==INVALID_HANDLE_VALUE) {
@@ -222,6 +225,9 @@
pData->map = (char *)data + length;
pData->pHeader=(const DataHeader *)data;
pData->mapAddr = data;
+#if defined(U_DARWIN) && defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE
+ madvise(data, length, MADV_RANDOM);
+#endif
return TRUE;
}
diff --git a/icuSources/common/umutex.c b/icuSources/common/umutex.c
index 22396f5e..23eca46a 100644
--- a/icuSources/common/umutex.c
+++ b/icuSources/common/umutex.c
@@ -1,7 +1,7 @@
/*
******************************************************************************
*
-* Copyright (C) 1997-2006, International Business Machines
+* Copyright (C) 1997-2008, International Business Machines
* Corporation and others. All Rights Reserved.
*
******************************************************************************
@@ -25,8 +25,16 @@
#if defined(U_DARWIN)
#include
#if (ICU_USE_THREADS == 1) && defined(MAC_OS_X_VERSION_10_4) && defined(MAC_OS_X_VERSION_MIN_REQUIRED) && (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_4)
+#if defined(__STRICT_ANSI__)
+#define UPRV_REMAP_INLINE
+#define inline
+#endif
#include
#define USE_MAC_OS_ATOMIC_INCREMENT 1
+#if defined(UPRV_REMAP_INLINE)
+#undef inline
+#undef UPRV_REMAP_INLINE
+#endif
#endif
#endif
@@ -90,7 +98,7 @@
*
*/
-#define MAX_MUTEXES 30
+#define MAX_MUTEXES 40
static UMTX gGlobalMutex = NULL;
static UMTX gIncDecMutex = NULL;
#if (ICU_USE_THREADS == 1)
@@ -343,6 +351,11 @@ static void initGlobalMutex() {
}
gMutexPoolInitialized = TRUE;
}
+#elif defined (U_DARWIN)
+ /* PTHREAD_MUTEX_INITIALIZER works, don't need to call pthread_mutex_init
+ * as below (which is subject to a race condition)
+ */
+ gMutexPoolInitialized = TRUE;
#elif defined (POSIX)
/* TODO: experimental code. Shouldn't need to explicitly init the mutexes. */
if (gMutexPoolInitialized == FALSE) {
diff --git a/icuSources/common/umutex.h b/icuSources/common/umutex.h
index 06033feb..e02ae336 100644
--- a/icuSources/common/umutex.h
+++ b/icuSources/common/umutex.h
@@ -1,6 +1,6 @@
/*
**********************************************************************
-* Copyright (C) 1997-2005, International Business Machines
+* Copyright (C) 1997-2006, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
*
@@ -57,14 +57,14 @@
#if UMTX_STRONG_MEMORY_MODEL
#define UMTX_CHECK(pMutex, expression, result) \
- (result)=(expression);
+ (result)=(expression)
#else
#define UMTX_CHECK(pMutex, expression, result) \
umtx_lock(pMutex); \
(result)=(expression); \
- umtx_unlock(pMutex);
+ umtx_unlock(pMutex)
#endif
diff --git a/icuSources/common/unames.c b/icuSources/common/unames.c
index c8faf8fe..c12033fa 100644
--- a/icuSources/common/unames.c
+++ b/icuSources/common/unames.c
@@ -1,7 +1,7 @@
/*
******************************************************************************
*
-* Copyright (C) 1999-2006, International Business Machines
+* Copyright (C) 1999-2007, International Business Machines
* Corporation and others. All Rights Reserved.
*
******************************************************************************
diff --git a/icuSources/common/unicode/brkiter.h b/icuSources/common/unicode/brkiter.h
index ba65650b..7df5f140 100644
--- a/icuSources/common/unicode/brkiter.h
+++ b/icuSources/common/unicode/brkiter.h
@@ -1,6 +1,6 @@
/*
********************************************************************************
-* Copyright (C) 1997-2006, International Business Machines
+* Copyright (C) 1997-2007, International Business Machines
* Corporation and others. All Rights Reserved.
********************************************************************************
*
@@ -26,7 +26,7 @@
* \file
* \brief C++ API: Break Iterator.
*/
-
+
#if UCONFIG_NO_BREAK_ITERATION
U_NAMESPACE_BEGIN
@@ -92,8 +92,8 @@ U_NAMESPACE_BEGIN
* file ubrk.h
*
* Code snippits illustrating the use of the Break Iterator APIs
- * are available in the ICU User Guide,
- * http://icu.sourceforge.net/userguide/boundaryAnalysis.html
+ * are available in the ICU User Guide,
+ * http://icu-project.org/userguide/boundaryAnalysis.html
* and in the sample program icu/source/samples/break/break.cpp"
*
*/
@@ -161,7 +161,7 @@ public:
* @param status receives any error codes.
* @return The current UText for this break iterator. If an input
* UText was provided, it will always be returned.
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
virtual UText *getUText(UText *fillIn, UErrorCode &status) const = 0;
@@ -174,7 +174,7 @@ public:
virtual void setText(const UnicodeString &text) = 0;
/**
- * Reset the break iterator to operate over the text represented by
+ * Reset the break iterator to operate over the text represented by
* the UText. The iterator position is reset to the start.
*
* This function makes a shallow clone of the supplied UText. This means
@@ -184,7 +184,7 @@ public:
*
* @param text The UText used to change the text.
* @param status receives any error codes.
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
virtual void setText(UText *text, UErrorCode &status) = 0;
diff --git a/icuSources/common/unicode/docmain.h b/icuSources/common/unicode/docmain.h
index 649eb2a7..973ebea7 100644
--- a/icuSources/common/unicode/docmain.h
+++ b/icuSources/common/unicode/docmain.h
@@ -1,6 +1,6 @@
/********************************************************************
* COPYRIGHT:
- * Copyright (c) 1997-2005, International Business Machines Corporation and
+ * Copyright (c) 1997-2007, International Business Machines Corporation and
* others. All Rights Reserved.
*
* FILE NAME: DOCMAIN.h
@@ -41,18 +41,18 @@
*
API References for Previous Releases
*
The API References for each release of ICU are also available as
* a zip file from the ICU
- * download page.
*
*
diff --git a/icuSources/common/unicode/dtintrv.h b/icuSources/common/unicode/dtintrv.h
new file mode 100644
index 00000000..b55dcd4d
--- /dev/null
+++ b/icuSources/common/unicode/dtintrv.h
@@ -0,0 +1,159 @@
+/*
+*******************************************************************************
+* Copyright (C) 2008, International Business Machines Corporation and
+* others. All Rights Reserved.
+*******************************************************************************
+*
+* File DTINTRV.H
+*
+*******************************************************************************
+*/
+
+#ifndef __DTINTRV_H__
+#define __DTINTRV_H__
+
+#include "unicode/utypes.h"
+#include "unicode/uobject.h"
+
+/**
+ * \file
+ * \brief C++ API: Date Interval data type
+ */
+
+
+U_NAMESPACE_BEGIN
+
+
+/**
+ * This class represents a date interval.
+ * It is a pair of UDate representing from UDate 1 to UDate 2.
+ * @draft ICU 4.0
+**/
+class U_COMMON_API DateInterval : public UObject {
+public:
+
+ /**
+ * Construct a DateInterval given a from date and a to date.
+ * @param fromDate The from date in date interval.
+ * @param toDate The to date in date interval.
+ * @draft ICU 4.0
+ */
+ DateInterval(UDate fromDate, UDate toDate);
+
+ /**
+ * destructor
+ * @draft ICU 4.0
+ */
+ virtual ~DateInterval();
+
+ /**
+ * Get the from date.
+ * @return the from date in dateInterval.
+ * @draft ICU 4.0
+ */
+ UDate getFromDate() const;
+
+ /**
+ * Get the to date.
+ * @return the to date in dateInterval.
+ * @draft ICU 4.0
+ */
+ UDate getToDate() const;
+
+
+ /**
+ * Return the class ID for this class. This is useful only for comparing to
+ * a return value from getDynamicClassID(). For example:
+ *
+ * @return The class ID for all objects of this class.
+ * @draft ICU 4.0
+ */
+ static UClassID U_EXPORT2 getStaticClassID(void);
+
+ /**
+ * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This
+ * method is to implement a simple version of RTTI, since not all C++
+ * compilers support genuine RTTI. Polymorphic operator==() and clone()
+ * methods call this method.
+ *
+ * @return The class ID for this object. All objects of a
+ * given class have the same class ID. Objects of
+ * other classes have different class IDs.
+ * @draft ICU 4.0
+ */
+ virtual UClassID getDynamicClassID(void) const;
+
+
+ /**
+ * Copy constructor.
+ * @draft ICU 4.0
+ */
+ DateInterval(const DateInterval& other);
+
+ /**
+ * Default assignment operator
+ * @draft ICU 4.0
+ */
+ DateInterval& operator=(const DateInterval&);
+
+ /**
+ * Equality operator.
+ * @return TRUE if the two DateIntervals are the same
+ * @draft ICU 4.0
+ */
+ virtual UBool operator==(const DateInterval& other) const;
+
+ /**
+ * Non-equality operator
+ * @return TRUE if the two DateIntervals are not the same
+ * @draft ICU 4.0
+ */
+ UBool operator!=(const DateInterval& other) const;
+
+
+ /**
+ * clone this object.
+ * The caller owns the result and should delete it when done.
+ * @return a cloned DateInterval
+ * @draft ICU 4.0
+ */
+ virtual DateInterval* clone() const;
+
+private:
+ /**
+ * Default constructor, not implemented.
+ * @draft ICU 4.0
+ */
+ DateInterval();
+
+ UDate fromDate;
+ UDate toDate;
+
+} ;// end class DateInterval
+
+
+inline UDate
+DateInterval::getFromDate() const {
+ return fromDate;
+}
+
+
+inline UDate
+DateInterval::getToDate() const {
+ return toDate;
+}
+
+
+inline UBool
+DateInterval::operator!=(const DateInterval& other) const {
+ return ( !operator==(other) );
+}
+
+
+U_NAMESPACE_END
+
+#endif
diff --git a/icuSources/common/unicode/platform.h.in b/icuSources/common/unicode/platform.h.in
index 80766a25..7b4eab2f 100644
--- a/icuSources/common/unicode/platform.h.in
+++ b/icuSources/common/unicode/platform.h.in
@@ -1,7 +1,7 @@
/*
******************************************************************************
*
-* Copyright (C) 1997-2006, International Business Machines
+* Copyright (C) 1997-2007, International Business Machines
* Corporation and others. All Rights Reserved.
*
******************************************************************************
@@ -169,6 +169,11 @@ typedef unsigned int uint32_t;
/* 1 or 0 to enable or disable threads. If undefined, default is: enable threads. */
#define ICU_USE_THREADS @ICU_USE_THREADS@
+/* On strong memory model CPUs (e.g. x86 CPUs), we use a safe & quick double check lock. */
+#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
+#define UMTX_STRONG_MEMORY_MODEL 1
+#endif
+
#ifndef U_DEBUG
#define U_DEBUG @ENABLE_DEBUG@
#endif
@@ -224,11 +229,31 @@ typedef unsigned int uint32_t;
#define U_HAVE_WCSCPY @U_HAVE_WCSCPY@
+/**
+ * \def U_DECLARE_UTF16
+ * Do not use this macro. Use the UNICODE_STRING or U_STRING_DECL macros
+ * instead.
+ * @internal
+ */
+#if @U_CHECK_UTF16_STRING@ || defined(U_CHECK_UTF16_STRING)
+#if (defined(__xlC__) && defined(__IBM_UTF_LITERAL) && U_SIZEOF_WCHAR_T != 2) \
+ || (defined(__HP_aCC) && __HP_aCC >= 035000) \
+ || (defined(__HP_cc) && __HP_cc >= 111106)
+#define U_DECLARE_UTF16(string) u ## string
+#elif (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x550)
+/* || (defined(__SUNPRO_C) && __SUNPRO_C >= 0x580) */
+/* Sun's C compiler has issues with this notation, and it's unreliable. */
+#define U_DECLARE_UTF16(string) U ## string
+#elif U_SIZEOF_WCHAR_T == 2 \
+ && (U_CHARSET_FAMILY == 0 || ((defined(OS390) || defined(OS400)) && defined(__UCS2__)))
+#define U_DECLARE_UTF16(string) L ## string
+#endif
+#endif
+
/*===========================================================================*/
/* Information about POSIX support */
/*===========================================================================*/
-#define U_HAVE_NL_LANGINFO @U_HAVE_NL_LANGINFO@
#define U_HAVE_NL_LANGINFO_CODESET @U_HAVE_NL_LANGINFO_CODESET@
#define U_NL_LANGINFO_CODESET @U_NL_LANGINFO_CODESET@
@@ -249,12 +274,13 @@ typedef unsigned int uint32_t;
/* Symbol import-export control */
/*===========================================================================*/
-#if defined(U_DARWIN) && defined(__GNUC__) && (__GNUC__ >= 4)
-#define USE_GCC_VISIBILITY_ATTRIBUTE 1
-#endif
-
-#ifdef USE_GCC_VISIBILITY_ATTRIBUTE
+#if @U_USE_GCC_VISIBILITY_ATTRIBUTE@
#define U_EXPORT __attribute__((visibility("default")))
+#elif (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x550) \
+ || (defined(__SUNPRO_C) && __SUNPRO_C >= 0x550)
+#define U_EXPORT __global
+/*#elif defined(__HP_aCC) || defined(__HP_cc)
+#define U_EXPORT __declspec(dllexport)*/
#else
#define U_EXPORT
#endif
diff --git a/icuSources/common/unicode/putil.h b/icuSources/common/unicode/putil.h
index bdb385c7..33048778 100644
--- a/icuSources/common/unicode/putil.h
+++ b/icuSources/common/unicode/putil.h
@@ -1,7 +1,7 @@
/*
******************************************************************************
*
-* Copyright (C) 1997-2005, International Business Machines
+* Copyright (C) 1997-2008, International Business Machines
* Corporation and others. All Rights Reserved.
*
******************************************************************************
@@ -58,7 +58,7 @@
* If u_setDataDirectory() has been called, that is it, otherwise
* if the ICU_DATA environment variable is set, use that, otherwise
* If a data directory was specifed at ICU build time
- * (#define ICU_DATA_DIR "path"), use that,
+ * ( #define ICU_DATA_DIR "path" ), use that,
* otherwise no data directory is available.
*
* @return the data directory, or an empty string ("") if no data directory has
diff --git a/icuSources/common/unicode/pwin32.h b/icuSources/common/unicode/pwin32.h
index 198ce8e3..9aad3530 100644
--- a/icuSources/common/unicode/pwin32.h
+++ b/icuSources/common/unicode/pwin32.h
@@ -1,20 +1,20 @@
/*
-******************************************************************************
-*
-* Copyright (C) 1997-2006, International Business Machines
-* Corporation and others. All Rights Reserved.
-*
-******************************************************************************
-*
-* FILE NAME : platform.h
-*
-* Date Name Description
-* 05/13/98 nos Creation (content moved here from ptypes.h).
-* 03/02/99 stephen Added AS400 support.
-* 03/30/99 stephen Added Linux support.
-* 04/13/99 stephen Reworked for autoconf.
-******************************************************************************
-*/
+ ******************************************************************************
+ *
+ * Copyright (C) 1997-2007, International Business Machines
+ * Corporation and others. All Rights Reserved.
+ *
+ ******************************************************************************
+ *
+ * FILE NAME : platform.h
+ *
+ * Date Name Description
+ * 05/13/98 nos Creation (content moved here from ptypes.h).
+ * 03/02/99 stephen Added AS400 support.
+ * 03/30/99 stephen Added Linux support.
+ * 04/13/99 stephen Reworked for autoconf.
+ ******************************************************************************
+ */
/**
* \file
@@ -218,7 +218,7 @@ Intel can define _M_IX86 or _M_X64
/* Determine whether to enable tracing. */
#ifndef U_ENABLE_TRACING
-#define U_ENABLE_TRACING 1
+#define U_ENABLE_TRACING 0
#endif
/* Do we allow ICU users to use the draft APIs by default? */
@@ -240,6 +240,16 @@ Intel can define _M_IX86 or _M_X64
#define U_HAVE_WCSCPY 1
+/**
+ * \def U_DECLARE_UTF16
+ * Do not use this macro. Use the UNICODE_STRING or U_STRING_DECL macros
+ * instead.
+ * @internal
+ */
+#if 1
+#define U_DECLARE_UTF16(string) L ## string
+#endif
+
/*===========================================================================*/
/* Information about POSIX support */
/*===========================================================================*/
@@ -253,6 +263,9 @@ Intel can define _M_IX86 or _M_X64
#if 1
#define U_TZNAME _tzname
#endif
+#if 1
+#define U_DAYLIGHT _daylight
+#endif
#define U_HAVE_MMAP 0
#define U_HAVE_POPEN 0
diff --git a/icuSources/common/unicode/rbbi.h b/icuSources/common/unicode/rbbi.h
index 51bab4b1..90ec6e6b 100644
--- a/icuSources/common/unicode/rbbi.h
+++ b/icuSources/common/unicode/rbbi.h
@@ -1,6 +1,6 @@
/*
***************************************************************************
-* Copyright (C) 1999-2006 International Business Machines Corporation *
+* Copyright (C) 1999-2008 International Business Machines Corporation *
* and others. All rights reserved. *
***************************************************************************
@@ -170,6 +170,18 @@ protected:
// constructors
//=======================================================================
+ /**
+ * Constant to be used in the constructor
+ * RuleBasedBreakIterator(RBBIDataHeader*, EDontAdopt, UErrorCode &);
+ * which does not adopt the memory indicated by the RBBIDataHeader*
+ * parameter.
+ *
+ * @internal
+ */
+ enum EDontAdopt {
+ kDontAdopt
+ };
+
/**
* Constructor from a flattened set of RBBI data in malloced memory.
* RulesBasedBreakIterators built from a custom set of rules
@@ -182,6 +194,16 @@ protected:
*/
RuleBasedBreakIterator(RBBIDataHeader* data, UErrorCode &status);
+ /**
+ * Constructor from a flattened set of RBBI data in memory which need not
+ * be malloced (e.g. it may be a memory-mapped file, etc.).
+ *
+ * This version does not adopt the memory, and does not
+ * free it when done.
+ * @internal
+ */
+ RuleBasedBreakIterator(const RBBIDataHeader* data, enum EDontAdopt dontAdopt, UErrorCode &status);
+
friend class RBBIRuleBuilder;
/** @internal */
@@ -336,7 +358,7 @@ public:
* @param status receives any error codes.
* @return The current UText for this break iterator. If an input
* UText was provided, it will always be returned.
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
virtual UText *getUText(UText *fillIn, UErrorCode &status) const;
@@ -368,7 +390,7 @@ public:
*
* @param text The UText used to change the text.
* @param status Receives any error codes.
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
virtual void setText(UText *text, UErrorCode &status);
diff --git a/icuSources/common/unicode/resbund.h b/icuSources/common/unicode/resbund.h
index ec0e620b..6d6b9913 100644
--- a/icuSources/common/unicode/resbund.h
+++ b/icuSources/common/unicode/resbund.h
@@ -1,7 +1,7 @@
/*
******************************************************************************
*
-* Copyright (C) 1996-2005, International Business Machines Corporation
+* Copyright (C) 1996-2007, International Business Machines Corporation
* and others. All Rights Reserved.
*
******************************************************************************
@@ -66,9 +66,9 @@ U_NAMESPACE_BEGIN
* locale and then ask it for individual resources.
*
* Resource bundles in ICU4C are currently defined using text files which conform to the following
- * BNF definition.
+ * BNF definition.
* More on resource bundle concepts and syntax can be found in the
- * Users Guide.
+ * Users Guide.
*
*
* The ResourceBundle class is not suitable for subclassing.
diff --git a/icuSources/common/unicode/strenum.h b/icuSources/common/unicode/strenum.h
index 5e956430..ce42195a 100644
--- a/icuSources/common/unicode/strenum.h
+++ b/icuSources/common/unicode/strenum.h
@@ -1,7 +1,7 @@
/*
*******************************************************************************
*
-* Copyright (C) 2002-2006, International Business Machines
+* Copyright (C) 2002-2007, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
@@ -189,7 +189,7 @@ public:
*
* @param that The other string enumeration to compare this object to
* @return TRUE if the enumerations are equal. FALSE if not.
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
virtual UBool operator==(const StringEnumeration& that)const;
/**
@@ -197,7 +197,7 @@ public:
*
* @param that The other string enumeration to compare this object to
* @return TRUE if the enumerations are equal. FALSE if not.
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
virtual UBool operator!=(const StringEnumeration& that)const;
diff --git a/icuSources/common/unicode/ubidi.h b/icuSources/common/unicode/ubidi.h
index 71d181ca..25f22b93 100644
--- a/icuSources/common/unicode/ubidi.h
+++ b/icuSources/common/unicode/ubidi.h
@@ -1,7 +1,7 @@
/*
******************************************************************************
*
-* Copyright (C) 1999-2006, International Business Machines
+* Copyright (C) 1999-2008, International Business Machines
* Corporation and others. All Rights Reserved.
*
******************************************************************************
@@ -11,7 +11,7 @@
* indentation:4
*
* created on: 1999jul27
-* created by: Markus W. Scherer
+* created by: Markus W. Scherer, updated by Matitiahu Allouche
*/
#ifndef UBIDI_H
@@ -22,9 +22,9 @@
/**
*\file
- * \brief C API: BIDI algorithm
+ * \brief C API: Bidi algorithm
*
- *
BIDI algorithm for ICU
+ *
Bidi algorithm for ICU
*
* This is an implementation of the Unicode Bidirectional algorithm.
* The algorithm is defined in the
@@ -33,7 +33,7 @@
*
* Note: Libraries that perform a bidirectional algorithm and
* reorder strings accordingly are sometimes called "Storage Layout Engines".
- * ICU's BiDi and shaping (u_shapeArabic()) APIs can be used at the core of such
+ * ICU's Bidi and shaping (u_shapeArabic()) APIs can be used at the core of such
* "Storage Layout Engines".
*
*
General remarks about the API:
@@ -50,18 +50,18 @@
* Some of the API functions provide access to "runs".
* Such a "run" is defined as a sequence of characters
* that are at the same embedding level
- * after performing the BIDI algorithm.
+ * after performing the Bidi algorithm.
*
* @author Markus W. Scherer
* @version 1.0
*
*
- *
Sample code for the ICU BIDI API
+ *
Sample code for the ICU Bidi API
*
- *
Rendering a paragraph with the ICU BiDi API
+ *
Rendering a paragraph with the ICU Bidi API
*
* This is (hypothetical) sample code that illustrates
- * how the ICU BiDi API could be used to render a paragraph of text.
+ * how the ICU Bidi API could be used to render a paragraph of text.
* Rendering code depends highly on the graphics system,
* therefore this sample code must make a lot of assumptions,
* which may or may not match any existing graphics system's properties.
@@ -289,7 +289,7 @@
/**
* UBiDiLevel is the type of the level values in this
- * BiDi implementation.
+ * Bidi implementation.
* It holds an embedding level and indicates the visual direction
* by its bit 0 (even/odd value).
*
@@ -300,7 +300,7 @@
*
bit 7 of an embeddingLevels[]
* value indicates whether the using application is
* specifying the level of a character to override whatever the
- * BiDi implementation would resolve it to.
+ * Bidi implementation would resolve it to.
*
paraLevel can be set to the
* pseudo-level values UBIDI_DEFAULT_LTR
* and UBIDI_DEFAULT_RTL.
@@ -329,14 +329,55 @@
*/
typedef uint8_t UBiDiLevel;
-/** Paragraph level setting.
- * If there is no strong character, then set the paragraph level to 0 (left-to-right).
+/** Paragraph level setting.
+ *
+ * Constant indicating that the base direction depends on the first strong
+ * directional character in the text according to the Unicode Bidirectional
+ * Algorithm. If no strong directional character is present,
+ * then set the paragraph level to 0 (left-to-right).
+ *
+ * If this value is used in conjunction with reordering modes
+ * UBIDI_REORDER_INVERSE_LIKE_DIRECT or
+ * UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL, the text to reorder
+ * is assumed to be visual LTR, and the text after reordering is required
+ * to be the corresponding logical string with appropriate contextual
+ * direction. The direction of the result string will be RTL if either
+ * the righmost or leftmost strong character of the source text is RTL
+ * or Arabic Letter, the direction will be LTR otherwise.
+ *
+ * If reordering option UBIDI_OPTION_INSERT_MARKS is set, an RLM may
+ * be added at the beginning of the result string to ensure round trip
+ * (that the result string, when reordered back to visual, will produce
+ * the original source text).
+ * @see UBIDI_REORDER_INVERSE_LIKE_DIRECT
+ * @see UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL
* @stable ICU 2.0
*/
#define UBIDI_DEFAULT_LTR 0xfe
-/** Paragraph level setting.
- * If there is no strong character, then set the paragraph level to 1 (right-to-left).
+/** Paragraph level setting.
+ *
+ * Constant indicating that the base direction depends on the first strong
+ * directional character in the text according to the Unicode Bidirectional
+ * Algorithm. If no strong directional character is present,
+ * then set the paragraph level to 1 (right-to-left).
+ *
+ * If this value is used in conjunction with reordering modes
+ * UBIDI_REORDER_INVERSE_LIKE_DIRECT or
+ * UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL, the text to reorder
+ * is assumed to be visual LTR, and the text after reordering is required
+ * to be the corresponding logical string with appropriate contextual
+ * direction. The direction of the result string will be RTL if either
+ * the righmost or leftmost strong character of the source text is RTL
+ * or Arabic Letter, or if the text contains no strong character;
+ * the direction will be LTR otherwise.
+ *
+ * If reordering option UBIDI_OPTION_INSERT_MARKS is set, an RLM may
+ * be added at the beginning of the result string to ensure round trip
+ * (that the result string, when reordered back to visual, will produce
+ * the original source text).
+ * @see UBIDI_REORDER_INVERSE_LIKE_DIRECT
+ * @see UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL
* @stable ICU 2.0
*/
#define UBIDI_DEFAULT_RTL 0xff
@@ -357,15 +398,15 @@ typedef uint8_t UBiDiLevel;
/**
* Special value which can be returned by the mapping functions when a logical
* index has no corresponding visual index or vice-versa. This may happen
- * for the logical-to-visual mapping of a BiDi control when option
+ * for the logical-to-visual mapping of a Bidi control when option
* #UBIDI_OPTION_REMOVE_CONTROLS is specified. This can also happen
- * for the visual-to-logical mapping of a BiDi mark (LRM or RLM) inserted
+ * for the visual-to-logical mapping of a Bidi mark (LRM or RLM) inserted
* by option #UBIDI_OPTION_INSERT_MARKS.
* @see ubidi_getVisualIndex
* @see ubidi_getVisualMap
* @see ubidi_getLogicalIndex
* @see ubidi_getLogicalMap
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
#define UBIDI_MAP_NOWHERE (-1)
@@ -389,7 +430,7 @@ typedef enum UBiDiDirection UBiDiDirection;
* Forward declaration of the UBiDi structure for the declaration of
* the API functions. Its fields are implementation-specific.
* This structure holds information about a paragraph (or multiple paragraphs)
- * of text with BiDi-algorithm-related details, or about one line of
+ * of text with Bidi-algorithm-related details, or about one line of
* such a paragraph.
* Reordering can be done on a line, or on one or more paragraphs which are
* then interpreted each as one single line.
@@ -403,9 +444,9 @@ typedef struct UBiDi UBiDi;
/**
* Allocate a UBiDi structure.
* Such an object is initially empty. It is assigned
- * the BiDi properties of a piece of text containing one or more paragraphs
+ * the Bidi properties of a piece of text containing one or more paragraphs
* by ubidi_setPara()
- * or the BiDi properties of a line within a paragraph by
+ * or the Bidi properties of a line within a paragraph by
* ubidi_setLine().
* This object can be reused for as long as it is not deallocated
* by calling ubidi_close().
@@ -479,30 +520,30 @@ U_STABLE void U_EXPORT2
ubidi_close(UBiDi *pBiDi);
/**
- * Modify the operation of the BiDi algorithm such that it
- * approximates an "inverse BiDi" algorithm. This function
+ * Modify the operation of the Bidi algorithm such that it
+ * approximates an "inverse Bidi" algorithm. This function
* must be called before ubidi_setPara().
*
- *
The normal operation of the BiDi algorithm as described
+ *
The normal operation of the Bidi algorithm as described
* in the Unicode Technical Report is to take text stored in logical
* (keyboard, typing) order and to determine the reordering of it for visual
* rendering.
* Some legacy systems store text in visual order, and for operations
* with standard, Unicode-based algorithms, the text needs to be transformed
* to logical order. This is effectively the inverse algorithm of the
- * described BiDi algorithm. Note that there is no standard algorithm for
- * this "inverse BiDi" and that the current implementation provides only an
- * approximation of "inverse BiDi".
+ * described Bidi algorithm. Note that there is no standard algorithm for
+ * this "inverse Bidi" and that the current implementation provides only an
+ * approximation of "inverse Bidi".
*
*
With isInverse set to TRUE,
* this function changes the behavior of some of the subsequent functions
- * in a way that they can be used for the inverse BiDi algorithm.
+ * in a way that they can be used for the inverse Bidi algorithm.
* Specifically, runs of text with numeric characters will be treated in a
* special way and may need to be surrounded with LRM characters when they are
* written in reordered sequence.
*
*
Output runs should be retrieved using ubidi_getVisualRun().
- * Since the actual input for "inverse BiDi" is visually ordered text and
+ * Since the actual input for "inverse Bidi" is visually ordered text and
* ubidi_getVisualRun() gets the reordered runs, these are actually
* the runs of the logically ordered output.
*
@@ -519,7 +560,7 @@ ubidi_close(UBiDi *pBiDi);
*
* @param pBiDi is a UBiDi object.
*
- * @param isInverse specifies "forward" or "inverse" BiDi operation.
+ * @param isInverse specifies "forward" or "inverse" Bidi operation.
*
* @see ubidi_setPara
* @see ubidi_writeReordered
@@ -530,14 +571,14 @@ U_STABLE void U_EXPORT2
ubidi_setInverse(UBiDi *pBiDi, UBool isInverse);
/**
- * Is this BiDi object set to perform the inverse BiDi algorithm?
+ * Is this Bidi object set to perform the inverse Bidi algorithm?
*
Note: calling this function after setting the reordering mode with
* ubidi_setReorderingMode will return TRUE if the
* reordering mode was set to #UBIDI_REORDER_INVERSE_NUMBERS_AS_L,
* FALSE for all other values.
*
* @param pBiDi is a UBiDi object.
- * @return TRUE if the BiDi object is set to perform the inverse BiDi algorithm
+ * @return TRUE if the Bidi object is set to perform the inverse Bidi algorithm
* by handling numbers as L.
*
* @see ubidi_setInverse
@@ -572,11 +613,11 @@ U_STABLE void U_EXPORT2
ubidi_orderParagraphsLTR(UBiDi *pBiDi, UBool orderParagraphsLTR);
/**
- * Is this BiDi object set to allocate level 0 to block separators so that
+ * Is this Bidi object set to allocate level 0 to block separators so that
* successive paragraphs progress from left to right?
*
* @param pBiDi is a UBiDi object.
- * @return TRUE if the BiDi object is set to allocate level 0 to block
+ * @return TRUE if the Bidi object is set to allocate level 0 to block
* separators.
*
* @see ubidi_orderParagraphsLTR
@@ -586,57 +627,59 @@ U_STABLE UBool U_EXPORT2
ubidi_isOrderParagraphsLTR(UBiDi *pBiDi);
/**
- * UBiDiReorderingMode values indicate which variant of the BiDi
+ * UBiDiReorderingMode values indicate which variant of the Bidi
* algorithm to use.
*
* @see ubidi_setReorderingMode
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
typedef enum UBiDiReorderingMode {
- /** Regular Logical to Visual BiDi algorithm according to Unicode.
- * This is a 0 value. @draft ICU 3.6 */
+ /** Regular Logical to Visual Bidi algorithm according to Unicode.
+ * This is a 0 value.
+ * @stable ICU 3.6 */
UBIDI_REORDER_DEFAULT = 0,
/** Logical to Visual algorithm which handles numbers in a way which
* mimicks the behavior of Windows XP.
- * @draft ICU 3.6 */
+ * @stable ICU 3.6 */
UBIDI_REORDER_NUMBERS_SPECIAL,
/** Logical to Visual algorithm grouping numbers with adjacent R characters
* (reversible algorithm).
- * @draft ICU 3.6 */
+ * @stable ICU 3.6 */
UBIDI_REORDER_GROUP_NUMBERS_WITH_R,
/** Reorder runs only to transform a Logical LTR string to the Logical RTL
* string with the same display, or vice-versa.
* If this mode is set together with option
- * #UBIDI_OPTION_INSERT_MARKS, some BiDi controls in the source
+ * #UBIDI_OPTION_INSERT_MARKS, some Bidi controls in the source
* text may be removed and other controls may be added to produce the
* minimum combination which has the required display.
- * @draft ICU 3.6 */
+ * @stable ICU 3.6 */
UBIDI_REORDER_RUNS_ONLY,
/** Visual to Logical algorithm which handles numbers like L
* (same algorithm as selected by ubidi_setInverse(TRUE).
* @see ubidi_setInverse
- * @draft ICU 3.6 */
+ * @stable ICU 3.6 */
UBIDI_REORDER_INVERSE_NUMBERS_AS_L,
/** Visual to Logical algorithm equivalent to the regular Logical to Visual
- * algorithm. @draft ICU 3.6 */
+ * algorithm.
+ * @stable ICU 3.6 */
UBIDI_REORDER_INVERSE_LIKE_DIRECT,
- /** Inverse BiDi (Visual to Logical) algorithm for the
- * UBIDI_REORDER_NUMBERS_SPECIAL BiDi algorithm.
- * @draft ICU 3.6 */
+ /** Inverse Bidi (Visual to Logical) algorithm for the
+ * UBIDI_REORDER_NUMBERS_SPECIAL Bidi algorithm.
+ * @stable ICU 3.6 */
UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL,
/** Number of values for reordering mode.
- * @draft ICU 3.6 */
+ * @stable ICU 3.6 */
UBIDI_REORDER_COUNT
} UBiDiReorderingMode;
/**
- * Modify the operation of the BiDi algorithm such that it implements some
- * variant to the basic BiDi algorithm or approximates an "inverse BiDi"
+ * Modify the operation of the Bidi algorithm such that it implements some
+ * variant to the basic Bidi algorithm or approximates an "inverse Bidi"
* algorithm, depending on different values of the "reordering mode".
* This function must be called before ubidi_setPara(), and stays
* in effect until called again with a different argument.
*
- *
The normal operation of the BiDi algorithm as described
+ *
The normal operation of the Bidi algorithm as described
* in the Unicode Standard Annex #9 is to take text stored in logical
* (keyboard, typing) order and to determine how to reorder it for visual
* rendering.
With the reordering mode set to a value other than
* #UBIDI_REORDER_DEFAULT, this function changes the behavior of
* some of the subsequent functions in a way such that they implement an
- * inverse BiDi algorithm or some other algorithm variants.
+ * inverse Bidi algorithm or some other algorithm variants.
*
*
Some legacy systems store text in visual order, and for operations
* with standard, Unicode-based algorithms, the text needs to be transformed
* into logical order. This is effectively the inverse algorithm of the
- * described BiDi algorithm. Note that there is no standard algorithm for
- * this "inverse BiDi", so a number of variants are implemented here.
+ * described Bidi algorithm. Note that there is no standard algorithm for
+ * this "inverse Bidi", so a number of variants are implemented here.
*
*
In other cases, it may be desirable to emulate some variant of the
* Logical to Visual algorithm (e.g. one used in MS Windows), or perform a
@@ -658,13 +701,13 @@ typedef enum UBiDiReorderingMode {
*
*
*
When the reordering mode is set to #UBIDI_REORDER_DEFAULT,
- * the standard BiDi Logical to Visual algorithm is applied.
+ * the standard Bidi Logical to Visual algorithm is applied.
*
*
When the reordering mode is set to
* #UBIDI_REORDER_NUMBERS_SPECIAL,
- * the algorithm used to perform BiDi transformations when calling
+ * the algorithm used to perform Bidi transformations when calling
* ubidi_setPara should approximate the algorithm used in
- * Microsoft Windows XP rather than strictly conform to the Unicode BiDi
+ * Microsoft Windows XP rather than strictly conform to the Unicode Bidi
* algorithm.
*
* The differences between the basic algorithm and the algorithm addressed
@@ -688,7 +731,7 @@ typedef enum UBiDiReorderingMode {
* (from visual to logical and back to visual) must be achieved without
* adding LRM characters. However, this is a variation from the standard
* Unicode Bidi algorithm.
- * The source text should not contain BiDi control characters other than LRM
+ * The source text should not contain Bidi control characters other than LRM
* or RLM.
*
*
When the reordering mode is set to
@@ -706,7 +749,7 @@ typedef enum UBiDiReorderingMode {
* This mode may be needed when logical text which is basically Arabic or
* Hebrew, with possible included numbers or phrases in English, has to be
* displayed as if it had an even embedding level (this can happen if the
- * displaying application treats all text as if it was basically LTR.
+ * displaying application treats all text as if it was basically LTR).
*
* This mode may also be needed in the reverse case, when logical text which is
* basically English, with possible included phrases in Arabic or Hebrew, has to
@@ -716,11 +759,11 @@ typedef enum UBiDiReorderingMode {
* if the display subsystem supports these formatting controls. If it does not,
* the problem may be handled by transforming the source text in this mode
* before displaying it, so that it will be displayed properly.
- * The source text should not contain BiDi control characters other than LRM
+ * The source text should not contain Bidi control characters other than LRM
* or RLM.
*
*
When the reordering mode is set to
- * #UBIDI_REORDER_INVERSE_NUMBERS_AS_L, an "inverse BiDi" algorithm
+ * #UBIDI_REORDER_INVERSE_NUMBERS_AS_L, an "inverse Bidi" algorithm
* is applied.
* Runs of text with numeric characters will be treated like LTR letters and
* may need to be surrounded with LRM characters when they are written in
@@ -731,9 +774,9 @@ typedef enum UBiDiReorderingMode {
*
*
When the reordering mode is set to
* #UBIDI_REORDER_INVERSE_LIKE_DIRECT, the "direct" Logical to Visual
- * BiDi algorithm is used as an approximation of an "inverse BiDi" algorithm.
+ * Bidi algorithm is used as an approximation of an "inverse Bidi" algorithm.
* This mode is similar to mode #UBIDI_REORDER_INVERSE_NUMBERS_AS_L
- * but is closer to the regular BiDi algorithm.
+ * but is closer to the regular Bidi algorithm.
*
* For example, an LTR paragraph with the content "FED 123 456 CBA" (where
* upper case represents RTL characters) will be transformed to
@@ -741,80 +784,80 @@ typedef enum UBiDiReorderingMode {
* with mode UBIDI_REORDER_INVERSE_NUMBERS_AS_L.
* When used in conjunction with option
* #UBIDI_OPTION_INSERT_MARKS, this mode generally
- * adds BiDi marks to the output significantly more sparingly than mode
+ * adds Bidi marks to the output significantly more sparingly than mode
* #UBIDI_REORDER_INVERSE_NUMBERS_AS_L with option
* #UBIDI_INSERT_LRM_FOR_NUMERIC in calls to
* ubidi_writeReordered.
*
*
When the reordering mode is set to
* #UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL, the Logical to Visual
- * BiDi algorithm used in Windows XP is used as an approximation of an
- * "inverse BiDi" algorithm.
+ * Bidi algorithm used in Windows XP is used as an approximation of an
+ * "inverse Bidi" algorithm.
*
* For example, an LTR paragraph with the content "abc FED123" (where
* upper case represents RTL characters) will be transformed to
* "abc 123DEF.
*
*
- *
In all the reordering modes specifying an "inverse BiDi" algorithm
+ *
In all the reordering modes specifying an "inverse Bidi" algorithm
* (i.e. those with a name starting with UBIDI_REORDER_INVERSE),
* output runs should be retrieved using
* ubidi_getVisualRun(), and the output text with
* ubidi_writeReordered(). The caller should keep in mind that in
- * "inverse BiDi" modes the input is actually visually ordered text and
+ * "inverse Bidi" modes the input is actually visually ordered text and
* reordered output returned by ubidi_getVisualRun() or
* ubidi_writeReordered() are actually runs or character string
* of logically ordered output.
- * For all the "inverse BiDi" modes, the source text should not contain
- * BiDi control characters other than LRM or RLM.
+ * For all the "inverse Bidi" modes, the source text should not contain
+ * Bidi control characters other than LRM or RLM.
*
*
Note that option #UBIDI_OUTPUT_REVERSE of
* ubidi_writeReordered has no useful meaning and should not be
* used in conjunction with any value of the reordering mode specifying
- * "inverse BiDi" or with value UBIDI_REORDER_RUNS_ONLY.
+ * "inverse Bidi" or with value UBIDI_REORDER_RUNS_ONLY.
*
* @param pBiDi is a UBiDi object.
- * @param reorderingMode specifies the required variant of the BiDi algorithm.
+ * @param reorderingMode specifies the required variant of the Bidi algorithm.
*
* @see UBiDiReorderingMode
* @see ubidi_setInverse
* @see ubidi_setPara
* @see ubidi_writeReordered
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
-U_DRAFT void U_EXPORT2
+U_STABLE void U_EXPORT2
ubidi_setReorderingMode(UBiDi *pBiDi, UBiDiReorderingMode reorderingMode);
/**
- * What is the requested reordering mode for a given BiDi object?
+ * What is the requested reordering mode for a given Bidi object?
*
* @param pBiDi is a UBiDi object.
- * @return the current reordering mode of the BiDi object
+ * @return the current reordering mode of the Bidi object
* @see ubidi_setReorderingMode
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
-U_DRAFT UBiDiReorderingMode U_EXPORT2
+U_STABLE UBiDiReorderingMode U_EXPORT2
ubidi_getReorderingMode(UBiDi *pBiDi);
/**
* UBiDiReorderingOption values indicate which options are
- * specified to affect the BiDi algorithm.
+ * specified to affect the Bidi algorithm.
*
* @see ubidi_setReorderingOptions
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
typedef enum UBiDiReorderingOption {
/**
* option value for ubidi_setReorderingOptions:
* disable all the options which can be set with this function
* @see ubidi_setReorderingOptions
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
UBIDI_OPTION_DEFAULT = 0,
/**
* option bit for ubidi_setReorderingOptions:
- * insert BiDi marks (LRM or RLM) when needed to ensure correct result of
+ * insert Bidi marks (LRM or RLM) when needed to ensure correct result of
* a reordering to a Logical order
*
*
This option must be set or reset before calling
@@ -838,7 +881,7 @@ typedef enum UBiDiReorderingOption {
*
For other reordering modes, a minimum number of LRM or RLM characters
* will be added to the source text after reordering it so as to ensure
* round trip, i.e. when applying the inverse reordering mode on the
- * resulting logical text with removal of BiDi marks
+ * resulting logical text with removal of Bidi marks
* (option #UBIDI_OPTION_REMOVE_CONTROLS set before calling
* ubidi_setPara() or option #UBIDI_REMOVE_BIDI_CONTROLS
* in ubidi_writeReordered), the result will be identical to the
@@ -854,13 +897,13 @@ typedef enum UBiDiReorderingOption {
*
* @see ubidi_setReorderingMode
* @see ubidi_setReorderingOptions
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
UBIDI_OPTION_INSERT_MARKS = 1,
/**
* option bit for ubidi_setReorderingOptions:
- * remove BiDi control characters
+ * remove Bidi control characters
*
*
This option must be set or reset before calling
* ubidi_setPara.
@@ -872,7 +915,7 @@ typedef enum UBiDiReorderingOption {
*
* @see ubidi_setReorderingMode
* @see ubidi_setReorderingOptions
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
UBIDI_OPTION_REMOVE_CONTROLS = 2,
@@ -920,14 +963,14 @@ typedef enum UBiDiReorderingOption {
* @see ubidi_setReorderingOptions
* @see ubidi_getProcessedLength
* @see ubidi_orderParagraphsLTR
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
UBIDI_OPTION_STREAMING = 4
} UBiDiReorderingOption;
/**
* Specify which of the reordering options
- * should be applied during BiDi transformations.
+ * should be applied during Bidi transformations.
*
* @param pBiDi is a UBiDi object.
* @param reorderingOptions is a combination of zero or more of the following
@@ -936,24 +979,24 @@ typedef enum UBiDiReorderingOption {
* #UBIDI_OPTION_REMOVE_CONTROLS, #UBIDI_OPTION_STREAMING.
*
* @see ubidi_getReorderingOptions
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
-U_DRAFT void U_EXPORT2
+U_STABLE void U_EXPORT2
ubidi_setReorderingOptions(UBiDi *pBiDi, uint32_t reorderingOptions);
/**
- * What are the reordering options applied to a given BiDi object?
+ * What are the reordering options applied to a given Bidi object?
*
* @param pBiDi is a UBiDi object.
- * @return the current reordering options of the BiDi object
+ * @return the current reordering options of the Bidi object
* @see ubidi_setReorderingOptions
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
-U_DRAFT uint32_t U_EXPORT2
+U_STABLE uint32_t U_EXPORT2
ubidi_getReorderingOptions(UBiDi *pBiDi);
/**
- * Perform the Unicode BiDi algorithm. It is defined in the
+ * Perform the Unicode Bidi algorithm. It is defined in the
* Unicode Standard Anned #9,
* version 13,
* also described in The Unicode Standard, Version 4.0 .
@@ -983,7 +1026,7 @@ ubidi_getReorderingOptions(UBiDi *pBiDi);
* which will be set to contain the reordering information,
* especially the resolved levels for all the characters in text.
*
- * @param text is a pointer to the text that the BiDi algorithm will be performed on.
+ * @param text is a pointer to the text that the Bidi algorithm will be performed on.
* This pointer is stored in the UBiDi object and can be retrieved
* with ubidi_getText().
* Note: the text must be (at least) length long.
@@ -1018,7 +1061,7 @@ ubidi_getReorderingOptions(UBiDi *pBiDi);
* the embeddingLevels array must not be
* deallocated before the UBiDi structure is destroyed or reused,
* and the embeddingLevels
- * should not be modified to avoid unexpected results on subsequent BiDi operations.
+ * should not be modified to avoid unexpected results on subsequent Bidi operations.
* However, the ubidi_setPara() and
* ubidi_setLine() functions may modify some or all of the levels.
* After the UBiDi object is reused or destroyed, the caller
@@ -1068,7 +1111,7 @@ ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length,
*
* @param limit is just behind the line's last index into the text
* (its last index +1).
- * It must be 0<=start<=limit<=containing paragraph limit.
+ * It must be 0<=startcontaining paragraph limit.
* If the specified line crosses a paragraph boundary, the function
* will terminate with error code U_ILLEGAL_ARGUMENT_ERROR.
*
@@ -1091,7 +1134,9 @@ ubidi_setLine(const UBiDi *pParaBiDi,
*
* @param pBiDi is the paragraph or line UBiDi object.
*
- * @return A UBIDI_XXX value that indicates if the entire text
+ * @return a value of UBIDI_LTR, UBIDI_RTL
+ * or UBIDI_MIXED
+ * that indicates if the entire text
* represented by this object is unidirectional,
* and which direction, or if it is mixed-directional.
*
@@ -1157,7 +1202,9 @@ ubidi_countParagraphs(UBiDi *pBiDi);
/**
* Get a paragraph, given a position within the text.
- * This function returns information about a paragraph.
+ * This function returns information about a paragraph.
+ * Note: if the paragraph index is known, it is more efficient to
+ * retrieve the paragraph information using ubidi_getParagraphByIndex().
*
* @param pBiDi is the paragraph or line UBiDi object.
*
@@ -1229,9 +1276,11 @@ ubidi_getParagraphByIndex(const UBiDi *pBiDi, int32_t paraIndex,
*
* @param pBiDi is the paragraph or line UBiDi object.
*
- * @param charIndex the index of a character.
+ * @param charIndex the index of a character. It must be in the range
+ * [0..ubidi_getProcessedLength(pBiDi)].
*
- * @return The level for the character at charIndex.
+ * @return The level for the character at charIndex (0 if charIndex is not
+ * in the valid range).
*
* @see UBiDiLevel
* @see ubidi_getProcessedLength
@@ -1269,16 +1318,16 @@ ubidi_getLevels(UBiDi *pBiDi, UErrorCode *pErrorCode);
*
* @param pBiDi is the paragraph or line UBiDi object.
*
- * @param logicalStart is the first character of the run.
+ * @param logicalPosition is a logical position within the source text.
*
- * @param pLogicalLimit will receive the limit of the run.
+ * @param pLogicalLimit will receive the limit of the corresponding run.
* The l-value that you point to here may be the
* same expression (variable) as the one for
- * logicalStart.
+ * logicalPosition.
* This pointer can be NULL if this
* value is not necessary.
*
- * @param pLevel will receive the level of the run.
+ * @param pLevel will receive the level of the corresponding run.
* This pointer can be NULL if this
* value is not necessary.
*
@@ -1286,7 +1335,7 @@ ubidi_getLevels(UBiDi *pBiDi, UErrorCode *pErrorCode);
* @stable ICU 2.0
*/
U_STABLE void U_EXPORT2
-ubidi_getLogicalRun(const UBiDi *pBiDi, int32_t logicalStart,
+ubidi_getLogicalRun(const UBiDi *pBiDi, int32_t logicalPosition,
int32_t *pLogicalLimit, UBiDiLevel *pLevel);
/**
@@ -1354,8 +1403,12 @@ ubidi_countRuns(UBiDi *pBiDi, UErrorCode *pErrorCode);
*
*
* Note that in right-to-left runs, code like this places
- * modifier letters before base characters and second surrogates
- * before first ones.
+ * second surrogates before first ones (which is generally a bad idea)
+ * and combining characters before base characters.
+ *
+ * Use of ubidi_writeReordered(), optionally with the
+ * #UBIDI_KEEP_BASE_COMBINING option, can be considered in order
+ * to avoid these issues.
* @stable ICU 2.0
*/
U_STABLE UBiDiDirection U_EXPORT2
@@ -1369,12 +1422,22 @@ ubidi_getVisualRun(UBiDi *pBiDi, int32_t runIndex,
* ubidi_getLogicalMap() is more efficient.
*
* The value returned may be #UBIDI_MAP_NOWHERE if there is no
- * visual position because the corresponding text character is a BiDi control
+ * visual position because the corresponding text character is a Bidi control
* removed from output by the option #UBIDI_OPTION_REMOVE_CONTROLS.
*
+ * When the visual output is altered by using options of
+ * ubidi_writeReordered() such as UBIDI_INSERT_LRM_FOR_NUMERIC,
+ * UBIDI_KEEP_BASE_COMBINING, UBIDI_OUTPUT_REVERSE,
+ * UBIDI_REMOVE_BIDI_CONTROLS, the visual position returned may not
+ * be correct. It is advised to use, when possible, reordering options
+ * such as UBIDI_OPTION_INSERT_MARKS and UBIDI_OPTION_REMOVE_CONTROLS.
+ *
* Note that in right-to-left runs, this mapping places
- * modifier letters before base characters and second surrogates
- * before first ones.
+ * second surrogates before first ones (which is generally a bad idea)
+ * and combining characters before base characters.
+ * Use of ubidi_writeReordered(), optionally with the
+ * #UBIDI_KEEP_BASE_COMBINING option can be considered instead
+ * of using the mapping, in order to avoid these issues.
*
* @param pBiDi is the paragraph or line UBiDi object.
*
@@ -1399,10 +1462,17 @@ ubidi_getVisualIndex(UBiDi *pBiDi, int32_t logicalIndex, UErrorCode *pErrorCode)
* ubidi_getVisualMap() is more efficient.
*
* The value returned may be #UBIDI_MAP_NOWHERE if there is no
- * logical position because the corresponding text character is a BiDi mark
+ * logical position because the corresponding text character is a Bidi mark
* inserted in the output by option #UBIDI_OPTION_INSERT_MARKS.
*
* This is the inverse function to ubidi_getVisualIndex().
+ *
+ * When the visual output is altered by using options of
+ * ubidi_writeReordered() such as UBIDI_INSERT_LRM_FOR_NUMERIC,
+ * UBIDI_KEEP_BASE_COMBINING, UBIDI_OUTPUT_REVERSE,
+ * UBIDI_REMOVE_BIDI_CONTROLS, the logical position returned may not
+ * be correct. It is advised to use, when possible, reordering options
+ * such as UBIDI_OPTION_INSERT_MARKS and UBIDI_OPTION_REMOVE_CONTROLS.
*
* @param pBiDi is the paragraph or line UBiDi object.
*
@@ -1425,8 +1495,22 @@ ubidi_getLogicalIndex(UBiDi *pBiDi, int32_t visualIndex, UErrorCode *pErrorCode)
* (paragraph or line) object.
*
* Some values in the map may be #UBIDI_MAP_NOWHERE if the
- * corresponding text characters are BiDi controls removed from the visual
+ * corresponding text characters are Bidi controls removed from the visual
* output by the option #UBIDI_OPTION_REMOVE_CONTROLS.
+ *
+ * When the visual output is altered by using options of
+ * ubidi_writeReordered() such as UBIDI_INSERT_LRM_FOR_NUMERIC,
+ * UBIDI_KEEP_BASE_COMBINING, UBIDI_OUTPUT_REVERSE,
+ * UBIDI_REMOVE_BIDI_CONTROLS, the visual positions returned may not
+ * be correct. It is advised to use, when possible, reordering options
+ * such as UBIDI_OPTION_INSERT_MARKS and UBIDI_OPTION_REMOVE_CONTROLS.
+ *
+ * Note that in right-to-left runs, this mapping places
+ * second surrogates before first ones (which is generally a bad idea)
+ * and combining characters before base characters.
+ * Use of ubidi_writeReordered(), optionally with the
+ * #UBIDI_KEEP_BASE_COMBINING option can be considered instead
+ * of using the mapping, in order to avoid these issues.
*
* @param pBiDi is the paragraph or line UBiDi object.
*
@@ -1454,8 +1538,15 @@ ubidi_getLogicalMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode);
* (paragraph or line) object.
*
* Some values in the map may be #UBIDI_MAP_NOWHERE if the
- * corresponding text characters are BiDi marks inserted in the visual output
+ * corresponding text characters are Bidi marks inserted in the visual output
* by the option #UBIDI_OPTION_INSERT_MARKS.
+ *
+ * When the visual output is altered by using options of
+ * ubidi_writeReordered() such as UBIDI_INSERT_LRM_FOR_NUMERIC,
+ * UBIDI_KEEP_BASE_COMBINING, UBIDI_OUTPUT_REVERSE,
+ * UBIDI_REMOVE_BIDI_CONTROLS, the logical positions returned may not
+ * be correct. It is advised to use, when possible, reordering options
+ * such as UBIDI_OPTION_INSERT_MARKS and UBIDI_OPTION_REMOVE_CONTROLS.
*
* @param pBiDi is the paragraph or line UBiDi object.
*
@@ -1529,26 +1620,31 @@ ubidi_reorderVisual(const UBiDiLevel *levels, int32_t length, int32_t *indexMap)
* The index mapping of the first map is inverted and written to
* the second one.
*
- * @param srcMap is an array with length indexes
+ * @param srcMap is an array with length elements
* which defines the original mapping from a source array containing
* length elements to a destination array.
- * All indexes must be >=0 or equal to UBIDI_MAP_NOWHERE.
- * This special value means that the corresponding elements in the source
- * array have no matching element in the destination array.
- * Some indexes may have a value >= length, if the
+ * Some elements of the source array may have no mapping in the
+ * destination array. In that case, their value will be
+ * the special value UBIDI_MAP_NOWHERE.
+ * All elements must be >=0 or equal to UBIDI_MAP_NOWHERE.
+ * Some elements may have a value >= length, if the
* destination array has more elements than the source array.
- * There must be no duplicate indexes (two or more indexes with the
+ * There must be no duplicate indexes (two or more elements with the
* same value except UBIDI_MAP_NOWHERE).
*
- * @param destMap is an array with a number of indexes equal to 1 + the highest
+ * @param destMap is an array with a number of elements equal to 1 + the highest
* value in srcMap.
* destMap will be filled with the inverse mapping.
- * Elements of destMap which have no matching elements in
- * srcMap will receive an index equal to
- * UBIDI_MAP_NOWHERE
+ * If element with index i in srcMap has a value k different
+ * from UBIDI_MAP_NOWHERE, this means that element i of
+ * the source array maps to element k in the destination array.
+ * The inverse map will have value i in its k-th element.
+ * For all elements of the destination array which do not map to
+ * an element in the source array, the corresponding element in the
+ * inverse map will have a value equal to UBIDI_MAP_NOWHERE.
*
* @param length is the length of each array.
- * @See UBIDI_MAP_NOWHERE
+ * @see UBIDI_MAP_NOWHERE
* @stable ICU 2.0
*/
U_STABLE void U_EXPORT2
@@ -1578,7 +1674,7 @@ ubidi_invertMap(const int32_t *srcMap, int32_t *destMap, int32_t length);
/**
* option bit for ubidi_writeReordered():
* surround the run with LRMs if necessary;
- * this is part of the approximate "inverse BiDi" algorithm
+ * this is part of the approximate "inverse Bidi" algorithm
*
*
This option does not imply corresponding adjustment of the index
* mappings.
@@ -1591,7 +1687,7 @@ ubidi_invertMap(const int32_t *srcMap, int32_t *destMap, int32_t length);
/**
* option bit for ubidi_writeReordered():
- * remove BiDi control characters
+ * remove Bidi control characters
* (this does not affect #UBIDI_INSERT_LRM_FOR_NUMERIC)
*
*
This option does not imply corresponding adjustment of the index
@@ -1654,9 +1750,9 @@ ubidi_invertMap(const int32_t *srcMap, int32_t *destMap, int32_t length);
* the last call to ubidi_setPara.
* @see ubidi_setPara
* @see UBIDI_OPTION_STREAMING
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
-U_DRAFT int32_t U_EXPORT2
+U_STABLE int32_t U_EXPORT2
ubidi_getProcessedLength(const UBiDi *pBiDi);
/**
@@ -1673,7 +1769,7 @@ ubidi_getProcessedLength(const UBiDi *pBiDi);
* ubidi_getVisualMap
*
* Note that this length stays identical to the source text length if
- * BiDi marks are inserted or removed using option bits of
+ * Bidi marks are inserted or removed using option bits of
* ubidi_writeReordered, or if option
* #UBIDI_REORDER_INVERSE_NUMBERS_AS_L has been set.
*
@@ -1684,22 +1780,22 @@ ubidi_getProcessedLength(const UBiDi *pBiDi);
* @see ubidi_setPara
* @see UBIDI_OPTION_INSERT_MARKS
* @see UBIDI_OPTION_REMOVE_CONTROLS
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
-U_DRAFT int32_t U_EXPORT2
+U_STABLE int32_t U_EXPORT2
ubidi_getResultLength(const UBiDi *pBiDi);
U_CDECL_BEGIN
/**
* value returned by UBiDiClassCallback callbacks when
- * there is no need to override the standard BiDi class for a given code point.
+ * there is no need to override the standard Bidi class for a given code point.
* @see UBiDiClassCallback
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
#define U_BIDI_CLASS_DEFAULT U_CHAR_DIRECTION_COUNT
/**
- * Callback type declaration for overriding default BiDi class values with
+ * Callback type declaration for overriding default Bidi class values with
* custom ones.
*
Usually, the function pointer will be propagated to a UBiDi
* object by calling the ubidi_setClassCallback() function;
@@ -1708,15 +1804,15 @@ U_CDECL_BEGIN
*
* @param context is a pointer to the callback private data.
*
- * @param c is the code point to get a BiDi class for.
+ * @param c is the code point to get a Bidi class for.
*
- * @return The directional property / BiDi class for the given code point
+ * @return The directional property / Bidi class for the given code point
* c if the default class has been overridden, or
- * #U_BIDI_CLASS_DEFAULT if the standard BiDi class value
+ * #U_BIDI_CLASS_DEFAULT if the standard Bidi class value
* for c is to be used.
* @see ubidi_setClassCallback
* @see ubidi_getClassCallback
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
typedef UCharDirection U_CALLCONV
UBiDiClassCallback(const void *context, UChar32 c);
@@ -1724,27 +1820,27 @@ UBiDiClassCallback(const void *context, UChar32 c);
U_CDECL_END
/**
- * Retrieve the BiDi class for a given code point.
+ * Retrieve the Bidi class for a given code point.
*
If a #UBiDiClassCallback callback is defined and returns a
* value other than #U_BIDI_CLASS_DEFAULT, that value is used;
* otherwise the default class determination mechanism is invoked.
*
* @param pBiDi is the paragraph UBiDi object.
*
- * @param c is the code point whose BiDi class must be retrieved.
+ * @param c is the code point whose Bidi class must be retrieved.
*
- * @return The BiDi class for character c based
+ * @return The Bidi class for character c based
* on the given pBiDi instance.
* @see UBiDiClassCallback
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
-U_DRAFT UCharDirection U_EXPORT2
+U_STABLE UCharDirection U_EXPORT2
ubidi_getCustomizedClass(UBiDi *pBiDi, UChar32 c);
/**
* Set the callback function and callback data used by the UBA
- * implementation for BiDi class determination.
- *
This may be useful for assigning BiDi classes to PUA characters, or
+ * implementation for Bidi class determination.
+ *
This may be useful for assigning Bidi classes to PUA characters, or
* for special application needs. For instance, an application may want to
* handle all spaces like L or R characters (according to the base direction)
* when creating the visual ordering of logical lines which are part of a report
@@ -1766,15 +1862,15 @@ ubidi_getCustomizedClass(UBiDi *pBiDi, UChar32 c);
* @param pErrorCode must be a valid pointer to an error code value.
*
* @see ubidi_getClassCallback
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
-U_DRAFT void U_EXPORT2
+U_STABLE void U_EXPORT2
ubidi_setClassCallback(UBiDi *pBiDi, UBiDiClassCallback *newFn,
const void *newContext, UBiDiClassCallback **oldFn,
const void **oldContext, UErrorCode *pErrorCode);
/**
- * Get the current callback function used for BiDi class determination.
+ * Get the current callback function used for Bidi class determination.
*
* @param pBiDi is the paragraph UBiDi object.
*
@@ -1783,9 +1879,9 @@ ubidi_setClassCallback(UBiDi *pBiDi, UBiDiClassCallback *newFn,
* @param context fillin: Returns the callback's private context.
*
* @see ubidi_setClassCallback
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
-U_DRAFT void U_EXPORT2
+U_STABLE void U_EXPORT2
ubidi_getClassCallback(UBiDi *pBiDi, UBiDiClassCallback **fn, const void **context);
/**
@@ -1796,13 +1892,13 @@ ubidi_getClassCallback(UBiDi *pBiDi, UBiDiClassCallback **fn, const void **conte
* destination buffer.
*
* This function preserves the integrity of characters with multiple
- * code units and (optionally) modifier letters.
+ * code units and (optionally) combining characters.
* Characters in RTL runs can be replaced by mirror-image characters
* in the destination buffer. Note that "real" mirroring has
* to be done in a rendering engine by glyph selection
* and that for many "mirrored" characters there are no
* Unicode characters as mirror-image equivalents.
- * There are also options to insert or remove BiDi control
+ * There are also options to insert or remove Bidi control
* characters; see the description of the destSize
* and options parameters and of the option bit flags.
*
@@ -1829,7 +1925,7 @@ ubidi_getClassCallback(UBiDi *pBiDi, UBiDiClassCallback **fn, const void **conte
* is set, then the destination length may be less than
* ubidi_getLength(pBiDi).
* If none of these options is set, then the destination length
- * will be exactly ubidi_getLength(pBiDi).
+ * will be exactly ubidi_getProcessedLength(pBiDi).
*
* @param options A bit set of options for the reordering that control
* how the reordered text is written.
@@ -1837,8 +1933,8 @@ ubidi_getClassCallback(UBiDi *pBiDi, UBiDiClassCallback **fn, const void **conte
* point basis and inserting LRM characters, which is used
* especially for transforming visually stored text
* to logically stored text (although this is still an
- * imperfect implementation of an "inverse BiDi" algorithm
- * because it uses the "forward BiDi" algorithm at its core).
+ * imperfect implementation of an "inverse Bidi" algorithm
+ * because it uses the "forward Bidi" algorithm at its core).
* The available options are:
* #UBIDI_DO_MIRRORING,
* #UBIDI_INSERT_LRM_FOR_NUMERIC,
@@ -1863,19 +1959,19 @@ ubidi_writeReordered(UBiDi *pBiDi,
* Reverse a Right-To-Left run of Unicode text.
*
* This function preserves the integrity of characters with multiple
- * code units and (optionally) modifier letters.
+ * code units and (optionally) combining characters.
* Characters can be replaced by mirror-image characters
* in the destination buffer. Note that "real" mirroring has
* to be done in a rendering engine by glyph selection
* and that for many "mirrored" characters there are no
* Unicode characters as mirror-image equivalents.
- * There are also options to insert or remove BiDi control
+ * There are also options to insert or remove Bidi control
* characters.
*
* This function is the implementation for reversing RTL runs as part
* of ubidi_writeReordered(). For detailed descriptions
* of the parameters, see there.
- * Since no BiDi controls are inserted here, the output string length
+ * Since no Bidi controls are inserted here, the output string length
* will never exceed srcLength.
*
* @see ubidi_writeReordered
diff --git a/icuSources/common/unicode/ubrk.h b/icuSources/common/unicode/ubrk.h
index 39f25cf8..d57ba37a 100644
--- a/icuSources/common/unicode/ubrk.h
+++ b/icuSources/common/unicode/ubrk.h
@@ -1,6 +1,6 @@
/*
******************************************************************************
-* Copyright (C) 1996-2006, International Business Machines Corporation and others.
+* Copyright (C) 1996-2007, International Business Machines Corporation and others.
* All Rights Reserved.
******************************************************************************
*/
@@ -78,8 +78,8 @@
* file brkiter.h.
*
* Code snippits illustrating the use of the Break Iterator APIs
- * are available in the ICU User Guide,
- * http://icu.sourceforge.net/userguide/boundaryAnalysis.html
+ * are available in the ICU User Guide,
+ * http://icu-project.org/userguide/boundaryAnalysis.html
* and in the sample program icu/source/samples/break/break.cpp"
*/
@@ -95,9 +95,9 @@ typedef enum UBreakIteratorType {
UBRK_SENTENCE = 3,
#ifndef U_HIDE_DEPRECATED_API
- /**
- * Title Case breaks
- * The iterator created using this type locates title boundaries as described for
+ /**
+ * Title Case breaks
+ * The iterator created using this type locates title boundaries as described for
* Unicode 3.2 only. For Unicode 4.0 and above title boundary iteration,
* please use Word Boundary iterator.
*
@@ -109,7 +109,7 @@ typedef enum UBreakIteratorType {
} UBreakIteratorType;
/** Value indicating all text boundaries have been returned.
- * @stable ICU 2.0
+ * @stable ICU 2.0
*/
#define UBRK_DONE ((int32_t) -1)
@@ -123,7 +123,7 @@ typedef enum UBreakIteratorType {
* @stable ICU 2.2
*/
typedef enum UWordBreak {
- /** Tag value for "words" that do not fit into any of other categories.
+ /** Tag value for "words" that do not fit into any of other categories.
* Includes spaces and most punctuation. */
UBRK_WORD_NONE = 0,
/** Upper bound for tags for uncategorized words. */
@@ -186,7 +186,7 @@ typedef enum USentenceBreakTag {
/** Upper bound for tags for sentences ended by sentence terminators. */
UBRK_SENTENCE_TERM_LIMIT = 100,
/** Tag value for for sentences that do not contain an ending
- * sentence terminator ('.', '?', '!', etc.) character, but
+ * sentence terminator ('.', '?', '!', etc.) character, but
* are ended only by a hard separator (CR, LF, PS, etc.) or end of input.
*/
UBRK_SENTENCE_SEP = 100,
@@ -296,11 +296,15 @@ ubrk_setText(UBreakIterator* bi,
/**
* Sets an existing iterator to point to a new piece of text
* @param bi The iterator to use
- * @param text The text to be set
+ * @param text The text to be set.
+ * This function makes a shallow clone of the supplied UText. This means
+ * that the caller is free to immediately close or otherwise reuse the
+ * UText that was passed as a parameter, but that the underlying text itself
+ * must not be altered while being referenced by the break iterator.
* @param status The error code
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT void U_EXPORT2
+U_STABLE void U_EXPORT2
ubrk_setUText(UBreakIterator* bi,
UText* text,
UErrorCode* status);
@@ -448,12 +452,12 @@ ubrk_getRuleStatus(UBreakIterator *bi);
*
* For word break iterators, the possible values are defined in enum UWordBreak.
* @param bi The break iterator to use
- * @param fillInVec an array to be filled in with the status values.
+ * @param fillInVec an array to be filled in with the status values.
* @param capacity the length of the supplied vector. A length of zero causes
* the function to return the number of status values, in the
* normal way, without attemtping to store any values.
- * @param status receives error codes.
- * @return The number of rule status values from rules that determined
+ * @param status receives error codes.
+ * @return The number of rule status values from rules that determined
* the most recent boundary returned by the break iterator.
* @stable ICU 3.0
*/
diff --git a/icuSources/common/unicode/ucasemap.h b/icuSources/common/unicode/ucasemap.h
index 17c8f601..7ba622b5 100644
--- a/icuSources/common/unicode/ucasemap.h
+++ b/icuSources/common/unicode/ucasemap.h
@@ -1,7 +1,7 @@
/*
*******************************************************************************
*
-* Copyright (C) 2005, International Business Machines
+* Copyright (C) 2005-2008, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
@@ -30,19 +30,18 @@
* for the attributes, as usual.
*
* Currently, the functionality provided here does not overlap with uchar.h
- * and ustring.h.
+ * and ustring.h, except for ucasemap_toTitle().
*
- * ucasemap_utf8ToLower() and ucasemap_utf8ToUpper() operate directly on
- * UTF-8 strings.
+ * ucasemap_utf8XYZ() functions operate directly on UTF-8 strings.
*/
/**
* UCaseMap is an opaque service object for newer ICU case mapping functions.
* Older functions did not use a service object.
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
struct UCaseMap;
-typedef struct UCaseMap UCaseMap; /**< C typedef for struct UCaseMap. @draft ICU 3.4 */
+typedef struct UCaseMap UCaseMap; /**< C typedef for struct UCaseMap. @stable ICU 3.4 */
/**
* Open a UCaseMap service object for a locale and a set of options.
@@ -60,35 +59,39 @@ typedef struct UCaseMap UCaseMap; /**< C typedef for struct UCaseMap. @draft ICU
* which must not indicate a failure before the function call.
* @return Pointer to a UCaseMap service object, if successful.
*
- * @draft ICU 3.4
+ * @see U_FOLD_CASE_DEFAULT
+ * @see U_FOLD_CASE_EXCLUDE_SPECIAL_I
+ * @see U_TITLECASE_NO_LOWERCASE
+ * @see U_TITLECASE_NO_BREAK_ADJUSTMENT
+ * @stable ICU 3.4
*/
-U_DRAFT UCaseMap * U_EXPORT2
+U_STABLE UCaseMap * U_EXPORT2
ucasemap_open(const char *locale, uint32_t options, UErrorCode *pErrorCode);
/**
* Close a UCaseMap service object.
* @param csm Object to be closed.
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT void U_EXPORT2
+U_STABLE void U_EXPORT2
ucasemap_close(UCaseMap *csm);
/**
* Get the locale ID that is used for language-dependent case mappings.
* @param csm UCaseMap service object.
* @return locale ID
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT const char * U_EXPORT2
+U_STABLE const char * U_EXPORT2
ucasemap_getLocale(const UCaseMap *csm);
/**
* Get the options bit set that is used for case folding and string comparisons.
* @param csm UCaseMap service object.
* @return options bit set
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT uint32_t U_EXPORT2
+U_STABLE uint32_t U_EXPORT2
ucasemap_getOptions(const UCaseMap *csm);
/**
@@ -100,9 +103,9 @@ ucasemap_getOptions(const UCaseMap *csm);
* which must not indicate a failure before the function call.
*
* @see ucasemap_open
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT void U_EXPORT2
+U_STABLE void U_EXPORT2
ucasemap_setLocale(UCaseMap *csm, const char *locale, UErrorCode *pErrorCode);
/**
@@ -114,11 +117,136 @@ ucasemap_setLocale(UCaseMap *csm, const char *locale, UErrorCode *pErrorCode);
* which must not indicate a failure before the function call.
*
* @see ucasemap_open
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT void U_EXPORT2
+U_STABLE void U_EXPORT2
ucasemap_setOptions(UCaseMap *csm, uint32_t options, UErrorCode *pErrorCode);
+/**
+ * Do not lowercase non-initial parts of words when titlecasing.
+ * Option bit for titlecasing APIs that take an options bit set.
+ *
+ * By default, titlecasing will titlecase the first cased character
+ * of a word and lowercase all other characters.
+ * With this option, the other characters will not be modified.
+ *
+ * @see ucasemap_setOptions
+ * @see ucasemap_toTitle
+ * @see ucasemap_utf8ToTitle
+ * @see UnicodeString::toTitle
+ * @stable ICU 4.0
+ */
+#define U_TITLECASE_NO_LOWERCASE 0x100
+
+/**
+ * Do not adjust the titlecasing indexes from BreakIterator::next() indexes;
+ * titlecase exactly the characters at breaks from the iterator.
+ * Option bit for titlecasing APIs that take an options bit set.
+ *
+ * By default, titlecasing will take each break iterator index,
+ * adjust it by looking for the next cased character, and titlecase that one.
+ * Other characters are lowercased.
+ *
+ * This follows Unicode 4 & 5 section 3.13 Default Case Operations:
+ *
+ * R3 toTitlecase(X): Find the word boundaries based on Unicode Standard Annex
+ * #29, "Text Boundaries." Between each pair of word boundaries, find the first
+ * cased character F. If F exists, map F to default_title(F); then map each
+ * subsequent character C to default_lower(C).
+ *
+ * @see ucasemap_setOptions
+ * @see ucasemap_toTitle
+ * @see ucasemap_utf8ToTitle
+ * @see UnicodeString::toTitle
+ * @see U_TITLECASE_NO_LOWERCASE
+ * @stable ICU 4.0
+ */
+#define U_TITLECASE_NO_BREAK_ADJUSTMENT 0x200
+
+#if !UCONFIG_NO_BREAK_ITERATION
+
+/**
+ * Get the break iterator that is used for titlecasing.
+ * Do not modify the returned break iterator.
+ * @param csm UCaseMap service object.
+ * @return titlecasing break iterator
+ * @stable ICU 4.0
+ */
+U_DRAFT const UBreakIterator * U_EXPORT2
+ucasemap_getBreakIterator(const UCaseMap *csm);
+
+/**
+ * Set the break iterator that is used for titlecasing.
+ * The UCaseMap service object releases a previously set break iterator
+ * and "adopts" this new one, taking ownership of it.
+ * It will be released in a subsequent call to ucasemap_setBreakIterator()
+ * or ucasemap_close().
+ *
+ * Break iterator operations are not thread-safe. Therefore, titlecasing
+ * functions use non-const UCaseMap objects. It is not possible to titlecase
+ * strings concurrently using the same UCaseMap.
+ *
+ * @param csm UCaseMap service object.
+ * @param iterToAdopt Break iterator to be adopted for titlecasing.
+ * @param pErrorCode Must be a valid pointer to an error code value,
+ * which must not indicate a failure before the function call.
+ *
+ * @see ucasemap_toTitle
+ * @see ucasemap_utf8ToTitle
+ * @stable ICU 4.0
+ */
+U_DRAFT void U_EXPORT2
+ucasemap_setBreakIterator(UCaseMap *csm, UBreakIterator *iterToAdopt, UErrorCode *pErrorCode);
+
+/**
+ * Titlecase a UTF-16 string. This function is almost a duplicate of u_strToTitle(),
+ * except that it takes ucasemap_setOptions() into account and has performance
+ * advantages from being able to use a UCaseMap object for multiple case mapping
+ * operations, saving setup time.
+ *
+ * Casing is locale-dependent and context-sensitive.
+ * Titlecasing uses a break iterator to find the first characters of words
+ * that are to be titlecased. It titlecases those characters and lowercases
+ * all others. (This can be modified with ucasemap_setOptions().)
+ *
+ * The titlecase break iterator can be provided to customize for arbitrary
+ * styles, using rules and dictionaries beyond the standard iterators.
+ * It may be more efficient to always provide an iterator to avoid
+ * opening and closing one for each string.
+ * The standard titlecase iterator for the root locale implements the
+ * algorithm of Unicode TR 21.
+ *
+ * This function uses only the setText(), first() and next() methods of the
+ * provided break iterator.
+ *
+ * The result may be longer or shorter than the original.
+ * The source string and the destination buffer must not overlap.
+ *
+ * @param csm UCaseMap service object.
+ * @param dest A buffer for the result string. The result will be NUL-terminated if
+ * the buffer is large enough.
+ * The contents is undefined in case of failure.
+ * @param destCapacity The size of the buffer (number of bytes). If it is 0, then
+ * dest may be NULL and the function will only return the length of the result
+ * without writing any of the result string.
+ * @param src The original string.
+ * @param srcLength The length of the original string. If -1, then src must be NUL-terminated.
+ * @param pErrorCode Must be a valid pointer to an error code value,
+ * which must not indicate a failure before the function call.
+ * @return The length of the result string, if successful - or in case of a buffer overflow,
+ * in which case it will be greater than destCapacity.
+ *
+ * @see u_strToTitle
+ * @stable ICU 4.0
+ */
+U_DRAFT int32_t U_EXPORT2
+ucasemap_toTitle(UCaseMap *csm,
+ UChar *dest, int32_t destCapacity,
+ const UChar *src, int32_t srcLength,
+ UErrorCode *pErrorCode);
+
+#endif
+
/**
* Lowercase the characters in a UTF-8 string.
* Casing is locale-dependent and context-sensitive.
@@ -132,7 +260,7 @@ ucasemap_setOptions(UCaseMap *csm, uint32_t options, UErrorCode *pErrorCode);
* @param destCapacity The size of the buffer (number of bytes). If it is 0, then
* dest may be NULL and the function will only return the length of the result
* without writing any of the result string.
- * @param src The original string
+ * @param src The original string.
* @param srcLength The length of the original string. If -1, then src must be NUL-terminated.
* @param pErrorCode Must be a valid pointer to an error code value,
* which must not indicate a failure before the function call.
@@ -140,9 +268,9 @@ ucasemap_setOptions(UCaseMap *csm, uint32_t options, UErrorCode *pErrorCode);
* in which case it will be greater than destCapacity.
*
* @see u_strToLower
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT int32_t U_EXPORT2
+U_STABLE int32_t U_EXPORT2
ucasemap_utf8ToLower(const UCaseMap *csm,
char *dest, int32_t destCapacity,
const char *src, int32_t srcLength,
@@ -161,7 +289,7 @@ ucasemap_utf8ToLower(const UCaseMap *csm,
* @param destCapacity The size of the buffer (number of bytes). If it is 0, then
* dest may be NULL and the function will only return the length of the result
* without writing any of the result string.
- * @param src The original string
+ * @param src The original string.
* @param srcLength The length of the original string. If -1, then src must be NUL-terminated.
* @param pErrorCode Must be a valid pointer to an error code value,
* which must not indicate a failure before the function call.
@@ -169,12 +297,95 @@ ucasemap_utf8ToLower(const UCaseMap *csm,
* in which case it will be greater than destCapacity.
*
* @see u_strToUpper
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT int32_t U_EXPORT2
+U_STABLE int32_t U_EXPORT2
ucasemap_utf8ToUpper(const UCaseMap *csm,
char *dest, int32_t destCapacity,
const char *src, int32_t srcLength,
UErrorCode *pErrorCode);
+#if !UCONFIG_NO_BREAK_ITERATION
+
+/**
+ * Titlecase a UTF-8 string.
+ * Casing is locale-dependent and context-sensitive.
+ * Titlecasing uses a break iterator to find the first characters of words
+ * that are to be titlecased. It titlecases those characters and lowercases
+ * all others. (This can be modified with ucasemap_setOptions().)
+ *
+ * The titlecase break iterator can be provided to customize for arbitrary
+ * styles, using rules and dictionaries beyond the standard iterators.
+ * It may be more efficient to always provide an iterator to avoid
+ * opening and closing one for each string.
+ * The standard titlecase iterator for the root locale implements the
+ * algorithm of Unicode TR 21.
+ *
+ * This function uses only the setText(), first() and next() methods of the
+ * provided break iterator.
+ *
+ * The result may be longer or shorter than the original.
+ * The source string and the destination buffer must not overlap.
+ *
+ * @param csm UCaseMap service object.
+ * @param dest A buffer for the result string. The result will be NUL-terminated if
+ * the buffer is large enough.
+ * The contents is undefined in case of failure.
+ * @param destCapacity The size of the buffer (number of bytes). If it is 0, then
+ * dest may be NULL and the function will only return the length of the result
+ * without writing any of the result string.
+ * @param src The original string.
+ * @param srcLength The length of the original string. If -1, then src must be NUL-terminated.
+ * @param pErrorCode Must be a valid pointer to an error code value,
+ * which must not indicate a failure before the function call.
+ * @return The length of the result string, if successful - or in case of a buffer overflow,
+ * in which case it will be greater than destCapacity.
+ *
+ * @see u_strToTitle
+ * @see U_TITLECASE_NO_LOWERCASE
+ * @see U_TITLECASE_NO_BREAK_ADJUSTMENT
+ * @stable ICU 4.0
+ */
+U_DRAFT int32_t U_EXPORT2
+ucasemap_utf8ToTitle(UCaseMap *csm,
+ char *dest, int32_t destCapacity,
+ const char *src, int32_t srcLength,
+ UErrorCode *pErrorCode);
+
+#endif
+
+/**
+ * Case-fold the characters in a UTF-8 string.
+ * Case-folding is locale-independent and not context-sensitive,
+ * but there is an option for whether to include or exclude mappings for dotted I
+ * and dotless i that are marked with 'I' in CaseFolding.txt.
+ * The result may be longer or shorter than the original.
+ * The source string and the destination buffer must not overlap.
+ *
+ * @param csm UCaseMap service object.
+ * @param dest A buffer for the result string. The result will be NUL-terminated if
+ * the buffer is large enough.
+ * The contents is undefined in case of failure.
+ * @param destCapacity The size of the buffer (number of bytes). If it is 0, then
+ * dest may be NULL and the function will only return the length of the result
+ * without writing any of the result string.
+ * @param src The original string.
+ * @param srcLength The length of the original string. If -1, then src must be NUL-terminated.
+ * @param pErrorCode Must be a valid pointer to an error code value,
+ * which must not indicate a failure before the function call.
+ * @return The length of the result string, if successful - or in case of a buffer overflow,
+ * in which case it will be greater than destCapacity.
+ *
+ * @see u_strFoldCase
+ * @see ucasemap_setOptions
+ * @see U_FOLD_CASE_DEFAULT
+ * @see U_FOLD_CASE_EXCLUDE_SPECIAL_I
+ * @stable ICU 4.0
+ */
+U_DRAFT int32_t U_EXPORT2
+ucasemap_utf8FoldCase(const UCaseMap *csm,
+ char *dest, int32_t destCapacity,
+ const char *src, int32_t srcLength,
+ UErrorCode *pErrorCode);
+
#endif
diff --git a/icuSources/common/unicode/uchar.h b/icuSources/common/unicode/uchar.h
index ce5fc4f4..0f629c0d 100644
--- a/icuSources/common/unicode/uchar.h
+++ b/icuSources/common/unicode/uchar.h
@@ -1,6 +1,6 @@
/*
**********************************************************************
-* Copyright (C) 1997-2006, International Business Machines
+* Copyright (C) 1997-2008, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
*
@@ -39,7 +39,7 @@ U_CDECL_BEGIN
* @see u_getUnicodeVersion
* @stable ICU 2.0
*/
-#define U_UNICODE_VERSION "5.0"
+#define U_UNICODE_VERSION "5.1"
/**
* \file
@@ -56,7 +56,7 @@ U_CDECL_BEGIN
*
* For more information see
* "About the Unicode Character Database" (http://www.unicode.org/ucd/)
- * and the ICU User Guide chapter on Properties (http://icu.sourceforge.net/userguide/properties.html).
+ * and the ICU User Guide chapter on Properties (http://icu-project.org/userguide/properties.html).
*
* Many functions are designed to match java.lang.Character functions.
* See the individual function documentation,
@@ -379,43 +379,41 @@ typedef enum UProperty {
processing collation tailoring rules.
@stable ICU 3.0 */
UCHAR_SEGMENT_STARTER=41,
-#ifndef U_HIDE_DRAFT_API
/** Binary property Pattern_Syntax (new in Unicode 4.1).
See UAX #31 Identifier and Pattern Syntax
(http://www.unicode.org/reports/tr31/)
- @draft ICU 3.4 */
+ @stable ICU 3.4 */
UCHAR_PATTERN_SYNTAX=42,
/** Binary property Pattern_White_Space (new in Unicode 4.1).
See UAX #31 Identifier and Pattern Syntax
(http://www.unicode.org/reports/tr31/)
- @draft ICU 3.4 */
+ @stable ICU 3.4 */
UCHAR_PATTERN_WHITE_SPACE=43,
/** Binary property alnum (a C/POSIX character class).
Implemented according to the UTS #18 Annex C Standard Recommendation.
See the uchar.h file documentation.
- @draft ICU 3.4 */
+ @stable ICU 3.4 */
UCHAR_POSIX_ALNUM=44,
/** Binary property blank (a C/POSIX character class).
Implemented according to the UTS #18 Annex C Standard Recommendation.
See the uchar.h file documentation.
- @draft ICU 3.4 */
+ @stable ICU 3.4 */
UCHAR_POSIX_BLANK=45,
/** Binary property graph (a C/POSIX character class).
Implemented according to the UTS #18 Annex C Standard Recommendation.
See the uchar.h file documentation.
- @draft ICU 3.4 */
+ @stable ICU 3.4 */
UCHAR_POSIX_GRAPH=46,
/** Binary property print (a C/POSIX character class).
Implemented according to the UTS #18 Annex C Standard Recommendation.
See the uchar.h file documentation.
- @draft ICU 3.4 */
+ @stable ICU 3.4 */
UCHAR_POSIX_PRINT=47,
/** Binary property xdigit (a C/POSIX character class).
Implemented according to the UTS #18 Annex C Standard Recommendation.
See the uchar.h file documentation.
- @draft ICU 3.4 */
+ @stable ICU 3.4 */
UCHAR_POSIX_XDIGIT=48,
-#endif /* U_HIDE_DRAFT_API */
/** One more than the last constant for binary Unicode properties. @stable ICU 2.1 */
UCHAR_BINARY_LIMIT=49,
@@ -484,23 +482,21 @@ typedef enum UProperty {
see UNORM_FCD and http://www.unicode.org/notes/tn5/#FCD .
Returns 8-bit numeric values like UCHAR_CANONICAL_COMBINING_CLASS. @stable ICU 3.0 */
UCHAR_TRAIL_CANONICAL_COMBINING_CLASS=0x1011,
-#ifndef U_HIDE_DRAFT_API
/** Enumerated property Grapheme_Cluster_Break (new in Unicode 4.1).
Used in UAX #29: Text Boundaries
(http://www.unicode.org/reports/tr29/)
- Returns UGraphemeClusterBreak values. @draft ICU 3.4 */
+ Returns UGraphemeClusterBreak values. @stable ICU 3.4 */
UCHAR_GRAPHEME_CLUSTER_BREAK=0x1012,
/** Enumerated property Sentence_Break (new in Unicode 4.1).
Used in UAX #29: Text Boundaries
(http://www.unicode.org/reports/tr29/)
- Returns USentenceBreak values. @draft ICU 3.4 */
+ Returns USentenceBreak values. @stable ICU 3.4 */
UCHAR_SENTENCE_BREAK=0x1013,
/** Enumerated property Word_Break (new in Unicode 4.1).
Used in UAX #29: Text Boundaries
(http://www.unicode.org/reports/tr29/)
- Returns UWordBreakValues values. @draft ICU 3.4 */
+ Returns UWordBreakValues values. @stable ICU 3.4 */
UCHAR_WORD_BREAK=0x1014,
-#endif /*U_HIDE_DRAFT_API*/
/** One more than the last constant for enumerated/integer Unicode properties. @stable ICU 2.2 */
UCHAR_INT_LIMIT=0x1015,
@@ -1194,75 +1190,109 @@ enum UBlockCode {
/** @stable ICU 2.6 */
UBLOCK_VARIATION_SELECTORS_SUPPLEMENT = 125, /*[E0100]*/
-#ifndef U_HIDE_DRAFT_API
/* New blocks in Unicode 4.1 */
- /** @draft ICU 3.4 */
+ /** @stable ICU 3.4 */
UBLOCK_ANCIENT_GREEK_MUSICAL_NOTATION = 126, /*[1D200]*/
- /** @draft ICU 3.4 */
+ /** @stable ICU 3.4 */
UBLOCK_ANCIENT_GREEK_NUMBERS = 127, /*[10140]*/
- /** @draft ICU 3.4 */
+ /** @stable ICU 3.4 */
UBLOCK_ARABIC_SUPPLEMENT = 128, /*[0750]*/
- /** @draft ICU 3.4 */
+ /** @stable ICU 3.4 */
UBLOCK_BUGINESE = 129, /*[1A00]*/
- /** @draft ICU 3.4 */
+ /** @stable ICU 3.4 */
UBLOCK_CJK_STROKES = 130, /*[31C0]*/
- /** @draft ICU 3.4 */
+ /** @stable ICU 3.4 */
UBLOCK_COMBINING_DIACRITICAL_MARKS_SUPPLEMENT = 131, /*[1DC0]*/
- /** @draft ICU 3.4 */
+ /** @stable ICU 3.4 */
UBLOCK_COPTIC = 132, /*[2C80]*/
- /** @draft ICU 3.4 */
+ /** @stable ICU 3.4 */
UBLOCK_ETHIOPIC_EXTENDED = 133, /*[2D80]*/
- /** @draft ICU 3.4 */
+ /** @stable ICU 3.4 */
UBLOCK_ETHIOPIC_SUPPLEMENT = 134, /*[1380]*/
- /** @draft ICU 3.4 */
+ /** @stable ICU 3.4 */
UBLOCK_GEORGIAN_SUPPLEMENT = 135, /*[2D00]*/
- /** @draft ICU 3.4 */
+ /** @stable ICU 3.4 */
UBLOCK_GLAGOLITIC = 136, /*[2C00]*/
- /** @draft ICU 3.4 */
+ /** @stable ICU 3.4 */
UBLOCK_KHAROSHTHI = 137, /*[10A00]*/
- /** @draft ICU 3.4 */
+ /** @stable ICU 3.4 */
UBLOCK_MODIFIER_TONE_LETTERS = 138, /*[A700]*/
- /** @draft ICU 3.4 */
+ /** @stable ICU 3.4 */
UBLOCK_NEW_TAI_LUE = 139, /*[1980]*/
- /** @draft ICU 3.4 */
+ /** @stable ICU 3.4 */
UBLOCK_OLD_PERSIAN = 140, /*[103A0]*/
- /** @draft ICU 3.4 */
+ /** @stable ICU 3.4 */
UBLOCK_PHONETIC_EXTENSIONS_SUPPLEMENT = 141, /*[1D80]*/
- /** @draft ICU 3.4 */
+ /** @stable ICU 3.4 */
UBLOCK_SUPPLEMENTAL_PUNCTUATION = 142, /*[2E00]*/
- /** @draft ICU 3.4 */
+ /** @stable ICU 3.4 */
UBLOCK_SYLOTI_NAGRI = 143, /*[A800]*/
- /** @draft ICU 3.4 */
+ /** @stable ICU 3.4 */
UBLOCK_TIFINAGH = 144, /*[2D30]*/
- /** @draft ICU 3.4 */
+ /** @stable ICU 3.4 */
UBLOCK_VERTICAL_FORMS = 145, /*[FE10]*/
/* New blocks in Unicode 5.0 */
- /** @draft ICU 3.6 */
+ /** @stable ICU 3.6 */
UBLOCK_NKO = 146, /*[07C0]*/
- /** @draft ICU 3.6 */
+ /** @stable ICU 3.6 */
UBLOCK_BALINESE = 147, /*[1B00]*/
- /** @draft ICU 3.6 */
+ /** @stable ICU 3.6 */
UBLOCK_LATIN_EXTENDED_C = 148, /*[2C60]*/
- /** @draft ICU 3.6 */
+ /** @stable ICU 3.6 */
UBLOCK_LATIN_EXTENDED_D = 149, /*[A720]*/
- /** @draft ICU 3.6 */
+ /** @stable ICU 3.6 */
UBLOCK_PHAGS_PA = 150, /*[A840]*/
- /** @draft ICU 3.6 */
+ /** @stable ICU 3.6 */
UBLOCK_PHOENICIAN = 151, /*[10900]*/
- /** @draft ICU 3.6 */
+ /** @stable ICU 3.6 */
UBLOCK_CUNEIFORM = 152, /*[12000]*/
- /** @draft ICU 3.6 */
+ /** @stable ICU 3.6 */
UBLOCK_CUNEIFORM_NUMBERS_AND_PUNCTUATION = 153, /*[12400]*/
- /** @draft ICU 3.6 */
+ /** @stable ICU 3.6 */
UBLOCK_COUNTING_ROD_NUMERALS = 154, /*[1D360]*/
-#endif /*U_HIDE_DRAFT_API*/
-
- /** @stable ICU 2.0 */
- UBLOCK_COUNT = 155,
+ /* New blocks in Unicode 5.1 */
+
+ /** @draft ICU 4.0 */
+ UBLOCK_SUNDANESE = 155, /*[1B80]*/
+ /** @draft ICU 4.0 */
+ UBLOCK_LEPCHA = 156, /*[1C00]*/
+ /** @draft ICU 4.0 */
+ UBLOCK_OL_CHIKI = 157, /*[1C50]*/
+ /** @draft ICU 4.0 */
+ UBLOCK_CYRILLIC_EXTENDED_A = 158, /*[2DE0]*/
+ /** @draft ICU 4.0 */
+ UBLOCK_VAI = 159, /*[A500]*/
+ /** @draft ICU 4.0 */
+ UBLOCK_CYRILLIC_EXTENDED_B = 160, /*[A640]*/
+ /** @draft ICU 4.0 */
+ UBLOCK_SAURASHTRA = 161, /*[A880]*/
+ /** @draft ICU 4.0 */
+ UBLOCK_KAYAH_LI = 162, /*[A900]*/
+ /** @draft ICU 4.0 */
+ UBLOCK_REJANG = 163, /*[A930]*/
+ /** @draft ICU 4.0 */
+ UBLOCK_CHAM = 164, /*[AA00]*/
+ /** @draft ICU 4.0 */
+ UBLOCK_ANCIENT_SYMBOLS = 165, /*[10190]*/
+ /** @draft ICU 4.0 */
+ UBLOCK_PHAISTOS_DISC = 166, /*[101D0]*/
+ /** @draft ICU 4.0 */
+ UBLOCK_LYCIAN = 167, /*[10280]*/
+ /** @draft ICU 4.0 */
+ UBLOCK_CARIAN = 168, /*[102A0]*/
+ /** @draft ICU 4.0 */
+ UBLOCK_LYDIAN = 169, /*[10920]*/
+ /** @draft ICU 4.0 */
+ UBLOCK_MAHJONG_TILES = 170, /*[1F000]*/
+ /** @draft ICU 4.0 */
+ UBLOCK_DOMINO_TILES = 171, /*[1F030]*/
+
+ /** @stable ICU 2.0 */
+ UBLOCK_COUNT = 172,
/** @stable ICU 2.0 */
UBLOCK_INVALID_CODE=-1
@@ -1434,6 +1464,7 @@ typedef enum UJoiningGroup {
U_JG_FE, /**< @stable ICU 2.6 */
U_JG_KHAPH, /**< @stable ICU 2.6 */
U_JG_ZHAIN, /**< @stable ICU 2.6 */
+ U_JG_BURUSHASKI_YEH_BARREE, /**< @draft ICU 4.0 */
U_JG_COUNT
} UJoiningGroup;
@@ -1441,10 +1472,9 @@ typedef enum UJoiningGroup {
* Grapheme Cluster Break constants.
*
* @see UCHAR_GRAPHEME_CLUSTER_BREAK
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
typedef enum UGraphemeClusterBreak {
-#ifndef U_HIDE_DRAFT_API
U_GCB_OTHER = 0, /*[XX]*/ /*See note !!*/
U_GCB_CONTROL = 1, /*[CN]*/
U_GCB_CR = 2, /*[CR]*/
@@ -1455,8 +1485,9 @@ typedef enum UGraphemeClusterBreak {
U_GCB_LVT = 7, /*[LVT]*/
U_GCB_T = 8, /*[T]*/
U_GCB_V = 9, /*[V]*/
-#endif /*U_HIDE_DRAFT_API*/
- U_GCB_COUNT = 10
+ U_GCB_SPACING_MARK = 10, /*[SM]*/ /* from here on: new in Unicode 5.1/ICU 4.0 */
+ U_GCB_PREPEND = 11, /*[PP]*/
+ U_GCB_COUNT = 12
} UGraphemeClusterBreak;
/**
@@ -1464,10 +1495,9 @@ typedef enum UGraphemeClusterBreak {
* (UWordBreak is a pre-existing enum type in ubrk.h for word break status tags.)
*
* @see UCHAR_WORD_BREAK
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
typedef enum UWordBreakValues {
-#ifndef U_HIDE_DRAFT_API
U_WB_OTHER = 0, /*[XX]*/ /*See note !!*/
U_WB_ALETTER = 1, /*[LE]*/
U_WB_FORMAT = 2, /*[FO]*/
@@ -1476,18 +1506,21 @@ typedef enum UWordBreakValues {
U_WB_MIDNUM = 5, /*[MN]*/
U_WB_NUMERIC = 6, /*[NU]*/
U_WB_EXTENDNUMLET = 7, /*[EX]*/
-#endif /*U_HIDE_DRAFT_API*/
- U_WB_COUNT = 8
+ U_WB_CR = 8, /*[CR]*/ /* from here on: new in Unicode 5.1/ICU 4.0 */
+ U_WB_EXTEND = 9, /*[Extend]*/
+ U_WB_LF = 10, /*[LF]*/
+ U_WB_MIDNUMLET =11, /*[MB]*/
+ U_WB_NEWLINE =12, /*[NL]*/
+ U_WB_COUNT = 13
} UWordBreakValues;
/**
* Sentence Break constants.
*
* @see UCHAR_SENTENCE_BREAK
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
typedef enum USentenceBreak {
-#ifndef U_HIDE_DRAFT_API
U_SB_OTHER = 0, /*[XX]*/ /*See note !!*/
U_SB_ATERM = 1, /*[AT]*/
U_SB_CLOSE = 2, /*[CL]*/
@@ -1498,9 +1531,12 @@ typedef enum USentenceBreak {
U_SB_SEP = 7, /*[SE]*/
U_SB_SP = 8, /*[SP]*/
U_SB_STERM = 9, /*[ST]*/
- U_SB_UPPER = 10, /*[UP]*/
-#endif /*U_HIDE_DRAFT_API*/
- U_SB_COUNT = 11
+ U_SB_UPPER = 10, /*[UP]*/
+ U_SB_CR = 11, /*[CR]*/ /* from here on: new in Unicode 5.1/ICU 4.0 */
+ U_SB_EXTEND = 12, /*[EX]*/
+ U_SB_LF = 13, /*[LF]*/
+ U_SB_SCONTINUE = 14, /*[SC]*/
+ U_SB_COUNT = 15
} USentenceBreak;
/**
@@ -2787,7 +2823,7 @@ u_isJavaIDPart(UChar32 c);
* Full case mappings are applied by the string case mapping functions,
* see ustring.h and the UnicodeString class.
* See also the User Guide chapter on C/POSIX migration:
- * http://icu.sourceforge.net/userguide/posix.html#case_mappings
+ * http://icu-project.org/userguide/posix.html#case_mappings
*
* @param c the code point to be mapped
* @return the Simple_Lowercase_Mapping of the code point, if any;
@@ -2812,7 +2848,7 @@ u_tolower(UChar32 c);
* Full case mappings are applied by the string case mapping functions,
* see ustring.h and the UnicodeString class.
* See also the User Guide chapter on C/POSIX migration:
- * http://icu.sourceforge.net/userguide/posix.html#case_mappings
+ * http://icu-project.org/userguide/posix.html#case_mappings
*
* @param c the code point to be mapped
* @return the Simple_Uppercase_Mapping of the code point, if any;
@@ -2837,7 +2873,7 @@ u_toupper(UChar32 c);
* Full case mappings are applied by the string case mapping functions,
* see ustring.h and the UnicodeString class.
* See also the User Guide chapter on C/POSIX migration:
- * http://icu.sourceforge.net/userguide/posix.html#case_mappings
+ * http://icu-project.org/userguide/posix.html#case_mappings
*
* @param c the code point to be mapped
* @return the Simple_Titlecase_Mapping of the code point, if any;
@@ -2882,7 +2918,7 @@ u_totitle(UChar32 c);
* Full case mappings are applied by the string case mapping functions,
* see ustring.h and the UnicodeString class.
* See also the User Guide chapter on C/POSIX migration:
- * http://icu.sourceforge.net/userguide/posix.html#case_mappings
+ * http://icu-project.org/userguide/posix.html#case_mappings
*
* @param c the code point to be mapped
* @param options Either U_FOLD_CASE_DEFAULT or U_FOLD_CASE_EXCLUDE_SPECIAL_I
diff --git a/icuSources/common/unicode/ucnv.h b/icuSources/common/unicode/ucnv.h
index f8fce55b..bfd7198e 100644
--- a/icuSources/common/unicode/ucnv.h
+++ b/icuSources/common/unicode/ucnv.h
@@ -1,6 +1,6 @@
/*
**********************************************************************
-* Copyright (C) 1999-2006, International Business Machines
+* Copyright (C) 1999-2008, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
* ucnv.h:
@@ -40,7 +40,7 @@
* many other callback actions that can be used instead of a character substitution.
The conversion behavior and names can vary between platforms. ICU may
* convert some characters differently from other platforms. Details on this topic
- * are in the User's
+ * are in the User's
* Guide. Aliases starting with a "cp" prefix have no specific meaning
* other than its an alias starting with the letters "cp". Please do not
* associate any meaning to these aliases.
@@ -316,7 +316,7 @@ ucnv_compareNames(const char *name1, const char *name2);
* @see ucnv_getAlias
* @see ucnv_getDefaultName
* @see ucnv_close
- * @ee ucnv_compareNames
+ * @see ucnv_compareNames
* @stable ICU 2.0
*/
U_STABLE UConverter* U_EXPORT2
@@ -346,7 +346,7 @@ ucnv_open(const char *converterName, UErrorCode *err);
* @see ucnv_open
* @see ucnv_openCCSID
* @see ucnv_close
- * @ee ucnv_compareNames
+ * @see ucnv_compareNames
* @stable ICU 2.0
*/
U_STABLE UConverter* U_EXPORT2
@@ -593,9 +593,9 @@ ucnv_setSubstChars(UConverter *converter,
*
* @see ucnv_setSubstChars
* @see ucnv_getSubstChars
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
-U_DRAFT void U_EXPORT2
+U_STABLE void U_EXPORT2
ucnv_setSubstString(UConverter *cnv,
const UChar *s,
int32_t length,
@@ -870,6 +870,8 @@ ucnv_getStarters(const UConverter* converter,
typedef enum UConverterUnicodeSet {
/** Select the set of roundtrippable Unicode code points. @stable ICU 2.6 */
UCNV_ROUNDTRIP_SET,
+ /** Select the set of Unicode code points with roundtrip or fallback mappings. @draft ICU 4.0 */
+ UCNV_ROUNDTRIP_AND_FALLBACK_SET,
/** Number of UConverterUnicodeSet selectors. @stable ICU 2.6 */
UCNV_SET_COUNT
} UConverterUnicodeSet;
@@ -878,11 +880,16 @@ typedef enum UConverterUnicodeSet {
/**
* Returns the set of Unicode code points that can be converted by an ICU converter.
*
- * The current implementation returns only one kind of set (UCNV_ROUNDTRIP_SET):
+ * Returns one of several kinds of set:
+ *
+ * 1. UCNV_ROUNDTRIP_SET
+ *
* The set of all Unicode code points that can be roundtrip-converted
- * (converted without any data loss) with the converter.
+ * (converted without any data loss) with the converter (ucnv_fromUnicode()).
* This set will not include code points that have fallback mappings
* or are only the result of reverse fallback mappings.
+ * This set will also not include PUA code points with fallbacks, although
+ * ucnv_fromUnicode() will always uses those mappings despite ucnv_setFallback().
* See UTR #22 "Character Mapping Markup Language"
* at http://www.unicode.org/reports/tr22/
*
@@ -893,6 +900,12 @@ typedef enum UConverterUnicodeSet {
* by comparing its roundtrip set with the set of ExemplarCharacters from
* ICU's locale data or other sources
*
+ * 2. UCNV_ROUNDTRIP_AND_FALLBACK_SET
+ *
+ * The set of all Unicode code points that can be converted with the converter (ucnv_fromUnicode())
+ * when fallbacks are turned on (see ucnv_setFallback()).
+ * This set includes all code points with roundtrips and fallbacks (but not reverse fallbacks).
+ *
* In the future, there may be more UConverterUnicodeSet choices to select
* sets with different properties.
*
@@ -1346,10 +1359,13 @@ ucnv_getNextUChar(UConverter * converter,
* return 0;
* }
*
+ * if(length<0) {
+ * length=strlen(s);
+ * }
* target=u8;
* ucnv_convertEx(cnv, utf8Cnv,
* &target, u8+capacity,
- * &s, length>=0 ? s+length : NULL,
+ * &s, s+length,
* NULL, NULL, NULL, NULL,
* TRUE, TRUE,
* pErrorCode);
@@ -1766,11 +1782,12 @@ U_STABLE const char * U_EXPORT2
ucnv_getCanonicalName(const char *alias, const char *standard, UErrorCode *pErrorCode);
/**
- * returns the current default converter name.
+ * Returns the current default converter name. If you want to open
+ * a default converter, you do not need to use this function.
+ * It is faster if you pass a NULL argument to ucnv_open the
+ * default converter.
*
- * @return returns the current default converter name;
- * if a default converter name cannot be determined,
- * then NULL is returned.
+ * @return returns the current default converter name.
* Storage owned by the library
* @see ucnv_setDefaultName
* @stable ICU 2.0
@@ -1779,12 +1796,13 @@ U_STABLE const char * U_EXPORT2
ucnv_getDefaultName(void);
/**
- * This function sets the current default converter name.
- * DO NOT call this function from multiple threads! This function is not
- * thread safe. If this function needs to be called, it should be called
- * during application initialization. Most of the time, the results from
- * ucnv_getDefaultName() is sufficient for your application.
- * @param name the converter name to be the default (must exist).
+ * This function is not thread safe. DO NOT call this function when ANY ICU
+ * function is being used from more than one thread! This function sets the
+ * current default converter name. If this function needs to be called, it
+ * should be called during application initialization. Most of the time, the
+ * results from ucnv_getDefaultName() or ucnv_open with a NULL string argument
+ * is sufficient for your application.
+ * @param name the converter name to be the default (must be known by ICU).
* @see ucnv_getDefaultName
* @system
* @stable ICU 2.0
@@ -1824,20 +1842,31 @@ U_STABLE UBool U_EXPORT2
ucnv_isAmbiguous(const UConverter *cnv);
/**
- * Sets the converter to use fallback mapping or not.
+ * Sets the converter to use fallback mappings or not.
+ * Regardless of this flag, the converter will always use
+ * fallbacks from Unicode Private Use code points, as well as
+ * reverse fallbacks (to Unicode).
+ * For details see ".ucm File Format"
+ * in the Conversion Data chapter of the ICU User Guide:
+ * http://www.icu-project.org/userguide/conversion-data.html#ucmformat
+ *
* @param cnv The converter to set the fallback mapping usage on.
* @param usesFallback TRUE if the user wants the converter to take advantage of the fallback
* mapping, FALSE otherwise.
* @stable ICU 2.0
+ * @see ucnv_usesFallback
*/
U_STABLE void U_EXPORT2
ucnv_setFallback(UConverter *cnv, UBool usesFallback);
/**
* Determines if the converter uses fallback mappings or not.
+ * This flag has restrictions, see ucnv_setFallback().
+ *
* @param cnv The converter to be tested
* @return TRUE if the converter uses fallback, FALSE otherwise.
* @stable ICU 2.0
+ * @see ucnv_setFallback
*/
U_STABLE UBool U_EXPORT2
ucnv_usesFallback(const UConverter *cnv);
@@ -1913,9 +1942,9 @@ ucnv_detectUnicodeSignature(const char* source,
* @param status ICU error code in/out parameter.
* Must fulfill U_SUCCESS before the function call.
* @return The number of UChars in the state. -1 if an error is encountered.
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT int32_t U_EXPORT2
+U_STABLE int32_t U_EXPORT2
ucnv_fromUCountPending(const UConverter* cnv, UErrorCode* status);
/**
@@ -1927,9 +1956,9 @@ ucnv_fromUCountPending(const UConverter* cnv, UErrorCode* status);
* @param status ICU error code in/out parameter.
* Must fulfill U_SUCCESS before the function call.
* @return The number of chars in the state. -1 if an error is encountered.
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT int32_t U_EXPORT2
+U_STABLE int32_t U_EXPORT2
ucnv_toUCountPending(const UConverter* cnv, UErrorCode* status);
#endif
diff --git a/icuSources/common/unicode/ucnv_err.h b/icuSources/common/unicode/ucnv_err.h
index b0db7bc1..6fde6966 100644
--- a/icuSources/common/unicode/ucnv_err.h
+++ b/icuSources/common/unicode/ucnv_err.h
@@ -1,6 +1,6 @@
/*
**********************************************************************
-* Copyright (C) 1999-2005, International Business Machines
+* Copyright (C) 1999-2007, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
*
@@ -134,11 +134,18 @@ typedef struct UConverter UConverter;
*/
#define UCNV_ESCAPE_XML_HEX "X"
/**
- * FROM_U_CALLBACK_ESCAPE context option to escape teh code unit according to Unicode (U+XXXXX)
+ * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to Unicode (U+XXXXX)
* @stable ICU 2.0
*/
#define UCNV_ESCAPE_UNICODE "U"
+/**
+ * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to CSS2 conventions (\\HH..H, that is,
+ * a backslash, 1..6 hex digits, and a space)
+ * @draft ICU 4.0
+ */
+#define UCNV_ESCAPE_CSS2 "S"
+
/**
* The process condition code to be used with the callbacks.
* Codes which are greater than UCNV_IRREGULAR should be
diff --git a/icuSources/common/unicode/uconfig.h b/icuSources/common/unicode/uconfig.h
index 8dea2ab8..8006ea24 100644
--- a/icuSources/common/unicode/uconfig.h
+++ b/icuSources/common/unicode/uconfig.h
@@ -1,6 +1,6 @@
/*
**********************************************************************
-* Copyright (C) 2002-2006, International Business Machines
+* Copyright (C) 2002-2008, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
* file name: uconfig.h
@@ -15,6 +15,7 @@
#ifndef __UCONFIG_H__
#define __UCONFIG_H__
+
/*!
* \file
* \brief Switches for excluding parts of ICU library code modules.
@@ -34,6 +35,18 @@
* @stable ICU 2.4
*/
+/**
+ * \def UCONFIG_USE_LOCAL
+ * If this switch is defined, ICU will attempt to load a header file named "uconfig_local.h"
+ * prior to determining default settings for uconfig variables.
+ *
+ * @internal ICU 4.0
+ *
+ */
+#if defined(UCONFIG_USE_LOCAL)
+#include "uconfig_local.h"
+#endif
+
/**
* \def UCONFIG_ONLY_COLLATION
* This switch turns off modules that are not needed for collation.
@@ -81,7 +94,7 @@
* File access cannot be turned off for the icuio library or for the ICU
* test suites and ICU tools.
*
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
#ifndef UCONFIG_NO_FILE_IO
# define UCONFIG_NO_FILE_IO 0
diff --git a/icuSources/common/unicode/udata.h b/icuSources/common/unicode/udata.h
index 2a12c11f..84046d5f 100644
--- a/icuSources/common/unicode/udata.h
+++ b/icuSources/common/unicode/udata.h
@@ -1,7 +1,7 @@
/*
******************************************************************************
*
-* Copyright (C) 1999-2006, International Business Machines
+* Copyright (C) 1999-2008, International Business Machines
* Corporation and others. All Rights Reserved.
*
******************************************************************************
@@ -220,7 +220,7 @@ udata_open(const char *path, const char *type, const char *name,
* logically prepended to the ICU data directory string.
*
*
For details about ICU data loading see the User Guide
- * Data Management chapter. (http://icu.sourceforge.net/userguide/icudata.html)
+ * Data Management chapter. (http://icu-project.org/userguide/icudata.html)
*
* @param path Specifies an absolute path and/or a basename for the
* finding of the data in the file system.
@@ -354,18 +354,18 @@ udata_setAppData(const char *packageName, const void *data, UErrorCode *err);
/**
* Possible settings for udata_setFileAccess()
* @see udata_setFileAccess
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
typedef enum UDataFileAccess {
- /** ICU does not access the file system for data loading. */
- UDATA_NO_FILES,
+ /** ICU looks for data in single files first, then in packages. (default) */
+ UDATA_FILES_FIRST,
/** ICU only loads data from packages, not from single files. */
UDATA_ONLY_PACKAGES,
/** ICU loads data from packages first, and only from single files
if the data cannot be found in a package. */
UDATA_PACKAGES_FIRST,
- /** ICU looks for data in single files first, then in packages. (default) */
- UDATA_FILES_FIRST,
+ /** ICU does not access the file system for data loading. */
+ UDATA_NO_FILES,
/** An alias for the default access mode. */
UDATA_DEFAULT_ACCESS = UDATA_FILES_FIRST,
UDATA_FILE_ACCESS_COUNT
@@ -379,9 +379,9 @@ typedef enum UDataFileAccess {
* @param access The type of file access to be used
* @param status Error code.
* @see UDataFileAccess
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT void U_EXPORT2
+U_STABLE void U_EXPORT2
udata_setFileAccess(UDataFileAccess access, UErrorCode *status);
U_CDECL_END
diff --git a/icuSources/common/unicode/udeprctd.h b/icuSources/common/unicode/udeprctd.h
index 8369eb4a..9bf45f37 100644
--- a/icuSources/common/unicode/udeprctd.h
+++ b/icuSources/common/unicode/udeprctd.h
@@ -1,6 +1,6 @@
/*
*******************************************************************************
-* Copyright (C) 2004-2006, International Business Machines
+* Copyright (C) 2004-2008, International Business Machines
* Corporation and others. All Rights Reserved.
*******************************************************************************
*
@@ -34,15 +34,15 @@
# define utrans_open utrans_open_DEPRECATED_API_DO_NOT_USE
# define utrans_unregister utrans_unregister_DEPRECATED_API_DO_NOT_USE
# else
-# define ucol_getContractions_3_6 ucol_getContractions_DEPRECATED_API_DO_NOT_USE
-# define ucol_getLocale_3_6 ucol_getLocale_DEPRECATED_API_DO_NOT_USE
-# define ures_countArrayItems_3_6 ures_countArrayItems_DEPRECATED_API_DO_NOT_USE
-# define ures_getLocale_3_6 ures_getLocale_DEPRECATED_API_DO_NOT_USE
-# define ures_getVersionNumber_3_6 ures_getVersionNumber_DEPRECATED_API_DO_NOT_USE
-# define utrans_getAvailableID_3_6 utrans_getAvailableID_DEPRECATED_API_DO_NOT_USE
-# define utrans_getID_3_6 utrans_getID_DEPRECATED_API_DO_NOT_USE
-# define utrans_open_3_6 utrans_open_DEPRECATED_API_DO_NOT_USE
-# define utrans_unregister_3_6 utrans_unregister_DEPRECATED_API_DO_NOT_USE
+# define ucol_getContractions_4_0 ucol_getContractions_DEPRECATED_API_DO_NOT_USE
+# define ucol_getLocale_4_0 ucol_getLocale_DEPRECATED_API_DO_NOT_USE
+# define ures_countArrayItems_4_0 ures_countArrayItems_DEPRECATED_API_DO_NOT_USE
+# define ures_getLocale_4_0 ures_getLocale_DEPRECATED_API_DO_NOT_USE
+# define ures_getVersionNumber_4_0 ures_getVersionNumber_DEPRECATED_API_DO_NOT_USE
+# define utrans_getAvailableID_4_0 utrans_getAvailableID_DEPRECATED_API_DO_NOT_USE
+# define utrans_getID_4_0 utrans_getID_DEPRECATED_API_DO_NOT_USE
+# define utrans_open_4_0 utrans_open_DEPRECATED_API_DO_NOT_USE
+# define utrans_unregister_4_0 utrans_unregister_DEPRECATED_API_DO_NOT_USE
# endif /* U_DISABLE_RENAMING */
#endif /* U_HIDE_DEPRECATED_API */
diff --git a/icuSources/common/unicode/udraft.h b/icuSources/common/unicode/udraft.h
index 2c4150e1..5426adf0 100644
--- a/icuSources/common/unicode/udraft.h
+++ b/icuSources/common/unicode/udraft.h
@@ -1,6 +1,6 @@
/*
*******************************************************************************
-* Copyright (C) 2004-2006, International Business Machines
+* Copyright (C) 2004-2008, International Business Machines
* Corporation and others. All Rights Reserved.
*******************************************************************************
*
@@ -24,6 +24,8 @@
#ifdef U_HIDE_DRAFT_API
# if U_DISABLE_RENAMING
+# define afkLanguageCode afkLanguageCode_DRAFT_API_DO_NOT_USE
+# define armiScriptCode armiScriptCode_DRAFT_API_DO_NOT_USE
# define u_fclose u_fclose_DRAFT_API_DO_NOT_USE
# define u_feof u_feof_DRAFT_API_DO_NOT_USE
# define u_fflush u_fflush_DRAFT_API_DO_NOT_USE
@@ -56,9 +58,6 @@
# define u_sprintf_u u_sprintf_u_DRAFT_API_DO_NOT_USE
# define u_sscanf u_sscanf_DRAFT_API_DO_NOT_USE
# define u_sscanf_u u_sscanf_u_DRAFT_API_DO_NOT_USE
-# define u_strFromUTF8Lenient u_strFromUTF8Lenient_DRAFT_API_DO_NOT_USE
-# define u_strFromUTF8WithSub u_strFromUTF8WithSub_DRAFT_API_DO_NOT_USE
-# define u_strToUTF8WithSub u_strToUTF8WithSub_DRAFT_API_DO_NOT_USE
# define u_vfprintf u_vfprintf_DRAFT_API_DO_NOT_USE
# define u_vfprintf_u u_vfprintf_u_DRAFT_API_DO_NOT_USE
# define u_vfscanf u_vfscanf_DRAFT_API_DO_NOT_USE
@@ -69,192 +68,97 @@
# define u_vsprintf_u u_vsprintf_u_DRAFT_API_DO_NOT_USE
# define u_vsscanf u_vsscanf_DRAFT_API_DO_NOT_USE
# define u_vsscanf_u u_vsscanf_u_DRAFT_API_DO_NOT_USE
-# define ubidi_getProcessedLength ubidi_getProcessedLength_DRAFT_API_DO_NOT_USE
-# define ubidi_getReorderingMode ubidi_getReorderingMode_DRAFT_API_DO_NOT_USE
-# define ubidi_getReorderingOptions ubidi_getReorderingOptions_DRAFT_API_DO_NOT_USE
-# define ubidi_getResultLength ubidi_getResultLength_DRAFT_API_DO_NOT_USE
-# define ubidi_setReorderingMode ubidi_setReorderingMode_DRAFT_API_DO_NOT_USE
-# define ubidi_setReorderingOptions ubidi_setReorderingOptions_DRAFT_API_DO_NOT_USE
-# define ubrk_setUText ubrk_setUText_DRAFT_API_DO_NOT_USE
-# define ucal_getGregorianChange ucal_getGregorianChange_DRAFT_API_DO_NOT_USE
-# define ucal_setGregorianChange ucal_setGregorianChange_DRAFT_API_DO_NOT_USE
-# define ucasemap_close ucasemap_close_DRAFT_API_DO_NOT_USE
-# define ucasemap_getLocale ucasemap_getLocale_DRAFT_API_DO_NOT_USE
-# define ucasemap_getOptions ucasemap_getOptions_DRAFT_API_DO_NOT_USE
-# define ucasemap_open ucasemap_open_DRAFT_API_DO_NOT_USE
-# define ucasemap_setLocale ucasemap_setLocale_DRAFT_API_DO_NOT_USE
-# define ucasemap_setOptions ucasemap_setOptions_DRAFT_API_DO_NOT_USE
-# define ucasemap_utf8ToLower ucasemap_utf8ToLower_DRAFT_API_DO_NOT_USE
-# define ucasemap_utf8ToUpper ucasemap_utf8ToUpper_DRAFT_API_DO_NOT_USE
-# define ucnv_fromUCountPending ucnv_fromUCountPending_DRAFT_API_DO_NOT_USE
-# define ucnv_setSubstString ucnv_setSubstString_DRAFT_API_DO_NOT_USE
-# define ucnv_toUCountPending ucnv_toUCountPending_DRAFT_API_DO_NOT_USE
-# define ucol_getContractionsAndExpansions ucol_getContractionsAndExpansions_DRAFT_API_DO_NOT_USE
-# define ucsdet_close ucsdet_close_DRAFT_API_DO_NOT_USE
-# define ucsdet_detect ucsdet_detect_DRAFT_API_DO_NOT_USE
-# define ucsdet_detectAll ucsdet_detectAll_DRAFT_API_DO_NOT_USE
-# define ucsdet_enableInputFilter ucsdet_enableInputFilter_DRAFT_API_DO_NOT_USE
-# define ucsdet_getAllDetectableCharsets ucsdet_getAllDetectableCharsets_DRAFT_API_DO_NOT_USE
-# define ucsdet_getConfidence ucsdet_getConfidence_DRAFT_API_DO_NOT_USE
-# define ucsdet_getLanguage ucsdet_getLanguage_DRAFT_API_DO_NOT_USE
-# define ucsdet_getName ucsdet_getName_DRAFT_API_DO_NOT_USE
-# define ucsdet_getUChars ucsdet_getUChars_DRAFT_API_DO_NOT_USE
-# define ucsdet_isInputFilterEnabled ucsdet_isInputFilterEnabled_DRAFT_API_DO_NOT_USE
-# define ucsdet_open ucsdet_open_DRAFT_API_DO_NOT_USE
-# define ucsdet_setDeclaredEncoding ucsdet_setDeclaredEncoding_DRAFT_API_DO_NOT_USE
-# define ucsdet_setText ucsdet_setText_DRAFT_API_DO_NOT_USE
-# define udata_setFileAccess udata_setFileAccess_DRAFT_API_DO_NOT_USE
-# define ulocdata_close ulocdata_close_DRAFT_API_DO_NOT_USE
-# define ulocdata_getDelimiter ulocdata_getDelimiter_DRAFT_API_DO_NOT_USE
-# define ulocdata_getExemplarSet ulocdata_getExemplarSet_DRAFT_API_DO_NOT_USE
-# define ulocdata_getNoSubstitute ulocdata_getNoSubstitute_DRAFT_API_DO_NOT_USE
-# define ulocdata_open ulocdata_open_DRAFT_API_DO_NOT_USE
-# define ulocdata_setNoSubstitute ulocdata_setNoSubstitute_DRAFT_API_DO_NOT_USE
-# define ures_getUTF8String ures_getUTF8String_DRAFT_API_DO_NOT_USE
-# define ures_getUTF8StringByIndex ures_getUTF8StringByIndex_DRAFT_API_DO_NOT_USE
-# define ures_getUTF8StringByKey ures_getUTF8StringByKey_DRAFT_API_DO_NOT_USE
-# define uset_addAllCodePoints uset_addAllCodePoints_DRAFT_API_DO_NOT_USE
-# define uset_containsAllCodePoints uset_containsAllCodePoints_DRAFT_API_DO_NOT_USE
-# define utext_char32At utext_char32At_DRAFT_API_DO_NOT_USE
-# define utext_clone utext_clone_DRAFT_API_DO_NOT_USE
-# define utext_close utext_close_DRAFT_API_DO_NOT_USE
-# define utext_copy utext_copy_DRAFT_API_DO_NOT_USE
-# define utext_current32 utext_current32_DRAFT_API_DO_NOT_USE
-# define utext_equals utext_equals_DRAFT_API_DO_NOT_USE
-# define utext_extract utext_extract_DRAFT_API_DO_NOT_USE
-# define utext_freeze utext_freeze_DRAFT_API_DO_NOT_USE
-# define utext_getNativeIndex utext_getNativeIndex_DRAFT_API_DO_NOT_USE
-# define utext_getPreviousNativeIndex utext_getPreviousNativeIndex_DRAFT_API_DO_NOT_USE
-# define utext_hasMetaData utext_hasMetaData_DRAFT_API_DO_NOT_USE
-# define utext_isLengthExpensive utext_isLengthExpensive_DRAFT_API_DO_NOT_USE
-# define utext_isWritable utext_isWritable_DRAFT_API_DO_NOT_USE
-# define utext_moveIndex32 utext_moveIndex32_DRAFT_API_DO_NOT_USE
-# define utext_nativeLength utext_nativeLength_DRAFT_API_DO_NOT_USE
-# define utext_next32 utext_next32_DRAFT_API_DO_NOT_USE
-# define utext_next32From utext_next32From_DRAFT_API_DO_NOT_USE
-# define utext_openUChars utext_openUChars_DRAFT_API_DO_NOT_USE
-# define utext_openUTF8 utext_openUTF8_DRAFT_API_DO_NOT_USE
-# define utext_previous32 utext_previous32_DRAFT_API_DO_NOT_USE
-# define utext_previous32From utext_previous32From_DRAFT_API_DO_NOT_USE
-# define utext_replace utext_replace_DRAFT_API_DO_NOT_USE
-# define utext_setNativeIndex utext_setNativeIndex_DRAFT_API_DO_NOT_USE
-# define utext_setup utext_setup_DRAFT_API_DO_NOT_USE
+# define ucal_clone ucal_clone_DRAFT_API_DO_NOT_USE
+# define ucal_getCanonicalTimeZoneID ucal_getCanonicalTimeZoneID_DRAFT_API_DO_NOT_USE
+# define ucurr_countCurrencies ucurr_countCurrencies_DRAFT_API_DO_NOT_USE
+# define ucurr_forLocaleAndDate ucurr_forLocaleAndDate_DRAFT_API_DO_NOT_USE
+# define uloc_addLikelySubtags uloc_addLikelySubtags_DRAFT_API_DO_NOT_USE
+# define uloc_getCharacterOrientation uloc_getCharacterOrientation_DRAFT_API_DO_NOT_USE
+# define uloc_getLineOrientation uloc_getLineOrientation_DRAFT_API_DO_NOT_USE
+# define uloc_minimizeSubtags uloc_minimizeSubtags_DRAFT_API_DO_NOT_USE
+# define uregex_getMatchCallback uregex_getMatchCallback_DRAFT_API_DO_NOT_USE
+# define uregex_getStackLimit uregex_getStackLimit_DRAFT_API_DO_NOT_USE
+# define uregex_getTimeLimit uregex_getTimeLimit_DRAFT_API_DO_NOT_USE
+# define uregex_hasAnchoringBounds uregex_hasAnchoringBounds_DRAFT_API_DO_NOT_USE
+# define uregex_hasTransparentBounds uregex_hasTransparentBounds_DRAFT_API_DO_NOT_USE
+# define uregex_hitEnd uregex_hitEnd_DRAFT_API_DO_NOT_USE
+# define uregex_regionEnd uregex_regionEnd_DRAFT_API_DO_NOT_USE
+# define uregex_regionStart uregex_regionStart_DRAFT_API_DO_NOT_USE
+# define uregex_requireEnd uregex_requireEnd_DRAFT_API_DO_NOT_USE
+# define uregex_setMatchCallback uregex_setMatchCallback_DRAFT_API_DO_NOT_USE
+# define uregex_setRegion uregex_setRegion_DRAFT_API_DO_NOT_USE
+# define uregex_setStackLimit uregex_setStackLimit_DRAFT_API_DO_NOT_USE
+# define uregex_setTimeLimit uregex_setTimeLimit_DRAFT_API_DO_NOT_USE
+# define uregex_useAnchoringBounds uregex_useAnchoringBounds_DRAFT_API_DO_NOT_USE
+# define uregex_useTransparentBounds uregex_useTransparentBounds_DRAFT_API_DO_NOT_USE
# else
-# define u_fclose_3_6 u_fclose_DRAFT_API_DO_NOT_USE
-# define u_feof_3_6 u_feof_DRAFT_API_DO_NOT_USE
-# define u_fflush_3_6 u_fflush_DRAFT_API_DO_NOT_USE
-# define u_fgetConverter_3_6 u_fgetConverter_DRAFT_API_DO_NOT_USE
-# define u_fgetc_3_6 u_fgetc_DRAFT_API_DO_NOT_USE
-# define u_fgetcodepage_3_6 u_fgetcodepage_DRAFT_API_DO_NOT_USE
-# define u_fgetcx_3_6 u_fgetcx_DRAFT_API_DO_NOT_USE
-# define u_fgetfile_3_6 u_fgetfile_DRAFT_API_DO_NOT_USE
-# define u_fgetlocale_3_6 u_fgetlocale_DRAFT_API_DO_NOT_USE
-# define u_fgets_3_6 u_fgets_DRAFT_API_DO_NOT_USE
-# define u_file_read_3_6 u_file_read_DRAFT_API_DO_NOT_USE
-# define u_file_write_3_6 u_file_write_DRAFT_API_DO_NOT_USE
-# define u_finit_3_6 u_finit_DRAFT_API_DO_NOT_USE
-# define u_fopen_3_6 u_fopen_DRAFT_API_DO_NOT_USE
-# define u_fprintf_3_6 u_fprintf_DRAFT_API_DO_NOT_USE
-# define u_fprintf_u_3_6 u_fprintf_u_DRAFT_API_DO_NOT_USE
-# define u_fputc_3_6 u_fputc_DRAFT_API_DO_NOT_USE
-# define u_fputs_3_6 u_fputs_DRAFT_API_DO_NOT_USE
-# define u_frewind_3_6 u_frewind_DRAFT_API_DO_NOT_USE
-# define u_fscanf_3_6 u_fscanf_DRAFT_API_DO_NOT_USE
-# define u_fscanf_u_3_6 u_fscanf_u_DRAFT_API_DO_NOT_USE
-# define u_fsetcodepage_3_6 u_fsetcodepage_DRAFT_API_DO_NOT_USE
-# define u_fsetlocale_3_6 u_fsetlocale_DRAFT_API_DO_NOT_USE
-# define u_fsettransliterator_3_6 u_fsettransliterator_DRAFT_API_DO_NOT_USE
-# define u_fstropen_3_6 u_fstropen_DRAFT_API_DO_NOT_USE
-# define u_fungetc_3_6 u_fungetc_DRAFT_API_DO_NOT_USE
-# define u_snprintf_3_6 u_snprintf_DRAFT_API_DO_NOT_USE
-# define u_snprintf_u_3_6 u_snprintf_u_DRAFT_API_DO_NOT_USE
-# define u_sprintf_3_6 u_sprintf_DRAFT_API_DO_NOT_USE
-# define u_sprintf_u_3_6 u_sprintf_u_DRAFT_API_DO_NOT_USE
-# define u_sscanf_3_6 u_sscanf_DRAFT_API_DO_NOT_USE
-# define u_sscanf_u_3_6 u_sscanf_u_DRAFT_API_DO_NOT_USE
-# define u_strFromUTF8Lenient_3_6 u_strFromUTF8Lenient_DRAFT_API_DO_NOT_USE
-# define u_strFromUTF8WithSub_3_6 u_strFromUTF8WithSub_DRAFT_API_DO_NOT_USE
-# define u_strToUTF8WithSub_3_6 u_strToUTF8WithSub_DRAFT_API_DO_NOT_USE
-# define u_vfprintf_3_6 u_vfprintf_DRAFT_API_DO_NOT_USE
-# define u_vfprintf_u_3_6 u_vfprintf_u_DRAFT_API_DO_NOT_USE
-# define u_vfscanf_3_6 u_vfscanf_DRAFT_API_DO_NOT_USE
-# define u_vfscanf_u_3_6 u_vfscanf_u_DRAFT_API_DO_NOT_USE
-# define u_vsnprintf_3_6 u_vsnprintf_DRAFT_API_DO_NOT_USE
-# define u_vsnprintf_u_3_6 u_vsnprintf_u_DRAFT_API_DO_NOT_USE
-# define u_vsprintf_3_6 u_vsprintf_DRAFT_API_DO_NOT_USE
-# define u_vsprintf_u_3_6 u_vsprintf_u_DRAFT_API_DO_NOT_USE
-# define u_vsscanf_3_6 u_vsscanf_DRAFT_API_DO_NOT_USE
-# define u_vsscanf_u_3_6 u_vsscanf_u_DRAFT_API_DO_NOT_USE
-# define ubidi_getProcessedLength_3_6 ubidi_getProcessedLength_DRAFT_API_DO_NOT_USE
-# define ubidi_getReorderingMode_3_6 ubidi_getReorderingMode_DRAFT_API_DO_NOT_USE
-# define ubidi_getReorderingOptions_3_6 ubidi_getReorderingOptions_DRAFT_API_DO_NOT_USE
-# define ubidi_getResultLength_3_6 ubidi_getResultLength_DRAFT_API_DO_NOT_USE
-# define ubidi_setReorderingMode_3_6 ubidi_setReorderingMode_DRAFT_API_DO_NOT_USE
-# define ubidi_setReorderingOptions_3_6 ubidi_setReorderingOptions_DRAFT_API_DO_NOT_USE
-# define ubrk_setUText_3_6 ubrk_setUText_DRAFT_API_DO_NOT_USE
-# define ucal_getGregorianChange_3_6 ucal_getGregorianChange_DRAFT_API_DO_NOT_USE
-# define ucal_setGregorianChange_3_6 ucal_setGregorianChange_DRAFT_API_DO_NOT_USE
-# define ucasemap_close_3_6 ucasemap_close_DRAFT_API_DO_NOT_USE
-# define ucasemap_getLocale_3_6 ucasemap_getLocale_DRAFT_API_DO_NOT_USE
-# define ucasemap_getOptions_3_6 ucasemap_getOptions_DRAFT_API_DO_NOT_USE
-# define ucasemap_open_3_6 ucasemap_open_DRAFT_API_DO_NOT_USE
-# define ucasemap_setLocale_3_6 ucasemap_setLocale_DRAFT_API_DO_NOT_USE
-# define ucasemap_setOptions_3_6 ucasemap_setOptions_DRAFT_API_DO_NOT_USE
-# define ucasemap_utf8ToLower_3_6 ucasemap_utf8ToLower_DRAFT_API_DO_NOT_USE
-# define ucasemap_utf8ToUpper_3_6 ucasemap_utf8ToUpper_DRAFT_API_DO_NOT_USE
-# define ucnv_fromUCountPending_3_6 ucnv_fromUCountPending_DRAFT_API_DO_NOT_USE
-# define ucnv_setSubstString_3_6 ucnv_setSubstString_DRAFT_API_DO_NOT_USE
-# define ucnv_toUCountPending_3_6 ucnv_toUCountPending_DRAFT_API_DO_NOT_USE
-# define ucol_getContractionsAndExpansions_3_6 ucol_getContractionsAndExpansions_DRAFT_API_DO_NOT_USE
-# define ucsdet_close_3_6 ucsdet_close_DRAFT_API_DO_NOT_USE
-# define ucsdet_detectAll_3_6 ucsdet_detectAll_DRAFT_API_DO_NOT_USE
-# define ucsdet_detect_3_6 ucsdet_detect_DRAFT_API_DO_NOT_USE
-# define ucsdet_enableInputFilter_3_6 ucsdet_enableInputFilter_DRAFT_API_DO_NOT_USE
-# define ucsdet_getAllDetectableCharsets_3_6 ucsdet_getAllDetectableCharsets_DRAFT_API_DO_NOT_USE
-# define ucsdet_getConfidence_3_6 ucsdet_getConfidence_DRAFT_API_DO_NOT_USE
-# define ucsdet_getLanguage_3_6 ucsdet_getLanguage_DRAFT_API_DO_NOT_USE
-# define ucsdet_getName_3_6 ucsdet_getName_DRAFT_API_DO_NOT_USE
-# define ucsdet_getUChars_3_6 ucsdet_getUChars_DRAFT_API_DO_NOT_USE
-# define ucsdet_isInputFilterEnabled_3_6 ucsdet_isInputFilterEnabled_DRAFT_API_DO_NOT_USE
-# define ucsdet_open_3_6 ucsdet_open_DRAFT_API_DO_NOT_USE
-# define ucsdet_setDeclaredEncoding_3_6 ucsdet_setDeclaredEncoding_DRAFT_API_DO_NOT_USE
-# define ucsdet_setText_3_6 ucsdet_setText_DRAFT_API_DO_NOT_USE
-# define udata_setFileAccess_3_6 udata_setFileAccess_DRAFT_API_DO_NOT_USE
-# define ulocdata_close_3_6 ulocdata_close_DRAFT_API_DO_NOT_USE
-# define ulocdata_getDelimiter_3_6 ulocdata_getDelimiter_DRAFT_API_DO_NOT_USE
-# define ulocdata_getExemplarSet_3_6 ulocdata_getExemplarSet_DRAFT_API_DO_NOT_USE
-# define ulocdata_getNoSubstitute_3_6 ulocdata_getNoSubstitute_DRAFT_API_DO_NOT_USE
-# define ulocdata_open_3_6 ulocdata_open_DRAFT_API_DO_NOT_USE
-# define ulocdata_setNoSubstitute_3_6 ulocdata_setNoSubstitute_DRAFT_API_DO_NOT_USE
-# define ures_getUTF8StringByIndex_3_6 ures_getUTF8StringByIndex_DRAFT_API_DO_NOT_USE
-# define ures_getUTF8StringByKey_3_6 ures_getUTF8StringByKey_DRAFT_API_DO_NOT_USE
-# define ures_getUTF8String_3_6 ures_getUTF8String_DRAFT_API_DO_NOT_USE
-# define uset_addAllCodePoints_3_6 uset_addAllCodePoints_DRAFT_API_DO_NOT_USE
-# define uset_containsAllCodePoints_3_6 uset_containsAllCodePoints_DRAFT_API_DO_NOT_USE
-# define utext_char32At_3_6 utext_char32At_DRAFT_API_DO_NOT_USE
-# define utext_clone_3_6 utext_clone_DRAFT_API_DO_NOT_USE
-# define utext_close_3_6 utext_close_DRAFT_API_DO_NOT_USE
-# define utext_copy_3_6 utext_copy_DRAFT_API_DO_NOT_USE
-# define utext_current32_3_6 utext_current32_DRAFT_API_DO_NOT_USE
-# define utext_equals_3_6 utext_equals_DRAFT_API_DO_NOT_USE
-# define utext_extract_3_6 utext_extract_DRAFT_API_DO_NOT_USE
-# define utext_freeze_3_6 utext_freeze_DRAFT_API_DO_NOT_USE
-# define utext_getNativeIndex_3_6 utext_getNativeIndex_DRAFT_API_DO_NOT_USE
-# define utext_getPreviousNativeIndex_3_6 utext_getPreviousNativeIndex_DRAFT_API_DO_NOT_USE
-# define utext_hasMetaData_3_6 utext_hasMetaData_DRAFT_API_DO_NOT_USE
-# define utext_isLengthExpensive_3_6 utext_isLengthExpensive_DRAFT_API_DO_NOT_USE
-# define utext_isWritable_3_6 utext_isWritable_DRAFT_API_DO_NOT_USE
-# define utext_moveIndex32_3_6 utext_moveIndex32_DRAFT_API_DO_NOT_USE
-# define utext_nativeLength_3_6 utext_nativeLength_DRAFT_API_DO_NOT_USE
-# define utext_next32From_3_6 utext_next32From_DRAFT_API_DO_NOT_USE
-# define utext_next32_3_6 utext_next32_DRAFT_API_DO_NOT_USE
-# define utext_openUChars_3_6 utext_openUChars_DRAFT_API_DO_NOT_USE
-# define utext_openUTF8_3_6 utext_openUTF8_DRAFT_API_DO_NOT_USE
-# define utext_previous32From_3_6 utext_previous32From_DRAFT_API_DO_NOT_USE
-# define utext_previous32_3_6 utext_previous32_DRAFT_API_DO_NOT_USE
-# define utext_replace_3_6 utext_replace_DRAFT_API_DO_NOT_USE
-# define utext_setNativeIndex_3_6 utext_setNativeIndex_DRAFT_API_DO_NOT_USE
-# define utext_setup_3_6 utext_setup_DRAFT_API_DO_NOT_USE
+# define afkLanguageCode_4_0 afkLanguageCode_DRAFT_API_DO_NOT_USE
+# define armiScriptCode_4_0 armiScriptCode_DRAFT_API_DO_NOT_USE
+# define u_fclose_4_0 u_fclose_DRAFT_API_DO_NOT_USE
+# define u_feof_4_0 u_feof_DRAFT_API_DO_NOT_USE
+# define u_fflush_4_0 u_fflush_DRAFT_API_DO_NOT_USE
+# define u_fgetConverter_4_0 u_fgetConverter_DRAFT_API_DO_NOT_USE
+# define u_fgetc_4_0 u_fgetc_DRAFT_API_DO_NOT_USE
+# define u_fgetcodepage_4_0 u_fgetcodepage_DRAFT_API_DO_NOT_USE
+# define u_fgetcx_4_0 u_fgetcx_DRAFT_API_DO_NOT_USE
+# define u_fgetfile_4_0 u_fgetfile_DRAFT_API_DO_NOT_USE
+# define u_fgetlocale_4_0 u_fgetlocale_DRAFT_API_DO_NOT_USE
+# define u_fgets_4_0 u_fgets_DRAFT_API_DO_NOT_USE
+# define u_file_read_4_0 u_file_read_DRAFT_API_DO_NOT_USE
+# define u_file_write_4_0 u_file_write_DRAFT_API_DO_NOT_USE
+# define u_finit_4_0 u_finit_DRAFT_API_DO_NOT_USE
+# define u_fopen_4_0 u_fopen_DRAFT_API_DO_NOT_USE
+# define u_fprintf_4_0 u_fprintf_DRAFT_API_DO_NOT_USE
+# define u_fprintf_u_4_0 u_fprintf_u_DRAFT_API_DO_NOT_USE
+# define u_fputc_4_0 u_fputc_DRAFT_API_DO_NOT_USE
+# define u_fputs_4_0 u_fputs_DRAFT_API_DO_NOT_USE
+# define u_frewind_4_0 u_frewind_DRAFT_API_DO_NOT_USE
+# define u_fscanf_4_0 u_fscanf_DRAFT_API_DO_NOT_USE
+# define u_fscanf_u_4_0 u_fscanf_u_DRAFT_API_DO_NOT_USE
+# define u_fsetcodepage_4_0 u_fsetcodepage_DRAFT_API_DO_NOT_USE
+# define u_fsetlocale_4_0 u_fsetlocale_DRAFT_API_DO_NOT_USE
+# define u_fsettransliterator_4_0 u_fsettransliterator_DRAFT_API_DO_NOT_USE
+# define u_fstropen_4_0 u_fstropen_DRAFT_API_DO_NOT_USE
+# define u_fungetc_4_0 u_fungetc_DRAFT_API_DO_NOT_USE
+# define u_snprintf_4_0 u_snprintf_DRAFT_API_DO_NOT_USE
+# define u_snprintf_u_4_0 u_snprintf_u_DRAFT_API_DO_NOT_USE
+# define u_sprintf_4_0 u_sprintf_DRAFT_API_DO_NOT_USE
+# define u_sprintf_u_4_0 u_sprintf_u_DRAFT_API_DO_NOT_USE
+# define u_sscanf_4_0 u_sscanf_DRAFT_API_DO_NOT_USE
+# define u_sscanf_u_4_0 u_sscanf_u_DRAFT_API_DO_NOT_USE
+# define u_vfprintf_4_0 u_vfprintf_DRAFT_API_DO_NOT_USE
+# define u_vfprintf_u_4_0 u_vfprintf_u_DRAFT_API_DO_NOT_USE
+# define u_vfscanf_4_0 u_vfscanf_DRAFT_API_DO_NOT_USE
+# define u_vfscanf_u_4_0 u_vfscanf_u_DRAFT_API_DO_NOT_USE
+# define u_vsnprintf_4_0 u_vsnprintf_DRAFT_API_DO_NOT_USE
+# define u_vsnprintf_u_4_0 u_vsnprintf_u_DRAFT_API_DO_NOT_USE
+# define u_vsprintf_4_0 u_vsprintf_DRAFT_API_DO_NOT_USE
+# define u_vsprintf_u_4_0 u_vsprintf_u_DRAFT_API_DO_NOT_USE
+# define u_vsscanf_4_0 u_vsscanf_DRAFT_API_DO_NOT_USE
+# define u_vsscanf_u_4_0 u_vsscanf_u_DRAFT_API_DO_NOT_USE
+# define ucal_clone_4_0 ucal_clone_DRAFT_API_DO_NOT_USE
+# define ucal_getCanonicalTimeZoneID_4_0 ucal_getCanonicalTimeZoneID_DRAFT_API_DO_NOT_USE
+# define ucurr_countCurrencies_4_0 ucurr_countCurrencies_DRAFT_API_DO_NOT_USE
+# define ucurr_forLocaleAndDate_4_0 ucurr_forLocaleAndDate_DRAFT_API_DO_NOT_USE
+# define uloc_addLikelySubtags_4_0 uloc_addLikelySubtags_DRAFT_API_DO_NOT_USE
+# define uloc_getCharacterOrientation_4_0 uloc_getCharacterOrientation_DRAFT_API_DO_NOT_USE
+# define uloc_getLineOrientation_4_0 uloc_getLineOrientation_DRAFT_API_DO_NOT_USE
+# define uloc_minimizeSubtags_4_0 uloc_minimizeSubtags_DRAFT_API_DO_NOT_USE
+# define uregex_getMatchCallback_4_0 uregex_getMatchCallback_DRAFT_API_DO_NOT_USE
+# define uregex_getStackLimit_4_0 uregex_getStackLimit_DRAFT_API_DO_NOT_USE
+# define uregex_getTimeLimit_4_0 uregex_getTimeLimit_DRAFT_API_DO_NOT_USE
+# define uregex_hasAnchoringBounds_4_0 uregex_hasAnchoringBounds_DRAFT_API_DO_NOT_USE
+# define uregex_hasTransparentBounds_4_0 uregex_hasTransparentBounds_DRAFT_API_DO_NOT_USE
+# define uregex_hitEnd_4_0 uregex_hitEnd_DRAFT_API_DO_NOT_USE
+# define uregex_regionEnd_4_0 uregex_regionEnd_DRAFT_API_DO_NOT_USE
+# define uregex_regionStart_4_0 uregex_regionStart_DRAFT_API_DO_NOT_USE
+# define uregex_requireEnd_4_0 uregex_requireEnd_DRAFT_API_DO_NOT_USE
+# define uregex_setMatchCallback_4_0 uregex_setMatchCallback_DRAFT_API_DO_NOT_USE
+# define uregex_setRegion_4_0 uregex_setRegion_DRAFT_API_DO_NOT_USE
+# define uregex_setStackLimit_4_0 uregex_setStackLimit_DRAFT_API_DO_NOT_USE
+# define uregex_setTimeLimit_4_0 uregex_setTimeLimit_DRAFT_API_DO_NOT_USE
+# define uregex_useAnchoringBounds_4_0 uregex_useAnchoringBounds_DRAFT_API_DO_NOT_USE
+# define uregex_useTransparentBounds_4_0 uregex_useTransparentBounds_DRAFT_API_DO_NOT_USE
# endif /* U_DISABLE_RENAMING */
#endif /* U_HIDE_DRAFT_API */
diff --git a/icuSources/common/unicode/uidna.h b/icuSources/common/unicode/uidna.h
index 1371b9ed..52aa6e91 100644
--- a/icuSources/common/unicode/uidna.h
+++ b/icuSources/common/unicode/uidna.h
@@ -1,7 +1,7 @@
/*
*******************************************************************************
*
- * Copyright (C) 2003-2006, International Business Machines
+ * Copyright (C) 2003-2007, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
@@ -107,7 +107,8 @@
* U_INDEX_OUTOFBOUNDS_ERROR if src contains
* too many code points.
* U_BUFFER_OVERFLOW_ERROR if destCapacity is not enough
- * @return Number of ASCII characters converted.
+ * @return The length of the result string, if successful - or in case of a buffer overflow,
+ * in which case it will be greater than destCapacity.
* @stable ICU 2.6
*/
U_STABLE int32_t U_EXPORT2
@@ -157,7 +158,8 @@ uidna_toASCII(const UChar* src, int32_t srcLength,
* U_INDEX_OUTOFBOUNDS_ERROR if src contains
* too many code points.
* U_BUFFER_OVERFLOW_ERROR if destCapacity is not enough
- * @return Number of Unicode characters converted.
+ * @return The length of the result string, if successful - or in case of a buffer overflow,
+ * in which case it will be greater than destCapacity.
* @stable ICU 2.6
*/
U_STABLE int32_t U_EXPORT2
@@ -207,7 +209,8 @@ uidna_toUnicode(const UChar* src, int32_t srcLength,
* U_INDEX_OUTOFBOUNDS_ERROR if src contains
* too many code points.
* U_BUFFER_OVERFLOW_ERROR if destCapacity is not enough
- * @return Number of ASCII characters converted.
+ * @return The length of the result string, if successful - or in case of a buffer overflow,
+ * in which case it will be greater than destCapacity.
* @stable ICU 2.6
*/
U_STABLE int32_t U_EXPORT2
@@ -253,7 +256,8 @@ uidna_IDNToASCII( const UChar* src, int32_t srcLength,
* U_INDEX_OUTOFBOUNDS_ERROR if src contains
* too many code points.
* U_BUFFER_OVERFLOW_ERROR if destCapacity is not enough
- * @return Number of ASCII characters converted.
+ * @return The length of the result string, if successful - or in case of a buffer overflow,
+ * in which case it will be greater than destCapacity.
* @stable ICU 2.6
*/
U_STABLE int32_t U_EXPORT2
diff --git a/icuSources/common/unicode/uintrnal.h b/icuSources/common/unicode/uintrnal.h
index 79630d1d..6a01f6b0 100644
--- a/icuSources/common/unicode/uintrnal.h
+++ b/icuSources/common/unicode/uintrnal.h
@@ -1,6 +1,6 @@
/*
*******************************************************************************
-* Copyright (C) 2004-2006, International Business Machines
+* Copyright (C) 2004-2008, International Business Machines
* Corporation and others. All Rights Reserved.
*******************************************************************************
*
@@ -25,42 +25,154 @@
# if U_DISABLE_RENAMING
# define RegexPatternDump RegexPatternDump_INTERNAL_API_DO_NOT_USE
-# define ucol_collatorToIdentifier ucol_collatorToIdentifier_INTERNAL_API_DO_NOT_USE
+# define pl_addFontRun pl_addFontRun_INTERNAL_API_DO_NOT_USE
+# define pl_addLocaleRun pl_addLocaleRun_INTERNAL_API_DO_NOT_USE
+# define pl_addValueRun pl_addValueRun_INTERNAL_API_DO_NOT_USE
+# define pl_close pl_close_INTERNAL_API_DO_NOT_USE
+# define pl_closeFontRuns pl_closeFontRuns_INTERNAL_API_DO_NOT_USE
+# define pl_closeLine pl_closeLine_INTERNAL_API_DO_NOT_USE
+# define pl_closeLocaleRuns pl_closeLocaleRuns_INTERNAL_API_DO_NOT_USE
+# define pl_closeValueRuns pl_closeValueRuns_INTERNAL_API_DO_NOT_USE
+# define pl_countLineRuns pl_countLineRuns_INTERNAL_API_DO_NOT_USE
+# define pl_create pl_create_INTERNAL_API_DO_NOT_USE
+# define pl_getAscent pl_getAscent_INTERNAL_API_DO_NOT_USE
+# define pl_getDescent pl_getDescent_INTERNAL_API_DO_NOT_USE
+# define pl_getFontRunCount pl_getFontRunCount_INTERNAL_API_DO_NOT_USE
+# define pl_getFontRunFont pl_getFontRunFont_INTERNAL_API_DO_NOT_USE
+# define pl_getFontRunLastLimit pl_getFontRunLastLimit_INTERNAL_API_DO_NOT_USE
+# define pl_getFontRunLimit pl_getFontRunLimit_INTERNAL_API_DO_NOT_USE
+# define pl_getLeading pl_getLeading_INTERNAL_API_DO_NOT_USE
+# define pl_getLineAscent pl_getLineAscent_INTERNAL_API_DO_NOT_USE
+# define pl_getLineDescent pl_getLineDescent_INTERNAL_API_DO_NOT_USE
+# define pl_getLineLeading pl_getLineLeading_INTERNAL_API_DO_NOT_USE
+# define pl_getLineVisualRun pl_getLineVisualRun_INTERNAL_API_DO_NOT_USE
+# define pl_getLineWidth pl_getLineWidth_INTERNAL_API_DO_NOT_USE
+# define pl_getLocaleRunCount pl_getLocaleRunCount_INTERNAL_API_DO_NOT_USE
+# define pl_getLocaleRunLastLimit pl_getLocaleRunLastLimit_INTERNAL_API_DO_NOT_USE
+# define pl_getLocaleRunLimit pl_getLocaleRunLimit_INTERNAL_API_DO_NOT_USE
+# define pl_getLocaleRunLocale pl_getLocaleRunLocale_INTERNAL_API_DO_NOT_USE
+# define pl_getParagraphLevel pl_getParagraphLevel_INTERNAL_API_DO_NOT_USE
+# define pl_getTextDirection pl_getTextDirection_INTERNAL_API_DO_NOT_USE
+# define pl_getValueRunCount pl_getValueRunCount_INTERNAL_API_DO_NOT_USE
+# define pl_getValueRunLastLimit pl_getValueRunLastLimit_INTERNAL_API_DO_NOT_USE
+# define pl_getValueRunLimit pl_getValueRunLimit_INTERNAL_API_DO_NOT_USE
+# define pl_getValueRunValue pl_getValueRunValue_INTERNAL_API_DO_NOT_USE
+# define pl_getVisualRunAscent pl_getVisualRunAscent_INTERNAL_API_DO_NOT_USE
+# define pl_getVisualRunDescent pl_getVisualRunDescent_INTERNAL_API_DO_NOT_USE
+# define pl_getVisualRunDirection pl_getVisualRunDirection_INTERNAL_API_DO_NOT_USE
+# define pl_getVisualRunFont pl_getVisualRunFont_INTERNAL_API_DO_NOT_USE
+# define pl_getVisualRunGlyphCount pl_getVisualRunGlyphCount_INTERNAL_API_DO_NOT_USE
+# define pl_getVisualRunGlyphToCharMap pl_getVisualRunGlyphToCharMap_INTERNAL_API_DO_NOT_USE
+# define pl_getVisualRunGlyphs pl_getVisualRunGlyphs_INTERNAL_API_DO_NOT_USE
+# define pl_getVisualRunLeading pl_getVisualRunLeading_INTERNAL_API_DO_NOT_USE
+# define pl_getVisualRunPositions pl_getVisualRunPositions_INTERNAL_API_DO_NOT_USE
+# define pl_isComplex pl_isComplex_INTERNAL_API_DO_NOT_USE
+# define pl_line pl_line_INTERNAL_API_DO_NOT_USE
+# define pl_nextLine pl_nextLine_INTERNAL_API_DO_NOT_USE
+# define pl_openEmptyFontRuns pl_openEmptyFontRuns_INTERNAL_API_DO_NOT_USE
+# define pl_openEmptyLocaleRuns pl_openEmptyLocaleRuns_INTERNAL_API_DO_NOT_USE
+# define pl_openEmptyValueRuns pl_openEmptyValueRuns_INTERNAL_API_DO_NOT_USE
+# define pl_openFontRuns pl_openFontRuns_INTERNAL_API_DO_NOT_USE
+# define pl_openLocaleRuns pl_openLocaleRuns_INTERNAL_API_DO_NOT_USE
+# define pl_openValueRuns pl_openValueRuns_INTERNAL_API_DO_NOT_USE
+# define pl_paragraph pl_paragraph_INTERNAL_API_DO_NOT_USE
+# define pl_reflow pl_reflow_INTERNAL_API_DO_NOT_USE
+# define pl_resetFontRuns pl_resetFontRuns_INTERNAL_API_DO_NOT_USE
+# define pl_resetLocaleRuns pl_resetLocaleRuns_INTERNAL_API_DO_NOT_USE
+# define pl_resetValueRuns pl_resetValueRuns_INTERNAL_API_DO_NOT_USE
+# define pl_visualRun pl_visualRun_INTERNAL_API_DO_NOT_USE
# define ucol_equals ucol_equals_INTERNAL_API_DO_NOT_USE
# define ucol_forgetUCA ucol_forgetUCA_INTERNAL_API_DO_NOT_USE
# define ucol_getAttributeOrDefault ucol_getAttributeOrDefault_INTERNAL_API_DO_NOT_USE
# define ucol_getUnsafeSet ucol_getUnsafeSet_INTERNAL_API_DO_NOT_USE
-# define ucol_identifierToShortString ucol_identifierToShortString_INTERNAL_API_DO_NOT_USE
-# define ucol_openFromIdentifier ucol_openFromIdentifier_INTERNAL_API_DO_NOT_USE
+# define ucol_nextProcessed ucol_nextProcessed_INTERNAL_API_DO_NOT_USE
# define ucol_prepareShortStringOpen ucol_prepareShortStringOpen_INTERNAL_API_DO_NOT_USE
-# define ucol_shortStringToIdentifier ucol_shortStringToIdentifier_INTERNAL_API_DO_NOT_USE
+# define ucol_previousProcessed ucol_previousProcessed_INTERNAL_API_DO_NOT_USE
# define uprv_getDefaultCodepage uprv_getDefaultCodepage_INTERNAL_API_DO_NOT_USE
# define uprv_getDefaultLocaleID uprv_getDefaultLocaleID_INTERNAL_API_DO_NOT_USE
# define ures_openFillIn ures_openFillIn_INTERNAL_API_DO_NOT_USE
+# define usearch_search usearch_search_INTERNAL_API_DO_NOT_USE
+# define usearch_searchBackwards usearch_searchBackwards_INTERNAL_API_DO_NOT_USE
# define utf8_appendCharSafeBody utf8_appendCharSafeBody_INTERNAL_API_DO_NOT_USE
# define utf8_back1SafeBody utf8_back1SafeBody_INTERNAL_API_DO_NOT_USE
# define utf8_countTrailBytes utf8_countTrailBytes_INTERNAL_API_DO_NOT_USE
# define utf8_nextCharSafeBody utf8_nextCharSafeBody_INTERNAL_API_DO_NOT_USE
# define utf8_prevCharSafeBody utf8_prevCharSafeBody_INTERNAL_API_DO_NOT_USE
# else
-# define RegexPatternDump_3_6 RegexPatternDump_INTERNAL_API_DO_NOT_USE
-# define ucol_collatorToIdentifier_3_6 ucol_collatorToIdentifier_INTERNAL_API_DO_NOT_USE
-# define ucol_equals_3_6 ucol_equals_INTERNAL_API_DO_NOT_USE
-# define ucol_forgetUCA_3_6 ucol_forgetUCA_INTERNAL_API_DO_NOT_USE
-# define ucol_getAttributeOrDefault_3_6 ucol_getAttributeOrDefault_INTERNAL_API_DO_NOT_USE
-# define ucol_getUnsafeSet_3_6 ucol_getUnsafeSet_INTERNAL_API_DO_NOT_USE
-# define ucol_identifierToShortString_3_6 ucol_identifierToShortString_INTERNAL_API_DO_NOT_USE
-# define ucol_openFromIdentifier_3_6 ucol_openFromIdentifier_INTERNAL_API_DO_NOT_USE
-# define ucol_prepareShortStringOpen_3_6 ucol_prepareShortStringOpen_INTERNAL_API_DO_NOT_USE
-# define ucol_shortStringToIdentifier_3_6 ucol_shortStringToIdentifier_INTERNAL_API_DO_NOT_USE
-# define uprv_getDefaultCodepage_3_6 uprv_getDefaultCodepage_INTERNAL_API_DO_NOT_USE
-# define uprv_getDefaultLocaleID_3_6 uprv_getDefaultLocaleID_INTERNAL_API_DO_NOT_USE
-# define ures_openFillIn_3_6 ures_openFillIn_INTERNAL_API_DO_NOT_USE
-# define utf8_appendCharSafeBody_3_6 utf8_appendCharSafeBody_INTERNAL_API_DO_NOT_USE
-# define utf8_back1SafeBody_3_6 utf8_back1SafeBody_INTERNAL_API_DO_NOT_USE
-# define utf8_countTrailBytes_3_6 utf8_countTrailBytes_INTERNAL_API_DO_NOT_USE
-# define utf8_nextCharSafeBody_3_6 utf8_nextCharSafeBody_INTERNAL_API_DO_NOT_USE
-# define utf8_prevCharSafeBody_3_6 utf8_prevCharSafeBody_INTERNAL_API_DO_NOT_USE
+# define RegexPatternDump_4_0 RegexPatternDump_INTERNAL_API_DO_NOT_USE
+# define pl_addFontRun_4_0 pl_addFontRun_INTERNAL_API_DO_NOT_USE
+# define pl_addLocaleRun_4_0 pl_addLocaleRun_INTERNAL_API_DO_NOT_USE
+# define pl_addValueRun_4_0 pl_addValueRun_INTERNAL_API_DO_NOT_USE
+# define pl_closeFontRuns_4_0 pl_closeFontRuns_INTERNAL_API_DO_NOT_USE
+# define pl_closeLine_4_0 pl_closeLine_INTERNAL_API_DO_NOT_USE
+# define pl_closeLocaleRuns_4_0 pl_closeLocaleRuns_INTERNAL_API_DO_NOT_USE
+# define pl_closeValueRuns_4_0 pl_closeValueRuns_INTERNAL_API_DO_NOT_USE
+# define pl_close_4_0 pl_close_INTERNAL_API_DO_NOT_USE
+# define pl_countLineRuns_4_0 pl_countLineRuns_INTERNAL_API_DO_NOT_USE
+# define pl_create_4_0 pl_create_INTERNAL_API_DO_NOT_USE
+# define pl_getAscent_4_0 pl_getAscent_INTERNAL_API_DO_NOT_USE
+# define pl_getDescent_4_0 pl_getDescent_INTERNAL_API_DO_NOT_USE
+# define pl_getFontRunCount_4_0 pl_getFontRunCount_INTERNAL_API_DO_NOT_USE
+# define pl_getFontRunFont_4_0 pl_getFontRunFont_INTERNAL_API_DO_NOT_USE
+# define pl_getFontRunLastLimit_4_0 pl_getFontRunLastLimit_INTERNAL_API_DO_NOT_USE
+# define pl_getFontRunLimit_4_0 pl_getFontRunLimit_INTERNAL_API_DO_NOT_USE
+# define pl_getLeading_4_0 pl_getLeading_INTERNAL_API_DO_NOT_USE
+# define pl_getLineAscent_4_0 pl_getLineAscent_INTERNAL_API_DO_NOT_USE
+# define pl_getLineDescent_4_0 pl_getLineDescent_INTERNAL_API_DO_NOT_USE
+# define pl_getLineLeading_4_0 pl_getLineLeading_INTERNAL_API_DO_NOT_USE
+# define pl_getLineVisualRun_4_0 pl_getLineVisualRun_INTERNAL_API_DO_NOT_USE
+# define pl_getLineWidth_4_0 pl_getLineWidth_INTERNAL_API_DO_NOT_USE
+# define pl_getLocaleRunCount_4_0 pl_getLocaleRunCount_INTERNAL_API_DO_NOT_USE
+# define pl_getLocaleRunLastLimit_4_0 pl_getLocaleRunLastLimit_INTERNAL_API_DO_NOT_USE
+# define pl_getLocaleRunLimit_4_0 pl_getLocaleRunLimit_INTERNAL_API_DO_NOT_USE
+# define pl_getLocaleRunLocale_4_0 pl_getLocaleRunLocale_INTERNAL_API_DO_NOT_USE
+# define pl_getParagraphLevel_4_0 pl_getParagraphLevel_INTERNAL_API_DO_NOT_USE
+# define pl_getTextDirection_4_0 pl_getTextDirection_INTERNAL_API_DO_NOT_USE
+# define pl_getValueRunCount_4_0 pl_getValueRunCount_INTERNAL_API_DO_NOT_USE
+# define pl_getValueRunLastLimit_4_0 pl_getValueRunLastLimit_INTERNAL_API_DO_NOT_USE
+# define pl_getValueRunLimit_4_0 pl_getValueRunLimit_INTERNAL_API_DO_NOT_USE
+# define pl_getValueRunValue_4_0 pl_getValueRunValue_INTERNAL_API_DO_NOT_USE
+# define pl_getVisualRunAscent_4_0 pl_getVisualRunAscent_INTERNAL_API_DO_NOT_USE
+# define pl_getVisualRunDescent_4_0 pl_getVisualRunDescent_INTERNAL_API_DO_NOT_USE
+# define pl_getVisualRunDirection_4_0 pl_getVisualRunDirection_INTERNAL_API_DO_NOT_USE
+# define pl_getVisualRunFont_4_0 pl_getVisualRunFont_INTERNAL_API_DO_NOT_USE
+# define pl_getVisualRunGlyphCount_4_0 pl_getVisualRunGlyphCount_INTERNAL_API_DO_NOT_USE
+# define pl_getVisualRunGlyphToCharMap_4_0 pl_getVisualRunGlyphToCharMap_INTERNAL_API_DO_NOT_USE
+# define pl_getVisualRunGlyphs_4_0 pl_getVisualRunGlyphs_INTERNAL_API_DO_NOT_USE
+# define pl_getVisualRunLeading_4_0 pl_getVisualRunLeading_INTERNAL_API_DO_NOT_USE
+# define pl_getVisualRunPositions_4_0 pl_getVisualRunPositions_INTERNAL_API_DO_NOT_USE
+# define pl_isComplex_4_0 pl_isComplex_INTERNAL_API_DO_NOT_USE
+# define pl_line_4_0 pl_line_INTERNAL_API_DO_NOT_USE
+# define pl_nextLine_4_0 pl_nextLine_INTERNAL_API_DO_NOT_USE
+# define pl_openEmptyFontRuns_4_0 pl_openEmptyFontRuns_INTERNAL_API_DO_NOT_USE
+# define pl_openEmptyLocaleRuns_4_0 pl_openEmptyLocaleRuns_INTERNAL_API_DO_NOT_USE
+# define pl_openEmptyValueRuns_4_0 pl_openEmptyValueRuns_INTERNAL_API_DO_NOT_USE
+# define pl_openFontRuns_4_0 pl_openFontRuns_INTERNAL_API_DO_NOT_USE
+# define pl_openLocaleRuns_4_0 pl_openLocaleRuns_INTERNAL_API_DO_NOT_USE
+# define pl_openValueRuns_4_0 pl_openValueRuns_INTERNAL_API_DO_NOT_USE
+# define pl_paragraph_4_0 pl_paragraph_INTERNAL_API_DO_NOT_USE
+# define pl_reflow_4_0 pl_reflow_INTERNAL_API_DO_NOT_USE
+# define pl_resetFontRuns_4_0 pl_resetFontRuns_INTERNAL_API_DO_NOT_USE
+# define pl_resetLocaleRuns_4_0 pl_resetLocaleRuns_INTERNAL_API_DO_NOT_USE
+# define pl_resetValueRuns_4_0 pl_resetValueRuns_INTERNAL_API_DO_NOT_USE
+# define pl_visualRun_4_0 pl_visualRun_INTERNAL_API_DO_NOT_USE
+# define ucol_equals_4_0 ucol_equals_INTERNAL_API_DO_NOT_USE
+# define ucol_forgetUCA_4_0 ucol_forgetUCA_INTERNAL_API_DO_NOT_USE
+# define ucol_getAttributeOrDefault_4_0 ucol_getAttributeOrDefault_INTERNAL_API_DO_NOT_USE
+# define ucol_getUnsafeSet_4_0 ucol_getUnsafeSet_INTERNAL_API_DO_NOT_USE
+# define ucol_nextProcessed_4_0 ucol_nextProcessed_INTERNAL_API_DO_NOT_USE
+# define ucol_prepareShortStringOpen_4_0 ucol_prepareShortStringOpen_INTERNAL_API_DO_NOT_USE
+# define ucol_previousProcessed_4_0 ucol_previousProcessed_INTERNAL_API_DO_NOT_USE
+# define uprv_getDefaultCodepage_4_0 uprv_getDefaultCodepage_INTERNAL_API_DO_NOT_USE
+# define uprv_getDefaultLocaleID_4_0 uprv_getDefaultLocaleID_INTERNAL_API_DO_NOT_USE
+# define ures_openFillIn_4_0 ures_openFillIn_INTERNAL_API_DO_NOT_USE
+# define usearch_searchBackwards_4_0 usearch_searchBackwards_INTERNAL_API_DO_NOT_USE
+# define usearch_search_4_0 usearch_search_INTERNAL_API_DO_NOT_USE
+# define utf8_appendCharSafeBody_4_0 utf8_appendCharSafeBody_INTERNAL_API_DO_NOT_USE
+# define utf8_back1SafeBody_4_0 utf8_back1SafeBody_INTERNAL_API_DO_NOT_USE
+# define utf8_countTrailBytes_4_0 utf8_countTrailBytes_INTERNAL_API_DO_NOT_USE
+# define utf8_nextCharSafeBody_4_0 utf8_nextCharSafeBody_INTERNAL_API_DO_NOT_USE
+# define utf8_prevCharSafeBody_4_0 utf8_prevCharSafeBody_INTERNAL_API_DO_NOT_USE
# endif /* U_DISABLE_RENAMING */
#endif /* U_HIDE_INTERNAL_API */
diff --git a/icuSources/common/unicode/uiter.h b/icuSources/common/unicode/uiter.h
index 42c76677..9409f01e 100644
--- a/icuSources/common/unicode/uiter.h
+++ b/icuSources/common/unicode/uiter.h
@@ -1,7 +1,7 @@
/*
*******************************************************************************
*
-* Copyright (C) 2002-2005, International Business Machines
+* Copyright (C) 2002-2006, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
@@ -673,7 +673,7 @@ uiter_setUTF8(UCharIterator *iter, const char *s, int32_t length);
* @stable ICU 2.1
*/
U_STABLE void U_EXPORT2
-uiter_setCharacterIterator(UCharIterator *iter, CharacterIterator *charIter);
+uiter_setCharacterIterator(UCharIterator *iter, U_NAMESPACE_QUALIFIER CharacterIterator *charIter);
/**
* Set up a UCharIterator to iterate over a C++ Replaceable.
@@ -698,7 +698,7 @@ uiter_setCharacterIterator(UCharIterator *iter, CharacterIterator *charIter);
* @stable ICU 2.1
*/
U_STABLE void U_EXPORT2
-uiter_setReplaceable(UCharIterator *iter, const Replaceable *rep);
+uiter_setReplaceable(UCharIterator *iter, const U_NAMESPACE_QUALIFIER Replaceable *rep);
#endif
diff --git a/icuSources/common/unicode/uloc.h b/icuSources/common/unicode/uloc.h
index 2912f677..29c479a7 100644
--- a/icuSources/common/unicode/uloc.h
+++ b/icuSources/common/unicode/uloc.h
@@ -1,6 +1,6 @@
/*
**********************************************************************
-* Copyright (C) 1997-2007, International Business Machines
+* Copyright (C) 1997-2008, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
*
@@ -855,6 +855,43 @@ uloc_setKeywordValue(const char* keywordName,
char* buffer, int32_t bufferCapacity,
UErrorCode* status);
+/**
+ * enums for the return value for the character and line orientation
+ * functions.
+ * @draft ICU 4.0
+ */
+typedef enum {
+ ULOC_LAYOUT_LTR = 0, /* left-to-right. */
+ ULOC_LAYOUT_RTL = 1, /* right-to-left. */
+ ULOC_LAYOUT_TTB = 2, /* top-to-bottom. */
+ ULOC_LAYOUT_BTT = 3, /* bottom-to-top. */
+ ULOC_LAYOUT_UNKNOWN
+} ULayoutType;
+
+/**
+ * Get the layout character orientation for the specified locale.
+ *
+ * @param localeId locale name
+ * @param status Error status
+ * @return an enum indicating the layout orientation for characters.
+ * @draft ICU 4.0
+ */
+U_DRAFT ULayoutType U_EXPORT2
+uloc_getCharacterOrientation(const char* localeId,
+ UErrorCode *status);
+
+/**
+ * Get the layout line orientation for the specified locale.
+ *
+ * @param localeId locale name
+ * @param status Error status
+ * @return an enum indicating the layout orientation for lines.
+ * @draft ICU 4.0
+ */
+U_DRAFT ULayoutType U_EXPORT2
+uloc_getLineOrientation(const char* localeId,
+ UErrorCode *status);
+
/**
* enums for the 'outResult' parameter return value
* @see uloc_acceptLanguageFromHTTP
@@ -920,12 +957,90 @@ uloc_acceptLanguage(char *result, int32_t resultAvailable,
* @param status an error is returned if the LCID is unrecognized or the output buffer
* is too small
* @return actual the actual size of the locale ID, not including NUL-termination
- * @draft ICU 3.8
+ * @stable ICU 4.0
*/
U_DRAFT int32_t U_EXPORT2
-uloc_getLocaleForLCID(uint32_t hostid, char *locale, int32_t localeCapacity,
+uloc_getLocaleForLCID(uint32_t hostID, char *locale, int32_t localeCapacity,
UErrorCode *status);
-#endif /*_ULOC*/
+/**
+ * Add the likely subtags for a provided locale ID, per the algorithm described
+ * in the following CLDR technical report:
+ *
+ * http://www.unicode.org/reports/tr35/#Likely_Subtags
+ *
+ * If localeID is already in the maximal form, or there is no data available
+ * for maximization, it will be copied to the output buffer. For example,
+ * "und-Zzzz" cannot be maximized, since there is no reasonable maximization.
+ *
+ * Examples:
+ *
+ * "en" maximizes to "en_Latn_US"
+ *
+ * "de" maximizes to "de_Latn_US"
+ *
+ * "sr" maximizes to "sr_Cyrl_RS"
+ *
+ * "sh" maximizes to "sr_Latn_RS" (Note this will not reverse.)
+ *
+ * "zh_Hani" maximizes to "zh_Hans_CN" (Note this will not reverse.)
+ *
+ * @param localeID The locale to maximize
+ * @param maximizedLocaleID The maximized locale
+ * @param maximizedLocaleIDCapacity The capacity of the maximizedLocaleID buffer
+ * @param err Error information if maximizing the locale failed. If the length
+ * of the localeID and the null-terminator is greater than the maximum allowed size,
+ * or the localeId is not well-formed, the error code is U_ILLEGAL_ARGUMENT_ERROR.
+ * @return The actual buffer size needed for the maximized locale. If it's
+ * greater than maximizedLocaleIDCapacity, the returned ID will be truncated.
+ * On error, the return value is -1.
+ * @draft ICU 4.0
+ */
+U_DRAFT int32_t U_EXPORT2
+uloc_addLikelySubtags(const char* localeID,
+ char* maximizedLocaleID,
+ int32_t maximizedLocaleIDCapacity,
+ UErrorCode* err);
+
+
+/**
+ * Minimize the subtags for a provided locale ID, per the algorithm described
+ * in the following CLDR technical report:
+ *
+ * http://www.unicode.org/reports/tr35/#Likely_Subtags
+ *
+ * If localeID is already in the minimal form, or there is no data available
+ * for minimization, it will be copied to the output buffer. Since the
+ * minimization algorithm relies on proper maximization, see the comments
+ * for uloc_addLikelySubtags for reasons why there might not be any data.
+ *
+ * Examples:
+ *
+ * "en_Latn_US" minimizes to "en"
+ *
+ * "de_Latn_US" minimizes to "de"
+ *
+ * "sr_Cyrl_RS" minimizes to "sr"
+ *
+ * "zh_Hant_TW" minimizes to "zh_TW" (The region is preferred to the
+ * script, and minimizing to "zh" would imply "zh_Hans_CN".)
+ *
+ * @param localeID The locale to minimize
+ * @param minimizedLocaleID The minimized locale
+ * @param minimizedLocaleIDCapacity The capacity of the minimizedLocaleID buffer
+ * @param err Error information if minimizing the locale failed. If the length
+ * of the localeID and the null-terminator is greater than the maximum allowed size,
+ * or the localeId is not well-formed, the error code is U_ILLEGAL_ARGUMENT_ERROR.
+ * @return The actual buffer size needed for the minimized locale. If it's
+ * greater than minimizedLocaleIDCapacity, the returned ID will be truncated.
+ * On error, the return value is -1.
+ * @draft ICU 4.0
+ */
+U_DRAFT int32_t U_EXPORT2
+uloc_minimizeSubtags(const char* localeID,
+ char* minimizedLocaleID,
+ int32_t minimizedLocaleIDCapacity,
+ UErrorCode* err);
+#endif /*_ULOC*/
diff --git a/icuSources/common/unicode/umachine.h b/icuSources/common/unicode/umachine.h
index 60419cda..083f9cf0 100644
--- a/icuSources/common/unicode/umachine.h
+++ b/icuSources/common/unicode/umachine.h
@@ -102,49 +102,6 @@
# define U_CDECL_END
#endif
-/**
- * \def U_NAMESPACE_BEGIN
- * This is used to begin a declaration of a public ICU C++ API.
- * If the compiler doesn't support namespaces, this does nothing.
- * @stable ICU 2.4
- */
-
-/**
- * \def U_NAMESPACE_END
- * This is used to end a declaration of a public ICU C++ API
- * If the compiler doesn't support namespaces, this does nothing.
- * @stable ICU 2.4
- */
-
-/**
- * \def U_NAMESPACE_USE
- * This is used to specify that the rest of the code uses the
- * public ICU C++ API namespace.
- * If the compiler doesn't support namespaces, this does nothing.
- * @stable ICU 2.4
- */
-
-/**
- * \def U_NAMESPACE_QUALIFIER
- * This is used to qualify that a function or class is part of
- * the public ICU C++ API namespace.
- * If the compiler doesn't support namespaces, this does nothing.
- * @stable ICU 2.4
- */
-
-/* Define namespace symbols if the compiler supports it. */
-#if U_HAVE_NAMESPACE
-# define U_NAMESPACE_BEGIN namespace U_ICU_NAMESPACE {
-# define U_NAMESPACE_END }
-# define U_NAMESPACE_USE using namespace U_ICU_NAMESPACE;
-# define U_NAMESPACE_QUALIFIER U_ICU_NAMESPACE::
-#else
-# define U_NAMESPACE_BEGIN
-# define U_NAMESPACE_END
-# define U_NAMESPACE_USE
-# define U_NAMESPACE_QUALIFIER
-#endif
-
/** This is used to declare a function as a public ICU C API @stable ICU 2.0*/
#define U_CAPI U_CFUNC U_EXPORT
#define U_STABLE U_CAPI
diff --git a/icuSources/common/unicode/uniset.h b/icuSources/common/unicode/uniset.h
index 1e48aa83..78396619 100644
--- a/icuSources/common/unicode/uniset.h
+++ b/icuSources/common/unicode/uniset.h
@@ -1,6 +1,6 @@
/*
***************************************************************************
-* Copyright (C) 1999-2006, International Business Machines Corporation
+* Copyright (C) 1999-2008, International Business Machines Corporation
* and others. All Rights Reserved.
***************************************************************************
* Date Name Description
@@ -16,14 +16,16 @@
#include "unicode/uset.h"
/**
- * \file
+ * \file
* \brief C++ API: Unicode Set
*/
-
+
U_NAMESPACE_BEGIN
+class BMPSet;
class ParsePosition;
class SymbolTable;
+class UnicodeSetStringSpan;
class UVector;
class RuleCharacterIterator;
@@ -113,8 +115,8 @@ class RuleCharacterIterator;
* "[:Lu:]" and the Perl-like syntax "\\p{Lu}" are recognized. For a
* complete list of supported property patterns, see the User's Guide
* for UnicodeSet at
- *
- * http://icu.sourceforge.net/userguide/unicodeSet.html.
+ *
+ * http://icu-project.org/userguide/unicodeSet.html.
* Actual determination of property data is defined by the underlying
* Unicode database as implemented by UCharacter.
*
@@ -254,6 +256,15 @@ class RuleCharacterIterator;
*
*
* \htmlonly\endhtmlonly
+ *
+ *
Note:
+ * - Most UnicodeSet methods do not take a UErrorCode parameter because
+ * there are usually very few opportunities for failure other than a shortage
+ * of memory, error codes in low-level C++ string methods would be inconvenient,
+ * and the error code as the last parameter (ICU convention) would prevent
+ * the use of default parameter values.
+ * Instead, such methods set the UnicodeSet into a "bogus" state
+ * (see isBogus()) if an error occurs.
*
* @author Alan Liu
* @stable ICU 2.0
@@ -262,11 +273,11 @@ class U_COMMON_API UnicodeSet : public UnicodeFilter {
int32_t len; // length of list used; 0 <= len <= capacity
int32_t capacity; // capacity of list
- int32_t bufferCapacity; // capacity of buffer
UChar32* list; // MUST be terminated with HIGH
+ BMPSet *bmpSet; // The set is frozen iff either bmpSet or stringSpan is not NULL.
UChar32* buffer; // internal buffer, may be NULL
-
- UVector* strings; // maintained in sorted order
+ int32_t bufferCapacity; // capacity of buffer
+ int32_t patLen;
/**
* The pattern representation of this set. This may not be the
@@ -277,7 +288,44 @@ class U_COMMON_API UnicodeSet : public UnicodeFilter {
* indicating that toPattern() must generate a pattern
* representation from the inversion list.
*/
- UnicodeString pat;
+ UChar *pat;
+ UVector* strings; // maintained in sorted order
+ UnicodeSetStringSpan *stringSpan;
+
+private:
+ enum { // constants
+ kIsBogus = 1 // This set is bogus (i.e. not valid)
+ };
+ uint8_t fFlags; // Bit flag (see constants above)
+public:
+ /**
+ * Determine if this object contains a valid set.
+ * A bogus set has no value. It is different from an empty set.
+ * It can be used to indicate that no set value is available.
+ *
+ * @return TRUE if the set is valid, FALSE otherwise
+ * @see setToBogus()
+ * @draft ICU 4.0
+ */
+ inline UBool isBogus(void) const;
+
+ /**
+ * Make this UnicodeSet object invalid.
+ * The string will test TRUE with isBogus().
+ *
+ * A bogus set has no value. It is different from an empty set.
+ * It can be used to indicate that no set value is available.
+ *
+ * This utility function is used throughout the UnicodeSet
+ * implementation to indicate that a UnicodeSet operation failed,
+ * and may be used in other functions,
+ * especially but not exclusively when such functions do not
+ * take a UErrorCode for simplicity.
+ *
+ * @see isBogus()
+ * @draft ICU 4.0
+ */
+ void setToBogus();
public:
@@ -377,6 +425,7 @@ public:
/**
* Assigns this object to be a copy of another.
+ * A frozen set will not be modified.
* @stable ICU 2.0
*/
UnicodeSet& operator=(const UnicodeSet& o);
@@ -405,6 +454,9 @@ public:
* Returns a copy of this object. All UnicodeFunctor objects have
* to support cloning in order to allow classes using
* UnicodeFunctors, such as Transliterator, to implement cloning.
+ * If this set is frozen, then the clone will be frozen as well.
+ * Use cloneAsThawed() for a mutable clone of a frozen set.
+ * @see cloneAsThawed
* @stable ICU 2.0
*/
virtual UnicodeFunctor* clone() const;
@@ -418,6 +470,45 @@ public:
*/
virtual int32_t hashCode(void) const;
+ //----------------------------------------------------------------
+ // Freezable API
+ //----------------------------------------------------------------
+
+ /**
+ * Determines whether the set has been frozen (made immutable) or not.
+ * See the ICU4J Freezable interface for details.
+ * @return TRUE/FALSE for whether the set has been frozen
+ * @see freeze
+ * @see cloneAsThawed
+ * @stable ICU 4.0
+ */
+ inline UBool isFrozen() const;
+
+ /**
+ * Freeze the set (make it immutable).
+ * Once frozen, it cannot be unfrozen and is therefore thread-safe
+ * until it is deleted.
+ * See the ICU4J Freezable interface for details.
+ * Freezing the set may also make some operations faster, for example
+ * contains() and span().
+ * A frozen set will not be modified. (It remains frozen.)
+ * @return this set.
+ * @see isFrozen
+ * @see cloneAsThawed
+ * @stable ICU 4.0
+ */
+ UnicodeFunctor *freeze();
+
+ /**
+ * Clone the set and make the clone mutable.
+ * See the ICU4J Freezable interface for details.
+ * @return the mutable clone
+ * @see freeze
+ * @see isFrozen
+ * @stable ICU 4.0
+ */
+ UnicodeFunctor *cloneAsThawed() const;
+
//----------------------------------------------------------------
// Public API
//----------------------------------------------------------------
@@ -426,6 +517,7 @@ public:
* Make this object represent the range start - end.
* If end > start then this object is set to an
* an empty range.
+ * A frozen set will not be modified.
*
* @param start first character in the set, inclusive
* @param end last character in the set, inclusive
@@ -445,6 +537,7 @@ public:
* Modifies this set to represent the set specified by the given
* pattern, optionally ignoring white space. See the class
* description for the syntax of the pattern language.
+ * A frozen set will not be modified.
* @param pattern a string specifying what characters are in the set
* @param status returns U_ILLEGAL_ARGUMENT_ERROR if the pattern
* contains a syntax error.
@@ -459,6 +552,7 @@ public:
* Modifies this set to represent the set specified by the given
* pattern, optionally ignoring white space. See the class
* description for the syntax of the pattern language.
+ * A frozen set will not be modified.
* @param pattern a string specifying what characters are in the set
* @param options bitmask for options to apply to the pattern.
* Valid options are USET_IGNORE_SPACE and USET_CASE_INSENSITIVE.
@@ -486,6 +580,7 @@ public:
* pairs list for the parsed pattern is returned. This method calls
* itself recursively to parse embedded subpatterns.
* Empties the set passed before applying the pattern.
+ * A frozen set will not be modified.
*
* @param pattern the string containing the pattern to be parsed.
* The portion of the string from pos.getIndex(), which must be a
@@ -515,6 +610,7 @@ public:
* Returns a string representation of this set. If the result of
* calling this function is passed to a UnicodeSet constructor, it
* will produce another set that is equal to this one.
+ * A frozen set will not be modified.
* @param result the string to receive the rules. Previous
* contents will be deleted.
* @param escapeUnprintable if TRUE then convert unprintable
@@ -530,6 +626,7 @@ public:
* Modifies this set to contain those code points which have the given value
* for the given binary or enumerated property, as returned by
* u_getIntPropertyValue. Prior contents of this set are lost.
+ * A frozen set will not be modified.
*
* @param prop a property in the range UCHAR_BIN_START..UCHAR_BIN_LIMIT-1
* or UCHAR_INT_START..UCHAR_INT_LIMIT-1
@@ -555,6 +652,7 @@ public:
* Modifies this set to contain those code points which have the
* given value for the given property. Prior contents of this
* set are lost.
+ * A frozen set will not be modified.
*
* @param prop a property alias, either short or long. The name is matched
* loosely. See PropertyAliases.txt for names and a description of loose
@@ -603,6 +701,7 @@ public:
/**
* Returns true if this set contains the given character.
+ * This function works faster with a frozen set.
* @param c character to be checked for containment
* @return true if the test condition is met
* @stable ICU 2.0
@@ -702,6 +801,84 @@ public:
*/
inline UBool containsSome(const UnicodeString& s) const;
+ /**
+ * Returns the length of the initial substring of the input string which
+ * consists only of characters and strings that are contained in this set
+ * (USET_SPAN_CONTAINED, USET_SPAN_SIMPLE),
+ * or only of characters and strings that are not contained
+ * in this set (USET_SPAN_NOT_CONTAINED).
+ * See USetSpanCondition for details.
+ * Similar to the strspn() C library function.
+ * Unpaired surrogates are treated according to contains() of their surrogate code points.
+ * This function works faster with a frozen set and with a non-negative string length argument.
+ * @param s start of the string
+ * @param length of the string; can be -1 for NUL-terminated
+ * @param spanCondition specifies the containment condition
+ * @return the length of the initial substring according to the spanCondition;
+ * 0 if the start of the string does not fit the spanCondition
+ * @stable ICU 4.0
+ * @see USetSpanCondition
+ */
+ int32_t span(const UChar *s, int32_t length, USetSpanCondition spanCondition) const;
+
+ /**
+ * Returns the start of the trailing substring of the input string which
+ * consists only of characters and strings that are contained in this set
+ * (USET_SPAN_CONTAINED, USET_SPAN_SIMPLE),
+ * or only of characters and strings that are not contained
+ * in this set (USET_SPAN_NOT_CONTAINED).
+ * See USetSpanCondition for details.
+ * Unpaired surrogates are treated according to contains() of their surrogate code points.
+ * This function works faster with a frozen set and with a non-negative string length argument.
+ * @param s start of the string
+ * @param length of the string; can be -1 for NUL-terminated
+ * @param spanCondition specifies the containment condition
+ * @return the start of the trailing substring according to the spanCondition;
+ * the string length if the end of the string does not fit the spanCondition
+ * @stable ICU 4.0
+ * @see USetSpanCondition
+ */
+ int32_t spanBack(const UChar *s, int32_t length, USetSpanCondition spanCondition) const;
+
+ /**
+ * Returns the length of the initial substring of the input string which
+ * consists only of characters and strings that are contained in this set
+ * (USET_SPAN_CONTAINED, USET_SPAN_SIMPLE),
+ * or only of characters and strings that are not contained
+ * in this set (USET_SPAN_NOT_CONTAINED).
+ * See USetSpanCondition for details.
+ * Similar to the strspn() C library function.
+ * Malformed byte sequences are treated according to contains(0xfffd).
+ * This function works faster with a frozen set and with a non-negative string length argument.
+ * @param s start of the string (UTF-8)
+ * @param length of the string; can be -1 for NUL-terminated
+ * @param spanCondition specifies the containment condition
+ * @return the length of the initial substring according to the spanCondition;
+ * 0 if the start of the string does not fit the spanCondition
+ * @stable ICU 4.0
+ * @see USetSpanCondition
+ */
+ int32_t spanUTF8(const char *s, int32_t length, USetSpanCondition spanCondition) const;
+
+ /**
+ * Returns the start of the trailing substring of the input string which
+ * consists only of characters and strings that are contained in this set
+ * (USET_SPAN_CONTAINED, USET_SPAN_SIMPLE),
+ * or only of characters and strings that are not contained
+ * in this set (USET_SPAN_NOT_CONTAINED).
+ * See USetSpanCondition for details.
+ * Malformed byte sequences are treated according to contains(0xfffd).
+ * This function works faster with a frozen set and with a non-negative string length argument.
+ * @param s start of the string (UTF-8)
+ * @param length of the string; can be -1 for NUL-terminated
+ * @param spanCondition specifies the containment condition
+ * @return the start of the trailing substring according to the spanCondition;
+ * the string length if the end of the string does not fit the spanCondition
+ * @stable ICU 4.0
+ * @see USetSpanCondition
+ */
+ int32_t spanBackUTF8(const char *s, int32_t length, USetSpanCondition spanCondition) const;
+
/**
* Implement UnicodeMatcher::matches()
* @stable ICU 2.4
@@ -786,6 +963,7 @@ public:
* the call leaves this set unchanged. If end > start
* then an empty range is added, leaving the set unchanged.
* This is equivalent to a boolean logic OR, or a set UNION.
+ * A frozen set will not be modified.
*
* @param start first character, inclusive, of range to be added
* to this set.
@@ -799,6 +977,7 @@ public:
* Adds the specified character to this set if it is not already
* present. If this set already contains the specified character,
* the call leaves this set unchanged.
+ * A frozen set will not be modified.
* @stable ICU 2.0
*/
UnicodeSet& add(UChar32 c);
@@ -809,6 +988,7 @@ public:
* the call leaves this set unchanged.
* Thus "ch" => {"ch"}
* Warning: you cannot add an empty string ("") to a UnicodeSet.
+ * A frozen set will not be modified.
* @param s the source string
* @return this object, for chaining
* @stable ICU 2.4
@@ -829,6 +1009,7 @@ public:
/**
* Adds each of the characters in this string to the set. Thus "ch" => {"c", "h"}
* If this set already any particular character, it has no effect on that character.
+ * A frozen set will not be modified.
* @param s the source string
* @return this object, for chaining
* @stable ICU 2.4
@@ -838,6 +1019,7 @@ public:
/**
* Retains EACH of the characters in this string. Note: "ch" == {"c", "h"}
* If this set already any particular character, it has no effect on that character.
+ * A frozen set will not be modified.
* @param s the source string
* @return this object, for chaining
* @stable ICU 2.4
@@ -847,6 +1029,7 @@ public:
/**
* Complement EACH of the characters in this string. Note: "ch" == {"c", "h"}
* If this set already any particular character, it has no effect on that character.
+ * A frozen set will not be modified.
* @param s the source string
* @return this object, for chaining
* @stable ICU 2.4
@@ -856,6 +1039,7 @@ public:
/**
* Remove EACH of the characters in this string. Note: "ch" == {"c", "h"}
* If this set already any particular character, it has no effect on that character.
+ * A frozen set will not be modified.
* @param s the source string
* @return this object, for chaining
* @stable ICU 2.4
@@ -887,6 +1071,7 @@ public:
* specified range. If end > start then an empty range is
* retained, leaving the set empty. This is equivalent to
* a boolean logic AND, or a set INTERSECTION.
+ * A frozen set will not be modified.
*
* @param start first character, inclusive, of range to be retained
* to this set.
@@ -899,6 +1084,7 @@ public:
/**
* Retain the specified character from this set if it is present.
+ * A frozen set will not be modified.
* @stable ICU 2.0
*/
UnicodeSet& retain(UChar32 c);
@@ -908,6 +1094,7 @@ public:
* The set will not contain the specified range once the call
* returns. If end > start then an empty range is
* removed, leaving the set unchanged.
+ * A frozen set will not be modified.
*
* @param start first character, inclusive, of range to be removed
* from this set.
@@ -921,6 +1108,7 @@ public:
* Removes the specified character from this set if it is present.
* The set will not contain the specified range once the call
* returns.
+ * A frozen set will not be modified.
* @stable ICU 2.0
*/
UnicodeSet& remove(UChar32 c);
@@ -929,6 +1117,7 @@ public:
* Removes the specified string from this set if it is present.
* The set will not contain the specified character once the call
* returns.
+ * A frozen set will not be modified.
* @param s the source string
* @return this object, for chaining
* @stable ICU 2.4
@@ -939,6 +1128,7 @@ public:
* Inverts this set. This operation modifies this set so that
* its value is its complement. This is equivalent to
* complement(MIN_VALUE, MAX_VALUE).
+ * A frozen set will not be modified.
* @stable ICU 2.0
*/
virtual UnicodeSet& complement(void);
@@ -949,6 +1139,7 @@ public:
* added if it is not in this set. If end > start
* then an empty range is complemented, leaving the set unchanged.
* This is equivalent to a boolean logic XOR.
+ * A frozen set will not be modified.
*
* @param start first character, inclusive, of range to be removed
* from this set.
@@ -962,6 +1153,7 @@ public:
* Complements the specified character in this set. The character
* will be removed if it is in this set, or will be added if it is
* not in this set.
+ * A frozen set will not be modified.
* @stable ICU 2.0
*/
UnicodeSet& complement(UChar32 c);
@@ -971,6 +1163,7 @@ public:
* The set will not contain the specified string once the call
* returns.
* Warning: you cannot add an empty string ("") to a UnicodeSet.
+ * A frozen set will not be modified.
* @param s the string to complement
* @return this object, for chaining
* @stable ICU 2.4
@@ -983,9 +1176,10 @@ public:
* modifies this set so that its value is the union of the two
* sets. The behavior of this operation is unspecified if the specified
* collection is modified while the operation is in progress.
+ * A frozen set will not be modified.
*
* @param c set whose elements are to be added to this set.
- * @see #add(char, char)
+ * @see #add(UChar32, UChar32)
* @stable ICU 2.0
*/
virtual UnicodeSet& addAll(const UnicodeSet& c);
@@ -996,6 +1190,7 @@ public:
* its elements that are not contained in the specified set. This
* operation effectively modifies this set so that its value is
* the intersection of the two sets.
+ * A frozen set will not be modified.
*
* @param c set that defines which elements this set will retain.
* @stable ICU 2.0
@@ -1007,6 +1202,7 @@ public:
* specified set. This operation effectively modifies this
* set so that its value is the asymmetric set difference of
* the two sets.
+ * A frozen set will not be modified.
*
* @param c set that defines which elements will be removed from
* this set.
@@ -1018,6 +1214,7 @@ public:
* Complements in this set all elements contained in the specified
* set. Any character in the other set will be removed if it is
* in this set, or will be added if it is not in this set.
+ * A frozen set will not be modified.
*
* @param c set that defines which elements will be xor'ed from
* this set.
@@ -1028,6 +1225,7 @@ public:
/**
* Removes all of the elements from this set. This set will be
* empty after this call returns.
+ * A frozen set will not be modified.
* @stable ICU 2.0
*/
virtual UnicodeSet& clear(void);
@@ -1049,6 +1247,8 @@ public:
* == b denotes that the contents are the same, not pointer
* comparison.)
*
+ * A frozen set will not be modified.
+ *
* @param attribute bitmask for attributes to close over.
* Currently only the USET_CASE bit is supported. Any undefined bits
* are ignored.
@@ -1057,6 +1257,14 @@ public:
*/
UnicodeSet& closeOver(int32_t attribute);
+ /**
+ * Remove all strings from this set.
+ *
+ * @return a reference to this set.
+ * @internal
+ */
+ virtual UnicodeSet &removeAllStrings();
+
/**
* Iteration method that returns the number of ranges contained in
* this set.
@@ -1137,6 +1345,7 @@ public:
/**
* Reallocate this objects internal structures to take up the least
* possible space, without changing this object's value.
+ * A frozen set will not be modified.
* @stable ICU 2.4
*/
virtual UnicodeSet& compact();
@@ -1189,6 +1398,12 @@ private:
private:
+ //----------------------------------------------------------------
+ // Implementation: Clone as thawed (see ICU4J Freezable)
+ //----------------------------------------------------------------
+
+ UnicodeSet(const UnicodeSet& o, UBool /* asThawed */);
+
//----------------------------------------------------------------
// Implementation: Pattern parsing
//----------------------------------------------------------------
@@ -1203,13 +1418,13 @@ private:
// Implementation: Utility methods
//----------------------------------------------------------------
- void ensureCapacity(int32_t newLen);
+ void ensureCapacity(int32_t newLen, UErrorCode& ec);
- void ensureBufferCapacity(int32_t newLen);
+ void ensureBufferCapacity(int32_t newLen, UErrorCode& ec);
void swapBuffers(void);
- UBool allocateStrings();
+ UBool allocateStrings(UErrorCode &status);
UnicodeString& _toPattern(UnicodeString& result,
UBool escapeUnprintable) const;
@@ -1248,7 +1463,7 @@ private:
*
* The original design document is out of date, but still useful.
* Ignore the property and value names:
- * http://dev.icu-project.org/cgi-bin/viewcvs.cgi/~checkout~/icuhtml/design/unicodeset_properties.html
+ * http://source.icu-project.org/repos/icu/icuhtml/trunk/design/unicodeset_properties.html
*
* Recognized syntax:
*
@@ -1288,6 +1503,8 @@ private:
UnicodeString& rebuiltPat,
UErrorCode& ec);
+ static const UnicodeSet* getInclusions(int32_t src, UErrorCode &status);
+
/**
* A filter that returns TRUE if the given code point should be
* included in the UnicodeSet being constructed.
@@ -1309,9 +1526,13 @@ private:
UErrorCode &status);
/**
- * Return a cached copy of the inclusions list for the property source.
+ * Set the new pattern to cache.
*/
- static const UnicodeSet* getInclusions(int32_t src, UErrorCode &errorCode);
+ void setPattern(const UnicodeString& newPat);
+ /**
+ * Release existing cached pattern.
+ */
+ void releasePattern();
friend class UnicodeSetIterator;
};
@@ -1320,6 +1541,10 @@ inline UBool UnicodeSet::operator!=(const UnicodeSet& o) const {
return !operator==(o);
}
+inline UBool UnicodeSet::isFrozen() const {
+ return (UBool)(bmpSet!=NULL || stringSpan!=NULL);
+}
+
inline UBool UnicodeSet::containsSome(UChar32 start, UChar32 end) const {
return !containsNone(start, end);
}
@@ -1332,6 +1557,10 @@ inline UBool UnicodeSet::containsSome(const UnicodeString& s) const {
return !containsNone(s);
}
+inline UBool UnicodeSet::isBogus() const {
+ return (UBool)(fFlags & kIsBogus);
+}
+
U_NAMESPACE_END
#endif
diff --git a/icuSources/common/unicode/unistr.h b/icuSources/common/unicode/unistr.h
index fe1722bd..9a96bdc2 100644
--- a/icuSources/common/unicode/unistr.h
+++ b/icuSources/common/unicode/unistr.h
@@ -1,6 +1,6 @@
/*
**********************************************************************
-* Copyright (C) 1998-2006, International Business Machines
+* Copyright (C) 1998-2008, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
*
@@ -67,7 +67,7 @@ class BreakIterator; // unicode/brkiter.h
*
* @stable ICU 3.2
*/
-#define US_INV UnicodeString::kInvariant
+#define US_INV U_NAMESPACE_QUALIFIER UnicodeString::kInvariant
/**
* Unicode String literals in C++.
@@ -86,12 +86,14 @@ class BreakIterator; // unicode/brkiter.h
* such string variable before it is used.
* @stable ICU 2.0
*/
-#if U_SIZEOF_WCHAR_T==U_SIZEOF_UCHAR && (U_CHARSET_FAMILY==U_ASCII_FAMILY || (U_SIZEOF_UCHAR == 2 && defined(U_WCHAR_IS_UTF16)))
-# define UNICODE_STRING(cs, _length) UnicodeString(TRUE, (const UChar *)L ## cs, _length)
+#if defined(U_DECLARE_UTF16)
+# define UNICODE_STRING(cs, _length) U_NAMESPACE_QUALIFIER UnicodeString(TRUE, (const UChar *)U_DECLARE_UTF16(cs), _length)
+#elif U_SIZEOF_WCHAR_T==U_SIZEOF_UCHAR && (U_CHARSET_FAMILY==U_ASCII_FAMILY || (U_SIZEOF_UCHAR == 2 && defined(U_WCHAR_IS_UTF16)))
+# define UNICODE_STRING(cs, _length) U_NAMESPACE_QUALIFIER UnicodeString(TRUE, (const UChar *)L ## cs, _length)
#elif U_SIZEOF_UCHAR==1 && U_CHARSET_FAMILY==U_ASCII_FAMILY
-# define UNICODE_STRING(cs, _length) UnicodeString(TRUE, (const UChar *)cs, _length)
+# define UNICODE_STRING(cs, _length) U_NAMESPACE_QUALIFIER UnicodeString(TRUE, (const UChar *)cs, _length)
#else
-# define UNICODE_STRING(cs, _length) UnicodeString(cs, _length, US_INV)
+# define UNICODE_STRING(cs, _length) U_NAMESPACE_QUALIFIER UnicodeString(cs, _length, US_INV)
#endif
/**
@@ -107,13 +109,7 @@ class BreakIterator; // unicode/brkiter.h
* The string parameter must be a C string literal.
* @stable ICU 2.0
*/
-#if U_SIZEOF_WCHAR_T==U_SIZEOF_UCHAR && (U_CHARSET_FAMILY==U_ASCII_FAMILY || (U_SIZEOF_UCHAR == 2 && defined(U_WCHAR_IS_UTF16)))
-# define UNICODE_STRING_SIMPLE(cs) UnicodeString(TRUE, (const UChar *)L ## cs, -1)
-#elif U_SIZEOF_UCHAR==1 && U_CHARSET_FAMILY==U_ASCII_FAMILY
-# define UNICODE_STRING_SIMPLE(cs) UnicodeString(TRUE, (const UChar *)cs, -1)
-#else
-# define UNICODE_STRING_SIMPLE(cs) UnicodeString(cs, -1, US_INV)
-#endif
+#define UNICODE_STRING_SIMPLE(cs) UNICODE_STRING(cs, -1)
/**
* UnicodeString is a string class that stores Unicode characters directly and provides
@@ -123,7 +119,7 @@ class BreakIterator; // unicode/brkiter.h
* The UnicodeString class is not suitable for subclassing.
*
*
In ICU, a Unicode string consists of 16-bit Unicode code units.
* A Unicode character may be stored with either one code unit
@@ -178,7 +174,7 @@ class BreakIterator; // unicode/brkiter.h
* significant performance improvements.
* Also, the internal buffer is accessible via special functions.
* For details see the
- * User Guide Strings chapter.
+ * User Guide Strings chapter.
*
* @see utf.h
* @see CharacterIterator
@@ -399,7 +395,7 @@ public:
/**
* Compare two Unicode strings in code point order.
- * This is different in UTF-16 from how compare(), operator==, startsWith() etc. work
+ * The result may be different from the results of compare(), operator<, etc.
* if supplementary characters are present:
*
* In UTF-16, supplementary characters (with code points U+10000 and above) are
@@ -418,7 +414,7 @@ public:
/**
* Compare two Unicode strings in code point order.
- * This is different in UTF-16 from how compare(), operator==, startsWith() etc. work
+ * The result may be different from the results of compare(), operator<, etc.
* if supplementary characters are present:
*
* In UTF-16, supplementary characters (with code points U+10000 and above) are
@@ -441,7 +437,7 @@ public:
/**
* Compare two Unicode strings in code point order.
- * This is different in UTF-16 from how compare(), operator==, startsWith() etc. work
+ * The result may be different from the results of compare(), operator<, etc.
* if supplementary characters are present:
*
* In UTF-16, supplementary characters (with code points U+10000 and above) are
@@ -468,7 +464,7 @@ public:
/**
* Compare two Unicode strings in code point order.
- * This is different in UTF-16 from how compare(), operator==, startsWith() etc. work
+ * The result may be different from the results of compare(), operator<, etc.
* if supplementary characters are present:
*
* In UTF-16, supplementary characters (with code points U+10000 and above) are
@@ -489,7 +485,7 @@ public:
/**
* Compare two Unicode strings in code point order.
- * This is different in UTF-16 from how compare(), operator==, startsWith() etc. work
+ * The result may be different from the results of compare(), operator<, etc.
* if supplementary characters are present:
*
* In UTF-16, supplementary characters (with code points U+10000 and above) are
@@ -512,7 +508,7 @@ public:
/**
* Compare two Unicode strings in code point order.
- * This is different in UTF-16 from how compare(), operator==, startsWith() etc. work
+ * The result may be different from the results of compare(), operator<, etc.
* if supplementary characters are present:
*
* In UTF-16, supplementary characters (with code points U+10000 and above) are
@@ -539,7 +535,7 @@ public:
/**
* Compare two Unicode strings in code point order.
- * This is different in UTF-16 from how compare(), operator==, startsWith() etc. work
+ * The result may be different from the results of compare(), operator<, etc.
* if supplementary characters are present:
*
* In UTF-16, supplementary characters (with code points U+10000 and above) are
@@ -2434,7 +2430,7 @@ public:
* The standard titlecase iterator for the root locale implements the
* algorithm of Unicode TR 21.
*
- * This function uses only the first() and next() methods of the
+ * This function uses only the setText(), first() and next() methods of the
* provided break iterator.
*
* @param titleIter A break iterator to find the first characters of words
@@ -2462,7 +2458,7 @@ public:
* The standard titlecase iterator for the root locale implements the
* algorithm of Unicode TR 21.
*
- * This function uses only the first() and next() methods of the
+ * This function uses only the setText(), first() and next() methods of the
* provided break iterator.
*
* @param titleIter A break iterator to find the first characters of words
@@ -2476,6 +2472,39 @@ public:
*/
UnicodeString &toTitle(BreakIterator *titleIter, const Locale &locale);
+ /**
+ * Titlecase this string, with options.
+ *
+ * Casing is locale-dependent and context-sensitive.
+ * Titlecasing uses a break iterator to find the first characters of words
+ * that are to be titlecased. It titlecases those characters and lowercases
+ * all others. (This can be modified with options.)
+ *
+ * The titlecase break iterator can be provided to customize for arbitrary
+ * styles, using rules and dictionaries beyond the standard iterators.
+ * It may be more efficient to always provide an iterator to avoid
+ * opening and closing one for each string.
+ * The standard titlecase iterator for the root locale implements the
+ * algorithm of Unicode TR 21.
+ *
+ * This function uses only the setText(), first() and next() methods of the
+ * provided break iterator.
+ *
+ * @param titleIter A break iterator to find the first characters of words
+ * that are to be titlecased.
+ * If none is provided (0), then a standard titlecase
+ * break iterator is opened.
+ * Otherwise the provided iterator is set to the string's text.
+ * @param locale The locale to consider.
+ * @param options Options bit set, see ucasemap_open().
+ * @return A reference to this.
+ * @see U_TITLECASE_NO_LOWERCASE
+ * @see U_TITLECASE_NO_BREAK_ADJUSTMENT
+ * @see ucasemap_open
+ * @stable ICU 4.0
+ */
+ UnicodeString &toTitle(BreakIterator *titleIter, const Locale &locale, uint32_t options);
+
#endif
/**
@@ -3060,9 +3089,23 @@ private:
int32_t doHashCode(void) const;
// get pointer to start of array
+ // these do not check for kOpenGetBuffer, unlike the public getBuffer() function
inline UChar* getArrayStart(void);
inline const UChar* getArrayStart(void) const;
+ // A UnicodeString object (not necessarily its current buffer)
+ // is writable unless it isBogus() or it has an "open" getBuffer(minCapacity).
+ inline UBool isWritable() const;
+
+ // Is the current buffer writable?
+ inline UBool isBufferWritable() const;
+
+ // None of the following does releaseArray().
+ inline void setLength(int32_t len); // sets only fShortLength and fLength
+ inline void setToEmpty(); // sets fFlags=kShortString
+ inline void setToStackBuffer(int32_t len); // sets fFlags=kShortString
+ inline void setArray(UChar *array, int32_t len, int32_t capacity); // does not set fFlags
+
// allocate the array; result may be fStackBuffer
// sets refCount to 1 if appropriate
// sets fArray, fCapacity, and fFlags
@@ -3148,7 +3191,10 @@ private:
// constants
enum {
- US_STACKBUF_SIZE=7, // Size of stack buffer for small strings
+ // Set the stack buffer size so that sizeof(UnicodeString) is a multiple of sizeof(pointer):
+ // 32-bit pointers: 4+1+1+13*2 = 32 bytes
+ // 64-bit pointers: 8+1+1+15*2 = 40 bytes
+ US_STACKBUF_SIZE= sizeof(void *)==4 ? 13 : 15, // Size of stack buffer for small strings
kInvalidUChar=0xffff, // invalid UChar index
kGrowSize=128, // grow size for this buffer
kInvalidHashCode=0, // invalid hash code
@@ -3169,9 +3215,11 @@ private:
kWritableAlias=0
};
- friend class StringCharacterIterator;
friend class StringThreadTest;
+ union StackBufferOrFields; // forward declaration necessary before friend declaration
+ friend union StackBufferOrFields; // make US_STACKBUF_SIZE visible inside fUnion
+
/*
* The following are all the class fields that are stored
* in each UnicodeString object.
@@ -3184,12 +3232,19 @@ private:
* on 64-bit machines (8-byte pointers), it should be 40 bytes.
*/
// (implicit) *vtable;
- int32_t fLength; // number of characters in fArray
- int32_t fCapacity; // sizeof fArray
- UChar *fArray; // the Unicode data
- uint16_t fFlags; // bit flags: see constants above
- UChar fStackBuffer [ US_STACKBUF_SIZE ]; // buffer for small strings
-
+ int8_t fShortLength; // 0..127: length <0: real length is in fUnion.fFields.fLength
+ uint8_t fFlags; // bit flags: see constants above
+ union StackBufferOrFields {
+ // fStackBuffer is used iff (fFlags&kUsingStackBuffer)
+ // else fFields is used
+ UChar fStackBuffer [US_STACKBUF_SIZE]; // buffer for small strings
+ struct {
+ uint16_t fPadding; // align the following field at 8B (32b pointers) or 12B (64b)
+ int32_t fLength; // number of characters in fArray if >127; else undefined
+ UChar *fArray; // the Unicode data (aligned at 12B (32b pointers) or 16B (64b))
+ int32_t fCapacity; // sizeof fArray
+ } fFields;
+ } fUnion;
};
/**
@@ -3217,8 +3272,8 @@ UnicodeString::pinIndex(int32_t& start) const
// pin index
if(start < 0) {
start = 0;
- } else if(start > fLength) {
- start = fLength;
+ } else if(start > length()) {
+ start = length();
}
}
@@ -3227,36 +3282,37 @@ UnicodeString::pinIndices(int32_t& start,
int32_t& _length) const
{
// pin indices
+ int32_t len = length();
if(start < 0) {
start = 0;
- } else if(start > fLength) {
- start = fLength;
+ } else if(start > len) {
+ start = len;
}
if(_length < 0) {
_length = 0;
- } else if(_length > (fLength - start)) {
- _length = (fLength - start);
+ } else if(_length > (len - start)) {
+ _length = (len - start);
}
}
inline UChar*
UnicodeString::getArrayStart()
-{ return fArray; }
+{ return (fFlags&kUsingStackBuffer) ? fUnion.fStackBuffer : fUnion.fFields.fArray; }
inline const UChar*
UnicodeString::getArrayStart() const
-{ return fArray; }
+{ return (fFlags&kUsingStackBuffer) ? fUnion.fStackBuffer : fUnion.fFields.fArray; }
//========================================
// Read-only implementation methods
//========================================
inline int32_t
UnicodeString::length() const
-{ return fLength; }
+{ return fShortLength>=0 ? fShortLength : fUnion.fFields.fLength; }
inline int32_t
UnicodeString::getCapacity() const
-{ return fCapacity; }
+{ return (fFlags&kUsingStackBuffer) ? US_STACKBUF_SIZE : fUnion.fFields.fCapacity; }
inline int32_t
UnicodeString::hashCode() const
@@ -3266,12 +3322,26 @@ inline UBool
UnicodeString::isBogus() const
{ return (UBool)(fFlags & kIsBogus); }
+inline UBool
+UnicodeString::isWritable() const
+{ return (UBool)!(fFlags&(kOpenGetBuffer|kIsBogus)); }
+
+inline UBool
+UnicodeString::isBufferWritable() const
+{
+ return (UBool)(
+ !(fFlags&(kOpenGetBuffer|kIsBogus|kBufferIsReadonly)) &&
+ (!(fFlags&kRefCounted) || refCount()==1));
+}
+
inline const UChar *
UnicodeString::getBuffer() const {
- if(!(fFlags&(kIsBogus|kOpenGetBuffer))) {
- return fArray;
- } else {
+ if(fFlags&(kIsBogus|kOpenGetBuffer)) {
return 0;
+ } else if(fFlags&kUsingStackBuffer) {
+ return fUnion.fStackBuffer;
+ } else {
+ return fUnion.fFields.fArray;
}
}
@@ -3280,7 +3350,7 @@ UnicodeString::getBuffer() const {
//========================================
inline int8_t
UnicodeString::doCompare(int32_t start,
- int32_t length,
+ int32_t thisLength,
const UnicodeString& srcText,
int32_t srcStart,
int32_t srcLength) const
@@ -3289,7 +3359,7 @@ UnicodeString::doCompare(int32_t start,
return (int8_t)!isBogus(); // 0 if both are bogus, 1 otherwise
} else {
srcText.pinIndices(srcStart, srcLength);
- return doCompare(start, length, srcText.fArray, srcStart, srcLength);
+ return doCompare(start, thisLength, srcText.getArrayStart(), srcStart, srcLength);
}
}
@@ -3299,10 +3369,11 @@ UnicodeString::operator== (const UnicodeString& text) const
if(isBogus()) {
return text.isBogus();
} else {
+ int32_t len = length(), textLength = text.length();
return
!text.isBogus() &&
- fLength == text.fLength &&
- doCompare(0, fLength, text, 0, text.fLength) == 0;
+ len == textLength &&
+ doCompare(0, len, text, 0, textLength) == 0;
}
}
@@ -3312,34 +3383,34 @@ UnicodeString::operator!= (const UnicodeString& text) const
inline UBool
UnicodeString::operator> (const UnicodeString& text) const
-{ return doCompare(0, fLength, text, 0, text.fLength) == 1; }
+{ return doCompare(0, length(), text, 0, text.length()) == 1; }
inline UBool
UnicodeString::operator< (const UnicodeString& text) const
-{ return doCompare(0, fLength, text, 0, text.fLength) == -1; }
+{ return doCompare(0, length(), text, 0, text.length()) == -1; }
inline UBool
UnicodeString::operator>= (const UnicodeString& text) const
-{ return doCompare(0, fLength, text, 0, text.fLength) != -1; }
+{ return doCompare(0, length(), text, 0, text.length()) != -1; }
inline UBool
UnicodeString::operator<= (const UnicodeString& text) const
-{ return doCompare(0, fLength, text, 0, text.fLength) != 1; }
+{ return doCompare(0, length(), text, 0, text.length()) != 1; }
inline int8_t
UnicodeString::compare(const UnicodeString& text) const
-{ return doCompare(0, fLength, text, 0, text.fLength); }
+{ return doCompare(0, length(), text, 0, text.length()); }
inline int8_t
UnicodeString::compare(int32_t start,
int32_t _length,
const UnicodeString& srcText) const
-{ return doCompare(start, _length, srcText, 0, srcText.fLength); }
+{ return doCompare(start, _length, srcText, 0, srcText.length()); }
inline int8_t
UnicodeString::compare(const UChar *srcChars,
int32_t srcLength) const
-{ return doCompare(0, fLength, srcChars, 0, srcLength); }
+{ return doCompare(0, length(), srcChars, 0, srcLength); }
inline int8_t
UnicodeString::compare(int32_t start,
@@ -3374,7 +3445,7 @@ UnicodeString::compareBetween(int32_t start,
inline int8_t
UnicodeString::doCompareCodePointOrder(int32_t start,
- int32_t length,
+ int32_t thisLength,
const UnicodeString& srcText,
int32_t srcStart,
int32_t srcLength) const
@@ -3383,24 +3454,24 @@ UnicodeString::doCompareCodePointOrder(int32_t start,
return (int8_t)!isBogus(); // 0 if both are bogus, 1 otherwise
} else {
srcText.pinIndices(srcStart, srcLength);
- return doCompareCodePointOrder(start, length, srcText.fArray, srcStart, srcLength);
+ return doCompareCodePointOrder(start, thisLength, srcText.getArrayStart(), srcStart, srcLength);
}
}
inline int8_t
UnicodeString::compareCodePointOrder(const UnicodeString& text) const
-{ return doCompareCodePointOrder(0, fLength, text, 0, text.fLength); }
+{ return doCompareCodePointOrder(0, length(), text, 0, text.length()); }
inline int8_t
UnicodeString::compareCodePointOrder(int32_t start,
int32_t _length,
const UnicodeString& srcText) const
-{ return doCompareCodePointOrder(start, _length, srcText, 0, srcText.fLength); }
+{ return doCompareCodePointOrder(start, _length, srcText, 0, srcText.length()); }
inline int8_t
UnicodeString::compareCodePointOrder(const UChar *srcChars,
int32_t srcLength) const
-{ return doCompareCodePointOrder(0, fLength, srcChars, 0, srcLength); }
+{ return doCompareCodePointOrder(0, length(), srcChars, 0, srcLength); }
inline int8_t
UnicodeString::compareCodePointOrder(int32_t start,
@@ -3435,7 +3506,7 @@ UnicodeString::compareCodePointOrderBetween(int32_t start,
inline int8_t
UnicodeString::doCaseCompare(int32_t start,
- int32_t length,
+ int32_t thisLength,
const UnicodeString &srcText,
int32_t srcStart,
int32_t srcLength,
@@ -3445,13 +3516,13 @@ UnicodeString::doCaseCompare(int32_t start,
return (int8_t)!isBogus(); // 0 if both are bogus, 1 otherwise
} else {
srcText.pinIndices(srcStart, srcLength);
- return doCaseCompare(start, length, srcText.fArray, srcStart, srcLength, options);
+ return doCaseCompare(start, thisLength, srcText.getArrayStart(), srcStart, srcLength, options);
}
}
inline int8_t
UnicodeString::caseCompare(const UnicodeString &text, uint32_t options) const {
- return doCaseCompare(0, fLength, text, 0, text.fLength, options);
+ return doCaseCompare(0, length(), text, 0, text.length(), options);
}
inline int8_t
@@ -3459,14 +3530,14 @@ UnicodeString::caseCompare(int32_t start,
int32_t _length,
const UnicodeString &srcText,
uint32_t options) const {
- return doCaseCompare(start, _length, srcText, 0, srcText.fLength, options);
+ return doCaseCompare(start, _length, srcText, 0, srcText.length(), options);
}
inline int8_t
UnicodeString::caseCompare(const UChar *srcChars,
int32_t srcLength,
uint32_t options) const {
- return doCaseCompare(0, fLength, srcChars, 0, srcLength, options);
+ return doCaseCompare(0, length(), srcChars, 0, srcLength, options);
}
inline int8_t
@@ -3525,27 +3596,27 @@ UnicodeString::indexOf(const UnicodeString& srcText,
inline int32_t
UnicodeString::indexOf(const UnicodeString& text) const
-{ return indexOf(text, 0, text.fLength, 0, fLength); }
+{ return indexOf(text, 0, text.length(), 0, length()); }
inline int32_t
UnicodeString::indexOf(const UnicodeString& text,
int32_t start) const {
pinIndex(start);
- return indexOf(text, 0, text.fLength, start, fLength - start);
+ return indexOf(text, 0, text.length(), start, length() - start);
}
inline int32_t
UnicodeString::indexOf(const UnicodeString& text,
int32_t start,
int32_t _length) const
-{ return indexOf(text, 0, text.fLength, start, _length); }
+{ return indexOf(text, 0, text.length(), start, _length); }
inline int32_t
UnicodeString::indexOf(const UChar *srcChars,
int32_t srcLength,
int32_t start) const {
pinIndex(start);
- return indexOf(srcChars, 0, srcLength, start, fLength - start);
+ return indexOf(srcChars, 0, srcLength, start, length() - start);
}
inline int32_t
@@ -3569,24 +3640,24 @@ UnicodeString::indexOf(UChar32 c,
inline int32_t
UnicodeString::indexOf(UChar c) const
-{ return doIndexOf(c, 0, fLength); }
+{ return doIndexOf(c, 0, length()); }
inline int32_t
UnicodeString::indexOf(UChar32 c) const
-{ return indexOf(c, 0, fLength); }
+{ return indexOf(c, 0, length()); }
inline int32_t
UnicodeString::indexOf(UChar c,
int32_t start) const {
pinIndex(start);
- return doIndexOf(c, start, fLength - start);
+ return doIndexOf(c, start, length() - start);
}
inline int32_t
UnicodeString::indexOf(UChar32 c,
int32_t start) const {
pinIndex(start);
- return indexOf(c, start, fLength - start);
+ return indexOf(c, start, length() - start);
}
inline int32_t
@@ -3601,7 +3672,7 @@ UnicodeString::lastIndexOf(const UChar *srcChars,
int32_t srcLength,
int32_t start) const {
pinIndex(start);
- return lastIndexOf(srcChars, 0, srcLength, start, fLength - start);
+ return lastIndexOf(srcChars, 0, srcLength, start, length() - start);
}
inline int32_t
@@ -3624,18 +3695,18 @@ inline int32_t
UnicodeString::lastIndexOf(const UnicodeString& text,
int32_t start,
int32_t _length) const
-{ return lastIndexOf(text, 0, text.fLength, start, _length); }
+{ return lastIndexOf(text, 0, text.length(), start, _length); }
inline int32_t
UnicodeString::lastIndexOf(const UnicodeString& text,
int32_t start) const {
pinIndex(start);
- return lastIndexOf(text, 0, text.fLength, start, fLength - start);
+ return lastIndexOf(text, 0, text.length(), start, length() - start);
}
inline int32_t
UnicodeString::lastIndexOf(const UnicodeString& text) const
-{ return lastIndexOf(text, 0, text.fLength, 0, fLength); }
+{ return lastIndexOf(text, 0, text.length(), 0, length()); }
inline int32_t
UnicodeString::lastIndexOf(UChar c,
@@ -3652,30 +3723,30 @@ UnicodeString::lastIndexOf(UChar32 c,
inline int32_t
UnicodeString::lastIndexOf(UChar c) const
-{ return doLastIndexOf(c, 0, fLength); }
+{ return doLastIndexOf(c, 0, length()); }
inline int32_t
UnicodeString::lastIndexOf(UChar32 c) const {
- return lastIndexOf(c, 0, fLength);
+ return lastIndexOf(c, 0, length());
}
inline int32_t
UnicodeString::lastIndexOf(UChar c,
int32_t start) const {
pinIndex(start);
- return doLastIndexOf(c, start, fLength - start);
+ return doLastIndexOf(c, start, length() - start);
}
inline int32_t
UnicodeString::lastIndexOf(UChar32 c,
int32_t start) const {
pinIndex(start);
- return lastIndexOf(c, start, fLength - start);
+ return lastIndexOf(c, start, length() - start);
}
inline UBool
UnicodeString::startsWith(const UnicodeString& text) const
-{ return compare(0, text.fLength, text, 0, text.fLength) == 0; }
+{ return compare(0, text.length(), text, 0, text.length()) == 0; }
inline UBool
UnicodeString::startsWith(const UnicodeString& srcText,
@@ -3696,15 +3767,15 @@ UnicodeString::startsWith(const UChar *srcChars,
inline UBool
UnicodeString::endsWith(const UnicodeString& text) const
-{ return doCompare(fLength - text.fLength, text.fLength,
- text, 0, text.fLength) == 0; }
+{ return doCompare(length() - text.length(), text.length(),
+ text, 0, text.length()) == 0; }
inline UBool
UnicodeString::endsWith(const UnicodeString& srcText,
int32_t srcStart,
int32_t srcLength) const {
srcText.pinIndices(srcStart, srcLength);
- return doCompare(fLength - srcLength, srcLength,
+ return doCompare(length() - srcLength, srcLength,
srcText, srcStart, srcLength) == 0;
}
@@ -3714,7 +3785,7 @@ UnicodeString::endsWith(const UChar *srcChars,
if(srcLength < 0) {
srcLength = u_strlen(srcChars);
}
- return doCompare(fLength - srcLength, srcLength,
+ return doCompare(length() - srcLength, srcLength,
srcChars, 0, srcLength) == 0;
}
@@ -3725,7 +3796,7 @@ UnicodeString::endsWith(const UChar *srcChars,
if(srcLength < 0) {
srcLength = u_strlen(srcChars + srcStart);
}
- return doCompare(fLength - srcLength, srcLength,
+ return doCompare(length() - srcLength, srcLength,
srcChars, srcStart, srcLength) == 0;
}
@@ -3736,7 +3807,7 @@ inline UnicodeString&
UnicodeString::replace(int32_t start,
int32_t _length,
const UnicodeString& srcText)
-{ return doReplace(start, _length, srcText, 0, srcText.fLength); }
+{ return doReplace(start, _length, srcText, 0, srcText.length()); }
inline UnicodeString&
UnicodeString::replace(int32_t start,
@@ -3782,7 +3853,7 @@ inline UnicodeString&
UnicodeString::replaceBetween(int32_t start,
int32_t limit,
const UnicodeString& srcText)
-{ return doReplace(start, limit - start, srcText, 0, srcText.fLength); }
+{ return doReplace(start, limit - start, srcText, 0, srcText.length()); }
inline UnicodeString&
UnicodeString::replaceBetween(int32_t start,
@@ -3795,16 +3866,16 @@ UnicodeString::replaceBetween(int32_t start,
inline UnicodeString&
UnicodeString::findAndReplace(const UnicodeString& oldText,
const UnicodeString& newText)
-{ return findAndReplace(0, fLength, oldText, 0, oldText.fLength,
- newText, 0, newText.fLength); }
+{ return findAndReplace(0, length(), oldText, 0, oldText.length(),
+ newText, 0, newText.length()); }
inline UnicodeString&
UnicodeString::findAndReplace(int32_t start,
int32_t _length,
const UnicodeString& oldText,
const UnicodeString& newText)
-{ return findAndReplace(start, _length, oldText, 0, oldText.fLength,
- newText, 0, newText.fLength); }
+{ return findAndReplace(start, _length, oldText, 0, oldText.length(),
+ newText, 0, newText.length()); }
// ============================
// extract
@@ -3813,7 +3884,7 @@ inline void
UnicodeString::doExtract(int32_t start,
int32_t _length,
UnicodeString& target) const
-{ target.replace(0, target.fLength, *this, start, _length); }
+{ target.replace(0, target.length(), *this, start, _length); }
inline void
UnicodeString::extract(int32_t start,
@@ -3856,8 +3927,8 @@ UnicodeString::extractBetween(int32_t start,
inline UChar
UnicodeString::doCharAt(int32_t offset) const
{
- if((uint32_t)offset < (uint32_t)fLength) {
- return fArray[offset];
+ if((uint32_t)offset < (uint32_t)length()) {
+ return getArrayStart()[offset];
} else {
return kInvalidUChar;
}
@@ -3874,9 +3945,11 @@ UnicodeString::operator[] (int32_t offset) const
inline UChar32
UnicodeString::char32At(int32_t offset) const
{
- if((uint32_t)offset < (uint32_t)fLength) {
+ int32_t len = length();
+ if((uint32_t)offset < (uint32_t)len) {
+ const UChar *array = getArrayStart();
UChar32 c;
- U16_GET(fArray, 0, offset, fLength, c);
+ U16_GET(array, 0, offset, len, c);
return c;
} else {
return kInvalidUChar;
@@ -3885,8 +3958,9 @@ UnicodeString::char32At(int32_t offset) const
inline int32_t
UnicodeString::getChar32Start(int32_t offset) const {
- if((uint32_t)offset < (uint32_t)fLength) {
- U16_SET_CP_START(fArray, 0, offset);
+ if((uint32_t)offset < (uint32_t)length()) {
+ const UChar *array = getArrayStart();
+ U16_SET_CP_START(array, 0, offset);
return offset;
} else {
return 0;
@@ -3895,43 +3969,79 @@ UnicodeString::getChar32Start(int32_t offset) const {
inline int32_t
UnicodeString::getChar32Limit(int32_t offset) const {
- if((uint32_t)offset < (uint32_t)fLength) {
- U16_SET_CP_LIMIT(fArray, 0, offset, fLength);
+ int32_t len = length();
+ if((uint32_t)offset < (uint32_t)len) {
+ const UChar *array = getArrayStart();
+ U16_SET_CP_LIMIT(array, 0, offset, len);
return offset;
} else {
- return fLength;
+ return len;
}
}
inline UBool
UnicodeString::isEmpty() const {
- return fLength == 0;
+ return fShortLength == 0;
}
//========================================
// Write implementation methods
//========================================
+inline void
+UnicodeString::setLength(int32_t len) {
+ if(len <= 127) {
+ fShortLength = (int8_t)len;
+ } else {
+ fShortLength = (int8_t)-1;
+ fUnion.fFields.fLength = len;
+ }
+}
+
+inline void
+UnicodeString::setToEmpty() {
+ fShortLength = 0;
+ fFlags = kShortString;
+}
+
+inline void
+UnicodeString::setToStackBuffer(int32_t len) {
+ fShortLength = (int8_t)len;
+ fFlags = kShortString;
+}
+
+inline void
+UnicodeString::setArray(UChar *array, int32_t len, int32_t capacity) {
+ setLength(len);
+ fUnion.fFields.fArray = array;
+ fUnion.fFields.fCapacity = capacity;
+}
+
inline const UChar *
UnicodeString::getTerminatedBuffer() {
- if(fFlags&(kIsBogus|kOpenGetBuffer)) {
+ if(!isWritable()) {
return 0;
- } else if(fLength
* Resource bundles in ICU4C are currently defined using text files which conform to the following
- * BNF definition.
+ * BNF definition.
* More on resource bundle concepts and syntax can be found in the
- * Users Guide.
+ * Users Guide.
*
*/
@@ -400,9 +400,9 @@ ures_getString(const UResourceBundle* resourceBundle,
*
* @see ures_getString
* @see u_strToUTF8
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
-U_DRAFT const char * U_EXPORT2
+U_STABLE const char * U_EXPORT2
ures_getUTF8String(const UResourceBundle *resB,
char *dest, int32_t *length,
UBool forceCopy,
@@ -666,9 +666,9 @@ ures_getStringByIndex(const UResourceBundle *resourceBundle,
*
* @see ures_getStringByIndex
* @see u_strToUTF8
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
-U_DRAFT const char * U_EXPORT2
+U_STABLE const char * U_EXPORT2
ures_getUTF8StringByIndex(const UResourceBundle *resB,
int32_t index,
char *dest, int32_t *pLength,
@@ -759,9 +759,9 @@ ures_getStringByKey(const UResourceBundle *resB,
*
* @see ures_getStringByKey
* @see u_strToUTF8
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
-U_DRAFT const char * U_EXPORT2
+U_STABLE const char * U_EXPORT2
ures_getUTF8StringByKey(const UResourceBundle *resB,
const char *key,
char *dest, int32_t *pLength,
diff --git a/icuSources/common/unicode/uscript.h b/icuSources/common/unicode/uscript.h
index d7cbc38e..c915d8df 100644
--- a/icuSources/common/unicode/uscript.h
+++ b/icuSources/common/unicode/uscript.h
@@ -1,17 +1,18 @@
/*
-**********************************************************************
-* Copyright (C) 1997-2006, International Business Machines
-* Corporation and others. All Rights Reserved.
-**********************************************************************
-*
-* File USCRIPT.H
-*
-* Modification History:
-*
-* Date Name Description
-* 07/06/2001 Ram Creation.
-******************************************************************************
-*/
+ **********************************************************************
+ * Copyright (C) 1997-2008, International Business Machines
+ * Corporation and others. All Rights Reserved.
+ **********************************************************************
+ *
+ * File USCRIPT.H
+ *
+ * Modification History:
+ *
+ * Date Name Description
+ * 07/06/2001 Ram Creation.
+ ******************************************************************************
+ */
+
#ifndef USCRIPT_H
#define USCRIPT_H
#include "unicode/utypes.h"
@@ -107,8 +108,7 @@ typedef enum UScriptCode {
/** New script code in Unicode 4.0.1 @stable ICU 3.0 */
USCRIPT_KATAKANA_OR_HIRAGANA = 54,/*Hrkt */
-#ifndef U_HIDE_DRAFT_API
- /* New scripts in Unicode 4.1 @draft ICU 3.4 */
+ /* New scripts in Unicode 4.1 @stable ICU 3.4 */
USCRIPT_BUGINESE = 55, /* Bugi */
USCRIPT_GLAGOLITIC = 56, /* Glag */
USCRIPT_KHAROSHTHI = 57, /* Khar */
@@ -117,7 +117,7 @@ typedef enum UScriptCode {
USCRIPT_TIFINAGH = 60, /* Tfng */
USCRIPT_OLD_PERSIAN = 61, /* Xpeo */
- /* New script codes from ISO 15924 @draft ICU 3.6 */
+ /* New script codes from ISO 15924 @stable ICU 3.6 */
USCRIPT_BALINESE = 62, /* Bali */
USCRIPT_BATAK = 63, /* Batk */
USCRIPT_BLISSYMBOLS = 64, /* Blis */
@@ -160,9 +160,39 @@ typedef enum UScriptCode {
USCRIPT_CUNEIFORM = 101,/* Xsux */
USCRIPT_UNWRITTEN_LANGUAGES = 102,/* Zxxx */
USCRIPT_UNKNOWN = 103,/* Zzzz */ /* Unknown="Code for uncoded script", for unassigned code points */
+
+ /* New script codes from ISO 15924 @stable ICU 4.0 */
+ USCRIPT_CARIAN = 104,/* Cari */
+ USCRIPT_JAPANESE = 105,/* Jpan */
+ USCRIPT_LANNA = 106,/* Lana */
+ USCRIPT_LYCIAN = 107,/* Lyci */
+ USCRIPT_LYDIAN = 108,/* Lydi */
+ USCRIPT_OL_CHIKI = 109,/* Olck */
+ USCRIPT_REJANG = 110,/* Rjng */
+ USCRIPT_SAURASHTRA = 111,/* Saur */
+ USCRIPT_SIGN_WRITING = 112,/* Sgnw */
+ USCRIPT_SUNDANESE = 113,/* Sund */
+ USCRIPT_MOON = 114,/* Moon */
+ USCRIPT_MEITEI_MAYEK = 115,/* Mtei */
+
+ /* New script codes from ISO 15924 @draft ICU 4.0 */
+ USCRIPT_IMPERIAL_ARAMAIC = 116,/* Armi */
+ USCRIPT_AVESTAN = 117,/* Avst */
+ USCRIPT_CHAKMA = 118,/* Cakm */
+ USCRIPT_KOREAN = 119,/* Kore */
+ USCRIPT_KAITHI = 120,/* Kthi */
+ USCRIPT_MANICHAEAN = 121,/* Mani */
+ USCRIPT_INSCRIPTIONAL_PAHLAVI = 122,/* Phli */
+ USCRIPT_PSALTER_PAHLAVI = 123,/* Phlp */
+ USCRIPT_BOOK_PAHLAVI = 124,/* Phlv */
+ USCRIPT_INSCRIPTIONAL_PARTHIAN = 125,/* Prti */
+ USCRIPT_SAMARITAN = 126,/* Samr */
+ USCRIPT_TAI_VIET = 127,/* Tavt */
+ USCRIPT_MATHEMATICAL_NOTATION = 128,/* Zmth */
+ USCRIPT_SYMBOLS = 129,/* Zsym */
+
/* Private use codes from Qaaa - Qabx are not supported*/
-#endif /* U_HIDE_DRAFT_API */
- USCRIPT_CODE_LIMIT = 104
+ USCRIPT_CODE_LIMIT = 130
} UScriptCode;
/**
diff --git a/icuSources/common/unicode/uset.h b/icuSources/common/unicode/uset.h
index e6c7d3ec..2bbfd7a5 100644
--- a/icuSources/common/unicode/uset.h
+++ b/icuSources/common/unicode/uset.h
@@ -1,7 +1,7 @@
/*
*******************************************************************************
*
-* Copyright (C) 2002-2006, International Business Machines
+* Copyright (C) 2002-2008, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
@@ -97,6 +97,115 @@ enum {
USET_SERIALIZED_STATIC_ARRAY_CAPACITY=8
};
+/**
+ * Argument values for whether span() and similar functions continue while
+ * the current character is contained vs. not contained in the set.
+ *
+ * The functionality is straightforward for sets with only single code points,
+ * without strings (which is the common case):
+ * - USET_SPAN_CONTAINED and USET_SPAN_SIMPLE
+ * work the same.
+ * - span() and spanBack() partition any string the same way when
+ * alternating between span(USET_SPAN_NOT_CONTAINED) and
+ * span(either "contained" condition).
+ * - Using a complemented (inverted) set and the opposite span conditions
+ * yields the same results.
+ *
+ * When a set contains multi-code point strings, then these statements may not
+ * be true, depending on the strings in the set (for example, whether they
+ * overlap with each other) and the string that is processed.
+ * For a set with strings:
+ * - The complement of the set contains the opposite set of code points,
+ * but the same set of strings.
+ * Therefore, complementing both the set and the span conditions
+ * may yield different results.
+ * - When starting spans at different positions in a string
+ * (span(s, ...) vs. span(s+1, ...)) the ends of the spans may be different
+ * because a set string may start before the later position.
+ * - span(USET_SPAN_SIMPLE) may be shorter than
+ * span(USET_SPAN_CONTAINED) because it will not recursively try
+ * all possible paths.
+ * For example, with a set which contains the three strings "xy", "xya" and "ax",
+ * span("xyax", USET_SPAN_CONTAINED) will return 4 but
+ * span("xyax", USET_SPAN_SIMPLE) will return 3.
+ * span(USET_SPAN_SIMPLE) will never be longer than
+ * span(USET_SPAN_CONTAINED).
+ * - With either "contained" condition, span() and spanBack() may partition
+ * a string in different ways.
+ * For example, with a set which contains the two strings "ab" and "ba",
+ * and when processing the string "aba",
+ * span() will yield contained/not-contained boundaries of { 0, 2, 3 }
+ * while spanBack() will yield boundaries of { 0, 1, 3 }.
+ *
+ * Note: If it is important to get the same boundaries whether iterating forward
+ * or backward through a string, then either only span() should be used and
+ * the boundaries cached for backward operation, or an ICU BreakIterator
+ * could be used.
+ *
+ * Note: Unpaired surrogates are treated like surrogate code points.
+ * Similarly, set strings match only on code point boundaries,
+ * never in the middle of a surrogate pair.
+ * Illegal UTF-8 sequences are treated like U+FFFD.
+ * When processing UTF-8 strings, malformed set strings
+ * (strings with unpaired surrogates which cannot be converted to UTF-8)
+ * are ignored.
+ *
+ * @stable ICU 4.0
+ */
+typedef enum USetSpanCondition {
+ /**
+ * Continue a span() while there is no set element at the current position.
+ * Stops before the first set element (character or string).
+ * (For code points only, this is like while contains(current)==FALSE).
+ *
+ * When span() returns, the substring between where it started and the position
+ * it returned consists only of characters that are not in the set,
+ * and none of its strings overlap with the span.
+ *
+ * @stable ICU 4.0
+ */
+ USET_SPAN_NOT_CONTAINED = 0,
+ /**
+ * Continue a span() while there is a set element at the current position.
+ * (For characters only, this is like while contains(current)==TRUE).
+ *
+ * When span() returns, the substring between where it started and the position
+ * it returned consists only of set elements (characters or strings) that are in the set.
+ *
+ * If a set contains strings, then the span will be the longest substring
+ * matching any of the possible concatenations of set elements (characters or strings).
+ * (There must be a single, non-overlapping concatenation of characters or strings.)
+ * This is equivalent to a POSIX regular expression for (OR of each set element)*.
+ *
+ * @stable ICU 4.0
+ */
+ USET_SPAN_CONTAINED = 1,
+ /**
+ * Continue a span() while there is a set element at the current position.
+ * (For characters only, this is like while contains(current)==TRUE).
+ *
+ * When span() returns, the substring between where it started and the position
+ * it returned consists only of set elements (characters or strings) that are in the set.
+ *
+ * If a set only contains single characters, then this is the same
+ * as USET_SPAN_CONTAINED.
+ *
+ * If a set contains strings, then the span will be the longest substring
+ * with a match at each position with the longest single set element (character or string).
+ *
+ * Use this span condition together with other longest-match algorithms,
+ * such as ICU converters (ucnv_getUnicodeSet()).
+ *
+ * @stable ICU 4.0
+ */
+ USET_SPAN_SIMPLE = 2,
+ /**
+ * One more than the last span condition.
+ * @stable ICU 4.0
+ */
+ USET_SPAN_CONDITION_COUNT
+} USetSpanCondition;
+
/**
* A serialized form of a Unicode set. Limited manipulations are
* possible directly on a serialized set. See below.
@@ -131,7 +240,8 @@ typedef struct USerializedSet {
/**
* Creates a USet object that contains the range of characters
- * start..end, inclusive.
+ * start..end, inclusive. If start > end
+ * then an empty set is created.
* @param start first character of the range, inclusive
* @param end last character of the range, inclusive
* @return a newly created USet. The caller must call uset_close() on
@@ -179,9 +289,64 @@ uset_openPatternOptions(const UChar* pattern, int32_t patternLength,
U_STABLE void U_EXPORT2
uset_close(USet* set);
+/**
+ * Returns a copy of this object.
+ * If this set is frozen, then the clone will be frozen as well.
+ * Use uset_cloneAsThawed() for a mutable clone of a frozen set.
+ * @param set the original set
+ * @return the newly allocated copy of the set
+ * @see uset_cloneAsThawed
+ * @stable ICU 4.0
+ */
+U_DRAFT USet * U_EXPORT2
+uset_clone(const USet *set);
+
+/**
+ * Determines whether the set has been frozen (made immutable) or not.
+ * See the ICU4J Freezable interface for details.
+ * @param set the set
+ * @return TRUE/FALSE for whether the set has been frozen
+ * @see uset_freeze
+ * @see uset_cloneAsThawed
+ * @stable ICU 4.0
+ */
+U_DRAFT UBool U_EXPORT2
+uset_isFrozen(const USet *set);
+
+/**
+ * Freeze the set (make it immutable).
+ * Once frozen, it cannot be unfrozen and is therefore thread-safe
+ * until it is deleted.
+ * See the ICU4J Freezable interface for details.
+ * Freezing the set may also make some operations faster, for example
+ * uset_contains() and uset_span().
+ * A frozen set will not be modified. (It remains frozen.)
+ * @param set the set
+ * @return the same set, now frozen
+ * @see uset_isFrozen
+ * @see uset_cloneAsThawed
+ * @stable ICU 4.0
+ */
+U_DRAFT void U_EXPORT2
+uset_freeze(USet *set);
+
+/**
+ * Clone the set and make the clone mutable.
+ * See the ICU4J Freezable interface for details.
+ * @param set the set
+ * @return the mutable clone
+ * @see uset_freeze
+ * @see uset_isFrozen
+ * @see uset_clone
+ * @stable ICU 4.0
+ */
+U_DRAFT USet * U_EXPORT2
+uset_cloneAsThawed(const USet *set);
+
/**
* Causes the USet object to represent the range start - end.
* If start > end then this USet is set to an empty range.
+ * A frozen set will not be modified.
* @param set the object to set to the given range
* @param start first character in the set, inclusive
* @param end last character in the set, inclusive
@@ -196,6 +361,7 @@ uset_set(USet* set,
* pattern. See the UnicodeSet class description for the syntax of
* the pattern language. See also the User Guide chapter about UnicodeSet.
* Empties the set passed before applying the pattern.
+ * A frozen set will not be modified.
* @param set The set to which the pattern is to be applied.
* @param pattern A pointer to UChar string specifying what characters are in the set.
* The character at pattern[0] must be a '['.
@@ -208,7 +374,7 @@ uset_set(USet* set,
* of the parsed pattern.
* If the status code indicates failure, then the return value
* is the index of the error in the source.
- *
+ *
* @stable ICU 2.8
*/
U_STABLE int32_t U_EXPORT2
@@ -221,6 +387,7 @@ uset_applyPattern(USet *set,
* Modifies the set to contain those code points which have the given value
* for the given binary or enumerated property, as returned by
* u_getIntPropertyValue. Prior contents of this set are lost.
+ * A frozen set will not be modified.
*
* @param set the object to contain the code points defined by the property
*
@@ -246,6 +413,7 @@ uset_applyIntPropertyValue(USet* set,
* Modifies the set to contain those code points which have the
* given value for the given property. Prior contents of this
* set are lost.
+ * A frozen set will not be modified.
*
* @param set the object to contain the code points defined by the given
* property and value alias
@@ -319,6 +487,7 @@ uset_toPattern(const USet* set,
/**
* Adds the given character to the given USet. After this call,
* uset_contains(set, c) will return TRUE.
+ * A frozen set will not be modified.
* @param set the object to which to add the character
* @param c the character to add
* @stable ICU 2.4
@@ -332,6 +501,7 @@ uset_add(USet* set, UChar32 c);
* modifies this set so that its value is the union of the two
* sets. The behavior of this operation is unspecified if the specified
* collection is modified while the operation is in progress.
+ * A frozen set will not be modified.
*
* @param set the object to which to add the set
* @param additionalSet the source set whose elements are to be added to this set.
@@ -343,6 +513,7 @@ uset_addAll(USet* set, const USet *additionalSet);
/**
* Adds the given range of characters to the given USet. After this call,
* uset_contains(set, start, end) will return TRUE.
+ * A frozen set will not be modified.
* @param set the object to which to add the character
* @param start the first character of the range to add, inclusive
* @param end the last character of the range to add, inclusive
@@ -354,6 +525,7 @@ uset_addRange(USet* set, UChar32 start, UChar32 end);
/**
* Adds the given string to the given USet. After this call,
* uset_containsString(set, str, strLen) will return TRUE.
+ * A frozen set will not be modified.
* @param set the object to which to add the character
* @param str the string to add
* @param strLen the length of the string or -1 if null terminated.
@@ -365,17 +537,19 @@ uset_addString(USet* set, const UChar* str, int32_t strLen);
/**
* Adds each of the characters in this string to the set. Thus "ch" => {"c", "h"}
* If this set already any particular character, it has no effect on that character.
+ * A frozen set will not be modified.
* @param set the object to which to add the character
* @param str the source string
* @param strLen the length of the string or -1 if null terminated.
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT void U_EXPORT2
+U_STABLE void U_EXPORT2
uset_addAllCodePoints(USet* set, const UChar *str, int32_t strLen);
/**
* Removes the given character from the given USet. After this call,
* uset_contains(set, c) will return FALSE.
+ * A frozen set will not be modified.
* @param set the object from which to remove the character
* @param c the character to remove
* @stable ICU 2.4
@@ -386,6 +560,7 @@ uset_remove(USet* set, UChar32 c);
/**
* Removes the given range of characters from the given USet. After this call,
* uset_contains(set, start, end) will return FALSE.
+ * A frozen set will not be modified.
* @param set the object to which to add the character
* @param start the first character of the range to remove, inclusive
* @param end the last character of the range to remove, inclusive
@@ -397,6 +572,7 @@ uset_removeRange(USet* set, UChar32 start, UChar32 end);
/**
* Removes the given string to the given USet. After this call,
* uset_containsString(set, str, strLen) will return FALSE.
+ * A frozen set will not be modified.
* @param set the object to which to add the character
* @param str the string to remove
* @param strLen the length of the string or -1 if null terminated.
@@ -410,6 +586,7 @@ uset_removeString(USet* set, const UChar* str, int32_t strLen);
* specified set. This operation effectively modifies this
* set so that its value is the asymmetric set difference of
* the two sets.
+ * A frozen set will not be modified.
* @param set the object from which the elements are to be removed
* @param removeSet the object that defines which elements will be
* removed from this set
@@ -423,6 +600,7 @@ uset_removeAll(USet* set, const USet* removeSet);
* specified range. If start > end then an empty range is
* retained, leaving the set empty. This is equivalent to
* a boolean logic AND, or a set INTERSECTION.
+ * A frozen set will not be modified.
*
* @param set the object for which to retain only the specified range
* @param start first character, inclusive, of range to be retained
@@ -440,6 +618,7 @@ uset_retain(USet* set, UChar32 start, UChar32 end);
* its elements that are not contained in the specified set. This
* operation effectively modifies this set so that its value is
* the intersection of the two sets.
+ * A frozen set will not be modified.
*
* @param set the object on which to perform the retain
* @param retain set that defines which elements this set will retain
@@ -451,6 +630,7 @@ uset_retainAll(USet* set, const USet* retain);
/**
* Reallocate this objects internal structures to take up the least
* possible space, without changing this object's value.
+ * A frozen set will not be modified.
*
* @param set the object on which to perfrom the compact
* @stable ICU 3.2
@@ -462,6 +642,7 @@ uset_compact(USet* set);
* Inverts this set. This operation modifies this set so that
* its value is its complement. This operation does not affect
* the multicharacter strings, if any.
+ * A frozen set will not be modified.
* @param set the set
* @stable ICU 2.4
*/
@@ -472,6 +653,7 @@ uset_complement(USet* set);
* Complements in this set all elements contained in the specified
* set. Any character in the other set will be removed if it is
* in this set, or will be added if it is not in this set.
+ * A frozen set will not be modified.
*
* @param set the set with which to complement
* @param complement set that defines which elements will be xor'ed
@@ -484,6 +666,7 @@ uset_complementAll(USet* set, const USet* complement);
/**
* Removes all of the elements from this set. This set will be
* empty after this call returns.
+ * A frozen set will not be modified.
* @param set the set
* @stable ICU 2.4
*/
@@ -502,6 +685,7 @@ uset_isEmpty(const USet* set);
/**
* Returns TRUE if the given USet contains the given character.
+ * This function works faster with a frozen set.
* @param set the set
* @param c The codepoint to check for within the set
* @return true if set contains c
@@ -624,9 +808,9 @@ uset_containsAll(const USet* set1, const USet* set2);
* @param str string containing codepoints to be checked for containment
* @param strLen the length of the string or -1 if null terminated.
* @return true if the test condition is met
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT UBool U_EXPORT2
+U_STABLE UBool U_EXPORT2
uset_containsAllCodePoints(const USet* set, const UChar *str, int32_t strLen);
/**
@@ -651,6 +835,92 @@ uset_containsNone(const USet* set1, const USet* set2);
U_STABLE UBool U_EXPORT2
uset_containsSome(const USet* set1, const USet* set2);
+/**
+ * Returns the length of the initial substring of the input string which
+ * consists only of characters and strings that are contained in this set
+ * (USET_SPAN_CONTAINED, USET_SPAN_SIMPLE),
+ * or only of characters and strings that are not contained
+ * in this set (USET_SPAN_NOT_CONTAINED).
+ * See USetSpanCondition for details.
+ * Similar to the strspn() C library function.
+ * Unpaired surrogates are treated according to contains() of their surrogate code points.
+ * This function works faster with a frozen set and with a non-negative string length argument.
+ * @param set the set
+ * @param s start of the string
+ * @param length of the string; can be -1 for NUL-terminated
+ * @param spanCondition specifies the containment condition
+ * @return the length of the initial substring according to the spanCondition;
+ * 0 if the start of the string does not fit the spanCondition
+ * @stable ICU 4.0
+ * @see USetSpanCondition
+ */
+U_DRAFT int32_t U_EXPORT2
+uset_span(const USet *set, const UChar *s, int32_t length, USetSpanCondition spanCondition);
+
+/**
+ * Returns the start of the trailing substring of the input string which
+ * consists only of characters and strings that are contained in this set
+ * (USET_SPAN_CONTAINED, USET_SPAN_SIMPLE),
+ * or only of characters and strings that are not contained
+ * in this set (USET_SPAN_NOT_CONTAINED).
+ * See USetSpanCondition for details.
+ * Unpaired surrogates are treated according to contains() of their surrogate code points.
+ * This function works faster with a frozen set and with a non-negative string length argument.
+ * @param set the set
+ * @param s start of the string
+ * @param length of the string; can be -1 for NUL-terminated
+ * @param spanCondition specifies the containment condition
+ * @return the start of the trailing substring according to the spanCondition;
+ * the string length if the end of the string does not fit the spanCondition
+ * @stable ICU 4.0
+ * @see USetSpanCondition
+ */
+U_DRAFT int32_t U_EXPORT2
+uset_spanBack(const USet *set, const UChar *s, int32_t length, USetSpanCondition spanCondition);
+
+/**
+ * Returns the length of the initial substring of the input string which
+ * consists only of characters and strings that are contained in this set
+ * (USET_SPAN_CONTAINED, USET_SPAN_SIMPLE),
+ * or only of characters and strings that are not contained
+ * in this set (USET_SPAN_NOT_CONTAINED).
+ * See USetSpanCondition for details.
+ * Similar to the strspn() C library function.
+ * Malformed byte sequences are treated according to contains(0xfffd).
+ * This function works faster with a frozen set and with a non-negative string length argument.
+ * @param set the set
+ * @param s start of the string (UTF-8)
+ * @param length of the string; can be -1 for NUL-terminated
+ * @param spanCondition specifies the containment condition
+ * @return the length of the initial substring according to the spanCondition;
+ * 0 if the start of the string does not fit the spanCondition
+ * @stable ICU 4.0
+ * @see USetSpanCondition
+ */
+U_DRAFT int32_t U_EXPORT2
+uset_spanUTF8(const USet *set, const char *s, int32_t length, USetSpanCondition spanCondition);
+
+/**
+ * Returns the start of the trailing substring of the input string which
+ * consists only of characters and strings that are contained in this set
+ * (USET_SPAN_CONTAINED, USET_SPAN_SIMPLE),
+ * or only of characters and strings that are not contained
+ * in this set (USET_SPAN_NOT_CONTAINED).
+ * See USetSpanCondition for details.
+ * Malformed byte sequences are treated according to contains(0xfffd).
+ * This function works faster with a frozen set and with a non-negative string length argument.
+ * @param set the set
+ * @param s start of the string (UTF-8)
+ * @param length of the string; can be -1 for NUL-terminated
+ * @param spanCondition specifies the containment condition
+ * @return the start of the trailing substring according to the spanCondition;
+ * the string length if the end of the string does not fit the spanCondition
+ * @stable ICU 4.0
+ * @see USetSpanCondition
+ */
+U_DRAFT int32_t U_EXPORT2
+uset_spanBackUTF8(const USet *set, const char *s, int32_t length, USetSpanCondition spanCondition);
+
/**
* Returns true if set1 contains all of the characters and strings
* of set2, and vis versa. It answers the question, 'Is set1 equal to set2?'
diff --git a/icuSources/common/unicode/ushape.h b/icuSources/common/unicode/ushape.h
index 34e81e34..f165e140 100644
--- a/icuSources/common/unicode/ushape.h
+++ b/icuSources/common/unicode/ushape.h
@@ -1,7 +1,7 @@
/*
******************************************************************************
*
-* Copyright (C) 2000-2004, International Business Machines
+* Copyright (C) 2000-2007, International Business Machines
* Corporation and others. All Rights Reserved.
*
******************************************************************************
@@ -231,4 +231,33 @@ u_shapeArabic(const UChar *source, int32_t sourceLength,
/** Bit mask for digit type options. @stable ICU 2.0 */
#define U_SHAPE_DIGIT_TYPE_MASK 0x3f00
+/**
+ * Tashkeel aggregation option:
+ * Replaces any combination of U+0651 with one of
+ * U+064C, U+064D, U+064E, U+064F, U+0650 with
+ * U+FC5E, U+FC5F, U+FC60, U+FC61, U+FC62 consecutively.
+ * @stable ICU 3.6
+ */
+#define U_SHAPE_AGGREGATE_TASHKEEL 0x4000
+/** Tashkeel aggregation option: do not aggregate tashkeels. @stable ICU 3.6 */
+#define U_SHAPE_AGGREGATE_TASHKEEL_NOOP 0
+/** Bit mask for tashkeel aggregation. @stable ICU 3.6 */
+#define U_SHAPE_AGGREGATE_TASHKEEL_MASK 0x4000
+
+/**
+ * Presentation form option:
+ * Don't replace Arabic Presentation Forms-A and Arabic Presentation Forms-B
+ * characters with 0+06xx characters, before shaping.
+ * @stable ICU 3.6
+ */
+#define U_SHAPE_PRESERVE_PRESENTATION 0x8000
+/** Presentation form option:
+ * Replace Arabic Presentation Forms-A and Arabic Presentationo Forms-B with
+ * their unshaped correspondants in range 0+06xx, before shaping.
+ * @stable ICU 3.6
+ */
+#define U_SHAPE_PRESERVE_PRESENTATION_NOOP 0
+/** Bit mask for preserve presentation form. @stable ICU 3.6 */
+#define U_SHAPE_PRESERVE_PRESENTATION_MASK 0x8000
+
#endif
diff --git a/icuSources/common/unicode/ustring.h b/icuSources/common/unicode/ustring.h
index 4777c269..12411ef6 100644
--- a/icuSources/common/unicode/ustring.h
+++ b/icuSources/common/unicode/ustring.h
@@ -1,6 +1,6 @@
/*
**********************************************************************
-* Copyright (C) 1998-2006, International Business Machines
+* Copyright (C) 1998-2008, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
*
@@ -65,13 +65,14 @@
* their occurrence is rare. Almost all characters in modern use require only
* a single UChar code unit (i.e., their code point values are <=0xffff).
*
- * For more details see the User Guide Strings chapter (http://icu.sourceforge.net/userguide/strings.html).
+ * For more details see the User Guide Strings chapter (http://icu-project.org/userguide/strings.html).
* For a discussion of the handling of unpaired surrogates see also
* Jitterbug 2145 and its icu mailing list proposal on 2002-sep-18.
*/
/**
-* \defgroup ustring_ustrlen
+ * \defgroup ustring_ustrlen String Length
+ * \ingroup ustring_strlen
*/
/*@{*/
/**
@@ -918,12 +919,16 @@ u_memrchr32(const UChar *s, UChar32 c, int32_t count);
*
* @stable ICU 2.0
*/
-#if U_SIZEOF_WCHAR_T==U_SIZEOF_UCHAR && (U_CHARSET_FAMILY==U_ASCII_FAMILY || (U_SIZEOF_UCHAR == 2 && defined(U_WCHAR_IS_UTF16)))
-# define U_STRING_DECL(var, cs, length) static const wchar_t var[(length)+1]={ L ## cs }
+#if defined(U_DECLARE_UTF16)
+# define U_STRING_DECL(var, cs, length) static const UChar var[(length)+1]=U_DECLARE_UTF16(cs)
+ /**@stable ICU 2.0 */
+# define U_STRING_INIT(var, cs, length)
+#elif U_SIZEOF_WCHAR_T==U_SIZEOF_UCHAR && (U_CHARSET_FAMILY==U_ASCII_FAMILY || (U_SIZEOF_UCHAR == 2 && defined(U_WCHAR_IS_UTF16)))
+# define U_STRING_DECL(var, cs, length) static const UChar var[(length)+1]=L ## cs
/**@stable ICU 2.0 */
# define U_STRING_INIT(var, cs, length)
#elif U_SIZEOF_UCHAR==1 && U_CHARSET_FAMILY==U_ASCII_FAMILY
-# define U_STRING_DECL(var, cs, length) static const UChar var[(length)+1]={ (const UChar *)cs }
+# define U_STRING_DECL(var, cs, length) static const UChar var[(length)+1]=cs
/**@stable ICU 2.0 */
# define U_STRING_INIT(var, cs, length)
#else
@@ -1101,7 +1106,7 @@ u_strToLower(UChar *dest, int32_t destCapacity,
* The standard titlecase iterator for the root locale implements the
* algorithm of Unicode TR 21.
*
- * This function uses only the first() and next() methods of the
+ * This function uses only the setText(), first() and next() methods of the
* provided break iterator.
*
* The result may be longer or shorter than the original.
@@ -1307,9 +1312,9 @@ u_strFromUTF8(UChar *dest,
* @return The pointer to destination buffer.
* @see u_strToUTF8
* @see u_strFromUTF8WithSub
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
-U_DRAFT char* U_EXPORT2
+U_STABLE char* U_EXPORT2
u_strToUTF8WithSub(char *dest,
int32_t destCapacity,
int32_t *pDestLength,
@@ -1351,9 +1356,9 @@ u_strToUTF8WithSub(char *dest,
* @see u_strFromUTF8
* @see u_strFromUTF8Lenient
* @see u_strToUTF8WithSub
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
-U_DRAFT UChar* U_EXPORT2
+U_STABLE UChar* U_EXPORT2
u_strFromUTF8WithSub(UChar *dest,
int32_t destCapacity,
int32_t *pDestLength,
@@ -1407,9 +1412,9 @@ u_strFromUTF8WithSub(UChar *dest,
* @see u_strFromUTF8
* @see u_strFromUTF8WithSub
* @see u_strToUTF8WithSub
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
-U_CAPI UChar * U_EXPORT2
+U_STABLE UChar * U_EXPORT2
u_strFromUTF8Lenient(UChar *dest,
int32_t destCapacity,
int32_t *pDestLength,
diff --git a/icuSources/common/unicode/usystem.h b/icuSources/common/unicode/usystem.h
index b42e1023..752e2f16 100644
--- a/icuSources/common/unicode/usystem.h
+++ b/icuSources/common/unicode/usystem.h
@@ -1,6 +1,6 @@
/*
*******************************************************************************
-* Copyright (C) 2004-2006, International Business Machines
+* Copyright (C) 2004-2008, International Business Machines
* Corporation and others. All Rights Reserved.
*******************************************************************************
*
@@ -32,13 +32,13 @@
# define uloc_getDefault uloc_getDefault_SYSTEM_API_DO_NOT_USE
# define uloc_setDefault uloc_setDefault_SYSTEM_API_DO_NOT_USE
# else
-# define u_cleanup_3_6 u_cleanup_SYSTEM_API_DO_NOT_USE
-# define u_setAtomicIncDecFunctions_3_6 u_setAtomicIncDecFunctions_SYSTEM_API_DO_NOT_USE
-# define u_setMemoryFunctions_3_6 u_setMemoryFunctions_SYSTEM_API_DO_NOT_USE
-# define u_setMutexFunctions_3_6 u_setMutexFunctions_SYSTEM_API_DO_NOT_USE
-# define ucnv_setDefaultName_3_6 ucnv_setDefaultName_SYSTEM_API_DO_NOT_USE
-# define uloc_getDefault_3_6 uloc_getDefault_SYSTEM_API_DO_NOT_USE
-# define uloc_setDefault_3_6 uloc_setDefault_SYSTEM_API_DO_NOT_USE
+# define u_cleanup_4_0 u_cleanup_SYSTEM_API_DO_NOT_USE
+# define u_setAtomicIncDecFunctions_4_0 u_setAtomicIncDecFunctions_SYSTEM_API_DO_NOT_USE
+# define u_setMemoryFunctions_4_0 u_setMemoryFunctions_SYSTEM_API_DO_NOT_USE
+# define u_setMutexFunctions_4_0 u_setMutexFunctions_SYSTEM_API_DO_NOT_USE
+# define ucnv_setDefaultName_4_0 ucnv_setDefaultName_SYSTEM_API_DO_NOT_USE
+# define uloc_getDefault_4_0 uloc_getDefault_SYSTEM_API_DO_NOT_USE
+# define uloc_setDefault_4_0 uloc_setDefault_SYSTEM_API_DO_NOT_USE
# endif /* U_DISABLE_RENAMING */
#endif /* U_HIDE_SYSTEM_API */
diff --git a/icuSources/common/unicode/utext.h b/icuSources/common/unicode/utext.h
index 5918bf50..866b8503 100644
--- a/icuSources/common/unicode/utext.h
+++ b/icuSources/common/unicode/utext.h
@@ -1,7 +1,7 @@
/*
*******************************************************************************
*
-* Copyright (C) 2004-2006, International Business Machines
+* Copyright (C) 2004-2008, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
@@ -146,7 +146,7 @@
U_CDECL_BEGIN
struct UText;
-typedef struct UText UText; /**< C typedef for struct UText. @draft ICU 3.6 */
+typedef struct UText UText; /**< C typedef for struct UText. @stable ICU 3.6 */
/***************************************************************************************
@@ -174,9 +174,9 @@ typedef struct UText UText; /**< C typedef for struct UText. @draft ICU 3.6 */
* returned by this function, and may be safely used again in
* a subsequent utext_open.
*
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT UText * U_EXPORT2
+U_STABLE UText * U_EXPORT2
utext_close(UText *ut);
@@ -199,9 +199,9 @@ utext_close(UText *ut);
* @param status Errors are returned here.
* @return A pointer to the UText. If a pre-allocated UText was provided, it
* will always be used and returned.
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT UText * U_EXPORT2
+U_STABLE UText * U_EXPORT2
utext_openUTF8(UText *ut, const char *s, int64_t length, UErrorCode *status);
@@ -217,9 +217,9 @@ utext_openUTF8(UText *ut, const char *s, int64_t length, UErrorCode *status);
* @param status Errors are returned here.
* @return A pointer to the UText. If a pre-allocated UText was provided, it
* will always be used and returned.
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT UText * U_EXPORT2
+U_STABLE UText * U_EXPORT2
utext_openUChars(UText *ut, const UChar *s, int64_t length, UErrorCode *status);
@@ -234,10 +234,10 @@ utext_openUChars(UText *ut, const UChar *s, int64_t length, UErrorCode *status);
* @param status Errors are returned here.
* @return Pointer to the UText. If a UText was supplied as input, this
* will always be used and returned.
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT UText * U_EXPORT2
-utext_openUnicodeString(UText *ut, UnicodeString *s, UErrorCode *status);
+U_STABLE UText * U_EXPORT2
+utext_openUnicodeString(UText *ut, U_NAMESPACE_QUALIFIER UnicodeString *s, UErrorCode *status);
/**
@@ -250,10 +250,10 @@ utext_openUnicodeString(UText *ut, UnicodeString *s, UErrorCode *status);
* @param status Errors are returned here.
* @return Pointer to the UText. If a UText was supplied as input, this
* will always be used and returned.
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT UText * U_EXPORT2
-utext_openConstUnicodeString(UText *ut, const UnicodeString *s, UErrorCode *status);
+U_STABLE UText * U_EXPORT2
+utext_openConstUnicodeString(UText *ut, const U_NAMESPACE_QUALIFIER UnicodeString *s, UErrorCode *status);
/**
@@ -266,10 +266,10 @@ utext_openConstUnicodeString(UText *ut, const UnicodeString *s, UErrorCode *stat
* @return Pointer to the UText. If a UText was supplied as input, this
* will always be used and returned.
* @see Replaceable
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT UText * U_EXPORT2
-utext_openReplaceable(UText *ut, Replaceable *rep, UErrorCode *status);
+U_STABLE UText * U_EXPORT2
+utext_openReplaceable(UText *ut, U_NAMESPACE_QUALIFIER Replaceable *rep, UErrorCode *status);
/**
* Open a UText implementation over an ICU CharacterIterator.
@@ -281,10 +281,10 @@ utext_openReplaceable(UText *ut, Replaceable *rep, UErrorCode *status);
* @return Pointer to the UText. If a UText was supplied as input, this
* will always be used and returned.
* @see Replaceable
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT UText * U_EXPORT2
-utext_openCharacterIterator(UText *ut, CharacterIterator *ic, UErrorCode *status);
+U_STABLE UText * U_EXPORT2
+utext_openCharacterIterator(UText *ut, U_NAMESPACE_QUALIFIER CharacterIterator *ic, UErrorCode *status);
#endif
@@ -344,9 +344,9 @@ utext_openCharacterIterator(UText *ut, CharacterIterator *ic, UErrorCode *status
* will be returned if the text provider is unable to clone the
* original text.
* @return The newly created clone, or NULL if the clone operation failed.
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT UText * U_EXPORT2
+U_STABLE UText * U_EXPORT2
utext_clone(UText *dest, const UText *src, UBool deep, UBool readOnly, UErrorCode *status);
@@ -359,9 +359,9 @@ utext_clone(UText *dest, const UText *src, UBool deep, UBool readOnly, UErrorCod
* @param a The first of the two UTexts to compare.
* @param b The other UText to be compared.
* @return TRUE if the two UTexts are equal.
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
-U_DRAFT UBool U_EXPORT2
+U_STABLE UBool U_EXPORT2
utext_equals(const UText *a, const UText *b);
@@ -380,9 +380,9 @@ utext_equals(const UText *a, const UText *b);
* @param ut the text to be accessed.
* @return the length of the text, expressed in native units.
*
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT int64_t U_EXPORT2
+U_STABLE int64_t U_EXPORT2
utext_nativeLength(UText *ut);
/**
@@ -396,9 +396,9 @@ utext_nativeLength(UText *ut);
*
* @param ut the text to be accessed.
* @return TRUE if determining the length of the text could be time consuming.
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT UBool U_EXPORT2
+U_STABLE UBool U_EXPORT2
utext_isLengthExpensive(const UText *ut);
/**
@@ -424,9 +424,9 @@ utext_isLengthExpensive(const UText *ut);
* to other than the first unit of a multi-unit character, it will be adjusted
* to the start of the character.
* @return the code point at the specified index.
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT UChar32 U_EXPORT2
+U_STABLE UChar32 U_EXPORT2
utext_char32At(UText *ut, int64_t nativeIndex);
@@ -438,9 +438,9 @@ utext_char32At(UText *ut, int64_t nativeIndex);
*
* @param ut the text to be accessed.
* @return the Unicode code point at the current iterator position.
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT UChar32 U_EXPORT2
+U_STABLE UChar32 U_EXPORT2
utext_current32(UText *ut);
@@ -460,9 +460,9 @@ utext_current32(UText *ut);
* @param ut the text to be accessed.
* @return the Unicode code point at the iteration position.
* @see UTEXT_NEXT32
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT UChar32 U_EXPORT2
+U_STABLE UChar32 U_EXPORT2
utext_next32(UText *ut);
@@ -481,9 +481,9 @@ utext_next32(UText *ut);
* @return the previous UChar32 code point, or U_SENTINEL (-1)
* if the iteration has reached the start of the text.
* @see UTEXT_PREVIOUS32
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT UChar32 U_EXPORT2
+U_STABLE UChar32 U_EXPORT2
utext_previous32(UText *ut);
@@ -503,9 +503,9 @@ utext_previous32(UText *ut);
* @param nativeIndex Iteration index, in the native units of the text provider.
* @return Code point which starts at or before index,
* or U_SENTINEL (-1) if it is out of bounds.
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT UChar32 U_EXPORT2
+U_STABLE UChar32 U_EXPORT2
utext_next32From(UText *ut, int64_t nativeIndex);
@@ -523,9 +523,9 @@ utext_next32From(UText *ut, int64_t nativeIndex);
* @return Code point preceding the one at the initial index,
* or U_SENTINEL (-1) if it is out of bounds.
*
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT UChar32 U_EXPORT2
+U_STABLE UChar32 U_EXPORT2
utext_previous32From(UText *ut, int64_t nativeIndex);
/**
@@ -538,9 +538,9 @@ utext_previous32From(UText *ut, int64_t nativeIndex);
*
* @param ut the text to be accessed.
* @return the current index position, in the native units of the text provider.
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT int64_t U_EXPORT2
+U_STABLE int64_t U_EXPORT2
utext_getNativeIndex(const UText *ut);
/**
@@ -564,9 +564,9 @@ utext_getNativeIndex(const UText *ut);
*
* @param ut the text to be accessed.
* @param nativeIndex the native unit index of the new iteration position.
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT void U_EXPORT2
+U_STABLE void U_EXPORT2
utext_setNativeIndex(UText *ut, int64_t nativeIndex);
/**
@@ -583,9 +583,9 @@ utext_setNativeIndex(UText *ut, int64_t nativeIndex);
* @param delta the signed number of code points to move the iteration position.
* @return TRUE if the position could be moved the requested number of positions while
* staying within the range [0 - text length].
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT UBool U_EXPORT2
+U_STABLE UBool U_EXPORT2
utext_moveIndex32(UText *ut, int32_t delta);
/**
@@ -608,9 +608,9 @@ utext_moveIndex32(UText *ut, int32_t delta);
* @param ut the text to be accessed
* @return the native index of the character preceeding the current index position,
* or zero if the current position is at the start of the text.
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
-U_DRAFT int64_t U_EXPORT2
+U_STABLE int64_t U_EXPORT2
utext_getPreviousNativeIndex(UText *ut);
@@ -646,16 +646,15 @@ utext_getPreviousNativeIndex(UText *ut);
* buffer was too small. Returns number of UChars for preflighting.
* @return Number of UChars in the data to be extracted. Does not include a trailing NUL.
*
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT int32_t U_EXPORT2
+U_STABLE int32_t U_EXPORT2
utext_extract(UText *ut,
int64_t nativeStart, int64_t nativeLimit,
UChar *dest, int32_t destCapacity,
UErrorCode *status);
-#ifndef U_HIDE_DRAFT_API
/************************************************************************************
*
* #define inline versions of selected performance-critical text access functions
@@ -680,7 +679,7 @@ utext_extract(UText *ut,
* Returns U_SENTINEL (-1) if the position is at the end of the
* text.
*
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
#define UTEXT_NEXT32(ut) \
((ut)->chunkOffset < (ut)->chunkLength && ((ut)->chunkContents)[(ut)->chunkOffset]<0xd800 ? \
@@ -694,7 +693,7 @@ utext_extract(UText *ut,
* This is a pre-decrement operation.
* Returns U_SENTINEL (-1) if the position is at the start of the text.
*
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
#define UTEXT_PREVIOUS32(ut) \
((ut)->chunkOffset > 0 && \
@@ -711,7 +710,7 @@ utext_extract(UText *ut,
* the corresponding UChar (UTF-16) index.
* The returned position will always be aligned to a code point boundary.
*
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
#define UTEXT_GETNATIVEINDEX(ut) \
((ut)->chunkOffset <= (ut)->nativeIndexingLimit? \
@@ -727,7 +726,7 @@ utext_extract(UText *ut,
* If the index is out of range, it will be pinned to be within
* the range of the input text.
*
- * @draft ICU 3.8
+ * @stable ICU 4.0
*/
#define UTEXT_SETNATIVEINDEX(ut, ix) \
{ int64_t __offset = (ix) - (ut)->chunkNativeStart; \
@@ -738,8 +737,6 @@ utext_extract(UText *ut,
-#endif
-
/************************************************************************************
*
* Functions related to writing or modifying the text.
@@ -764,10 +761,10 @@ utext_extract(UText *ut,
* @see utext_freeze()
* @see utext_replace()
* @see utext_copy()
- * @draft ICU 3.4
+ * @stable ICU 3.4
*
*/
-U_DRAFT UBool U_EXPORT2
+U_STABLE UBool U_EXPORT2
utext_isWritable(const UText *ut);
@@ -777,9 +774,9 @@ utext_isWritable(const UText *ut);
*
* @param ut The UText to be tested
* @return TRUE if the underlying text includes meta data.
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT UBool U_EXPORT2
+U_STABLE UBool U_EXPORT2
utext_hasMetaData(const UText *ut);
@@ -808,9 +805,9 @@ utext_hasMetaData(const UText *ut);
* @return The signed number of (native) storage units by which
* the length of the text expanded or contracted.
*
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT int32_t U_EXPORT2
+U_STABLE int32_t U_EXPORT2
utext_replace(UText *ut,
int64_t nativeStart, int64_t nativeLimit,
const UChar *replacementText, int32_t replacementLength,
@@ -848,9 +845,9 @@ utext_replace(UText *ut,
* @param move If TRUE, then the substring is moved, not copied/duplicated.
* @param status receives any error status. Possible errors include U_NO_WRITE_PERMISSION
*
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT void U_EXPORT2
+U_STABLE void U_EXPORT2
utext_copy(UText *ut,
int64_t nativeStart, int64_t nativeLimit,
int64_t destIndex,
@@ -877,43 +874,42 @@ utext_copy(UText *ut,
*
* @param ut The UText to be frozen.
* @see utext_isWritable()
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
-U_DRAFT void U_EXPORT2
+U_STABLE void U_EXPORT2
utext_freeze(UText *ut);
-#ifndef U_HIDE_DRAFT_API
/**
* UText provider properties (bit field indexes).
*
* @see UText
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
enum {
/**
* It is potentially time consuming for the provider to determine the length of the text.
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
UTEXT_PROVIDER_LENGTH_IS_EXPENSIVE = 1,
/**
* Text chunks remain valid and usable until the text object is modified or
* deleted, not just until the next time the access() function is called
* (which is the default).
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
UTEXT_PROVIDER_STABLE_CHUNKS = 2,
/**
* The provider supports modifying the text via the replace() and copy()
* functions.
* @see Replaceable
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
UTEXT_PROVIDER_WRITABLE = 3,
/**
* There is meta data associated with the text.
* @see Replaceable::hasMetaData()
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
UTEXT_PROVIDER_HAS_META_DATA = 4,
/**
@@ -921,7 +917,7 @@ enum {
* Generally occurs as the result of a deep clone of the UText.
* When closing the UText, the associated text must
* also be closed/deleted/freed/ whatever is appropriate.
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
UTEXT_PROVIDER_OWNS_TEXT = 5
};
@@ -961,7 +957,7 @@ enum {
* original text.
* @return The newly created clone, or NULL if the clone operation failed.
*
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
typedef UText * U_CALLCONV
UTextClone(UText *dest, const UText *src, UBool deep, UErrorCode *status);
@@ -973,7 +969,7 @@ UTextClone(UText *dest, const UText *src, UBool deep, UErrorCode *status);
* @param ut the UText to get the length of.
* @return the length, in the native units of the original text string.
* @see UText
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
typedef int64_t U_CALLCONV
UTextNativeLength(UText *ut);
@@ -1001,7 +997,7 @@ UTextNativeLength(UText *ut);
* (the requested index is out of bounds).
*
* @see UText
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
typedef UBool U_CALLCONV
UTextAccess(UText *ut, int64_t nativeIndex, UBool forward);
@@ -1031,7 +1027,7 @@ UTextAccess(UText *ut, int64_t nativeIndex, UBool forward);
* preflighting.
* @return Number of UChars in the data. Does not include a trailing NUL.
*
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
typedef int32_t U_CALLCONV
UTextExtract(UText *ut,
@@ -1066,7 +1062,7 @@ UTextExtract(UText *ut,
* @return The signed number of (native) storage units by which
* the length of the text expanded or contracted.
*
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
typedef int32_t U_CALLCONV
UTextReplace(UText *ut,
@@ -1100,7 +1096,7 @@ UTextReplace(UText *ut,
* @param move If TRUE, then the substring is moved, not copied/duplicated.
* @param status receives any error status. Possible errors include U_NO_WRITE_PERMISSION
*
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
typedef void U_CALLCONV
UTextCopy(UText *ut,
@@ -1120,7 +1116,7 @@ UTextCopy(UText *ut,
* @return Absolute (native) index corresponding to chunkOffset in the current chunk.
* The returned native index should always be to a code point boundary.
*
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
typedef int64_t U_CALLCONV
UTextMapOffsetToNative(const UText *ut);
@@ -1138,7 +1134,7 @@ UTextMapOffsetToNative(const UText *ut);
* @return Chunk-relative UTF-16 offset corresponding to the specified native
* index.
*
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
typedef int32_t U_CALLCONV
UTextMapNativeIndexToUTF16(const UText *ut, int64_t nativeIndex);
@@ -1159,7 +1155,7 @@ UTextMapNativeIndexToUTF16(const UText *ut, int64_t nativeIndex);
*
* @param ut A UText object to be closed.
*
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
typedef void U_CALLCONV
UTextClose(UText *ut);
@@ -1172,7 +1168,7 @@ UTextClose(UText *ut);
* Each text provider implementation must provide an
* actual table that is initialized with the appropriate functions
* for the type of text being handled.
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
struct UTextFuncs {
/**
@@ -1187,7 +1183,7 @@ struct UTextFuncs {
* 4 pointers,
* 2 64-bit fields
* in sequence.
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
int32_t tableSize;
@@ -1196,14 +1192,14 @@ struct UTextFuncs {
* Do not use, reserved for use by the UText framework only.
* @internal
*/
- int32_t reserved1, reserved2, reserved3;
+ int32_t reserved1, /** @internal */ reserved2, /** @internal */ reserved3;
/**
* (public) Function pointer for UTextClone
*
* @see UTextClone
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
UTextClone *clone;
@@ -1212,7 +1208,7 @@ struct UTextFuncs {
* May be expensive to compute!
*
* @see UTextLength
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
UTextNativeLength *nativeLength;
@@ -1220,7 +1216,7 @@ struct UTextFuncs {
* (public) Function pointer for UTextAccess.
*
* @see UTextAccess
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
UTextAccess *access;
@@ -1228,7 +1224,7 @@ struct UTextFuncs {
* (public) Function pointer for UTextExtract.
*
* @see UTextExtract
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
UTextExtract *extract;
@@ -1236,7 +1232,7 @@ struct UTextFuncs {
* (public) Function pointer for UTextReplace.
*
* @see UTextReplace
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
UTextReplace *replace;
@@ -1244,7 +1240,7 @@ struct UTextFuncs {
* (public) Function pointer for UTextCopy.
*
* @see UTextCopy
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
UTextCopy *copy;
@@ -1252,7 +1248,7 @@ struct UTextFuncs {
* (public) Function pointer for UTextMapOffsetToNative.
*
* @see UTextMapOffsetToNative
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
UTextMapOffsetToNative *mapOffsetToNative;
@@ -1260,7 +1256,7 @@ struct UTextFuncs {
* (public) Function pointer for UTextMapNativeIndexToUTF16.
*
* @see UTextMapNativeIndexToUTF16
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
UTextMapNativeIndexToUTF16 *mapNativeIndexToUTF16;
@@ -1268,7 +1264,7 @@ struct UTextFuncs {
* (public) Function pointer for UTextClose.
*
* @see UTextClose
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
UTextClose *close;
@@ -1291,11 +1287,12 @@ struct UTextFuncs {
UTextClose *spare3;
};
+/**
+ * Function dispatch table for UText
+ * @see UTextFuncs
+ */
typedef struct UTextFuncs UTextFuncs;
-#endif
-
-#ifndef U_HIDE_DRAFT_API
/**
* UText struct. Provides the interface between the generic UText access code
* and the UText provider code that works on specific kinds of
@@ -1305,7 +1302,7 @@ typedef struct UTextFuncs UTextFuncs;
* to pass text data to ICU services will have no need to view the
* internals of the UText structs that they open.
*
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
struct UText {
/**
@@ -1334,7 +1331,7 @@ struct UText {
/**
* Text provider properties. This set of flags is maintainted by the
* text provider implementation.
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
int32_t providerProperties;
@@ -1342,7 +1339,7 @@ struct UText {
* (public) sizeOfStruct=sizeof(UText)
* Allows possible backward compatible extension.
*
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
int32_t sizeOfStruct;
@@ -1352,13 +1349,13 @@ struct UText {
/**
* (protected) Native index of the first character position following
* the current chunk.
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
int64_t chunkNativeLimit;
/**
* (protected) Size in bytes of the extra space (pExtra).
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
int32_t extraSize;
@@ -1367,7 +1364,7 @@ struct UText {
* chunk (UTF-16) indexing correspond. For UTF-16 sources, value
* will be equal to chunkLength.
*
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
int32_t nativeIndexingLimit;
@@ -1375,20 +1372,20 @@ struct UText {
/**
* (protected) Native index of the first character in the text chunk.
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
int64_t chunkNativeStart;
/**
* (protected) Current iteration position within the text chunk (UTF-16 buffer).
* This is the index to the character that will be returned by utext_next32().
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
int32_t chunkOffset;
/**
* (protected) Length the text chunk (UTF-16 buffer), in UChars.
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
int32_t chunkLength;
@@ -1399,20 +1396,20 @@ struct UText {
* (protected) pointer to a chunk of text in UTF-16 format.
* May refer either to original storage of the source of the text, or
* if conversion was required, to a buffer owned by the UText.
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
const UChar *chunkContents;
/**
* (public) Pointer to Dispatch table for accessing functions for this UText.
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
- UTextFuncs *pFuncs;
-
+ const UTextFuncs *pFuncs;
+
/**
* (protected) Pointer to additional space requested by the
* text provider during the utext_open operation.
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
void *pExtra;
@@ -1420,7 +1417,7 @@ struct UText {
* (protected) Pointer to string or text-containin object or similar.
* This is the source of the text that this UText is wrapping, in a format
* that is known to the text provider functions.
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
const void *context;
@@ -1429,19 +1426,19 @@ struct UText {
/**
* (protected) Pointer fields available for use by the text provider.
* Not used by UText common code.
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
const void *p;
/**
* (protected) Pointer fields available for use by the text provider.
* Not used by UText common code.
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
const void *q;
/**
* (protected) Pointer fields available for use by the text provider.
* Not used by UText common code.
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
const void *r;
@@ -1459,21 +1456,21 @@ struct UText {
/**
* (protected) Integer field reserved for use by the text provider.
* Not used by the UText framework, or by the client (user) of the UText.
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
int64_t a;
/**
* (protected) Integer field reserved for use by the text provider.
* Not used by the UText framework, or by the client (user) of the UText.
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
int32_t b;
/**
* (protected) Integer field reserved for use by the text provider.
* Not used by the UText framework, or by the client (user) of the UText.
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
int32_t c;
@@ -1500,7 +1497,6 @@ struct UText {
int32_t privC;
};
-#endif
/**
* Common function for use by Text Provider implementations to allocate and/or initialize
@@ -1516,9 +1512,9 @@ struct UText {
* additional storage.
* @param status Errors are returned here.
* @return pointer to the UText, allocated if necessary, with extra space set up if requested.
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
-U_DRAFT UText * U_EXPORT2
+U_STABLE UText * U_EXPORT2
utext_setup(UText *ut, int32_t extraSpace, UErrorCode *status);
/**
@@ -1529,14 +1525,13 @@ utext_setup(UText *ut, int32_t extraSpace, UErrorCode *status);
enum {
UTEXT_MAGIC = 0x345ad82c
};
-#ifndef U_HIDE_DRAFT_API
/**
* initializer to be used with local (stack) instances of a UText
* struct. UText structs must be initialized before passing
* them to one of the utext_open functions.
*
- * @draft ICU 3.6
+ * @stable ICU 3.6
*/
#define UTEXT_INITIALIZER { \
UTEXT_MAGIC, /* magic */ \
@@ -1560,8 +1555,6 @@ enum {
}
-#endif /* U_HIDE_DRAFT_API */
-
U_CDECL_END
diff --git a/icuSources/common/unicode/utf.h b/icuSources/common/unicode/utf.h
index 2dfef63d..1682283c 100644
--- a/icuSources/common/unicode/utf.h
+++ b/icuSources/common/unicode/utf.h
@@ -1,7 +1,7 @@
/*
*******************************************************************************
*
-* Copyright (C) 1999-2006, International Business Machines
+* Copyright (C) 1999-2007, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
@@ -95,7 +95,7 @@
* code point values (0..U+10ffff). They are indicated with negative values instead.
*
* For more information see the ICU User Guide Strings chapter
- * (http://icu.sourceforge.net/userguide/strings.html).
+ * (http://icu-project.org/userguide/strings.html).
*
* Usage:
* ICU coding guidelines for if() statements should be followed when using these macros.
diff --git a/icuSources/common/unicode/utf16.h b/icuSources/common/unicode/utf16.h
index cd8c5c1e..719bc043 100644
--- a/icuSources/common/unicode/utf16.h
+++ b/icuSources/common/unicode/utf16.h
@@ -1,7 +1,7 @@
/*
*******************************************************************************
*
-* Copyright (C) 1999-2006, International Business Machines
+* Copyright (C) 1999-2007, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
@@ -23,7 +23,7 @@
* and some common definitions.
*
* For more information see utf.h and the ICU User Guide Strings chapter
- * (http://icu.sourceforge.net/userguide/strings.html).
+ * (http://icu-project.org/userguide/strings.html).
*
* Usage:
* ICU coding guidelines for if() statements should be followed when using these macros.
diff --git a/icuSources/common/unicode/utf8.h b/icuSources/common/unicode/utf8.h
index ff788403..1142c44d 100644
--- a/icuSources/common/unicode/utf8.h
+++ b/icuSources/common/unicode/utf8.h
@@ -1,7 +1,7 @@
/*
*******************************************************************************
*
-* Copyright (C) 1999-2006, International Business Machines
+* Copyright (C) 1999-2007, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
@@ -23,7 +23,7 @@
* and some common definitions.
*
* For more information see utf.h and the ICU User Guide Strings chapter
- * (http://icu.sourceforge.net/userguide/strings.html).
+ * (http://icu-project.org/userguide/strings.html).
*
* Usage:
* ICU coding guidelines for if() statements should be followed when using these macros.
diff --git a/icuSources/common/unicode/utrace.h b/icuSources/common/unicode/utrace.h
index bacca6df..3c8be9f7 100644
--- a/icuSources/common/unicode/utrace.h
+++ b/icuSources/common/unicode/utrace.h
@@ -26,6 +26,12 @@
/**
* \file
* \brief C API: Definitions for ICU tracing/logging.
+ *
+ * This provides API for debugging the internals of ICU without the use of
+ * a traditional debugger.
+ *
+ * By default, tracing is disabled in ICU. If you need to debug ICU with
+ * tracing, please compile ICU with the --enable-tracing configure option.
*/
U_CDECL_BEGIN
diff --git a/icuSources/common/unicode/utypes.h b/icuSources/common/unicode/utypes.h
index 7aceb27f..12977ed5 100644
--- a/icuSources/common/unicode/utypes.h
+++ b/icuSources/common/unicode/utypes.h
@@ -1,6 +1,6 @@
/*
**********************************************************************
-* Copyright (C) 1996-2006, International Business Machines
+* Copyright (C) 1996-2008, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
*
@@ -190,10 +190,10 @@
* Defined as a literal, not a string.
* Tricky Preprocessor use - ## operator replaces macro paramters with the literal string
* from the corresponding macro invocation, _before_ other macro substitutions.
- * Need a nested #defines to get the actual version numbers rather than
+ * Need a nested \#defines to get the actual version numbers rather than
* the literal text U_ICU_VERSION_MAJOR_NUM into the name.
* The net result will be something of the form
- * #define U_ICU_ENTRY_POINT icudt19_dat
+ * \#define U_ICU_ENTRY_POINT icudt19_dat
* @stable ICU 2.4
*/
#define U_ICUDATA_ENTRY_POINT U_DEF2_ICUDATA_ENTRY_POINT(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM)
@@ -374,7 +374,7 @@ typedef void* UClassID;
* \def U_TOOLUTIL_API
* Set to export library symbols from inside the toolutil library,
* and to import them from outside.
- * @draft ICU 3.4
+ * @stable ICU 3.4
*/
#if defined(U_COMBINED_IMPLEMENTATION)
@@ -486,9 +486,9 @@ typedef void* UClassID;
*
* Note: This is currently only done on Windows because
* some Linux/Unix compilers have problems with defining global new/delete.
- * On Windows, WIN32 is defined, and it is _MSC_VER>=1200 for MSVC 6.0 and higher.
+ * On Windows, U_WINDOWS is defined, and it is _MSC_VER>=1200 for MSVC 6.0 and higher.
*/
-#if defined(XP_CPLUSPLUS) && defined(U_WINDOWS) && (_MSC_VER>=1200) && U_DEBUG && (defined(U_COMMON_IMPLEMENTATION) || defined(U_I18N_IMPLEMENTATION) || defined(U_LAYOUT_IMPLEMENTATION) || defined(U_USTDIO_IMPLEMENTATION))
+#if defined(XP_CPLUSPLUS) && defined(U_WINDOWS) && U_DEBUG && U_OVERRIDE_CXX_ALLOCATION && (_MSC_VER>=1200) && !defined(U_STATIC_IMPLEMENTATION) && (defined(U_COMMON_IMPLEMENTATION) || defined(U_I18N_IMPLEMENTATION) || defined(U_IO_IMPLEMENTATION) || defined(U_LAYOUT_IMPLEMENTATION) || defined(U_LAYOUTEX_IMPLEMENTATION))
#ifndef U_HIDE_INTERNAL_API
/**
@@ -503,6 +503,10 @@ operator new(size_t /*size*/) {
return q;
}
+#ifdef _Ret_bytecap_
+/* This is only needed to suppress a Visual C++ 2008 warning for operator new[]. */
+_Ret_bytecap_(_Size)
+#endif
/**
* Global operator new[], defined only inside ICU4C, must not be used.
* Crashes intentionally.
@@ -678,6 +682,10 @@ typedef enum UErrorCode {
U_UNMATCHED_BRACES, /**< Braces do not match in message pattern */
U_UNSUPPORTED_PROPERTY, /**< UNUSED as of ICU 2.4 */
U_UNSUPPORTED_ATTRIBUTE, /**< UNUSED as of ICU 2.4 */
+ U_ARGUMENT_TYPE_MISMATCH, /**< Argument name and argument index mismatch in MessageFormat functions */
+ U_DUPLICATE_KEYWORD, /**< Duplicate keyword in PluralFormat */
+ U_UNDEFINED_KEYWORD, /**< Undefined Pluarl keyword */
+ U_DEFAULT_KEYWORD_MISSING, /**< Missing DEFAULT rule in plural rules */
U_FMT_PARSE_ERROR_LIMIT, /**< The limit for format library errors */
/*
@@ -718,6 +726,12 @@ typedef enum UErrorCode {
U_REGEX_INVALID_FLAG, /**< Invalid value for match mode flags. */
U_REGEX_LOOK_BEHIND_LIMIT, /**< Look-Behind pattern matches must have a bounded maximum length. */
U_REGEX_SET_CONTAINS_STRING, /**< Regexps cannot have UnicodeSets containing strings.*/
+ U_REGEX_OCTAL_TOO_BIG, /**< Octal character constants must be <= 0377. */
+ U_REGEX_MISSING_CLOSE_BRACKET, /**< Missing closing bracket on a bracket expression. */
+ U_REGEX_INVALID_RANGE, /**< In a character range [x-y], x is greater than y. */
+ U_REGEX_STACK_OVERFLOW, /**< Regular expression backtrack stack overflow. */
+ U_REGEX_TIME_OUT, /**< Maximum allowed match time exceeded */
+ U_REGEX_STOPPED_BY_CALLER, /**< Matching operation aborted by user callback fn. */
U_REGEX_ERROR_LIMIT, /**< This must always be the last value to indicate the limit for regexp errors */
/*
@@ -732,6 +746,7 @@ typedef enum UErrorCode {
U_IDNA_VERIFICATION_ERROR,
U_IDNA_LABEL_TOO_LONG_ERROR,
U_IDNA_ZERO_LENGTH_LABEL_ERROR,
+ U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR,
U_IDNA_ERROR_LIMIT,
/*
* Aliases for StringPrep
diff --git a/icuSources/common/unicode/uversion.h b/icuSources/common/unicode/uversion.h
index 67e57a8c..5bf7fda5 100644
--- a/icuSources/common/unicode/uversion.h
+++ b/icuSources/common/unicode/uversion.h
@@ -1,6 +1,6 @@
/*
*******************************************************************************
-* Copyright (C) 2000-2006, International Business Machines
+* Copyright (C) 2000-2008, International Business Machines
* Corporation and others. All Rights Reserved.
*******************************************************************************
*
@@ -35,6 +35,7 @@
* that it contains the new major/minor combination
* source/i18n/i18n.vcproj - same as for the common.vcproj
* source/layout/layout.vcproj - same as for the common.vcproj
+ * source/layoutex/layoutex.vcproj - same
* source/stubdata/stubdata.vcproj - same as for the common.vcproj
* source/io/io.vcproj - same as for the common.vcproj
* source/data/makedata.mak - change U_ICUDATA_NAME so that it contains
@@ -50,7 +51,7 @@
* @stable ICU 2.4
*/
#define U_COPYRIGHT_STRING \
- " Copyright (C) 2005, International Business Machines Corporation and others. All Rights Reserved. "
+ " Copyright (C) 2008, International Business Machines Corporation and others. All Rights Reserved. "
/** Maximum length of the copyright string.
* @stable ICU 2.4
@@ -61,13 +62,13 @@
* This value will change in the subsequent releases of ICU
* @stable ICU 2.4
*/
-#define U_ICU_VERSION_MAJOR_NUM 3
+#define U_ICU_VERSION_MAJOR_NUM 4
/** The current ICU minor version as an integer.
* This value will change in the subsequent releases of ICU
* @stable ICU 2.6
*/
-#define U_ICU_VERSION_MINOR_NUM 6
+#define U_ICU_VERSION_MINOR_NUM 0
/** The current ICU patchlevel version as an integer.
* This value will change in the subsequent releases of ICU
@@ -87,20 +88,20 @@
* This value will change in the subsequent releases of ICU
* @stable ICU 2.6
*/
-#define U_ICU_VERSION_SUFFIX _3_6
+#define U_ICU_VERSION_SUFFIX _4_0
/** The current ICU library version as a dotted-decimal string. The patchlevel
* only appears in this string if it non-zero.
* This value will change in the subsequent releases of ICU
* @stable ICU 2.4
*/
-#define U_ICU_VERSION "3.6"
+#define U_ICU_VERSION "4.0"
/** The current ICU library major/minor version as a string without dots, for library name suffixes.
* This value will change in the subsequent releases of ICU
* @stable ICU 2.6
*/
-#define U_ICU_VERSION_SHORT "36"
+#define U_ICU_VERSION_SHORT "40"
/** An ICU version consists of up to 4 numbers from 0..255.
* @stable ICU 2.4
@@ -122,24 +123,67 @@
*/
typedef uint8_t UVersionInfo[U_MAX_VERSION_LENGTH];
-#if U_HAVE_NAMESPACE && defined(XP_CPLUSPLUS)
-#if U_DISABLE_RENAMING
-#define U_ICU_NAMESPACE icu
-namespace U_ICU_NAMESPACE { }
-#else
-#define U_ICU_NAMESPACE icu_3_6
-namespace U_ICU_NAMESPACE { }
-namespace icu = U_ICU_NAMESPACE;
-#endif
+/*===========================================================================*/
+/* C++ namespace if supported. Versioned unless versioning is disabled. */
+/*===========================================================================*/
-#ifndef U_USING_ICU_NAMESPACE
-# define U_USING_ICU_NAMESPACE 1
-#endif
+/**
+ * \def U_NAMESPACE_BEGIN
+ * This is used to begin a declaration of a public ICU C++ API.
+ * If the compiler doesn't support namespaces, this does nothing.
+ * @stable ICU 2.4
+ */
-#if U_USING_ICU_NAMESPACE
-U_NAMESPACE_USE
-#endif
+/**
+ * \def U_NAMESPACE_END
+ * This is used to end a declaration of a public ICU C++ API
+ * If the compiler doesn't support namespaces, this does nothing.
+ * @stable ICU 2.4
+ */
+/**
+ * \def U_NAMESPACE_USE
+ * This is used to specify that the rest of the code uses the
+ * public ICU C++ API namespace.
+ * If the compiler doesn't support namespaces, this does nothing.
+ * @stable ICU 2.4
+ */
+
+/**
+ * \def U_NAMESPACE_QUALIFIER
+ * This is used to qualify that a function or class is part of
+ * the public ICU C++ API namespace.
+ * If the compiler doesn't support namespaces, this does nothing.
+ * @stable ICU 2.4
+ */
+
+/* Define namespace symbols if the compiler supports it. */
+#if U_HAVE_NAMESPACE && defined(XP_CPLUSPLUS)
+# if U_DISABLE_RENAMING
+# define U_ICU_NAMESPACE icu
+ namespace U_ICU_NAMESPACE { }
+# else
+# define U_ICU_NAMESPACE icu_4_0
+ namespace U_ICU_NAMESPACE { }
+ namespace icu = U_ICU_NAMESPACE;
+# endif
+
+# define U_NAMESPACE_BEGIN namespace U_ICU_NAMESPACE {
+# define U_NAMESPACE_END }
+# define U_NAMESPACE_USE using namespace U_ICU_NAMESPACE;
+# define U_NAMESPACE_QUALIFIER U_ICU_NAMESPACE::
+
+# ifndef U_USING_ICU_NAMESPACE
+# define U_USING_ICU_NAMESPACE 1
+# endif
+# if U_USING_ICU_NAMESPACE
+ U_NAMESPACE_USE
+# endif
+#else
+# define U_NAMESPACE_BEGIN
+# define U_NAMESPACE_END
+# define U_NAMESPACE_USE
+# define U_NAMESPACE_QUALIFIER
#endif
@@ -222,16 +266,6 @@ u_getVersion(UVersionInfo versionArray);
*/
#define UCOL_BUILDER_VERSION 7
-/** *** Removed *** Instead we use the data we read from FractionalUCA.txt
- * This is the version of FractionalUCA.txt tailoring rules
- * Version 1 was in ICU 1.8.1. Version two contains canonical closure for
- * supplementary code points
- * Version 4 in ICU 2.2, following UCA=3.1.1d6, UCD=3.2.0
- * This value may change in the subsequent releases of ICU
- * @stable ICU 2.4
- */
-/*#define UCOL_FRACTIONAL_UCA_VERSION 4*/
-
/** This is the version of the tailorings
* This value may change in the subsequent releases of ICU
* @stable ICU 2.4
diff --git a/icuSources/common/uniset.cpp b/icuSources/common/uniset.cpp
index 50e78630..0f90aa54 100644
--- a/icuSources/common/uniset.cpp
+++ b/icuSources/common/uniset.cpp
@@ -1,6 +1,6 @@
/*
**********************************************************************
-* Copyright (C) 1999-2006, International Business Machines
+* Copyright (C) 1999-2008, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
* Date Name Description
@@ -14,14 +14,16 @@
#include "unicode/symtable.h"
#include "ruleiter.h"
#include "cmemory.h"
+#include "cstring.h"
#include "uhash.h"
#include "util.h"
#include "uvector.h"
#include "charstr.h"
#include "ustrfmt.h"
-#include "mutex.h"
#include "uassert.h"
#include "hash.h"
+#include "bmpset.h"
+#include "unisetspan.h"
// Define UChar constants using hex for EBCDIC compatibility
// Used #define to reduce private static exports and memory access time.
@@ -139,14 +141,22 @@ static int8_t U_CALLCONV compareUnicodeString(UHashTok t1, UHashTok t2) {
* Constructs an empty set.
*/
UnicodeSet::UnicodeSet() :
- len(1), capacity(1 + START_EXTRA), bufferCapacity(0),
- list(0), buffer(0), strings(0)
+ len(1), capacity(1 + START_EXTRA), list(0), bmpSet(0), buffer(0),
+ bufferCapacity(0), patLen(0), pat(NULL), strings(NULL), stringSpan(NULL),
+ fFlags(0)
{
+ UErrorCode status = U_ZERO_ERROR;
+ allocateStrings(status);
+ if (U_FAILURE(status)) {
+ return;
+ }
list = (UChar32*) uprv_malloc(sizeof(UChar32) * capacity);
if(list!=NULL){
list[0] = UNICODESET_HIGH;
+ } else { // If memory allocation failed, set to bogus state.
+ setToBogus();
+ return;
}
- allocateStrings();
_dbgct(this);
}
@@ -158,15 +168,23 @@ UnicodeSet::UnicodeSet() :
* @param end last character, inclusive, of range
*/
UnicodeSet::UnicodeSet(UChar32 start, UChar32 end) :
- len(1), capacity(1 + START_EXTRA), bufferCapacity(0),
- list(0), buffer(0), strings(0)
+ len(1), capacity(1 + START_EXTRA), list(0), bmpSet(0), buffer(0),
+ bufferCapacity(0), patLen(0), pat(NULL), strings(NULL), stringSpan(NULL),
+ fFlags(0)
{
+ UErrorCode status = U_ZERO_ERROR;
+ allocateStrings(status);
+ if (U_FAILURE(status)) {
+ return;
+ }
list = (UChar32*) uprv_malloc(sizeof(UChar32) * capacity);
if(list!=NULL){
list[0] = UNICODESET_HIGH;
+ complement(start, end);
+ } else { // If memory allocation failed, set to bogus state.
+ setToBogus();
+ return;
}
- allocateStrings();
- complement(start, end);
_dbgct(this);
}
@@ -175,13 +193,58 @@ UnicodeSet::UnicodeSet(UChar32 start, UChar32 end) :
*/
UnicodeSet::UnicodeSet(const UnicodeSet& o) :
UnicodeFilter(o),
- len(0), capacity(o.len + GROW_EXTRA), bufferCapacity(0),
- list(0), buffer(0), strings(0)
+ len(0), capacity(o.isFrozen() ? o.len : o.len + GROW_EXTRA), list(0),
+ bmpSet(0),
+ buffer(0), bufferCapacity(0),
+ patLen(0), pat(NULL), strings(NULL), stringSpan(NULL),
+ fFlags(0)
{
+ UErrorCode status = U_ZERO_ERROR;
+ allocateStrings(status);
+ if (U_FAILURE(status)) {
+ return;
+ }
list = (UChar32*) uprv_malloc(sizeof(UChar32) * capacity);
if(list!=NULL){
- allocateStrings();
*this = o;
+ } else { // If memory allocation failed, set to bogus state.
+ setToBogus();
+ return;
+ }
+ _dbgct(this);
+}
+
+// Copy-construct as thawed.
+UnicodeSet::UnicodeSet(const UnicodeSet& o, UBool /* asThawed */) :
+ UnicodeFilter(o),
+ len(0), capacity(o.len + GROW_EXTRA), list(0),
+ bmpSet(0),
+ buffer(0), bufferCapacity(0),
+ patLen(0), pat(NULL), strings(NULL), stringSpan(NULL),
+ fFlags(0)
+{
+ UErrorCode status = U_ZERO_ERROR;
+ allocateStrings(status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+ list = (UChar32*) uprv_malloc(sizeof(UChar32) * capacity);
+ if(list!=NULL){
+ // *this = o except for bmpSet and stringSpan
+ len = o.len;
+ uprv_memcpy(list, o.list, len*sizeof(UChar32));
+ if (strings != NULL && o.strings != NULL) {
+ strings->assign(*o.strings, cloneUnicodeString, status);
+ } else { // Invalid strings.
+ setToBogus();
+ return;
+ }
+ if (o.pat) {
+ setPattern(UnicodeString(o.pat, o.patLen));
+ }
+ } else { // If memory allocation failed, set to bogus state.
+ setToBogus();
+ return;
}
_dbgct(this);
}
@@ -192,25 +255,80 @@ UnicodeSet::UnicodeSet(const UnicodeSet& o) :
UnicodeSet::~UnicodeSet() {
_dbgdt(this); // first!
uprv_free(list);
+ delete bmpSet;
if (buffer) {
uprv_free(buffer);
}
delete strings;
+ delete stringSpan;
+ releasePattern();
}
/**
* Assigns this object to be a copy of another.
*/
UnicodeSet& UnicodeSet::operator=(const UnicodeSet& o) {
- ensureCapacity(o.len);
+ if (this == &o) {
+ return *this;
+ }
+ if (isFrozen()) {
+ return *this;
+ }
+ if (o.isBogus()) {
+ setToBogus();
+ return *this;
+ }
+ UErrorCode ec = U_ZERO_ERROR;
+ ensureCapacity(o.len, ec);
+ if (U_FAILURE(ec)) {
+ return *this; // There is no way to report this error :-(
+ }
len = o.len;
uprv_memcpy(list, o.list, len*sizeof(UChar32));
- UErrorCode ec = U_ZERO_ERROR;
- strings->assign(*o.strings, cloneUnicodeString, ec);
- pat = o.pat;
+ if (o.bmpSet == NULL) {
+ bmpSet = NULL;
+ } else {
+ bmpSet = new BMPSet(*o.bmpSet, list, len);
+ if (bmpSet == NULL) { // Check for memory allocation error.
+ setToBogus();
+ return *this;
+ }
+ }
+ if (strings != NULL && o.strings != NULL) {
+ strings->assign(*o.strings, cloneUnicodeString, ec);
+ } else { // Invalid strings.
+ setToBogus();
+ return *this;
+ }
+ if (o.stringSpan == NULL) {
+ stringSpan = NULL;
+ } else {
+ stringSpan = new UnicodeSetStringSpan(*o.stringSpan, *strings);
+ if (stringSpan == NULL) { // Check for memory allocation error.
+ setToBogus();
+ return *this;
+ }
+ }
+ releasePattern();
+ if (o.pat) {
+ setPattern(UnicodeString(o.pat, o.patLen));
+ }
return *this;
}
+/**
+ * Returns a copy of this object. All UnicodeMatcher objects have
+ * to support cloning in order to allow classes using
+ * UnicodeMatchers, such as Transliterator, to implement cloning.
+ */
+UnicodeFunctor* UnicodeSet::clone() const {
+ return new UnicodeSet(*this);
+}
+
+UnicodeFunctor *UnicodeSet::cloneAsThawed() const {
+ return new UnicodeSet(*this, TRUE);
+}
+
/**
* Compares the specified object with this set for equality. Returns
* true if the two sets
@@ -230,15 +348,6 @@ UBool UnicodeSet::operator==(const UnicodeSet& o) const {
return TRUE;
}
-/**
- * Returns a copy of this object. All UnicodeMatcher objects have
- * to support cloning in order to allow classes using
- * UnicodeMatchers, such as Transliterator, to implement cloning.
- */
-UnicodeFunctor* UnicodeSet::clone() const {
- return new UnicodeSet(*this);
-}
-
/**
* Returns the hash code value for this set.
*
@@ -258,20 +367,6 @@ int32_t UnicodeSet::hashCode(void) const {
// Public API
//----------------------------------------------------------------
-/**
- * Make this object represent the range start - end.
- * If end > start then this object is set to an
- * an empty range.
- *
- * @param start first character in the set, inclusive
- * @rparam end last character in the set, inclusive
- */
-UnicodeSet& UnicodeSet::set(UChar32 start, UChar32 end) {
- clear();
- complement(start, end);
- return *this;
-}
-
/**
* Returns the number of elements in this set (its cardinality),
* Note than the elements of a set may include both individual
@@ -310,11 +405,17 @@ UBool UnicodeSet::contains(UChar32 c) const {
//for (;;) {
// if (c < list[++i]) break;
//}
+ if (bmpSet != NULL) {
+ return bmpSet->contains(c);
+ }
+ if (stringSpan != NULL) {
+ return stringSpan->contains(c);
+ }
if (c >= UNICODESET_HIGH) { // Don't need to check LOW bound
return FALSE;
}
int32_t i = findCodePoint(c);
- return ((i & 1) != 0); // return true if odd
+ return (UBool)(i & 1); // return true if odd
}
/**
@@ -343,10 +444,10 @@ int32_t UnicodeSet::findCodePoint(UChar32 c) const {
return 0;
// High runner test. c is often after the last range, so an
// initial check for this condition pays off.
- if (len >= 2 && c >= list[len-2])
- return len-1;
int32_t lo = 0;
int32_t hi = len - 1;
+ if (lo >= hi || c >= list[hi-1])
+ return hi;
// invariant: c >= list[lo]
// invariant: c < list[hi]
for (;;) {
@@ -421,12 +522,8 @@ UBool UnicodeSet::containsAll(const UnicodeSet& c) const {
* @return true if the test condition is met
*/
UBool UnicodeSet::containsAll(const UnicodeString& s) const {
- UChar32 cp;
- for (int32_t i = 0; i < s.length(); i += UTF_CHAR_LENGTH(cp)) {
- cp = s.char32At(i);
- if (!contains(cp)) return FALSE;
- }
- return TRUE;
+ return (UBool)(span(s.getBuffer(), s.length(), USET_SPAN_CONTAINED) ==
+ s.length());
}
/**
@@ -472,12 +569,8 @@ UBool UnicodeSet::containsNone(const UnicodeSet& c) const {
* @return true if the test condition is met
*/
UBool UnicodeSet::containsNone(const UnicodeString& s) const {
- UChar32 cp;
- for (int32_t i = 0; i < s.length(); i += UTF_CHAR_LENGTH(cp)) {
- cp = s.char32At(i);
- if (contains(cp)) return FALSE;
- }
- return TRUE;
+ return (UBool)(span(s.getBuffer(), s.length(), USET_SPAN_NOT_CONTAINED) ==
+ s.length());
}
/**
@@ -495,7 +588,8 @@ UBool UnicodeSet::matchesIndexValue(uint8_t v) const {
* time zone month containment logic.)
*/
int32_t i;
- for (i=0; istart - end.
+ * If end > start then this object is set to an
+ * an empty range.
+ *
+ * @param start first character in the set, inclusive
+ * @rparam end last character in the set, inclusive
+ */
+UnicodeSet& UnicodeSet::set(UChar32 start, UChar32 end) {
+ clear();
+ complement(start, end);
+ return *this;
+}
+
/**
* Adds the specified range to this set if it is not already
* present. If this set already contains the specified range,
@@ -769,7 +877,7 @@ UnicodeSet& UnicodeSet::add(UChar32 c) {
int32_t i = findCodePoint(pinCodePoint(c));
// already in set?
- if ((i & 1) != 0) return *this;
+ if ((i & 1) != 0 || isFrozen() || isBogus()) return *this;
// HIGH is 0x110000
// assert(list[len-1] == HIGH);
@@ -797,7 +905,11 @@ UnicodeSet& UnicodeSet::add(UChar32 c) {
list[i] = c;
// if we touched the HIGH mark, then add a new one
if (c == (UNICODESET_HIGH - 1)) {
- ensureCapacity(len+1);
+ UErrorCode status = U_ZERO_ERROR;
+ ensureCapacity(len+1, status);
+ if (U_FAILURE(status)) {
+ return *this; // There is no way to report this error :-(
+ }
list[len++] = UNICODESET_HIGH;
}
if (i > 0 && c == list[i-1]) {
@@ -838,7 +950,11 @@ UnicodeSet& UnicodeSet::add(UChar32 c) {
// ^
// list[i]
- ensureCapacity(len+2);
+ UErrorCode status = U_ZERO_ERROR;
+ ensureCapacity(len+2, status);
+ if (U_FAILURE(status)) {
+ return *this; // There is no way to report this error :-(
+ }
//for (int32_t k=len-1; k>=i; --k) {
// list[k+2] = list[k];
@@ -866,7 +982,7 @@ UnicodeSet& UnicodeSet::add(UChar32 c) {
}
#endif
- pat.truncate(0);
+ releasePattern();
return *this;
}
@@ -880,15 +996,15 @@ UnicodeSet& UnicodeSet::add(UChar32 c) {
* @return the modified set, for chaining
*/
UnicodeSet& UnicodeSet::add(const UnicodeString& s) {
- if (s.length() == 0) return *this;
+ if (s.length() == 0 || isFrozen() || isBogus()) return *this;
int32_t cp = getSingleCP(s);
if (cp < 0) {
if (!strings->contains((void*) &s)) {
_add(s);
- pat.truncate(0);
+ releasePattern();
}
} else {
- add((UChar32)cp, (UChar32)cp);
+ add((UChar32)cp);
}
return *this;
}
@@ -899,9 +1015,20 @@ UnicodeSet& UnicodeSet::add(const UnicodeString& s) {
* already be in 'strings'.
*/
void UnicodeSet::_add(const UnicodeString& s) {
+ if (isFrozen() || isBogus()) {
+ return;
+ }
UnicodeString* t = new UnicodeString(s);
+ if (t == NULL) { // Check for memory allocation error.
+ setToBogus();
+ return;
+ }
UErrorCode ec = U_ZERO_ERROR;
strings->sortedInsert(t, compareUnicodeString, ec);
+ if (U_FAILURE(ec)) {
+ setToBogus();
+ delete t;
+ }
}
/**
@@ -934,7 +1061,7 @@ UnicodeSet& UnicodeSet::addAll(const UnicodeString& s) {
UChar32 cp;
for (int32_t i = 0; i < s.length(); i += UTF_CHAR_LENGTH(cp)) {
cp = s.char32At(i);
- add(cp, cp);
+ add(cp);
}
return *this;
}
@@ -978,6 +1105,12 @@ UnicodeSet& UnicodeSet::removeAll(const UnicodeString& s) {
return *this;
}
+UnicodeSet& UnicodeSet::removeAllStrings() {
+ strings->removeAllElements();
+ return *this;
+}
+
+
/**
* Makes a set from a multicharacter string. Thus "ch" => {"ch"}
* Warning: you cannot add an empty string ("") to a UnicodeSet.
@@ -986,7 +1119,9 @@ UnicodeSet& UnicodeSet::removeAll(const UnicodeString& s) {
*/
UnicodeSet* U_EXPORT2 UnicodeSet::createFrom(const UnicodeString& s) {
UnicodeSet *set = new UnicodeSet();
- set->add(s);
+ if (set != NULL) { // Check for memory allocation error.
+ set->add(s);
+ }
return set;
}
@@ -998,7 +1133,9 @@ UnicodeSet* U_EXPORT2 UnicodeSet::createFrom(const UnicodeString& s) {
*/
UnicodeSet* U_EXPORT2 UnicodeSet::createFromAll(const UnicodeString& s) {
UnicodeSet *set = new UnicodeSet();
- set->addAll(s);
+ if (set != NULL) { // Check for memory allocation error.
+ set->addAll(s);
+ }
return set;
}
@@ -1062,11 +1199,11 @@ UnicodeSet& UnicodeSet::remove(UChar32 c) {
* @return the modified set, for chaining
*/
UnicodeSet& UnicodeSet::remove(const UnicodeString& s) {
- if (s.length() == 0) return *this;
+ if (s.length() == 0 || isFrozen() || isBogus()) return *this;
int32_t cp = getSingleCP(s);
if (cp < 0) {
strings->removeElement((void*) &s);
- pat.truncate(0);
+ releasePattern();
} else {
remove((UChar32)cp, (UChar32)cp);
}
@@ -1085,11 +1222,14 @@ UnicodeSet& UnicodeSet::remove(const UnicodeString& s) {
* from this set.
*/
UnicodeSet& UnicodeSet::complement(UChar32 start, UChar32 end) {
+ if (isFrozen() || isBogus()) {
+ return *this;
+ }
if (pinCodePoint(start) <= pinCodePoint(end)) {
UChar32 range[3] = { start, end+1, UNICODESET_HIGH };
exclusiveOr(range, 2, 0);
}
- pat.truncate(0);
+ releasePattern();
return *this;
}
@@ -1102,18 +1242,28 @@ UnicodeSet& UnicodeSet::complement(UChar32 c) {
* complement(MIN_VALUE, MAX_VALUE).
*/
UnicodeSet& UnicodeSet::complement(void) {
+ if (isFrozen() || isBogus()) {
+ return *this;
+ }
+ UErrorCode status = U_ZERO_ERROR;
if (list[0] == UNICODESET_LOW) {
- ensureBufferCapacity(len-1);
+ ensureBufferCapacity(len-1, status);
+ if (U_FAILURE(status)) {
+ return *this;
+ }
uprv_memcpy(buffer, list + 1, (len-1)*sizeof(UChar32));
--len;
} else {
- ensureBufferCapacity(len+1);
+ ensureBufferCapacity(len+1, status);
+ if (U_FAILURE(status)) {
+ return *this;
+ }
uprv_memcpy(buffer + 1, list, len*sizeof(UChar32));
buffer[0] = UNICODESET_LOW;
++len;
}
swapBuffers();
- pat.truncate(0);
+ releasePattern();
return *this;
}
@@ -1126,7 +1276,7 @@ UnicodeSet& UnicodeSet::complement(void) {
* @return this object, for chaining
*/
UnicodeSet& UnicodeSet::complement(const UnicodeString& s) {
- if (s.length() == 0) return *this;
+ if (s.length() == 0 || isFrozen() || isBogus()) return *this;
int32_t cp = getSingleCP(s);
if (cp < 0) {
if (strings->contains((void*) &s)) {
@@ -1134,7 +1284,7 @@ UnicodeSet& UnicodeSet::complement(const UnicodeString& s) {
} else {
_add(s);
}
- pat.truncate(0);
+ releasePattern();
} else {
complement((UChar32)cp, (UChar32)cp);
}
@@ -1152,13 +1302,17 @@ UnicodeSet& UnicodeSet::complement(const UnicodeString& s) {
* @see #add(char, char)
*/
UnicodeSet& UnicodeSet::addAll(const UnicodeSet& c) {
- add(c.list, c.len, 0);
+ if ( c.len>0 && c.list!=NULL ) {
+ add(c.list, c.len, 0);
+ }
// Add strings in order
- for (int32_t i=0; isize(); ++i) {
- const UnicodeString* s = (const UnicodeString*)c.strings->elementAt(i);
- if (!strings->contains((void*) s)) {
- _add(*s);
+ if ( c.strings!=NULL ) {
+ for (int32_t i=0; isize(); ++i) {
+ const UnicodeString* s = (const UnicodeString*)c.strings->elementAt(i);
+ if (!strings->contains((void*) s)) {
+ _add(*s);
+ }
}
}
return *this;
@@ -1174,6 +1328,9 @@ UnicodeSet& UnicodeSet::addAll(const UnicodeSet& c) {
* @param c set that defines which elements this set will retain.
*/
UnicodeSet& UnicodeSet::retainAll(const UnicodeSet& c) {
+ if (isFrozen() || isBogus()) {
+ return *this;
+ }
retain(c.list, c.len, 0);
strings->retainAll(*c.strings);
return *this;
@@ -1189,6 +1346,9 @@ UnicodeSet& UnicodeSet::retainAll(const UnicodeSet& c) {
* this set.
*/
UnicodeSet& UnicodeSet::removeAll(const UnicodeSet& c) {
+ if (isFrozen() || isBogus()) {
+ return *this;
+ }
retain(c.list, c.len, 2);
strings->removeAll(*c.strings);
return *this;
@@ -1203,6 +1363,9 @@ UnicodeSet& UnicodeSet::removeAll(const UnicodeSet& c) {
* this set.
*/
UnicodeSet& UnicodeSet::complementAll(const UnicodeSet& c) {
+ if (isFrozen() || isBogus()) {
+ return *this;
+ }
exclusiveOr(c.list, c.len, 0);
for (int32_t i=0; isize(); ++i) {
@@ -1219,10 +1382,21 @@ UnicodeSet& UnicodeSet::complementAll(const UnicodeSet& c) {
* empty after this call returns.
*/
UnicodeSet& UnicodeSet::clear(void) {
- list[0] = UNICODESET_HIGH;
+ if (isFrozen()) {
+ return *this;
+ }
+ if (list != NULL) {
+ list[0] = UNICODESET_HIGH;
+ }
len = 1;
- pat.truncate(0);
- strings->removeAllElements();
+ releasePattern();
+ if (strings != NULL) {
+ strings->removeAllElements();
+ }
+ if (list != NULL && strings != NULL) {
+ // Remove bogus
+ fFlags = 0;
+ }
return *this;
}
@@ -1269,15 +1443,26 @@ const UnicodeString* UnicodeSet::getString(int32_t index) const {
* possible space, without changing this object's value.
*/
UnicodeSet& UnicodeSet::compact() {
- if (len != capacity) {
- capacity = len;
- UChar32* temp = (UChar32*) uprv_malloc(sizeof(UChar32) * capacity);
- uprv_memcpy(temp, list, len*sizeof(UChar32));
- uprv_free(list);
- list = temp;
- }
- uprv_free(buffer);
- buffer = NULL;
+ if (isFrozen() || isBogus()) {
+ return *this;
+ }
+ // Delete buffer first to defragment memory less.
+ if (buffer != NULL) {
+ uprv_free(buffer);
+ buffer = NULL;
+ }
+ if (len < capacity) {
+ // Make the capacity equal to len or 1.
+ // We don't want to realloc of 0 size.
+ int32_t newCapacity = len + (len == 0);
+ UChar32* temp = (UChar32*) uprv_realloc(list, sizeof(UChar32) * newCapacity);
+ if (temp) {
+ list = temp;
+ capacity = newCapacity;
+ }
+ // else what the heck happened?! We allocated less memory!
+ // Oh well. We'll keep our original array.
+ }
return *this;
}
@@ -1369,36 +1554,50 @@ int32_t UnicodeSet::serialize(uint16_t *dest, int32_t destCapacity, UErrorCode&
/**
* Allocate our strings vector and return TRUE if successful.
*/
-UBool UnicodeSet::allocateStrings() {
- UErrorCode ec = U_ZERO_ERROR;
+UBool UnicodeSet::allocateStrings(UErrorCode &status) {
+ if (U_FAILURE(status)) {
+ return FALSE;
+ }
strings = new UVector(uhash_deleteUnicodeString,
- uhash_compareUnicodeString, ec);
- if (U_FAILURE(ec)) {
+ uhash_compareUnicodeString, 1, status);
+ if (strings == NULL) { // Check for memory allocation error.
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return FALSE;
+ }
+ if (U_FAILURE(status)) {
delete strings;
strings = NULL;
return FALSE;
- }
+ }
return TRUE;
}
-void UnicodeSet::ensureCapacity(int32_t newLen) {
+void UnicodeSet::ensureCapacity(int32_t newLen, UErrorCode& ec) {
if (newLen <= capacity)
return;
- capacity = newLen + GROW_EXTRA;
- UChar32* temp = (UChar32*) uprv_malloc(sizeof(UChar32) * capacity);
- uprv_memcpy(temp, list, len*sizeof(UChar32));
- uprv_free(list);
+ UChar32* temp = (UChar32*) uprv_realloc(list, sizeof(UChar32) * (newLen + GROW_EXTRA));
+ if (temp == NULL) {
+ ec = U_MEMORY_ALLOCATION_ERROR;
+ setToBogus();
+ return;
+ }
list = temp;
+ capacity = newLen + GROW_EXTRA;
+ // else we keep the original contents on the memory failure.
}
-void UnicodeSet::ensureBufferCapacity(int32_t newLen) {
+void UnicodeSet::ensureBufferCapacity(int32_t newLen, UErrorCode& ec) {
if (buffer != NULL && newLen <= bufferCapacity)
return;
- if (buffer) {
- uprv_free(buffer);
+ UChar32* temp = (UChar32*) uprv_realloc(buffer, sizeof(UChar32) * (newLen + GROW_EXTRA));
+ if (temp == NULL) {
+ ec = U_MEMORY_ALLOCATION_ERROR;
+ setToBogus();
+ return;
}
+ buffer = temp;
bufferCapacity = newLen + GROW_EXTRA;
- buffer = (UChar32*) uprv_malloc(sizeof(UChar32) * bufferCapacity);
+ // else we keep the original contents on the memory failure.
}
/**
@@ -1415,6 +1614,11 @@ void UnicodeSet::swapBuffers(void) {
bufferCapacity = c;
}
+void UnicodeSet::setToBogus() {
+ clear(); // Remove everything in the set.
+ fFlags = kIsBogus;
+}
+
//----------------------------------------------------------------
// Implementation: Fundamental operators
//----------------------------------------------------------------
@@ -1427,7 +1631,15 @@ static inline UChar32 max(UChar32 a, UChar32 b) {
// polarity = 1, 2: x xor ~y == x === y
void UnicodeSet::exclusiveOr(const UChar32* other, int32_t otherLen, int8_t polarity) {
- ensureBufferCapacity(len + otherLen);
+ if (isFrozen() || isBogus()) {
+ return;
+ }
+ UErrorCode status = U_ZERO_ERROR;
+ ensureBufferCapacity(len + otherLen, status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+
int32_t i = 0, j = 0, k = 0;
UChar32 a = list[i++];
UChar32 b;
@@ -1460,7 +1672,7 @@ void UnicodeSet::exclusiveOr(const UChar32* other, int32_t otherLen, int8_t pola
}
}
swapBuffers();
- pat.truncate(0);
+ releasePattern();
}
// polarity = 0 is normal: x union y
@@ -1469,7 +1681,15 @@ void UnicodeSet::exclusiveOr(const UChar32* other, int32_t otherLen, int8_t pola
// polarity = 3: ~x union ~y
void UnicodeSet::add(const UChar32* other, int32_t otherLen, int8_t polarity) {
- ensureBufferCapacity(len + otherLen);
+ if (isFrozen() || isBogus() || other==NULL) {
+ return;
+ }
+ UErrorCode status = U_ZERO_ERROR;
+ ensureBufferCapacity(len + otherLen, status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+
int32_t i = 0, j = 0, k = 0;
UChar32 a = list[i++];
UChar32 b = other[j++];
@@ -1565,7 +1785,7 @@ void UnicodeSet::add(const UChar32* other, int32_t otherLen, int8_t polarity) {
buffer[k++] = UNICODESET_HIGH; // terminate
len = k;
swapBuffers();
- pat.truncate(0);
+ releasePattern();
}
// polarity = 0 is normal: x intersect y
@@ -1574,7 +1794,15 @@ void UnicodeSet::add(const UChar32* other, int32_t otherLen, int8_t polarity) {
// polarity = 3: ~x intersect ~y
void UnicodeSet::retain(const UChar32* other, int32_t otherLen, int8_t polarity) {
- ensureBufferCapacity(len + otherLen);
+ if (isFrozen() || isBogus()) {
+ return;
+ }
+ UErrorCode status = U_ZERO_ERROR;
+ ensureBufferCapacity(len + otherLen, status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+
int32_t i = 0, j = 0, k = 0;
UChar32 a = list[i++];
UChar32 b = other[j++];
@@ -1654,7 +1882,7 @@ void UnicodeSet::retain(const UChar32* other, int32_t otherLen, int8_t polarity)
buffer[k++] = UNICODESET_HIGH; // terminate
len = k;
swapBuffers();
- pat.truncate(0);
+ releasePattern();
}
/**
@@ -1712,13 +1940,14 @@ escapeUnprintable) {
* is one. Otherwise it will be generated.
*/
UnicodeString& UnicodeSet::_toPattern(UnicodeString& result,
- UBool escapeUnprintable) const {
- if (pat.length() > 0) {
+ UBool escapeUnprintable) const
+{
+ if (pat != NULL) {
int32_t i;
int32_t backslashCount = 0;
- for (i=0; i (len + GROW_EXTRA)) {
+ // Make the capacity equal to len or 1.
+ // We don't want to realloc of 0 size.
+ capacity = len + (len == 0);
+ list = (UChar32*) uprv_realloc(list, sizeof(UChar32) * capacity);
+ if (list == NULL) { // Check for memory allocation error.
+ setToBogus();
+ return this;
+ }
+ }
+
+ // Optimize contains() and span() and similar functions.
+ if (!strings->isEmpty()) {
+ stringSpan = new UnicodeSetStringSpan(*this, *strings, UnicodeSetStringSpan::ALL);
+ if (stringSpan != NULL && !stringSpan->needsStringSpanUTF16()) {
+ // All strings are irrelevant for span() etc. because
+ // all of each string's code points are contained in this set.
+ // Do not check needsStringSpanUTF8() because UTF-8 has at most as
+ // many relevant strings as UTF-16.
+ // (Thus needsStringSpanUTF8() implies needsStringSpanUTF16().)
+ delete stringSpan;
+ stringSpan = NULL;
+ }
+ }
+ if (stringSpan == NULL) {
+ // No span-relevant strings: Optimize for code point spans.
+ bmpSet=new BMPSet(list, len);
+ if (bmpSet == NULL) { // Check for memory allocation error.
+ setToBogus();
+ }
+ }
+ }
+ return this;
+}
+
+int32_t UnicodeSet::span(const UChar *s, int32_t length, USetSpanCondition spanCondition) const {
+ if(length>0 && bmpSet!=NULL) {
+ return (int32_t)(bmpSet->span(s, s+length, spanCondition)-s);
+ }
+ if(length<0) {
+ length=u_strlen(s);
+ }
+ if(length==0) {
+ return 0;
+ }
+ if(stringSpan!=NULL) {
+ return stringSpan->span(s, length, spanCondition);
+ } else if(!strings->isEmpty()) {
+ uint32_t which= spanCondition==USET_SPAN_NOT_CONTAINED ?
+ UnicodeSetStringSpan::FWD_UTF16_NOT_CONTAINED :
+ UnicodeSetStringSpan::FWD_UTF16_CONTAINED;
+ UnicodeSetStringSpan strSpan(*this, *strings, which);
+ if(strSpan.needsStringSpanUTF16()) {
+ return strSpan.span(s, length, spanCondition);
+ }
+ }
+
+ if(spanCondition!=USET_SPAN_NOT_CONTAINED) {
+ spanCondition=USET_SPAN_CONTAINED; // Pin to 0/1 values.
+ }
+
+ UChar32 c;
+ int32_t start=0, prev=0;
+ do {
+ U16_NEXT(s, start, length, c);
+ if(spanCondition!=contains(c)) {
+ break;
+ }
+ } while((prev=start)0 && bmpSet!=NULL) {
+ return (int32_t)(bmpSet->spanBack(s, s+length, spanCondition)-s);
+ }
+ if(length<0) {
+ length=u_strlen(s);
+ }
+ if(length==0) {
+ return 0;
+ }
+ if(stringSpan!=NULL) {
+ return stringSpan->spanBack(s, length, spanCondition);
+ } else if(!strings->isEmpty()) {
+ uint32_t which= spanCondition==USET_SPAN_NOT_CONTAINED ?
+ UnicodeSetStringSpan::BACK_UTF16_NOT_CONTAINED :
+ UnicodeSetStringSpan::BACK_UTF16_CONTAINED;
+ UnicodeSetStringSpan strSpan(*this, *strings, which);
+ if(strSpan.needsStringSpanUTF16()) {
+ return strSpan.spanBack(s, length, spanCondition);
+ }
+ }
+
+ if(spanCondition!=USET_SPAN_NOT_CONTAINED) {
+ spanCondition=USET_SPAN_CONTAINED; // Pin to 0/1 values.
+ }
+
+ UChar32 c;
+ int32_t prev=length;
+ do {
+ U16_PREV(s, 0, length, c);
+ if(spanCondition!=contains(c)) {
+ break;
+ }
+ } while((prev=length)>0);
+ return prev;
+}
+
+int32_t UnicodeSet::spanUTF8(const char *s, int32_t length, USetSpanCondition spanCondition) const {
+ if(length>0 && bmpSet!=NULL) {
+ const uint8_t *s0=(const uint8_t *)s;
+ return (int32_t)(bmpSet->spanUTF8(s0, length, spanCondition)-s0);
+ }
+ if(length<0) {
+ length=uprv_strlen(s);
+ }
+ if(length==0) {
+ return 0;
+ }
+ if(stringSpan!=NULL) {
+ return stringSpan->spanUTF8((const uint8_t *)s, length, spanCondition);
+ } else if(!strings->isEmpty()) {
+ uint32_t which= spanCondition==USET_SPAN_NOT_CONTAINED ?
+ UnicodeSetStringSpan::FWD_UTF8_NOT_CONTAINED :
+ UnicodeSetStringSpan::FWD_UTF8_CONTAINED;
+ UnicodeSetStringSpan strSpan(*this, *strings, which);
+ if(strSpan.needsStringSpanUTF8()) {
+ return strSpan.spanUTF8((const uint8_t *)s, length, spanCondition);
+ }
+ }
+
+ if(spanCondition!=USET_SPAN_NOT_CONTAINED) {
+ spanCondition=USET_SPAN_CONTAINED; // Pin to 0/1 values.
+ }
+
+ UChar32 c;
+ int32_t start=0, prev=0;
+ do {
+ U8_NEXT(s, start, length, c);
+ if(c<0) {
+ c=0xfffd;
+ }
+ if(spanCondition!=contains(c)) {
+ break;
+ }
+ } while((prev=start)0 && bmpSet!=NULL) {
+ const uint8_t *s0=(const uint8_t *)s;
+ return bmpSet->spanBackUTF8(s0, length, spanCondition);
+ }
+ if(length<0) {
+ length=uprv_strlen(s);
+ }
+ if(length==0) {
+ return 0;
+ }
+ if(stringSpan!=NULL) {
+ return stringSpan->spanBackUTF8((const uint8_t *)s, length, spanCondition);
+ } else if(!strings->isEmpty()) {
+ uint32_t which= spanCondition==USET_SPAN_NOT_CONTAINED ?
+ UnicodeSetStringSpan::BACK_UTF8_NOT_CONTAINED :
+ UnicodeSetStringSpan::BACK_UTF8_CONTAINED;
+ UnicodeSetStringSpan strSpan(*this, *strings, which);
+ if(strSpan.needsStringSpanUTF8()) {
+ return strSpan.spanBackUTF8((const uint8_t *)s, length, spanCondition);
+ }
+ }
+
+ if(spanCondition!=USET_SPAN_NOT_CONTAINED) {
+ spanCondition=USET_SPAN_CONTAINED; // Pin to 0/1 values.
+ }
+
+ UChar32 c;
+ int32_t prev=length;
+ do {
+ U8_PREV(s, 0, length, c);
+ if(c<0) {
+ c=0xfffd;
+ }
+ if(spanCondition!=contains(c)) {
+ break;
+ }
+ } while((prev=length)>0);
+ return prev;
+}
U_NAMESPACE_END
diff --git a/icuSources/common/uniset_props.cpp b/icuSources/common/uniset_props.cpp
index fe6e1291..cce3a28d 100644
--- a/icuSources/common/uniset_props.cpp
+++ b/icuSources/common/uniset_props.cpp
@@ -1,7 +1,7 @@
/*
*******************************************************************************
*
-* Copyright (C) 1999-2006, International Business Machines
+* Copyright (C) 1999-2008, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
@@ -39,10 +39,12 @@
#include "uinvchar.h"
#include "charstr.h"
#include "cstring.h"
-#include "mutex.h"
+#include "umutex.h"
#include "uassert.h"
#include "hash.h"
+U_NAMESPACE_USE
+
#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
// initial storage. Must be >= 0
@@ -89,10 +91,121 @@ static const char ASSIGNED[] = "Assigned"; // [:^Cn:]
*/
//static const UChar CATEGORY_CLOSE[] = {COLON, SET_CLOSE, 0x0000}; /* ":]" */
-U_NAMESPACE_BEGIN
+U_CDECL_BEGIN
static UnicodeSet *INCLUSIONS[UPROPS_SRC_COUNT] = { NULL }; // cached getInclusions()
+//----------------------------------------------------------------
+// Inclusions list
+//----------------------------------------------------------------
+
+// USetAdder implementation
+// Does not use uset.h to reduce code dependencies
+static void U_CALLCONV
+_set_add(USet *set, UChar32 c) {
+ ((UnicodeSet *)set)->add(c);
+}
+
+static void U_CALLCONV
+_set_addRange(USet *set, UChar32 start, UChar32 end) {
+ ((UnicodeSet *)set)->add(start, end);
+}
+
+static void U_CALLCONV
+_set_addString(USet *set, const UChar *str, int32_t length) {
+ ((UnicodeSet *)set)->add(UnicodeString((UBool)(length<0), str, length));
+}
+
+/**
+ * Cleanup function for UnicodeSet
+ */
+static UBool U_CALLCONV uset_cleanup(void) {
+ int32_t i;
+
+ for(i = UPROPS_SRC_NONE; i < UPROPS_SRC_COUNT; ++i) {
+ if (INCLUSIONS[i] != NULL) {
+ delete INCLUSIONS[i];
+ INCLUSIONS[i] = NULL;
+ }
+ }
+
+ return TRUE;
+}
+
+U_CDECL_END
+
+U_NAMESPACE_BEGIN
+
+/*
+Reduce excessive reallocation, and make it easier to detect initialization
+problems.
+Usually you don't see smaller sets than this for Unicode 5.0.
+*/
+#define DEFAULT_INCLUSION_CAPACITY 3072
+
+const UnicodeSet* UnicodeSet::getInclusions(int32_t src, UErrorCode &status) {
+ UBool needInit;
+ UMTX_CHECK(NULL, (INCLUSIONS[src] == NULL), needInit);
+ if (needInit) {
+ UnicodeSet* incl = new UnicodeSet();
+ USetAdder sa = {
+ (USet *)incl,
+ _set_add,
+ _set_addRange,
+ _set_addString,
+ NULL, // don't need remove()
+ NULL // don't need removeRange()
+ };
+ incl->ensureCapacity(DEFAULT_INCLUSION_CAPACITY, status);
+ if (incl != NULL) {
+ switch(src) {
+ case UPROPS_SRC_CHAR:
+ uchar_addPropertyStarts(&sa, &status);
+ break;
+ case UPROPS_SRC_PROPSVEC:
+ upropsvec_addPropertyStarts(&sa, &status);
+ break;
+ case UPROPS_SRC_CHAR_AND_PROPSVEC:
+ uchar_addPropertyStarts(&sa, &status);
+ upropsvec_addPropertyStarts(&sa, &status);
+ break;
+ case UPROPS_SRC_HST:
+ uhst_addPropertyStarts(&sa, &status);
+ break;
+#if !UCONFIG_NO_NORMALIZATION
+ case UPROPS_SRC_NORM:
+ unorm_addPropertyStarts(&sa, &status);
+ break;
+#endif
+ case UPROPS_SRC_CASE:
+ ucase_addPropertyStarts(ucase_getSingleton(&status), &sa, &status);
+ break;
+ case UPROPS_SRC_BIDI:
+ ubidi_addPropertyStarts(ubidi_getSingleton(&status), &sa, &status);
+ break;
+ default:
+ status = U_INTERNAL_PROGRAM_ERROR;
+ break;
+ }
+ if (U_SUCCESS(status)) {
+ // Compact for caching
+ incl->compact();
+ umtx_lock(NULL);
+ if (INCLUSIONS[src] == NULL) {
+ INCLUSIONS[src] = incl;
+ incl = NULL;
+ ucln_common_registerCleanup(UCLN_COMMON_USET, uset_cleanup);
+ }
+ umtx_unlock(NULL);
+ }
+ delete incl;
+ } else {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ }
+ }
+ return INCLUSIONS[src];
+}
+
// helper functions for matching of pattern syntax pieces ------------------ ***
// these functions are parallel to the PERL_OPEN etc. strings above
@@ -143,8 +256,9 @@ isPOSIXClose(const UnicodeString &pattern, int32_t pos) {
*/
UnicodeSet::UnicodeSet(const UnicodeString& pattern,
UErrorCode& status) :
- len(0), capacity(START_EXTRA), bufferCapacity(0),
- list(0), buffer(0), strings(0)
+ len(0), capacity(START_EXTRA), list(0), bmpSet(0), buffer(0),
+ bufferCapacity(0), patLen(0), pat(NULL), strings(NULL), stringSpan(NULL),
+ fFlags(0)
{
if(U_SUCCESS(status)){
list = (UChar32*) uprv_malloc(sizeof(UChar32) * capacity);
@@ -152,7 +266,7 @@ UnicodeSet::UnicodeSet(const UnicodeString& pattern,
if(list == NULL) {
status = U_MEMORY_ALLOCATION_ERROR;
}else{
- allocateStrings();
+ allocateStrings(status);
applyPattern(pattern, USET_IGNORE_SPACE, NULL, status);
}
}
@@ -171,8 +285,9 @@ UnicodeSet::UnicodeSet(const UnicodeString& pattern,
uint32_t options,
const SymbolTable* symbols,
UErrorCode& status) :
- len(0), capacity(START_EXTRA), bufferCapacity(0),
- list(0), buffer(0), strings(0)
+ len(0), capacity(START_EXTRA), list(0), bmpSet(0), buffer(0),
+ bufferCapacity(0), patLen(0), pat(NULL), strings(NULL), stringSpan(NULL),
+ fFlags(0)
{
if(U_SUCCESS(status)){
list = (UChar32*) uprv_malloc(sizeof(UChar32) * capacity);
@@ -180,7 +295,7 @@ UnicodeSet::UnicodeSet(const UnicodeString& pattern,
if(list == NULL) {
status = U_MEMORY_ALLOCATION_ERROR;
}else{
- allocateStrings();
+ allocateStrings(status);
applyPattern(pattern, options, symbols, status);
}
}
@@ -191,8 +306,9 @@ UnicodeSet::UnicodeSet(const UnicodeString& pattern, ParsePosition& pos,
uint32_t options,
const SymbolTable* symbols,
UErrorCode& status) :
- len(0), capacity(START_EXTRA), bufferCapacity(0),
- list(0), buffer(0), strings(0)
+ len(0), capacity(START_EXTRA), list(0), bmpSet(0), buffer(0),
+ bufferCapacity(0), patLen(0), pat(NULL), strings(NULL), stringSpan(NULL),
+ fFlags(0)
{
if(U_SUCCESS(status)){
list = (UChar32*) uprv_malloc(sizeof(UChar32) * capacity);
@@ -200,7 +316,7 @@ UnicodeSet::UnicodeSet(const UnicodeString& pattern, ParsePosition& pos,
if(list == NULL) {
status = U_MEMORY_ALLOCATION_ERROR;
}else{
- allocateStrings();
+ allocateStrings(status);
applyPattern(pattern, pos, options, symbols, status);
}
}
@@ -243,7 +359,7 @@ UnicodeSet& UnicodeSet::applyPattern(const UnicodeString& pattern,
uint32_t options,
const SymbolTable* symbols,
UErrorCode& status) {
- if (U_FAILURE(status)) {
+ if (U_FAILURE(status) || isFrozen()) {
return *this;
}
@@ -269,7 +385,7 @@ UnicodeSet& UnicodeSet::applyPattern(const UnicodeString& pattern,
uint32_t options,
const SymbolTable* symbols,
UErrorCode& status) {
- if (U_FAILURE(status)) {
+ if (U_FAILURE(status) || isFrozen()) {
return *this;
}
// Need to build the pattern in a temporary string because
@@ -283,7 +399,7 @@ UnicodeSet& UnicodeSet::applyPattern(const UnicodeString& pattern,
status = U_MALFORMED_SET;
return *this;
}
- pat = rebuiltPat;
+ setPattern(rebuiltPat);
return *this;
}
@@ -720,6 +836,10 @@ void UnicodeSet::applyPattern(RuleCharacterIterator& chars,
} else {
_generatePattern(rebuiltPat, FALSE);
}
+ if (isBogus() && U_SUCCESS(ec)) {
+ // We likely ran out of memory. AHHH!
+ ec = U_MEMORY_ALLOCATION_ERROR;
+ }
}
//----------------------------------------------------------------
@@ -782,7 +902,7 @@ void UnicodeSet::applyFilter(UnicodeSet::Filter filter,
clear();
UChar32 startHasProperty = -1;
- int limitRange = inclusions->getRangeCount();
+ int32_t limitRange = inclusions->getRangeCount();
for (int j=0; j= 0) {
add((UChar32)startHasProperty, (UChar32)0x10FFFF);
}
+ if (isBogus() && U_SUCCESS(status)) {
+ // We likely ran out of memory. AHHH!
+ status = U_MEMORY_ALLOCATION_ERROR;
+ }
}
static UBool mungeCharName(char* dst, const char* src, int32_t dstCapacity) {
@@ -833,7 +957,7 @@ static UBool mungeCharName(char* dst, const char* src, int32_t dstCapacity) {
UnicodeSet&
UnicodeSet::applyIntPropertyValue(UProperty prop, int32_t value, UErrorCode& ec) {
- if (U_FAILURE(ec)) return *this;
+ if (U_FAILURE(ec) || isFrozen()) return *this;
if (prop == UCHAR_GENERAL_CATEGORY_MASK) {
applyFilter(generalCategoryMaskFilter, &value, UPROPS_SRC_CHAR, ec);
@@ -848,7 +972,7 @@ UnicodeSet&
UnicodeSet::applyPropertyAlias(const UnicodeString& prop,
const UnicodeString& value,
UErrorCode& ec) {
- if (U_FAILURE(ec)) return *this;
+ if (U_FAILURE(ec) || isFrozen()) return *this;
// prop and value used to be converted to char * using the default
// converter instead of the invariant conversion.
@@ -996,6 +1120,10 @@ UnicodeSet::applyPropertyAlias(const UnicodeString& prop,
ec = U_ILLEGAL_ARGUMENT_ERROR;
}
+ if (isBogus() && U_SUCCESS(ec)) {
+ // We likely ran out of memory. AHHH!
+ ec = U_MEMORY_ALLOCATION_ERROR;
+ }
return *this;
}
@@ -1165,108 +1293,6 @@ void UnicodeSet::applyPropertyPattern(RuleCharacterIterator& chars,
rebuiltPat.append(pattern, 0, pos.getIndex());
}
-//----------------------------------------------------------------
-// Inclusions list
-//----------------------------------------------------------------
-
-U_CDECL_BEGIN
-
-// USetAdder implementation
-// Does not use uset.h to reduce code dependencies
-static void U_CALLCONV
-_set_add(USet *set, UChar32 c) {
- ((UnicodeSet *)set)->add(c);
-}
-
-static void U_CALLCONV
-_set_addRange(USet *set, UChar32 start, UChar32 end) {
- ((UnicodeSet *)set)->add(start, end);
-}
-
-static void U_CALLCONV
-_set_addString(USet *set, const UChar *str, int32_t length) {
- ((UnicodeSet *)set)->add(UnicodeString((UBool)(length<0), str, length));
-}
-
-/**
- * Cleanup function for UnicodeSet
- */
-static UBool U_CALLCONV uset_cleanup(void) {
- int32_t i;
-
- for(i = UPROPS_SRC_NONE; i < UPROPS_SRC_COUNT; ++i) {
- if (INCLUSIONS[i] != NULL) {
- delete INCLUSIONS[i];
- INCLUSIONS[i] = NULL;
- }
- }
-
- return TRUE;
-}
-
-U_CDECL_END
-
-const UnicodeSet* UnicodeSet::getInclusions(int32_t src, UErrorCode &status) {
- umtx_lock(NULL);
- UBool f = (INCLUSIONS[src] == NULL);
- umtx_unlock(NULL);
- if (f) {
- UnicodeSet* incl = new UnicodeSet();
- USetAdder sa = {
- (USet *)incl,
- _set_add,
- _set_addRange,
- _set_addString,
- NULL // don't need remove()
- };
-
- if (incl != NULL) {
- switch(src) {
- case UPROPS_SRC_CHAR:
- uchar_addPropertyStarts(&sa, &status);
- break;
- case UPROPS_SRC_PROPSVEC:
- upropsvec_addPropertyStarts(&sa, &status);
- break;
- case UPROPS_SRC_CHAR_AND_PROPSVEC:
- uchar_addPropertyStarts(&sa, &status);
- upropsvec_addPropertyStarts(&sa, &status);
- break;
- case UPROPS_SRC_HST:
- uhst_addPropertyStarts(&sa, &status);
- break;
-#if !UCONFIG_NO_NORMALIZATION
- case UPROPS_SRC_NORM:
- unorm_addPropertyStarts(&sa, &status);
- break;
-#endif
- case UPROPS_SRC_CASE:
- ucase_addPropertyStarts(ucase_getSingleton(&status), &sa, &status);
- break;
- case UPROPS_SRC_BIDI:
- ubidi_addPropertyStarts(ubidi_getSingleton(&status), &sa, &status);
- break;
- default:
- status = U_INTERNAL_PROGRAM_ERROR;
- break;
- }
- if (U_SUCCESS(status)) {
- umtx_lock(NULL);
- if (INCLUSIONS[src] == NULL) {
- INCLUSIONS[src] = incl;
- incl = NULL;
- ucln_common_registerCleanup(UCLN_COMMON_USET, uset_cleanup);
- }
- umtx_unlock(NULL);
- }
- delete incl;
- } else {
- status = U_MEMORY_ALLOCATION_ERROR;
- }
- }
- return INCLUSIONS[src];
-}
-
//----------------------------------------------------------------
// Case folding API
//----------------------------------------------------------------
@@ -1290,6 +1316,9 @@ addCaseMapping(UnicodeSet &set, int32_t result, const UChar *full, UnicodeString
}
UnicodeSet& UnicodeSet::closeOver(int32_t attribute) {
+ if (isFrozen() || isBogus()) {
+ return *this;
+ }
if (attribute & (USET_CASE_INSENSITIVE | USET_ADD_CASE_MAPPINGS)) {
UErrorCode status = U_ZERO_ERROR;
const UCaseProps *csp = ucase_getSingleton(&status);
@@ -1301,7 +1330,8 @@ UnicodeSet& UnicodeSet::closeOver(int32_t attribute) {
_set_add,
_set_addRange,
_set_addString,
- NULL // don't need remove()
+ NULL, // don't need remove()
+ NULL // don't need removeRange()
};
// start with input set to guarantee inclusion
diff --git a/icuSources/common/unisetspan.cpp b/icuSources/common/unisetspan.cpp
new file mode 100644
index 00000000..0e43dfc3
--- /dev/null
+++ b/icuSources/common/unisetspan.cpp
@@ -0,0 +1,1508 @@
+/*
+******************************************************************************
+*
+* Copyright (C) 2007, International Business Machines
+* Corporation and others. All Rights Reserved.
+*
+******************************************************************************
+* file name: unisetspan.cpp
+* encoding: US-ASCII
+* tab size: 8 (not used)
+* indentation:4
+*
+* created on: 2007mar01
+* created by: Markus W. Scherer
+*/
+
+#include "unicode/utypes.h"
+#include "unicode/uniset.h"
+#include "unicode/ustring.h"
+#include "cmemory.h"
+#include "uvector.h"
+#include "unisetspan.h"
+
+U_NAMESPACE_BEGIN
+
+/*
+ * List of offsets from the current position from where to try matching
+ * a code point or a string.
+ * Store offsets rather than indexes to simplify the code and use the same list
+ * for both increments (in span()) and decrements (in spanBack()).
+ *
+ * Assumption: The maximum offset is limited, and the offsets that are stored
+ * at any one time are relatively dense, that is, there are normally no gaps of
+ * hundreds or thousands of offset values.
+ *
+ * The implementation uses a circular buffer of byte flags,
+ * each indicating whether the corresponding offset is in the list.
+ * This avoids inserting into a sorted list of offsets (or absolute indexes) and
+ * physically moving part of the list.
+ *
+ * Note: In principle, the caller should setMaxLength() to the maximum of the
+ * max string length and U16_LENGTH/U8_LENGTH to account for
+ * "long" single code points.
+ * However, this implementation uses at least a staticList with more than
+ * U8_LENGTH entries anyway.
+ *
+ * Note: If maxLength were guaranteed to be no more than 32 or 64,
+ * the list could be stored as bit flags in a single integer.
+ * Rather than handling a circular buffer with a start list index,
+ * the integer would simply be shifted when lower offsets are removed.
+ * UnicodeSet does not have a limit on the lengths of strings.
+ */
+class OffsetList { // Only ever stack-allocated, does not need to inherit UMemory.
+public:
+ OffsetList() : list(staticList), capacity(0), length(0), start(0) {}
+
+ ~OffsetList() {
+ if(list!=staticList) {
+ uprv_free(list);
+ }
+ }
+
+ // Call exactly once if the list is to be used.
+ void setMaxLength(int32_t maxLength) {
+ if(maxLength<=(int32_t)sizeof(staticList)) {
+ capacity=(int32_t)sizeof(staticList);
+ } else {
+ UBool *l=(UBool *)uprv_malloc(maxLength);
+ if(l!=NULL) {
+ list=l;
+ capacity=maxLength;
+ }
+ }
+ uprv_memset(list, 0, capacity);
+ }
+
+ void clear() {
+ uprv_memset(list, 0, capacity);
+ start=length=0;
+ }
+
+ UBool isEmpty() const {
+ return (UBool)(length==0);
+ }
+
+ // Reduce all stored offsets by delta, used when the current position
+ // moves by delta.
+ // There must not be any offsets lower than delta.
+ // If there is an offset equal to delta, it is removed.
+ // delta=[1..maxLength]
+ void shift(int32_t delta) {
+ int32_t i=start+delta;
+ if(i>=capacity) {
+ i-=capacity;
+ }
+ if(list[i]) {
+ list[i]=FALSE;
+ --length;
+ }
+ start=i;
+ }
+
+ // Add an offset. The list must not contain it yet.
+ // offset=[1..maxLength]
+ void addOffset(int32_t offset) {
+ int32_t i=start+offset;
+ if(i>=capacity) {
+ i-=capacity;
+ }
+ list[i]=TRUE;
+ ++length;
+ }
+
+ // offset=[1..maxLength]
+ UBool containsOffset(int32_t offset) const {
+ int32_t i=start+offset;
+ if(i>=capacity) {
+ i-=capacity;
+ }
+ return list[i];
+ }
+
+ // Find the lowest stored offset from a non-empty list, remove it,
+ // and reduce all other offsets by this minimum.
+ // Returns [1..maxLength].
+ int32_t popMinimum() {
+ // Look for the next offset in list[start+1..capacity-1].
+ int32_t i=start, result;
+ while(++imaxLength16) {
+ maxLength16=length16;
+ }
+ if((which&UTF8) && (thisRelevant || (which&CONTAINED))) {
+ int32_t length8=getUTF8Length(s16, length16);
+ utf8Length+=length8;
+ if(length8>maxLength8) {
+ maxLength8=length8;
+ }
+ }
+ }
+ if(!someRelevant) {
+ maxLength16=maxLength8=0;
+ return;
+ }
+
+ // Freeze after checking for the need to use strings at all because freezing
+ // a set takes some time and memory which are wasted if there are no relevant strings.
+ if(all) {
+ spanSet.freeze();
+ }
+
+ uint8_t *spanBackLengths;
+ uint8_t *spanUTF8Lengths;
+ uint8_t *spanBackUTF8Lengths;
+
+ // Allocate a block of meta data.
+ int32_t allocSize;
+ if(all) {
+ // UTF-8 lengths, 4 sets of span lengths, UTF-8 strings.
+ allocSize=stringsLength*(4+1+1+1+1)+utf8Length;
+ } else {
+ allocSize=stringsLength; // One set of span lengths.
+ if(which&UTF8) {
+ // UTF-8 lengths and UTF-8 strings.
+ allocSize+=stringsLength*4+utf8Length;
+ }
+ }
+ if(allocSize<=(int32_t)sizeof(staticLengths)) {
+ utf8Lengths=staticLengths;
+ } else {
+ utf8Lengths=(int32_t *)uprv_malloc(allocSize);
+ if(utf8Lengths==NULL) {
+ maxLength16=maxLength8=0; // Prevent usage by making needsStringSpanUTF16/8() return FALSE.
+ return; // Out of memory.
+ }
+ }
+
+ if(all) {
+ // Store span lengths for all span() variants.
+ spanLengths=(uint8_t *)(utf8Lengths+stringsLength);
+ spanBackLengths=spanLengths+stringsLength;
+ spanUTF8Lengths=spanBackLengths+stringsLength;
+ spanBackUTF8Lengths=spanUTF8Lengths+stringsLength;
+ utf8=spanBackUTF8Lengths+stringsLength;
+ } else {
+ // Store span lengths for only one span() variant.
+ if(which&UTF8) {
+ spanLengths=(uint8_t *)(utf8Lengths+stringsLength);
+ utf8=spanLengths+stringsLength;
+ } else {
+ spanLengths=(uint8_t *)utf8Lengths;
+ }
+ spanBackLengths=spanUTF8Lengths=spanBackUTF8Lengths=spanLengths;
+ }
+
+ // Set the meta data and pSpanNotSet and write the UTF-8 strings.
+ int32_t utf8Count=0; // Count UTF-8 bytes written so far.
+
+ for(i=0; ifreeze();
+ }
+}
+
+// Copy constructor. Assumes which==ALL for a frozen set.
+UnicodeSetStringSpan::UnicodeSetStringSpan(const UnicodeSetStringSpan &otherStringSpan,
+ const UVector &newParentSetStrings)
+ : spanSet(otherStringSpan.spanSet), pSpanNotSet(NULL), strings(newParentSetStrings),
+ utf8Lengths(NULL), spanLengths(NULL), utf8(NULL),
+ utf8Length(otherStringSpan.utf8Length),
+ maxLength16(otherStringSpan.maxLength16), maxLength8(otherStringSpan.maxLength8),
+ all(TRUE) {
+ if(otherStringSpan.pSpanNotSet==&otherStringSpan.spanSet) {
+ pSpanNotSet=&spanSet;
+ } else {
+ pSpanNotSet=(UnicodeSet *)otherStringSpan.pSpanNotSet->clone();
+ }
+
+ // Allocate a block of meta data.
+ // UTF-8 lengths, 4 sets of span lengths, UTF-8 strings.
+ int32_t stringsLength=strings.size();
+ int32_t allocSize=stringsLength*(4+1+1+1+1)+utf8Length;
+ if(allocSize<=(int32_t)sizeof(staticLengths)) {
+ utf8Lengths=staticLengths;
+ } else {
+ utf8Lengths=(int32_t *)uprv_malloc(allocSize);
+ if(utf8Lengths==NULL) {
+ maxLength16=maxLength8=0; // Prevent usage by making needsStringSpanUTF16/8() return FALSE.
+ return; // Out of memory.
+ }
+ }
+
+ spanLengths=(uint8_t *)(utf8Lengths+stringsLength);
+ utf8=spanLengths+stringsLength*4;
+ uprv_memcpy(utf8Lengths, otherStringSpan.utf8Lengths, allocSize);
+}
+
+UnicodeSetStringSpan::~UnicodeSetStringSpan() {
+ if(pSpanNotSet!=NULL && pSpanNotSet!=&spanSet) {
+ delete pSpanNotSet;
+ }
+ if(utf8Lengths!=NULL && utf8Lengths!=staticLengths) {
+ uprv_free(utf8Lengths);
+ }
+}
+
+void UnicodeSetStringSpan::addToSpanNotSet(UChar32 c) {
+ if(pSpanNotSet==NULL || pSpanNotSet==&spanSet) {
+ if(spanSet.contains(c)) {
+ return; // Nothing to do.
+ }
+ UnicodeSet *newSet=(UnicodeSet *)spanSet.cloneAsThawed();
+ if(newSet==NULL) {
+ return; // Out of memory.
+ } else {
+ pSpanNotSet=newSet;
+ }
+ }
+ pSpanNotSet->add(c);
+}
+
+// Compare strings without any argument checks. Requires length>0.
+static inline UBool
+matches16(const UChar *s, const UChar *t, int32_t length) {
+ do {
+ if(*s++!=*t++) {
+ return FALSE;
+ }
+ } while(--length>0);
+ return TRUE;
+}
+
+static inline UBool
+matches8(const uint8_t *s, const uint8_t *t, int32_t length) {
+ do {
+ if(*s++!=*t++) {
+ return FALSE;
+ }
+ } while(--length>0);
+ return TRUE;
+}
+
+// Compare 16-bit Unicode strings (which may be malformed UTF-16)
+// at code point boundaries.
+// That is, each edge of a match must not be in the middle of a surrogate pair.
+static inline UBool
+matches16CPB(const UChar *s, int32_t start, int32_t limit, const UChar *t, int32_t length) {
+ s+=start;
+ limit-=start;
+ return matches16(s, t, length) &&
+ !(0=0xd800 && c<=0xdbff && length>=2 && U16_IS_TRAIL(c2=s[1])) {
+ return set.contains(U16_GET_SUPPLEMENTARY(c, c2)) ? 2 : -2;
+ }
+ return set.contains(c) ? 1 : -1;
+}
+
+static inline int32_t
+spanOneBack(const UnicodeSet &set, const UChar *s, int32_t length) {
+ UChar c=s[length-1], c2;
+ if(c>=0xdc00 && c<=0xdfff && length>=2 && U16_IS_LEAD(c2=s[length-2])) {
+ return set.contains(U16_GET_SUPPLEMENTARY(c2, c)) ? 2 : -2;
+ }
+ return set.contains(c) ? 1 : -1;
+}
+
+static inline int32_t
+spanOneUTF8(const UnicodeSet &set, const uint8_t *s, int32_t length) {
+ UChar32 c=*s;
+ if((int8_t)c>=0) {
+ return set.contains(c) ? 1 : -1;
+ }
+ // Take advantage of non-ASCII fastpaths in U8_NEXT().
+ int32_t i=0;
+ U8_NEXT(s, i, length, c);
+ return set.contains(c) ? i : -i;
+}
+
+static inline int32_t
+spanOneBackUTF8(const UnicodeSet &set, const uint8_t *s, int32_t length) {
+ UChar32 c=s[length-1];
+ if((int8_t)c>=0) {
+ return set.contains(c) ? 1 : -1;
+ }
+ int32_t i=length-1;
+ c=utf8_prevCharSafeBody(s, 0, &i, c, -1);
+ length-=i;
+ return set.contains(c) ? length : -length;
+}
+
+/*
+ * Note: In span() when spanLength==0 (after a string match, or at the beginning
+ * after an empty code point span) and in spanNot() and spanNotUTF8(),
+ * string matching could use a binary search
+ * because all string matches are done from the same start index.
+ *
+ * For UTF-8, this would require a comparison function that returns UTF-16 order.
+ *
+ * This optimization should not be necessary for normal UnicodeSets because
+ * most sets have no strings, and most sets with strings have
+ * very few very short strings.
+ * For cases with many strings, it might be better to use a different API
+ * and implementation with a DFA (state machine).
+ */
+
+/*
+ * Algorithm for span(USET_SPAN_CONTAINED)
+ *
+ * Theoretical algorithm:
+ * - Iterate through the string, and at each code point boundary:
+ * + If the code point there is in the set, then remember to continue after it.
+ * + If a set string matches at the current position, then remember to continue after it.
+ * + Either recursively span for each code point or string match,
+ * or recursively span for all but the shortest one and
+ * iteratively continue the span with the shortest local match.
+ * + Remember the longest recursive span (the farthest end point).
+ * + If there is no match at the current position, neither for the code point there
+ * nor for any set string, then stop and return the longest recursive span length.
+ *
+ * Optimized implementation:
+ *
+ * (We assume that most sets will have very few very short strings.
+ * A span using a string-less set is extremely fast.)
+ *
+ * Create and cache a spanSet which contains all of the single code points
+ * of the original set but none of its strings.
+ *
+ * - Start with spanLength=spanSet.span(USET_SPAN_CONTAINED).
+ * - Loop:
+ * + Try to match each set string at the end of the spanLength.
+ * ~ Set strings that start with set-contained code points must be matched
+ * with a partial overlap because the recursive algorithm would have tried
+ * to match them at every position.
+ * ~ Set strings that entirely consist of set-contained code points
+ * are irrelevant for span(USET_SPAN_CONTAINED) because the
+ * recursive algorithm would continue after them anyway
+ * and find the longest recursive match from their end.
+ * ~ Rather than recursing, note each end point of a set string match.
+ * + If no set string matched after spanSet.span(), then return
+ * with where the spanSet.span() ended.
+ * + If at least one set string matched after spanSet.span(), then
+ * pop the shortest string match end point and continue
+ * the loop, trying to match all set strings from there.
+ * + If at least one more set string matched after a previous string match,
+ * then test if the code point after the previous string match is also
+ * contained in the set.
+ * Continue the loop with the shortest end point of either this code point
+ * or a matching set string.
+ * + If no more set string matched after a previous string match,
+ * then try another spanLength=spanSet.span(USET_SPAN_CONTAINED).
+ * Stop if spanLength==0, otherwise continue the loop.
+ *
+ * By noting each end point of a set string match,
+ * the function visits each string position at most once and finishes
+ * in linear time.
+ *
+ * The recursive algorithm may visit the same string position many times
+ * if multiple paths lead to it and finishes in exponential time.
+ */
+
+/*
+ * Algorithm for span(USET_SPAN_SIMPLE)
+ *
+ * Theoretical algorithm:
+ * - Iterate through the string, and at each code point boundary:
+ * + If the code point there is in the set, then remember to continue after it.
+ * + If a set string matches at the current position, then remember to continue after it.
+ * + Continue from the farthest match position and ignore all others.
+ * + If there is no match at the current position,
+ * then stop and return the current position.
+ *
+ * Optimized implementation:
+ *
+ * (Same assumption and spanSet as above.)
+ *
+ * - Start with spanLength=spanSet.span(USET_SPAN_CONTAINED).
+ * - Loop:
+ * + Try to match each set string at the end of the spanLength.
+ * ~ Set strings that start with set-contained code points must be matched
+ * with a partial overlap because the standard algorithm would have tried
+ * to match them earlier.
+ * ~ Set strings that entirely consist of set-contained code points
+ * must be matched with a full overlap because the longest-match algorithm
+ * would hide set string matches that end earlier.
+ * Such set strings need not be matched earlier inside the code point span
+ * because the standard algorithm would then have continued after
+ * the set string match anyway.
+ * ~ Remember the longest set string match (farthest end point) from the earliest
+ * starting point.
+ * + If no set string matched after spanSet.span(), then return
+ * with where the spanSet.span() ended.
+ * + If at least one set string matched, then continue the loop after the
+ * longest match from the earliest position.
+ * + If no more set string matched after a previous string match,
+ * then try another spanLength=spanSet.span(USET_SPAN_CONTAINED).
+ * Stop if spanLength==0, otherwise continue the loop.
+ */
+
+int32_t UnicodeSetStringSpan::span(const UChar *s, int32_t length, USetSpanCondition spanCondition) const {
+ if(spanCondition==USET_SPAN_NOT_CONTAINED) {
+ return spanNot(s, length);
+ }
+ int32_t spanLength=spanSet.span(s, length, USET_SPAN_CONTAINED);
+ if(spanLength==length) {
+ return length;
+ }
+
+ // Consider strings; they may overlap with the span.
+ OffsetList offsets;
+ if(spanCondition==USET_SPAN_CONTAINED) {
+ // Use offset list to try all possibilities.
+ offsets.setMaxLength(maxLength16);
+ }
+ int32_t pos=spanLength, rest=length-pos;
+ int32_t i, stringsLength=strings.size();
+ for(;;) {
+ if(spanCondition==USET_SPAN_CONTAINED) {
+ for(i=0; i=LONG_SPAN) {
+ overlap=length16;
+ // While contained: No point matching fully inside the code point span.
+ U16_BACK_1(s16, 0, overlap); // Length of the string minus the last code point.
+ }
+ if(overlap>spanLength) {
+ overlap=spanLength;
+ }
+ int32_t inc=length16-overlap; // Keep overlap+inc==length16.
+ for(;;) {
+ if(inc>rest) {
+ break;
+ }
+ // Try to match if the increment is not listed already.
+ if(!offsets.containsOffset(inc) && matches16CPB(s, pos-overlap, length, s16, length16)) {
+ if(inc==rest) {
+ return length; // Reached the end of the string.
+ }
+ offsets.addOffset(inc);
+ }
+ if(overlap==0) {
+ break;
+ }
+ --overlap;
+ ++inc;
+ }
+ }
+ } else /* USET_SPAN_SIMPLE */ {
+ int32_t maxInc=0, maxOverlap=0;
+ for(i=0; i=LONG_SPAN) {
+ overlap=length16;
+ // Longest match: Need to match fully inside the code point span
+ // to find the match from the earliest start.
+ }
+ if(overlap>spanLength) {
+ overlap=spanLength;
+ }
+ int32_t inc=length16-overlap; // Keep overlap+inc==length16.
+ for(;;) {
+ if(inc>rest || overlapmaxOverlap || /* redundant overlap==maxOverlap && */ inc>maxInc) &&
+ matches16CPB(s, pos-overlap, length, s16, length16)
+ ) {
+ maxInc=inc; // Longest match from earliest start.
+ maxOverlap=overlap;
+ break;
+ }
+ --overlap;
+ ++inc;
+ }
+ }
+
+ if(maxInc!=0 || maxOverlap!=0) {
+ // Longest-match algorithm, and there was a string match.
+ // Simply continue after it.
+ pos+=maxInc;
+ rest-=maxInc;
+ if(rest==0) {
+ return length; // Reached the end of the string.
+ }
+ spanLength=0; // Match strings from after a string match.
+ continue;
+ }
+ }
+ // Finished trying to match all strings at pos.
+
+ if(spanLength!=0 || pos==0) {
+ // The position is after an unlimited code point span (spanLength!=0),
+ // not after a string match.
+ // The only position where spanLength==0 after a span is pos==0.
+ // Otherwise, an unlimited code point span is only tried again when no
+ // strings match, and if such a non-initial span fails we stop.
+ if(offsets.isEmpty()) {
+ return pos; // No strings matched after a span.
+ }
+ // Match strings from after the next string match.
+ } else {
+ // The position is after a string match (or a single code point).
+ if(offsets.isEmpty()) {
+ // No more strings matched after a previous string match.
+ // Try another code point span from after the last string match.
+ spanLength=spanSet.span(s+pos, rest, USET_SPAN_CONTAINED);
+ if( spanLength==rest || // Reached the end of the string, or
+ spanLength==0 // neither strings nor span progressed.
+ ) {
+ return pos+spanLength;
+ }
+ pos+=spanLength;
+ rest-=spanLength;
+ continue; // spanLength>0: Match strings from after a span.
+ } else {
+ // Try to match only one code point from after a string match if some
+ // string matched beyond it, so that we try all possible positions
+ // and don't overshoot.
+ spanLength=spanOne(spanSet, s+pos, rest);
+ if(spanLength>0) {
+ if(spanLength==rest) {
+ return length; // Reached the end of the string.
+ }
+ // Match strings after this code point.
+ // There cannot be any increments below it because UnicodeSet strings
+ // contain multiple code points.
+ pos+=spanLength;
+ rest-=spanLength;
+ offsets.shift(spanLength);
+ spanLength=0;
+ continue; // Match strings from after a single code point.
+ }
+ // Match strings from after the next string match.
+ }
+ }
+ int32_t minOffset=offsets.popMinimum();
+ pos+=minOffset;
+ rest-=minOffset;
+ spanLength=0; // Match strings from after a string match.
+ }
+}
+
+int32_t UnicodeSetStringSpan::spanBack(const UChar *s, int32_t length, USetSpanCondition spanCondition) const {
+ if(spanCondition==USET_SPAN_NOT_CONTAINED) {
+ return spanNotBack(s, length);
+ }
+ int32_t pos=spanSet.spanBack(s, length, USET_SPAN_CONTAINED);
+ if(pos==0) {
+ return 0;
+ }
+ int32_t spanLength=length-pos;
+
+ // Consider strings; they may overlap with the span.
+ OffsetList offsets;
+ if(spanCondition==USET_SPAN_CONTAINED) {
+ // Use offset list to try all possibilities.
+ offsets.setMaxLength(maxLength16);
+ }
+ int32_t i, stringsLength=strings.size();
+ uint8_t *spanBackLengths=spanLengths;
+ if(all) {
+ spanBackLengths+=stringsLength;
+ }
+ for(;;) {
+ if(spanCondition==USET_SPAN_CONTAINED) {
+ for(i=0; i=LONG_SPAN) {
+ overlap=length16;
+ // While contained: No point matching fully inside the code point span.
+ int32_t len1=0;
+ U16_FWD_1(s16, len1, overlap);
+ overlap-=len1; // Length of the string minus the first code point.
+ }
+ if(overlap>spanLength) {
+ overlap=spanLength;
+ }
+ int32_t dec=length16-overlap; // Keep dec+overlap==length16.
+ for(;;) {
+ if(dec>pos) {
+ break;
+ }
+ // Try to match if the decrement is not listed already.
+ if(!offsets.containsOffset(dec) && matches16CPB(s, pos-dec, length, s16, length16)) {
+ if(dec==pos) {
+ return 0; // Reached the start of the string.
+ }
+ offsets.addOffset(dec);
+ }
+ if(overlap==0) {
+ break;
+ }
+ --overlap;
+ ++dec;
+ }
+ }
+ } else /* USET_SPAN_SIMPLE */ {
+ int32_t maxDec=0, maxOverlap=0;
+ for(i=0; i=LONG_SPAN) {
+ overlap=length16;
+ // Longest match: Need to match fully inside the code point span
+ // to find the match from the latest end.
+ }
+ if(overlap>spanLength) {
+ overlap=spanLength;
+ }
+ int32_t dec=length16-overlap; // Keep dec+overlap==length16.
+ for(;;) {
+ if(dec>pos || overlapmaxOverlap || /* redundant overlap==maxOverlap && */ dec>maxDec) &&
+ matches16CPB(s, pos-dec, length, s16, length16)
+ ) {
+ maxDec=dec; // Longest match from latest end.
+ maxOverlap=overlap;
+ break;
+ }
+ --overlap;
+ ++dec;
+ }
+ }
+
+ if(maxDec!=0 || maxOverlap!=0) {
+ // Longest-match algorithm, and there was a string match.
+ // Simply continue before it.
+ pos-=maxDec;
+ if(pos==0) {
+ return 0; // Reached the start of the string.
+ }
+ spanLength=0; // Match strings from before a string match.
+ continue;
+ }
+ }
+ // Finished trying to match all strings at pos.
+
+ if(spanLength!=0 || pos==length) {
+ // The position is before an unlimited code point span (spanLength!=0),
+ // not before a string match.
+ // The only position where spanLength==0 before a span is pos==length.
+ // Otherwise, an unlimited code point span is only tried again when no
+ // strings match, and if such a non-initial span fails we stop.
+ if(offsets.isEmpty()) {
+ return pos; // No strings matched before a span.
+ }
+ // Match strings from before the next string match.
+ } else {
+ // The position is before a string match (or a single code point).
+ if(offsets.isEmpty()) {
+ // No more strings matched before a previous string match.
+ // Try another code point span from before the last string match.
+ int32_t oldPos=pos;
+ pos=spanSet.spanBack(s, oldPos, USET_SPAN_CONTAINED);
+ spanLength=oldPos-pos;
+ if( pos==0 || // Reached the start of the string, or
+ spanLength==0 // neither strings nor span progressed.
+ ) {
+ return pos;
+ }
+ continue; // spanLength>0: Match strings from before a span.
+ } else {
+ // Try to match only one code point from before a string match if some
+ // string matched beyond it, so that we try all possible positions
+ // and don't overshoot.
+ spanLength=spanOneBack(spanSet, s, pos);
+ if(spanLength>0) {
+ if(spanLength==pos) {
+ return 0; // Reached the start of the string.
+ }
+ // Match strings before this code point.
+ // There cannot be any decrements below it because UnicodeSet strings
+ // contain multiple code points.
+ pos-=spanLength;
+ offsets.shift(spanLength);
+ spanLength=0;
+ continue; // Match strings from before a single code point.
+ }
+ // Match strings from before the next string match.
+ }
+ }
+ pos-=offsets.popMinimum();
+ spanLength=0; // Match strings from before a string match.
+ }
+}
+
+int32_t UnicodeSetStringSpan::spanUTF8(const uint8_t *s, int32_t length, USetSpanCondition spanCondition) const {
+ if(spanCondition==USET_SPAN_NOT_CONTAINED) {
+ return spanNotUTF8(s, length);
+ }
+ int32_t spanLength=spanSet.spanUTF8((const char *)s, length, USET_SPAN_CONTAINED);
+ if(spanLength==length) {
+ return length;
+ }
+
+ // Consider strings; they may overlap with the span.
+ OffsetList offsets;
+ if(spanCondition==USET_SPAN_CONTAINED) {
+ // Use offset list to try all possibilities.
+ offsets.setMaxLength(maxLength8);
+ }
+ int32_t pos=spanLength, rest=length-pos;
+ int32_t i, stringsLength=strings.size();
+ uint8_t *spanUTF8Lengths=spanLengths;
+ if(all) {
+ spanUTF8Lengths+=2*stringsLength;
+ }
+ for(;;) {
+ const uint8_t *s8=utf8;
+ int32_t length8;
+ if(spanCondition==USET_SPAN_CONTAINED) {
+ for(i=0; i=LONG_SPAN) {
+ overlap=length8;
+ // While contained: No point matching fully inside the code point span.
+ U8_BACK_1(s8, 0, overlap); // Length of the string minus the last code point.
+ }
+ if(overlap>spanLength) {
+ overlap=spanLength;
+ }
+ int32_t inc=length8-overlap; // Keep overlap+inc==length8.
+ for(;;) {
+ if(inc>rest) {
+ break;
+ }
+ // Try to match if the increment is not listed already.
+ // Match at code point boundaries. (The UTF-8 strings were converted
+ // from UTF-16 and are guaranteed to be well-formed.)
+ if( !U8_IS_TRAIL(s[pos-overlap]) &&
+ !offsets.containsOffset(inc) &&
+ matches8(s+pos-overlap, s8, length8)
+
+ ) {
+ if(inc==rest) {
+ return length; // Reached the end of the string.
+ }
+ offsets.addOffset(inc);
+ }
+ if(overlap==0) {
+ break;
+ }
+ --overlap;
+ ++inc;
+ }
+ s8+=length8;
+ }
+ } else /* USET_SPAN_SIMPLE */ {
+ int32_t maxInc=0, maxOverlap=0;
+ for(i=0; i=LONG_SPAN) {
+ overlap=length8;
+ // Longest match: Need to match fully inside the code point span
+ // to find the match from the earliest start.
+ }
+ if(overlap>spanLength) {
+ overlap=spanLength;
+ }
+ int32_t inc=length8-overlap; // Keep overlap+inc==length8.
+ for(;;) {
+ if(inc>rest || overlapmaxOverlap || /* redundant overlap==maxOverlap && */ inc>maxInc) &&
+ matches8(s+pos-overlap, s8, length8)
+
+ ) {
+ maxInc=inc; // Longest match from earliest start.
+ maxOverlap=overlap;
+ break;
+ }
+ --overlap;
+ ++inc;
+ }
+ s8+=length8;
+ }
+
+ if(maxInc!=0 || maxOverlap!=0) {
+ // Longest-match algorithm, and there was a string match.
+ // Simply continue after it.
+ pos+=maxInc;
+ rest-=maxInc;
+ if(rest==0) {
+ return length; // Reached the end of the string.
+ }
+ spanLength=0; // Match strings from after a string match.
+ continue;
+ }
+ }
+ // Finished trying to match all strings at pos.
+
+ if(spanLength!=0 || pos==0) {
+ // The position is after an unlimited code point span (spanLength!=0),
+ // not after a string match.
+ // The only position where spanLength==0 after a span is pos==0.
+ // Otherwise, an unlimited code point span is only tried again when no
+ // strings match, and if such a non-initial span fails we stop.
+ if(offsets.isEmpty()) {
+ return pos; // No strings matched after a span.
+ }
+ // Match strings from after the next string match.
+ } else {
+ // The position is after a string match (or a single code point).
+ if(offsets.isEmpty()) {
+ // No more strings matched after a previous string match.
+ // Try another code point span from after the last string match.
+ spanLength=spanSet.spanUTF8((const char *)s+pos, rest, USET_SPAN_CONTAINED);
+ if( spanLength==rest || // Reached the end of the string, or
+ spanLength==0 // neither strings nor span progressed.
+ ) {
+ return pos+spanLength;
+ }
+ pos+=spanLength;
+ rest-=spanLength;
+ continue; // spanLength>0: Match strings from after a span.
+ } else {
+ // Try to match only one code point from after a string match if some
+ // string matched beyond it, so that we try all possible positions
+ // and don't overshoot.
+ spanLength=spanOneUTF8(spanSet, s+pos, rest);
+ if(spanLength>0) {
+ if(spanLength==rest) {
+ return length; // Reached the end of the string.
+ }
+ // Match strings after this code point.
+ // There cannot be any increments below it because UnicodeSet strings
+ // contain multiple code points.
+ pos+=spanLength;
+ rest-=spanLength;
+ offsets.shift(spanLength);
+ spanLength=0;
+ continue; // Match strings from after a single code point.
+ }
+ // Match strings from after the next string match.
+ }
+ }
+ int32_t minOffset=offsets.popMinimum();
+ pos+=minOffset;
+ rest-=minOffset;
+ spanLength=0; // Match strings from after a string match.
+ }
+}
+
+int32_t UnicodeSetStringSpan::spanBackUTF8(const uint8_t *s, int32_t length, USetSpanCondition spanCondition) const {
+ if(spanCondition==USET_SPAN_NOT_CONTAINED) {
+ return spanNotBackUTF8(s, length);
+ }
+ int32_t pos=spanSet.spanBackUTF8((const char *)s, length, USET_SPAN_CONTAINED);
+ if(pos==0) {
+ return 0;
+ }
+ int32_t spanLength=length-pos;
+
+ // Consider strings; they may overlap with the span.
+ OffsetList offsets;
+ if(spanCondition==USET_SPAN_CONTAINED) {
+ // Use offset list to try all possibilities.
+ offsets.setMaxLength(maxLength8);
+ }
+ int32_t i, stringsLength=strings.size();
+ uint8_t *spanBackUTF8Lengths=spanLengths;
+ if(all) {
+ spanBackUTF8Lengths+=3*stringsLength;
+ }
+ for(;;) {
+ const uint8_t *s8=utf8;
+ int32_t length8;
+ if(spanCondition==USET_SPAN_CONTAINED) {
+ for(i=0; i=LONG_SPAN) {
+ overlap=length8;
+ // While contained: No point matching fully inside the code point span.
+ int32_t len1=0;
+ U8_FWD_1(s8, len1, overlap);
+ overlap-=len1; // Length of the string minus the first code point.
+ }
+ if(overlap>spanLength) {
+ overlap=spanLength;
+ }
+ int32_t dec=length8-overlap; // Keep dec+overlap==length8.
+ for(;;) {
+ if(dec>pos) {
+ break;
+ }
+ // Try to match if the decrement is not listed already.
+ // Match at code point boundaries. (The UTF-8 strings were converted
+ // from UTF-16 and are guaranteed to be well-formed.)
+ if( !U8_IS_TRAIL(s[pos-dec]) &&
+ !offsets.containsOffset(dec) &&
+ matches8(s+pos-dec, s8, length8)
+ ) {
+ if(dec==pos) {
+ return 0; // Reached the start of the string.
+ }
+ offsets.addOffset(dec);
+ }
+ if(overlap==0) {
+ break;
+ }
+ --overlap;
+ ++dec;
+ }
+ s8+=length8;
+ }
+ } else /* USET_SPAN_SIMPLE */ {
+ int32_t maxDec=0, maxOverlap=0;
+ for(i=0; i=LONG_SPAN) {
+ overlap=length8;
+ // Longest match: Need to match fully inside the code point span
+ // to find the match from the latest end.
+ }
+ if(overlap>spanLength) {
+ overlap=spanLength;
+ }
+ int32_t dec=length8-overlap; // Keep dec+overlap==length8.
+ for(;;) {
+ if(dec>pos || overlapmaxOverlap || /* redundant overlap==maxOverlap && */ dec>maxDec) &&
+ matches8(s+pos-dec, s8, length8)
+ ) {
+ maxDec=dec; // Longest match from latest end.
+ maxOverlap=overlap;
+ break;
+ }
+ --overlap;
+ ++dec;
+ }
+ s8+=length8;
+ }
+
+ if(maxDec!=0 || maxOverlap!=0) {
+ // Longest-match algorithm, and there was a string match.
+ // Simply continue before it.
+ pos-=maxDec;
+ if(pos==0) {
+ return 0; // Reached the start of the string.
+ }
+ spanLength=0; // Match strings from before a string match.
+ continue;
+ }
+ }
+ // Finished trying to match all strings at pos.
+
+ if(spanLength!=0 || pos==length) {
+ // The position is before an unlimited code point span (spanLength!=0),
+ // not before a string match.
+ // The only position where spanLength==0 before a span is pos==length.
+ // Otherwise, an unlimited code point span is only tried again when no
+ // strings match, and if such a non-initial span fails we stop.
+ if(offsets.isEmpty()) {
+ return pos; // No strings matched before a span.
+ }
+ // Match strings from before the next string match.
+ } else {
+ // The position is before a string match (or a single code point).
+ if(offsets.isEmpty()) {
+ // No more strings matched before a previous string match.
+ // Try another code point span from before the last string match.
+ int32_t oldPos=pos;
+ pos=spanSet.spanBackUTF8((const char *)s, oldPos, USET_SPAN_CONTAINED);
+ spanLength=oldPos-pos;
+ if( pos==0 || // Reached the start of the string, or
+ spanLength==0 // neither strings nor span progressed.
+ ) {
+ return pos;
+ }
+ continue; // spanLength>0: Match strings from before a span.
+ } else {
+ // Try to match only one code point from before a string match if some
+ // string matched beyond it, so that we try all possible positions
+ // and don't overshoot.
+ spanLength=spanOneBackUTF8(spanSet, s, pos);
+ if(spanLength>0) {
+ if(spanLength==pos) {
+ return 0; // Reached the start of the string.
+ }
+ // Match strings before this code point.
+ // There cannot be any decrements below it because UnicodeSet strings
+ // contain multiple code points.
+ pos-=spanLength;
+ offsets.shift(spanLength);
+ spanLength=0;
+ continue; // Match strings from before a single code point.
+ }
+ // Match strings from before the next string match.
+ }
+ }
+ pos-=offsets.popMinimum();
+ spanLength=0; // Match strings from before a string match.
+ }
+}
+
+/*
+ * Algorithm for spanNot()==span(USET_SPAN_NOT_CONTAINED)
+ *
+ * Theoretical algorithm:
+ * - Iterate through the string, and at each code point boundary:
+ * + If the code point there is in the set, then return with the current position.
+ * + If a set string matches at the current position, then return with the current position.
+ *
+ * Optimized implementation:
+ *
+ * (Same assumption as for span() above.)
+ *
+ * Create and cache a spanNotSet which contains all of the single code points
+ * of the original set but none of its strings.
+ * For each set string add its initial code point to the spanNotSet.
+ * (Also add its final code point for spanNotBack().)
+ *
+ * - Loop:
+ * + Do spanLength=spanNotSet.span(USET_SPAN_NOT_CONTAINED).
+ * + If the current code point is in the original set, then
+ * return the current position.
+ * + If any set string matches at the current position, then
+ * return the current position.
+ * + If there is no match at the current position, neither for the code point there
+ * nor for any set string, then skip this code point and continue the loop.
+ * This happens for set-string-initial code points that were added to spanNotSet
+ * when there is not actually a match for such a set string.
+ */
+
+int32_t UnicodeSetStringSpan::spanNot(const UChar *s, int32_t length) const {
+ int32_t pos=0, rest=length;
+ int32_t i, stringsLength=strings.size();
+ do {
+ // Span until we find a code point from the set,
+ // or a code point that starts or ends some string.
+ i=pSpanNotSet->span(s+pos, rest, USET_SPAN_NOT_CONTAINED);
+ if(i==rest) {
+ return length; // Reached the end of the string.
+ }
+ pos+=i;
+ rest-=i;
+
+ // Check whether the current code point is in the original set,
+ // without the string starts and ends.
+ int32_t cpLength=spanOne(spanSet, s+pos, rest);
+ if(cpLength>0) {
+ return pos; // There is a set element at pos.
+ }
+
+ // Try to match the strings at pos.
+ for(i=0; ispanBack(s, pos, USET_SPAN_NOT_CONTAINED);
+ if(pos==0) {
+ return 0; // Reached the start of the string.
+ }
+
+ // Check whether the current code point is in the original set,
+ // without the string starts and ends.
+ int32_t cpLength=spanOneBack(spanSet, s, pos);
+ if(cpLength>0) {
+ return pos; // There is a set element at pos.
+ }
+
+ // Try to match the strings at pos.
+ for(i=0; ispanUTF8((const char *)s+pos, rest, USET_SPAN_NOT_CONTAINED);
+ if(i==rest) {
+ return length; // Reached the end of the string.
+ }
+ pos+=i;
+ rest-=i;
+
+ // Check whether the current code point is in the original set,
+ // without the string starts and ends.
+ int32_t cpLength=spanOneUTF8(spanSet, s+pos, rest);
+ if(cpLength>0) {
+ return pos; // There is a set element at pos.
+ }
+
+ // Try to match the strings at pos.
+ const uint8_t *s8=utf8;
+ int32_t length8;
+ for(i=0; ispanBackUTF8((const char *)s, pos, USET_SPAN_NOT_CONTAINED);
+ if(pos==0) {
+ return 0; // Reached the start of the string.
+ }
+
+ // Check whether the current code point is in the original set,
+ // without the string starts and ends.
+ int32_t cpLength=spanOneBackUTF8(spanSet, s, pos);
+ if(cpLength>0) {
+ return pos; // There is a set element at pos.
+ }
+
+ // Try to match the strings at pos.
+ const uint8_t *s8=utf8;
+ int32_t length8;
+ for(i=0; i=0xfe.
+ LONG_SPAN=0xfe,
+ // All code points in the string are contained in the parent set.
+ ALL_CP_CONTAINED=0xff
+ };
+
+ // Add a starting or ending string character to the spanNotSet
+ // so that a character span ends before any string.
+ void addToSpanNotSet(UChar32 c);
+
+ int32_t spanNot(const UChar *s, int32_t length) const;
+ int32_t spanNotBack(const UChar *s, int32_t length) const;
+ int32_t spanNotUTF8(const uint8_t *s, int32_t length) const;
+ int32_t spanNotBackUTF8(const uint8_t *s, int32_t length) const;
+
+ // Set for span(). Same as parent but without strings.
+ UnicodeSet spanSet;
+
+ // Set for span(not contained).
+ // Same as spanSet, plus characters that start or end strings.
+ UnicodeSet *pSpanNotSet;
+
+ // The strings of the parent set.
+ const UVector &strings;
+
+ // Pointer to the UTF-8 string lengths.
+ // Also pointer to further allocated storage for meta data and
+ // UTF-8 string contents as necessary.
+ int32_t *utf8Lengths;
+
+ // Pointer to the part of the (utf8Lengths) memory block that stores
+ // the lengths of span(), spanBack() etc. for each string.
+ uint8_t *spanLengths;
+
+ // Pointer to the part of the (utf8Lengths) memory block that stores
+ // the UTF-8 versions of the parent set's strings.
+ uint8_t *utf8;
+
+ // Number of bytes for all UTF-8 versions of strings together.
+ int32_t utf8Length;
+
+ // Maximum lengths of relevant strings.
+ int32_t maxLength16;
+ int32_t maxLength8;
+
+ // Set up for all variants of span()?
+ UBool all;
+
+ // Memory for small numbers and lengths of strings.
+ // For example, for 8 strings:
+ // 8 UTF-8 lengths, 8*4 bytes span lengths, 8*2 3-byte UTF-8 characters
+ // = 112 bytes = int32_t[28].
+ int32_t staticLengths[32];
+};
+
+UBool UnicodeSetStringSpan::needsStringSpanUTF16() {
+ return (UBool)(maxLength16!=0);
+}
+
+UBool UnicodeSetStringSpan::needsStringSpanUTF8() {
+ return (UBool)(maxLength8!=0);
+}
+
+UBool UnicodeSetStringSpan::contains(UChar32 c) const {
+ return spanSet.contains(c);
+}
+
+U_NAMESPACE_END
+
+#endif
diff --git a/icuSources/common/unistr.cpp b/icuSources/common/unistr.cpp
index 1b3e9da5..52fddf32 100644
--- a/icuSources/common/unistr.cpp
+++ b/icuSources/common/unistr.cpp
@@ -1,6 +1,6 @@
/*
******************************************************************************
-* Copyright (C) 1999-2005, International Business Machines Corporation and *
+* Copyright (C) 1999-2008, International Business Machines Corporation and *
* others. All Rights Reserved. *
******************************************************************************
*
@@ -90,7 +90,7 @@ us_arrayCopy(const UChar *src, int32_t srcStart,
U_CDECL_BEGIN
static UChar U_CALLCONV
UnicodeString_charAt(int32_t offset, void *context) {
- return ((UnicodeString*) context)->charAt(offset);
+ return ((U_NAMESPACE_QUALIFIER UnicodeString*) context)->charAt(offset);
}
U_CDECL_END
@@ -118,11 +118,11 @@ operator+ (const UnicodeString &s1, const UnicodeString &s2) {
void
UnicodeString::addRef()
-{ umtx_atomic_inc((int32_t *)fArray - 1);}
+{ umtx_atomic_inc((int32_t *)fUnion.fFields.fArray - 1);}
int32_t
UnicodeString::removeRef()
-{ return umtx_atomic_dec((int32_t *)fArray - 1);}
+{ return umtx_atomic_dec((int32_t *)fUnion.fFields.fArray - 1);}
int32_t
UnicodeString::refCount() const
@@ -130,7 +130,7 @@ UnicodeString::refCount() const
umtx_lock(NULL);
// Note: without the lock to force a memory barrier, we might see a very
// stale value on some multi-processor systems.
- int32_t count = *((int32_t *)fArray - 1);
+ int32_t count = *((int32_t *)fUnion.fFields.fArray - 1);
umtx_unlock(NULL);
return count;
}
@@ -138,7 +138,7 @@ UnicodeString::refCount() const
void
UnicodeString::releaseArray() {
if((fFlags & kRefCounted) && removeRef() == 0) {
- uprv_free((int32_t *)fArray - 1);
+ uprv_free((int32_t *)fUnion.fFields.fArray - 1);
}
}
@@ -148,16 +148,12 @@ UnicodeString::releaseArray() {
// Constructors
//========================================
UnicodeString::UnicodeString()
- : fLength(0),
- fCapacity(US_STACKBUF_SIZE),
- fArray(fStackBuffer),
+ : fShortLength(0),
fFlags(kShortString)
{}
UnicodeString::UnicodeString(int32_t capacity, UChar32 c, int32_t count)
- : fLength(0),
- fCapacity(US_STACKBUF_SIZE),
- fArray(0),
+ : fShortLength(0),
fFlags(0)
{
if(count <= 0 || (uint32_t)c > 0x10ffff) {
@@ -170,13 +166,14 @@ UnicodeString::UnicodeString(int32_t capacity, UChar32 c, int32_t count)
capacity = length;
}
if(allocate(capacity)) {
+ UChar *array = getArrayStart();
int32_t i = 0;
// fill the new string with c
if(unitCount == 1) {
// fill with length UChars
while(i < length) {
- fArray[i++] = (UChar)c;
+ array[i++] = (UChar)c;
}
} else {
// get the code units for c
@@ -191,40 +188,34 @@ UnicodeString::UnicodeString(int32_t capacity, UChar32 c, int32_t count)
while(i < length) {
int32_t unitIdx = 0;
while(unitIdx < unitCount) {
- fArray[i++]=units[unitIdx++];
+ array[i++]=units[unitIdx++];
}
}
}
}
- fLength = length;
+ setLength(length);
}
}
UnicodeString::UnicodeString(UChar ch)
- : fLength(1),
- fCapacity(US_STACKBUF_SIZE),
- fArray(fStackBuffer),
+ : fShortLength(1),
fFlags(kShortString)
{
- fStackBuffer[0] = ch;
+ fUnion.fStackBuffer[0] = ch;
}
UnicodeString::UnicodeString(UChar32 ch)
- : fLength(1),
- fCapacity(US_STACKBUF_SIZE),
- fArray(fStackBuffer),
+ : fShortLength(0),
fFlags(kShortString)
{
int32_t i = 0;
UBool isError = FALSE;
- U16_APPEND(fStackBuffer, i, US_STACKBUF_SIZE, ch, isError);
- fLength = i;
+ U16_APPEND(fUnion.fStackBuffer, i, US_STACKBUF_SIZE, ch, isError);
+ fShortLength = (int8_t)i;
}
UnicodeString::UnicodeString(const UChar *text)
- : fLength(0),
- fCapacity(US_STACKBUF_SIZE),
- fArray(fStackBuffer),
+ : fShortLength(0),
fFlags(kShortString)
{
doReplace(0, 0, text, 0, -1);
@@ -232,9 +223,7 @@ UnicodeString::UnicodeString(const UChar *text)
UnicodeString::UnicodeString(const UChar *text,
int32_t textLength)
- : fLength(0),
- fCapacity(US_STACKBUF_SIZE),
- fArray(fStackBuffer),
+ : fShortLength(0),
fFlags(kShortString)
{
doReplace(0, 0, text, 0, textLength);
@@ -243,59 +232,52 @@ UnicodeString::UnicodeString(const UChar *text,
UnicodeString::UnicodeString(UBool isTerminated,
const UChar *text,
int32_t textLength)
- : fLength(textLength),
- fCapacity(isTerminated ? textLength + 1 : textLength),
- fArray((UChar *)text),
+ : fShortLength(0),
fFlags(kReadonlyAlias)
{
if(text == NULL) {
// treat as an empty string, do not alias
- fLength = 0;
- fCapacity = US_STACKBUF_SIZE;
- fArray = fStackBuffer;
- fFlags = kShortString;
+ setToEmpty();
} else if(textLength < -1 ||
(textLength == -1 && !isTerminated) ||
(textLength >= 0 && isTerminated && text[textLength] != 0)
) {
setToBogus();
- } else if(textLength == -1) {
- // text is terminated, or else it would have failed the above test
- fLength = u_strlen(text);
- fCapacity = fLength + 1;
+ } else {
+ if(textLength == -1) {
+ // text is terminated, or else it would have failed the above test
+ textLength = u_strlen(text);
+ }
+ setArray((UChar *)text, textLength, isTerminated ? textLength + 1 : textLength);
}
}
UnicodeString::UnicodeString(UChar *buff,
int32_t buffLength,
int32_t buffCapacity)
- : fLength(buffLength),
- fCapacity(buffCapacity),
- fArray(buff),
+ : fShortLength(0),
fFlags(kWritableAlias)
{
if(buff == NULL) {
// treat as an empty string, do not alias
- fLength = 0;
- fCapacity = US_STACKBUF_SIZE;
- fArray = fStackBuffer;
- fFlags = kShortString;
+ setToEmpty();
} else if(buffLength < -1 || buffCapacity < 0 || buffLength > buffCapacity) {
setToBogus();
- } else if(buffLength == -1) {
- // fLength = u_strlen(buff); but do not look beyond buffCapacity
- const UChar *p = buff, *limit = buff + buffCapacity;
- while(p != limit && *p != 0) {
- ++p;
+ } else {
+ if(buffLength == -1) {
+ // fLength = u_strlen(buff); but do not look beyond buffCapacity
+ const UChar *p = buff, *limit = buff + buffCapacity;
+ while(p != limit && *p != 0) {
+ ++p;
+ }
+ buffLength = (int32_t)(p - buff);
}
- fLength = (int32_t)(p - buff);
+ setArray(buff, buffLength, buffCapacity);
}
}
UnicodeString::UnicodeString(const char *src, int32_t length, EInvariant)
- : fLength(0),
- fCapacity(US_STACKBUF_SIZE),
- fArray(fStackBuffer),
+ : fShortLength(0),
fFlags(kShortString)
{
if(src==NULL) {
@@ -306,7 +288,7 @@ UnicodeString::UnicodeString(const char *src, int32_t length, EInvariant)
}
if(cloneArrayIfNeeded(length, length, FALSE)) {
u_charsToUChars(src, getArrayStart(), length);
- fLength = length;
+ setLength(length);
} else {
setToBogus();
}
@@ -315,9 +297,7 @@ UnicodeString::UnicodeString(const char *src, int32_t length, EInvariant)
UnicodeString::UnicodeString(const UnicodeString& that)
: Replaceable(),
- fLength(0),
- fCapacity(US_STACKBUF_SIZE),
- fArray(fStackBuffer),
+ fShortLength(0),
fFlags(kShortString)
{
copyFrom(that);
@@ -326,9 +306,7 @@ UnicodeString::UnicodeString(const UnicodeString& that)
UnicodeString::UnicodeString(const UnicodeString& that,
int32_t srcStart)
: Replaceable(),
- fLength(0),
- fCapacity(US_STACKBUF_SIZE),
- fArray(fStackBuffer),
+ fShortLength(0),
fFlags(kShortString)
{
setTo(that, srcStart);
@@ -338,9 +316,7 @@ UnicodeString::UnicodeString(const UnicodeString& that,
int32_t srcStart,
int32_t srcLength)
: Replaceable(),
- fLength(0),
- fCapacity(US_STACKBUF_SIZE),
- fArray(fStackBuffer),
+ fShortLength(0),
fFlags(kShortString)
{
setTo(that, srcStart, srcLength);
@@ -365,8 +341,6 @@ UnicodeString::clone() const {
UBool
UnicodeString::allocate(int32_t capacity) {
if(capacity <= US_STACKBUF_SIZE) {
- fArray = fStackBuffer;
- fCapacity = US_STACKBUF_SIZE;
fFlags = kShortString;
} else {
// count bytes for the refCounter and the string capacity, and
@@ -379,12 +353,13 @@ UnicodeString::allocate(int32_t capacity) {
*array++ = 1;
// have fArray point to the first UChar
- fArray = (UChar *)array;
- fCapacity = (int32_t)((words - 1) * (sizeof(int32_t) / U_SIZEOF_UCHAR));
+ fUnion.fFields.fArray = (UChar *)array;
+ fUnion.fFields.fCapacity = (int32_t)((words - 1) * (sizeof(int32_t) / U_SIZEOF_UCHAR));
fFlags = kLongString;
} else {
- fLength = 0;
- fCapacity = 0;
+ fShortLength = 0;
+ fUnion.fFields.fArray = 0;
+ fUnion.fFields.fCapacity = 0;
fFlags = kIsBogus;
return FALSE;
}
@@ -431,40 +406,38 @@ UnicodeString::copyFrom(const UnicodeString &src, UBool fastCopy) {
// delete the current contents
releaseArray();
- // we always copy the length
- fLength = src.fLength;
- if(fLength == 0) {
+ if(src.isEmpty()) {
// empty string - use the stack buffer
- fArray = fStackBuffer;
- fCapacity = US_STACKBUF_SIZE;
- fFlags = kShortString;
+ setToEmpty();
return *this;
}
+ // we always copy the length
+ int32_t srcLength = src.length();
+ setLength(srcLength);
+
// fLength>0 and not an "open" src.getBuffer(minCapacity)
switch(src.fFlags) {
case kShortString:
// short string using the stack buffer, do the same
- fArray = fStackBuffer;
- fCapacity = US_STACKBUF_SIZE;
fFlags = kShortString;
- uprv_memcpy(fStackBuffer, src.fArray, fLength * U_SIZEOF_UCHAR);
+ uprv_memcpy(fUnion.fStackBuffer, src.fUnion.fStackBuffer, fShortLength * U_SIZEOF_UCHAR);
break;
case kLongString:
// src uses a refCounted string buffer, use that buffer with refCount
// src is const, use a cast - we don't really change it
((UnicodeString &)src).addRef();
// copy all fields, share the reference-counted buffer
- fArray = src.fArray;
- fCapacity = src.fCapacity;
+ fUnion.fFields.fArray = src.fUnion.fFields.fArray;
+ fUnion.fFields.fCapacity = src.fUnion.fFields.fCapacity;
fFlags = src.fFlags;
break;
case kReadonlyAlias:
if(fastCopy) {
// src is a readonly alias, do the same
// -> maintain the readonly alias as such
- fArray = src.fArray;
- fCapacity = src.fCapacity;
+ fUnion.fFields.fArray = src.fUnion.fFields.fArray;
+ fUnion.fFields.fCapacity = src.fUnion.fFields.fCapacity;
fFlags = src.fFlags;
break;
}
@@ -472,17 +445,17 @@ UnicodeString::copyFrom(const UnicodeString &src, UBool fastCopy) {
// -> allocate a new buffer and copy the contents
case kWritableAlias:
// src is a writable alias; we make a copy of that instead
- if(allocate(fLength)) {
- uprv_memcpy(fArray, src.fArray, fLength * U_SIZEOF_UCHAR);
+ if(allocate(srcLength)) {
+ uprv_memcpy(getArrayStart(), src.getArrayStart(), srcLength * U_SIZEOF_UCHAR);
break;
}
// if there is not enough memory, then fall through to setting to bogus
default:
// if src is bogus, set ourselves to bogus
// do not call setToBogus() here because fArray and fFlags are not consistent here
- fArray = 0;
- fLength = 0;
- fCapacity = 0;
+ fShortLength = 0;
+ fUnion.fFields.fArray = 0;
+ fUnion.fFields.fCapacity = 0;
fFlags = kIsBogus;
break;
}
@@ -495,17 +468,25 @@ UnicodeString::copyFrom(const UnicodeString &src, UBool fastCopy) {
//========================================
UnicodeString UnicodeString::unescape() const {
- UnicodeString result;
- for (int32_t i=0; i> 15 | 1);
@@ -644,29 +625,31 @@ int32_t
UnicodeString::countChar32(int32_t start, int32_t length) const {
pinIndices(start, length);
// if(isBogus()) then fArray==0 and start==0 - u_countChar32() checks for NULL
- return u_countChar32(fArray+start, length);
+ return u_countChar32(getArrayStart()+start, length);
}
UBool
UnicodeString::hasMoreChar32Than(int32_t start, int32_t length, int32_t number) const {
pinIndices(start, length);
// if(isBogus()) then fArray==0 and start==0 - u_strHasMoreChar32Than() checks for NULL
- return u_strHasMoreChar32Than(fArray+start, length, number);
+ return u_strHasMoreChar32Than(getArrayStart()+start, length, number);
}
int32_t
UnicodeString::moveIndex32(int32_t index, int32_t delta) const {
// pin index
+ int32_t len = length();
if(index<0) {
index=0;
- } else if(index>fLength) {
- index=fLength;
+ } else if(index>len) {
+ index=len;
}
+ const UChar *array = getArrayStart();
if(delta>0) {
- UTF_FWD_N(fArray, index, fLength, delta);
+ UTF_FWD_N(array, index, len, delta);
} else {
- UTF_BACK_N(fArray, 0, index, -delta);
+ UTF_BACK_N(array, 0, index, -delta);
}
return index;
@@ -682,26 +665,29 @@ UnicodeString::doExtract(int32_t start,
pinIndices(start, length);
// do not copy anything if we alias dst itself
- if(fArray + start != dst + dstStart) {
- us_arrayCopy(getArrayStart(), start, dst, dstStart, length);
+ const UChar *array = getArrayStart();
+ if(array + start != dst + dstStart) {
+ us_arrayCopy(array, start, dst, dstStart, length);
}
}
int32_t
UnicodeString::extract(UChar *dest, int32_t destCapacity,
UErrorCode &errorCode) const {
+ int32_t len = length();
if(U_SUCCESS(errorCode)) {
if(isBogus() || destCapacity<0 || (destCapacity>0 && dest==0)) {
errorCode=U_ILLEGAL_ARGUMENT_ERROR;
} else {
- if(fLength>0 && fLength<=destCapacity && fArray!=dest) {
- uprv_memcpy(dest, fArray, fLength*U_SIZEOF_UCHAR);
+ const UChar *array = getArrayStart();
+ if(len>0 && len<=destCapacity && array!=dest) {
+ uprv_memcpy(dest, array, len*U_SIZEOF_UCHAR);
}
- return u_terminateUChars(dest, destCapacity, fLength, &errorCode);
+ return u_terminateUChars(dest, destCapacity, len, &errorCode);
}
}
- return fLength;
+ return len;
}
int32_t
@@ -755,11 +741,12 @@ UnicodeString::indexOf(const UChar *srcChars,
pinIndices(start, length);
// find the first occurrence of the substring
- const UChar *match = u_strFindFirst(fArray + start, length, srcChars + srcStart, srcLength);
+ const UChar *array = getArrayStart();
+ const UChar *match = u_strFindFirst(array + start, length, srcChars + srcStart, srcLength);
if(match == NULL) {
return -1;
} else {
- return (int32_t)(match - fArray);
+ return (int32_t)(match - array);
}
}
@@ -772,11 +759,12 @@ UnicodeString::doIndexOf(UChar c,
pinIndices(start, length);
// find the first occurrence of c
- const UChar *match = u_memchr(fArray + start, c, length);
+ const UChar *array = getArrayStart();
+ const UChar *match = u_memchr(array + start, c, length);
if(match == NULL) {
return -1;
} else {
- return (int32_t)(match - fArray);
+ return (int32_t)(match - array);
}
}
@@ -788,11 +776,12 @@ UnicodeString::doIndexOf(UChar32 c,
pinIndices(start, length);
// find the first occurrence of c
- const UChar *match = u_memchr32(fArray + start, c, length);
+ const UChar *array = getArrayStart();
+ const UChar *match = u_memchr32(array + start, c, length);
if(match == NULL) {
return -1;
} else {
- return (int32_t)(match - fArray);
+ return (int32_t)(match - array);
}
}
@@ -816,11 +805,12 @@ UnicodeString::lastIndexOf(const UChar *srcChars,
pinIndices(start, length);
// find the last occurrence of the substring
- const UChar *match = u_strFindLast(fArray + start, length, srcChars + srcStart, srcLength);
+ const UChar *array = getArrayStart();
+ const UChar *match = u_strFindLast(array + start, length, srcChars + srcStart, srcLength);
if(match == NULL) {
return -1;
} else {
- return (int32_t)(match - fArray);
+ return (int32_t)(match - array);
}
}
@@ -837,11 +827,12 @@ UnicodeString::doLastIndexOf(UChar c,
pinIndices(start, length);
// find the last occurrence of c
- const UChar *match = u_memrchr(fArray + start, c, length);
+ const UChar *array = getArrayStart();
+ const UChar *match = u_memrchr(array + start, c, length);
if(match == NULL) {
return -1;
} else {
- return (int32_t)(match - fArray);
+ return (int32_t)(match - array);
}
}
@@ -853,11 +844,12 @@ UnicodeString::doLastIndexOf(UChar32 c,
pinIndices(start, length);
// find the last occurrence of c
- const UChar *match = u_memrchr32(fArray + start, c, length);
+ const UChar *array = getArrayStart();
+ const UChar *match = u_memrchr32(array + start, c, length);
if(match == NULL) {
return -1;
} else {
- return (int32_t)(match - fArray);
+ return (int32_t)(match - array);
}
}
@@ -909,8 +901,9 @@ UnicodeString::setToBogus()
{
releaseArray();
- fArray = 0;
- fCapacity = fLength = 0;
+ fShortLength = 0;
+ fUnion.fFields.fArray = 0;
+ fUnion.fFields.fCapacity = 0;
fFlags = kIsBogus;
}
@@ -918,10 +911,7 @@ UnicodeString::setToBogus()
void
UnicodeString::unBogus() {
if(fFlags & kIsBogus) {
- fArray = fStackBuffer;
- fLength = 0;
- fCapacity = US_STACKBUF_SIZE;
- fFlags = kShortString;
+ setToEmpty();
}
}
@@ -939,10 +929,7 @@ UnicodeString::setTo(UBool isTerminated,
if(text == NULL) {
// treat as an empty string, do not alias
releaseArray();
- fLength = 0;
- fCapacity = US_STACKBUF_SIZE;
- fArray = fStackBuffer;
- fFlags = kShortString;
+ setToEmpty();
return *this;
}
@@ -956,15 +943,11 @@ UnicodeString::setTo(UBool isTerminated,
releaseArray();
- fArray = (UChar *)text;
- if(textLength != -1) {
- fLength = textLength;
- fCapacity = isTerminated ? fLength + 1 : fLength;
- } else {
+ if(textLength == -1) {
// text is terminated, or else it would have failed the above test
- fLength = u_strlen(text);
- fCapacity = fLength + 1;
+ textLength = u_strlen(text);
}
+ setArray((UChar *)text, textLength, isTerminated ? textLength + 1 : textLength);
fFlags = kReadonlyAlias;
return *this;
@@ -983,10 +966,7 @@ UnicodeString::setTo(UChar *buffer,
if(buffer == NULL) {
// treat as an empty string, do not alias
releaseArray();
- fLength = 0;
- fCapacity = US_STACKBUF_SIZE;
- fArray = fStackBuffer;
- fFlags = kShortString;
+ setToEmpty();
return *this;
}
@@ -1004,9 +984,7 @@ UnicodeString::setTo(UChar *buffer,
releaseArray();
- fArray = buffer;
- fLength = buffLength;
- fCapacity = buffCapacity;
+ setArray(buffer, buffLength, buffCapacity);
fFlags = kWritableAlias;
return *this;
}
@@ -1015,14 +993,15 @@ UnicodeString&
UnicodeString::setCharAt(int32_t offset,
UChar c)
{
- if(cloneArrayIfNeeded() && fLength > 0) {
+ int32_t len = length();
+ if(cloneArrayIfNeeded() && len > 0) {
if(offset < 0) {
offset = 0;
- } else if(offset >= fLength) {
- offset = fLength - 1;
+ } else if(offset >= len) {
+ offset = len - 1;
}
- fArray[offset] = c;
+ getArrayStart()[offset] = c;
}
return *this;
}
@@ -1054,7 +1033,7 @@ UnicodeString::doReplace(int32_t start,
int32_t srcStart,
int32_t srcLength)
{
- if(isBogus()) {
+ if(!isWritable()) {
return *this;
}
@@ -1065,20 +1044,45 @@ UnicodeString::doReplace(int32_t start,
srcLength = u_strlen(srcChars + srcStart);
}
- int32_t *bufferToDelete = 0;
+ int32_t oldLength = this->length();
- // the following may change fArray but will not copy the current contents;
- // therefore we need to keep the current fArray
- UChar *oldArray = fArray;
- int32_t oldLength = fLength;
+ // calculate the size of the string after the replace
+ int32_t newSize;
+
+ // optimize append() onto a large-enough, owned string
+ if(start >= oldLength) {
+ newSize = oldLength + srcLength;
+ if(newSize <= getCapacity() && isBufferWritable()) {
+ us_arrayCopy(srcChars, srcStart, getArrayStart(), oldLength, srcLength);
+ setLength(newSize);
+ return *this;
+ } else {
+ // pin the indices to legal values
+ start = oldLength;
+ length = 0;
+ }
+ } else {
+ // pin the indices to legal values
+ pinIndices(start, length);
- // pin the indices to legal values
- pinIndices(start, length);
+ newSize = oldLength - length + srcLength;
+ }
- // calculate the size of the string after the replace
- int32_t newSize = oldLength - length + srcLength;
+ // the following may change fArray but will not copy the current contents;
+ // therefore we need to keep the current fArray
+ UChar oldStackBuffer[US_STACKBUF_SIZE];
+ UChar *oldArray;
+ if((fFlags&kUsingStackBuffer) && (newSize > US_STACKBUF_SIZE)) {
+ // copy the stack buffer contents because it will be overwritten with
+ // fUnion.fFields values
+ u_memcpy(oldStackBuffer, fUnion.fStackBuffer, oldLength);
+ oldArray = oldStackBuffer;
+ } else {
+ oldArray = getArrayStart();
+ }
// clone our array and allocate a bigger array if needed
+ int32_t *bufferToDelete = 0;
if(!cloneArrayIfNeeded(newSize, newSize + (newSize >> 2) + kGrowSize,
FALSE, &bufferToDelete)
) {
@@ -1087,23 +1091,24 @@ UnicodeString::doReplace(int32_t start,
// now do the replace
- if(fArray != oldArray) {
+ UChar *newArray = getArrayStart();
+ if(newArray != oldArray) {
// if fArray changed, then we need to copy everything except what will change
- us_arrayCopy(oldArray, 0, fArray, 0, start);
+ us_arrayCopy(oldArray, 0, newArray, 0, start);
us_arrayCopy(oldArray, start + length,
- fArray, start + srcLength,
+ newArray, start + srcLength,
oldLength - (start + length));
} else if(length != srcLength) {
// fArray did not change; copy only the portion that isn't changing, leaving a hole
us_arrayCopy(oldArray, start + length,
- fArray, start + srcLength,
+ newArray, start + srcLength,
oldLength - (start + length));
}
// now fill in the hole with the new string
- us_arrayCopy(srcChars, srcStart, getArrayStart(), start, srcLength);
+ us_arrayCopy(srcChars, srcStart, newArray, start, srcLength);
- fLength = newSize;
+ setLength(newSize);
// delayed delete in case srcChars == fArray when we started, and
// to keep oldArray alive for the above operations
@@ -1133,9 +1138,12 @@ UnicodeString::copy(int32_t start, int32_t limit, int32_t dest) {
return; // Nothing to do; avoid bogus malloc call
}
UChar* text = (UChar*) uprv_malloc( sizeof(UChar) * (limit - start) );
- extractBetween(start, limit, text, 0);
- insert(dest, text, 0, limit - start);
- uprv_free(text);
+ // Check to make sure text is not null.
+ if (text != NULL) {
+ extractBetween(start, limit, text, 0);
+ insert(dest, text, 0, limit - start);
+ uprv_free(text);
+ }
}
/**
@@ -1159,7 +1167,7 @@ UnicodeString&
UnicodeString::doReverse(int32_t start,
int32_t length)
{
- if(fLength <= 1 || !cloneArrayIfNeeded()) {
+ if(this->length() <= 1 || !cloneArrayIfNeeded()) {
return *this;
}
@@ -1167,7 +1175,7 @@ UnicodeString::doReverse(int32_t start,
pinIndices(start, length);
UChar *left = getArrayStart() + start;
- UChar *right = getArrayStart() + start + length;
+ UChar *right = left + length;
UChar swap;
UBool hasSupplementary = FALSE;
@@ -1182,7 +1190,7 @@ UnicodeString::doReverse(int32_t start,
UChar swap2;
left = getArrayStart() + start;
- right = getArrayStart() + start + length - 1; // -1 so that we can look at *(left+1) if left= targetLength || !cloneArrayIfNeeded(targetLength)) {
+ int32_t oldLength = length();
+ if(oldLength >= targetLength || !cloneArrayIfNeeded(targetLength)) {
return FALSE;
} else {
// move contents up by padding width
- int32_t start = targetLength - fLength;
- us_arrayCopy(fArray, 0, fArray, start, fLength);
+ UChar *array = getArrayStart();
+ int32_t start = targetLength - oldLength;
+ us_arrayCopy(array, 0, array, start, oldLength);
// fill in padding character
while(--start >= 0) {
- fArray[start] = padChar;
+ array[start] = padChar;
}
- fLength = targetLength;
+ setLength(targetLength);
return TRUE;
}
}
@@ -1220,15 +1230,17 @@ UBool
UnicodeString::padTrailing(int32_t targetLength,
UChar padChar)
{
- if(fLength >= targetLength || !cloneArrayIfNeeded(targetLength)) {
+ int32_t oldLength = length();
+ if(oldLength >= targetLength || !cloneArrayIfNeeded(targetLength)) {
return FALSE;
} else {
// fill in padding character
+ UChar *array = getArrayStart();
int32_t length = targetLength;
- while(--length >= fLength) {
- fArray[length] = padChar;
+ while(--length >= oldLength) {
+ array[length] = padChar;
}
- fLength = targetLength;
+ setLength(targetLength);
return TRUE;
}
}
@@ -1241,7 +1253,7 @@ UnicodeString::doHashCode() const
{
/* Delegate hash computation to uhash. This makes UnicodeString
* hashing consistent with UChar* hashing. */
- int32_t hashCode = uhash_hashUCharsN(getArrayStart(), fLength);
+ int32_t hashCode = uhash_hashUCharsN(getArrayStart(), length());
if (hashCode == kInvalidHashCode) {
hashCode = kEmptyHashCode;
}
@@ -1256,8 +1268,8 @@ UChar *
UnicodeString::getBuffer(int32_t minCapacity) {
if(minCapacity>=-1 && cloneArrayIfNeeded(minCapacity)) {
fFlags|=kOpenGetBuffer;
- fLength=0;
- return fArray;
+ fShortLength=0;
+ return getArrayStart();
} else {
return 0;
}
@@ -1267,18 +1279,18 @@ void
UnicodeString::releaseBuffer(int32_t newLength) {
if(fFlags&kOpenGetBuffer && newLength>=-1) {
// set the new fLength
+ int32_t capacity=getCapacity();
if(newLength==-1) {
// the new length is the string length, capped by fCapacity
- const UChar *p=fArray, *limit=fArray+fCapacity;
+ const UChar *array=getArrayStart(), *p=array, *limit=array+capacity;
while(pcapacity) {
+ newLength=capacity;
}
+ setLength(newLength);
fFlags&=~kOpenGetBuffer;
}
}
@@ -1295,13 +1307,13 @@ UnicodeString::cloneArrayIfNeeded(int32_t newCapacity,
// default parameters need to be static, therefore
// the defaults are -1 to have convenience defaults
if(newCapacity == -1) {
- newCapacity = fCapacity;
+ newCapacity = getCapacity();
}
// while a getBuffer(minCapacity) is "open",
// prevent any modifications of the string by returning FALSE here
// if the string is bogus, then only an assignment or similar can revive it
- if((fFlags&(kOpenGetBuffer|kIsBogus))!=0) {
+ if(!isWritable()) {
return FALSE;
}
@@ -1315,12 +1327,8 @@ UnicodeString::cloneArrayIfNeeded(int32_t newCapacity,
if(forceClone ||
fFlags & kBufferIsReadonly ||
fFlags & kRefCounted && refCount() > 1 ||
- newCapacity > fCapacity
+ newCapacity > getCapacity()
) {
- // save old values
- UChar *array = fArray;
- uint16_t flags = fFlags;
-
// check growCapacity for default value and use of the stack buffer
if(growCapacity == -1) {
growCapacity = newCapacity;
@@ -1328,25 +1336,46 @@ UnicodeString::cloneArrayIfNeeded(int32_t newCapacity,
growCapacity = US_STACKBUF_SIZE;
}
+ // save old values
+ UChar oldStackBuffer[US_STACKBUF_SIZE];
+ UChar *oldArray;
+ uint8_t flags = fFlags;
+
+ if(flags&kUsingStackBuffer) {
+ if(doCopyArray && growCapacity > US_STACKBUF_SIZE) {
+ // copy the stack buffer contents because it will be overwritten with
+ // fUnion.fFields values
+ us_arrayCopy(fUnion.fStackBuffer, 0, oldStackBuffer, 0, fShortLength);
+ oldArray = oldStackBuffer;
+ } else {
+ oldArray = 0; // no need to copy from stack buffer to itself
+ }
+ } else {
+ oldArray = fUnion.fFields.fArray;
+ }
+
// allocate a new array
if(allocate(growCapacity) ||
newCapacity < growCapacity && allocate(newCapacity)
) {
- if(doCopyArray) {
+ if(doCopyArray && oldArray != 0) {
// copy the contents
// do not copy more than what fits - it may be smaller than before
- if(fCapacity < fLength) {
- fLength = fCapacity;
+ int32_t minLength = length();
+ newCapacity = getCapacity();
+ if(newCapacity < minLength) {
+ minLength = newCapacity;
+ setLength(minLength);
}
- us_arrayCopy(array, 0, fArray, 0, fLength);
+ us_arrayCopy(oldArray, 0, getArrayStart(), 0, minLength);
} else {
- fLength = 0;
+ fShortLength = 0;
}
// release the old array
if(flags & kRefCounted) {
// the array is refCounted; decrement and release if 0
- int32_t *pRefCount = ((int32_t *)array - 1);
+ int32_t *pRefCount = ((int32_t *)oldArray - 1);
if(umtx_atomic_dec(pRefCount) == 0) {
if(pBufferToDelete == 0) {
uprv_free(pRefCount);
@@ -1359,7 +1388,9 @@ UnicodeString::cloneArrayIfNeeded(int32_t newCapacity,
} else {
// not enough memory for growCapacity and not even for the smaller newCapacity
// reset the old values for setToBogus() to release the array
- fArray = array;
+ if(!(flags&kUsingStackBuffer)) {
+ fUnion.fFields.fArray = oldArray;
+ }
fFlags = flags;
setToBogus();
return FALSE;
diff --git a/icuSources/common/unistr_case.cpp b/icuSources/common/unistr_case.cpp
index 34f53d8a..617b80d0 100644
--- a/icuSources/common/unistr_case.cpp
+++ b/icuSources/common/unistr_case.cpp
@@ -1,7 +1,7 @@
/*
*******************************************************************************
*
-* Copyright (C) 1999-2005, International Business Machines
+* Copyright (C) 1999-2007, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
@@ -89,19 +89,13 @@ UnicodeString::doCaseCompare(int32_t start,
* Implement argument checking and buffer handling
* for string case mapping as a common function.
*/
-enum {
- TO_LOWER,
- TO_UPPER,
- TO_TITLE,
- FOLD_CASE
-};
UnicodeString &
UnicodeString::caseMap(BreakIterator *titleIter,
const char *locale,
uint32_t options,
int32_t toWhichCase) {
- if(fLength <= 0) {
+ if(isEmpty() || !isWritable()) {
// nothing to do
return *this;
}
@@ -116,82 +110,62 @@ UnicodeString::caseMap(BreakIterator *titleIter,
}
// We need to allocate a new buffer for the internal string case mapping function.
- // This is very similar to how doReplace() below keeps the old array pointer
+ // This is very similar to how doReplace() keeps the old array pointer
// and deletes the old array itself after it is done.
// In addition, we are forcing cloneArrayIfNeeded() to always allocate a new array.
- UChar *oldArray = fArray;
- int32_t oldLength = fLength;
- int32_t *bufferToDelete = 0;
+ UChar oldStackBuffer[US_STACKBUF_SIZE];
+ UChar *oldArray;
+ int32_t oldLength;
+
+ if(fFlags&kUsingStackBuffer) {
+ // copy the stack buffer contents because it will be overwritten
+ u_memcpy(oldStackBuffer, fUnion.fStackBuffer, fShortLength);
+ oldArray = oldStackBuffer;
+ oldLength = fShortLength;
+ } else {
+ oldArray = getArrayStart();
+ oldLength = length();
+ }
- // Make sure that if the string is in fStackBuffer we do not overwrite it!
int32_t capacity;
- if(fLength <= US_STACKBUF_SIZE) {
- if(fArray == fStackBuffer) {
- capacity = 2 * US_STACKBUF_SIZE; // make sure that cloneArrayIfNeeded() allocates a new buffer
- } else {
- capacity = US_STACKBUF_SIZE;
- }
+ if(oldLength <= US_STACKBUF_SIZE) {
+ capacity = US_STACKBUF_SIZE;
} else {
- capacity = fLength + 20;
+ capacity = oldLength + 20;
}
+ int32_t *bufferToDelete = 0;
if(!cloneArrayIfNeeded(capacity, capacity, FALSE, &bufferToDelete, TRUE)) {
return *this;
}
-#if !UCONFIG_NO_BREAK_ITERATION
- // set up the titlecasing break iterator
- UBreakIterator *cTitleIter = 0;
-
- if(toWhichCase == TO_TITLE) {
- errorCode = U_ZERO_ERROR;
- if(titleIter != 0) {
- cTitleIter = (UBreakIterator *)titleIter;
- ubrk_setText(cTitleIter, oldArray, oldLength, &errorCode);
- } else {
- cTitleIter = ubrk_open(UBRK_WORD, locale,
- oldArray, oldLength,
- &errorCode);
- }
- if(U_FAILURE(errorCode)) {
- uprv_free(bufferToDelete);
- setToBogus();
- return *this;
- }
- }
-#endif
-
// Case-map, and if the result is too long, then reallocate and repeat.
+ int32_t newLength;
do {
errorCode = U_ZERO_ERROR;
if(toWhichCase==TO_LOWER) {
- fLength = ustr_toLower(csp, fArray, fCapacity,
- oldArray, oldLength,
- locale, &errorCode);
+ newLength = ustr_toLower(csp, getArrayStart(), getCapacity(),
+ oldArray, oldLength,
+ locale, &errorCode);
} else if(toWhichCase==TO_UPPER) {
- fLength = ustr_toUpper(csp, fArray, fCapacity,
- oldArray, oldLength,
- locale, &errorCode);
+ newLength = ustr_toUpper(csp, getArrayStart(), getCapacity(),
+ oldArray, oldLength,
+ locale, &errorCode);
} else if(toWhichCase==TO_TITLE) {
#if UCONFIG_NO_BREAK_ITERATION
errorCode=U_UNSUPPORTED_ERROR;
#else
- fLength = ustr_toTitle(csp, fArray, fCapacity,
- oldArray, oldLength,
- cTitleIter, locale, &errorCode);
+ newLength = ustr_toTitle(csp, getArrayStart(), getCapacity(),
+ oldArray, oldLength,
+ (UBreakIterator *)titleIter, locale, options, &errorCode);
#endif
} else {
- fLength = ustr_foldCase(csp, fArray, fCapacity,
- oldArray, oldLength,
- options,
- &errorCode);
+ newLength = ustr_foldCase(csp, getArrayStart(), getCapacity(),
+ oldArray, oldLength,
+ options,
+ &errorCode);
}
- } while(errorCode==U_BUFFER_OVERFLOW_ERROR && cloneArrayIfNeeded(fLength, fLength, FALSE));
-
-#if !UCONFIG_NO_BREAK_ITERATION
- if(cTitleIter != 0 && titleIter == 0) {
- ubrk_close(cTitleIter);
- }
-#endif
+ setLength(newLength);
+ } while(errorCode==U_BUFFER_OVERFLOW_ERROR && cloneArrayIfNeeded(newLength, newLength, FALSE));
if (bufferToDelete) {
uprv_free(bufferToDelete);
@@ -234,6 +208,11 @@ UnicodeString::toTitle(BreakIterator *titleIter, const Locale &locale) {
return caseMap(titleIter, locale.getName(), 0, TO_TITLE);
}
+UnicodeString &
+UnicodeString::toTitle(BreakIterator *titleIter, const Locale &locale, uint32_t options) {
+ return caseMap(titleIter, locale.getName(), options, TO_TITLE);
+}
+
#endif
UnicodeString &
diff --git a/icuSources/common/unistr_cnv.cpp b/icuSources/common/unistr_cnv.cpp
index adc0dda6..1a6819e0 100644
--- a/icuSources/common/unistr_cnv.cpp
+++ b/icuSources/common/unistr_cnv.cpp
@@ -1,7 +1,7 @@
/*
*******************************************************************************
*
-* Copyright (C) 1999-2006, International Business Machines
+* Copyright (C) 1999-2007, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
@@ -38,9 +38,7 @@ U_NAMESPACE_BEGIN
UnicodeString::UnicodeString(const char *codepageData,
const char *codepage)
- : fLength(0),
- fCapacity(US_STACKBUF_SIZE),
- fArray(fStackBuffer),
+ : fShortLength(0),
fFlags(kShortString)
{
if(codepageData != 0) {
@@ -52,9 +50,7 @@ UnicodeString::UnicodeString(const char *codepageData,
UnicodeString::UnicodeString(const char *codepageData,
int32_t dataLength,
const char *codepage)
- : fLength(0),
- fCapacity(US_STACKBUF_SIZE),
- fArray(fStackBuffer),
+ : fShortLength(0),
fFlags(kShortString)
{
if(codepageData != 0) {
@@ -65,9 +61,7 @@ UnicodeString::UnicodeString(const char *codepageData,
UnicodeString::UnicodeString(const char *src, int32_t srcLength,
UConverter *cnv,
UErrorCode &errorCode)
- : fLength(0),
- fCapacity(US_STACKBUF_SIZE),
- fArray(fStackBuffer),
+ : fShortLength(0),
fFlags(kShortString)
{
if(U_SUCCESS(errorCode)) {
@@ -183,7 +177,7 @@ UnicodeString::extract(char *dest, int32_t destCapacity,
}
// nothing to do?
- if(fLength<=0) {
+ if(isEmpty()) {
return u_terminateChars(dest, destCapacity, 0, &errorCode);
}
@@ -201,14 +195,14 @@ UnicodeString::extract(char *dest, int32_t destCapacity,
}
// convert
- int32_t length=doExtract(0, fLength, dest, destCapacity, cnv, errorCode);
+ int32_t len=doExtract(0, length(), dest, destCapacity, cnv, errorCode);
// release the converter
if(isDefaultConverter) {
u_releaseDefaultConverter(cnv);
}
- return length;
+ return len;
}
int32_t
@@ -224,7 +218,7 @@ UnicodeString::doExtract(int32_t start, int32_t length,
return 0;
}
- const UChar *src=fArray+start, *srcLimit=src+length;
+ const UChar *src=getArrayStart()+start, *srcLimit=src+length;
char *originalDest=dest;
const char *destLimit;
@@ -294,7 +288,7 @@ UnicodeString::doCodepageCreate(const char *codepageData,
// use the "invariant characters" conversion
if(cloneArrayIfNeeded(dataLength, dataLength, FALSE)) {
u_charsToUChars(codepageData, getArrayStart(), dataLength);
- fLength = dataLength;
+ setLength(dataLength);
} else {
setToBogus();
}
@@ -328,11 +322,17 @@ UnicodeString::doCodepageCreate(const char *codepageData,
// set up the conversion parameters
const char *mySource = codepageData;
const char *mySourceEnd = mySource + dataLength;
- UChar *myTarget;
+ UChar *array, *myTarget;
// estimate the size needed:
- // 1.25 UChar's per source byte should cover most cases
- int32_t arraySize = dataLength + (dataLength >> 2);
+ int32_t arraySize;
+ if(dataLength <= US_STACKBUF_SIZE) {
+ // try to use the stack buffer
+ arraySize = US_STACKBUF_SIZE;
+ } else {
+ // 1.25 UChar's per source byte should cover most cases
+ arraySize = dataLength + (dataLength >> 2);
+ }
// we do not care about the current contents
UBool doCopyArray = FALSE;
@@ -343,12 +343,13 @@ UnicodeString::doCodepageCreate(const char *codepageData,
}
// perform the conversion
- myTarget = fArray + fLength;
- ucnv_toUnicode(converter, &myTarget, fArray + fCapacity,
+ array = getArrayStart();
+ myTarget = array + length();
+ ucnv_toUnicode(converter, &myTarget, array + getCapacity(),
&mySource, mySourceEnd, 0, TRUE, &status);
// update the conversion parameters
- fLength = (int32_t)(myTarget - fArray);
+ setLength((int32_t)(myTarget - array));
// allocate more space and copy data, if needed
if(status == U_BUFFER_OVERFLOW_ERROR) {
@@ -360,7 +361,7 @@ UnicodeString::doCodepageCreate(const char *codepageData,
// estimate the new size needed, larger than before
// try 2 UChar's per remaining source byte
- arraySize = (int32_t)(fLength + 2 * (mySourceEnd - mySource));
+ arraySize = (int32_t)(length() + 2 * (mySourceEnd - mySource));
} else {
break;
}
diff --git a/icuSources/common/unistr_props.cpp b/icuSources/common/unistr_props.cpp
index ffd747d5..7670de46 100644
--- a/icuSources/common/unistr_props.cpp
+++ b/icuSources/common/unistr_props.cpp
@@ -1,7 +1,7 @@
/*
*******************************************************************************
*
-* Copyright (C) 1999-2004, International Business Machines
+* Copyright (C) 1999-2007, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
@@ -20,6 +20,8 @@
#include "unicode/uchar.h"
#include "unicode/unistr.h"
+U_NAMESPACE_BEGIN
+
UnicodeString&
UnicodeString::trim()
{
@@ -27,8 +29,10 @@ UnicodeString::trim()
return *this;
}
+ UChar *array = getArrayStart();
UChar32 c;
- int32_t i = fLength, length;
+ int32_t oldLength = this->length();
+ int32_t i = oldLength, length;
// first cut off trailing white space
for(;;) {
@@ -36,13 +40,13 @@ UnicodeString::trim()
if(i <= 0) {
break;
}
- UTF_PREV_CHAR(fArray, 0, i, c);
+ U16_PREV(array, 0, i, c);
if(!(c == 0x20 || u_isWhitespace(c))) {
break;
}
}
- if(length < fLength) {
- fLength = length;
+ if(length < oldLength) {
+ setLength(length);
}
// find leading white space
@@ -53,7 +57,7 @@ UnicodeString::trim()
if(i >= length) {
break;
}
- UTF_NEXT_CHAR(fArray, i, length, c);
+ U16_NEXT(array, i, length, c);
if(!(c == 0x20 || u_isWhitespace(c))) {
break;
}
@@ -66,3 +70,5 @@ UnicodeString::trim()
return *this;
}
+
+U_NAMESPACE_END
diff --git a/icuSources/common/unorm.cpp b/icuSources/common/unorm.cpp
index b89c3e1f..00ee9ec3 100644
--- a/icuSources/common/unorm.cpp
+++ b/icuSources/common/unorm.cpp
@@ -1,6 +1,6 @@
/*
******************************************************************************
-* Copyright (c) 1996-2006, International Business Machines
+* Copyright (c) 1996-2007, International Business Machines
* Corporation and others. All Rights Reserved.
******************************************************************************
* File unorm.cpp
@@ -78,6 +78,8 @@
*/
#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
+U_NAMESPACE_USE
+
/*
* This new implementation of the normalization code loads its data from
* unorm.dat, which is generated with the gennorm tool.
@@ -522,6 +524,8 @@ internalGetNXHangul(UErrorCode &errorCode) {
errorCode=U_MEMORY_ALLOCATION_ERROR;
return NULL;
}
+ // Compact the set for caching.
+ set->compact();
umtx_lock(NULL);
if(nxCache[UNORM_NX_HANGUL]==NULL) {
@@ -579,6 +583,8 @@ internalGetSerializedNX(int32_t options, int32_t nxIndex, UErrorCode &errorCode)
for(i=0; uset_getSerializedRange(&sset, i, &start, &end); ++i) {
set->add(start, end);
}
+ // Compact the set for caching.
+ set->compact();
umtx_lock(NULL);
if(nxCache[options]==NULL) {
@@ -670,6 +676,8 @@ internalGetNX(int32_t options, UErrorCode &errorCode) {
delete set;
return NULL;
}
+ // Compact the set for caching.
+ set->compact();
umtx_lock(NULL);
if(nxCache[options]==NULL) {
@@ -963,7 +971,7 @@ u_getCombiningClass(UChar32 c) {
#endif
}
-U_CAPI UBool U_EXPORT2
+U_CFUNC UBool U_EXPORT2
unorm_internalIsFullCompositionExclusion(UChar32 c) {
#if UNORM_HARDCODE_DATA
if(auxTrie.index!=NULL) {
@@ -980,7 +988,7 @@ unorm_internalIsFullCompositionExclusion(UChar32 c) {
}
}
-U_CAPI UBool U_EXPORT2
+U_CFUNC UBool U_EXPORT2
unorm_isCanonSafeStart(UChar32 c) {
#if UNORM_HARDCODE_DATA
if(auxTrie.index!=NULL) {
@@ -1241,7 +1249,7 @@ unorm_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode) {
sa->add(sa->set, HANGUL_BASE+HANGUL_COUNT); /* add Hangul+1 to continue with other properties */
}
-U_CAPI UNormalizationCheckResult U_EXPORT2
+U_CFUNC UNormalizationCheckResult U_EXPORT2
unorm_getQuickCheck(UChar32 c, UNormalizationMode mode) {
static const uint32_t qcMask[UNORM_MODE_COUNT]={
0, 0, _NORM_QC_NFD, _NORM_QC_NFKD, _NORM_QC_NFC, _NORM_QC_NFKC
@@ -1268,12 +1276,14 @@ unorm_getQuickCheck(UChar32 c, UNormalizationMode mode) {
}
}
-U_CAPI uint16_t U_EXPORT2
+U_CFUNC uint16_t U_EXPORT2
unorm_getFCD16FromCodePoint(UChar32 c) {
- UErrorCode errorCode;
uint16_t fcd;
-
+#if !UNORM_HARDCODE_DATA
+ UErrorCode errorCode;
errorCode=U_ZERO_ERROR;
+#endif
+
if(
#if !UNORM_HARDCODE_DATA
!_haveData(errorCode) ||
diff --git a/icuSources/common/unorm_props_data.c b/icuSources/common/unorm_props_data.c
index f6945378..49436fe1 100644
--- a/icuSources/common/unorm_props_data.c
+++ b/icuSources/common/unorm_props_data.c
@@ -1,57 +1,57 @@
/*
- * Copyright (C) 1999-2007, International Business Machines
+ * Copyright (C) 1999-2008, International Business Machines
* Corporation and others. All Rights Reserved.
*
* file name: unorm_props_data.c
*
- * machine-generated on: 2006-06-13
- * machine-generated on: 2007-02-08 U_DARWIN
+ * machine-generated on: 2008-03-20
+ * machine-generated on: 2008-07-16 U_DARWIN
*/
static const UVersionInfo formatVersion={ 2,3,5,2 };
-static const UVersionInfo dataVersion={ 5,0,0,0 };
+static const UVersionInfo dataVersion={ 5,1,0,0 };
static const int32_t indexes[_NORM_INDEX_TOP]={
#ifndef U_DARWIN
-0xa1a0,0x3e4b,0x7a7,0x16f,0,0x36,0x300,0xa0,0xc0,0xa0,0x2b00,0x2cf8,0x1e2c,0,0,0,
+0xa6c0,0x3e53,0x7a7,0x16f,0,0x36,0x300,0xa0,0xc0,0xa0,0x2d30,0x2ea0,0x1e2e,0,0,0,
#else /* U_DARWIN */
-0xa230,0x3e4b,0x7a7,0x16f,0,0x36,0x300,0xa0,0xc0,0xa0,0x2b48,0x2d40,0x1e2c,0,0,0,
+0xa750,0x3e53,0x7a7,0x16f,0,0x36,0x300,0xa0,0xc0,0xa0,0x2d78,0x2ef0,0x1e2e,0,0,0,
#endif /* U_DARWIN */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};
-static const uint16_t normTrie_index[2208]={
-0,0x8b4,0x7ff,0x807,0,0x54d,0x336,0x33e,0x346,0x34e,0x356,0x35e,0,0x366,0x36d,0x375,
-0x37d,0x385,0,0,0x80e,0x555,0x55c,0x564,0x4ff,0x507,0x175,8,0x17d,0x38d,0x10,0x16,
-0x395,0x39d,0x3a5,0x3ad,0x816,0,0x3b5,0x3bd,0,0,0,0,0x56b,0x81e,0x826,0,
-0x82a,0x3c5,0x50f,0x573,0,0,0x3cd,0x832,0x836,0x83b,0x843,0,0,0,0,0x849,
-0,0,0,0,0,0,0,0,0,0x3d5,0x185,0,0,0x517,0x18d,0,
-0,0x195,0x19d,0,0,0x84e,0x856,0,0,0x51f,0x1a5,0,0x3dd,0x527,0x3e4,0,
-0,0,0x3eb,0,0,0x85a,0x3f3,0,0,0x52f,0x3fa,0,0,0,0x400,0,
-0,0x57a,0x862,0,0,0x581,0x588,0,0x590,0x865,0x1ad,0x1b5,0x1bd,0x1c5,0x86c,0,
+static const uint16_t normTrie_index[2240]={
+0,0x8d9,0x80f,0x817,0,0x555,0x33e,0x346,0x34e,0x356,0x35e,0x366,0,0x36e,0x375,0x37d,
+0x385,0x38d,0,0,0x81e,0x55d,0x564,0x56c,0x507,0x50f,0x17d,8,0x185,0x395,0x10,0x16,
+0x39d,0x3a5,0x3ad,0x3b5,0x826,0,0x3bd,0x3c5,0,0,0,0,0x573,0x82e,0x836,0,
+0x83a,0x3cd,0x517,0x57b,0,0,0x3d5,0x842,0x846,0x84b,0x853,0,0,0,0,0x859,
+0,0,0,0,0,0,0,0,0,0x3dd,0x18d,0,0,0x51f,0x195,0,
+0,0x19d,0x1a5,0,0,0x85e,0x866,0,0,0x527,0x1ad,0,0x3e5,0x52f,0x3ec,0,
+0,0,0x3f3,0,0,0x86a,0x3fb,0,0,0x537,0x402,0,0,0,0x408,0,
+0,0x582,0x872,0,0,0x589,0x590,0,0x598,0x875,0x1b5,0x1bd,0x1c5,0x1cd,0x87c,0,
#ifndef U_DARWIN
-0,0x408,0,0,0,0,0,0x597,0x8dd,0,0,0x537,0,0x53d,0x545,0,
+0,0x410,0,0,0x881,0,0,0x59f,0x92b,0,0,0x53f,0,0x545,0x54d,0,
#else /* U_DARWIN */
-0,0x408,0,0,0,0,0,0x597,0x8e6,0,0,0x537,0,0x53d,0x545,0,
+0,0x410,0,0,0x881,0,0,0x59f,0x934,0,0,0x53f,0,0x545,0x54d,0,
#endif /* U_DARWIN */
-0,0,0,0,0,0,0,0,0,0,0x86e,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0x885,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x876,0x876,0,0,0,0,0x87c,0,
-0,0,0,0,0,0x884,0,0,0,0x887,0,0,0,0,0,0,
-0x88e,0,0,0,0,0,0,0,0x40f,0x414,0x41c,0x895,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0x1d,0x25,0x59f,0x5a6,0x5ae,0x89d,0x8a0,
-0x424,0x42c,0x434,0x43c,0x444,0x44c,0x454,0x45c,0x464,0x46c,0x474,0x1cd,0x47c,0x1d5,0x1dd,0x1e5,
-0x1ed,0x5b6,0x5be,0x5c6,0x5ce,0x2d,0x8a8,0x8b0,0x35,0x3d,0x45,0x5d6,0x484,0x48b,0x490,0,
-0x498,0x4a0,0x4a8,0x4b0,0x4b8,0x4c0,0,0x4c8,0,0x1f3,0,0,0,0,0,0,
-0,0,0,0x5de,0x5e6,0x5ee,0x5f6,0x5fe,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x88d,0x88d,0,0,0,0,0x893,0,
+0,0,0,0,0,0x89b,0,0,0,0x89e,0,0,0,0,0,0,
+0x8a5,0,0,0,0,0,0,0,0x417,0x41c,0x424,0x8ac,0,0x8b2,0,0,
+0,0x8b5,0,0,0,0,0,0,0,0x1d,0x25,0x5a7,0x5ae,0x5b6,0x8bd,0x8c4,
+0x42c,0x434,0x43c,0x444,0x44c,0x454,0x45c,0x464,0x46c,0x474,0x47c,0x1d5,0x484,0x1dd,0x1e5,0x1ed,
+0x1f5,0x5be,0x5c6,0x5ce,0x5d6,0x2d,0x8cc,0x8d4,0x35,0x3d,0x45,0x5de,0x48c,0x493,0x498,0,
+0x4a0,0x4a8,0x4b0,0x4b8,0x4c0,0x4c8,0,0x4d0,0,0x1fb,0,0,0,0,0,0,
+0,0,0,0x5e6,0x5ee,0x5f6,0x5fe,0x606,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x603,0,0,0x607,0,0,0x1f6,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0x60d,0,0,0,0,
-0,0,0,0,0x611,0,0,0x619,0x621,0x629,0x631,0x639,0x641,0x649,0x651,0,
-0x659,0x65f,0x4cf,0x4d7,0x4df,0x4e7,0x4ef,0x4f7,0,0x666,0x66e,0x676,0x67e,0,0,0,
-0x686,0x68e,0x4d,0x696,0x69e,0x6a6,0x55,0x6ae,0x6b6,0x6be,0x6c6,0x5d,0x65,0x6d,0x75,0x6ce,
+0x60b,0,0,0x60f,0,0,0x1fe,0,0,0,0,0,0,0,0,0,
+0,0,0,0x4d,0,0,0,0,0,0,0,0x615,0,0,0,0x8e1,
+0,0,0,0,0x619,0,0,0x621,0x629,0x631,0x639,0x641,0x649,0x651,0x659,0,
+0x661,0x667,0x4d7,0x4df,0x4e7,0x4ef,0x4f7,0x4ff,0,0x66e,0x676,0x67e,0x686,0,0,0,
+0x68e,0x696,0x55,0x69e,0x6a6,0x6ae,0x5d,0x6b6,0x6be,0x6c6,0x6ce,0x65,0x6d,0x75,0x7d,0x6d6,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -109,57 +109,57 @@ static const uint16_t normTrie_index[2208]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x8bc,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0x8e9,0,0,0,0,0,0,0,0x6de,0,0,0,0,
+0x8f1,0,0,0,0,0,0x8f8,0,0,0x8fe,0x902,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
#ifndef U_DARWIN
-0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,
-0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,
-0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,
-0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,
-0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,
-0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,
-0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,
-0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,
-0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,
-0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,
-0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,
-0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,
-0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,
-0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,
-0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,
-0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,
-0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,
-0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,
-0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,
-0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,
-0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,
-0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8ec,0,0,
-0x8f4,0x8f7,0,0x8fd,0,0,0,0,0,0,0,0,0,0,0,0,
+0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,
+0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,
+0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,
+0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,
+0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,
+0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,
+0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,
+0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,
+0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,
+0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,
+0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,
+0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,
+0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,
+0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,
+0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,
+0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,
+0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,
+0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,
+0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,
+0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,
+0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,
+0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x93a,0,0,
+0x942,0x945,0,0x94b,0,0,0,0,0,0,0,0,0,0,0,0,
#else /* U_DARWIN */
-0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,
-0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,
-0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,
-0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,
-0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,
-0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,
-0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,
-0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,
-0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,
-0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,
-0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,
-0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,
-0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,
-0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,
-0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,
-0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,
-0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,
-0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,
-0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,
-0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,
-0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,
-0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8f5,0,0,
-0x8fd,0x900,0,0x906,0,0,0,0,0,0,0,0,0,0,0,0,
+0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,
+0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,
+0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,
+0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,
+0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,
+0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,
+0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,
+0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,
+0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,
+0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,
+0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,
+0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,
+0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,
+0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,
+0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,
+0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,
+0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,
+0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,
+0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,
+0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,
+0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,
+0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x943,0,0,
+0x94b,0x94e,0,0x954,0,0,0,0,0,0,0,0,0,0,0,0,
#endif /* U_DARWIN */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -177,561 +177,571 @@ static const uint16_t normTrie_index[2208]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
#ifndef U_DARWIN
-0,0,0,0,0,0,0,0,0x1fe,0x206,0x20e,0x216,0x21e,0x226,0x22e,0x236,
+0,0,0,0,0,0,0,0,0x206,0x20e,0x216,0x21e,0x226,0x22e,0x236,0x23e,
#else /* U_DARWIN */
-0,0,0,0,0x8c2,0,0,0,0x1fe,0x206,0x20e,0x216,0x21e,0x226,0x22e,0x236,
+0,0,0,0,0x908,0,0,0,0x206,0x20e,0x216,0x21e,0x226,0x22e,0x236,0x23e,
#endif /* U_DARWIN */
-0x23e,0x246,0x24e,0x256,0x25e,0x266,0x26e,0,0x276,0x27e,0x286,0x6d6,0x6de,0x6e6,0x6eb,0x6f3,
-0x6fb,0x703,0x70b,0x713,0x71b,0x723,0x72b,0x733,0x73b,0x743,0x74b,0x753,0x75b,0x763,0x76b,0x76f,
-0x777,0x77f,0x787,0x78f,0x797,0x79f,0x7a7,0x7af,0x7b7,0x7bf,0x7c7,0x7cf,0x7d7,0x7df,0x7e7,0x7ef,
+0x246,0x24e,0x256,0x25e,0x266,0x26e,0x276,0,0x27e,0x286,0x28e,0x6e6,0x6ee,0x6f6,0x6fb,0x703,
+0x70b,0x713,0x71b,0x723,0x72b,0x733,0x73b,0x743,0x74b,0x753,0x75b,0x763,0x76b,0x773,0x77b,0x77f,
+0x787,0x78f,0x797,0x79f,0x7a7,0x7af,0x7b7,0x7bf,0x7c7,0x7cf,0x7d7,0x7df,0x7e7,0x7ef,0x7f7,0x7ff,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+#ifndef U_DARWIN
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x907,
+#else /* U_DARWIN */
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x910,
+#endif /* U_DARWIN */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
#ifndef U_DARWIN
-0x8c1,0x8c5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0x28e,0x296,0x8cd,0x29e,0x2a6,0,
-0,0,0x8d5,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x90f,0x913,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0x296,0x29e,0x91b,0x2a6,0x2ae,0,
+0,0,0x923,0,0,0,0,0,0,0,0,0,0,0,0,0,
#else /* U_DARWIN */
-0x8ca,0x8ce,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0x28e,0x296,0x8d6,0x29e,0x2a6,0,
-0,0,0x8de,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x918,0x91c,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0x296,0x29e,0x924,0x2a6,0x2ae,0,
+0,0,0x92c,0,0,0,0,0,0,0,0,0,0,0,0,0,
#endif /* U_DARWIN */
-0x7d,0x85,0x8d,0x95,0x9d,0xa5,0xad,0xb5,0xbd,0xc5,0xcd,0xd5,0xdd,0xe5,0xed,0xf5,
-0xfd,0x105,0x10d,0x115,0x11d,0x125,0x12d,0x135,0x13d,0x145,0x14d,0x155,0x15d,0x165,0x16d,0x7f7,
-0x2ae,0x2b6,0x2be,0x2c6,0x2ce,0x2d6,0x2de,0x2e6,0x2ee,0x2f6,0x2fe,0x306,0x30e,0x316,0x31e,0x326,
-0x32e,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0x85,0x8d,0x95,0x9d,0xa5,0xad,0xb5,0xbd,0xc5,0xcd,0xd5,0xdd,0xe5,0xed,0xf5,0xfd,
+0x105,0x10d,0x115,0x11d,0x125,0x12d,0x135,0x13d,0x145,0x14d,0x155,0x15d,0x165,0x16d,0x175,0x807,
+0x2b6,0x2be,0x2c6,0x2ce,0x2d6,0x2de,0x2e6,0x2ee,0x2f6,0x2fe,0x306,0x30e,0x316,0x31e,0x326,0x32e,
+0x336,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};
#ifndef U_DARWIN
-static const uint32_t normTrie_data32[9236]={
+static const uint32_t normTrie_data32[9548]={
#else /* U_DARWIN */
-static const uint32_t normTrie_data32[9272]={
+static const uint32_t normTrie_data32[9584]={
#endif /* U_DARWIN */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0xea00,0xea00,0xe900,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,
-0,0,0,0,0x612000f,0,0,0,0,0,0x13b000a,0,0,0,0x614000f,0,
-0,0x3dee0040,0,0,0,0x3d9f0040,0,0,0,0x3da10040,0x14a5004c,0x14aa004c,0x14ae000c,0x14b2000c,0x14b7004c,0,
-0x2123000a,0x2125000a,0x140004a,0x142000e,0x149000e,0x2127000a,0x2129000a,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x212b000a,0x212d000a,0x150000a,0,0x212f000a,0x2131000a,0,0,
-0,0x152000a,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x154000a,0x156000a,0x158000a,0,0x15a000a,0x15c000a,0x15e000a,0x160000a,0x162000a,0x164000a,0x166000a,0x168000a,0x16a000a,0x16c000a,0x16e000a,0,
-0x170000a,0x172000a,0x174000a,0x176000a,0x178000a,0x17a000a,0x17c000a,0x215c000a,0x215e000a,0x2160000a,0x2162000a,0x2164000a,0x2166000a,0x2168000a,0x216a000a,0x216c000a,
-0x216e000a,0x2170000a,0,0x2172000a,0x2174000a,0x2176000a,0x2178000a,0x217a000a,0x217c000a,0x217e000a,0x2180000a,0x2182000a,0x2184000a,0x2186000a,0x2188000a,0x218a000a,
-0x218c000a,0x218e000a,0x2190000a,0x2192000a,0,0,0,0,0,0,0,0,0x17e000a,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x2297000a,0x229b000a,0x181000a,0x183000a,0,0x229f000a,0x22a3000a,0x186000a,0,0x188000a,0x22a7000a,0x18b000a,
-0x18d000a,0x18f000a,0x22a9000a,0x22ab000a,0x191000a,0x193000a,0x195000a,0x22ad000a,0,0x197000a,0x199000a,0,0,0x19c000a,0x19e000a,0x1a0000a,
-0x1a2000a,0x1a4000a,0,0,0x1a6000a,0x1a9000a,0x1ad000a,0,0x1b0000a,0,0x6f5000f,0,0x1b2000a,0,0x6f7000f,0x6f9000f,
-0x1b4000a,0x1b6000a,0,0x22af000a,0x1b8000a,0x1ba000a,0,0x1bc000a,0x22b1000a,0x22b3000a,0x22b5000a,0x22b7000a,0x22b9000a,0x22bb000a,0,0x1be000a,
-0x22bd000a,0x22bf000a,0x1c2000a,0x1c4000a,0x22c1000a,0,0,0,0,0x1c6000a,0x22c3000a,0x22c5000a,0x22c7000a,0x22c9000a,0,0,
-0,0,0,0,0,0,0,0x22cb000a,0x22cf000a,0x22d3000a,0x22d7000a,0x22db000a,0x22df000a,0x22e3000a,0x22e7000a,0x22eb000a,
-0x22ef000a,0x22f3000a,0x22f7000a,0x22fb000a,0x28d3000a,0x28d7000a,0x28db000a,0x28df000a,0,0,0,0,0,0,0,0,
-0,0,0,0,0x1c8000a,0x28e3000a,0x28e6000a,0x28e9000a,0x28ec000a,0x28ef000a,0x28f2000a,0x28f5000a,0x28f8000a,0x28fb000a,0x28fe000a,0x2901000a,
-0x2904000a,0x2907000a,0x290a000a,0x290d000a,0x29f3000a,0x29f6000a,0x29f9000a,0x29fc000a,0x29ff000a,0x2a02000a,0x2a05000a,0x2a08000a,0x2a0b000a,0x2a0e000a,0x2a12000a,0x2a16000a,
-0x1cc000a,0x2a1a000a,0x1cf000a,0x1d2000a,0x2a1e000a,0x2a20000a,0x2a22000a,0x2a24000a,0x2a26000a,0x2a28000a,0x2a2a000a,0x2a2c000a,0x2a2e000a,0x2a30000a,0x2a32000a,0x2a34000a,
-0x2a36000a,0x2a38000a,0x2a3a000a,0x2a3c000a,0x2c52000a,0x2c55000a,0x2c58000a,0x2c5c000a,0x2c60000a,0x2c64000a,0x2c68000a,0x2c6c000a,0x2c70000a,0x2c74000a,0x2c78000a,0x2c7c000a,
-0x2c80000a,0x2c84000a,0x2c88000a,0x2c8c000a,0x2c90000a,0x1d6000a,0x2c94000a,0x1da000a,0x2c97000a,0x1dd000a,0x2c9b000a,0x2c9e000a,0x2ca1000a,0x2ca5000a,0x1e0000a,0x2ca9000a,
-0x2cac000a,0x2caf000a,0x2cb2000a,0x2cb5000a,0x1e3000a,0x1e6000a,0x1e9000a,0x1ec000a,0x1ef000a,0x1f2000a,0x1f5000a,0x1f8000a,0x2cba000a,0x2cbe000a,0x1fb000a,0x1fe000a,
-0x201000a,0x2cc3000a,0x2cc6000a,0x2cc9000a,0x204000a,0x207000a,0x20b000a,0x20f000a,0x213000a,0x2ccc000a,0x2ccf000a,0x2cd2000a,0x2cd5000a,0x2cd8000a,0x2cdb000a,0x2cde000a,
-0x2ce1000a,0x2ce4000a,0x2ce7000a,0x2cea000a,0x2cee000a,0x2cf2000a,0x2cf5000a,0x2cf9000a,0x2cfd000a,0x2d01000a,0x2d04000a,0x2d08000a,0x2d0c000a,0x217000a,0x21a000a,0x21e000a,
-0x222000a,0x2d11000a,0x2d15000a,0x2d1b000a,0x2d22000a,0x2d25000a,0x2d28000a,0x2d2b000a,0x226000a,0x229000a,0x22c000a,0x22f000a,0x232000a,0x235000a,0x238000a,0x23b000a,
-0x23e000a,0x241000a,0x244000a,0x247000a,0x24a000a,0x24d000a,0x2d2e000a,0x250000a,0x2d33000a,0x2d36000a,0x253000a,0x258000a,0x25c000a,0x25f000a,0x2d39000a,0x262000a,
-0x2d3c000a,0x265000a,0x268000a,0x2d3f000a,0x2d42000a,0x2d45000a,0x2d48000a,0x2d4c000a,0x2d4f000a,0x2d52000a,0x2d56000a,0x26b000a,0x2d5a000a,0x26e000a,0x272000a,0x2d5f000a,
-0x275000a,0x278000a,0x27b000a,0x27f000a,0x283000a,0x285000a,0x287000a,0x289000a,0x28b000a,0x28d000a,0x28f000a,0x291000a,0x293000a,0x295000a,0x297000a,0x299000a,
-0x29b000a,0x29d000a,0x29f000a,0x2a1000a,0x2a3000a,0x2a5000a,0x2a7000a,0x2a9000a,0x2ab000a,0x2ad000a,0x2af000a,0x2b1000a,0x2b3000a,0x2b5000a,0x3921000a,0x3923000a,
-0x3925000a,0x3927000a,0x3929000a,0x392b000a,0x392d000a,0x392f000a,0x3931000a,0x3933000a,0x3935000a,0x3937000a,0x3939000a,0x393b000a,0x393d000a,0x393f000a,0x3941000a,0x3943000a,
-0x3945000a,0x3947000a,0x3949000a,0x394b000a,0x394d000a,0x394f000a,0x3951000a,0x3953000a,0x2b7000a,0x2b9000a,0x2bb000a,0x2bd000a,0x2bf000a,0x2c1000a,0x2c3000a,0x2c5000a,
-0x2c7000a,0x2c9000a,0x2cb000a,0x2cd000a,0x2cf000a,0x2d1000a,0x2d3000a,0x2d5000a,0x2d7000a,0x2d9000a,0x2db000a,0x2dd000a,0x2df000a,0x2e1000a,0x2e3000a,0x2e5000a,
-0x2e7000a,0x2e9000a,0x3955000a,0x3957000a,0x3959000a,0x395b000a,0x395d000a,0x395f000a,0x3961000a,0,0x3963000a,0x3965000a,0x3967000a,0x3969000a,0x396b000a,0x396d000a,
-0x396f000a,0x3971000a,0x3973000a,0x3975000a,0x3977000a,0x3979000a,0x397b000a,0x397d000a,0x397f000a,0x3981000a,0x3983000a,0x3985000a,0x2eb000a,0x2ed000a,0x2ef000a,0x2f1000a,
-0x2f3000a,0x2f5000a,0x2f7000a,0x2f9000a,0x2fb000a,0x2fd000a,0x2ff000a,0x301000a,0x303000a,0x305000a,0x307000a,0x309000a,0x30b000a,0x30d000a,0x30f000a,0x311000a,
-0x313000a,0x315000a,0x317000a,0x319000a,0x31b000a,0x31d000a,0x3987000a,0x3989000a,0x398b000a,0x398d000a,0x398f000a,0x3991000a,0x3993000a,0x3995000a,0x3997000a,0x3999000a,
-0x399b000a,0x399d000a,0x399f000a,0x39a1000a,0x39a3000a,0x39a5000a,0x39a7000a,0x39a9000a,0x39ab000a,0x39ad000a,0x39af000a,0x39b1000a,0x39b3000a,0x39b5000a,0x39b7000a,0x39b9000a,
-0x31f000a,0,0x321000a,0x323000a,0,0,0x325000a,0,0,0x327000a,0x329000a,0,0,0x32b000a,0x32d000a,0x32f000a,
-0x331000a,0,0x333000a,0x335000a,0x337000a,0x339000a,0x33b000a,0x33d000a,0x33f000a,0x341000a,0x39bb000a,0x39bd000a,0x39bf000a,0x39c1000a,0,0x39c3000a,
-0,0x39c5000a,0x39c7000a,0x39c9000a,0x39cb000a,0x39cd000a,0x39cf000a,0x39d1000a,0,0x39d3000a,0x39d5000a,0x39d7000a,0x39d9000a,0x39db000a,0x39dd000a,0x39df000a,
-0x39e1000a,0x39e3000a,0x39e5000a,0x39e7000a,0x343000a,0x345000a,0x347000a,0x349000a,0x34b000a,0x34d000a,0x34f000a,0x351000a,0x353000a,0x355000a,0x357000a,0x359000a,
-0x35b000a,0x35d000a,0x35f000a,0x361000a,0x363000a,0x365000a,0x367000a,0x369000a,0x36b000a,0x36d000a,0x36f000a,0x371000a,0x373000a,0x375000a,0x39e9000a,0x39eb000a,
-0x39ed000a,0x39ef000a,0x39f1000a,0x39f3000a,0x39f5000a,0x39f7000a,0x39f9000a,0x39fb000a,0x39fd000a,0x39ff000a,0x3a01000a,0x3a03000a,0x3a05000a,0x3a07000a,0x3a09000a,0x3a0b000a,
-0x3a0d000a,0x3a0f000a,0x3a11000a,0x3a13000a,0x3a15000a,0x3a17000a,0x3a19000a,0x3a1b000a,0x377000a,0x379000a,0,0x37b000a,0x37d000a,0x37f000a,0x381000a,0,
-0,0x383000a,0x385000a,0x387000a,0x389000a,0x38b000a,0x38d000a,0x38f000a,0x391000a,0,0x393000a,0x395000a,0x397000a,0x399000a,0x39b000a,0x39d000a,
-0x39f000a,0,0x3a1d000a,0x3a1f000a,0x3a21000a,0x3a23000a,0x3a25000a,0x3a27000a,0x3a29000a,0x3a2b000a,0x3a2d000a,0x3a2f000a,0x3a31000a,0x3a33000a,0x3a35000a,0x3a37000a,
-0x3a39000a,0x3a3b000a,0x3a3d000a,0x3a3f000a,0x3a41000a,0x3a43000a,0x3a45000a,0x3a47000a,0x3a49000a,0x3a4b000a,0x3a4d000a,0x3a4f000a,0x3a1000a,0x3a3000a,0,0x3a5000a,
-0x3a7000a,0x3a9000a,0x3ab000a,0,0x3ad000a,0x3af000a,0x3b1000a,0x3b3000a,0x3b5000a,0,0x3b7000a,0,0,0,0x3b9000a,0x3bb000a,
-0x3bd000a,0x3bf000a,0x3c1000a,0x3c3000a,0x3c5000a,0,0x3a51000a,0x3a53000a,0x3a55000a,0x3a57000a,0x3a59000a,0x3a5b000a,0x3a5d000a,0x3a5f000a,0x3a61000a,0x3a63000a,
-0x3a65000a,0x3a67000a,0x3a69000a,0x3a6b000a,0x3a6d000a,0x3a6f000a,0x3a71000a,0x3a73000a,0x3a75000a,0x3a77000a,0x3a79000a,0x3a7b000a,0x3a7d000a,0x3a7f000a,0x3a81000a,0x3a83000a,
-0x3c7000a,0x3c9000a,0x3cb000a,0x3cd000a,0x3cf000a,0x3d1000a,0x3d3000a,0x3d5000a,0x3d7000a,0x3d9000a,0x3db000a,0x3dd000a,0x3df000a,0x3e1000a,0x3e3000a,0x3e5000a,
-0x3e7000a,0x3e9000a,0x3eb000a,0x3ed000a,0x3ef000a,0x3f1000a,0x3f3000a,0x3f5000a,0x3f7000a,0x3f9000a,0x3a85000a,0x3a87000a,0x3a89000a,0x3a8b000a,0x3a8d000a,0x3a8f000a,
-0x3a91000a,0x3a93000a,0x3a95000a,0x3a97000a,0x3a99000a,0x3a9b000a,0x3a9d000a,0x3a9f000a,0x3aa1000a,0x3aa3000a,0x3aa5000a,0x3aa7000a,0x3aa9000a,0x3aab000a,0x3aad000a,0x3aaf000a,
-0x3ab1000a,0x3ab3000a,0x3ab5000a,0x3ab7000a,0x3fb000a,0x3fd000a,0x3ff000a,0x401000a,0x403000a,0x405000a,0x407000a,0x409000a,0x40b000a,0x40d000a,0x40f000a,0x411000a,
-0x413000a,0x415000a,0x417000a,0x419000a,0x41b000a,0x41d000a,0x41f000a,0x421000a,0x423000a,0x425000a,0x427000a,0x429000a,0x42b000a,0x42d000a,0x3ab9000a,0x3abb000a,
-0x3abd000a,0x3abf000a,0x3ac1000a,0x3ac3000a,0x3ac5000a,0x3ac7000a,0x3ac9000a,0x3acb000a,0x3acd000a,0x3acf000a,0x3ad1000a,0x3ad3000a,0x3ad5000a,0x3ad7000a,0x3ad9000a,0x3adb000a,
-0x3add000a,0x3adf000a,0x3ae1000a,0x3ae3000a,0x3ae5000a,0x3ae7000a,0x3ae9000a,0x3aeb000a,0x42f000a,0x431000a,0x433000a,0x435000a,0x437000a,0x439000a,0x43b000a,0x43d000a,
-0x43f000a,0x441000a,0x443000a,0x445000a,0x447000a,0x449000a,0x44b000a,0x44d000a,0x44f000a,0x451000a,0x453000a,0x455000a,0x457000a,0x459000a,0x45b000a,0x45d000a,
-0x45f000a,0x461000a,0x3aed000a,0x3aef000a,0x3af1000a,0x3af3000a,0x3af5000a,0x3af7000a,0x3af9000a,0x3afb000a,0x3afd000a,0x3aff000a,0x3b01000a,0x3b03000a,0x3b05000a,0x3b07000a,
-0x3b09000a,0x3b0b000a,0x3b0d000a,0x3b0f000a,0x3b11000a,0x3b13000a,0x3b15000a,0x3b17000a,0x3b19000a,0x3b1b000a,0x3b1d000a,0x3b1f000a,0x463000a,0x465000a,0x467000a,0x469000a,
-0x46b000a,0x46d000a,0x46f000a,0x471000a,0x473000a,0x475000a,0x477000a,0x479000a,0x47b000a,0x47d000a,0x47f000a,0x481000a,0x483000a,0x485000a,0x487000a,0x489000a,
-0x48b000a,0x48d000a,0x48f000a,0x491000a,0x493000a,0x495000a,0x3b21000a,0x3b23000a,0x3b25000a,0x3b27000a,0x3b29000a,0x3b2b000a,0x3b2d000a,0x3b2f000a,0x3b31000a,0x3b33000a,
-0x3b35000a,0x3b37000a,0x3b39000a,0x3b3b000a,0x3b3d000a,0x3b3f000a,0x3b41000a,0x3b43000a,0x3b45000a,0x3b47000a,0x3b49000a,0x3b4b000a,0x3b4d000a,0x3b4f000a,0x3b51000a,0x3b53000a,
-0x497000a,0x499000a,0x49b000a,0x49d000a,0x49f000a,0x4a1000a,0x4a3000a,0x4a5000a,0x4a7000a,0x4a9000a,0x4ab000a,0x4ad000a,0x4af000a,0x4b1000a,0x4b3000a,0x4b5000a,
-0x4b7000a,0x4b9000a,0x4bb000a,0x4bd000a,0x4bf000a,0x4c1000a,0x4c3000a,0x4c5000a,0x4c7000a,0x4c9000a,0x3b55000a,0x3b57000a,0x3b59000a,0x3b5b000a,0x3b5d000a,0x3b5f000a,
-0x3b61000a,0x3b63000a,0x3b65000a,0x3b67000a,0x3b69000a,0x3b6b000a,0x3b6d000a,0x3b6f000a,0x3b71000a,0x3b73000a,0x3b75000a,0x3b77000a,0x3b79000a,0x3b7b000a,0x3b7d000a,0x3b7f000a,
-0x3b81000a,0x3b83000a,0x3b85000a,0x3b87000a,0x4cb000a,0x4cd000a,0x4cf000a,0x4d1000a,0x4d3000a,0x4d5000a,0x4d7000a,0x4d9000a,0x4db000a,0x4dd000a,0x4df000a,0x4e1000a,
-0x4e3000a,0x4e5000a,0x4e7000a,0x4e9000a,0x4eb000a,0x4ed000a,0x4ef000a,0x4f1000a,0x4f3000a,0x4f5000a,0x4f7000a,0x4f9000a,0x4fb000a,0x4fd000a,0x3b89000a,0x3b8b000a,
-0x3b8d000a,0x3b8f000a,0x3b91000a,0x3b93000a,0x3b95000a,0x3b97000a,0x3b99000a,0x3b9b000a,0x3b9d000a,0x3b9f000a,0x3ba1000a,0x3ba3000a,0x3ba5000a,0x3ba7000a,0x3ba9000a,0x3bab000a,
-0x3bad000a,0x3baf000a,0x3bb1000a,0x3bb3000a,0x3bb5000a,0x3bb7000a,0x3bb9000a,0x3bbb000a,0x3bbd000a,0x3bbf000a,0,0,0x4ff000a,0x501000a,0x503000a,0x505000a,
-0x507000a,0x509000a,0x50b000a,0x50d000a,0x50f000a,0x511000a,0x513000a,0x515000a,0x517000a,0x519000a,0x51b000a,0x51d000a,0x51f000a,0x521000a,0x523000a,0x525000a,
-0x527000a,0x529000a,0x52b000a,0x52d000a,0x52f000a,0x3bc1000a,0x3bc3000a,0x3bc5000a,0x3bc7000a,0x3bc9000a,0x3bcb000a,0x3bcd000a,0x3bcf000a,0x3bd1000a,0x3bd3000a,0x3bd5000a,
-0x3bd7000a,0x3bd9000a,0x3bdb000a,0x3bdd000a,0x3bdf000a,0x3be1000a,0x3be3000a,0x531000a,0x3be5000a,0x3be7000a,0x3be9000a,0x3beb000a,0x3bed000a,0x3bef000a,0x3bf1000a,0x3bf3000a,
-0x3bf5000a,0x3bf7000a,0x3bf9000a,0x3bfb000a,0x3bfd000a,0x3bff000a,0x533000a,0x535000a,0x537000a,0x539000a,0x53b000a,0x53d000a,0x53f000a,0x541000a,0x543000a,0x545000a,
-0x547000a,0x549000a,0x54b000a,0x54d000a,0x54f000a,0x551000a,0x553000a,0x555000a,0x557000a,0x559000a,0x55b000a,0x55d000a,0x55f000a,0x561000a,0x563000a,0x3c01000a,
-0x3c03000a,0x3c05000a,0x3c07000a,0x3c09000a,0x3c0b000a,0x3c0d000a,0x3c0f000a,0x3c11000a,0x3c13000a,0x3c15000a,0x3c17000a,0x3c19000a,0x3c1b000a,0x3c1d000a,0x3c1f000a,0x3c21000a,
-0x3c23000a,0x565000a,0x3c25000a,0x3c27000a,0x3c29000a,0x3c2b000a,0x3c2d000a,0x3c2f000a,0x3c31000a,0x3c33000a,0x3c35000a,0x3c37000a,0x3c39000a,0x3c3b000a,0x3c3d000a,0x3c3f000a,
-0x567000a,0x569000a,0x56b000a,0x56d000a,0x56f000a,0x571000a,0x573000a,0x575000a,0x577000a,0x579000a,0x57b000a,0x57d000a,0x57f000a,0x581000a,0x583000a,0x585000a,
-0x587000a,0x589000a,0x58b000a,0x58d000a,0x58f000a,0x591000a,0x593000a,0x595000a,0x597000a,0x3c41000a,0x3c43000a,0x3c45000a,0x3c47000a,0x3c49000a,0x3c4b000a,0x3c4d000a,
-0x3c4f000a,0x3c51000a,0x3c53000a,0x3c55000a,0x3c57000a,0x3c59000a,0x3c5b000a,0x3c5d000a,0x3c5f000a,0x3c61000a,0x3c63000a,0x599000a,0x3c65000a,0x3c67000a,0x3c69000a,0x3c6b000a,
-0x3c6d000a,0x3c6f000a,0x3c71000a,0x3c73000a,0x3c75000a,0x3c77000a,0x3c79000a,0x3c7b000a,0x3c7d000a,0x3c7f000a,0x59b000a,0x59d000a,0x59f000a,0x5a1000a,0x5a3000a,0x5a5000a,
-0x5a7000a,0x5a9000a,0x5ab000a,0x5ad000a,0x5af000a,0x5b1000a,0x5b3000a,0x5b5000a,0x5b7000a,0x5b9000a,0x5bb000a,0x5bd000a,0x5bf000a,0x5c1000a,0x5c3000a,0x5c5000a,
-0x5c7000a,0x5c9000a,0x5cb000a,0x3c81000a,0x3c83000a,0x3c85000a,0x3c87000a,0x3c89000a,0x3c8b000a,0x3c8d000a,0x3c8f000a,0x3c91000a,0x3c93000a,0x3c95000a,0x3c97000a,0x3c99000a,
-0x3c9b000a,0x3c9d000a,0x3c9f000a,0x3ca1000a,0x3ca3000a,0x5cd000a,0x3ca5000a,0x3ca7000a,0x3ca9000a,0x3cab000a,0x3cad000a,0x3caf000a,0x3cb1000a,0x3cb3000a,0x3cb5000a,0x3cb7000a,
-0x3cb9000a,0x3cbb000a,0x3cbd000a,0x3cbf000a,0x5cf000a,0x5d1000a,0x5d3000a,0x5d5000a,0x5d7000a,0x5d9000a,0x5db000a,0x5dd000a,0x5df000a,0x5e1000a,0x5e3000a,0x5e5000a,
-0x5e7000a,0x5e9000a,0x5eb000a,0x5ed000a,0x5ef000a,0x5f1000a,0x5f3000a,0x5f5000a,0x5f7000a,0x5f9000a,0x5fb000a,0x5fd000a,0x5ff000a,0x3cc1000a,0x3cc3000a,0x3cc5000a,
-0x3cc7000a,0x3cc9000a,0x3ccb000a,0x3ccd000a,0x3ccf000a,0x3cd1000a,0x3cd3000a,0x3cd5000a,0x3cd7000a,0x3cd9000a,0x3cdb000a,0x3cdd000a,0x3cdf000a,0x3ce1000a,0x3ce3000a,0x601000a,
-0x3ce5000a,0x3ce7000a,0x3ce9000a,0x3ceb000a,0x3ced000a,0x3cef000a,0x3cf1000a,0x3cf3000a,0x3cf5000a,0x3cf7000a,0x3cf9000a,0x3cfb000a,0x3cfd000a,0x3cff000a,0x603000a,0x3d01000a,
-0,0,0x3d03000a,0x3d05000a,0x3d07000a,0x3d09000a,0x3d0b000a,0x3d0d000a,0x3d0f000a,0x3d11000a,0x3d13000a,0x3d15000a,0x3d17000a,0x3d19000a,0x3d1b000a,0x3d1d000a,
-0x3d1f000a,0x3d21000a,0x3d23000a,0x3d25000a,0x605e60f,0x608e60f,0x206be6b0,0x60be60f,0x60ee60f,0x206cf0b0,0xe600,0xdc00,0xdc00,0xdc00,0xe600,0xe600,
+0,0,0,0,0x616000f,0,0,0,0,0,0x13d000a,0,0,0,0x618000f,0,
+0,0x3df60040,0,0,0,0x3da70040,0,0,0,0x3da90040,0x14a9004c,0x14ae004c,0x14b2000c,0x14b6000c,0x14bb004c,0,
+0x2127000a,0x2129000a,0x142004a,0x144000e,0x14b000e,0x212b000a,0x212d000a,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x212f000a,0x2131000a,0x152000a,0,0x2133000a,0x2135000a,0,0,
+0,0x154000a,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x156000a,0x158000a,0x15a000a,0,0x15c000a,0x15e000a,0x160000a,0x162000a,0x164000a,0x166000a,0x168000a,0x16a000a,0x16c000a,0x16e000a,0x170000a,0,
+0x172000a,0x174000a,0x176000a,0x178000a,0x17a000a,0x17c000a,0x17e000a,0x2160000a,0x2162000a,0x2164000a,0x2166000a,0x2168000a,0x216a000a,0x216c000a,0x216e000a,0x2170000a,
+0x2172000a,0x2174000a,0,0x2176000a,0x2178000a,0x217a000a,0x217c000a,0x217e000a,0x2180000a,0x2182000a,0x2184000a,0x2186000a,0x2188000a,0x218a000a,0x218c000a,0x218e000a,
+0x2190000a,0x2192000a,0x2194000a,0x2196000a,0,0,0,0,0,0,0,0,0x180000a,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x229b000a,0x229f000a,0x183000a,0x185000a,0,0x22a3000a,0x22a7000a,0x188000a,0,0x18a000a,0x22ab000a,0x18d000a,
+0x18f000a,0x191000a,0x22ad000a,0x22af000a,0x193000a,0x195000a,0x197000a,0x22b1000a,0,0x199000a,0x19b000a,0,0,0x19e000a,0x1a0000a,0x1a2000a,
+0x1a4000a,0x1a6000a,0,0,0x1a8000a,0x1ab000a,0x1af000a,0,0x1b2000a,0,0x6f9000f,0,0x1b4000a,0,0x6fb000f,0x6fd000f,
+0x1b6000a,0x1b8000a,0,0x22b3000a,0x1ba000a,0x1bc000a,0,0x1be000a,0x22b5000a,0x22b7000a,0x22b9000a,0x22bb000a,0x22bd000a,0x22bf000a,0,0x1c0000a,
+0x22c1000a,0x22c3000a,0x1c4000a,0x1c6000a,0x22c5000a,0,0,0,0,0x1c8000a,0x22c7000a,0x22c9000a,0x22cb000a,0x22cd000a,0,0,
+0,0,0,0,0,0,0,0x22cf000a,0x22d3000a,0x22d7000a,0x22db000a,0x22df000a,0x22e3000a,0x22e7000a,0x22eb000a,0x22ef000a,
+0x22f3000a,0x22f7000a,0x22fb000a,0x22ff000a,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x2523000a,0x1ca000a,0,0,0x28d9000a,0x28dd000a,0x28e1000a,0x28e5000a,0,0,0,0,0,0,0,0,
+0,0,0,0,0x1cc000a,0x28e9000a,0x28ec000a,0x28ef000a,0x28f2000a,0x28f5000a,0x28f8000a,0x28fb000a,0x28fe000a,0x2901000a,0x2904000a,0x2907000a,
+0x290a000a,0x290d000a,0x2910000a,0x2913000a,0x29f9000a,0x29fc000a,0x29ff000a,0x2a02000a,0x2a05000a,0x2a08000a,0x2a0b000a,0x2a0e000a,0x2a11000a,0x2a14000a,0x2a18000a,0x2a1c000a,
+0x1d0000a,0x2a20000a,0x1d3000a,0x1d6000a,0x2a24000a,0x2a26000a,0x2a28000a,0x2a2a000a,0x2a2c000a,0x2a2e000a,0x2a30000a,0x2a32000a,0x2a34000a,0x2a36000a,0x2a38000a,0x2a3a000a,
+0x2a3c000a,0x2a3e000a,0x2a40000a,0x2a42000a,0x2c58000a,0x2c5b000a,0x2c5e000a,0x2c62000a,0x2c66000a,0x2c6a000a,0x2c6e000a,0x2c72000a,0x2c76000a,0x2c7a000a,0x2c7e000a,0x2c82000a,
+0x2c86000a,0x2c8a000a,0x2c8e000a,0x2c92000a,0x2c96000a,0x1da000a,0x2c9a000a,0x1de000a,0x2c9d000a,0x1e1000a,0x2ca1000a,0x2ca4000a,0x2ca7000a,0x2cab000a,0x1e4000a,0x2caf000a,
+0x2cb2000a,0x2cb5000a,0x2cb8000a,0x2cbb000a,0x1e7000a,0x1ea000a,0x1ed000a,0x1f0000a,0x1f3000a,0x1f6000a,0x1f9000a,0x1fc000a,0x2cc0000a,0x2cc4000a,0x1ff000a,0x202000a,
+0x205000a,0x2cc9000a,0x2ccc000a,0x2ccf000a,0x208000a,0x20b000a,0x20f000a,0x213000a,0x217000a,0x2cd2000a,0x2cd5000a,0x2cd8000a,0x2cdb000a,0x2cde000a,0x2ce1000a,0x2ce4000a,
+0x2ce7000a,0x2cea000a,0x2ced000a,0x2cf0000a,0x2cf4000a,0x2cf8000a,0x2cfb000a,0x2cff000a,0x2d03000a,0x2d07000a,0x2d0a000a,0x2d0e000a,0x2d12000a,0x21b000a,0x21e000a,0x222000a,
+0x226000a,0x2d17000a,0x2d1b000a,0x2d21000a,0x2d28000a,0x2d2b000a,0x2d2e000a,0x2d31000a,0x22a000a,0x22d000a,0x230000a,0x233000a,0x236000a,0x239000a,0x23c000a,0x23f000a,
+0x242000a,0x245000a,0x248000a,0x24b000a,0x24e000a,0x251000a,0x2d34000a,0x254000a,0x2d39000a,0x2d3c000a,0x257000a,0x25c000a,0x260000a,0x263000a,0x2d3f000a,0x266000a,
+0x2d42000a,0x269000a,0x26c000a,0x2d45000a,0x2d48000a,0x2d4b000a,0x2d4e000a,0x2d52000a,0x2d55000a,0x2d58000a,0x2d5c000a,0x26f000a,0x2d60000a,0x272000a,0x276000a,0x2d65000a,
+0x279000a,0x27c000a,0x27f000a,0x283000a,0x287000a,0x289000a,0x28b000a,0x28d000a,0x28f000a,0x291000a,0x293000a,0x295000a,0x297000a,0x299000a,0x29b000a,0x29d000a,
+0x29f000a,0x2a1000a,0x2a3000a,0x2a5000a,0x2a7000a,0x2a9000a,0x2ab000a,0x2ad000a,0x2af000a,0x2b1000a,0x2b3000a,0x2b5000a,0x2b7000a,0x2b9000a,0x3929000a,0x392b000a,
+0x392d000a,0x392f000a,0x3931000a,0x3933000a,0x3935000a,0x3937000a,0x3939000a,0x393b000a,0x393d000a,0x393f000a,0x3941000a,0x3943000a,0x3945000a,0x3947000a,0x3949000a,0x394b000a,
+0x394d000a,0x394f000a,0x3951000a,0x3953000a,0x3955000a,0x3957000a,0x3959000a,0x395b000a,0x2bb000a,0x2bd000a,0x2bf000a,0x2c1000a,0x2c3000a,0x2c5000a,0x2c7000a,0x2c9000a,
+0x2cb000a,0x2cd000a,0x2cf000a,0x2d1000a,0x2d3000a,0x2d5000a,0x2d7000a,0x2d9000a,0x2db000a,0x2dd000a,0x2df000a,0x2e1000a,0x2e3000a,0x2e5000a,0x2e7000a,0x2e9000a,
+0x2eb000a,0x2ed000a,0x395d000a,0x395f000a,0x3961000a,0x3963000a,0x3965000a,0x3967000a,0x3969000a,0,0x396b000a,0x396d000a,0x396f000a,0x3971000a,0x3973000a,0x3975000a,
+0x3977000a,0x3979000a,0x397b000a,0x397d000a,0x397f000a,0x3981000a,0x3983000a,0x3985000a,0x3987000a,0x3989000a,0x398b000a,0x398d000a,0x2ef000a,0x2f1000a,0x2f3000a,0x2f5000a,
+0x2f7000a,0x2f9000a,0x2fb000a,0x2fd000a,0x2ff000a,0x301000a,0x303000a,0x305000a,0x307000a,0x309000a,0x30b000a,0x30d000a,0x30f000a,0x311000a,0x313000a,0x315000a,
+0x317000a,0x319000a,0x31b000a,0x31d000a,0x31f000a,0x321000a,0x398f000a,0x3991000a,0x3993000a,0x3995000a,0x3997000a,0x3999000a,0x399b000a,0x399d000a,0x399f000a,0x39a1000a,
+0x39a3000a,0x39a5000a,0x39a7000a,0x39a9000a,0x39ab000a,0x39ad000a,0x39af000a,0x39b1000a,0x39b3000a,0x39b5000a,0x39b7000a,0x39b9000a,0x39bb000a,0x39bd000a,0x39bf000a,0x39c1000a,
+0x323000a,0,0x325000a,0x327000a,0,0,0x329000a,0,0,0x32b000a,0x32d000a,0,0,0x32f000a,0x331000a,0x333000a,
+0x335000a,0,0x337000a,0x339000a,0x33b000a,0x33d000a,0x33f000a,0x341000a,0x343000a,0x345000a,0x39c3000a,0x39c5000a,0x39c7000a,0x39c9000a,0,0x39cb000a,
+0,0x39cd000a,0x39cf000a,0x39d1000a,0x39d3000a,0x39d5000a,0x39d7000a,0x39d9000a,0,0x39db000a,0x39dd000a,0x39df000a,0x39e1000a,0x39e3000a,0x39e5000a,0x39e7000a,
+0x39e9000a,0x39eb000a,0x39ed000a,0x39ef000a,0x347000a,0x349000a,0x34b000a,0x34d000a,0x34f000a,0x351000a,0x353000a,0x355000a,0x357000a,0x359000a,0x35b000a,0x35d000a,
+0x35f000a,0x361000a,0x363000a,0x365000a,0x367000a,0x369000a,0x36b000a,0x36d000a,0x36f000a,0x371000a,0x373000a,0x375000a,0x377000a,0x379000a,0x39f1000a,0x39f3000a,
+0x39f5000a,0x39f7000a,0x39f9000a,0x39fb000a,0x39fd000a,0x39ff000a,0x3a01000a,0x3a03000a,0x3a05000a,0x3a07000a,0x3a09000a,0x3a0b000a,0x3a0d000a,0x3a0f000a,0x3a11000a,0x3a13000a,
+0x3a15000a,0x3a17000a,0x3a19000a,0x3a1b000a,0x3a1d000a,0x3a1f000a,0x3a21000a,0x3a23000a,0x37b000a,0x37d000a,0,0x37f000a,0x381000a,0x383000a,0x385000a,0,
+0,0x387000a,0x389000a,0x38b000a,0x38d000a,0x38f000a,0x391000a,0x393000a,0x395000a,0,0x397000a,0x399000a,0x39b000a,0x39d000a,0x39f000a,0x3a1000a,
+0x3a3000a,0,0x3a25000a,0x3a27000a,0x3a29000a,0x3a2b000a,0x3a2d000a,0x3a2f000a,0x3a31000a,0x3a33000a,0x3a35000a,0x3a37000a,0x3a39000a,0x3a3b000a,0x3a3d000a,0x3a3f000a,
+0x3a41000a,0x3a43000a,0x3a45000a,0x3a47000a,0x3a49000a,0x3a4b000a,0x3a4d000a,0x3a4f000a,0x3a51000a,0x3a53000a,0x3a55000a,0x3a57000a,0x3a5000a,0x3a7000a,0,0x3a9000a,
+0x3ab000a,0x3ad000a,0x3af000a,0,0x3b1000a,0x3b3000a,0x3b5000a,0x3b7000a,0x3b9000a,0,0x3bb000a,0,0,0,0x3bd000a,0x3bf000a,
+0x3c1000a,0x3c3000a,0x3c5000a,0x3c7000a,0x3c9000a,0,0x3a59000a,0x3a5b000a,0x3a5d000a,0x3a5f000a,0x3a61000a,0x3a63000a,0x3a65000a,0x3a67000a,0x3a69000a,0x3a6b000a,
+0x3a6d000a,0x3a6f000a,0x3a71000a,0x3a73000a,0x3a75000a,0x3a77000a,0x3a79000a,0x3a7b000a,0x3a7d000a,0x3a7f000a,0x3a81000a,0x3a83000a,0x3a85000a,0x3a87000a,0x3a89000a,0x3a8b000a,
+0x3cb000a,0x3cd000a,0x3cf000a,0x3d1000a,0x3d3000a,0x3d5000a,0x3d7000a,0x3d9000a,0x3db000a,0x3dd000a,0x3df000a,0x3e1000a,0x3e3000a,0x3e5000a,0x3e7000a,0x3e9000a,
+0x3eb000a,0x3ed000a,0x3ef000a,0x3f1000a,0x3f3000a,0x3f5000a,0x3f7000a,0x3f9000a,0x3fb000a,0x3fd000a,0x3a8d000a,0x3a8f000a,0x3a91000a,0x3a93000a,0x3a95000a,0x3a97000a,
+0x3a99000a,0x3a9b000a,0x3a9d000a,0x3a9f000a,0x3aa1000a,0x3aa3000a,0x3aa5000a,0x3aa7000a,0x3aa9000a,0x3aab000a,0x3aad000a,0x3aaf000a,0x3ab1000a,0x3ab3000a,0x3ab5000a,0x3ab7000a,
+0x3ab9000a,0x3abb000a,0x3abd000a,0x3abf000a,0x3ff000a,0x401000a,0x403000a,0x405000a,0x407000a,0x409000a,0x40b000a,0x40d000a,0x40f000a,0x411000a,0x413000a,0x415000a,
+0x417000a,0x419000a,0x41b000a,0x41d000a,0x41f000a,0x421000a,0x423000a,0x425000a,0x427000a,0x429000a,0x42b000a,0x42d000a,0x42f000a,0x431000a,0x3ac1000a,0x3ac3000a,
+0x3ac5000a,0x3ac7000a,0x3ac9000a,0x3acb000a,0x3acd000a,0x3acf000a,0x3ad1000a,0x3ad3000a,0x3ad5000a,0x3ad7000a,0x3ad9000a,0x3adb000a,0x3add000a,0x3adf000a,0x3ae1000a,0x3ae3000a,
+0x3ae5000a,0x3ae7000a,0x3ae9000a,0x3aeb000a,0x3aed000a,0x3aef000a,0x3af1000a,0x3af3000a,0x433000a,0x435000a,0x437000a,0x439000a,0x43b000a,0x43d000a,0x43f000a,0x441000a,
+0x443000a,0x445000a,0x447000a,0x449000a,0x44b000a,0x44d000a,0x44f000a,0x451000a,0x453000a,0x455000a,0x457000a,0x459000a,0x45b000a,0x45d000a,0x45f000a,0x461000a,
+0x463000a,0x465000a,0x3af5000a,0x3af7000a,0x3af9000a,0x3afb000a,0x3afd000a,0x3aff000a,0x3b01000a,0x3b03000a,0x3b05000a,0x3b07000a,0x3b09000a,0x3b0b000a,0x3b0d000a,0x3b0f000a,
+0x3b11000a,0x3b13000a,0x3b15000a,0x3b17000a,0x3b19000a,0x3b1b000a,0x3b1d000a,0x3b1f000a,0x3b21000a,0x3b23000a,0x3b25000a,0x3b27000a,0x467000a,0x469000a,0x46b000a,0x46d000a,
+0x46f000a,0x471000a,0x473000a,0x475000a,0x477000a,0x479000a,0x47b000a,0x47d000a,0x47f000a,0x481000a,0x483000a,0x485000a,0x487000a,0x489000a,0x48b000a,0x48d000a,
+0x48f000a,0x491000a,0x493000a,0x495000a,0x497000a,0x499000a,0x3b29000a,0x3b2b000a,0x3b2d000a,0x3b2f000a,0x3b31000a,0x3b33000a,0x3b35000a,0x3b37000a,0x3b39000a,0x3b3b000a,
+0x3b3d000a,0x3b3f000a,0x3b41000a,0x3b43000a,0x3b45000a,0x3b47000a,0x3b49000a,0x3b4b000a,0x3b4d000a,0x3b4f000a,0x3b51000a,0x3b53000a,0x3b55000a,0x3b57000a,0x3b59000a,0x3b5b000a,
+0x49b000a,0x49d000a,0x49f000a,0x4a1000a,0x4a3000a,0x4a5000a,0x4a7000a,0x4a9000a,0x4ab000a,0x4ad000a,0x4af000a,0x4b1000a,0x4b3000a,0x4b5000a,0x4b7000a,0x4b9000a,
+0x4bb000a,0x4bd000a,0x4bf000a,0x4c1000a,0x4c3000a,0x4c5000a,0x4c7000a,0x4c9000a,0x4cb000a,0x4cd000a,0x3b5d000a,0x3b5f000a,0x3b61000a,0x3b63000a,0x3b65000a,0x3b67000a,
+0x3b69000a,0x3b6b000a,0x3b6d000a,0x3b6f000a,0x3b71000a,0x3b73000a,0x3b75000a,0x3b77000a,0x3b79000a,0x3b7b000a,0x3b7d000a,0x3b7f000a,0x3b81000a,0x3b83000a,0x3b85000a,0x3b87000a,
+0x3b89000a,0x3b8b000a,0x3b8d000a,0x3b8f000a,0x4cf000a,0x4d1000a,0x4d3000a,0x4d5000a,0x4d7000a,0x4d9000a,0x4db000a,0x4dd000a,0x4df000a,0x4e1000a,0x4e3000a,0x4e5000a,
+0x4e7000a,0x4e9000a,0x4eb000a,0x4ed000a,0x4ef000a,0x4f1000a,0x4f3000a,0x4f5000a,0x4f7000a,0x4f9000a,0x4fb000a,0x4fd000a,0x4ff000a,0x501000a,0x3b91000a,0x3b93000a,
+0x3b95000a,0x3b97000a,0x3b99000a,0x3b9b000a,0x3b9d000a,0x3b9f000a,0x3ba1000a,0x3ba3000a,0x3ba5000a,0x3ba7000a,0x3ba9000a,0x3bab000a,0x3bad000a,0x3baf000a,0x3bb1000a,0x3bb3000a,
+0x3bb5000a,0x3bb7000a,0x3bb9000a,0x3bbb000a,0x3bbd000a,0x3bbf000a,0x3bc1000a,0x3bc3000a,0x3bc5000a,0x3bc7000a,0,0,0x503000a,0x505000a,0x507000a,0x509000a,
+0x50b000a,0x50d000a,0x50f000a,0x511000a,0x513000a,0x515000a,0x517000a,0x519000a,0x51b000a,0x51d000a,0x51f000a,0x521000a,0x523000a,0x525000a,0x527000a,0x529000a,
+0x52b000a,0x52d000a,0x52f000a,0x531000a,0x533000a,0x3bc9000a,0x3bcb000a,0x3bcd000a,0x3bcf000a,0x3bd1000a,0x3bd3000a,0x3bd5000a,0x3bd7000a,0x3bd9000a,0x3bdb000a,0x3bdd000a,
+0x3bdf000a,0x3be1000a,0x3be3000a,0x3be5000a,0x3be7000a,0x3be9000a,0x3beb000a,0x535000a,0x3bed000a,0x3bef000a,0x3bf1000a,0x3bf3000a,0x3bf5000a,0x3bf7000a,0x3bf9000a,0x3bfb000a,
+0x3bfd000a,0x3bff000a,0x3c01000a,0x3c03000a,0x3c05000a,0x3c07000a,0x537000a,0x539000a,0x53b000a,0x53d000a,0x53f000a,0x541000a,0x543000a,0x545000a,0x547000a,0x549000a,
+0x54b000a,0x54d000a,0x54f000a,0x551000a,0x553000a,0x555000a,0x557000a,0x559000a,0x55b000a,0x55d000a,0x55f000a,0x561000a,0x563000a,0x565000a,0x567000a,0x3c09000a,
+0x3c0b000a,0x3c0d000a,0x3c0f000a,0x3c11000a,0x3c13000a,0x3c15000a,0x3c17000a,0x3c19000a,0x3c1b000a,0x3c1d000a,0x3c1f000a,0x3c21000a,0x3c23000a,0x3c25000a,0x3c27000a,0x3c29000a,
+0x3c2b000a,0x569000a,0x3c2d000a,0x3c2f000a,0x3c31000a,0x3c33000a,0x3c35000a,0x3c37000a,0x3c39000a,0x3c3b000a,0x3c3d000a,0x3c3f000a,0x3c41000a,0x3c43000a,0x3c45000a,0x3c47000a,
+0x56b000a,0x56d000a,0x56f000a,0x571000a,0x573000a,0x575000a,0x577000a,0x579000a,0x57b000a,0x57d000a,0x57f000a,0x581000a,0x583000a,0x585000a,0x587000a,0x589000a,
+0x58b000a,0x58d000a,0x58f000a,0x591000a,0x593000a,0x595000a,0x597000a,0x599000a,0x59b000a,0x3c49000a,0x3c4b000a,0x3c4d000a,0x3c4f000a,0x3c51000a,0x3c53000a,0x3c55000a,
+0x3c57000a,0x3c59000a,0x3c5b000a,0x3c5d000a,0x3c5f000a,0x3c61000a,0x3c63000a,0x3c65000a,0x3c67000a,0x3c69000a,0x3c6b000a,0x59d000a,0x3c6d000a,0x3c6f000a,0x3c71000a,0x3c73000a,
+0x3c75000a,0x3c77000a,0x3c79000a,0x3c7b000a,0x3c7d000a,0x3c7f000a,0x3c81000a,0x3c83000a,0x3c85000a,0x3c87000a,0x59f000a,0x5a1000a,0x5a3000a,0x5a5000a,0x5a7000a,0x5a9000a,
+0x5ab000a,0x5ad000a,0x5af000a,0x5b1000a,0x5b3000a,0x5b5000a,0x5b7000a,0x5b9000a,0x5bb000a,0x5bd000a,0x5bf000a,0x5c1000a,0x5c3000a,0x5c5000a,0x5c7000a,0x5c9000a,
+0x5cb000a,0x5cd000a,0x5cf000a,0x3c89000a,0x3c8b000a,0x3c8d000a,0x3c8f000a,0x3c91000a,0x3c93000a,0x3c95000a,0x3c97000a,0x3c99000a,0x3c9b000a,0x3c9d000a,0x3c9f000a,0x3ca1000a,
+0x3ca3000a,0x3ca5000a,0x3ca7000a,0x3ca9000a,0x3cab000a,0x5d1000a,0x3cad000a,0x3caf000a,0x3cb1000a,0x3cb3000a,0x3cb5000a,0x3cb7000a,0x3cb9000a,0x3cbb000a,0x3cbd000a,0x3cbf000a,
+0x3cc1000a,0x3cc3000a,0x3cc5000a,0x3cc7000a,0x5d3000a,0x5d5000a,0x5d7000a,0x5d9000a,0x5db000a,0x5dd000a,0x5df000a,0x5e1000a,0x5e3000a,0x5e5000a,0x5e7000a,0x5e9000a,
+0x5eb000a,0x5ed000a,0x5ef000a,0x5f1000a,0x5f3000a,0x5f5000a,0x5f7000a,0x5f9000a,0x5fb000a,0x5fd000a,0x5ff000a,0x601000a,0x603000a,0x3cc9000a,0x3ccb000a,0x3ccd000a,
+0x3ccf000a,0x3cd1000a,0x3cd3000a,0x3cd5000a,0x3cd7000a,0x3cd9000a,0x3cdb000a,0x3cdd000a,0x3cdf000a,0x3ce1000a,0x3ce3000a,0x3ce5000a,0x3ce7000a,0x3ce9000a,0x3ceb000a,0x605000a,
+0x3ced000a,0x3cef000a,0x3cf1000a,0x3cf3000a,0x3cf5000a,0x3cf7000a,0x3cf9000a,0x3cfb000a,0x3cfd000a,0x3cff000a,0x3d01000a,0x3d03000a,0x3d05000a,0x3d07000a,0x607000a,0x3d09000a,
+0,0,0x3d0b000a,0x3d0d000a,0x3d0f000a,0x3d11000a,0x3d13000a,0x3d15000a,0x3d17000a,0x3d19000a,0x3d1b000a,0x3d1d000a,0x3d1f000a,0x3d21000a,0x3d23000a,0x3d25000a,
+0x3d27000a,0x3d29000a,0x3d2b000a,0x3d2d000a,0x609e60f,0x60ce60f,0x206fe6b0,0x60fe60f,0x612e60f,0x2070f0b0,0xe600,0xdc00,0xdc00,0xdc00,0xe600,0xe600,
0xe600,0xdc00,0xdc00,0,0xe600,0xe600,0xe600,0xdc00,0xdc00,0xdc00,0xdc00,0xe600,0xe800,0xdc00,0xdc00,0xe600,
-0xe900,0xea00,0xea00,0xe900,0,0,0,0,0x211f000a,0x145c000e,0x1464000c,0x616000f,0x1468000c,0x146c000c,0x1470000c,0,
-0x1474000c,0,0x1478000c,0x147c000c,0x1480000c,0x3d940040,0,0,0,0x3d950040,0,0x3d960040,0,0x3d970040,0,0,
-0,0,0,0x3d980040,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0x900,0,0,0,0xe600,0xdc00,0xe600,0xe600,0,0,0,0x618000f,0x61c000f,0x620000f,0x624000f,
-0x628000f,0x62c000f,0x630000f,0x634000f,0,0,0,0,0,0,0,0x3dcb0040,0,0,0,0x15b7000c,
-0x15ba000c,0x900,0,0,0,0,0,0,0,0,0,0x207200b0,0,0,0,0,
-0x638000f,0x63c000f,0,0x640000f,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0x644000f,0,0,0x648000f,0,0,0,0,0,
+0xe900,0xea00,0xea00,0xe900,0,0,0,0,0x2123000a,0x1460000e,0x1468000c,0x61a000f,0x146c000c,0x1470000c,0x1474000c,0,
+0x1478000c,0,0x147c000c,0x1480000c,0x1484000c,0x3d9c0040,0,0,0,0x3d9d0040,0,0x3d9e0040,0,0x3d9f0040,0,0,
+0,0,0,0x3da00040,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0x900,0,0,0,0xe600,0xdc00,0xe600,0xe600,0,0,0,0x61c000f,0x620000f,0x624000f,0x628000f,
+0x62c000f,0x630000f,0x634000f,0x638000f,0,0,0,0,0,0,0,0x3dd30040,0,0,0,0x15bb000c,
+0x15be000c,0x900,0,0,0,0,0,0,0,0,0,0x207600b0,0,0,0,0,
+0x63c000f,0x640000f,0,0x644000f,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0x648000f,0,0,0x64c000f,0,0,0,0,0,
0x700,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0x900,0,0,0,0,0,0,0,0,0,0,0,0x64c000f,0x650000f,0x654000f,
-0,0,0x658000f,0,0,0,0,0,0,0,0,0x3dcc0040,0x15bd000c,0,0,0x15c0000c,
-0x15c3000c,0x900,0,0,0,0,0,0,0,0,0x207400b0,0x207500b0,0,0,0,0,
-0x65c000f,0x660000f,0,0,0,0,0,0x664000f,0,0,0,0,0,0,0,0,
-0,0x667000f,0,0,0,0,0x66a000f,0,0,0,0,0x66d000f,0,0,0,0,
-0x670000f,0,0,0,0,0,0,0,0,0,0,0,0,0x673000f,0,0,
-0,0,0,0,0,0x8100,0x8200,0x676000f,0x8400,0x67a000f,0x67e000f,0x2150000a,0x682000f,0x2155000a,0x8200,0x8200,
-0x8200,0x8200,0,0,0x8200,0x686000f,0xe600,0xe600,0x900,0,0xe600,0xe600,0,0,0,0,
-0,0,0,0,0,0,0,0x68a000f,0,0,0,0,0,0,0,0,
-0,0x68d000f,0,0,0,0,0x690000f,0,0,0,0,0x693000f,0,0,0,0,
-0x696000f,0,0,0,0,0,0,0,0,0,0,0,0,0x699000f,0,0,
-0,0,0,0,0x1c20004c,0x1c25004c,0x1c2a004c,0x1c30004c,0x1c36004c,0x1c3c004c,0x1c42004c,0x1c48004c,0x1c4e004c,0x1c53004c,0x1c58004c,0x1c5e004c,
-0x1c64004c,0x1c6a004c,0x1c70004c,0x1c76004c,0x1c7c004c,0x69c000f,0x1c80000c,0x6a0000f,0x1c85004c,0x6a4000f,0x1c89000c,0x6a8000f,0x1c8d000c,0x6ac000f,0x1c91000c,0x6b0000f,
-0x1c96004c,0x6b4000f,0,0,0x1d52000c,0x1d57000c,0x1d5c000c,0x1d62000c,0x1d68000c,0x1d6e000c,0x1d74000c,0x1d7a000c,0x1d80000c,0x1d85000c,0x1d8a000c,0x1d90000c,
-0x1d96000c,0x1d9c000c,0x1da2000c,0x1da8000c,0x1dae000c,0x1db2000c,0x1db6000c,0x1dbb000c,0x1dbf000c,0,0x1dc5004c,0x1dc9000c,0x1dce000c,0x1dd2000c,0x1dd6000c,0x6b8000f,
-0x1dda000c,0x21f9000a,0x6bc000f,0x21fe004a,0x2202000a,0x1dde000e,0x1de6000c,0x1deb000c,0x1def000c,0,0x1df5004c,0x1df9000c,0x1dfe000c,0x6be000f,0x1e02000c,0x6c2000f,
-0x1e06000c,0x1e0a000e,0x1e12000e,0x1e1a000e,0x1e22000c,0x1e26000c,0x1e2a000c,0x6c6000f,0,0,0x1e2f000c,0x1e33000c,0x1e38000c,0x1e3c000c,0x1e40000c,0x6cb000f,
-0,0x1e44000e,0x1e4c000e,0x1e54000e,0x1e5c000c,0x1e60000c,0x1e64000c,0x6cf000f,0x1e69000c,0x1e6d000c,0x1e71000c,0x1e75000c,0x1e7a000c,0x1e7e000c,0x1e82000c,0x6d4000f,
-0x1e86000c,0x1e8a000e,0x6d8000f,0x6e0000f,0,0,0x1e92000c,0x1e97000c,0x1e9b000c,0,0x1ea1004c,0x1ea5000c,0x1eaa000c,0x6e2000f,0x1eae000c,0x6e6000f,
-0x1eb2000c,0x6ea000f,0x2207004a,0,0x6ef000f,0x6f2000f,0x220b000a,0x220d000a,0x220f000a,0x2211000a,0x2213000a,0x2215000a,0x2217000a,0x2219000a,0x221b000a,0,
-0,0,0,0,0,0x221d000a,0,0,0,0,0,0x221f000a,0,0,0,0,
-0,0,0,0,0,0x6fd000f,0x6ff000f,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x701000f,0,0,0,0x705000f,0x707000f,0x709000f,0x70b000f,0x70d000f,0x70f000f,0x711000f,0x713000f,
-0x715000f,0x717000f,0x719000f,0x71b000f,0x71d000f,0x71f000f,0x721000f,0x723000f,0x725000f,0x727000f,0x729000f,0x72b000f,0x72d000f,0x72f000f,0x731000f,0x733000f,
-0x735000f,0x737000f,0x739000f,0x73b000f,0x73d000f,0x73f000f,0x741000f,0x743000f,0x745000f,0x747000f,0x749000f,0x74b000f,0x74d000f,0x74f000f,0x751000f,0x753000f,
-0x755000f,0x757000f,0x759000f,0x75b000f,0x75d000f,0x75f000f,0x761000f,0x763000f,0x765000f,0x767000f,0x769000f,0x76b000f,0x76d000f,0x76f000f,0x771000f,0x773000f,
-0x775000f,0x777000f,0x779000f,0x77b000f,0x77d000f,0x77f000f,0x781000f,0x783000f,0x785000f,0x787000f,0x789000f,0x78b000f,0x78d000f,0x78f000f,0x791000f,0x793000f,
-0x795000f,0x797000f,0x799000f,0x79b000f,0x79d000f,0x79f000f,0x7a1000f,0x7a3000f,0x7a5000f,0x7a7000f,0x7a9000f,0x7ab000f,0x7ad000f,0x7af000f,0x7b1000f,0x7b3000f,
-0x7b5000f,0x7b7000f,0x7b9000f,0x7bb000f,0x7bd000f,0x7bf000f,0x7c1000f,0x7c3000f,0x7c5000f,0x7c7000f,0x7c9000f,0x7cb000f,0x7cd000f,0x7cf000f,0x7d1000f,0x7d3000f,
-0x7d5000f,0x7d7000f,0x7d9000f,0x7db000f,0x7dd000f,0x7df000f,0x7e1000f,0x7e3000f,0x7e5000f,0x7e7000f,0x7e9000f,0x7eb000f,0x7ed000f,0x7ef000f,0x7f1000f,0x7f3000f,
-0x7f5000f,0x7f7000f,0x7f9000f,0x7fb000f,0x7fd000f,0x7ff000f,0x801000f,0x803000f,0x805000f,0x807000f,0x809000f,0x80b000f,0x80d000f,0x80f000f,0x811000f,0x813000f,
-0x815000f,0x817000f,0x819000f,0x81b000f,0x81d000f,0x81f000f,0x821000f,0x823000f,0x825000f,0x827000f,0x829000f,0x82b000f,0x82d000f,0x82f000f,0x831000f,0x833000f,
-0x835000f,0x837000f,0x839000f,0x83b000f,0x83d000f,0x83f000f,0x841000f,0x843000f,0x845000f,0x847000f,0x849000f,0x84b000f,0x84d000f,0x84f000f,0x851000f,0x853000f,
-0x855000f,0x857000f,0x859000f,0x85b000f,0x85d000f,0x85f000f,0x861000f,0x863000f,0x865000f,0x867000f,0x869000f,0x86b000f,0x86d000f,0x86f000f,0x871000f,0x873000f,
-0x875000f,0x877000f,0x879000f,0x87b000f,0x87d000f,0x87f000f,0x881000f,0x883000f,0x885000f,0x887000f,0x889000f,0x88b000f,0x88d000f,0x88f000f,0x891000f,0x893000f,
-0x895000f,0x897000f,0x899000f,0x89b000f,0x89d000f,0x89f000f,0x8a1000f,0x8a3000f,0x8a5000f,0x8a7000f,0x8a9000f,0x8ab000f,0x8ad000f,0x8af000f,0x8b1000f,0x8b3000f,
-0x8b5000f,0x8b7000f,0x8b9000f,0x8bb000f,0x8bd000f,0x8bf000f,0x8c1000f,0x8c3000f,0x8c5000f,0x8c7000f,0x8c9000f,0x8cb000f,0x8cd000f,0x8cf000f,0x8d1000f,0x8d3000f,
-0x8d5000f,0x8d7000f,0x8d9000f,0x8db000f,0x8dd000f,0x8df000f,0x8e1000f,0x8e3000f,0x8e5000f,0x8e7000f,0x8e9000f,0x8eb000f,0x8ed000f,0x8ef000f,0x8f1000f,0x8f3000f,
-0x8f5000f,0x8f7000f,0x8f9000f,0x8fb000f,0x8fd000f,0x8ff000f,0x901000f,0x903000f,0x905000f,0x907000f,0x909000f,0x90b000f,0x90d000f,0x90f000f,0x911000f,0x913000f,
-0x915000f,0x917000f,0x919000f,0x91b000f,0x91d000f,0x91f000f,0,0,0x921000f,0,0x923000f,0,0,0x925000f,0x927000f,0x929000f,
-0x92b000f,0x92d000f,0x92f000f,0x931000f,0x933000f,0x935000f,0x937000f,0,0x939000f,0,0x93b000f,0,0,0x93d000f,0x93f000f,0,
-0,0,0x941000f,0x943000f,0x945000f,0x947000f,0,0,0x949000f,0x94b000f,0x94d000f,0x94f000f,0x951000f,0x953000f,0x955000f,0x957000f,
-0x959000f,0x95b000f,0x95d000f,0x95f000f,0x961000f,0x963000f,0x965000f,0x967000f,0x969000f,0x96b000f,0x96d000f,0x96f000f,0x971000f,0x973000f,0x975000f,0x977000f,
-0x979000f,0x97b000f,0x97d000f,0x97f000f,0x981000f,0x983000f,0x985000f,0x987000f,0x989000f,0x98b000f,0x98d000f,0x98f000f,0x991000f,0x993000f,0x995000f,0x997000f,
-0x999000f,0x99b000f,0x99d000f,0x99f000f,0x9a1000f,0x9a3000f,0x9a5000f,0x9a7000f,0x9a9000f,0x9ab000f,0x9ad000f,0x9af000f,0x9b1000f,0x9b3000f,0x9b5000f,0x9b7000f,
-0x9b9000f,0x9bb000f,0x9bd000f,0,0,0,0,0,0x9bf000f,0x9c1000f,0x9c3000f,0x9c5000f,0x9c7000f,0x9c9000f,0x9cb000f,0x9cd000f,
-0x9cf000f,0x9d1000f,0x9d3000f,0x9d5000f,0x9d7000f,0x9d9000f,0x9db000f,0x9dd000f,0x9df000f,0x9e1000f,0x9e3000f,0x9e5000f,0x9e7000f,0x9e9000f,0x9eb000f,0x9ed000f,
-0x9ef000f,0x9f1000f,0x9f3000f,0x9f5000f,0x9f7000f,0x9f9000f,0x9fb000f,0x9fd000f,0x9ff000f,0xa01000f,0xa03000f,0xa05000f,0xa07000f,0xa09000f,0xa0b000f,0xa0d000f,
-0xa0f000f,0xa11000f,0xa13000f,0xa15000f,0xa17000f,0xa19000f,0xa1b000f,0xa1d000f,0xa1f000f,0xa21000f,0xa23000f,0xa25000f,0xa27000f,0xa29000f,0xa2b000f,0xa2d000f,
-0xa2f000f,0xa31000f,0xa33000f,0xa35000f,0xa37000f,0xa39000f,0xa3b000f,0xa3d000f,0xa3f000f,0xa41000f,0xa43000f,0xa45000f,0xa47000f,0xa49000f,0xa4b000f,0xa4d000f,
-0xa4f000f,0xa51000f,0xa53000f,0xa55000f,0xa57000f,0xa59000f,0xa5b000f,0xa5d000f,0xa5f000f,0xa61000f,0xa63000f,0xa65000f,0xa67000f,0xa69000f,0xa6b000f,0xa6d000f,
-0xa6f000f,0xa71000f,0xa73000f,0xa75000f,0xa77000f,0xa79000f,0xa7b000f,0xa7d000f,0xa80000f,0xa83000f,0xa86000f,0xa88000f,0xa8a000f,0xa8c000f,0xa8f000f,0xa92000f,
-0xa95000f,0xa97000f,0,0,0,0,0,0,0x2dd9000a,0x2ddc000a,0x2ddf000a,0x2de2000a,0x2de6000a,0x2dea000a,0x2ded000a,0,
-0,0,0,0,0,0,0,0,0,0,0,0x2df0000a,0x2df3000a,0x2df6000a,0x2df9000a,0x2dfc000a,
-0,0,0,0,0,0xa99000f,0x1a00,0xa9d000f,0x2dff000a,0x2e01000a,0x2e03000a,0x2e05000a,0x2e07000a,0x2e09000a,0x2e0b000a,0x2e0d000a,
-0x2e0f000a,0x2e11000a,0xaa1000f,0xaa5000f,0xaa9000f,0xaae000f,0xab3000f,0xab7000f,0xabb000f,0xabf000f,0xac3000f,0xac7000f,0xacb000f,0xacf000f,0xad3000f,0,
-0xad7000f,0xadb000f,0xadf000f,0xae3000f,0xae7000f,0,0xaeb000f,0,0xaef000f,0xaf3000f,0,0xaf7000f,0xafb000f,0,0xaff000f,0xb03000f,
-0xb07000f,0xb0b000f,0xb0f000f,0xb13000f,0xb17000f,0xb1b000f,0xb1f000f,0x2e13000a,0x2e16000a,0x2e18000a,0x2e1a000a,0x2e1c000a,0x2e1e000a,0x2e20000a,0x2e22000a,0x2e24000a,
-0x2e26000a,0x2e28000a,0x2e2a000a,0x2e2c000a,0x2e2e000a,0x2e30000a,0x2e32000a,0x2e34000a,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0xb23000f,0xb29000f,0xb2f000f,0xb37000f,0xb3f000f,0xb47000f,0xb4f000f,0xd800,0xd800,0x100,
+0,0x900,0,0,0,0,0,0,0,0,0,0,0,0x650000f,0x654000f,0x658000f,
+0,0,0x65c000f,0,0,0,0,0,0,0,0,0x3dd40040,0x15c1000c,0,0,0x15c4000c,
+0x15c7000c,0x900,0,0,0,0,0,0,0,0,0x207800b0,0x207900b0,0,0,0,0,
+0x660000f,0x664000f,0,0,0,0,0,0x668000f,0,0,0,0,0,0,0,0,
+0,0x66b000f,0,0,0,0,0x66e000f,0,0,0,0,0x671000f,0,0,0,0,
+0x674000f,0,0,0,0,0,0,0,0,0,0,0,0,0x677000f,0,0,
+0,0,0,0,0,0x8100,0x8200,0x67a000f,0x8400,0x67e000f,0x682000f,0x2154000a,0x686000f,0x2159000a,0x8200,0x8200,
+0x8200,0x8200,0,0,0x8200,0x68a000f,0xe600,0xe600,0x900,0,0xe600,0xe600,0,0,0,0,
+0,0,0,0,0,0,0,0x68e000f,0,0,0,0,0,0,0,0,
+0,0x691000f,0,0,0,0,0x694000f,0,0,0,0,0x697000f,0,0,0,0,
+0x69a000f,0,0,0,0,0,0,0,0,0,0,0,0,0x69d000f,0,0,
+0,0,0,0,0x1c24004c,0x1c29004c,0x1c2e004c,0x1c34004c,0x1c3a004c,0x1c40004c,0x1c46004c,0x1c4c004c,0x1c52004c,0x1c57004c,0x1c5c004c,0x1c62004c,
+0x1c68004c,0x1c6e004c,0x1c74004c,0x1c7a004c,0x1c80004c,0x6a0000f,0x1c84000c,0x6a4000f,0x1c89004c,0x6a8000f,0x1c8d000c,0x6ac000f,0x1c91000c,0x6b0000f,0x1c95000c,0x6b4000f,
+0x1c9a004c,0x6b8000f,0,0,0x1d56000c,0x1d5b000c,0x1d60000c,0x1d66000c,0x1d6c000c,0x1d72000c,0x1d78000c,0x1d7e000c,0x1d84000c,0x1d89000c,0x1d8e000c,0x1d94000c,
+0x1d9a000c,0x1da0000c,0x1da6000c,0x1dac000c,0x1db2000c,0x1db6000c,0x1dba000c,0x1dbf000c,0x1dc3000c,0,0x1dc9004c,0x1dcd000c,0x1dd2000c,0x1dd6000c,0x1dda000c,0x6bc000f,
+0x1dde000c,0x21fd000a,0x6c0000f,0x2202004a,0x2206000a,0x1de2000e,0x1dea000c,0x1def000c,0x1df3000c,0,0x1df9004c,0x1dfd000c,0x1e02000c,0x6c2000f,0x1e06000c,0x6c6000f,
+0x1e0a000c,0x1e0e000e,0x1e16000e,0x1e1e000e,0x1e26000c,0x1e2a000c,0x1e2e000c,0x6ca000f,0,0,0x1e33000c,0x1e37000c,0x1e3c000c,0x1e40000c,0x1e44000c,0x6cf000f,
+0,0x1e48000e,0x1e50000e,0x1e58000e,0x1e60000c,0x1e64000c,0x1e68000c,0x6d3000f,0x1e6d000c,0x1e71000c,0x1e75000c,0x1e79000c,0x1e7e000c,0x1e82000c,0x1e86000c,0x6d8000f,
+0x1e8a000c,0x1e8e000e,0x6dc000f,0x6e4000f,0,0,0x1e96000c,0x1e9b000c,0x1e9f000c,0,0x1ea5004c,0x1ea9000c,0x1eae000c,0x6e6000f,0x1eb2000c,0x6ea000f,
+0x1eb6000c,0x6ee000f,0x220b004a,0,0x6f3000f,0x6f6000f,0x220f000a,0x2211000a,0x2213000a,0x2215000a,0x2217000a,0x2219000a,0x221b000a,0x221d000a,0x221f000a,0,
+0,0,0,0,0,0x2221000a,0,0,0,0,0,0x2223000a,0,0,0,0,
+0,0,0,0,0,0x701000f,0x703000f,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x705000f,0,0,0,0x709000f,0x70b000f,0x70d000f,0x70f000f,0x711000f,0x713000f,0x715000f,0x717000f,
+0x719000f,0x71b000f,0x71d000f,0x71f000f,0x721000f,0x723000f,0x725000f,0x727000f,0x729000f,0x72b000f,0x72d000f,0x72f000f,0x731000f,0x733000f,0x735000f,0x737000f,
+0x739000f,0x73b000f,0x73d000f,0x73f000f,0x741000f,0x743000f,0x745000f,0x747000f,0x749000f,0x74b000f,0x74d000f,0x74f000f,0x751000f,0x753000f,0x755000f,0x757000f,
+0x759000f,0x75b000f,0x75d000f,0x75f000f,0x761000f,0x763000f,0x765000f,0x767000f,0x769000f,0x76b000f,0x76d000f,0x76f000f,0x771000f,0x773000f,0x775000f,0x777000f,
+0x779000f,0x77b000f,0x77d000f,0x77f000f,0x781000f,0x783000f,0x785000f,0x787000f,0x789000f,0x78b000f,0x78d000f,0x78f000f,0x791000f,0x793000f,0x795000f,0x797000f,
+0x799000f,0x79b000f,0x79d000f,0x79f000f,0x7a1000f,0x7a3000f,0x7a5000f,0x7a7000f,0x7a9000f,0x7ab000f,0x7ad000f,0x7af000f,0x7b1000f,0x7b3000f,0x7b5000f,0x7b7000f,
+0x7b9000f,0x7bb000f,0x7bd000f,0x7bf000f,0x7c1000f,0x7c3000f,0x7c5000f,0x7c7000f,0x7c9000f,0x7cb000f,0x7cd000f,0x7cf000f,0x7d1000f,0x7d3000f,0x7d5000f,0x7d7000f,
+0x7d9000f,0x7db000f,0x7dd000f,0x7df000f,0x7e1000f,0x7e3000f,0x7e5000f,0x7e7000f,0x7e9000f,0x7eb000f,0x7ed000f,0x7ef000f,0x7f1000f,0x7f3000f,0x7f5000f,0x7f7000f,
+0x7f9000f,0x7fb000f,0x7fd000f,0x7ff000f,0x801000f,0x803000f,0x805000f,0x807000f,0x809000f,0x80b000f,0x80d000f,0x80f000f,0x811000f,0x813000f,0x815000f,0x817000f,
+0x819000f,0x81b000f,0x81d000f,0x81f000f,0x821000f,0x823000f,0x825000f,0x827000f,0x829000f,0x82b000f,0x82d000f,0x82f000f,0x831000f,0x833000f,0x835000f,0x837000f,
+0x839000f,0x83b000f,0x83d000f,0x83f000f,0x841000f,0x843000f,0x845000f,0x847000f,0x849000f,0x84b000f,0x84d000f,0x84f000f,0x851000f,0x853000f,0x855000f,0x857000f,
+0x859000f,0x85b000f,0x85d000f,0x85f000f,0x861000f,0x863000f,0x865000f,0x867000f,0x869000f,0x86b000f,0x86d000f,0x86f000f,0x871000f,0x873000f,0x875000f,0x877000f,
+0x879000f,0x87b000f,0x87d000f,0x87f000f,0x881000f,0x883000f,0x885000f,0x887000f,0x889000f,0x88b000f,0x88d000f,0x88f000f,0x891000f,0x893000f,0x895000f,0x897000f,
+0x899000f,0x89b000f,0x89d000f,0x89f000f,0x8a1000f,0x8a3000f,0x8a5000f,0x8a7000f,0x8a9000f,0x8ab000f,0x8ad000f,0x8af000f,0x8b1000f,0x8b3000f,0x8b5000f,0x8b7000f,
+0x8b9000f,0x8bb000f,0x8bd000f,0x8bf000f,0x8c1000f,0x8c3000f,0x8c5000f,0x8c7000f,0x8c9000f,0x8cb000f,0x8cd000f,0x8cf000f,0x8d1000f,0x8d3000f,0x8d5000f,0x8d7000f,
+0x8d9000f,0x8db000f,0x8dd000f,0x8df000f,0x8e1000f,0x8e3000f,0x8e5000f,0x8e7000f,0x8e9000f,0x8eb000f,0x8ed000f,0x8ef000f,0x8f1000f,0x8f3000f,0x8f5000f,0x8f7000f,
+0x8f9000f,0x8fb000f,0x8fd000f,0x8ff000f,0x901000f,0x903000f,0x905000f,0x907000f,0x909000f,0x90b000f,0x90d000f,0x90f000f,0x911000f,0x913000f,0x915000f,0x917000f,
+0x919000f,0x91b000f,0x91d000f,0x91f000f,0x921000f,0x923000f,0,0,0x925000f,0,0x927000f,0,0,0x929000f,0x92b000f,0x92d000f,
+0x92f000f,0x931000f,0x933000f,0x935000f,0x937000f,0x939000f,0x93b000f,0,0x93d000f,0,0x93f000f,0,0,0x941000f,0x943000f,0,
+0,0,0x945000f,0x947000f,0x949000f,0x94b000f,0,0,0x94d000f,0x94f000f,0x951000f,0x953000f,0x955000f,0x957000f,0x959000f,0x95b000f,
+0x95d000f,0x95f000f,0x961000f,0x963000f,0x965000f,0x967000f,0x969000f,0x96b000f,0x96d000f,0x96f000f,0x971000f,0x973000f,0x975000f,0x977000f,0x979000f,0x97b000f,
+0x97d000f,0x97f000f,0x981000f,0x983000f,0x985000f,0x987000f,0x989000f,0x98b000f,0x98d000f,0x98f000f,0x991000f,0x993000f,0x995000f,0x997000f,0x999000f,0x99b000f,
+0x99d000f,0x99f000f,0x9a1000f,0x9a3000f,0x9a5000f,0x9a7000f,0x9a9000f,0x9ab000f,0x9ad000f,0x9af000f,0x9b1000f,0x9b3000f,0x9b5000f,0x9b7000f,0x9b9000f,0x9bb000f,
+0x9bd000f,0x9bf000f,0x9c1000f,0,0,0,0,0,0x9c3000f,0x9c5000f,0x9c7000f,0x9c9000f,0x9cb000f,0x9cd000f,0x9cf000f,0x9d1000f,
+0x9d3000f,0x9d5000f,0x9d7000f,0x9d9000f,0x9db000f,0x9dd000f,0x9df000f,0x9e1000f,0x9e3000f,0x9e5000f,0x9e7000f,0x9e9000f,0x9eb000f,0x9ed000f,0x9ef000f,0x9f1000f,
+0x9f3000f,0x9f5000f,0x9f7000f,0x9f9000f,0x9fb000f,0x9fd000f,0x9ff000f,0xa01000f,0xa03000f,0xa05000f,0xa07000f,0xa09000f,0xa0b000f,0xa0d000f,0xa0f000f,0xa11000f,
+0xa13000f,0xa15000f,0xa17000f,0xa19000f,0xa1b000f,0xa1d000f,0xa1f000f,0xa21000f,0xa23000f,0xa25000f,0xa27000f,0xa29000f,0xa2b000f,0xa2d000f,0xa2f000f,0xa31000f,
+0xa33000f,0xa35000f,0xa37000f,0xa39000f,0xa3b000f,0xa3d000f,0xa3f000f,0xa41000f,0xa43000f,0xa45000f,0xa47000f,0xa49000f,0xa4b000f,0xa4d000f,0xa4f000f,0xa51000f,
+0xa53000f,0xa55000f,0xa57000f,0xa59000f,0xa5b000f,0xa5d000f,0xa5f000f,0xa61000f,0xa63000f,0xa65000f,0xa67000f,0xa69000f,0xa6b000f,0xa6d000f,0xa6f000f,0xa71000f,
+0xa73000f,0xa75000f,0xa77000f,0xa79000f,0xa7b000f,0xa7d000f,0xa7f000f,0xa81000f,0xa84000f,0xa87000f,0xa8a000f,0xa8c000f,0xa8e000f,0xa90000f,0xa93000f,0xa96000f,
+0xa99000f,0xa9b000f,0,0,0,0,0,0,0x2de1000a,0x2de4000a,0x2de7000a,0x2dea000a,0x2dee000a,0x2df2000a,0x2df5000a,0,
+0,0,0,0,0,0,0,0,0,0,0,0x2df8000a,0x2dfb000a,0x2dfe000a,0x2e01000a,0x2e04000a,
+0,0,0,0,0,0xa9d000f,0x1a00,0xaa1000f,0x2e07000a,0x2e09000a,0x2e0b000a,0x2e0d000a,0x2e0f000a,0x2e11000a,0x2e13000a,0x2e15000a,
+0x2e17000a,0x2e19000a,0xaa5000f,0xaa9000f,0xaad000f,0xab2000f,0xab7000f,0xabb000f,0xabf000f,0xac3000f,0xac7000f,0xacb000f,0xacf000f,0xad3000f,0xad7000f,0,
+0xadb000f,0xadf000f,0xae3000f,0xae7000f,0xaeb000f,0,0xaef000f,0,0xaf3000f,0xaf7000f,0,0xafb000f,0xaff000f,0,0xb03000f,0xb07000f,
+0xb0b000f,0xb0f000f,0xb13000f,0xb17000f,0xb1b000f,0xb1f000f,0xb23000f,0x2e1b000a,0x2e1e000a,0x2e20000a,0x2e22000a,0x2e24000a,0x2e26000a,0x2e28000a,0x2e2a000a,0x2e2c000a,
+0x2e2e000a,0x2e30000a,0x2e32000a,0x2e34000a,0x2e36000a,0x2e38000a,0x2e3a000a,0x2e3c000a,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0xb27000f,0xb2d000f,0xb33000f,0xb3b000f,0xb43000f,0xb4b000f,0xb53000f,0xd800,0xd800,0x100,
0x100,0x100,0,0,0,0xe200,0xd800,0xd800,0xd800,0xd800,0xd800,0,0,0,0,0,
0,0,0,0xdc00,0xdc00,0xdc00,0xdc00,0xdc00,0,0,0,0,0,0,0,0,
0,0,0xe600,0xe600,0xe600,0xe600,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0xb57000f,0xb5d000f,0xb63000f,0xb6b000f,0xb73000f,0xb7b000f,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xb83000f,0xb85000f,0xb87000f,0xb89000f,0xb8c000f,0xb8e000f,0xb90000f,0xb92000f,
-0xb94000f,0xb96000f,0xb98000f,0xb9a000f,0xb9c000f,0xb9e000f,0xba1000f,0xba3000f,0xba5000f,0xba7000f,0xba9000f,0xbac000f,0xbae000f,0xbb0000f,0xbb2000f,0xbb5000f,
-0xbb7000f,0xbb9000f,0xbbb000f,0xbbd000f,0xbbf000f,0xbc2000f,0xbc4000f,0xbc6000f,0xbc8000f,0xbca000f,0xbcc000f,0xbce000f,0xbd0000f,0xbd2000f,0xbd4000f,0xbd6000f,
-0xbd8000f,0xbda000f,0xbdc000f,0xbde000f,0xbe0000f,0xbe2000f,0xbe4000f,0xbe6000f,0xbe8000f,0xbea000f,0xbec000f,0xbee000f,0xbf0000f,0xbf3000f,0xbf5000f,0xbf7000f,
-0xbf9000f,0xbfc000f,0xbfe000f,0xc00000f,0xc02000f,0xc04000f,0xc06000f,0xc08000f,0xc0a000f,0xc0c000f,0xc0e000f,0xc10000f,0xc12000f,0xc14000f,0xc16000f,0xc18000f,
-0xc1a000f,0xc1c000f,0xc1e000f,0xc20000f,0xc22000f,0xc24000f,0xc26000f,0xc28000f,0xc2a000f,0xc2c000f,0xc2e000f,0xc30000f,0xc32000f,0xc34000f,0xc36000f,0xc38000f,
-0xc3a000f,0xc3c000f,0xc3f000f,0xc41000f,0xc43000f,0xc45000f,0xc47000f,0xc49000f,0xc4b000f,0xc4e000f,0xc51000f,0xc53000f,0xc55000f,0xc57000f,0xc59000f,0xc5b000f,
-0xc5d000f,0xc5f000f,0xc61000f,0xc63000f,0xc65000f,0xc68000f,0xc6a000f,0xc6c000f,0xc6e000f,0xc70000f,0xc73000f,0xc75000f,0xc77000f,0xc79000f,0xc7b000f,0xc7d000f,
-0xc7f000f,0xc81000f,0xc83000f,0xc85000f,0xc88000f,0xc8a000f,0xc8d000f,0xc8f000f,0xc91000f,0xc93000f,0xc95000f,0xc97000f,0xc99000f,0xc9b000f,0xc9d000f,0xc9f000f,
-0xca1000f,0xca3000f,0xca6000f,0xca8000f,0xcaa000f,0xcac000f,0xcae000f,0xcb0000f,0xcb3000f,0xcb5000f,0xcb8000f,0xcbb000f,0xcbd000f,0xcbf000f,0xcc1000f,0xcc3000f,
-0xcc6000f,0xcc9000f,0xccb000f,0xccd000f,0xccf000f,0xcd1000f,0xcd3000f,0xcd5000f,0xcd7000f,0xcd9000f,0xcdb000f,0xcdd000f,0xcdf000f,0xce2000f,0xce4000f,0xce6000f,
-0xce8000f,0xcea000f,0xcec000f,0xcee000f,0xcf0000f,0xcf2000f,0xcf4000f,0xcf6000f,0xcf8000f,0xcfa000f,0xcfc000f,0xcfe000f,0xd00000f,0xd02000f,0xd04000f,0xd06000f,
-0xd08000f,0xd0b000f,0xd0d000f,0xd0f000f,0xd11000f,0xd13000f,0xd15000f,0xd18000f,0xd1a000f,0xd1c000f,0xd1e000f,0xd20000f,0xd22000f,0xd24000f,0xd26000f,0xd28000f,
-0xd2a000f,0xd2c000f,0xd2e000f,0xd31000f,0xd33000f,0xd35000f,0xd37000f,0xd39000f,0xd3b000f,0xd3d000f,0xd3f000f,0xd41000f,0xd43000f,0xd45000f,0xd47000f,0xd49000f,
-0xd4b000f,0xd4d000f,0xd4f000f,0xd51000f,0xd53000f,0xd55000f,0xd58000f,0xd5a000f,0xd5c000f,0xd5e000f,0xd60000f,0xd62000f,0xd65000f,0xd67000f,0xd69000f,0xd6b000f,
-0xd6d000f,0xd6f000f,0xd71000f,0xd73000f,0xd75000f,0xd78000f,0xd7a000f,0xd7c000f,0xd7e000f,0xd81000f,0xd83000f,0xd85000f,0xd87000f,0xd89000f,0xd8b000f,0xd8d000f,
-0xd90000f,0xd93000f,0xd96000f,0xd98000f,0xd9b000f,0xd9d000f,0xd9f000f,0xda1000f,0xda3000f,0xda5000f,0xda7000f,0xda9000f,0xdab000f,0xdad000f,0xdaf000f,0xdb2000f,
-0xdb4000f,0xdb6000f,0xdb8000f,0xdba000f,0xdbc000f,0xdbe000f,0xdc1000f,0xdc3000f,0xdc5000f,0xdc8000f,0xdcb000f,0xdcd000f,0xdcf000f,0xdd1000f,0xdd3000f,0xdd5000f,
-0xdd7000f,0xdd9000f,0xddb000f,0xddd000f,0xde0000f,0xde2000f,0xde5000f,0xde7000f,0xdea000f,0xdec000f,0xdee000f,0xdf0000f,0xdf3000f,0xdf5000f,0xdf7000f,0xdfa000f,
-0xdfd000f,0xdff000f,0xe01000f,0xe03000f,0xe05000f,0xe07000f,0xe09000f,0xe0b000f,0xe0d000f,0xe0f000f,0xe11000f,0xe13000f,0xe15000f,0xe17000f,0xe1a000f,0xe1c000f,
-0xe1f000f,0xe21000f,0xe24000f,0xe26000f,0xe29000f,0xe2c000f,0xe2f000f,0xe31000f,0xe33000f,0xe35000f,0xe38000f,0xe3b000f,0xe3e000f,0xe41000f,0xe43000f,0xe45000f,
-0xe47000f,0xe49000f,0xe4b000f,0xe4d000f,0xe4f000f,0xe51000f,0xe54000f,0xe56000f,0xe58000f,0xe5a000f,0xe5c000f,0xe5f000f,0xe61000f,0xe64000f,0xe67000f,0xe69000f,
-0xe6b000f,0xe6d000f,0xe6f000f,0xe71000f,0xe73000f,0xe76000f,0xe79000f,0xe7c000f,0xe7e000f,0xe80000f,0xe83000f,0xe85000f,0xe87000f,0xe89000f,0xe8c000f,0xe8e000f,
-0xe90000f,0xe92000f,0xe94000f,0xe96000f,0xe99000f,0xe9b000f,0xe9d000f,0xe9f000f,0xea1000f,0xea3000f,0xea5000f,0xea8000f,0xeab000f,0xead000f,0xeb0000f,0xeb2000f,
-0xeb5000f,0xeb7000f,0xeb9000f,0xebb000f,0xebe000f,0xec1000f,0xec3000f,0xec6000f,0xec8000f,0xecb000f,0xecd000f,0xecf000f,0xed1000f,0xed3000f,0xed5000f,0xed7000f,
-0xeda000f,0xedd000f,0xee0000f,0xee3000f,0xee5000f,0xee7000f,0xee9000f,0xeeb000f,0xeed000f,0xeef000f,0xef1000f,0xef3000f,0xef5000f,0xef7000f,0xef9000f,0xefb000f,
-0xefe000f,0xf00000f,0xf02000f,0xf04000f,0xf06000f,0xf08000f,0xf0a000f,0xf0c000f,0xf0e000f,0xf10000f,0xf12000f,0xf14000f,0xf16000f,0xf19000f,0xf1c000f,0xf1f000f,
-0xf21000f,0xf23000f,0xf25000f,0xf27000f,0xf2a000f,0xf2c000f,0xf2f000f,0xf31000f,0xf33000f,0xf36000f,0xf39000f,0xf3b000f,0xf3d000f,0xf3f000f,0xf41000f,0xf43000f,
-0xf45000f,0xf47000f,0xf49000f,0xf4b000f,0xf4d000f,0xf4f000f,0xf51000f,0xf53000f,0xf55000f,0xf57000f,0xf59000f,0xf5b000f,0xf5d000f,0xf5f000f,0xf62000f,0xf64000f,
-0xf66000f,0xf68000f,0xf6a000f,0xf6c000f,0xf6f000f,0xf72000f,0xf74000f,0xf76000f,0xf78000f,0xf7a000f,0xf7c000f,0xf7e000f,0xf81000f,0xf83000f,0xf85000f,0xf87000f,
-0xf89000f,0xf8c000f,0xf8f000f,0xf91000f,0xf93000f,0xf95000f,0xf98000f,0xf9a000f,0xf9c000f,0xf9f000f,0xfa2000f,0xfa4000f,0xfa6000f,0xfa8000f,0xfab000f,0xfad000f,
-0xfaf000f,0xfb1000f,0xfb3000f,0xfb5000f,0xfb7000f,0xfb9000f,0xfbc000f,0xfbe000f,0xfc0000f,0xfc2000f,0xfc5000f,0xfc7000f,0xfc9000f,0xfcb000f,0xfcd000f,0xfd0000f,
-0xfd3000f,0xfd5000f,0xfd7000f,0xfd9000f,0xfdc000f,0xfde000f,0xfe1000f,0xfe3000f,0xfe5000f,0xfe7000f,0xfea000f,0xfec000f,0xfee000f,0xff0000f,0xff2000f,0xff4000f,
-0xff6000f,0xff8000f,0xffb000f,0xffd000f,0xfff000f,0x1001000f,0x1003000f,0x1005000f,0x1007000f,0x100a000f,0x100c000f,0x100f000f,0x1012000f,0x1015000f,0x1017000f,0x1019000f,
-0x101b000f,0x101d000f,0x101f000f,0x1021000f,0x1023000f,0x1025000f,0,0,0x1028000c,0x102c000c,0x1031004c,0x1035000c,0x103a004c,0x103f004c,0x3d8e0040,0x1044004c,
-0x1048000c,0x104c000c,0x1051004c,0x1055000c,0x1059000c,0x105d000c,0x1061000c,0x1066004c,0,0x106a000c,0x106e000c,0x1072000c,0x1077004c,0x107c004c,0x1081004c,0,
-0x3d920040,0x1085000c,0x1089000c,0x108d000c,0x1092004c,0x1096000c,0,0,0x109a000c,0x109e000c,0x10a3004c,0x10a7000c,0x10ac004c,0x10b1004c,0x3d8f0040,0x10b6004c,
-0x10ba000c,0x10be000c,0x10c3004c,0x10c7000c,0x10cb000c,0x10cf000c,0x10d3000c,0x10d8004c,0,0x10dc000c,0x10e0000c,0x10e4000c,0x10e9004c,0x10ee004c,0x10f3004c,0,
-0x3d930040,0x10f7000c,0x10fb000c,0x10ff000c,0x1104004c,0x1108000c,0,0x110c000c,0x1110000c,0x1114000c,0x1119004c,0x111e004c,0x1122000c,0x1126000c,0x112a000c,0x112e000c,
-0x1132000c,0x1136000c,0x113a000c,0x113e000c,0x1142000c,0x1146000c,0x114a000c,0x114e000c,0,0,0x1153004c,0x1158004c,0x115c000c,0x1160000c,0x1164000c,0x1168000c,
-0x116c000c,0x1170000c,0x1174000c,0x1178000c,0x117c000c,0x1180000c,0x1184000c,0x1188000c,0x118c000c,0x1190000c,0x1194000c,0x1198000c,0x119c000c,0x11a0000c,0,0,
-0x11a4000c,0x11a8000c,0x11ac000c,0x11b0000c,0x11b4000c,0x11b8000c,0x11bc000c,0x11c0000c,0x11c4000c,0,0x20af000a,0x20b2000a,0x11c8000c,0x11cc000c,0x11d0000c,0x11d4000c,
-0,0x11d8000c,0x11dc000c,0x11e0000c,0x11e4000c,0x11e8000c,0x11ec000c,0x20b5000a,0x20b8000a,0,0,0x11f0000c,0x11f4000c,0x11f8000c,0x11fc000c,0x1200000c,
-0x1204000c,0x20bb000a,0,0,0x1209004c,0x120e004c,0x1212000c,0x1216000c,0x121a000c,0x121e000c,0,0,0x1222000c,0x1226000c,0x122a000c,0x122e000c,
-0x1232000c,0x1236000c,0x123b004c,0x1240004c,0x1244000c,0x1248000c,0x124c000c,0x1250000c,0x1255004c,0x125a004c,0x125e000c,0x1262000c,0x1266000c,0x126a000c,0,0,
-0x126f004c,0x1274004c,0x1279004c,0x127e004c,0x1282000c,0x1286000c,0x128a000c,0x128e000c,0x1292000c,0x1296000c,0x129a000c,0x129e000c,0x12a2000c,0x12a6000c,0x12aa000c,0x12ae000c,
-0x12b2000c,0x12b6000c,0x12ba000c,0x12be000c,0x12c2000c,0x12c6000c,0x12ca000c,0x20bf004a,0x12cf004c,0x12d4004c,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0x12d9004c,0x12de004c,0,0,0,0,0,0,0x3d900040,
-0,0,0,0,0,0,0,0,0x20c1000a,0x20c6000a,0x20cb000a,0x20d0000a,0x20d3000a,0x20d6000a,0x20d9000a,0x20dc000a,
-0x20df000a,0x12e2000c,0x12e6000c,0x12ea000c,0x12ee000c,0x12f2000c,0x12f6000c,0x12fa000c,0x12fe000c,0x1302000c,0x1307000c,0x130c000c,0x1311000c,0x1316000c,0x131b000c,0x1320000c,
-0x1325000c,0,0x132a000c,0x132f000c,0x1334000c,0x1339000c,0x133e000c,0x1342000c,0,0,0x1346000c,0x134a000c,0x134e000c,0x1352000c,0x1357004c,0x135c004c,
-0x1360000c,0x1365000c,0x136a000c,0x136e000c,0x1372000c,0x20e2000a,0x20e5000a,0x20e8000a,0x1376000c,0x137a000c,0,0,0x137e000c,0x1382000c,0x1386000c,0x138b000c,
-0x1390000c,0x1394000c,0x1398000c,0x139c000c,0x13a0000c,0x13a4000c,0x13a8000c,0x13ac000c,0x13b0000c,0x13b4000c,0x13b8000c,0x13bc000c,0x13c0000c,0x13c4000c,0x13c8000c,0x13cc000c,
-0x13d0000c,0x13d4000c,0x13d8000c,0x13dc000c,0x13e0000c,0x13e4000c,0x13e8000c,0x13ec000c,0x13f0000c,0x13f4000c,0x13f8000c,0x13fc000c,0x1400000c,0x1404000c,0x1408000c,0x140c000c,
-0,0,0x1410000c,0x1414000c,0,0,0,0,0,0,0x1419004c,0x141e004c,0x1423004c,0x1428004c,0x142c000c,0x1431000c,
-0x1436000c,0x143b000c,0x1441004c,0x1446004c,0x144a000c,0x144f000c,0x1454000c,0x1458000c,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0x3def0040,0,0,0,0x3d990040,0,0,0,0x3d9a0040,0x1485000c,0x1489000c,
-0x148e004c,0x1492000c,0x1497004c,0x149b000c,0x149f000c,0x3d9b0040,0,0,0,0x3d9c0040,0,0x3d9d0040,0,0x3d9e0040,0,0,
-0,0,0,0x3da00040,0x14bb000c,0x14bf000c,0,0x14c3000c,0,0,0x3da40040,0x14c7000c,0,0,0,0,
-0x14cb000c,0x14cf000c,0x14d3000c,0,0x3db20040,0,0,0x3da30040,0,0x3da20040,0x3db00040,0x3db60040,0x3da60040,0x14d7000c,0x3da50040,0,
-0,0,0x3db80040,0,0,0,0,0x3da70040,0,0,0,0x3dbe0040,0,0,0,0x3dc00040,
-0,0x3dbc0040,0,0,0x3db30040,0,0,0x3daa0040,0,0x3da90040,0x3db10040,0x3db70040,0x3da80040,0x14db000c,0x3dac0040,0,
-0,0,0x3db90040,0,0,0,0,0x3dad0040,0,0,0,0x3dbf0040,0,0,0,0x3dc10040,
-0,0x3dbd0040,0,0,0x14df000c,0x14e3000c,0,0x14e7000c,0,0,0x3dab0040,0x14eb000c,0,0,0,0,
-0x14ef000c,0x14f3000c,0x14f7000c,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x3dae0040,0x3daf0040,0x14fb000c,0x14ff000c,0,0,0,0,
-0,0,0,0,0,0x1503000c,0x1507000c,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x150b000c,0x150f000c,0x1513000c,0x1517000c,0,0,0x151b000c,0x151f000c,0x3db40040,0x3db50040,0x1523000c,0x1527000c,
-0x152b000c,0x152f000c,0x1533000c,0x1537000c,0,0,0x153b000c,0x153f000c,0x1543000c,0x1547000c,0x154b000c,0x154f000c,0x3dba0040,0x3dbb0040,0x1553000c,0x1557000c,
-0x155b000c,0x155f000c,0x1563000c,0x1567000c,0x156b000c,0x156f000c,0x1573000c,0x1577000c,0x157b000c,0x157f000c,0,0,0x1583000c,0x1587000c,0,0,
-0,0,0,0,0,0,0x158b000c,0x158f000c,0x1593000c,0x1597000c,0x159b000c,0x3dc20040,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x159f000c,0x3dc60040,0x15a3000c,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0x3dc70040,0x15a7000c,0,0x3dc50040,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,
-0xe600,0,0,0xe600,0,0,0,0,0,0,0,0,0x3dc80040,0x15ab000c,0,0,
-0,0,0,0,0x3dc90040,0x15af000c,0,0x3dca0040,0x15b3000c,0,0,0,0,0,0,0,
-0x207007b0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0x3dcd0040,0,0x15c6000c,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0x3dce0040,0x3dcf0040,0,0,0x15c9000c,0x15cc000c,0x15cf000c,0x900,0,0,
-0,0,0,0,0,0,0,0x207700b0,0,0,0,0,0,0,0,0,
-0,0,0x3dd00040,0,0x15d2000c,0,0,0,0,0x900,0,0,0,0,0,0,
-0,0x5400,0x20785bb0,0,0,0,0,0,0,0,0,0,0x15d6000c,0,0x207900b0,0,
-0,0,0x3dd20040,0x15d9000c,0x15dc000c,0,0x15e0004c,0x15e3000c,0,0x900,0,0,0,0,0,0,
-0,0x207a00b0,0x207b00b0,0,0,0,0,0,0,0,0,0,0,0,0x3dd30040,0x3dd40040,
-0,0,0x15e7000c,0x15ea000c,0x15ed000c,0x900,0,0,0,0,0,0,0,0,0,0x207d00b0,
-0,0,0,0,0,0,0,0,0,0,0x207e09b0,0,0,0,0,0x207f00b0,
-0,0,0,0,0,0,0,0,0,0x3dd50040,0x15f0000c,0,0x15f5004c,0x15f8000c,0x15fd000c,0x208000b0,
-0,0,0,0,0,0x3dd60040,0x1600000c,0,0,0,0,0,0,0,0x208100b0,0,
-0,0,0,0,0,0,0,0x700,0,0x900,0,0,0,0,0,0,
-0,0x3dd70040,0x1603000c,0x3dd80040,0x1606000c,0x3dd90040,0x1609000c,0x3dda0040,0x160c000c,0x3ddb0040,0x160f000c,0,0,0x3ddc0040,0x1612000c,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x700,0x208200b0,0,0,0,0,0x3ddd0040,0x1615000c,0x3dde0040,0x1618000c,0x3ddf0040,0x3de00040,
-0x161b000c,0x161e000c,0x3de10040,0x1621000c,0x900,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x1624000c,0x1628000c,0x162c000c,0x1630000c,0x1634000c,0x1638000c,0x163c000c,0x1640000c,0x1644000c,0x1649000c,0x164e000c,0x1652000c,0x1656000c,0x165a000c,0x165e000c,0x1662000c,
-0x1666000c,0x166a000c,0x166e000c,0x1672000c,0x1676000c,0x167b000c,0x1680000c,0x1685000c,0x168a000c,0x168e000c,0x1692000c,0x1696000c,0x169a000c,0x169f000c,0x16a4000c,0x16a8000c,
-0x16ac000c,0x16b0000c,0x16b4000c,0x16b8000c,0x16bc000c,0x16c0000c,0x16c4000c,0x16c8000c,0x16cc000c,0x16d0000c,0x16d4000c,0x16d8000c,0x16dc000c,0x16e0000c,0x16e4000c,0x16e9000c,
-0x16ee000c,0x16f2000c,0x16f6000c,0x16fa000c,0x16fe000c,0x1702000c,0x1707004c,0x170c004c,0x1710000c,0x1715000c,0x171a000c,0x171e000c,0x1722000c,0x1726000c,0x172a000c,0x172e000c,
-0x1732000c,0x1736000c,0x173a000c,0x173e000c,0x1742000c,0x1746000c,0x174a000c,0x174e000c,0x1752000c,0x1756000c,0x175a000c,0x175e000c,0x1762000c,0x1767000c,0x176c000c,0x1771000c,
-0x1776000c,0x177b000c,0x1780000c,0x1785000c,0x178a000c,0x178e000c,0x1792000c,0x1796000c,0x179a000c,0x179e000c,0x17a3004c,0x17a8004c,0x17ac000c,0x17b1000c,0x17b6000c,0x17ba000c,
-0x17be000c,0x17c2000c,0x17c7004c,0x17cc004c,0x17d0000c,0x17d5000c,0x17da000c,0x17df000c,0x17e4000c,0x17e9000c,0x17ee000c,0x17f2000c,0x17f6000c,0x17fa000c,0x17fe000c,0x1802000c,
-0x1806000c,0x180a000c,0x180e000c,0x1812000c,0x1816000c,0x181a000c,0x181e000c,0x1822000c,0x1826000c,0x182b000c,0x1830000c,0x1835000c,0x183a000c,0x183e000c,0x1842000c,0x1846000c,
-0x184a000c,0x184e000c,0x1852000c,0x1856000c,0x185a000c,0x185e000c,0x1862000c,0x1866000c,0x186a000c,0x186e000c,0x1872000c,0x1876000c,0x187a000c,0x187e000c,0x1882000c,0x1886000c,
-0x188a000c,0x188e000c,0x1892000c,0x1896000c,0x189a000c,0x189e000c,0x18a2000c,0x18a6000c,0x18aa000c,0x18ae000c,0x21f6000a,0x18b2000e,0,0,0,0,
-0x18ba004c,0x18bf004c,0x18c3000c,0x18c7000c,0x18cb000c,0x18d0000c,0x18d5000c,0x18da000c,0x18df000c,0x18e4000c,0x18e9000c,0x18ee000c,0x18f3000c,0x18f8000c,0x18fd000c,0x1902000c,
-0x1907000c,0x190c000c,0x1911000c,0x1916000c,0x191b000c,0x1920000c,0x1925000c,0x192a000c,0x1930004c,0x1935004c,0x1939000c,0x193d000c,0x1941000c,0x1945000c,0x1949000c,0x194e000c,
-0x1953000c,0x1958000c,0x195d000c,0x1962000c,0x1967000c,0x196c000c,0x1971000c,0x1976000c,0x197b000c,0x197f000c,0x1983000c,0x1987000c,0x198c004c,0x1991004c,0x1995000c,0x1999000c,
-0x199d000c,0x19a2000c,0x19a7000c,0x19ac000c,0x19b1000c,0x19b6000c,0x19bb000c,0x19c0000c,0x19c5000c,0x19ca000c,0x19cf000c,0x19d4000c,0x19d9000c,0x19de000c,0x19e3000c,0x19e8000c,
-0x19ed000c,0x19f2000c,0x19f7000c,0x19fc000c,0x1a01000c,0x1a05000c,0x1a09000c,0x1a0d000c,0x1a11000c,0x1a16000c,0x1a1b000c,0x1a20000c,0x1a25000c,0x1a2a000c,0x1a2f000c,0x1a34000c,
-0x1a39000c,0x1a3e000c,0x1a43000c,0x1a47000c,0x1a4b000c,0x1a4f000c,0x1a53000c,0x1a57000c,0x1a5b000c,0x1a5f000c,0,0,0,0,0,0,
-0x1a64004c,0x1a69004c,0x1a6e004c,0x1a74004c,0x1a7a004c,0x1a80004c,0x1a86004c,0x1a8c004c,0x1a92004c,0x1a97004c,0x1a9c004c,0x1aa2004c,0x1aa8004c,0x1aae004c,0x1ab4004c,0x1aba004c,
-0x1ac0004c,0x1ac5004c,0x1ac9000c,0x1ace000c,0x1ad3000c,0x1ad8000c,0,0,0x1ade004c,0x1ae3004c,0x1ae7000c,0x1aec000c,0x1af1000c,0x1af6000c,0,0,
-0x1afc004c,0x1b01004c,0x1b06004c,0x1b0c004c,0x1b12004c,0x1b18004c,0x1b1e004c,0x1b24004c,0x1b2a004c,0x1b2f004c,0x1b34004c,0x1b3a004c,0x1b40004c,0x1b46004c,0x1b4c004c,0x1b52004c,
-0x1b58004c,0x1b5d004c,0x1b61000c,0x1b66000c,0x1b6b000c,0x1b70000c,0x1b75000c,0x1b7a000c,0x1b80004c,0x1b85004c,0x1b89000c,0x1b8e000c,0x1b93000c,0x1b98000c,0x1b9d000c,0x1ba2000c,
-0x1ba8004c,0x1bad004c,0x1bb1000c,0x1bb6000c,0x1bbb000c,0x1bc0000c,0,0,0x1bc6004c,0x1bcb004c,0x1bcf000c,0x1bd4000c,0x1bd9000c,0x1bde000c,0,0,
-0x1be4004c,0x1be9004c,0x1bed000c,0x1bf2000c,0x1bf7000c,0x1bfc000c,0x1c01000c,0x1c06000c,0,0x1c0c004c,0,0x1c10000c,0,0x1c15000c,0,0x1c1a000c,
-0x1c9a000c,0x1c9f000c,0x1ca4000c,0x1caa000c,0x1cb0000c,0x1cb6000c,0x1cbc000c,0x1cc2000c,0x1cc8000c,0x1ccd000c,0x1cd2000c,0x1cd8000c,0x1cde000c,0x1ce4000c,0x1cea000c,0x1cf0000c,
-0x1cf6000c,0x1cfb000c,0x1d00000c,0x1d06000c,0x1d0c000c,0x1d12000c,0x1d18000c,0x1d1e000c,0x1d24000c,0x1d29000c,0x1d2e000c,0x1d34000c,0x1d3a000c,0x1d40000c,0x1d46000c,0x1d4c000c,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x3df00040,0,0x3df10040,0,0x3df20040,0,0,0,0,0,0x1eb6000c,0x1eba000c,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0x1ebe000c,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0x1ec2000c,0x1ec6000c,0x1eca000c,
-0x3df30040,0,0x3df50040,0,0x3df40040,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0x3df60040,0x1ece000c,0,0,0,0x3df70040,0x1ed2000c,0,0x3df80040,0x1ed6000c,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0x3df90040,0x1eda000c,0x3dfa0040,0x1ede000c,0,0,0,0,0,0x235a000a,0x235d000a,0,0x2361000a,
-0x2364000a,0,0,0,0,0,0,0,0,0,0,0,0x3dfb0040,0,0,0,
-0,0x1ee2000c,0,0x3dfc0040,0x1ee6000c,0x3dfd0040,0,0x1eea000c,0x3dfe0040,0x1eee000c,0,0,0,0x3e010040,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x1ef2000c,0x3e000040,0x1ef6000c,0,0x3e040040,0x3e050040,0,0,0,0,0,0,0,0x1efa000c,0x1efe000c,0x1f02000c,
-0x1f06000c,0x1f0a000c,0x3e060040,0x3e070040,0x1f0e000c,0x1f12000c,0x3e080040,0x3e090040,0x1f16000c,0x1f1a000c,0x3e0a0040,0x3e0b0040,0x3e140040,0x3e150040,0,0,
-0x1f1e000c,0x1f22000c,0x3e0c0040,0x3e0d0040,0x1f26000c,0x1f2a000c,0x3e0e0040,0x3e0f0040,0x1f2e000c,0x1f32000c,0,0,0,0,0,0,
-0,0x3e160040,0x3e170040,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0x3e100040,0,0,0,0,0,0x3e110040,0x3e120040,0,0x3e130040,0x1f36000c,0x1f3a000c,0x1f3e000c,0x1f42000c,
-0,0,0x3e180040,0x3e190040,0x3e1a0040,0x3e1b0040,0,0,0,0,0,0,0,0,0,0,
-0x1f46000c,0x1f4a000c,0x1f4e000c,0x1f52000c,0,0,0,0,0,0,0x1f56000c,0x1f5a000c,0x1f5e000c,0x1f62000c,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0x3e300040,0,0,0,0,0x3e1c0040,0x1f66000c,0x3e1d0040,0x1f6a000c,0x3e1e0040,0x1f6e000c,0x3e1f0040,0x1f72000c,0x3e200040,
-0x1f76000c,0x3e210040,0x1f7a000c,0x3e220040,0x1f7e000c,0x3e230040,0x1f82000c,0x3e240040,0x1f86000c,0x3e250040,0x1f8a000c,0x3e260040,0x1f8e000c,0x3e270040,0x1f92000c,0,
-0x3e280040,0x1f96000c,0x3e290040,0x1f9a000c,0x3e2a0040,0x1f9e000c,0,0,0,0,0,0x3e2b0040,0x1fa2000c,0x1fa6000c,0x3e2c0040,0x1faa000c,
-0x1fae000c,0x3e2d0040,0x1fb2000c,0x1fb6000c,0x3e2e0040,0x1fba000c,0x1fbe000c,0x3e2f0040,0x1fc2000c,0x1fc6000c,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x1fca000c,0,0,0,0,0x208308b0,0x208408b0,0x26db000a,0x26df000a,0x3e310040,0x1fce000c,0x26e3000a,0,0,0,0,
-0,0,0x3e460040,0,0,0,0,0x3e320040,0x1fd2000c,0x3e330040,0x1fd6000c,0x3e340040,0x1fda000c,0x3e350040,0x1fde000c,0x3e360040,
-0x1fe2000c,0x3e370040,0x1fe6000c,0x3e380040,0x1fea000c,0x3e390040,0x1fee000c,0x3e3a0040,0x1ff2000c,0x3e3b0040,0x1ff6000c,0x3e3c0040,0x1ffa000c,0x3e3d0040,0x1ffe000c,0,
-0x3e3e0040,0x2002000c,0x3e3f0040,0x2006000c,0x3e400040,0x200a000c,0,0,0,0,0,0x3e410040,0x200e000c,0x2012000c,0x3e420040,0x2016000c,
-0x201a000c,0x3e430040,0x201e000c,0x2022000c,0x3e440040,0x2026000c,0x202a000c,0x3e450040,0x202e000c,0x2032000c,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0x3e470040,0x3e480040,0x3e490040,0x3e4a0040,0,
-0x2036000c,0,0,0x203a000c,0x203e000c,0x2042000c,0x2046000c,0,0,0x3e4b0040,0x204a000c,0x26e6000a,0x204fe6b0,0x2050e6b0,0x2051e6b0,0x2052e6b0,
-0x2053e6b0,0xe600,0x2054e6b0,0x2055e6b0,0x2056e6b0,0x2057e6b0,0x2058e6b0,0x2059e6b0,0x205ae6b0,0xe600,0xe600,0x205be6b0,0xe600,0x205ce6b0,0xe600,0x205de6b0,
-0x205ee6b0,0xe800,0xdc00,0xdc00,0xdc00,0xdc00,0xe800,0x205fd8b0,0xdc00,0xdc00,0xdc00,0xdc00,0xdc00,0xca00,0xca00,0x2060dcb0,
-0x2061dcb0,0x2062dcb0,0x2063dcb0,0x2064cab0,0x2065cab0,0xdc00,0xdc00,0xdc00,0xdc00,0x2066dcb0,0x2067dcb0,0xdc00,0x2068dcb0,0x2069dcb0,0xdc00,0xdc00,
-0x100,0x100,0x100,0x100,0x206a01b0,0xdc00,0xdc00,0xdc00,0xdc00,0xe600,0xe600,0xe600,0,0,0,0,
-0,0,0,0,0x3dc30040,0,0x3dc40040,0x1b00,0x1c00,0x1d00,0x1e00,0x1f00,0x2000,0x2100,0x2200,0x206de6b0,
-0x206ee6b0,0x206fdcb0,0xdc00,0xe600,0xe600,0xe600,0xe600,0xe600,0xdc00,0xe600,0xe600,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x700,0,0x207100b0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x700,0,0x207300b0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0x207600b0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0x207c00b0,0,0,0xfff200b0,0xfff200b0,0xfff200b0,
+0,0,0,0xb5b000f,0xb61000f,0xb67000f,0xb6f000f,0xb77000f,0xb7f000f,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0xb87000f,0xb89000f,0xb8b000f,0xb8d000f,0xb90000f,0xb92000f,0xb94000f,0xb96000f,
+0xb98000f,0xb9a000f,0xb9c000f,0xb9e000f,0xba0000f,0xba2000f,0xba5000f,0xba7000f,0xba9000f,0xbab000f,0xbad000f,0xbb0000f,0xbb2000f,0xbb4000f,0xbb6000f,0xbb9000f,
+0xbbb000f,0xbbd000f,0xbbf000f,0xbc1000f,0xbc3000f,0xbc6000f,0xbc8000f,0xbca000f,0xbcc000f,0xbce000f,0xbd0000f,0xbd2000f,0xbd4000f,0xbd6000f,0xbd8000f,0xbda000f,
+0xbdc000f,0xbde000f,0xbe0000f,0xbe2000f,0xbe4000f,0xbe6000f,0xbe8000f,0xbea000f,0xbec000f,0xbee000f,0xbf0000f,0xbf2000f,0xbf4000f,0xbf7000f,0xbf9000f,0xbfb000f,
+0xbfd000f,0xc00000f,0xc02000f,0xc04000f,0xc06000f,0xc08000f,0xc0a000f,0xc0c000f,0xc0e000f,0xc10000f,0xc12000f,0xc14000f,0xc16000f,0xc18000f,0xc1a000f,0xc1c000f,
+0xc1e000f,0xc20000f,0xc22000f,0xc24000f,0xc26000f,0xc28000f,0xc2a000f,0xc2c000f,0xc2e000f,0xc30000f,0xc32000f,0xc34000f,0xc36000f,0xc38000f,0xc3a000f,0xc3c000f,
+0xc3e000f,0xc40000f,0xc43000f,0xc45000f,0xc47000f,0xc49000f,0xc4b000f,0xc4d000f,0xc4f000f,0xc52000f,0xc55000f,0xc57000f,0xc59000f,0xc5b000f,0xc5d000f,0xc5f000f,
+0xc61000f,0xc63000f,0xc65000f,0xc67000f,0xc69000f,0xc6c000f,0xc6e000f,0xc70000f,0xc72000f,0xc74000f,0xc77000f,0xc79000f,0xc7b000f,0xc7d000f,0xc7f000f,0xc81000f,
+0xc83000f,0xc85000f,0xc87000f,0xc89000f,0xc8c000f,0xc8e000f,0xc91000f,0xc93000f,0xc95000f,0xc97000f,0xc99000f,0xc9b000f,0xc9d000f,0xc9f000f,0xca1000f,0xca3000f,
+0xca5000f,0xca7000f,0xcaa000f,0xcac000f,0xcae000f,0xcb0000f,0xcb2000f,0xcb4000f,0xcb7000f,0xcb9000f,0xcbc000f,0xcbf000f,0xcc1000f,0xcc3000f,0xcc5000f,0xcc7000f,
+0xcca000f,0xccd000f,0xccf000f,0xcd1000f,0xcd3000f,0xcd5000f,0xcd7000f,0xcd9000f,0xcdb000f,0xcdd000f,0xcdf000f,0xce1000f,0xce3000f,0xce6000f,0xce8000f,0xcea000f,
+0xcec000f,0xcee000f,0xcf0000f,0xcf2000f,0xcf4000f,0xcf6000f,0xcf8000f,0xcfa000f,0xcfc000f,0xcfe000f,0xd00000f,0xd02000f,0xd04000f,0xd06000f,0xd08000f,0xd0a000f,
+0xd0c000f,0xd0f000f,0xd11000f,0xd13000f,0xd15000f,0xd17000f,0xd19000f,0xd1c000f,0xd1e000f,0xd20000f,0xd22000f,0xd24000f,0xd26000f,0xd28000f,0xd2a000f,0xd2c000f,
+0xd2e000f,0xd30000f,0xd32000f,0xd35000f,0xd37000f,0xd39000f,0xd3b000f,0xd3d000f,0xd3f000f,0xd41000f,0xd43000f,0xd45000f,0xd47000f,0xd49000f,0xd4b000f,0xd4d000f,
+0xd4f000f,0xd51000f,0xd53000f,0xd55000f,0xd57000f,0xd59000f,0xd5c000f,0xd5e000f,0xd60000f,0xd62000f,0xd64000f,0xd66000f,0xd69000f,0xd6b000f,0xd6d000f,0xd6f000f,
+0xd71000f,0xd73000f,0xd75000f,0xd77000f,0xd79000f,0xd7c000f,0xd7e000f,0xd80000f,0xd82000f,0xd85000f,0xd87000f,0xd89000f,0xd8b000f,0xd8d000f,0xd8f000f,0xd91000f,
+0xd94000f,0xd97000f,0xd9a000f,0xd9c000f,0xd9f000f,0xda1000f,0xda3000f,0xda5000f,0xda7000f,0xda9000f,0xdab000f,0xdad000f,0xdaf000f,0xdb1000f,0xdb3000f,0xdb6000f,
+0xdb8000f,0xdba000f,0xdbc000f,0xdbe000f,0xdc0000f,0xdc2000f,0xdc5000f,0xdc7000f,0xdc9000f,0xdcc000f,0xdcf000f,0xdd1000f,0xdd3000f,0xdd5000f,0xdd7000f,0xdd9000f,
+0xddb000f,0xddd000f,0xddf000f,0xde1000f,0xde4000f,0xde6000f,0xde9000f,0xdeb000f,0xdee000f,0xdf0000f,0xdf2000f,0xdf4000f,0xdf7000f,0xdf9000f,0xdfb000f,0xdfe000f,
+0xe01000f,0xe03000f,0xe05000f,0xe07000f,0xe09000f,0xe0b000f,0xe0d000f,0xe0f000f,0xe11000f,0xe13000f,0xe15000f,0xe17000f,0xe19000f,0xe1b000f,0xe1e000f,0xe20000f,
+0xe23000f,0xe25000f,0xe28000f,0xe2a000f,0xe2d000f,0xe30000f,0xe33000f,0xe35000f,0xe37000f,0xe39000f,0xe3c000f,0xe3f000f,0xe42000f,0xe45000f,0xe47000f,0xe49000f,
+0xe4b000f,0xe4d000f,0xe4f000f,0xe51000f,0xe53000f,0xe55000f,0xe58000f,0xe5a000f,0xe5c000f,0xe5e000f,0xe60000f,0xe63000f,0xe65000f,0xe68000f,0xe6b000f,0xe6d000f,
+0xe6f000f,0xe71000f,0xe73000f,0xe75000f,0xe77000f,0xe7a000f,0xe7d000f,0xe80000f,0xe82000f,0xe84000f,0xe87000f,0xe89000f,0xe8b000f,0xe8d000f,0xe90000f,0xe92000f,
+0xe94000f,0xe96000f,0xe98000f,0xe9a000f,0xe9d000f,0xe9f000f,0xea1000f,0xea3000f,0xea5000f,0xea7000f,0xea9000f,0xeac000f,0xeaf000f,0xeb1000f,0xeb4000f,0xeb6000f,
+0xeb9000f,0xebb000f,0xebd000f,0xebf000f,0xec2000f,0xec5000f,0xec7000f,0xeca000f,0xecc000f,0xecf000f,0xed1000f,0xed3000f,0xed5000f,0xed7000f,0xed9000f,0xedb000f,
+0xede000f,0xee1000f,0xee4000f,0xee7000f,0xee9000f,0xeeb000f,0xeed000f,0xeef000f,0xef1000f,0xef3000f,0xef5000f,0xef7000f,0xef9000f,0xefb000f,0xefd000f,0xeff000f,
+0xf02000f,0xf04000f,0xf06000f,0xf08000f,0xf0a000f,0xf0c000f,0xf0e000f,0xf10000f,0xf12000f,0xf14000f,0xf16000f,0xf18000f,0xf1a000f,0xf1d000f,0xf20000f,0xf23000f,
+0xf25000f,0xf27000f,0xf29000f,0xf2b000f,0xf2e000f,0xf30000f,0xf33000f,0xf35000f,0xf37000f,0xf3a000f,0xf3d000f,0xf3f000f,0xf41000f,0xf43000f,0xf45000f,0xf47000f,
+0xf49000f,0xf4b000f,0xf4d000f,0xf4f000f,0xf51000f,0xf53000f,0xf55000f,0xf57000f,0xf59000f,0xf5b000f,0xf5d000f,0xf5f000f,0xf61000f,0xf63000f,0xf66000f,0xf68000f,
+0xf6a000f,0xf6c000f,0xf6e000f,0xf70000f,0xf73000f,0xf76000f,0xf78000f,0xf7a000f,0xf7c000f,0xf7e000f,0xf80000f,0xf82000f,0xf85000f,0xf87000f,0xf89000f,0xf8b000f,
+0xf8d000f,0xf90000f,0xf93000f,0xf95000f,0xf97000f,0xf99000f,0xf9c000f,0xf9e000f,0xfa0000f,0xfa3000f,0xfa6000f,0xfa8000f,0xfaa000f,0xfac000f,0xfaf000f,0xfb1000f,
+0xfb3000f,0xfb5000f,0xfb7000f,0xfb9000f,0xfbb000f,0xfbd000f,0xfc0000f,0xfc2000f,0xfc4000f,0xfc6000f,0xfc9000f,0xfcb000f,0xfcd000f,0xfcf000f,0xfd1000f,0xfd4000f,
+0xfd7000f,0xfd9000f,0xfdb000f,0xfdd000f,0xfe0000f,0xfe2000f,0xfe5000f,0xfe7000f,0xfe9000f,0xfeb000f,0xfee000f,0xff0000f,0xff2000f,0xff4000f,0xff6000f,0xff8000f,
+0xffa000f,0xffc000f,0xfff000f,0x1001000f,0x1003000f,0x1005000f,0x1007000f,0x1009000f,0x100b000f,0x100e000f,0x1010000f,0x1013000f,0x1016000f,0x1019000f,0x101b000f,0x101d000f,
+0x101f000f,0x1021000f,0x1023000f,0x1025000f,0x1027000f,0x1029000f,0,0,0x102c000c,0x1030000c,0x1035004c,0x1039000c,0x103e004c,0x1043004c,0x3d960040,0x1048004c,
+0x104c000c,0x1050000c,0x1055004c,0x1059000c,0x105d000c,0x1061000c,0x1065000c,0x106a004c,0,0x106e000c,0x1072000c,0x1076000c,0x107b004c,0x1080004c,0x1085004c,0,
+0x3d9a0040,0x1089000c,0x108d000c,0x1091000c,0x1096004c,0x109a000c,0,0,0x109e000c,0x10a2000c,0x10a7004c,0x10ab000c,0x10b0004c,0x10b5004c,0x3d970040,0x10ba004c,
+0x10be000c,0x10c2000c,0x10c7004c,0x10cb000c,0x10cf000c,0x10d3000c,0x10d7000c,0x10dc004c,0,0x10e0000c,0x10e4000c,0x10e8000c,0x10ed004c,0x10f2004c,0x10f7004c,0,
+0x3d9b0040,0x10fb000c,0x10ff000c,0x1103000c,0x1108004c,0x110c000c,0,0x1110000c,0x1114000c,0x1118000c,0x111d004c,0x1122004c,0x1126000c,0x112a000c,0x112e000c,0x1132000c,
+0x1136000c,0x113a000c,0x113e000c,0x1142000c,0x1146000c,0x114a000c,0x114e000c,0x1152000c,0,0,0x1157004c,0x115c004c,0x1160000c,0x1164000c,0x1168000c,0x116c000c,
+0x1170000c,0x1174000c,0x1178000c,0x117c000c,0x1180000c,0x1184000c,0x1188000c,0x118c000c,0x1190000c,0x1194000c,0x1198000c,0x119c000c,0x11a0000c,0x11a4000c,0,0,
+0x11a8000c,0x11ac000c,0x11b0000c,0x11b4000c,0x11b8000c,0x11bc000c,0x11c0000c,0x11c4000c,0x11c8000c,0,0x20b3000a,0x20b6000a,0x11cc000c,0x11d0000c,0x11d4000c,0x11d8000c,
+0,0x11dc000c,0x11e0000c,0x11e4000c,0x11e8000c,0x11ec000c,0x11f0000c,0x20b9000a,0x20bc000a,0,0,0x11f4000c,0x11f8000c,0x11fc000c,0x1200000c,0x1204000c,
+0x1208000c,0x20bf000a,0,0,0x120d004c,0x1212004c,0x1216000c,0x121a000c,0x121e000c,0x1222000c,0,0,0x1226000c,0x122a000c,0x122e000c,0x1232000c,
+0x1236000c,0x123a000c,0x123f004c,0x1244004c,0x1248000c,0x124c000c,0x1250000c,0x1254000c,0x1259004c,0x125e004c,0x1262000c,0x1266000c,0x126a000c,0x126e000c,0,0,
+0x1273004c,0x1278004c,0x127d004c,0x1282004c,0x1286000c,0x128a000c,0x128e000c,0x1292000c,0x1296000c,0x129a000c,0x129e000c,0x12a2000c,0x12a6000c,0x12aa000c,0x12ae000c,0x12b2000c,
+0x12b6000c,0x12ba000c,0x12be000c,0x12c2000c,0x12c6000c,0x12ca000c,0x12ce000c,0x20c3004a,0x12d3004c,0x12d8004c,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0x12dd004c,0x12e2004c,0,0,0,0,0,0,0x3d980040,
+0,0,0,0,0,0,0,0,0x20c5000a,0x20ca000a,0x20cf000a,0x20d4000a,0x20d7000a,0x20da000a,0x20dd000a,0x20e0000a,
+0x20e3000a,0x12e6000c,0x12ea000c,0x12ee000c,0x12f2000c,0x12f6000c,0x12fa000c,0x12fe000c,0x1302000c,0x1306000c,0x130b000c,0x1310000c,0x1315000c,0x131a000c,0x131f000c,0x1324000c,
+0x1329000c,0,0x132e000c,0x1333000c,0x1338000c,0x133d000c,0x1342000c,0x1346000c,0,0,0x134a000c,0x134e000c,0x1352000c,0x1356000c,0x135b004c,0x1360004c,
+0x1364000c,0x1369000c,0x136e000c,0x1372000c,0x1376000c,0x20e6000a,0x20e9000a,0x20ec000a,0x137a000c,0x137e000c,0,0,0x1382000c,0x1386000c,0x138a000c,0x138f000c,
+0x1394000c,0x1398000c,0x139c000c,0x13a0000c,0x13a4000c,0x13a8000c,0x13ac000c,0x13b0000c,0x13b4000c,0x13b8000c,0x13bc000c,0x13c0000c,0x13c4000c,0x13c8000c,0x13cc000c,0x13d0000c,
+0x13d4000c,0x13d8000c,0x13dc000c,0x13e0000c,0x13e4000c,0x13e8000c,0x13ec000c,0x13f0000c,0x13f4000c,0x13f8000c,0x13fc000c,0x1400000c,0x1404000c,0x1408000c,0x140c000c,0x1410000c,
+0,0,0x1414000c,0x1418000c,0,0,0,0,0,0,0x141d004c,0x1422004c,0x1427004c,0x142c004c,0x1430000c,0x1435000c,
+0x143a000c,0x143f000c,0x1445004c,0x144a004c,0x144e000c,0x1453000c,0x1458000c,0x145c000c,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0x3df70040,0,0,0,0x3da10040,0,0,0,0x3da20040,0x1489000c,0x148d000c,
+0x1492004c,0x1496000c,0x149b004c,0x149f000c,0x14a3000c,0x3da30040,0,0,0,0x3da40040,0,0x3da50040,0,0x3da60040,0,0,
+0,0,0,0x3da80040,0x14bf000c,0x14c3000c,0,0x14c7000c,0,0,0x3dac0040,0x14cb000c,0,0,0,0,
+0x14cf000c,0x14d3000c,0x14d7000c,0,0x3dba0040,0,0,0x3dab0040,0,0x3daa0040,0x3db80040,0x3dbe0040,0x3dae0040,0x14db000c,0x3dad0040,0,
+0,0,0x3dc00040,0,0,0,0,0x3daf0040,0,0,0,0x3dc60040,0,0,0,0x3dc80040,
+0,0x3dc40040,0,0,0x3dbb0040,0,0,0x3db20040,0,0x3db10040,0x3db90040,0x3dbf0040,0x3db00040,0x14df000c,0x3db40040,0,
+0,0,0x3dc10040,0,0,0,0,0x3db50040,0,0,0,0x3dc70040,0,0,0,0x3dc90040,
+0,0x3dc50040,0,0,0x14e3000c,0x14e7000c,0,0x14eb000c,0,0,0x3db30040,0x14ef000c,0,0,0,0,
+0x14f3000c,0x14f7000c,0x14fb000c,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x3db60040,0x3db70040,0x14ff000c,0x1503000c,0,0,0,0,
+0,0,0,0,0,0x1507000c,0x150b000c,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x150f000c,0x1513000c,0x1517000c,0x151b000c,0,0,0x151f000c,0x1523000c,0x3dbc0040,0x3dbd0040,0x1527000c,0x152b000c,
+0x152f000c,0x1533000c,0x1537000c,0x153b000c,0,0,0x153f000c,0x1543000c,0x1547000c,0x154b000c,0x154f000c,0x1553000c,0x3dc20040,0x3dc30040,0x1557000c,0x155b000c,
+0x155f000c,0x1563000c,0x1567000c,0x156b000c,0x156f000c,0x1573000c,0x1577000c,0x157b000c,0x157f000c,0x1583000c,0,0,0x1587000c,0x158b000c,0,0,
+0,0,0,0,0,0,0x158f000c,0x1593000c,0x1597000c,0x159b000c,0x159f000c,0x3dca0040,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x15a3000c,0x3dce0040,0x15a7000c,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0x3dcf0040,0x15ab000c,0,0x3dcd0040,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,
+0xe600,0,0,0xe600,0,0,0,0,0,0,0,0,0x3dd00040,0x15af000c,0,0,
+0,0,0,0,0x3dd10040,0x15b3000c,0,0x3dd20040,0x15b7000c,0,0,0,0,0,0,0,
+0x207407b0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0x3dd50040,0,0x15ca000c,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0x3dd60040,0x3dd70040,0,0,0x15cd000c,0x15d0000c,0x15d3000c,0x900,0,0,
+0,0,0,0,0,0,0,0x207b00b0,0,0,0,0,0,0,0,0,
+0,0,0x3dd80040,0,0x15d6000c,0,0,0,0,0x900,0,0,0,0,0,0,
+0,0x5400,0x207c5bb0,0,0,0,0,0,0,0,0,0,0x15da000c,0,0x207d00b0,0,
+0,0,0x3dda0040,0x15dd000c,0x15e0000c,0,0x15e4004c,0x15e7000c,0,0x900,0,0,0,0,0,0,
+0,0x207e00b0,0x207f00b0,0,0,0,0,0,0,0,0,0,0,0,0x3ddb0040,0x3ddc0040,
+0,0,0x15eb000c,0x15ee000c,0x15f1000c,0x900,0,0,0,0,0,0,0,0,0,0x208100b0,
+0,0,0,0,0,0,0,0,0,0,0x208209b0,0,0,0,0,0x208300b0,
+0,0,0,0,0,0,0,0,0,0x3ddd0040,0x15f4000c,0,0x15f9004c,0x15fc000c,0x1601000c,0x208400b0,
+0,0,0,0,0,0x3dde0040,0x1604000c,0,0,0,0,0,0,0,0x208500b0,0,
+0,0,0,0,0,0,0,0x700,0,0x900,0x900,0,0,0,0,0,
+0,0x3ddf0040,0x1607000c,0x3de00040,0x160a000c,0x3de10040,0x160d000c,0x3de20040,0x1610000c,0x3de30040,0x1613000c,0,0,0x3de40040,0x1616000c,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x700,0x208600b0,0,0,0,0,0x3de50040,0x1619000c,0x3de60040,0x161c000c,0x3de70040,0x3de80040,
+0x161f000c,0x1622000c,0x3de90040,0x1625000c,0x900,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x1628000c,0x162c000c,0x1630000c,0x1634000c,0x1638000c,0x163c000c,0x1640000c,0x1644000c,0x1648000c,0x164d000c,0x1652000c,0x1656000c,0x165a000c,0x165e000c,0x1662000c,0x1666000c,
+0x166a000c,0x166e000c,0x1672000c,0x1676000c,0x167a000c,0x167f000c,0x1684000c,0x1689000c,0x168e000c,0x1692000c,0x1696000c,0x169a000c,0x169e000c,0x16a3000c,0x16a8000c,0x16ac000c,
+0x16b0000c,0x16b4000c,0x16b8000c,0x16bc000c,0x16c0000c,0x16c4000c,0x16c8000c,0x16cc000c,0x16d0000c,0x16d4000c,0x16d8000c,0x16dc000c,0x16e0000c,0x16e4000c,0x16e8000c,0x16ed000c,
+0x16f2000c,0x16f6000c,0x16fa000c,0x16fe000c,0x1702000c,0x1706000c,0x170b004c,0x1710004c,0x1714000c,0x1719000c,0x171e000c,0x1722000c,0x1726000c,0x172a000c,0x172e000c,0x1732000c,
+0x1736000c,0x173a000c,0x173e000c,0x1742000c,0x1746000c,0x174a000c,0x174e000c,0x1752000c,0x1756000c,0x175a000c,0x175e000c,0x1762000c,0x1766000c,0x176b000c,0x1770000c,0x1775000c,
+0x177a000c,0x177f000c,0x1784000c,0x1789000c,0x178e000c,0x1792000c,0x1796000c,0x179a000c,0x179e000c,0x17a2000c,0x17a7004c,0x17ac004c,0x17b0000c,0x17b5000c,0x17ba000c,0x17be000c,
+0x17c2000c,0x17c6000c,0x17cb004c,0x17d0004c,0x17d4000c,0x17d9000c,0x17de000c,0x17e3000c,0x17e8000c,0x17ed000c,0x17f2000c,0x17f6000c,0x17fa000c,0x17fe000c,0x1802000c,0x1806000c,
+0x180a000c,0x180e000c,0x1812000c,0x1816000c,0x181a000c,0x181e000c,0x1822000c,0x1826000c,0x182a000c,0x182f000c,0x1834000c,0x1839000c,0x183e000c,0x1842000c,0x1846000c,0x184a000c,
+0x184e000c,0x1852000c,0x1856000c,0x185a000c,0x185e000c,0x1862000c,0x1866000c,0x186a000c,0x186e000c,0x1872000c,0x1876000c,0x187a000c,0x187e000c,0x1882000c,0x1886000c,0x188a000c,
+0x188e000c,0x1892000c,0x1896000c,0x189a000c,0x189e000c,0x18a2000c,0x18a6000c,0x18aa000c,0x18ae000c,0x18b2000c,0x21fa000a,0x18b6000e,0,0,0,0,
+0x18be004c,0x18c3004c,0x18c7000c,0x18cb000c,0x18cf000c,0x18d4000c,0x18d9000c,0x18de000c,0x18e3000c,0x18e8000c,0x18ed000c,0x18f2000c,0x18f7000c,0x18fc000c,0x1901000c,0x1906000c,
+0x190b000c,0x1910000c,0x1915000c,0x191a000c,0x191f000c,0x1924000c,0x1929000c,0x192e000c,0x1934004c,0x1939004c,0x193d000c,0x1941000c,0x1945000c,0x1949000c,0x194d000c,0x1952000c,
+0x1957000c,0x195c000c,0x1961000c,0x1966000c,0x196b000c,0x1970000c,0x1975000c,0x197a000c,0x197f000c,0x1983000c,0x1987000c,0x198b000c,0x1990004c,0x1995004c,0x1999000c,0x199d000c,
+0x19a1000c,0x19a6000c,0x19ab000c,0x19b0000c,0x19b5000c,0x19ba000c,0x19bf000c,0x19c4000c,0x19c9000c,0x19ce000c,0x19d3000c,0x19d8000c,0x19dd000c,0x19e2000c,0x19e7000c,0x19ec000c,
+0x19f1000c,0x19f6000c,0x19fb000c,0x1a00000c,0x1a05000c,0x1a09000c,0x1a0d000c,0x1a11000c,0x1a15000c,0x1a1a000c,0x1a1f000c,0x1a24000c,0x1a29000c,0x1a2e000c,0x1a33000c,0x1a38000c,
+0x1a3d000c,0x1a42000c,0x1a47000c,0x1a4b000c,0x1a4f000c,0x1a53000c,0x1a57000c,0x1a5b000c,0x1a5f000c,0x1a63000c,0,0,0,0,0,0,
+0x1a68004c,0x1a6d004c,0x1a72004c,0x1a78004c,0x1a7e004c,0x1a84004c,0x1a8a004c,0x1a90004c,0x1a96004c,0x1a9b004c,0x1aa0004c,0x1aa6004c,0x1aac004c,0x1ab2004c,0x1ab8004c,0x1abe004c,
+0x1ac4004c,0x1ac9004c,0x1acd000c,0x1ad2000c,0x1ad7000c,0x1adc000c,0,0,0x1ae2004c,0x1ae7004c,0x1aeb000c,0x1af0000c,0x1af5000c,0x1afa000c,0,0,
+0x1b00004c,0x1b05004c,0x1b0a004c,0x1b10004c,0x1b16004c,0x1b1c004c,0x1b22004c,0x1b28004c,0x1b2e004c,0x1b33004c,0x1b38004c,0x1b3e004c,0x1b44004c,0x1b4a004c,0x1b50004c,0x1b56004c,
+0x1b5c004c,0x1b61004c,0x1b65000c,0x1b6a000c,0x1b6f000c,0x1b74000c,0x1b79000c,0x1b7e000c,0x1b84004c,0x1b89004c,0x1b8d000c,0x1b92000c,0x1b97000c,0x1b9c000c,0x1ba1000c,0x1ba6000c,
+0x1bac004c,0x1bb1004c,0x1bb5000c,0x1bba000c,0x1bbf000c,0x1bc4000c,0,0,0x1bca004c,0x1bcf004c,0x1bd3000c,0x1bd8000c,0x1bdd000c,0x1be2000c,0,0,
+0x1be8004c,0x1bed004c,0x1bf1000c,0x1bf6000c,0x1bfb000c,0x1c00000c,0x1c05000c,0x1c0a000c,0,0x1c10004c,0,0x1c14000c,0,0x1c19000c,0,0x1c1e000c,
+0x1c9e000c,0x1ca3000c,0x1ca8000c,0x1cae000c,0x1cb4000c,0x1cba000c,0x1cc0000c,0x1cc6000c,0x1ccc000c,0x1cd1000c,0x1cd6000c,0x1cdc000c,0x1ce2000c,0x1ce8000c,0x1cee000c,0x1cf4000c,
+0x1cfa000c,0x1cff000c,0x1d04000c,0x1d0a000c,0x1d10000c,0x1d16000c,0x1d1c000c,0x1d22000c,0x1d28000c,0x1d2d000c,0x1d32000c,0x1d38000c,0x1d3e000c,0x1d44000c,0x1d4a000c,0x1d50000c,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x3df80040,0,0x3df90040,0,0x3dfa0040,0,0,0,0,0,0x1eba000c,0x1ebe000c,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0x1ec2000c,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0x1ec6000c,0x1eca000c,0x1ece000c,
+0x3dfb0040,0,0x3dfd0040,0,0x3dfc0040,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0x3dfe0040,0x1ed2000c,0,0,0,0x3dff0040,0x1ed6000c,0,0x3e000040,0x1eda000c,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0x3e010040,0x1ede000c,0x3e020040,0x1ee2000c,0,0,0,0,0,0x235e000a,0x2361000a,0,0x2365000a,
+0x2368000a,0,0,0,0,0,0,0,0,0,0,0,0x3e030040,0,0,0,
+0,0x1ee6000c,0,0x3e040040,0x1eea000c,0x3e050040,0,0x1eee000c,0x3e060040,0x1ef2000c,0,0,0,0x3e090040,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x1ef6000c,0x3e080040,0x1efa000c,0,0x3e0c0040,0x3e0d0040,0,0,0,0,0,0,0,0x1efe000c,0x1f02000c,0x1f06000c,
+0x1f0a000c,0x1f0e000c,0x3e0e0040,0x3e0f0040,0x1f12000c,0x1f16000c,0x3e100040,0x3e110040,0x1f1a000c,0x1f1e000c,0x3e120040,0x3e130040,0x3e1c0040,0x3e1d0040,0,0,
+0x1f22000c,0x1f26000c,0x3e140040,0x3e150040,0x1f2a000c,0x1f2e000c,0x3e160040,0x3e170040,0x1f32000c,0x1f36000c,0,0,0,0,0,0,
+0,0x3e1e0040,0x3e1f0040,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0x3e180040,0,0,0,0,0,0x3e190040,0x3e1a0040,0,0x3e1b0040,0x1f3a000c,0x1f3e000c,0x1f42000c,0x1f46000c,
+0,0,0x3e200040,0x3e210040,0x3e220040,0x3e230040,0,0,0,0,0,0,0,0,0,0,
+0x1f4a000c,0x1f4e000c,0x1f52000c,0x1f56000c,0,0,0,0,0,0,0x1f5a000c,0x1f5e000c,0x1f62000c,0x1f66000c,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0x3e380040,0,0,0,0,0x3e240040,0x1f6a000c,0x3e250040,0x1f6e000c,0x3e260040,0x1f72000c,0x3e270040,0x1f76000c,0x3e280040,
+0x1f7a000c,0x3e290040,0x1f7e000c,0x3e2a0040,0x1f82000c,0x3e2b0040,0x1f86000c,0x3e2c0040,0x1f8a000c,0x3e2d0040,0x1f8e000c,0x3e2e0040,0x1f92000c,0x3e2f0040,0x1f96000c,0,
+0x3e300040,0x1f9a000c,0x3e310040,0x1f9e000c,0x3e320040,0x1fa2000c,0,0,0,0,0,0x3e330040,0x1fa6000c,0x1faa000c,0x3e340040,0x1fae000c,
+0x1fb2000c,0x3e350040,0x1fb6000c,0x1fba000c,0x3e360040,0x1fbe000c,0x1fc2000c,0x3e370040,0x1fc6000c,0x1fca000c,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x1fce000c,0,0,0,0,0x208708b0,0x208808b0,0x26e1000a,0x26e5000a,0x3e390040,0x1fd2000c,0x26e9000a,0,0,0,0,
+0,0,0x3e4e0040,0,0,0,0,0x3e3a0040,0x1fd6000c,0x3e3b0040,0x1fda000c,0x3e3c0040,0x1fde000c,0x3e3d0040,0x1fe2000c,0x3e3e0040,
+0x1fe6000c,0x3e3f0040,0x1fea000c,0x3e400040,0x1fee000c,0x3e410040,0x1ff2000c,0x3e420040,0x1ff6000c,0x3e430040,0x1ffa000c,0x3e440040,0x1ffe000c,0x3e450040,0x2002000c,0,
+0x3e460040,0x2006000c,0x3e470040,0x200a000c,0x3e480040,0x200e000c,0,0,0,0,0,0x3e490040,0x2012000c,0x2016000c,0x3e4a0040,0x201a000c,
+0x201e000c,0x3e4b0040,0x2022000c,0x2026000c,0x3e4c0040,0x202a000c,0x202e000c,0x3e4d0040,0x2032000c,0x2036000c,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0x3e4f0040,0x3e500040,0x3e510040,0x3e520040,0,
+0x203a000c,0,0,0x203e000c,0x2042000c,0x2046000c,0x204a000c,0,0,0x3e530040,0x204e000c,0x26ec000a,0x2053e6b0,0x2054e6b0,0x2055e6b0,0x2056e6b0,
+0x2057e6b0,0xe600,0x2058e6b0,0x2059e6b0,0x205ae6b0,0x205be6b0,0x205ce6b0,0x205de6b0,0x205ee6b0,0xe600,0xe600,0x205fe6b0,0xe600,0x2060e6b0,0xe600,0x2061e6b0,
+0x2062e6b0,0xe800,0xdc00,0xdc00,0xdc00,0xdc00,0xe800,0x2063d8b0,0xdc00,0xdc00,0xdc00,0xdc00,0xdc00,0xca00,0xca00,0x2064dcb0,
+0x2065dcb0,0x2066dcb0,0x2067dcb0,0x2068cab0,0x2069cab0,0xdc00,0xdc00,0xdc00,0xdc00,0x206adcb0,0x206bdcb0,0xdc00,0x206cdcb0,0x206ddcb0,0xdc00,0xdc00,
+0x100,0x100,0x100,0x100,0x206e01b0,0xdc00,0xdc00,0xdc00,0xdc00,0xe600,0xe600,0xe600,0,0,0,0,
+0,0,0,0,0x3dcb0040,0,0x3dcc0040,0x1b00,0x1c00,0x1d00,0x1e00,0x1f00,0x2000,0x2100,0x2200,0x2071e6b0,
+0x2072e6b0,0x2073dcb0,0xdc00,0xe600,0xe600,0xe600,0xe600,0xe600,0xdc00,0xe600,0xe600,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x700,0,0x207500b0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x700,0,0x207700b0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0x207a00b0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0x208000b0,0,0,0xfff200b0,0xfff200b0,0xfff200b0,
0xfff200b0,0xfff200b0,0xfff200b0,0xfff200b0,0xfff200b0,0xfff200b0,0xfff200b0,0xfff200b0,0xfff200b0,0xfff200b0,0xfff200b0,0xfff200b0,0xfff200b0,0xfff200b0,0xfff200b0,0xfff200b0,
0xfff200b0,0xfff200b0,0,0,0,0,0,0,0,0,0,0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,
0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,
0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x2084000a,0,0,0,0,0,0,0,0x2087004a,0,0x208b000a,0,
-0,0,0,0x208d000a,0,0,0x2091000a,0x2093000a,0x2095000a,0x2099000a,0,0,0x209b000a,0x209f000a,0x20a1000a,0,
-0x20a3000a,0x20a7000a,0x20ab000a,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x20eb000a,0x20ed000a,0x20ef000a,0x20f1000a,0x20f3000a,0x20f5000a,0x20f7000a,0x20f9000a,0x20fb000a,0,0,0,
+0,0,0,0,0x2088000a,0,0,0,0,0,0,0,0x208b004a,0,0x208f000a,0,
+0,0,0,0x2091000a,0,0,0x2095000a,0x2097000a,0x2099000a,0x209d000a,0,0,0x209f000a,0x20a3000a,0x20a5000a,0,
+0x20a7000a,0x20ab000a,0x20af000a,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x20ef000a,0x20f1000a,0x20f3000a,0x20f5000a,0x20f7000a,0x20f9000a,0x20fb000a,0x20fd000a,0x20ff000a,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x20fd000a,0x2101000a,0x2105000a,0x2109000a,0x210d000a,0x2111000a,0,0,
-0x2115000a,0x2117000a,0x2119000a,0x211b000a,0x211d000a,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x2101000a,0x2105000a,0x2109000a,0x210d000a,0x2111000a,0x2115000a,0,0,
+0x2119000a,0x211b000a,0x211d000a,0x211f000a,0x2121000a,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0x2133000a,0,0,0,0,0,0,0,0,0,0xdc00,0xe600,0xe600,
+0,0,0,0x2137000a,0,0,0,0,0,0,0,0,0,0xdc00,0xe600,0xe600,
0xe600,0xe600,0xdc00,0xe600,0xe600,0xe600,0xde00,0xdc00,0xe600,0xe600,0xe600,0xe600,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0x2300,0,0,0,
-0,0x2136000a,0x2139000a,0x213c000a,0x213f000a,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0x2142000a,0,0,0,0,
+0,0x213a000a,0x213d000a,0x2140000a,0x2143000a,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0x2146000a,0,0,0,0,
0x6700,0x6700,0x900,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0x2145000a,0,0,0,0,0x7600,0x7600,0,0,
+0,0,0,0,0,0,0,0x2149000a,0,0,0,0,0x7600,0x7600,0,0,
0,0,0,0,0,0,0,0,0x7a00,0x7a00,0x7a00,0x7a00,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x2148000a,0x214b000a,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x214e000a,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x214c000a,0x214f000a,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x2152000a,0,0,0,
0,0,0,0,0,0,0,0,0xdc00,0xdc00,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x215a000a,0,0,0,0x2194000a,0x2196000a,0x2198000a,0x219a000a,
-0x219c000a,0x219e000a,0x21a0000a,0x21a2000a,0x21a4000a,0x21a6000a,0x21a8000a,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x21aa000a,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0x21ac000a,0x21ae000a,0x21b0000a,0x21b2000a,0x21b4000a,0x21b6000a,0x21b8000a,0x21ba000a,0x21bc000a,0x21be000a,0x21c0000a,0x21c2000a,0x21c4000a,
-0x21c6000a,0x21c8000a,0x21ca000a,0x21cc000a,0x21ce000a,0x21d0000a,0x21d2000a,0x21d4000a,0x21d6000a,0x21d8000a,0x21da000a,0x21dc000a,0x21de000a,0x21e0000a,0x21e2000a,0x21e4000a,
-0x21e6000a,0x21e8000a,0x21ea000a,0x21ec000a,0x21ee000a,0x21f0000a,0x21f2000a,0x21f4000a,0,0,0,0,0x2223000a,0x2225000a,0x2228000a,0,
-0,0,0,0,0,0,0,0x222c000a,0,0,0,0x222e000a,0x2231000a,0,0x2235000a,0x2238000a,
-0,0,0,0,0x223c000a,0,0x223f000a,0,0,0,0,0,0,0,0,0x2243000a,
-0x2246000a,0x2249000a,0,0,0,0,0,0,0,0,0,0,0,0,0,0x224c000a,
-0,0,0,0,0,0,0,0x2251000a,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x2253000a,0x2255000a,0,0,0x2257000a,0x2259000a,0x225b000a,0x225d000a,
-0x225f000a,0x2261000a,0x2263000a,0x2265000a,0x2267000a,0x2269000a,0x226b000a,0x226d000a,0x226f000a,0x2271000a,0x2273000a,0x2275000a,0x2277000a,0x2279000a,0x227b000a,0x227d000a,
-0x227f000a,0x2281000a,0x2283000a,0x2285000a,0x2287000a,0x2289000a,0x228b000a,0,0x228d000a,0x228f000a,0x2291000a,0x2293000a,0x2295000a,0,0,0,
-0,0,0,0,0,0,0,0,0x22fe000a,0x2300000a,0x2303000a,0x2307000a,0x230a000a,0x230c000a,0x230f000a,0x2313000a,
-0x2318000a,0x231b000a,0x231d000a,0x2320000a,0x2324000a,0x2326000a,0x2328000a,0x232a000a,0x232c000a,0x232e000a,0x2331000a,0x2335000a,0x2338000a,0x233a000a,0x233d000a,0x2341000a,
-0x2346000a,0x2349000a,0x234b000a,0x234e000a,0x2352000a,0x2354000a,0x2356000a,0x2358000a,0x2368000a,0x236a000a,0x236c000a,0x236e000a,0x2370000a,0x2372000a,0x2374000a,0x2376000a,
-0x2378000a,0x237a000a,0x237d000a,0x2380000a,0x2383000a,0x2386000a,0x2389000a,0x238c000a,0x238f000a,0x2392000a,0x2395000a,0x2398000a,0x239b000a,0x239f000a,0x23a3000a,0x23a7000a,
-0x23ab000a,0x23af000a,0x23b3000a,0x23b7000a,0x23bb000a,0x23bf000a,0x23c4000a,0x23c9000a,0x23ce000a,0x23d3000a,0x23d8000a,0x23dd000a,0x23e2000a,0x23e7000a,0x23ec000a,0x23f1000a,
-0x23f6000a,0x23f9000a,0x23fc000a,0x23ff000a,0x2402000a,0x2405000a,0x2408000a,0x240b000a,0x240e000a,0x2411000a,0x2415000a,0x2419000a,0x241d000a,0x2421000a,0x2425000a,0x2429000a,
-0x242d000a,0x2431000a,0x2435000a,0x2439000a,0x243d000a,0x2441000a,0x2445000a,0x2449000a,0x244d000a,0x2451000a,0x2455000a,0x2459000a,0x245d000a,0x2461000a,0x2465000a,0x2469000a,
-0x246d000a,0x2471000a,0x2475000a,0x2479000a,0x247d000a,0x2481000a,0x2485000a,0x2489000a,0x248d000a,0x2491000a,0x2495000a,0x2499000a,0x249d000a,0x24a1000a,0x24a5000a,0x24a7000a,
-0x24a9000a,0x24ab000a,0x24ad000a,0x24af000a,0x24b1000a,0x24b3000a,0x24b5000a,0x24b7000a,0x24b9000a,0x24bb000a,0x24bd000a,0x24bf000a,0x24c1000a,0x24c3000a,0x24c5000a,0x24c7000a,
-0x24c9000a,0x24cb000a,0x24cd000a,0x24cf000a,0x24d1000a,0x24d3000a,0x24d5000a,0x24d7000a,0x24d9000a,0x24db000a,0x24dd000a,0x24df000a,0x24e1000a,0x24e3000a,0x24e5000a,0x24e7000a,
-0x24e9000a,0x24eb000a,0x24ed000a,0x24ef000a,0x24f1000a,0x24f3000a,0x24f5000a,0x24f7000a,0x24f9000a,0x24fb000a,0x24fd000a,0x24ff000a,0x2501000a,0x2503000a,0x2505000a,0x2507000a,
-0x2509000a,0x250b000a,0x250d000a,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x250f000a,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x2514000a,0x2518000a,0x251b000a,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0x251f000a,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0x2521000a,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0x2523000a,0,0,0,0,0,0,0,0,
-0,0,0,0,0x2525000a,0x2527000a,0x2529000a,0x252b000a,0x252d000a,0x252f000a,0x2531000a,0x2533000a,0x2535000a,0x2537000a,0x2539000a,0x253b000a,
-0x253d000a,0x253f000a,0x2541000a,0x2543000a,0x2545000a,0x2547000a,0x2549000a,0x254b000a,0x254d000a,0x254f000a,0x2551000a,0x2553000a,0x2555000a,0x2557000a,0x2559000a,0x255b000a,
-0x255d000a,0x255f000a,0x2561000a,0x2563000a,0x2565000a,0x2567000a,0x2569000a,0x256b000a,0x256d000a,0x256f000a,0x2571000a,0x2573000a,0x2575000a,0x2577000a,0x2579000a,0x257b000a,
-0x257d000a,0x257f000a,0x2581000a,0x2583000a,0x2585000a,0x2587000a,0x2589000a,0x258b000a,0x258d000a,0x258f000a,0x2591000a,0x2593000a,0x2595000a,0x2597000a,0x2599000a,0x259b000a,
-0x259d000a,0x259f000a,0x25a1000a,0x25a3000a,0x25a5000a,0x25a7000a,0x25a9000a,0x25ab000a,0x25ad000a,0x25af000a,0x25b1000a,0x25b3000a,0x25b5000a,0x25b7000a,0x25b9000a,0x25bb000a,
-0x25bd000a,0x25bf000a,0x25c1000a,0x25c3000a,0x25c5000a,0x25c7000a,0x25c9000a,0x25cb000a,0x25cd000a,0x25cf000a,0x25d1000a,0x25d3000a,0x25d5000a,0x25d7000a,0x25d9000a,0x25db000a,
-0x25dd000a,0x25df000a,0x25e1000a,0x25e3000a,0x25e5000a,0x25e7000a,0x25e9000a,0x25eb000a,0x25ed000a,0x25ef000a,0x25f1000a,0x25f3000a,0x25f5000a,0x25f7000a,0x25f9000a,0x25fb000a,
-0x25fd000a,0x25ff000a,0x2601000a,0x2603000a,0x2605000a,0x2607000a,0x2609000a,0x260b000a,0x260d000a,0x260f000a,0x2611000a,0x2613000a,0x2615000a,0x2617000a,0x2619000a,0x261b000a,
-0x261d000a,0x261f000a,0x2621000a,0x2623000a,0x2625000a,0x2627000a,0x2629000a,0x262b000a,0x262d000a,0x262f000a,0x2631000a,0x2633000a,0x2635000a,0x2637000a,0x2639000a,0x263b000a,
-0x263d000a,0x263f000a,0x2641000a,0x2643000a,0x2645000a,0x2647000a,0x2649000a,0x264b000a,0x264d000a,0x264f000a,0x2651000a,0x2653000a,0x2655000a,0x2657000a,0x2659000a,0x265b000a,
-0x265d000a,0x265f000a,0x2661000a,0x2663000a,0x2665000a,0x2667000a,0x2669000a,0x266b000a,0x266d000a,0x266f000a,0x2671000a,0x2673000a,0x2675000a,0x2677000a,0x2679000a,0x267b000a,
-0x267d000a,0x267f000a,0x2681000a,0x2683000a,0x2685000a,0x2687000a,0x2689000a,0x268b000a,0x268d000a,0x268f000a,0x2691000a,0x2693000a,0x2695000a,0x2697000a,0x2699000a,0x269b000a,
-0x269d000a,0x269f000a,0x26a1000a,0x26a3000a,0x26a5000a,0x26a7000a,0x26a9000a,0x26ab000a,0x26ad000a,0x26af000a,0x26b1000a,0x26b3000a,0x26b5000a,0x26b7000a,0x26b9000a,0x26bb000a,
-0x26bd000a,0x26bf000a,0x26c1000a,0x26c3000a,0x26c5000a,0x26c7000a,0x26c9000a,0x26cb000a,0x26cd000a,0x26cf000a,0,0,0,0,0,0,
-0,0,0,0,0x26d1000a,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x215e000a,0,0,0,0x2198000a,0x219a000a,0x219c000a,0x219e000a,
+0x21a0000a,0x21a2000a,0x21a4000a,0x21a6000a,0x21a8000a,0x21aa000a,0x21ac000a,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x21ae000a,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0x21b0000a,0x21b2000a,0x21b4000a,0x21b6000a,0x21b8000a,0x21ba000a,0x21bc000a,0x21be000a,0x21c0000a,0x21c2000a,0x21c4000a,0x21c6000a,0x21c8000a,
+0x21ca000a,0x21cc000a,0x21ce000a,0x21d0000a,0x21d2000a,0x21d4000a,0x21d6000a,0x21d8000a,0x21da000a,0x21dc000a,0x21de000a,0x21e0000a,0x21e2000a,0x21e4000a,0x21e6000a,0x21e8000a,
+0x21ea000a,0x21ec000a,0x21ee000a,0x21f0000a,0x21f2000a,0x21f4000a,0x21f6000a,0x21f8000a,0,0,0,0,0x2227000a,0x2229000a,0x222c000a,0,
+0,0,0,0,0,0,0,0x2230000a,0,0,0,0x2232000a,0x2235000a,0,0x2239000a,0x223c000a,
+0,0,0,0,0x2240000a,0,0x2243000a,0,0,0,0,0,0,0,0,0x2247000a,
+0x224a000a,0x224d000a,0,0,0,0,0,0,0,0,0,0,0,0,0,0x2250000a,
+0,0,0,0,0,0,0,0x2255000a,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x2257000a,0x2259000a,0,0,0x225b000a,0x225d000a,0x225f000a,0x2261000a,
+0x2263000a,0x2265000a,0x2267000a,0x2269000a,0x226b000a,0x226d000a,0x226f000a,0x2271000a,0x2273000a,0x2275000a,0x2277000a,0x2279000a,0x227b000a,0x227d000a,0x227f000a,0x2281000a,
+0x2283000a,0x2285000a,0x2287000a,0x2289000a,0x228b000a,0x228d000a,0x228f000a,0,0x2291000a,0x2293000a,0x2295000a,0x2297000a,0x2299000a,0,0,0,
+0,0,0,0,0,0,0,0,0x2302000a,0x2304000a,0x2307000a,0x230b000a,0x230e000a,0x2310000a,0x2313000a,0x2317000a,
+0x231c000a,0x231f000a,0x2321000a,0x2324000a,0x2328000a,0x232a000a,0x232c000a,0x232e000a,0x2330000a,0x2332000a,0x2335000a,0x2339000a,0x233c000a,0x233e000a,0x2341000a,0x2345000a,
+0x234a000a,0x234d000a,0x234f000a,0x2352000a,0x2356000a,0x2358000a,0x235a000a,0x235c000a,0x236c000a,0x236e000a,0x2370000a,0x2372000a,0x2374000a,0x2376000a,0x2378000a,0x237a000a,
+0x237c000a,0x237e000a,0x2381000a,0x2384000a,0x2387000a,0x238a000a,0x238d000a,0x2390000a,0x2393000a,0x2396000a,0x2399000a,0x239c000a,0x239f000a,0x23a3000a,0x23a7000a,0x23ab000a,
+0x23af000a,0x23b3000a,0x23b7000a,0x23bb000a,0x23bf000a,0x23c3000a,0x23c8000a,0x23cd000a,0x23d2000a,0x23d7000a,0x23dc000a,0x23e1000a,0x23e6000a,0x23eb000a,0x23f0000a,0x23f5000a,
+0x23fa000a,0x23fd000a,0x2400000a,0x2403000a,0x2406000a,0x2409000a,0x240c000a,0x240f000a,0x2412000a,0x2415000a,0x2419000a,0x241d000a,0x2421000a,0x2425000a,0x2429000a,0x242d000a,
+0x2431000a,0x2435000a,0x2439000a,0x243d000a,0x2441000a,0x2445000a,0x2449000a,0x244d000a,0x2451000a,0x2455000a,0x2459000a,0x245d000a,0x2461000a,0x2465000a,0x2469000a,0x246d000a,
+0x2471000a,0x2475000a,0x2479000a,0x247d000a,0x2481000a,0x2485000a,0x2489000a,0x248d000a,0x2491000a,0x2495000a,0x2499000a,0x249d000a,0x24a1000a,0x24a5000a,0x24a9000a,0x24ab000a,
+0x24ad000a,0x24af000a,0x24b1000a,0x24b3000a,0x24b5000a,0x24b7000a,0x24b9000a,0x24bb000a,0x24bd000a,0x24bf000a,0x24c1000a,0x24c3000a,0x24c5000a,0x24c7000a,0x24c9000a,0x24cb000a,
+0x24cd000a,0x24cf000a,0x24d1000a,0x24d3000a,0x24d5000a,0x24d7000a,0x24d9000a,0x24db000a,0x24dd000a,0x24df000a,0x24e1000a,0x24e3000a,0x24e5000a,0x24e7000a,0x24e9000a,0x24eb000a,
+0x24ed000a,0x24ef000a,0x24f1000a,0x24f3000a,0x24f5000a,0x24f7000a,0x24f9000a,0x24fb000a,0x24fd000a,0x24ff000a,0x2501000a,0x2503000a,0x2505000a,0x2507000a,0x2509000a,0x250b000a,
+0x250d000a,0x250f000a,0x2511000a,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x2513000a,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x2518000a,0x251c000a,0x251f000a,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0x2525000a,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0x2527000a,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0x2529000a,0,0,0,0,0,0,0,0,
+0,0,0,0,0x252b000a,0x252d000a,0x252f000a,0x2531000a,0x2533000a,0x2535000a,0x2537000a,0x2539000a,0x253b000a,0x253d000a,0x253f000a,0x2541000a,
+0x2543000a,0x2545000a,0x2547000a,0x2549000a,0x254b000a,0x254d000a,0x254f000a,0x2551000a,0x2553000a,0x2555000a,0x2557000a,0x2559000a,0x255b000a,0x255d000a,0x255f000a,0x2561000a,
+0x2563000a,0x2565000a,0x2567000a,0x2569000a,0x256b000a,0x256d000a,0x256f000a,0x2571000a,0x2573000a,0x2575000a,0x2577000a,0x2579000a,0x257b000a,0x257d000a,0x257f000a,0x2581000a,
+0x2583000a,0x2585000a,0x2587000a,0x2589000a,0x258b000a,0x258d000a,0x258f000a,0x2591000a,0x2593000a,0x2595000a,0x2597000a,0x2599000a,0x259b000a,0x259d000a,0x259f000a,0x25a1000a,
+0x25a3000a,0x25a5000a,0x25a7000a,0x25a9000a,0x25ab000a,0x25ad000a,0x25af000a,0x25b1000a,0x25b3000a,0x25b5000a,0x25b7000a,0x25b9000a,0x25bb000a,0x25bd000a,0x25bf000a,0x25c1000a,
+0x25c3000a,0x25c5000a,0x25c7000a,0x25c9000a,0x25cb000a,0x25cd000a,0x25cf000a,0x25d1000a,0x25d3000a,0x25d5000a,0x25d7000a,0x25d9000a,0x25db000a,0x25dd000a,0x25df000a,0x25e1000a,
+0x25e3000a,0x25e5000a,0x25e7000a,0x25e9000a,0x25eb000a,0x25ed000a,0x25ef000a,0x25f1000a,0x25f3000a,0x25f5000a,0x25f7000a,0x25f9000a,0x25fb000a,0x25fd000a,0x25ff000a,0x2601000a,
+0x2603000a,0x2605000a,0x2607000a,0x2609000a,0x260b000a,0x260d000a,0x260f000a,0x2611000a,0x2613000a,0x2615000a,0x2617000a,0x2619000a,0x261b000a,0x261d000a,0x261f000a,0x2621000a,
+0x2623000a,0x2625000a,0x2627000a,0x2629000a,0x262b000a,0x262d000a,0x262f000a,0x2631000a,0x2633000a,0x2635000a,0x2637000a,0x2639000a,0x263b000a,0x263d000a,0x263f000a,0x2641000a,
+0x2643000a,0x2645000a,0x2647000a,0x2649000a,0x264b000a,0x264d000a,0x264f000a,0x2651000a,0x2653000a,0x2655000a,0x2657000a,0x2659000a,0x265b000a,0x265d000a,0x265f000a,0x2661000a,
+0x2663000a,0x2665000a,0x2667000a,0x2669000a,0x266b000a,0x266d000a,0x266f000a,0x2671000a,0x2673000a,0x2675000a,0x2677000a,0x2679000a,0x267b000a,0x267d000a,0x267f000a,0x2681000a,
+0x2683000a,0x2685000a,0x2687000a,0x2689000a,0x268b000a,0x268d000a,0x268f000a,0x2691000a,0x2693000a,0x2695000a,0x2697000a,0x2699000a,0x269b000a,0x269d000a,0x269f000a,0x26a1000a,
+0x26a3000a,0x26a5000a,0x26a7000a,0x26a9000a,0x26ab000a,0x26ad000a,0x26af000a,0x26b1000a,0x26b3000a,0x26b5000a,0x26b7000a,0x26b9000a,0x26bb000a,0x26bd000a,0x26bf000a,0x26c1000a,
+0x26c3000a,0x26c5000a,0x26c7000a,0x26c9000a,0x26cb000a,0x26cd000a,0x26cf000a,0x26d1000a,0x26d3000a,0x26d5000a,0,0,0,0,0,0,
+0,0,0,0,0x26d7000a,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0xda00,0xe400,0xe800,0xde00,0xe000,0xe000,0,0,0,0,
-0,0,0x26d3000a,0,0x26d5000a,0x26d7000a,0x26d9000a,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0x26e9000a,0x26eb000a,0x26ed000a,0x26ef000a,0x26f1000a,0x26f3000a,0x26f5000a,
-0x26f7000a,0x26f9000a,0x26fb000a,0x26fd000a,0x26ff000a,0x2701000a,0x2703000a,0x2705000a,0x2707000a,0x2709000a,0x270b000a,0x270d000a,0x270f000a,0x2711000a,0x2713000a,0x2715000a,
-0x2717000a,0x2719000a,0x271b000a,0x271d000a,0x271f000a,0x2721000a,0x2723000a,0x2725000a,0x2727000a,0x2729000a,0x272b000a,0x272d000a,0x272f000a,0x2731000a,0x2733000a,0x2735000a,
-0x2737000a,0x2739000a,0x273b000a,0x273d000a,0x273f000a,0x2741000a,0x2743000a,0x2745000a,0x2747000a,0x2749000a,0x274b000a,0x274d000a,0x274f000a,0x2751000a,0x2753000a,0x2755000a,
-0x2757000a,0x2759000a,0x275b000a,0x275d000a,0x275f000a,0x2761000a,0x2763000a,0x2765000a,0x2767000a,0x2769000a,0x276b000a,0x276d000a,0x276f000a,0x2771000a,0x2773000a,0x2775000a,
-0x2777000a,0x2779000a,0x277b000a,0x277d000a,0x277f000a,0x2781000a,0x2783000a,0x2785000a,0x2787000a,0x2789000a,0x278b000a,0x278d000a,0x278f000a,0x2791000a,0x2793000a,0x2795000a,
-0x2797000a,0x2799000a,0x279b000a,0x279d000a,0x279f000a,0x27a1000a,0x27a3000a,0,0,0,0x27a5000a,0x27a7000a,0x27a9000a,0x27ab000a,0x27ad000a,0x27af000a,
-0x27b1000a,0x27b3000a,0x27b5000a,0x27b7000a,0x27b9000a,0x27bb000a,0x27bd000a,0x27bf000a,0x27c1000a,0x27c5000a,0x27c9000a,0x27cd000a,0x27d1000a,0x27d5000a,0x27d9000a,0x27dd000a,
-0x27e1000a,0x27e5000a,0x27e9000a,0x27ed000a,0x27f1000a,0x27f5000a,0x27f9000a,0x27fe000a,0x2803000a,0x2808000a,0x280d000a,0x2812000a,0x2817000a,0x281c000a,0x2821000a,0x2826000a,
-0x282b000a,0x2830000a,0x2835000a,0x283a000a,0x283f000a,0x2844000a,0x284c000a,0,0x2853000a,0x2857000a,0x285b000a,0x285f000a,0x2863000a,0x2867000a,0x286b000a,0x286f000a,
-0x2873000a,0x2877000a,0x287b000a,0x287f000a,0x2883000a,0x2887000a,0x288b000a,0x288f000a,0x2893000a,0x2897000a,0x289b000a,0x289f000a,0x28a3000a,0x28a7000a,0x28ab000a,0x28af000a,
-0x28b3000a,0x28b7000a,0x28bb000a,0x28bf000a,0x28c3000a,0x28c7000a,0x28cb000a,0x28cf000a,0x2910000a,0x2912000a,0x2914000a,0x2916000a,0x2918000a,0x291a000a,0x291c000a,0x291e000a,
-0x2920000a,0x2922000a,0x2924000a,0x2926000a,0x2928000a,0x292a000a,0x292c000a,0x292f000a,0x2932000a,0x2935000a,0x2938000a,0x293b000a,0x293e000a,0x2941000a,0x2944000a,0x2947000a,
-0x294a000a,0x294d000a,0x2950000a,0x2953000a,0x2956000a,0x295c000a,0x2961000a,0,0x2964000a,0x2966000a,0x2968000a,0x296a000a,0x296c000a,0x296e000a,0x2970000a,0x2972000a,
-0x2974000a,0x2976000a,0x2978000a,0x297a000a,0x297c000a,0x297e000a,0x2980000a,0x2982000a,0x2984000a,0x2986000a,0x2988000a,0x298a000a,0x298c000a,0x298e000a,0x2990000a,0x2992000a,
-0x2994000a,0x2996000a,0x2998000a,0x299a000a,0x299c000a,0x299e000a,0x29a0000a,0x29a2000a,0x29a4000a,0x29a6000a,0x29a8000a,0x29aa000a,0x29ac000a,0x29ae000a,0x29b0000a,0x29b2000a,
-0x29b4000a,0x29b6000a,0x29b8000a,0x29ba000a,0x29bc000a,0x29be000a,0x29c0000a,0x29c2000a,0x29c4000a,0x29c6000a,0x29c9000a,0x29cc000a,0x29cf000a,0x29d2000a,0x29d5000a,0x29d8000a,
-0x29db000a,0x29de000a,0x29e1000a,0x29e4000a,0x29e7000a,0x29ea000a,0x29ed000a,0x29f0000a,0x2a3e000a,0x2a40000a,0x2a42000a,0x2a44000a,0x2a46000a,0x2a48000a,0x2a4a000a,0x2a4c000a,
-0x2a4e000a,0x2a50000a,0x2a52000a,0x2a54000a,0x2a56000a,0x2a58000a,0x2a5a000a,0x2a5c000a,0x2a5e000a,0x2a60000a,0x2a62000a,0x2a64000a,0x2a66000a,0x2a68000a,0x2a6a000a,0x2a6c000a,
-0x2a6e000a,0x2a70000a,0x2a72000a,0x2a74000a,0x2a76000a,0x2a78000a,0x2a7a000a,0,0x2a7c000a,0x2a82000a,0x2a87000a,0x2a8d000a,0x2a91000a,0x2a98000a,0x2a9c000a,0x2aa0000a,
-0x2aa8000a,0x2aad000a,0x2ab1000a,0x2ab5000a,0x2ab9000a,0x2abe000a,0x2ac3000a,0x2ac8000a,0x2acd000a,0x2ad3000a,0x2ad8000a,0x2add000a,0x2ae4000a,0x2ae7000a,0x2aee000a,0x2af5000a,
-0x2afb000a,0x2b00000a,0x2b07000a,0x2b0e000a,0x2b13000a,0x2b17000a,0x2b1b000a,0x2b21000a,0x2b26000a,0x2b2c000a,0x2b33000a,0x2b37000a,0x2b3b000a,0x2b40000a,0x2b44000a,0x2b48000a,
-0x2b4b000a,0x2b4e000a,0x2b52000a,0x2b56000a,0x2b5d000a,0x2b62000a,0x2b68000a,0x2b6f000a,0x2b74000a,0x2b78000a,0x2b7c000a,0x2b84000a,0x2b89000a,0x2b90000a,0x2b94000a,0x2b9a000a,
-0x2b9e000a,0x2ba3000a,0x2ba7000a,0x2bac000a,0x2bb3000a,0x2bb8000a,0x2bbe000a,0x2bc3000a,0x2bc6000a,0x2bcd000a,0x2bd1000a,0x2bd5000a,0x2bda000a,0x2bde000a,0x2be2000a,0x2be6000a,
-0x2bec000a,0x2bf1000a,0x2bf4000a,0x2bfb000a,0x2c00000a,0x2c06000a,0x2c0b000a,0x2c11000a,0x2c15000a,0x2c19000a,0x2c1e000a,0x2c21000a,0x2c26000a,0x2c2c000a,0x2c2f000a,0x2c36000a,
-0x2c3a000a,0x2c3d000a,0x2c40000a,0x2c43000a,0x2c46000a,0x2c49000a,0x2c4c000a,0x2c4f000a,0x2d62000a,0x2d65000a,0x2d68000a,0x2d6b000a,0x2d6e000a,0x2d71000a,0x2d74000a,0x2d77000a,
-0x2d7a000a,0x2d7d000a,0x2d81000a,0x2d85000a,0x2d89000a,0x2d8d000a,0x2d91000a,0x2d95000a,0x2d99000a,0x2d9d000a,0x2da1000a,0x2da5000a,0x2da9000a,0x2dad000a,0x2db1000a,0x2db5000a,
-0x2db9000a,0x2dbd000a,0x2dc1000a,0x2dc5000a,0x2dc9000a,0x2dcd000a,0x2dd1000a,0x2dd5000a,0x2e36000a,0x2e38000a,0x2e3a000a,0x2e3c000a,0x2e3e000a,0x2e40000a,0x2e42000a,0x2e44000a,
-0x2e46000a,0x2e48000a,0x2e4a000a,0x2e4c000a,0x2e4e000a,0x2e50000a,0x2e52000a,0x2e54000a,0x2e56000a,0x2e58000a,0x2e5a000a,0x2e5c000a,0x2e5e000a,0x2e60000a,0x2e62000a,0x2e64000a,
-0x2e66000a,0x2e68000a,0x2e6a000a,0x2e6c000a,0x2e6e000a,0x2e70000a,0x2e72000a,0x2e74000a,0x2e76000a,0x2e78000a,0x2e7a000a,0x2e7c000a,0x2e7e000a,0x2e80000a,0x2e82000a,0x2e84000a,
-0x2e86000a,0x2e88000a,0x2e8a000a,0x2e8c000a,0x2e8e000a,0x2e90000a,0x2e92000a,0x2e94000a,0x2e96000a,0x2e98000a,0x2e9a000a,0x2e9c000a,0x2e9e000a,0x2ea0000a,0x2ea2000a,0x2ea4000a,
-0x2ea6000a,0x2ea8000a,0x2eaa000a,0x2eac000a,0x2eae000a,0x2eb0000a,0x2eb2000a,0x2eb4000a,0x2eb6000a,0x2eb8000a,0x2eba000a,0x2ebc000a,0x2ebe000a,0x2ec2000a,0x2ec6000a,0x2ec8000a,
-0x2eca000a,0x2ecc000a,0x2ece000a,0x2ed0000a,0x2ed2000a,0x2ed4000a,0x2ed6000a,0x2ed8000a,0x2eda000a,0x2ede000a,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x2ee2000a,
-0x2ee4000a,0x2ee6000a,0x2ee8000a,0x2eea000a,0x2eec000a,0x2eee000a,0x2ef0000a,0x2ef2000a,0x2ef4000a,0x2ef6000a,0x2ef9000a,0x2efb000a,0x2efd000a,0x2eff000a,0x2f01000a,0x2f03000a,
-0x2f05000a,0x2f07000a,0x2f09000a,0x2f0b000a,0x2f0d000a,0x2f0f000a,0x2f11000a,0x2f15000a,0x2f19000a,0x2f1d000a,0x2f21000a,0x2f25000a,0x2f29000a,0x2f2d000a,0x2f31000a,0x2f35000a,
-0x2f39000a,0x2f3d000a,0x2f41000a,0x2f45000a,0x2f49000a,0x2f4d000a,0x2f51000a,0x2f55000a,0x2f59000a,0x2f5b000a,0x2f5d000a,0x2f5f000a,0x2f61000a,0x2f65000a,0x2f69000a,0x2f6d000a,
-0x2f71000a,0x2f75000a,0x2f78000a,0x2f7b000a,0x2f7e000a,0x2f81000a,0x2f84000a,0x2f87000a,0x2f8a000a,0x2f8d000a,0x2f90000a,0x2f93000a,0x2f96000a,0x2f99000a,0x2f9c000a,0x2f9f000a,
-0x2fa2000a,0x2fa5000a,0x2fa8000a,0x2fab000a,0x2fae000a,0x2fb1000a,0x2fb4000a,0x2fb7000a,0x2fba000a,0x2fbd000a,0x2fc0000a,0x2fc3000a,0x2fc6000a,0x2fc9000a,0x2fcc000a,0x2fcf000a,
-0x2fd2000a,0x2fd5000a,0x2fd8000a,0x2fdb000a,0x2fde000a,0x2fe1000a,0x2fe4000a,0x2fe7000a,0x2fea000a,0x2fed000a,0x2ff0000a,0x2ff3000a,0x2ff6000a,0x2ff9000a,0x2ffc000a,0x2fff000a,
-0x3002000a,0x3005000a,0x3008000a,0x300b000a,0x300e000a,0x3011000a,0x3014000a,0x3017000a,0x301a000a,0x301d000a,0x3020000a,0x3023000a,0x3026000a,0x3029000a,0x302c000a,0x302f000a,
-0x3032000a,0x3035000a,0x3038000a,0x303b000a,0x303e000a,0x3041000a,0x3044000a,0x3047000a,0x304a000a,0x304d000a,0x3050000a,0x3053000a,0x3056000a,0x3059000a,0x305c000a,0x305f000a,
-0x3062000a,0x3065000a,0x3068000a,0x306b000a,0x306e000a,0x3071000a,0x3074000a,0x3077000a,0x307b000a,0x307f000a,0x3083000a,0x3088000a,0x308d000a,0x3092000a,0x3097000a,0x309c000a,
-0x30a1000a,0x30a5000a,0x30a9000a,0x30ad000a,0x30b1000a,0x30b5000a,0x30b9000a,0x30bc000a,0x30bf000a,0x30c2000a,0x30c5000a,0x30c8000a,0x30cb000a,0x30ce000a,0x30d1000a,0x30d4000a,
-0x30d7000a,0x30da000a,0x30dd000a,0x30e0000a,0x30e3000a,0x30e6000a,0x30e9000a,0x30ec000a,0x30ef000a,0x30f2000a,0x30f5000a,0x30f8000a,0x30fb000a,0x30fe000a,0x3101000a,0x3104000a,
-0x3107000a,0x310a000a,0x310d000a,0x3110000a,0x3113000a,0x3116000a,0x3119000a,0x311c000a,0x311f000a,0x3122000a,0x3125000a,0x3128000a,0x312b000a,0x312f000a,0x3132000a,0x3135000a,
-0x3138000a,0x313b000a,0x313e000a,0x3141000a,0x3145000a,0x3149000a,0x314d000a,0x3151000a,0x3155000a,0x3158000a,0x315b000a,0x315e000a,0x3161000a,0x3164000a,0x3167000a,0x316a000a,
-0x316d000a,0x3170000a,0x3173000a,0x3176000a,0x3179000a,0x317c000a,0x317f000a,0x3182000a,0x3185000a,0x3188000a,0x318b000a,0x318e000a,0x3191000a,0x3194000a,0x3197000a,0x319a000a,
-0x319d000a,0x31a0000a,0x31a3000a,0x31a6000a,0x31a9000a,0x31ac000a,0x31af000a,0x31b2000a,0x31b5000a,0x31b8000a,0x31bb000a,0x31be000a,0x31c1000a,0x31c4000a,0x31c7000a,0x31ca000a,
-0x31cd000a,0x31d0000a,0x31d3000a,0x31d6000a,0x31d9000a,0x31dc000a,0x31df000a,0x31e2000a,0x31e5000a,0x31e8000a,0x31eb000a,0x31ee000a,0x31f1000a,0x31f4000a,0x31f7000a,0x31fa000a,
-0x31fd000a,0x3200000a,0x3203000a,0x3206000a,0x3209000a,0x320c000a,0x3210000a,0x3213000a,0x3216000a,0x3219000a,0x321c000a,0x321f000a,0x3223000a,0x3227000a,0x322a000a,0x322d000a,
-0x3230000a,0x3233000a,0x3236000a,0x3239000a,0x323c000a,0x323f000a,0x3242000a,0x3245000a,0x3248000a,0x324b000a,0x324e000a,0x3251000a,0x3254000a,0x3257000a,0x325a000a,0x325f000a,
-0x3264000a,0x3269000a,0x326c000a,0x326f000a,0x3272000a,0x3275000a,0x3278000a,0x327b000a,0x327e000a,0x3281000a,0x3284000a,0x3287000a,0x328a000a,0x328d000a,0x3290000a,0x3293000a,
-0x3296000a,0x3299000a,0x329c000a,0x329f000a,0x32a2000a,0x32a5000a,0x32a8000a,0x32ab000a,0x32ae000a,0x32b1000a,0x32b4000a,0x32b7000a,0x32ba000a,0x32bd000a,0x32c0000a,0x32c3000a,
-0x32c6000a,0x32c9000a,0x32cc000a,0x32cf000a,0x32d2000a,0x32d5000a,0x32d8000a,0x32db000a,0x32de000a,0x32e1000a,0x32e4000a,0x32e7000a,0x32ea000a,0x32ed000a,0x32f0000a,0x32f3000a,
-0x32f6000a,0x32f9000a,0x32fc000a,0x32ff000a,0x3302000a,0x3305000a,0x3308000a,0x330b000a,0x330e000a,0x3311000a,0x3314000a,0x3317000a,0x331a000a,0x331d000a,0x3320000a,0x3323000a,
-0x3326000a,0x3329000a,0x332c000a,0x332f000a,0x3332000a,0x3335000a,0x3338000a,0x333b000a,0x333e000a,0x3342000a,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x3346000a,0x334a000a,0x334e000a,0x3352000a,
-0x3356000a,0x335a000a,0x335e000a,0x3362000a,0x3366000a,0x336a000a,0x336e000a,0x3372000a,0x3376000a,0x337a000a,0x337e000a,0x3382000a,0x3386000a,0x338a000a,0x338e000a,0x3392000a,
-0x3396000a,0x339a000a,0x339e000a,0x33a2000a,0x33a6000a,0x33aa000a,0x33ae000a,0x33b2000a,0x33b6000a,0x33ba000a,0x33be000a,0x33c2000a,0x33c6000a,0x33ca000a,0x33ce000a,0x33d2000a,
-0x33d6000a,0x33da000a,0x33de000a,0x33e2000a,0x33e6000a,0x33ea000a,0x33ee000a,0x33f2000a,0x33f6000a,0x33fa000a,0x33fe000a,0x3402000a,0x3406000a,0x340a000a,0x340e000a,0x3412000a,
-0x3416000a,0x341a000a,0x341e000a,0x3422000a,0x3426000a,0x342a000a,0x342e000a,0x3432000a,0x3436000a,0x343a000a,0x343e000a,0x3442000a,0,0,0x3446000a,0x344a000a,
-0x344e000a,0x3452000a,0x3456000a,0x345a000a,0x345e000a,0x3462000a,0x3466000a,0x346a000a,0x346e000a,0x3472000a,0x3476000a,0x347a000a,0x347e000a,0x3482000a,0x3486000a,0x348a000a,
-0x348e000a,0x3492000a,0x3496000a,0x349a000a,0x349e000a,0x34a2000a,0x34a6000a,0x34aa000a,0x34ae000a,0x34b2000a,0x34b6000a,0x34ba000a,0x34be000a,0x34c2000a,0x34c6000a,0x34ca000a,
-0x34ce000a,0x34d2000a,0x34d6000a,0x34da000a,0x34de000a,0x34e2000a,0x34e6000a,0x34ea000a,0x34ee000a,0x34f2000a,0x34f6000a,0x34fa000a,0x34fe000a,0x3502000a,0x3506000a,0x350a000a,
-0x350e000a,0x3512000a,0x3516000a,0x351a000a,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x351e000a,0x3522000a,0x3526000a,0x352b000a,
-0x3530000a,0x3535000a,0x353a000a,0x353f000a,0x3544000a,0x3549000a,0x354d000a,0x3560000a,0x3569000a,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x356e000a,0x3570000a,0x3572000a,0x3574000a,
-0x3576000a,0x3578000a,0x357a000a,0x357c000a,0x357e000a,0x3580000a,0,0,0,0,0,0,0xe600,0xe600,0xe600,0xe600,
-0,0,0,0,0,0,0,0,0,0,0,0,0x3584000a,0x3587000a,0x3589000a,0x358b000a,
-0x358d000a,0x358f000a,0x3591000a,0x3593000a,0x3595000a,0x3597000a,0x3599000a,0x359b000a,0x359d000a,0x359f000a,0x35a1000a,0x35a3000a,0x35a5000a,0x35a7000a,0x35a9000a,0x35ab000a,
-0x35ad000a,0,0,0x35af000a,0x35b1000a,0x35b3000a,0x35b7000a,0x35bb000a,0x35bf000a,0x35c3000a,0x35c5000a,0x35c7000a,0x35c9000a,0x35cb000a,0x35cd000a,0,
-0x35cf000a,0x35d1000a,0x35d3000a,0x35d5000a,0x35d7000a,0x35d9000a,0x35db000a,0x35dd000a,0x35df000a,0x35e1000a,0x35e3000a,0x35e5000a,0x35e7000a,0x35e9000a,0x35eb000a,0x35ed000a,
-0x35ef000a,0x35f1000a,0x35f3000a,0,0x35f5000a,0x35f7000a,0x35f9000a,0x35fb000a,0,0,0,0,0x35fd000a,0x3601000a,0x3605000a,0,
-0x3609000a,0,0x360d000a,0x3611000a,0x3615000a,0x3619000a,0x361d000a,0x3621000a,0x3625000a,0x3629000a,0x362d000a,0x3631000a,0x3635000a,0x3637000a,0x363b000a,0x363f000a,
-0x3643000a,0x3647000a,0x364b000a,0x364f000a,0x3653000a,0x3657000a,0x365b000a,0x365f000a,0x3663000a,0x3667000a,0x3669000a,0x366b000a,0x366d000a,0x366f000a,0x3671000a,0x3673000a,
-0x3675000a,0x3677000a,0x3679000a,0x367b000a,0x367d000a,0x367f000a,0x3681000a,0x3683000a,0x3685000a,0x3687000a,0x3689000a,0x368b000a,0x368d000a,0x368f000a,0x3691000a,0x3693000a,
-0x3695000a,0x3697000a,0x3699000a,0x369b000a,0x369d000a,0x369f000a,0x36a1000a,0x36a3000a,0x36a5000a,0x36a7000a,0x36a9000a,0x36ab000a,0x36ad000a,0x36af000a,0x36b1000a,0x36b3000a,
-0x36b5000a,0x36b7000a,0x36b9000a,0x36bb000a,0x36bd000a,0x36bf000a,0x36c1000a,0x36c3000a,0x36c5000a,0x36c7000a,0x36c9000a,0x36cb000a,0x36cd000a,0x36cf000a,0x36d1000a,0x36d3000a,
-0x36d5000a,0x36d7000a,0x36d9000a,0x36db000a,0x36dd000a,0x36df000a,0x36e1000a,0x36e3000a,0x36e5000a,0x36e7000a,0x36e9000a,0x36eb000a,0x36ed000a,0x36ef000a,0x36f1000a,0x36f3000a,
-0x36f5000a,0x36f7000a,0x36f9000a,0x36fb000a,0x36fd000a,0x36ff000a,0x3701000a,0x3703000a,0x3705000a,0x3707000a,0x3709000a,0x370b000a,0x370d000a,0x370f000a,0x3711000a,0x3713000a,
-0x3715000a,0x3717000a,0x3719000a,0x371b000a,0x371d000a,0x371f000a,0x3721000a,0x3723000a,0x3725000a,0x3727000a,0x3729000a,0x372b000a,0x372d000a,0x372f000a,0x3731000a,0x3733000a,
-0x3735000a,0x3737000a,0x373c000a,0x3741000a,0x3746000a,0x374b000a,0x3750000a,0x3755000a,0x3758000a,0,0,0,0,0x375b000a,0x375d000a,0x375f000a,
-0x3761000a,0x3763000a,0x3765000a,0x3767000a,0x3769000a,0x376b000a,0x376d000a,0x376f000a,0x3771000a,0x3773000a,0x3775000a,0x3777000a,0x3779000a,0x377b000a,0x377d000a,0x377f000a,
-0x3781000a,0x3783000a,0x3785000a,0x3787000a,0x3789000a,0x378b000a,0x378d000a,0x378f000a,0x3791000a,0x3793000a,0x3795000a,0x3797000a,0x3799000a,0x379b000a,0x379d000a,0x379f000a,
-0x37a1000a,0x37a3000a,0x37a5000a,0x37a7000a,0x37a9000a,0x37ab000a,0x37ad000a,0x37af000a,0x37b1000a,0x37b3000a,0x37b5000a,0x37b7000a,0x37b9000a,0x37bb000a,0x37bd000a,0x37bf000a,
-0x37c1000a,0x37c3000a,0x37c5000a,0x37c7000a,0x37c9000a,0x37cb000a,0x37cd000a,0x37cf000a,0x37d1000a,0x37d3000a,0x37d5000a,0x37d7000a,0x37d9000a,0x37db000a,0x37dd000a,0x37df000a,
-0x37e1000a,0x37e3000a,0x37e5000a,0x37e7000a,0x37e9000a,0x37eb000a,0x37ed000a,0x37ef000a,0x37f1000a,0x37f3000a,0x37f5000a,0x37f7000a,0x37f9000a,0x37fb000a,0x37fd000a,0x37ff000a,
-0x3801000a,0x3803000a,0x3805000a,0x3807000a,0x3809000a,0x380b000a,0x380d000a,0x380f000a,0x3811000a,0x3813000a,0x3815000a,0x3817000a,0x3819000a,0x381b000a,0x381d000a,0x381f000a,
-0x3821000a,0x3823000a,0x3825000a,0x3827000a,0x3829000a,0x382b000a,0x382d000a,0x382f000a,0x3831000a,0x3833000a,0x3835000a,0x3837000a,0x3839000a,0x383b000a,0x383d000a,0x383f000a,
-0x3841000a,0x3843000a,0x3845000a,0x3847000a,0x3849000a,0x384b000a,0x384d000a,0x384f000a,0x3851000a,0x3853000a,0x3855000a,0x3857000a,0x3859000a,0x385b000a,0x385d000a,0x385f000a,
-0x3861000a,0x3863000a,0x3865000a,0x3867000a,0x3869000a,0x386b000a,0x386d000a,0x386f000a,0x3871000a,0x3873000a,0x3875000a,0x3877000a,0x3879000a,0x387b000a,0x387d000a,0x387f000a,
-0x3881000a,0x3883000a,0x3885000a,0x3887000a,0x3889000a,0x388b000a,0x388d000a,0x388f000a,0x3891000a,0x3893000a,0x3895000a,0x3898000a,0x389b000a,0x389d000a,0x389f000a,0x38a1000a,
-0x38a3000a,0x38a5000a,0x38a7000a,0x38a9000a,0x38ab000a,0x38ad000a,0x38af000a,0x38b1000a,0x38b3000a,0x38b5000a,0x38b7000a,0x38b9000a,0x38bb000a,0x38bd000a,0x38bf000a,0x38c1000a,
-0x38c3000a,0x38c5000a,0x38c7000a,0x38c9000a,0x38cb000a,0x38cd000a,0x38cf000a,0x38d1000a,0x38d3000a,0x38d5000a,0x38d7000a,0,0,0,0x38d9000a,0x38db000a,
-0x38dd000a,0x38df000a,0x38e1000a,0x38e3000a,0,0,0x38e5000a,0x38e7000a,0x38e9000a,0x38eb000a,0x38ed000a,0x38ef000a,0,0,0x38f1000a,0x38f3000a,
-0x38f5000a,0x38f7000a,0x38f9000a,0x38fb000a,0,0,0x38fd000a,0x38ff000a,0x3901000a,0,0,0,0x3903000a,0x3905000a,0x3907000a,0x3909000a,
-0x390d000a,0x390f000a,0x3911000a,0,0x3913000a,0x3915000a,0x3917000a,0x3919000a,0x391b000a,0x391d000a,0x391f000a,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x3d27000a,0x3d29000a,0x3d2b000a,0x3d2d000a,
-0x3d2f000a,0x3d31000a,0x3d33000a,0x3d35000a,0x3d37000a,0x3d39000a,0x3d3b000a,0x3d3d000a,0x3d3f000a,0x3d41000a,0x3d43000a,0x3d45000a,0x3d47000a,0x3d49000a,0x3d4b000a,0x3d4d000a,
-0x3d4f000a,0x3d51000a,0x3d53000a,0x3d55000a,0x3d57000a,0x3d59000a,0x3d5b000a,0x3d5d000a,0x3d5f000a,0x3d61000a,0x3d63000a,0x3d65000a,0,0x3d680040,0x3de20040,0x3d690040,
-0x3d780040,0x3d6a0040,0x3de40040,0x3d7a0040,0x3d7c0040,0x3d6b0040,0x3d7e0040,0x3d800040,0x3d820040,0x3de60040,0x3d6c0040,0x3d6d0040,0x3de80040,0,0x3d840040,0x3d860040,
-0x3d880040,0x3d6e0040,0x3dea0040,0x3d8a0040,0x3dec0040,0x3d6f0040,0x3d8c0040,0,0,0,0,0,0,0x3d700040,0x3de30040,0x3d710040,
-0x3d790040,0x3d720040,0x3de50040,0x3d7b0040,0x3d7d0040,0x3d730040,0x3d7f0040,0x3d810040,0x3d830040,0x3de70040,0x3d740040,0x3d750040,0x3de90040,0,0x3d850040,0x3d870040,
-0x3d890040,0x3d760040,0x3deb0040,0x3d8b0040,0x3ded0040,0x3d770040,0x3d8d0040,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0x3d910040,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0xe600,0xe600,0xe600,0xe600,0,
+0,0,0x26d9000a,0,0x26db000a,0x26dd000a,0x26df000a,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0x26ef000a,0x26f1000a,0x26f3000a,0x26f5000a,0x26f7000a,0x26f9000a,0x26fb000a,
+0x26fd000a,0x26ff000a,0x2701000a,0x2703000a,0x2705000a,0x2707000a,0x2709000a,0x270b000a,0x270d000a,0x270f000a,0x2711000a,0x2713000a,0x2715000a,0x2717000a,0x2719000a,0x271b000a,
+0x271d000a,0x271f000a,0x2721000a,0x2723000a,0x2725000a,0x2727000a,0x2729000a,0x272b000a,0x272d000a,0x272f000a,0x2731000a,0x2733000a,0x2735000a,0x2737000a,0x2739000a,0x273b000a,
+0x273d000a,0x273f000a,0x2741000a,0x2743000a,0x2745000a,0x2747000a,0x2749000a,0x274b000a,0x274d000a,0x274f000a,0x2751000a,0x2753000a,0x2755000a,0x2757000a,0x2759000a,0x275b000a,
+0x275d000a,0x275f000a,0x2761000a,0x2763000a,0x2765000a,0x2767000a,0x2769000a,0x276b000a,0x276d000a,0x276f000a,0x2771000a,0x2773000a,0x2775000a,0x2777000a,0x2779000a,0x277b000a,
+0x277d000a,0x277f000a,0x2781000a,0x2783000a,0x2785000a,0x2787000a,0x2789000a,0x278b000a,0x278d000a,0x278f000a,0x2791000a,0x2793000a,0x2795000a,0x2797000a,0x2799000a,0x279b000a,
+0x279d000a,0x279f000a,0x27a1000a,0x27a3000a,0x27a5000a,0x27a7000a,0x27a9000a,0,0,0,0x27ab000a,0x27ad000a,0x27af000a,0x27b1000a,0x27b3000a,0x27b5000a,
+0x27b7000a,0x27b9000a,0x27bb000a,0x27bd000a,0x27bf000a,0x27c1000a,0x27c3000a,0x27c5000a,0x27c7000a,0x27cb000a,0x27cf000a,0x27d3000a,0x27d7000a,0x27db000a,0x27df000a,0x27e3000a,
+0x27e7000a,0x27eb000a,0x27ef000a,0x27f3000a,0x27f7000a,0x27fb000a,0x27ff000a,0x2804000a,0x2809000a,0x280e000a,0x2813000a,0x2818000a,0x281d000a,0x2822000a,0x2827000a,0x282c000a,
+0x2831000a,0x2836000a,0x283b000a,0x2840000a,0x2845000a,0x284a000a,0x2852000a,0,0x2859000a,0x285d000a,0x2861000a,0x2865000a,0x2869000a,0x286d000a,0x2871000a,0x2875000a,
+0x2879000a,0x287d000a,0x2881000a,0x2885000a,0x2889000a,0x288d000a,0x2891000a,0x2895000a,0x2899000a,0x289d000a,0x28a1000a,0x28a5000a,0x28a9000a,0x28ad000a,0x28b1000a,0x28b5000a,
+0x28b9000a,0x28bd000a,0x28c1000a,0x28c5000a,0x28c9000a,0x28cd000a,0x28d1000a,0x28d5000a,0x2916000a,0x2918000a,0x291a000a,0x291c000a,0x291e000a,0x2920000a,0x2922000a,0x2924000a,
+0x2926000a,0x2928000a,0x292a000a,0x292c000a,0x292e000a,0x2930000a,0x2932000a,0x2935000a,0x2938000a,0x293b000a,0x293e000a,0x2941000a,0x2944000a,0x2947000a,0x294a000a,0x294d000a,
+0x2950000a,0x2953000a,0x2956000a,0x2959000a,0x295c000a,0x2962000a,0x2967000a,0,0x296a000a,0x296c000a,0x296e000a,0x2970000a,0x2972000a,0x2974000a,0x2976000a,0x2978000a,
+0x297a000a,0x297c000a,0x297e000a,0x2980000a,0x2982000a,0x2984000a,0x2986000a,0x2988000a,0x298a000a,0x298c000a,0x298e000a,0x2990000a,0x2992000a,0x2994000a,0x2996000a,0x2998000a,
+0x299a000a,0x299c000a,0x299e000a,0x29a0000a,0x29a2000a,0x29a4000a,0x29a6000a,0x29a8000a,0x29aa000a,0x29ac000a,0x29ae000a,0x29b0000a,0x29b2000a,0x29b4000a,0x29b6000a,0x29b8000a,
+0x29ba000a,0x29bc000a,0x29be000a,0x29c0000a,0x29c2000a,0x29c4000a,0x29c6000a,0x29c8000a,0x29ca000a,0x29cc000a,0x29cf000a,0x29d2000a,0x29d5000a,0x29d8000a,0x29db000a,0x29de000a,
+0x29e1000a,0x29e4000a,0x29e7000a,0x29ea000a,0x29ed000a,0x29f0000a,0x29f3000a,0x29f6000a,0x2a44000a,0x2a46000a,0x2a48000a,0x2a4a000a,0x2a4c000a,0x2a4e000a,0x2a50000a,0x2a52000a,
+0x2a54000a,0x2a56000a,0x2a58000a,0x2a5a000a,0x2a5c000a,0x2a5e000a,0x2a60000a,0x2a62000a,0x2a64000a,0x2a66000a,0x2a68000a,0x2a6a000a,0x2a6c000a,0x2a6e000a,0x2a70000a,0x2a72000a,
+0x2a74000a,0x2a76000a,0x2a78000a,0x2a7a000a,0x2a7c000a,0x2a7e000a,0x2a80000a,0,0x2a82000a,0x2a88000a,0x2a8d000a,0x2a93000a,0x2a97000a,0x2a9e000a,0x2aa2000a,0x2aa6000a,
+0x2aae000a,0x2ab3000a,0x2ab7000a,0x2abb000a,0x2abf000a,0x2ac4000a,0x2ac9000a,0x2ace000a,0x2ad3000a,0x2ad9000a,0x2ade000a,0x2ae3000a,0x2aea000a,0x2aed000a,0x2af4000a,0x2afb000a,
+0x2b01000a,0x2b06000a,0x2b0d000a,0x2b14000a,0x2b19000a,0x2b1d000a,0x2b21000a,0x2b27000a,0x2b2c000a,0x2b32000a,0x2b39000a,0x2b3d000a,0x2b41000a,0x2b46000a,0x2b4a000a,0x2b4e000a,
+0x2b51000a,0x2b54000a,0x2b58000a,0x2b5c000a,0x2b63000a,0x2b68000a,0x2b6e000a,0x2b75000a,0x2b7a000a,0x2b7e000a,0x2b82000a,0x2b8a000a,0x2b8f000a,0x2b96000a,0x2b9a000a,0x2ba0000a,
+0x2ba4000a,0x2ba9000a,0x2bad000a,0x2bb2000a,0x2bb9000a,0x2bbe000a,0x2bc4000a,0x2bc9000a,0x2bcc000a,0x2bd3000a,0x2bd7000a,0x2bdb000a,0x2be0000a,0x2be4000a,0x2be8000a,0x2bec000a,
+0x2bf2000a,0x2bf7000a,0x2bfa000a,0x2c01000a,0x2c06000a,0x2c0c000a,0x2c11000a,0x2c17000a,0x2c1b000a,0x2c1f000a,0x2c24000a,0x2c27000a,0x2c2c000a,0x2c32000a,0x2c35000a,0x2c3c000a,
+0x2c40000a,0x2c43000a,0x2c46000a,0x2c49000a,0x2c4c000a,0x2c4f000a,0x2c52000a,0x2c55000a,0x2d68000a,0x2d6b000a,0x2d6e000a,0x2d71000a,0x2d74000a,0x2d77000a,0x2d7a000a,0x2d7d000a,
+0x2d80000a,0x2d83000a,0x2d87000a,0x2d8b000a,0x2d8f000a,0x2d93000a,0x2d97000a,0x2d9b000a,0x2d9f000a,0x2da3000a,0x2da7000a,0x2dab000a,0x2daf000a,0x2db3000a,0x2db7000a,0x2dbb000a,
+0x2dbf000a,0x2dc3000a,0x2dc7000a,0x2dcb000a,0x2dcf000a,0x2dd3000a,0x2dd7000a,0x2ddb000a,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x2ddf000a,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x2e3e000a,0x2e40000a,0x2e42000a,0x2e44000a,0x2e46000a,0x2e48000a,0x2e4a000a,0x2e4c000a,
+0x2e4e000a,0x2e50000a,0x2e52000a,0x2e54000a,0x2e56000a,0x2e58000a,0x2e5a000a,0x2e5c000a,0x2e5e000a,0x2e60000a,0x2e62000a,0x2e64000a,0x2e66000a,0x2e68000a,0x2e6a000a,0x2e6c000a,
+0x2e6e000a,0x2e70000a,0x2e72000a,0x2e74000a,0x2e76000a,0x2e78000a,0x2e7a000a,0x2e7c000a,0x2e7e000a,0x2e80000a,0x2e82000a,0x2e84000a,0x2e86000a,0x2e88000a,0x2e8a000a,0x2e8c000a,
+0x2e8e000a,0x2e90000a,0x2e92000a,0x2e94000a,0x2e96000a,0x2e98000a,0x2e9a000a,0x2e9c000a,0x2e9e000a,0x2ea0000a,0x2ea2000a,0x2ea4000a,0x2ea6000a,0x2ea8000a,0x2eaa000a,0x2eac000a,
+0x2eae000a,0x2eb0000a,0x2eb2000a,0x2eb4000a,0x2eb6000a,0x2eb8000a,0x2eba000a,0x2ebc000a,0x2ebe000a,0x2ec0000a,0x2ec2000a,0x2ec4000a,0x2ec6000a,0x2eca000a,0x2ece000a,0x2ed0000a,
+0x2ed2000a,0x2ed4000a,0x2ed6000a,0x2ed8000a,0x2eda000a,0x2edc000a,0x2ede000a,0x2ee0000a,0x2ee2000a,0x2ee6000a,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x2eea000a,
+0x2eec000a,0x2eee000a,0x2ef0000a,0x2ef2000a,0x2ef4000a,0x2ef6000a,0x2ef8000a,0x2efa000a,0x2efc000a,0x2efe000a,0x2f01000a,0x2f03000a,0x2f05000a,0x2f07000a,0x2f09000a,0x2f0b000a,
+0x2f0d000a,0x2f0f000a,0x2f11000a,0x2f13000a,0x2f15000a,0x2f17000a,0x2f19000a,0x2f1d000a,0x2f21000a,0x2f25000a,0x2f29000a,0x2f2d000a,0x2f31000a,0x2f35000a,0x2f39000a,0x2f3d000a,
+0x2f41000a,0x2f45000a,0x2f49000a,0x2f4d000a,0x2f51000a,0x2f55000a,0x2f59000a,0x2f5d000a,0x2f61000a,0x2f63000a,0x2f65000a,0x2f67000a,0x2f69000a,0x2f6d000a,0x2f71000a,0x2f75000a,
+0x2f79000a,0x2f7d000a,0x2f80000a,0x2f83000a,0x2f86000a,0x2f89000a,0x2f8c000a,0x2f8f000a,0x2f92000a,0x2f95000a,0x2f98000a,0x2f9b000a,0x2f9e000a,0x2fa1000a,0x2fa4000a,0x2fa7000a,
+0x2faa000a,0x2fad000a,0x2fb0000a,0x2fb3000a,0x2fb6000a,0x2fb9000a,0x2fbc000a,0x2fbf000a,0x2fc2000a,0x2fc5000a,0x2fc8000a,0x2fcb000a,0x2fce000a,0x2fd1000a,0x2fd4000a,0x2fd7000a,
+0x2fda000a,0x2fdd000a,0x2fe0000a,0x2fe3000a,0x2fe6000a,0x2fe9000a,0x2fec000a,0x2fef000a,0x2ff2000a,0x2ff5000a,0x2ff8000a,0x2ffb000a,0x2ffe000a,0x3001000a,0x3004000a,0x3007000a,
+0x300a000a,0x300d000a,0x3010000a,0x3013000a,0x3016000a,0x3019000a,0x301c000a,0x301f000a,0x3022000a,0x3025000a,0x3028000a,0x302b000a,0x302e000a,0x3031000a,0x3034000a,0x3037000a,
+0x303a000a,0x303d000a,0x3040000a,0x3043000a,0x3046000a,0x3049000a,0x304c000a,0x304f000a,0x3052000a,0x3055000a,0x3058000a,0x305b000a,0x305e000a,0x3061000a,0x3064000a,0x3067000a,
+0x306a000a,0x306d000a,0x3070000a,0x3073000a,0x3076000a,0x3079000a,0x307c000a,0x307f000a,0x3083000a,0x3087000a,0x308b000a,0x3090000a,0x3095000a,0x309a000a,0x309f000a,0x30a4000a,
+0x30a9000a,0x30ad000a,0x30b1000a,0x30b5000a,0x30b9000a,0x30bd000a,0x30c1000a,0x30c4000a,0x30c7000a,0x30ca000a,0x30cd000a,0x30d0000a,0x30d3000a,0x30d6000a,0x30d9000a,0x30dc000a,
+0x30df000a,0x30e2000a,0x30e5000a,0x30e8000a,0x30eb000a,0x30ee000a,0x30f1000a,0x30f4000a,0x30f7000a,0x30fa000a,0x30fd000a,0x3100000a,0x3103000a,0x3106000a,0x3109000a,0x310c000a,
+0x310f000a,0x3112000a,0x3115000a,0x3118000a,0x311b000a,0x311e000a,0x3121000a,0x3124000a,0x3127000a,0x312a000a,0x312d000a,0x3130000a,0x3133000a,0x3137000a,0x313a000a,0x313d000a,
+0x3140000a,0x3143000a,0x3146000a,0x3149000a,0x314d000a,0x3151000a,0x3155000a,0x3159000a,0x315d000a,0x3160000a,0x3163000a,0x3166000a,0x3169000a,0x316c000a,0x316f000a,0x3172000a,
+0x3175000a,0x3178000a,0x317b000a,0x317e000a,0x3181000a,0x3184000a,0x3187000a,0x318a000a,0x318d000a,0x3190000a,0x3193000a,0x3196000a,0x3199000a,0x319c000a,0x319f000a,0x31a2000a,
+0x31a5000a,0x31a8000a,0x31ab000a,0x31ae000a,0x31b1000a,0x31b4000a,0x31b7000a,0x31ba000a,0x31bd000a,0x31c0000a,0x31c3000a,0x31c6000a,0x31c9000a,0x31cc000a,0x31cf000a,0x31d2000a,
+0x31d5000a,0x31d8000a,0x31db000a,0x31de000a,0x31e1000a,0x31e4000a,0x31e7000a,0x31ea000a,0x31ed000a,0x31f0000a,0x31f3000a,0x31f6000a,0x31f9000a,0x31fc000a,0x31ff000a,0x3202000a,
+0x3205000a,0x3208000a,0x320b000a,0x320e000a,0x3211000a,0x3214000a,0x3218000a,0x321b000a,0x321e000a,0x3221000a,0x3224000a,0x3227000a,0x322b000a,0x322f000a,0x3232000a,0x3235000a,
+0x3238000a,0x323b000a,0x323e000a,0x3241000a,0x3244000a,0x3247000a,0x324a000a,0x324d000a,0x3250000a,0x3253000a,0x3256000a,0x3259000a,0x325c000a,0x325f000a,0x3262000a,0x3267000a,
+0x326c000a,0x3271000a,0x3274000a,0x3277000a,0x327a000a,0x327d000a,0x3280000a,0x3283000a,0x3286000a,0x3289000a,0x328c000a,0x328f000a,0x3292000a,0x3295000a,0x3298000a,0x329b000a,
+0x329e000a,0x32a1000a,0x32a4000a,0x32a7000a,0x32aa000a,0x32ad000a,0x32b0000a,0x32b3000a,0x32b6000a,0x32b9000a,0x32bc000a,0x32bf000a,0x32c2000a,0x32c5000a,0x32c8000a,0x32cb000a,
+0x32ce000a,0x32d1000a,0x32d4000a,0x32d7000a,0x32da000a,0x32dd000a,0x32e0000a,0x32e3000a,0x32e6000a,0x32e9000a,0x32ec000a,0x32ef000a,0x32f2000a,0x32f5000a,0x32f8000a,0x32fb000a,
+0x32fe000a,0x3301000a,0x3304000a,0x3307000a,0x330a000a,0x330d000a,0x3310000a,0x3313000a,0x3316000a,0x3319000a,0x331c000a,0x331f000a,0x3322000a,0x3325000a,0x3328000a,0x332b000a,
+0x332e000a,0x3331000a,0x3334000a,0x3337000a,0x333a000a,0x333d000a,0x3340000a,0x3343000a,0x3346000a,0x334a000a,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x334e000a,0x3352000a,0x3356000a,0x335a000a,
+0x335e000a,0x3362000a,0x3366000a,0x336a000a,0x336e000a,0x3372000a,0x3376000a,0x337a000a,0x337e000a,0x3382000a,0x3386000a,0x338a000a,0x338e000a,0x3392000a,0x3396000a,0x339a000a,
+0x339e000a,0x33a2000a,0x33a6000a,0x33aa000a,0x33ae000a,0x33b2000a,0x33b6000a,0x33ba000a,0x33be000a,0x33c2000a,0x33c6000a,0x33ca000a,0x33ce000a,0x33d2000a,0x33d6000a,0x33da000a,
+0x33de000a,0x33e2000a,0x33e6000a,0x33ea000a,0x33ee000a,0x33f2000a,0x33f6000a,0x33fa000a,0x33fe000a,0x3402000a,0x3406000a,0x340a000a,0x340e000a,0x3412000a,0x3416000a,0x341a000a,
+0x341e000a,0x3422000a,0x3426000a,0x342a000a,0x342e000a,0x3432000a,0x3436000a,0x343a000a,0x343e000a,0x3442000a,0x3446000a,0x344a000a,0,0,0x344e000a,0x3452000a,
+0x3456000a,0x345a000a,0x345e000a,0x3462000a,0x3466000a,0x346a000a,0x346e000a,0x3472000a,0x3476000a,0x347a000a,0x347e000a,0x3482000a,0x3486000a,0x348a000a,0x348e000a,0x3492000a,
+0x3496000a,0x349a000a,0x349e000a,0x34a2000a,0x34a6000a,0x34aa000a,0x34ae000a,0x34b2000a,0x34b6000a,0x34ba000a,0x34be000a,0x34c2000a,0x34c6000a,0x34ca000a,0x34ce000a,0x34d2000a,
+0x34d6000a,0x34da000a,0x34de000a,0x34e2000a,0x34e6000a,0x34ea000a,0x34ee000a,0x34f2000a,0x34f6000a,0x34fa000a,0x34fe000a,0x3502000a,0x3506000a,0x350a000a,0x350e000a,0x3512000a,
+0x3516000a,0x351a000a,0x351e000a,0x3522000a,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x3526000a,0x352a000a,0x352e000a,0x3533000a,
+0x3538000a,0x353d000a,0x3542000a,0x3547000a,0x354c000a,0x3551000a,0x3555000a,0x3568000a,0x3571000a,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x3576000a,0x3578000a,0x357a000a,0x357c000a,
+0x357e000a,0x3580000a,0x3582000a,0x3584000a,0x3586000a,0x3588000a,0,0,0,0,0,0,0xe600,0xe600,0xe600,0xe600,
+0xe600,0xe600,0xe600,0,0,0,0,0,0,0,0,0,0x358c000a,0x358f000a,0x3591000a,0x3593000a,
+0x3595000a,0x3597000a,0x3599000a,0x359b000a,0x359d000a,0x359f000a,0x35a1000a,0x35a3000a,0x35a5000a,0x35a7000a,0x35a9000a,0x35ab000a,0x35ad000a,0x35af000a,0x35b1000a,0x35b3000a,
+0x35b5000a,0,0,0x35b7000a,0x35b9000a,0x35bb000a,0x35bf000a,0x35c3000a,0x35c7000a,0x35cb000a,0x35cd000a,0x35cf000a,0x35d1000a,0x35d3000a,0x35d5000a,0,
+0x35d7000a,0x35d9000a,0x35db000a,0x35dd000a,0x35df000a,0x35e1000a,0x35e3000a,0x35e5000a,0x35e7000a,0x35e9000a,0x35eb000a,0x35ed000a,0x35ef000a,0x35f1000a,0x35f3000a,0x35f5000a,
+0x35f7000a,0x35f9000a,0x35fb000a,0,0x35fd000a,0x35ff000a,0x3601000a,0x3603000a,0,0,0,0,0x3605000a,0x3609000a,0x360d000a,0,
+0x3611000a,0,0x3615000a,0x3619000a,0x361d000a,0x3621000a,0x3625000a,0x3629000a,0x362d000a,0x3631000a,0x3635000a,0x3639000a,0x363d000a,0x363f000a,0x3643000a,0x3647000a,
+0x364b000a,0x364f000a,0x3653000a,0x3657000a,0x365b000a,0x365f000a,0x3663000a,0x3667000a,0x366b000a,0x366f000a,0x3671000a,0x3673000a,0x3675000a,0x3677000a,0x3679000a,0x367b000a,
+0x367d000a,0x367f000a,0x3681000a,0x3683000a,0x3685000a,0x3687000a,0x3689000a,0x368b000a,0x368d000a,0x368f000a,0x3691000a,0x3693000a,0x3695000a,0x3697000a,0x3699000a,0x369b000a,
+0x369d000a,0x369f000a,0x36a1000a,0x36a3000a,0x36a5000a,0x36a7000a,0x36a9000a,0x36ab000a,0x36ad000a,0x36af000a,0x36b1000a,0x36b3000a,0x36b5000a,0x36b7000a,0x36b9000a,0x36bb000a,
+0x36bd000a,0x36bf000a,0x36c1000a,0x36c3000a,0x36c5000a,0x36c7000a,0x36c9000a,0x36cb000a,0x36cd000a,0x36cf000a,0x36d1000a,0x36d3000a,0x36d5000a,0x36d7000a,0x36d9000a,0x36db000a,
+0x36dd000a,0x36df000a,0x36e1000a,0x36e3000a,0x36e5000a,0x36e7000a,0x36e9000a,0x36eb000a,0x36ed000a,0x36ef000a,0x36f1000a,0x36f3000a,0x36f5000a,0x36f7000a,0x36f9000a,0x36fb000a,
+0x36fd000a,0x36ff000a,0x3701000a,0x3703000a,0x3705000a,0x3707000a,0x3709000a,0x370b000a,0x370d000a,0x370f000a,0x3711000a,0x3713000a,0x3715000a,0x3717000a,0x3719000a,0x371b000a,
+0x371d000a,0x371f000a,0x3721000a,0x3723000a,0x3725000a,0x3727000a,0x3729000a,0x372b000a,0x372d000a,0x372f000a,0x3731000a,0x3733000a,0x3735000a,0x3737000a,0x3739000a,0x373b000a,
+0x373d000a,0x373f000a,0x3744000a,0x3749000a,0x374e000a,0x3753000a,0x3758000a,0x375d000a,0x3760000a,0,0,0,0,0x3763000a,0x3765000a,0x3767000a,
+0x3769000a,0x376b000a,0x376d000a,0x376f000a,0x3771000a,0x3773000a,0x3775000a,0x3777000a,0x3779000a,0x377b000a,0x377d000a,0x377f000a,0x3781000a,0x3783000a,0x3785000a,0x3787000a,
+0x3789000a,0x378b000a,0x378d000a,0x378f000a,0x3791000a,0x3793000a,0x3795000a,0x3797000a,0x3799000a,0x379b000a,0x379d000a,0x379f000a,0x37a1000a,0x37a3000a,0x37a5000a,0x37a7000a,
+0x37a9000a,0x37ab000a,0x37ad000a,0x37af000a,0x37b1000a,0x37b3000a,0x37b5000a,0x37b7000a,0x37b9000a,0x37bb000a,0x37bd000a,0x37bf000a,0x37c1000a,0x37c3000a,0x37c5000a,0x37c7000a,
+0x37c9000a,0x37cb000a,0x37cd000a,0x37cf000a,0x37d1000a,0x37d3000a,0x37d5000a,0x37d7000a,0x37d9000a,0x37db000a,0x37dd000a,0x37df000a,0x37e1000a,0x37e3000a,0x37e5000a,0x37e7000a,
+0x37e9000a,0x37eb000a,0x37ed000a,0x37ef000a,0x37f1000a,0x37f3000a,0x37f5000a,0x37f7000a,0x37f9000a,0x37fb000a,0x37fd000a,0x37ff000a,0x3801000a,0x3803000a,0x3805000a,0x3807000a,
+0x3809000a,0x380b000a,0x380d000a,0x380f000a,0x3811000a,0x3813000a,0x3815000a,0x3817000a,0x3819000a,0x381b000a,0x381d000a,0x381f000a,0x3821000a,0x3823000a,0x3825000a,0x3827000a,
+0x3829000a,0x382b000a,0x382d000a,0x382f000a,0x3831000a,0x3833000a,0x3835000a,0x3837000a,0x3839000a,0x383b000a,0x383d000a,0x383f000a,0x3841000a,0x3843000a,0x3845000a,0x3847000a,
+0x3849000a,0x384b000a,0x384d000a,0x384f000a,0x3851000a,0x3853000a,0x3855000a,0x3857000a,0x3859000a,0x385b000a,0x385d000a,0x385f000a,0x3861000a,0x3863000a,0x3865000a,0x3867000a,
+0x3869000a,0x386b000a,0x386d000a,0x386f000a,0x3871000a,0x3873000a,0x3875000a,0x3877000a,0x3879000a,0x387b000a,0x387d000a,0x387f000a,0x3881000a,0x3883000a,0x3885000a,0x3887000a,
+0x3889000a,0x388b000a,0x388d000a,0x388f000a,0x3891000a,0x3893000a,0x3895000a,0x3897000a,0x3899000a,0x389b000a,0x389d000a,0x38a0000a,0x38a3000a,0x38a5000a,0x38a7000a,0x38a9000a,
+0x38ab000a,0x38ad000a,0x38af000a,0x38b1000a,0x38b3000a,0x38b5000a,0x38b7000a,0x38b9000a,0x38bb000a,0x38bd000a,0x38bf000a,0x38c1000a,0x38c3000a,0x38c5000a,0x38c7000a,0x38c9000a,
+0x38cb000a,0x38cd000a,0x38cf000a,0x38d1000a,0x38d3000a,0x38d5000a,0x38d7000a,0x38d9000a,0x38db000a,0x38dd000a,0x38df000a,0,0,0,0x38e1000a,0x38e3000a,
+0x38e5000a,0x38e7000a,0x38e9000a,0x38eb000a,0,0,0x38ed000a,0x38ef000a,0x38f1000a,0x38f3000a,0x38f5000a,0x38f7000a,0,0,0x38f9000a,0x38fb000a,
+0x38fd000a,0x38ff000a,0x3901000a,0x3903000a,0,0,0x3905000a,0x3907000a,0x3909000a,0,0,0,0x390b000a,0x390d000a,0x390f000a,0x3911000a,
+0x3915000a,0x3917000a,0x3919000a,0,0x391b000a,0x391d000a,0x391f000a,0x3921000a,0x3923000a,0x3925000a,0x3927000a,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x3d2f000a,0x3d31000a,0x3d33000a,0x3d35000a,
+0x3d37000a,0x3d39000a,0x3d3b000a,0x3d3d000a,0x3d3f000a,0x3d41000a,0x3d43000a,0x3d45000a,0x3d47000a,0x3d49000a,0x3d4b000a,0x3d4d000a,0x3d4f000a,0x3d51000a,0x3d53000a,0x3d55000a,
+0x3d57000a,0x3d59000a,0x3d5b000a,0x3d5d000a,0x3d5f000a,0x3d61000a,0x3d63000a,0x3d65000a,0x3d67000a,0x3d69000a,0x3d6b000a,0x3d6d000a,0,0x3d700040,0x3dea0040,0x3d710040,
+0x3d800040,0x3d720040,0x3dec0040,0x3d820040,0x3d840040,0x3d730040,0x3d860040,0x3d880040,0x3d8a0040,0x3dee0040,0x3d740040,0x3d750040,0x3df00040,0,0x3d8c0040,0x3d8e0040,
+0x3d900040,0x3d760040,0x3df20040,0x3d920040,0x3df40040,0x3d770040,0x3d940040,0,0,0,0,0,0,0x3d780040,0x3deb0040,0x3d790040,
+0x3d810040,0x3d7a0040,0x3ded0040,0x3d830040,0x3d850040,0x3d7b0040,0x3d870040,0x3d890040,0x3d8b0040,0x3def0040,0x3d7c0040,0x3d7d0040,0x3df10040,0,0x3d8d0040,0x3d8f0040,
+0x3d910040,0x3d7e0040,0x3df30040,0x3d930040,0x3df50040,0x3d7f0040,0x3d950040,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0x3d990040,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0xe600,0xe600,0xe600,0xe600,0xe600,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0xe600,0xe600,0xdc00,0xdc00,0xdc00,0xdc00,0xdc00,0xdc00,
0xe600,0xe600,0xdc00,0xe600,0xe600,0xde00,0xe400,0xe600,0xa00,0xb00,0xc00,0xd00,0xe00,0xf00,0x1000,0x1100,
0x1200,0x1300,0x1300,0x1400,0x1500,0x1600,0,0x1700,0,0x1800,0x1900,0,0xe600,0xdc00,0,0x1200,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0,0,
-0,0,0,0,0,0,0,0,0xe600,0xe600,0xe600,0xdc00,0xe600,0,0,0xe600,
+0,0,0,0,0,0,0,0,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,
+0x1e00,0x1f00,0x2000,0,0,0,0,0,0xe600,0xe600,0xe600,0xdc00,0xe600,0,0,0xe600,
0xe600,0,0xdc00,0xe600,0xe600,0xdc00,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0x2400,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0xe600,0xdc00,0xe600,0xe600,
@@ -743,77 +753,96 @@ static const uint32_t normTrie_data32[9272]={
0,0,0,0,0x700,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0x900,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x700,0,0,0x3dd10040,0,0,0,0,0,0,0,0,
+0,0,0,0,0x700,0,0,0x3dd90040,0,0,0,0,0,0,0,0,
0x6b00,0x6b00,0x6b00,0x6b00,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0xdc00,0,0xdc00,0,0xd800,0,0,
0,0,0,0,0,0,0xdc00,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0xe600,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x900,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0x900,0,0,0,0,0,0,0,0,0,0,0xe600,0,0,
-0,0,0,0,0,0,0,0,0,0xe400,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xde00,0xe600,0xdc00,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xe600,
-0xdc00,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xe600,
-0xdc00,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0,0,0,0,0,0,0,0,
-0,0,0,0,0xe600,0xe600,0xdc00,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xdc00,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0xdc00,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0xe600,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x900,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x900,0,
+0,0,0,0,0,0,0,0,0,0xe600,0,0,0,0,0,0,
+0,0,0,0,0,0xe400,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0xde00,0xe600,0xdc00,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0xe600,0xdc00,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0xe600,0xdc00,0xe600,0xe600,0xe600,
+0xe600,0xe600,0xe600,0xe600,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0x900,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0x700,0,0,0,0,
+0,0,0,0,0xe600,0xe600,0xdc00,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xdc00,0xe600,
+0xe600,0xea00,0xd600,0xdc00,0xca00,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,
+0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xe600,0xdc00,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0xe600,0xe600,0x100,0x100,0xe600,0xe600,0xe600,0xe600,0x100,0x100,0x100,0xe600,0xe600,0,0,0,
0,0xe600,0,0,0,0x100,0x100,0xe600,0xdc00,0xe600,0x100,0x100,0xdc00,0xdc00,0xdc00,0xdc00,
+0xe600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x3e020040,0x3dff0040,0x3e030040,0,
-0,0,0,0,0,0,0x900,0,0,0,0,0,0,0,0,0,
+0x3e0a0040,0x3e070040,0x3e0b0040,0,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,
+0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,
+0xe600,0xe600,0xe600,0xe600,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0xe600,0,0,0,0,0,0,0,0,0,0,0,0,
+0xe600,0xe600,0,0,0,0,0,0,0,0,0x900,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-#ifndef U_DARWIN
-0,0xdc00,0,0xe600,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0xe600,0x100,0xdc00,0,
-0,0,0,0x900,0xdc00,0xdc00,0xdc00,0,0,0xe600,0xe600,0xe600,0xe600,0xe600,0xdc00,0xdc00,
+0,0,0,0,0x900,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0xe600,0xe600,0xe600,0,0,0,0,0,0,0,
+0,0,0,0xdc00,0xdc00,0xdc00,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0x900,0,0,0,0,
+#ifdef U_DARWIN
+0,0,0,0,0,0,0,0,0,0,0x6b00,0x6b00,0x6b00,0x6b00,0x6b00,0x6b00,
+0x6b00,0x6b00,0x6b00,0x6b00,0x6b00,0x6b00,0,0,0,0,0,0,0,0,0,0x1200,
+#endif /* U_DARWIN */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,
-0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,
+#ifndef U_DARWIN
+0,0,0,0,0,0,0,0,0,0xdc00,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0xdc00,0,0xe600,0,0,0,0,
#else /* U_DARWIN */
-0,0,0x6b00,0x6b00,0x6b00,0x6b00,0x6b00,0x6b00,0x6b00,0x6b00,0x6b00,0x6b00,0x6b00,0x6b00,0,0,
-0,0,0,0,0,0,0,0x1200,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xdc00,0,0xe600,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0xdc00,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0xdc00,0,0xe600,
+#endif /* U_DARWIN */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xe600,0x100,0xdc00,0,0,0,0,0x900,0xdc00,0xdc00,0xdc00,0,0,0xe600,0xe600,0xe600,
-0xe600,0xe600,0xdc00,0xdc00,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xe600,0xe600,0xe600,0,0,0,
+#ifndef U_DARWIN
+0,0,0,0,0xe600,0x100,0xdc00,0,0,0,0,0x900,0xdc00,0xdc00,0xdc00,0,
+0,0xe600,0xe600,0xe600,0xe600,0xe600,0xdc00,0xdc00,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xe600,0xe600,
+0xe600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0xfff10040,0xfff10040,0xfff10040,0xfff10040,
+0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,
+#else /* U_DARWIN */
+0,0,0,0,0,0,0,0,0xe600,0x100,0xdc00,0,0,0,0,0x900,
+0xdc00,0xdc00,0xdc00,0,0,0xe600,0xe600,0xe600,0xe600,0xe600,0xdc00,0xdc00,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0xe600,0xe600,0xe600,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,
-0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,
+0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,
+0xfff10040,0xfff10040,0xfff10040,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,
#endif /* U_DARWIN */
0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,
#ifndef U_DARWIN
-0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0,0,0,0,0,0,0,0,0,0,0,0,
-#else /* U_DARWIN */
-0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0,0,0,0,0,0,0,0,
-#endif /* U_DARWIN */
+0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0,0,0,0,
+#endif /* ! U_DARWIN */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
#ifndef U_DARWIN
-0,0,0xfc01ff00,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0xfc01ff00,0,0xfc02ff00,0,0,0,0,0,
#else /* U_DARWIN */
-0,0,0,0,0,0,0xfc01ff00,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0xfc01ff00,0,0xfc02ff00,0,
#endif /* U_DARWIN */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
#ifndef U_DARWIN
-0xfc02ff0f,0xfc03000a,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0xfc03ff0f,0xfc04000a,0,0,0,0,0,0,
#else /* U_DARWIN */
-0,0,0,0,0xfc02ff0f,0xfc03000a,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0xfc03ff0f,0xfc04000a,0,0,
#endif /* U_DARWIN */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
#ifndef U_DARWIN
-0,0,0xfc04000f,0
+0,0,0,0,0,0,0,0,0,0,0xfc05000f,0
#else /* U_DARWIN */
-0,0,0,0,0,0,0xfc04000f,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xfc05000f,0
#endif /* U_DARWIN */
};
@@ -821,81 +850,78 @@ static const UTrie normTrie={
normTrie_index,
normTrie_data32,
getFoldingNormOffset,
- 2208,
+ 2240,
#ifndef U_DARWIN
- 9236,
+ 9548,
#else /* U_DARWIN */
- 9272,
+ 9584,
#endif /* U_DARWIN */
0,
FALSE
};
-static const uint16_t extraData[15947]={
-0x13b,0xff02,0x20,0x3b9,0xff01,0x3c5,0xff01,0x3cd,0xff01,0x3cb,0xff01,0x3c3,0xff01,0x61,0xff01,0xe6,
+static const uint16_t extraData[15955]={
+0x13d,0xff02,0x20,0x3b9,0xff01,0x3c5,0xff01,0x3cd,0xff01,0x3cb,0xff01,0x3c3,0xff01,0x61,0xff01,0xe6,
0xff01,0x62,0xff01,0x64,0xff01,0x65,0xff01,0x1dd,0xff01,0x67,0xff01,0x68,0xff01,0x69,0xff01,0x6a,
0xff01,0x6b,0xff01,0x6c,0xff01,0x6d,0xff01,0x6e,0xff01,0x6f,0xff01,0x223,0xff01,0x70,0xff01,0x72,
0xff01,0x74,0xff01,0x75,0xff01,0x77,0xff02,0x72,0x73,0xff01,0x63,0xff02,0xb0,0x63,0xff01,0x25b,
0xff02,0xb0,0x66,0xff02,0x6e,0x6f,0xff01,0x71,0xff02,0x73,0x6d,0xff03,0x74,0x65,0x6c,0xff02,
-0x74,0x6d,0xff01,0x7a,0xff03,0x66,0x61,0x78,0xff01,0x3b3,0xff01,0x3c0,0xff03,0x70,0x74,0x65,
-0xff02,0x68,0x67,0xff02,0x65,0x76,0xff03,0x6c,0x74,0x64,0xff03,0x68,0x70,0x61,0xff02,0x61,
-0x75,0xff02,0x6f,0x76,0xff02,0x69,0x75,0xff02,0x70,0x61,0xff02,0x6e,0x61,0xff02,0x3bc,0x61,
-0xff02,0x6d,0x61,0xff02,0x6b,0x61,0xff02,0x6b,0x62,0xff02,0x6d,0x62,0xff02,0x67,0x62,0xff02,
-0x70,0x66,0xff02,0x6e,0x66,0xff02,0x3bc,0x66,0xff02,0x68,0x7a,0xff03,0x6b,0x68,0x7a,0xff03,
-0x6d,0x68,0x7a,0xff03,0x67,0x68,0x7a,0xff03,0x74,0x68,0x7a,0xff02,0x70,0x61,0xff03,0x6b,
-0x70,0x61,0xff03,0x6d,0x70,0x61,0xff03,0x67,0x70,0x61,0xff02,0x70,0x76,0xff02,0x6e,0x76,
-0xff02,0x3bc,0x76,0xff02,0x6d,0x76,0xff02,0x6b,0x76,0xff02,0x6d,0x76,0xff02,0x70,0x77,0xff02,
-0x6e,0x77,0xff02,0x3bc,0x77,0xff02,0x6d,0x77,0xff02,0x6b,0x77,0xff02,0x6d,0x77,0xff02,0x6b,
-0x3c9,0xff02,0x6d,0x3c9,0xff02,0x62,0x71,0xff04,0x63,0x2215,0x6b,0x67,0xff03,0x63,0x6f,0x2e,
-0xff02,0x64,0x62,0xff02,0x67,0x79,0xff02,0x68,0x70,0xff02,0x6b,0x6b,0xff02,0x6b,0x6d,0xff02,
-0x70,0x68,0xff03,0x70,0x70,0x6d,0xff02,0x70,0x72,0xff02,0x73,0x76,0xff02,0x77,0x62,0xff03,
-0x76,0x2215,0x6d,0xff03,0x61,0x2215,0x6d,0xff01,0x3b1,0xff01,0x3b2,0xff01,0x3b4,0xff01,0x3b5,0xff01,
-0x3b6,0xff01,0x3b7,0xff01,0x3b8,0xff01,0x3ba,0xff01,0x3bb,0xff01,0x3bd,0xff01,0x3be,0xff01,0x3bf,0xff01,
-0x3c1,0xff01,0x3c4,0xff01,0x3c6,0xff01,0x3c7,0xff01,0x3c8,0xff01,0x3dd,0x8200,0xf0,0x20,0x345,0x3b2,
-0x100,0x3a5,0x8282,0xe6,0x3d2,0x301,0xe6,0x3a5,0x301,0x8282,0xe6,0x3d2,0x308,0xe6,0x3a5,0x308,
-0x100,0x3c2,0x100,0x3a3,0x100,0x41,0x100,0xc6,0x100,0x42,0x100,0x44,0x100,0x45,0x100,0x18e,
-0x100,0x47,0x100,0x48,0x100,0x49,0x100,0x4a,0x100,0x4b,0x100,0x4c,0x100,0x4d,0x100,0x4e,
-0x100,0x4f,0x100,0x222,0x100,0x50,0x100,0x52,0x100,0x54,0x100,0x55,0x100,0x57,0x200,0x52,
-0x73,0x100,0x43,0x200,0xb0,0x43,0x100,0x190,0x200,0xb0,0x46,0x100,0x48,0x100,0x48,0x100,
-0x48,0x100,0x49,0x100,0x49,0x100,0x4c,0x100,0x4e,0x200,0x4e,0x6f,0x100,0x50,0x100,0x51,
-0x100,0x52,0x100,0x52,0x100,0x52,0x200,0x53,0x4d,0x300,0x54,0x45,0x4c,0x200,0x54,0x4d,
-0x100,0x5a,0x100,0x5a,0x100,0x42,0x100,0x43,0x100,0x45,0x100,0x46,0x100,0x4d,0x300,0x46,
-0x41,0x58,0x100,0x393,0x100,0x3a0,0x100,0x44,0x300,0x50,0x54,0x45,0x200,0x48,0x67,0x200,
-0x65,0x56,0x300,0x4c,0x54,0x44,0x300,0x68,0x50,0x61,0x200,0x41,0x55,0x200,0x6f,0x56,
-0x200,0x49,0x55,0x200,0x70,0x41,0x200,0x6e,0x41,0x200,0x3bc,0x41,0x200,0x6d,0x41,0x200,
-0x6b,0x41,0x200,0x4b,0x42,0x200,0x4d,0x42,0x200,0x47,0x42,0x200,0x70,0x46,0x200,0x6e,
-0x46,0x200,0x3bc,0x46,0x200,0x48,0x7a,0x300,0x6b,0x48,0x7a,0x300,0x4d,0x48,0x7a,0x300,
-0x47,0x48,0x7a,0x300,0x54,0x48,0x7a,0x200,0x50,0x61,0x300,0x6b,0x50,0x61,0x300,0x4d,
-0x50,0x61,0x300,0x47,0x50,0x61,0x200,0x70,0x56,0x200,0x6e,0x56,0x200,0x3bc,0x56,0x200,
-0x6d,0x56,0x200,0x6b,0x56,0x200,0x4d,0x56,0x200,0x70,0x57,0x200,0x6e,0x57,0x200,0x3bc,
-0x57,0x200,0x6d,0x57,0x200,0x6b,0x57,0x200,0x4d,0x57,0x200,0x6b,0x3a9,0x200,0x4d,0x3a9,
-0x200,0x42,0x71,0x400,0x43,0x2215,0x6b,0x67,0x300,0x43,0x6f,0x2e,0x200,0x64,0x42,0x200,
-0x47,0x79,0x200,0x48,0x50,0x200,0x4b,0x4b,0x200,0x4b,0x4d,0x200,0x50,0x48,0x300,0x50,
-0x50,0x4d,0x200,0x50,0x52,0x200,0x53,0x76,0x200,0x57,0x62,0x300,0x56,0x2215,0x6d,0x300,
-0x41,0x2215,0x6d,0x100,0x41,0x100,0x42,0x100,0x43,0x100,0x44,0x100,0x45,0x100,0x46,0x100,
-0x47,0x100,0x48,0x100,0x49,0x100,0x4a,0x100,0x4b,0x100,0x4c,0x100,0x4d,0x100,0x4e,0x100,
-0x4f,0x100,0x50,0x100,0x51,0x100,0x52,0x100,0x53,0x100,0x54,0x100,0x55,0x100,0x56,0x100,
-0x57,0x100,0x58,0x100,0x59,0x100,0x5a,0x100,0x41,0x100,0x42,0x100,0x43,0x100,0x44,0x100,
+0x74,0x6d,0xff01,0x7a,0xff03,0x66,0x61,0x78,0xff01,0x3b3,0xff01,0x3c0,0xff01,0x76,0xff03,0x70,
+0x74,0x65,0xff02,0x68,0x67,0xff02,0x65,0x76,0xff03,0x6c,0x74,0x64,0xff03,0x68,0x70,0x61,
+0xff02,0x61,0x75,0xff02,0x6f,0x76,0xff02,0x69,0x75,0xff02,0x70,0x61,0xff02,0x6e,0x61,0xff02,
+0x3bc,0x61,0xff02,0x6d,0x61,0xff02,0x6b,0x61,0xff02,0x6b,0x62,0xff02,0x6d,0x62,0xff02,0x67,
+0x62,0xff02,0x70,0x66,0xff02,0x6e,0x66,0xff02,0x3bc,0x66,0xff02,0x68,0x7a,0xff03,0x6b,0x68,
+0x7a,0xff03,0x6d,0x68,0x7a,0xff03,0x67,0x68,0x7a,0xff03,0x74,0x68,0x7a,0xff02,0x70,0x61,
+0xff03,0x6b,0x70,0x61,0xff03,0x6d,0x70,0x61,0xff03,0x67,0x70,0x61,0xff02,0x70,0x76,0xff02,
+0x6e,0x76,0xff02,0x3bc,0x76,0xff02,0x6d,0x76,0xff02,0x6b,0x76,0xff02,0x6d,0x76,0xff02,0x70,
+0x77,0xff02,0x6e,0x77,0xff02,0x3bc,0x77,0xff02,0x6d,0x77,0xff02,0x6b,0x77,0xff02,0x6d,0x77,
+0xff02,0x6b,0x3c9,0xff02,0x6d,0x3c9,0xff02,0x62,0x71,0xff04,0x63,0x2215,0x6b,0x67,0xff03,0x63,
+0x6f,0x2e,0xff02,0x64,0x62,0xff02,0x67,0x79,0xff02,0x68,0x70,0xff02,0x6b,0x6b,0xff02,0x6b,
+0x6d,0xff02,0x70,0x68,0xff03,0x70,0x70,0x6d,0xff02,0x70,0x72,0xff02,0x73,0x76,0xff02,0x77,
+0x62,0xff03,0x76,0x2215,0x6d,0xff03,0x61,0x2215,0x6d,0xff01,0x3b1,0xff01,0x3b2,0xff01,0x3b4,0xff01,
+0x3b5,0xff01,0x3b6,0xff01,0x3b7,0xff01,0x3b8,0xff01,0x3ba,0xff01,0x3bb,0xff01,0x3bd,0xff01,0x3be,0xff01,
+0x3bf,0xff01,0x3c1,0xff01,0x3c4,0xff01,0x3c6,0xff01,0x3c7,0xff01,0x3c8,0xff01,0x3dd,0x8200,0xf0,0x20,
+0x345,0x3b2,0x100,0x3a5,0x8282,0xe6,0x3d2,0x301,0xe6,0x3a5,0x301,0x8282,0xe6,0x3d2,0x308,0xe6,
+0x3a5,0x308,0x100,0x3c2,0x100,0x3a3,0x100,0x41,0x100,0xc6,0x100,0x42,0x100,0x44,0x100,0x45,
+0x100,0x18e,0x100,0x47,0x100,0x48,0x100,0x49,0x100,0x4a,0x100,0x4b,0x100,0x4c,0x100,0x4d,
+0x100,0x4e,0x100,0x4f,0x100,0x222,0x100,0x50,0x100,0x52,0x100,0x54,0x100,0x55,0x100,0x57,
+0x200,0x52,0x73,0x100,0x43,0x200,0xb0,0x43,0x100,0x190,0x200,0xb0,0x46,0x100,0x48,0x100,
+0x48,0x100,0x48,0x100,0x49,0x100,0x49,0x100,0x4c,0x100,0x4e,0x200,0x4e,0x6f,0x100,0x50,
+0x100,0x51,0x100,0x52,0x100,0x52,0x100,0x52,0x200,0x53,0x4d,0x300,0x54,0x45,0x4c,0x200,
+0x54,0x4d,0x100,0x5a,0x100,0x5a,0x100,0x42,0x100,0x43,0x100,0x45,0x100,0x46,0x100,0x4d,
+0x300,0x46,0x41,0x58,0x100,0x393,0x100,0x3a0,0x100,0x44,0x100,0x56,0x300,0x50,0x54,0x45,
+0x200,0x48,0x67,0x200,0x65,0x56,0x300,0x4c,0x54,0x44,0x300,0x68,0x50,0x61,0x200,0x41,
+0x55,0x200,0x6f,0x56,0x200,0x49,0x55,0x200,0x70,0x41,0x200,0x6e,0x41,0x200,0x3bc,0x41,
+0x200,0x6d,0x41,0x200,0x6b,0x41,0x200,0x4b,0x42,0x200,0x4d,0x42,0x200,0x47,0x42,0x200,
+0x70,0x46,0x200,0x6e,0x46,0x200,0x3bc,0x46,0x200,0x48,0x7a,0x300,0x6b,0x48,0x7a,0x300,
+0x4d,0x48,0x7a,0x300,0x47,0x48,0x7a,0x300,0x54,0x48,0x7a,0x200,0x50,0x61,0x300,0x6b,
+0x50,0x61,0x300,0x4d,0x50,0x61,0x300,0x47,0x50,0x61,0x200,0x70,0x56,0x200,0x6e,0x56,
+0x200,0x3bc,0x56,0x200,0x6d,0x56,0x200,0x6b,0x56,0x200,0x4d,0x56,0x200,0x70,0x57,0x200,
+0x6e,0x57,0x200,0x3bc,0x57,0x200,0x6d,0x57,0x200,0x6b,0x57,0x200,0x4d,0x57,0x200,0x6b,
+0x3a9,0x200,0x4d,0x3a9,0x200,0x42,0x71,0x400,0x43,0x2215,0x6b,0x67,0x300,0x43,0x6f,0x2e,
+0x200,0x64,0x42,0x200,0x47,0x79,0x200,0x48,0x50,0x200,0x4b,0x4b,0x200,0x4b,0x4d,0x200,
+0x50,0x48,0x300,0x50,0x50,0x4d,0x200,0x50,0x52,0x200,0x53,0x76,0x200,0x57,0x62,0x300,
+0x56,0x2215,0x6d,0x300,0x41,0x2215,0x6d,0x100,0x41,0x100,0x42,0x100,0x43,0x100,0x44,0x100,
0x45,0x100,0x46,0x100,0x47,0x100,0x48,0x100,0x49,0x100,0x4a,0x100,0x4b,0x100,0x4c,0x100,
0x4d,0x100,0x4e,0x100,0x4f,0x100,0x50,0x100,0x51,0x100,0x52,0x100,0x53,0x100,0x54,0x100,
0x55,0x100,0x56,0x100,0x57,0x100,0x58,0x100,0x59,0x100,0x5a,0x100,0x41,0x100,0x42,0x100,
0x43,0x100,0x44,0x100,0x45,0x100,0x46,0x100,0x47,0x100,0x48,0x100,0x49,0x100,0x4a,0x100,
0x4b,0x100,0x4c,0x100,0x4d,0x100,0x4e,0x100,0x4f,0x100,0x50,0x100,0x51,0x100,0x52,0x100,
0x53,0x100,0x54,0x100,0x55,0x100,0x56,0x100,0x57,0x100,0x58,0x100,0x59,0x100,0x5a,0x100,
-0x41,0x100,0x43,0x100,0x44,0x100,0x47,0x100,0x4a,0x100,0x4b,0x100,0x4e,0x100,0x4f,0x100,
-0x50,0x100,0x51,0x100,0x53,0x100,0x54,0x100,0x55,0x100,0x56,0x100,0x57,0x100,0x58,0x100,
-0x59,0x100,0x5a,0x100,0x41,0x100,0x42,0x100,0x43,0x100,0x44,0x100,0x45,0x100,0x46,0x100,
-0x47,0x100,0x48,0x100,0x49,0x100,0x4a,0x100,0x4b,0x100,0x4c,0x100,0x4d,0x100,0x4e,0x100,
-0x4f,0x100,0x50,0x100,0x51,0x100,0x52,0x100,0x53,0x100,0x54,0x100,0x55,0x100,0x56,0x100,
-0x57,0x100,0x58,0x100,0x59,0x100,0x5a,0x100,0x41,0x100,0x42,0x100,0x44,0x100,0x45,0x100,
-0x46,0x100,0x47,0x100,0x4a,0x100,0x4b,0x100,0x4c,0x100,0x4d,0x100,0x4e,0x100,0x4f,0x100,
-0x50,0x100,0x51,0x100,0x53,0x100,0x54,0x100,0x55,0x100,0x56,0x100,0x57,0x100,0x58,0x100,
-0x59,0x100,0x41,0x100,0x42,0x100,0x44,0x100,0x45,0x100,0x46,0x100,0x47,0x100,0x49,0x100,
-0x4a,0x100,0x4b,0x100,0x4c,0x100,0x4d,0x100,0x4f,0x100,0x53,0x100,0x54,0x100,0x55,0x100,
-0x56,0x100,0x57,0x100,0x58,0x100,0x59,0x100,0x41,0x100,0x42,0x100,0x43,0x100,0x44,0x100,
+0x41,0x100,0x42,0x100,0x43,0x100,0x44,0x100,0x45,0x100,0x46,0x100,0x47,0x100,0x48,0x100,
+0x49,0x100,0x4a,0x100,0x4b,0x100,0x4c,0x100,0x4d,0x100,0x4e,0x100,0x4f,0x100,0x50,0x100,
+0x51,0x100,0x52,0x100,0x53,0x100,0x54,0x100,0x55,0x100,0x56,0x100,0x57,0x100,0x58,0x100,
+0x59,0x100,0x5a,0x100,0x41,0x100,0x43,0x100,0x44,0x100,0x47,0x100,0x4a,0x100,0x4b,0x100,
+0x4e,0x100,0x4f,0x100,0x50,0x100,0x51,0x100,0x53,0x100,0x54,0x100,0x55,0x100,0x56,0x100,
+0x57,0x100,0x58,0x100,0x59,0x100,0x5a,0x100,0x41,0x100,0x42,0x100,0x43,0x100,0x44,0x100,
0x45,0x100,0x46,0x100,0x47,0x100,0x48,0x100,0x49,0x100,0x4a,0x100,0x4b,0x100,0x4c,0x100,
0x4d,0x100,0x4e,0x100,0x4f,0x100,0x50,0x100,0x51,0x100,0x52,0x100,0x53,0x100,0x54,0x100,
0x55,0x100,0x56,0x100,0x57,0x100,0x58,0x100,0x59,0x100,0x5a,0x100,0x41,0x100,0x42,0x100,
+0x44,0x100,0x45,0x100,0x46,0x100,0x47,0x100,0x4a,0x100,0x4b,0x100,0x4c,0x100,0x4d,0x100,
+0x4e,0x100,0x4f,0x100,0x50,0x100,0x51,0x100,0x53,0x100,0x54,0x100,0x55,0x100,0x56,0x100,
+0x57,0x100,0x58,0x100,0x59,0x100,0x41,0x100,0x42,0x100,0x44,0x100,0x45,0x100,0x46,0x100,
+0x47,0x100,0x49,0x100,0x4a,0x100,0x4b,0x100,0x4c,0x100,0x4d,0x100,0x4f,0x100,0x53,0x100,
+0x54,0x100,0x55,0x100,0x56,0x100,0x57,0x100,0x58,0x100,0x59,0x100,0x41,0x100,0x42,0x100,
0x43,0x100,0x44,0x100,0x45,0x100,0x46,0x100,0x47,0x100,0x48,0x100,0x49,0x100,0x4a,0x100,
0x4b,0x100,0x4c,0x100,0x4d,0x100,0x4e,0x100,0x4f,0x100,0x50,0x100,0x51,0x100,0x52,0x100,
0x53,0x100,0x54,0x100,0x55,0x100,0x56,0x100,0x57,0x100,0x58,0x100,0x59,0x100,0x5a,0x100,
@@ -912,10 +938,10 @@ static const uint16_t extraData[15947]={
0x43,0x100,0x44,0x100,0x45,0x100,0x46,0x100,0x47,0x100,0x48,0x100,0x49,0x100,0x4a,0x100,
0x4b,0x100,0x4c,0x100,0x4d,0x100,0x4e,0x100,0x4f,0x100,0x50,0x100,0x51,0x100,0x52,0x100,
0x53,0x100,0x54,0x100,0x55,0x100,0x56,0x100,0x57,0x100,0x58,0x100,0x59,0x100,0x5a,0x100,
-0x391,0x100,0x392,0x100,0x393,0x100,0x394,0x100,0x395,0x100,0x396,0x100,0x397,0x100,0x398,0x100,
-0x399,0x100,0x39a,0x100,0x39b,0x100,0x39c,0x100,0x39d,0x100,0x39e,0x100,0x39f,0x100,0x3a0,0x100,
-0x3a1,0x100,0x398,0x100,0x3a3,0x100,0x3a4,0x100,0x3a5,0x100,0x3a6,0x100,0x3a7,0x100,0x3a8,0x100,
-0x3a9,0x100,0x3c2,0x100,0x391,0x100,0x392,0x100,0x393,0x100,0x394,0x100,0x395,0x100,0x396,0x100,
+0x41,0x100,0x42,0x100,0x43,0x100,0x44,0x100,0x45,0x100,0x46,0x100,0x47,0x100,0x48,0x100,
+0x49,0x100,0x4a,0x100,0x4b,0x100,0x4c,0x100,0x4d,0x100,0x4e,0x100,0x4f,0x100,0x50,0x100,
+0x51,0x100,0x52,0x100,0x53,0x100,0x54,0x100,0x55,0x100,0x56,0x100,0x57,0x100,0x58,0x100,
+0x59,0x100,0x5a,0x100,0x391,0x100,0x392,0x100,0x393,0x100,0x394,0x100,0x395,0x100,0x396,0x100,
0x397,0x100,0x398,0x100,0x399,0x100,0x39a,0x100,0x39b,0x100,0x39c,0x100,0x39d,0x100,0x39e,0x100,
0x39f,0x100,0x3a0,0x100,0x3a1,0x100,0x398,0x100,0x3a3,0x100,0x3a4,0x100,0x3a5,0x100,0x3a6,0x100,
0x3a7,0x100,0x3a8,0x100,0x3a9,0x100,0x3c2,0x100,0x391,0x100,0x392,0x100,0x393,0x100,0x394,0x100,
@@ -928,836 +954,846 @@ static const uint16_t extraData[15947]={
0x391,0x100,0x392,0x100,0x393,0x100,0x394,0x100,0x395,0x100,0x396,0x100,0x397,0x100,0x398,0x100,
0x399,0x100,0x39a,0x100,0x39b,0x100,0x39c,0x100,0x39d,0x100,0x39e,0x100,0x39f,0x100,0x3a0,0x100,
0x3a1,0x100,0x398,0x100,0x3a3,0x100,0x3a4,0x100,0x3a5,0x100,0x3a6,0x100,0x3a7,0x100,0x3a8,0x100,
-0x3a9,0x100,0x3c2,0x100,0x3dc,0x81,0xe6e6,0x300,0x81,0xe6e6,0x301,0x81,0xe6e6,0x313,0x82,0xe6e6,
-0x308,0x301,1,0x2b9,1,0x3b,1,0xb7,0x82,7,0x915,0x93c,0x82,7,0x916,0x93c,
-0x82,7,0x917,0x93c,0x82,7,0x91c,0x93c,0x82,7,0x921,0x93c,0x82,7,0x922,0x93c,
-0x82,7,0x92b,0x93c,0x82,7,0x92f,0x93c,0x82,7,0x9a1,0x9bc,0x82,7,0x9a2,0x9bc,
-0x82,7,0x9af,0x9bc,0x82,7,0xa32,0xa3c,0x82,7,0xa38,0xa3c,0x82,7,0xa16,0xa3c,
-0x82,7,0xa17,0xa3c,0x82,7,0xa1c,0xa3c,0x82,7,0xa2b,0xa3c,0x82,7,0xb21,0xb3c,
-0x82,7,0xb22,0xb3c,2,0xf42,0xfb7,2,0xf4c,0xfb7,2,0xf51,0xfb7,2,0xf56,0xfb7,
-2,0xf5b,0xfb7,2,0xf40,0xfb5,0x82,0x8182,0xf71,0xf72,0x82,0x8184,0xf71,0xf74,0x82,0x82,
-0xfb2,0xf80,0x82,0x82,0xfb3,0xf80,0x82,0x8182,0xf71,0xf80,2,0xf92,0xfb7,2,0xf9c,0xfb7,
-2,0xfa1,0xfb7,2,0xfa6,0xfb7,2,0xfab,0xfb7,2,0xf90,0xfb5,0x82,0xe6,0x3b1,0x301,
-0x82,0xe6,0x3b5,0x301,0x82,0xe6,0x3b7,0x301,0x82,0xe6,0x3b9,0x301,0x82,0xe6,0x3bf,0x301,
-0x82,0xe6,0x3c5,0x301,0x82,0xe6,0x3c9,0x301,0x82,0xe6,0x391,0x301,1,0x3b9,0x82,0xe6,
-0x395,0x301,0x82,0xe6,0x397,0x301,0x83,0xe6,0x3b9,0x308,0x301,0x82,0xe6,0x399,0x301,0x83,
-0xe6,0x3c5,0x308,0x301,0x82,0xe6,0x3a5,0x301,0x8382,0xe6,0xa8,0x301,0xe6,0x20,0x308,0x301,
-1,0x60,0x82,0xe6,0x39f,0x301,0x82,0xe6,0x3a9,0x301,0x8201,0xb4,0xe6,0x20,0x301,0x101,
-0x2002,0x20,0x101,0x2003,0x20,1,0x3a9,1,0x4b,0x82,0xe6,0x41,0x30a,1,0x3008,1,
-0x3009,0x82,1,0x2add,0x338,1,0x8c48,1,0x66f4,1,0x8eca,1,0x8cc8,1,0x6ed1,1,
-0x4e32,1,0x53e5,1,0x9f9c,1,0x9f9c,1,0x5951,1,0x91d1,1,0x5587,1,0x5948,1,
-0x61f6,1,0x7669,1,0x7f85,1,0x863f,1,0x87ba,1,0x88f8,1,0x908f,1,0x6a02,1,
-0x6d1b,1,0x70d9,1,0x73de,1,0x843d,1,0x916a,1,0x99f1,1,0x4e82,1,0x5375,1,
-0x6b04,1,0x721b,1,0x862d,1,0x9e1e,1,0x5d50,1,0x6feb,1,0x85cd,1,0x8964,1,
-0x62c9,1,0x81d8,1,0x881f,1,0x5eca,1,0x6717,1,0x6d6a,1,0x72fc,1,0x90ce,1,
-0x4f86,1,0x51b7,1,0x52de,1,0x64c4,1,0x6ad3,1,0x7210,1,0x76e7,1,0x8001,1,
-0x8606,1,0x865c,1,0x8def,1,0x9732,1,0x9b6f,1,0x9dfa,1,0x788c,1,0x797f,1,
-0x7da0,1,0x83c9,1,0x9304,1,0x9e7f,1,0x8ad6,1,0x58df,1,0x5f04,1,0x7c60,1,
-0x807e,1,0x7262,1,0x78ca,1,0x8cc2,1,0x96f7,1,0x58d8,1,0x5c62,1,0x6a13,1,
-0x6dda,1,0x6f0f,1,0x7d2f,1,0x7e37,1,0x964b,1,0x52d2,1,0x808b,1,0x51dc,1,
-0x51cc,1,0x7a1c,1,0x7dbe,1,0x83f1,1,0x9675,1,0x8b80,1,0x62cf,1,0x6a02,1,
-0x8afe,1,0x4e39,1,0x5be7,1,0x6012,1,0x7387,1,0x7570,1,0x5317,1,0x78fb,1,
-0x4fbf,1,0x5fa9,1,0x4e0d,1,0x6ccc,1,0x6578,1,0x7d22,1,0x53c3,1,0x585e,1,
-0x7701,1,0x8449,1,0x8aaa,1,0x6bba,1,0x8fb0,1,0x6c88,1,0x62fe,1,0x82e5,1,
-0x63a0,1,0x7565,1,0x4eae,1,0x5169,1,0x51c9,1,0x6881,1,0x7ce7,1,0x826f,1,
-0x8ad2,1,0x91cf,1,0x52f5,1,0x5442,1,0x5973,1,0x5eec,1,0x65c5,1,0x6ffe,1,
-0x792a,1,0x95ad,1,0x9a6a,1,0x9e97,1,0x9ece,1,0x529b,1,0x66c6,1,0x6b77,1,
-0x8f62,1,0x5e74,1,0x6190,1,0x6200,1,0x649a,1,0x6f23,1,0x7149,1,0x7489,1,
-0x79ca,1,0x7df4,1,0x806f,1,0x8f26,1,0x84ee,1,0x9023,1,0x934a,1,0x5217,1,
-0x52a3,1,0x54bd,1,0x70c8,1,0x88c2,1,0x8aaa,1,0x5ec9,1,0x5ff5,1,0x637b,1,
-0x6bae,1,0x7c3e,1,0x7375,1,0x4ee4,1,0x56f9,1,0x5be7,1,0x5dba,1,0x601c,1,
-0x73b2,1,0x7469,1,0x7f9a,1,0x8046,1,0x9234,1,0x96f6,1,0x9748,1,0x9818,1,
-0x4f8b,1,0x79ae,1,0x91b4,1,0x96b8,1,0x60e1,1,0x4e86,1,0x50da,1,0x5bee,1,
-0x5c3f,1,0x6599,1,0x6a02,1,0x71ce,1,0x7642,1,0x84fc,1,0x907c,1,0x9f8d,1,
-0x6688,1,0x962e,1,0x5289,1,0x677b,1,0x67f3,1,0x6d41,1,0x6e9c,1,0x7409,1,
-0x7559,1,0x786b,1,0x7d10,1,0x985e,1,0x516d,1,0x622e,1,0x9678,1,0x502b,1,
-0x5d19,1,0x6dea,1,0x8f2a,1,0x5f8b,1,0x6144,1,0x6817,1,0x7387,1,0x9686,1,
-0x5229,1,0x540f,1,0x5c65,1,0x6613,1,0x674e,1,0x68a8,1,0x6ce5,1,0x7406,1,
-0x75e2,1,0x7f79,1,0x88cf,1,0x88e1,1,0x91cc,1,0x96e2,1,0x533f,1,0x6eba,1,
-0x541d,1,0x71d0,1,0x7498,1,0x85fa,1,0x96a3,1,0x9c57,1,0x9e9f,1,0x6797,1,
-0x6dcb,1,0x81e8,1,0x7acb,1,0x7b20,1,0x7c92,1,0x72c0,1,0x7099,1,0x8b58,1,
-0x4ec0,1,0x8336,1,0x523a,1,0x5207,1,0x5ea6,1,0x62d3,1,0x7cd6,1,0x5b85,1,
-0x6d1e,1,0x66b4,1,0x8f3b,1,0x884c,1,0x964d,1,0x898b,1,0x5ed3,1,0x5140,1,
-0x55c0,1,0x585a,1,0x6674,1,0x51de,1,0x732a,1,0x76ca,1,0x793c,1,0x795e,1,
-0x7965,1,0x798f,1,0x9756,1,0x7cbe,1,0x7fbd,1,0x8612,1,0x8af8,1,0x9038,1,
-0x90fd,1,0x98ef,1,0x98fc,1,0x9928,1,0x9db4,1,0x4fae,1,0x50e7,1,0x514d,1,
-0x52c9,1,0x52e4,1,0x5351,1,0x559d,1,0x5606,1,0x5668,1,0x5840,1,0x58a8,1,
-0x5c64,1,0x5c6e,1,0x6094,1,0x6168,1,0x618e,1,0x61f2,1,0x654f,1,0x65e2,1,
-0x6691,1,0x6885,1,0x6d77,1,0x6e1a,1,0x6f22,1,0x716e,1,0x722b,1,0x7422,1,
-0x7891,1,0x793e,1,0x7949,1,0x7948,1,0x7950,1,0x7956,1,0x795d,1,0x798d,1,
-0x798e,1,0x7a40,1,0x7a81,1,0x7bc0,1,0x7df4,1,0x7e09,1,0x7e41,1,0x7f72,1,
-0x8005,1,0x81ed,1,0x8279,1,0x8279,1,0x8457,1,0x8910,1,0x8996,1,0x8b01,1,
-0x8b39,1,0x8cd3,1,0x8d08,1,0x8fb6,1,0x9038,1,0x96e3,1,0x97ff,1,0x983b,1,
-0x4e26,1,0x51b5,1,0x5168,1,0x4f80,1,0x5145,1,0x5180,1,0x52c7,1,0x52fa,1,
-0x559d,1,0x5555,1,0x5599,1,0x55e2,1,0x585a,1,0x58b3,1,0x5944,1,0x5954,1,
-0x5a62,1,0x5b28,1,0x5ed2,1,0x5ed9,1,0x5f69,1,0x5fad,1,0x60d8,1,0x614e,1,
-0x6108,1,0x618e,1,0x6160,1,0x61f2,1,0x6234,1,0x63c4,1,0x641c,1,0x6452,1,
-0x6556,1,0x6674,1,0x6717,1,0x671b,1,0x6756,1,0x6b79,1,0x6bba,1,0x6d41,1,
-0x6edb,1,0x6ecb,1,0x6f22,1,0x701e,1,0x716e,1,0x77a7,1,0x7235,1,0x72af,1,
-0x732a,1,0x7471,1,0x7506,1,0x753b,1,0x761d,1,0x761f,1,0x76ca,1,0x76db,1,
-0x76f4,1,0x774a,1,0x7740,1,0x78cc,1,0x7ab1,1,0x7bc0,1,0x7c7b,1,0x7d5b,1,
-0x7df4,1,0x7f3e,1,0x8005,1,0x8352,1,0x83ef,1,0x8779,1,0x8941,1,0x8986,1,
-0x8996,1,0x8abf,1,0x8af8,1,0x8acb,1,0x8b01,1,0x8afe,1,0x8aed,1,0x8b39,1,
-0x8b8a,1,0x8d08,1,0x8f38,1,0x9072,1,0x9199,1,0x9276,1,0x967c,1,0x96e3,1,
-0x9756,1,0x97db,1,0x97ff,1,0x980b,1,0x983b,1,0x9b12,1,0x9f9c,2,0xd84a,0xdc4a,
-2,0xd84a,0xdc44,2,0xd84c,0xdfd5,1,0x3b9d,1,0x4018,1,0x4039,2,0xd854,0xde49,2,
-0xd857,0xdcd0,2,0xd85f,0xded3,1,0x9f43,1,0x9f8e,0x82,0xe,0x5d9,0x5b4,0x82,0x11,0x5f2,
-0x5b7,0x82,0x18,0x5e9,0x5c1,0x82,0x19,0x5e9,0x5c2,0x83,0x18,0x5e9,0x5bc,0x5c1,0x83,0x19,
-0x5e9,0x5bc,0x5c2,0x82,0x11,0x5d0,0x5b7,0x82,0x12,0x5d0,0x5b8,0x82,0x15,0x5d0,0x5bc,0x82,
-0x15,0x5d1,0x5bc,0x82,0x15,0x5d2,0x5bc,0x82,0x15,0x5d3,0x5bc,0x82,0x15,0x5d4,0x5bc,0x82,
-0x15,0x5d5,0x5bc,0x82,0x15,0x5d6,0x5bc,0x82,0x15,0x5d8,0x5bc,0x82,0x15,0x5d9,0x5bc,0x82,
-0x15,0x5da,0x5bc,0x82,0x15,0x5db,0x5bc,0x82,0x15,0x5dc,0x5bc,0x82,0x15,0x5de,0x5bc,0x82,
-0x15,0x5e0,0x5bc,0x82,0x15,0x5e1,0x5bc,0x82,0x15,0x5e3,0x5bc,0x82,0x15,0x5e4,0x5bc,0x82,
-0x15,0x5e6,0x5bc,0x82,0x15,0x5e7,0x5bc,0x82,0x15,0x5e8,0x5bc,0x82,0x15,0x5e9,0x5bc,0x82,
-0x15,0x5ea,0x5bc,0x82,0x13,0x5d5,0x5b9,0x82,0x17,0x5d1,0x5bf,0x82,0x17,0x5db,0x5bf,0x82,
-0x17,0x5e4,0x5bf,0x84,0xd8,0xd834,0xdd57,0xd834,0xdd65,0x84,0xd8,0xd834,0xdd58,0xd834,0xdd65,0x86,
-0xd8,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd6e,0x86,0xd8,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd6f,0x86,
-0xd8,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd70,0x86,0xd8,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd71,0x86,
-0xd8,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd72,0x84,0xd8,0xd834,0xddb9,0xd834,0xdd65,0x84,0xd8,0xd834,
-0xddba,0xd834,0xdd65,0x86,0xd8,0xd834,0xddb9,0xd834,0xdd65,0xd834,0xdd6e,0x86,0xd8,0xd834,0xddba,0xd834,
-0xdd65,0xd834,0xdd6e,0x86,0xd8,0xd834,0xddb9,0xd834,0xdd65,0xd834,0xdd6f,0x86,0xd8,0xd834,0xddba,0xd834,
-0xdd65,0xd834,0xdd6f,1,0x4e3d,1,0x4e38,1,0x4e41,2,0xd840,0xdd22,1,0x4f60,1,0x4fae,
-1,0x4fbb,1,0x5002,1,0x507a,1,0x5099,1,0x50e7,1,0x50cf,1,0x349e,2,0xd841,
-0xde3a,1,0x514d,1,0x5154,1,0x5164,1,0x5177,2,0xd841,0xdd1c,1,0x34b9,1,0x5167,
-1,0x518d,2,0xd841,0xdd4b,1,0x5197,1,0x51a4,1,0x4ecc,1,0x51ac,1,0x51b5,2,
-0xd864,0xdddf,1,0x51f5,1,0x5203,1,0x34df,1,0x523b,1,0x5246,1,0x5272,1,0x5277,
-1,0x3515,1,0x52c7,1,0x52c9,1,0x52e4,1,0x52fa,1,0x5305,1,0x5306,1,0x5317,
-1,0x5349,1,0x5351,1,0x535a,1,0x5373,1,0x537d,1,0x537f,1,0x537f,1,0x537f,
-2,0xd842,0xde2c,1,0x7070,1,0x53ca,1,0x53df,2,0xd842,0xdf63,1,0x53eb,1,0x53f1,
-1,0x5406,1,0x549e,1,0x5438,1,0x5448,1,0x5468,1,0x54a2,1,0x54f6,1,0x5510,
-1,0x5553,1,0x5563,1,0x5584,1,0x5584,1,0x5599,1,0x55ab,1,0x55b3,1,0x55c2,
-1,0x5716,1,0x5606,1,0x5717,1,0x5651,1,0x5674,1,0x5207,1,0x58ee,1,0x57ce,
-1,0x57f4,1,0x580d,1,0x578b,1,0x5832,1,0x5831,1,0x58ac,2,0xd845,0xdce4,1,
-0x58f2,1,0x58f7,1,0x5906,1,0x591a,1,0x5922,1,0x5962,2,0xd845,0xdea8,2,0xd845,
-0xdeea,1,0x59ec,1,0x5a1b,1,0x5a27,1,0x59d8,1,0x5a66,1,0x36ee,1,0x36fc,1,
-0x5b08,1,0x5b3e,1,0x5b3e,2,0xd846,0xddc8,1,0x5bc3,1,0x5bd8,1,0x5be7,1,0x5bf3,
-2,0xd846,0xdf18,1,0x5bff,1,0x5c06,1,0x5f53,1,0x5c22,1,0x3781,1,0x5c60,1,
-0x5c6e,1,0x5cc0,1,0x5c8d,2,0xd847,0xdde4,1,0x5d43,2,0xd847,0xdde6,1,0x5d6e,1,
-0x5d6b,1,0x5d7c,1,0x5de1,1,0x5de2,1,0x382f,1,0x5dfd,1,0x5e28,1,0x5e3d,1,
-0x5e69,1,0x3862,2,0xd848,0xdd83,1,0x387c,1,0x5eb0,1,0x5eb3,1,0x5eb6,1,0x5eca,
-2,0xd868,0xdf92,1,0x5efe,2,0xd848,0xdf31,2,0xd848,0xdf31,1,0x8201,1,0x5f22,1,
-0x5f22,1,0x38c7,2,0xd84c,0xdeb8,2,0xd858,0xddda,1,0x5f62,1,0x5f6b,1,0x38e3,1,
-0x5f9a,1,0x5fcd,1,0x5fd7,1,0x5ff9,1,0x6081,1,0x393a,1,0x391c,1,0x6094,2,
-0xd849,0xded4,1,0x60c7,1,0x6148,1,0x614c,1,0x614e,1,0x614c,1,0x617a,1,0x618e,
-1,0x61b2,1,0x61a4,1,0x61af,1,0x61de,1,0x61f2,1,0x61f6,1,0x6210,1,0x621b,
-1,0x625d,1,0x62b1,1,0x62d4,1,0x6350,2,0xd84a,0xdf0c,1,0x633d,1,0x62fc,1,
-0x6368,1,0x6383,1,0x63e4,2,0xd84a,0xdff1,1,0x6422,1,0x63c5,1,0x63a9,1,0x3a2e,
-1,0x6469,1,0x647e,1,0x649d,1,0x6477,1,0x3a6c,1,0x654f,1,0x656c,2,0xd84c,
-0xdc0a,1,0x65e3,1,0x66f8,1,0x6649,1,0x3b19,1,0x6691,1,0x3b08,1,0x3ae4,1,
-0x5192,1,0x5195,1,0x6700,1,0x669c,1,0x80ad,1,0x43d9,1,0x6717,1,0x671b,1,
-0x6721,1,0x675e,1,0x6753,2,0xd84c,0xdfc3,1,0x3b49,1,0x67fa,1,0x6785,1,0x6852,
-1,0x6885,2,0xd84d,0xdc6d,1,0x688e,1,0x681f,1,0x6914,1,0x3b9d,1,0x6942,1,
-0x69a3,1,0x69ea,1,0x6aa8,2,0xd84d,0xdea3,1,0x6adb,1,0x3c18,1,0x6b21,2,0xd84e,
-0xdca7,1,0x6b54,1,0x3c4e,1,0x6b72,1,0x6b9f,1,0x6bba,1,0x6bbb,2,0xd84e,0xde8d,
-2,0xd847,0xdd0b,2,0xd84e,0xdefa,1,0x6c4e,2,0xd84f,0xdcbc,1,0x6cbf,1,0x6ccd,1,
-0x6c67,1,0x6d16,1,0x6d3e,1,0x6d77,1,0x6d41,1,0x6d69,1,0x6d78,1,0x6d85,2,
-0xd84f,0xdd1e,1,0x6d34,1,0x6e2f,1,0x6e6e,1,0x3d33,1,0x6ecb,1,0x6ec7,2,0xd84f,
-0xded1,1,0x6df9,1,0x6f6e,2,0xd84f,0xdf5e,2,0xd84f,0xdf8e,1,0x6fc6,1,0x7039,1,
-0x701e,1,0x701b,1,0x3d96,1,0x704a,1,0x707d,1,0x7077,1,0x70ad,2,0xd841,0xdd25,
-1,0x7145,2,0xd850,0xde63,1,0x719c,2,0xd850,0xdfab,1,0x7228,1,0x7235,1,0x7250,
-2,0xd851,0xde08,1,0x7280,1,0x7295,2,0xd851,0xdf35,2,0xd852,0xdc14,1,0x737a,1,
-0x738b,1,0x3eac,1,0x73a5,1,0x3eb8,1,0x3eb8,1,0x7447,1,0x745c,1,0x7471,1,
-0x7485,1,0x74ca,1,0x3f1b,1,0x7524,2,0xd853,0xdc36,1,0x753e,2,0xd853,0xdc92,1,
-0x7570,2,0xd848,0xdd9f,1,0x7610,2,0xd853,0xdfa1,2,0xd853,0xdfb8,2,0xd854,0xdc44,1,
-0x3ffc,1,0x4008,1,0x76f4,2,0xd854,0xdcf3,2,0xd854,0xdcf2,2,0xd854,0xdd19,2,0xd854,
-0xdd33,1,0x771e,1,0x771f,1,0x771f,1,0x774a,1,0x4039,1,0x778b,1,0x4046,1,
-0x4096,2,0xd855,0xdc1d,1,0x784e,1,0x788c,1,0x78cc,1,0x40e3,2,0xd855,0xde26,1,
-0x7956,2,0xd855,0xde9a,2,0xd855,0xdec5,1,0x798f,1,0x79eb,1,0x412f,1,0x7a40,1,
-0x7a4a,1,0x7a4f,2,0xd856,0xdd7c,2,0xd856,0xdea7,2,0xd856,0xdea7,1,0x7aee,1,0x4202,
-2,0xd856,0xdfab,1,0x7bc6,1,0x7bc9,1,0x4227,2,0xd857,0xdc80,1,0x7cd2,1,0x42a0,
-1,0x7ce8,1,0x7ce3,1,0x7d00,2,0xd857,0xdf86,1,0x7d63,1,0x4301,1,0x7dc7,1,
-0x7e02,1,0x7e45,1,0x4334,2,0xd858,0xde28,2,0xd858,0xde47,1,0x4359,2,0xd858,0xded9,
-1,0x7f7a,2,0xd858,0xdf3e,1,0x7f95,1,0x7ffa,1,0x8005,2,0xd859,0xdcda,2,0xd859,
-0xdd23,1,0x8060,2,0xd859,0xdda8,1,0x8070,2,0xd84c,0xdf5f,1,0x43d5,1,0x80b2,1,
-0x8103,1,0x440b,1,0x813e,1,0x5ab5,2,0xd859,0xdfa7,2,0xd859,0xdfb5,2,0xd84c,0xdf93,
-2,0xd84c,0xdf9c,1,0x8201,1,0x8204,1,0x8f9e,1,0x446b,1,0x8291,1,0x828b,1,
-0x829d,1,0x52b3,1,0x82b1,1,0x82b3,1,0x82bd,1,0x82e6,2,0xd85a,0xdf3c,1,0x82e5,
-1,0x831d,1,0x8363,1,0x83ad,1,0x8323,1,0x83bd,1,0x83e7,1,0x8457,1,0x8353,
-1,0x83ca,1,0x83cc,1,0x83dc,2,0xd85b,0xdc36,2,0xd85b,0xdd6b,2,0xd85b,0xdcd5,1,
-0x452b,1,0x84f1,1,0x84f3,1,0x8516,2,0xd85c,0xdfca,1,0x8564,2,0xd85b,0xdf2c,1,
-0x455d,1,0x4561,2,0xd85b,0xdfb1,2,0xd85c,0xdcd2,1,0x456b,1,0x8650,1,0x865c,1,
-0x8667,1,0x8669,1,0x86a9,1,0x8688,1,0x870e,1,0x86e2,1,0x8779,1,0x8728,1,
-0x876b,1,0x8786,1,0x45d7,1,0x87e1,1,0x8801,1,0x45f9,1,0x8860,1,0x8863,2,
-0xd85d,0xde67,1,0x88d7,1,0x88de,1,0x4635,1,0x88fa,1,0x34bb,2,0xd85e,0xdcae,2,
-0xd85e,0xdd66,1,0x46be,1,0x46c7,1,0x8aa0,1,0x8aed,1,0x8b8a,1,0x8c55,2,0xd85f,
-0xdca8,1,0x8cab,1,0x8cc1,1,0x8d1b,1,0x8d77,2,0xd85f,0xdf2f,2,0xd842,0xdc04,1,
-0x8dcb,1,0x8dbc,1,0x8df0,2,0xd842,0xdcde,1,0x8ed4,1,0x8f38,2,0xd861,0xddd2,2,
-0xd861,0xdded,1,0x9094,1,0x90f1,1,0x9111,2,0xd861,0xdf2e,1,0x911b,1,0x9238,1,
-0x92d7,1,0x92d8,1,0x927c,1,0x93f9,1,0x9415,2,0xd862,0xdffa,1,0x958b,1,0x4995,
-1,0x95b7,2,0xd863,0xdd77,1,0x49e6,1,0x96c3,1,0x5db2,1,0x9723,2,0xd864,0xdd45,
-2,0xd864,0xde1a,1,0x4a6e,1,0x4a76,1,0x97e0,2,0xd865,0xdc0a,1,0x4ab2,2,0xd865,
-0xdc96,1,0x980b,1,0x980b,1,0x9829,2,0xd865,0xddb6,1,0x98e2,1,0x4b33,1,0x9929,
-1,0x99a7,1,0x99c2,1,0x99fe,1,0x4bce,2,0xd866,0xdf30,1,0x9b12,1,0x9c40,1,
-0x9cfd,1,0x4cce,1,0x4ced,1,0x9d67,2,0xd868,0xdcce,1,0x4cf8,2,0xd868,0xdd05,2,
-0xd868,0xde0e,2,0xd868,0xde91,1,0x9ebb,1,0x4d56,1,0x9ef9,1,0x9efe,1,0x9f05,1,
-0x9f0f,1,0x9f16,1,0x9f3b,2,0xd869,0xde00,0x82,0xe6,0x41,0x300,0x82,0xe6,0x41,0x301,
-0x4e6,0x82,0xe6,0x41,0x302,0x82,0xe6,0x41,0x303,0x2c8,0x82,0xe6,0x41,0x308,0x2e0,0x82,
-0xe6,0x41,0x30a,0x484,0x82,0xca,0x43,0x327,0x82,0xe6,0x45,0x300,0x82,0xe6,0x45,0x301,
-0x50e,0x82,0xe6,0x45,0x302,0x82,0xe6,0x45,0x308,0x82,0xe6,0x49,0x300,0x82,0xe6,0x49,
-0x301,0x82,0xe6,0x49,0x302,0x498,0x82,0xe6,0x49,0x308,0x82,0xe6,0x4e,0x303,0x82,0xe6,
-0x4f,0x300,0x82,0xe6,0x4f,0x301,0x522,0x82,0xe6,0x4f,0x302,0x2ec,0x82,0xe6,0x4f,0x303,
-0x2e8,0x82,0xe6,0x4f,0x308,0x82,0xe6,0x55,0x300,0x82,0xe6,0x55,0x301,0x82,0xe6,0x55,
-0x302,0x2b8,0x82,0xe6,0x55,0x308,0x82,0xe6,0x59,0x301,0x82,0xe6,0x61,0x300,0x82,0xe6,
-0x61,0x301,0x4ee,0x82,0xe6,0x61,0x302,0x82,0xe6,0x61,0x303,0x2ca,0x82,0xe6,0x61,0x308,
-0x2e2,0x82,0xe6,0x61,0x30a,0x486,0x82,0xca,0x63,0x327,0x82,0xe6,0x65,0x300,0x82,0xe6,
-0x65,0x301,0x516,0x82,0xe6,0x65,0x302,0x82,0xe6,0x65,0x308,0x82,0xe6,0x69,0x300,0x82,
-0xe6,0x69,0x301,0x82,0xe6,0x69,0x302,0x49a,0x82,0xe6,0x69,0x308,0x82,0xe6,0x6e,0x303,
-0x82,0xe6,0x6f,0x300,0x82,0xe6,0x6f,0x301,0x52a,0x82,0xe6,0x6f,0x302,0x2f2,0x82,0xe6,
-0x6f,0x303,0x2ea,0x82,0xe6,0x6f,0x308,0x82,0xe6,0x75,0x300,0x82,0xe6,0x75,0x301,0x82,
-0xe6,0x75,0x302,0x2c0,0x82,0xe6,0x75,0x308,0x82,0xe6,0x79,0x301,0x82,0xe6,0x79,0x308,
-0x82,0xe6,0x41,0x304,0x82,0xe6,0x61,0x304,0x4fe,0x82,0xe6,0x41,0x306,0x506,0x82,0xe6,
-0x61,0x306,0x82,0xca,0x41,0x328,0x82,0xca,0x61,0x328,0x82,0xe6,0x43,0x301,0x82,0xe6,
-0x63,0x301,0x82,0xe6,0x43,0x302,0x82,0xe6,0x63,0x302,0x82,0xe6,0x43,0x307,0x82,0xe6,
-0x63,0x307,0x82,0xe6,0x43,0x30c,0x82,0xe6,0x63,0x30c,0x82,0xe6,0x44,0x30c,0x82,0xe6,
-0x64,0x30c,0x488,0x82,0xe6,0x45,0x304,0x48c,0x82,0xe6,0x65,0x304,0x82,0xe6,0x45,0x306,
-0x82,0xe6,0x65,0x306,0x82,0xe6,0x45,0x307,0x82,0xe6,0x65,0x307,0x82,0xca,0x45,0x328,
-0x82,0xca,0x65,0x328,0x82,0xe6,0x45,0x30c,0x82,0xe6,0x65,0x30c,0x82,0xe6,0x47,0x302,
-0x82,0xe6,0x67,0x302,0x82,0xe6,0x47,0x306,0x82,0xe6,0x67,0x306,0x82,0xe6,0x47,0x307,
-0x82,0xe6,0x67,0x307,0x82,0xca,0x47,0x327,0x82,0xca,0x67,0x327,0x82,0xe6,0x48,0x302,
-0x82,0xe6,0x68,0x302,0x82,0xe6,0x49,0x303,0x82,0xe6,0x69,0x303,0x82,0xe6,0x49,0x304,
-0x82,0xe6,0x69,0x304,0x82,0xe6,0x49,0x306,0x82,0xe6,0x69,0x306,0x82,0xca,0x49,0x328,
-0x82,0xca,0x69,0x328,0x82,0xe6,0x49,0x307,0x82,0xe6,0x4a,0x302,0x82,0xe6,0x6a,0x302,
-0x82,0xca,0x4b,0x327,0x82,0xca,0x6b,0x327,0x82,0xe6,0x4c,0x301,0x82,0xe6,0x6c,0x301,
-0x82,0xca,0x4c,0x327,0x82,0xca,0x6c,0x327,0x82,0xe6,0x4c,0x30c,0x82,0xe6,0x6c,0x30c,
-0x82,0xe6,0x4e,0x301,0x82,0xe6,0x6e,0x301,0x82,0xca,0x4e,0x327,0x82,0xca,0x6e,0x327,
-0x82,0xe6,0x4e,0x30c,0x82,0xe6,0x6e,0x30c,0x4ac,0x82,0xe6,0x4f,0x304,0x4b0,0x82,0xe6,
-0x6f,0x304,0x82,0xe6,0x4f,0x306,0x82,0xe6,0x6f,0x306,0x82,0xe6,0x4f,0x30b,0x82,0xe6,
-0x6f,0x30b,0x82,0xe6,0x52,0x301,0x82,0xe6,0x72,0x301,0x82,0xca,0x52,0x327,0x82,0xca,
-0x72,0x327,0x82,0xe6,0x52,0x30c,0x82,0xe6,0x72,0x30c,0x4c0,0x82,0xe6,0x53,0x301,0x4c2,
-0x82,0xe6,0x73,0x301,0x82,0xe6,0x53,0x302,0x82,0xe6,0x73,0x302,0x82,0xca,0x53,0x327,
-0x82,0xca,0x73,0x327,0x4c4,0x82,0xe6,0x53,0x30c,0x4c6,0x82,0xe6,0x73,0x30c,0x82,0xca,
-0x54,0x327,0x82,0xca,0x74,0x327,0x82,0xe6,0x54,0x30c,0x82,0xe6,0x74,0x30c,0x4cc,0x82,
-0xe6,0x55,0x303,0x4ce,0x82,0xe6,0x75,0x303,0x4d0,0x82,0xe6,0x55,0x304,0x4d2,0x82,0xe6,
-0x75,0x304,0x82,0xe6,0x55,0x306,0x82,0xe6,0x75,0x306,0x82,0xe6,0x55,0x30a,0x82,0xe6,
-0x75,0x30a,0x82,0xe6,0x55,0x30b,0x82,0xe6,0x75,0x30b,0x82,0xca,0x55,0x328,0x82,0xca,
-0x75,0x328,0x82,0xe6,0x57,0x302,0x82,0xe6,0x77,0x302,0x82,0xe6,0x59,0x302,0x82,0xe6,
-0x79,0x302,0x82,0xe6,0x59,0x308,0x82,0xe6,0x5a,0x301,0x82,0xe6,0x7a,0x301,0x82,0xe6,
-0x5a,0x307,0x82,0xe6,0x7a,0x307,0x82,0xe6,0x5a,0x30c,0x82,0xe6,0x7a,0x30c,0x536,0x82,
-0xd8,0x4f,0x31b,0x540,0x82,0xd8,0x6f,0x31b,0x54a,0x82,0xd8,0x55,0x31b,0x554,0x82,0xd8,
-0x75,0x31b,0x82,0xe6,0x41,0x30c,0x82,0xe6,0x61,0x30c,0x82,0xe6,0x49,0x30c,0x82,0xe6,
-0x69,0x30c,0x82,0xe6,0x4f,0x30c,0x82,0xe6,0x6f,0x30c,0x82,0xe6,0x55,0x30c,0x82,0xe6,
-0x75,0x30c,0x83,0xe6,0x55,0x308,0x304,0x83,0xe6,0x75,0x308,0x304,0x83,0xe6,0x55,0x308,
-0x301,0x83,0xe6,0x75,0x308,0x301,0x83,0xe6,0x55,0x308,0x30c,0x83,0xe6,0x75,0x308,0x30c,
-0x83,0xe6,0x55,0x308,0x300,0x83,0xe6,0x75,0x308,0x300,0x83,0xe6,0x41,0x308,0x304,0x83,
-0xe6,0x61,0x308,0x304,0x83,0xe6,0x41,0x307,0x304,0x83,0xe6,0x61,0x307,0x304,0x82,0xe6,
-0xc6,0x304,0x82,0xe6,0xe6,0x304,0x82,0xe6,0x47,0x30c,0x82,0xe6,0x67,0x30c,0x82,0xe6,
-0x4b,0x30c,0x82,0xe6,0x6b,0x30c,0x2d8,0x82,0xca,0x4f,0x328,0x2da,0x82,0xca,0x6f,0x328,
-0x83,0xe6,0x4f,0x328,0x304,0x83,0xe6,0x6f,0x328,0x304,0x82,0xe6,0x1b7,0x30c,0x82,0xe6,
-0x292,0x30c,0x82,0xe6,0x6a,0x30c,0x82,0xe6,0x47,0x301,0x82,0xe6,0x67,0x301,0x82,0xe6,
-0x4e,0x300,0x82,0xe6,0x6e,0x300,0x83,0xe6,0x41,0x30a,0x301,0x83,0xe6,0x61,0x30a,0x301,
-0x82,0xe6,0xc6,0x301,0x82,0xe6,0xe6,0x301,0x82,0xe6,0xd8,0x301,0x82,0xe6,0xf8,0x301,
-0x82,0xe6,0x41,0x30f,0x82,0xe6,0x61,0x30f,0x82,0xe6,0x41,0x311,0x82,0xe6,0x61,0x311,
-0x82,0xe6,0x45,0x30f,0x82,0xe6,0x65,0x30f,0x82,0xe6,0x45,0x311,0x82,0xe6,0x65,0x311,
-0x82,0xe6,0x49,0x30f,0x82,0xe6,0x69,0x30f,0x82,0xe6,0x49,0x311,0x82,0xe6,0x69,0x311,
-0x82,0xe6,0x4f,0x30f,0x82,0xe6,0x6f,0x30f,0x82,0xe6,0x4f,0x311,0x82,0xe6,0x6f,0x311,
-0x82,0xe6,0x52,0x30f,0x82,0xe6,0x72,0x30f,0x82,0xe6,0x52,0x311,0x82,0xe6,0x72,0x311,
-0x82,0xe6,0x55,0x30f,0x82,0xe6,0x75,0x30f,0x82,0xe6,0x55,0x311,0x82,0xe6,0x75,0x311,
-0x82,0xdc,0x53,0x326,0x82,0xdc,0x73,0x326,0x82,0xdc,0x54,0x326,0x82,0xdc,0x74,0x326,
-0x82,0xe6,0x48,0x30c,0x82,0xe6,0x68,0x30c,0x2cc,0x82,0xe6,0x41,0x307,0x2ce,0x82,0xe6,
-0x61,0x307,0x490,0x82,0xca,0x45,0x327,0x492,0x82,0xca,0x65,0x327,0x83,0xe6,0x4f,0x308,
-0x304,0x83,0xe6,0x6f,0x308,0x304,0x83,0xe6,0x4f,0x303,0x304,0x83,0xe6,0x6f,0x303,0x304,
-0x2f8,0x82,0xe6,0x4f,0x307,0x2fa,0x82,0xe6,0x6f,0x307,0x83,0xe6,0x4f,0x307,0x304,0x83,
-0xe6,0x6f,0x307,0x304,0x82,0xe6,0x59,0x304,0x82,0xe6,0x79,0x304,0x8382,0xe6,0xa8,0x301,
-0xe6,0x20,0x308,0x301,0x82,0xe6,0x391,0x301,0x82,0xe6,0x395,0x301,0x82,0xe6,0x397,0x301,
-0x82,0xe6,0x399,0x301,0x82,0xe6,0x39f,0x301,0x82,0xe6,0x3a5,0x301,0x82,0xe6,0x3a9,0x301,
-0x83,0xe6,0x3b9,0x308,0x301,0x82,0xe6,0x399,0x308,0x82,0xe6,0x3a5,0x308,0x652,0x82,0xe6,
-0x3b1,0x301,0x82,0xe6,0x3b5,0x301,0x658,0x82,0xe6,0x3b7,0x301,0x82,0xe6,0x3b9,0x301,0x83,
-0xe6,0x3c5,0x308,0x301,0x34e,0x82,0xe6,0x3b9,0x308,0x388,0x82,0xe6,0x3c5,0x308,0x82,0xe6,
-0x3bf,0x301,0x82,0xe6,0x3c5,0x301,0x670,0x82,0xe6,0x3c9,0x301,0x82,0xe6,0x415,0x300,0x82,
-0xe6,0x415,0x308,0x82,0xe6,0x413,0x301,0x82,0xe6,0x406,0x308,0x82,0xe6,0x41a,0x301,0x82,
-0xe6,0x418,0x300,0x82,0xe6,0x423,0x306,0x82,0xe6,0x418,0x306,0x82,0xe6,0x438,0x306,0x82,
-0xe6,0x435,0x300,0x82,0xe6,0x435,0x308,0x82,0xe6,0x433,0x301,0x82,0xe6,0x456,0x308,0x82,
-0xe6,0x43a,0x301,0x82,0xe6,0x438,0x300,0x82,0xe6,0x443,0x306,0x82,0xe6,0x474,0x30f,0x82,
-0xe6,0x475,0x30f,0x82,0xe6,0x416,0x306,0x82,0xe6,0x436,0x306,0x82,0xe6,0x410,0x306,0x82,
-0xe6,0x430,0x306,0x82,0xe6,0x410,0x308,0x82,0xe6,0x430,0x308,0x82,0xe6,0x415,0x306,0x82,
-0xe6,0x435,0x306,0x82,0xe6,0x4d8,0x308,0x82,0xe6,0x4d9,0x308,0x82,0xe6,0x416,0x308,0x82,
-0xe6,0x436,0x308,0x82,0xe6,0x417,0x308,0x82,0xe6,0x437,0x308,0x82,0xe6,0x418,0x304,0x82,
-0xe6,0x438,0x304,0x82,0xe6,0x418,0x308,0x82,0xe6,0x438,0x308,0x82,0xe6,0x41e,0x308,0x82,
-0xe6,0x43e,0x308,0x82,0xe6,0x4e8,0x308,0x82,0xe6,0x4e9,0x308,0x82,0xe6,0x42d,0x308,0x82,
-0xe6,0x44d,0x308,0x82,0xe6,0x423,0x304,0x82,0xe6,0x443,0x304,0x82,0xe6,0x423,0x308,0x82,
-0xe6,0x443,0x308,0x82,0xe6,0x423,0x30b,0x82,0xe6,0x443,0x30b,0x82,0xe6,0x427,0x308,0x82,
-0xe6,0x447,0x308,0x82,0xe6,0x42b,0x308,0x82,0xe6,0x44b,0x308,0x82,0xe6,0x627,0x653,0x82,
-0xe6,0x627,0x654,0x82,0xe6,0x648,0x654,0x82,0xdc,0x627,0x655,0x82,0xe6,0x64a,0x654,0x82,
-0xe6,0x6d5,0x654,0x82,0xe6,0x6c1,0x654,0x82,0xe6,0x6d2,0x654,0x82,7,0x928,0x93c,0x82,
-7,0x930,0x93c,0x82,7,0x933,0x93c,2,0x9c7,0x9be,2,0x9c7,0x9d7,2,0xb47,0xb56,
-2,0xb47,0xb3e,2,0xb47,0xb57,2,0xb92,0xbd7,2,0xbc6,0xbbe,2,0xbc7,0xbbe,2,
-0xbc6,0xbd7,0x82,0x5b,0xc46,0xc56,2,0xcbf,0xcd5,2,0xcc6,0xcd5,2,0xcc6,0xcd6,0x450,
-2,0xcc6,0xcc2,3,0xcc6,0xcc2,0xcd5,2,0xd46,0xd3e,2,0xd47,0xd3e,2,0xd46,0xd57,
-0x82,9,0xdd9,0xdca,0x45e,2,0xdd9,0xdcf,0x83,9,0xdd9,0xdcf,0xdca,2,0xdd9,0xddf,
-2,0x1025,0x102e,2,0x1b05,0x1b35,2,0x1b07,0x1b35,2,0x1b09,0x1b35,2,0x1b0b,0x1b35,2,
-0x1b0d,0x1b35,2,0x1b11,0x1b35,2,0x1b3a,0x1b35,2,0x1b3c,0x1b35,2,0x1b3e,0x1b35,2,0x1b3f,
-0x1b35,2,0x1b42,0x1b35,0x82,0xdc,0x41,0x325,0x82,0xdc,0x61,0x325,0x82,0xe6,0x42,0x307,
-0x82,0xe6,0x62,0x307,0x82,0xdc,0x42,0x323,0x82,0xdc,0x62,0x323,0x82,0xdc,0x42,0x331,
-0x82,0xdc,0x62,0x331,0x83,0xe6,0x43,0x327,0x301,0x83,0xe6,0x63,0x327,0x301,0x82,0xe6,
-0x44,0x307,0x82,0xe6,0x64,0x307,0x82,0xdc,0x44,0x323,0x82,0xdc,0x64,0x323,0x82,0xdc,
-0x44,0x331,0x82,0xdc,0x64,0x331,0x82,0xca,0x44,0x327,0x82,0xca,0x64,0x327,0x82,0xdc,
-0x44,0x32d,0x82,0xdc,0x64,0x32d,0x83,0xe6,0x45,0x304,0x300,0x83,0xe6,0x65,0x304,0x300,
-0x83,0xe6,0x45,0x304,0x301,0x83,0xe6,0x65,0x304,0x301,0x82,0xdc,0x45,0x32d,0x82,0xdc,
-0x65,0x32d,0x82,0xdc,0x45,0x330,0x82,0xdc,0x65,0x330,0x83,0xe6,0x45,0x327,0x306,0x83,
-0xe6,0x65,0x327,0x306,0x82,0xe6,0x46,0x307,0x82,0xe6,0x66,0x307,0x82,0xe6,0x47,0x304,
-0x82,0xe6,0x67,0x304,0x82,0xe6,0x48,0x307,0x82,0xe6,0x68,0x307,0x82,0xdc,0x48,0x323,
-0x82,0xdc,0x68,0x323,0x82,0xe6,0x48,0x308,0x82,0xe6,0x68,0x308,0x82,0xca,0x48,0x327,
-0x82,0xca,0x68,0x327,0x82,0xdc,0x48,0x32e,0x82,0xdc,0x68,0x32e,0x82,0xdc,0x49,0x330,
-0x82,0xdc,0x69,0x330,0x83,0xe6,0x49,0x308,0x301,0x83,0xe6,0x69,0x308,0x301,0x82,0xe6,
-0x4b,0x301,0x82,0xe6,0x6b,0x301,0x82,0xdc,0x4b,0x323,0x82,0xdc,0x6b,0x323,0x82,0xdc,
-0x4b,0x331,0x82,0xdc,0x6b,0x331,0x49c,0x82,0xdc,0x4c,0x323,0x49e,0x82,0xdc,0x6c,0x323,
-0x83,0xe6,0x4c,0x323,0x304,0x83,0xe6,0x6c,0x323,0x304,0x82,0xdc,0x4c,0x331,0x82,0xdc,
-0x6c,0x331,0x82,0xdc,0x4c,0x32d,0x82,0xdc,0x6c,0x32d,0x82,0xe6,0x4d,0x301,0x82,0xe6,
-0x6d,0x301,0x82,0xe6,0x4d,0x307,0x82,0xe6,0x6d,0x307,0x82,0xdc,0x4d,0x323,0x82,0xdc,
-0x6d,0x323,0x82,0xe6,0x4e,0x307,0x82,0xe6,0x6e,0x307,0x82,0xdc,0x4e,0x323,0x82,0xdc,
-0x6e,0x323,0x82,0xdc,0x4e,0x331,0x82,0xdc,0x6e,0x331,0x82,0xdc,0x4e,0x32d,0x82,0xdc,
-0x6e,0x32d,0x83,0xe6,0x4f,0x303,0x301,0x83,0xe6,0x6f,0x303,0x301,0x83,0xe6,0x4f,0x303,
-0x308,0x83,0xe6,0x6f,0x303,0x308,0x83,0xe6,0x4f,0x304,0x300,0x83,0xe6,0x6f,0x304,0x300,
-0x83,0xe6,0x4f,0x304,0x301,0x83,0xe6,0x6f,0x304,0x301,0x82,0xe6,0x50,0x301,0x82,0xe6,
-0x70,0x301,0x82,0xe6,0x50,0x307,0x82,0xe6,0x70,0x307,0x82,0xe6,0x52,0x307,0x82,0xe6,
-0x72,0x307,0x4bc,0x82,0xdc,0x52,0x323,0x4be,0x82,0xdc,0x72,0x323,0x83,0xe6,0x52,0x323,
-0x304,0x83,0xe6,0x72,0x323,0x304,0x82,0xdc,0x52,0x331,0x82,0xdc,0x72,0x331,0x82,0xe6,
-0x53,0x307,0x82,0xe6,0x73,0x307,0x4c8,0x82,0xdc,0x53,0x323,0x4ca,0x82,0xdc,0x73,0x323,
-0x83,0xe6,0x53,0x301,0x307,0x83,0xe6,0x73,0x301,0x307,0x83,0xe6,0x53,0x30c,0x307,0x83,
-0xe6,0x73,0x30c,0x307,0x83,0xe6,0x53,0x323,0x307,0x83,0xe6,0x73,0x323,0x307,0x82,0xe6,
-0x54,0x307,0x82,0xe6,0x74,0x307,0x82,0xdc,0x54,0x323,0x82,0xdc,0x74,0x323,0x82,0xdc,
-0x54,0x331,0x82,0xdc,0x74,0x331,0x82,0xdc,0x54,0x32d,0x82,0xdc,0x74,0x32d,0x82,0xdc,
-0x55,0x324,0x82,0xdc,0x75,0x324,0x82,0xdc,0x55,0x330,0x82,0xdc,0x75,0x330,0x82,0xdc,
-0x55,0x32d,0x82,0xdc,0x75,0x32d,0x83,0xe6,0x55,0x303,0x301,0x83,0xe6,0x75,0x303,0x301,
-0x83,0xe6,0x55,0x304,0x308,0x83,0xe6,0x75,0x304,0x308,0x82,0xe6,0x56,0x303,0x82,0xe6,
-0x76,0x303,0x82,0xdc,0x56,0x323,0x82,0xdc,0x76,0x323,0x82,0xe6,0x57,0x300,0x82,0xe6,
-0x77,0x300,0x82,0xe6,0x57,0x301,0x82,0xe6,0x77,0x301,0x82,0xe6,0x57,0x308,0x82,0xe6,
-0x77,0x308,0x82,0xe6,0x57,0x307,0x82,0xe6,0x77,0x307,0x82,0xdc,0x57,0x323,0x82,0xdc,
-0x77,0x323,0x82,0xe6,0x58,0x307,0x82,0xe6,0x78,0x307,0x82,0xe6,0x58,0x308,0x82,0xe6,
-0x78,0x308,0x82,0xe6,0x59,0x307,0x82,0xe6,0x79,0x307,0x82,0xe6,0x5a,0x302,0x82,0xe6,
-0x7a,0x302,0x82,0xdc,0x5a,0x323,0x82,0xdc,0x7a,0x323,0x82,0xdc,0x5a,0x331,0x82,0xdc,
-0x7a,0x331,0x82,0xdc,0x68,0x331,0x82,0xe6,0x74,0x308,0x82,0xe6,0x77,0x30a,0x82,0xe6,
-0x79,0x30a,0x8282,0xe6,0x17f,0x307,0xe6,0x73,0x307,0x4f6,0x82,0xdc,0x41,0x323,0x4fa,0x82,
-0xdc,0x61,0x323,0x82,0xe6,0x41,0x309,0x82,0xe6,0x61,0x309,0x83,0xe6,0x41,0x302,0x301,
-0x83,0xe6,0x61,0x302,0x301,0x83,0xe6,0x41,0x302,0x300,0x83,0xe6,0x61,0x302,0x300,0x83,
-0xe6,0x41,0x302,0x309,0x83,0xe6,0x61,0x302,0x309,0x83,0xe6,0x41,0x302,0x303,0x83,0xe6,
-0x61,0x302,0x303,0x83,0xe6,0x41,0x323,0x302,0x83,0xe6,0x61,0x323,0x302,0x83,0xe6,0x41,
-0x306,0x301,0x83,0xe6,0x61,0x306,0x301,0x83,0xe6,0x41,0x306,0x300,0x83,0xe6,0x61,0x306,
-0x300,0x83,0xe6,0x41,0x306,0x309,0x83,0xe6,0x61,0x306,0x309,0x83,0xe6,0x41,0x306,0x303,
-0x83,0xe6,0x61,0x306,0x303,0x83,0xe6,0x41,0x323,0x306,0x83,0xe6,0x61,0x323,0x306,0x51e,
-0x82,0xdc,0x45,0x323,0x520,0x82,0xdc,0x65,0x323,0x82,0xe6,0x45,0x309,0x82,0xe6,0x65,
-0x309,0x82,0xe6,0x45,0x303,0x82,0xe6,0x65,0x303,0x83,0xe6,0x45,0x302,0x301,0x83,0xe6,
-0x65,0x302,0x301,0x83,0xe6,0x45,0x302,0x300,0x83,0xe6,0x65,0x302,0x300,0x83,0xe6,0x45,
-0x302,0x309,0x83,0xe6,0x65,0x302,0x309,0x83,0xe6,0x45,0x302,0x303,0x83,0xe6,0x65,0x302,
-0x303,0x83,0xe6,0x45,0x323,0x302,0x83,0xe6,0x65,0x323,0x302,0x82,0xe6,0x49,0x309,0x82,
-0xe6,0x69,0x309,0x82,0xdc,0x49,0x323,0x82,0xdc,0x69,0x323,0x532,0x82,0xdc,0x4f,0x323,
-0x534,0x82,0xdc,0x6f,0x323,0x82,0xe6,0x4f,0x309,0x82,0xe6,0x6f,0x309,0x83,0xe6,0x4f,
-0x302,0x301,0x83,0xe6,0x6f,0x302,0x301,0x83,0xe6,0x4f,0x302,0x300,0x83,0xe6,0x6f,0x302,
-0x300,0x83,0xe6,0x4f,0x302,0x309,0x83,0xe6,0x6f,0x302,0x309,0x83,0xe6,0x4f,0x302,0x303,
-0x83,0xe6,0x6f,0x302,0x303,0x83,0xe6,0x4f,0x323,0x302,0x83,0xe6,0x6f,0x323,0x302,0x83,
-0xe6,0x4f,0x31b,0x301,0x83,0xe6,0x6f,0x31b,0x301,0x83,0xe6,0x4f,0x31b,0x300,0x83,0xe6,
-0x6f,0x31b,0x300,0x83,0xe6,0x4f,0x31b,0x309,0x83,0xe6,0x6f,0x31b,0x309,0x83,0xe6,0x4f,
-0x31b,0x303,0x83,0xe6,0x6f,0x31b,0x303,0x83,0xdc,0x4f,0x31b,0x323,0x83,0xdc,0x6f,0x31b,
-0x323,0x82,0xdc,0x55,0x323,0x82,0xdc,0x75,0x323,0x82,0xe6,0x55,0x309,0x82,0xe6,0x75,
-0x309,0x83,0xe6,0x55,0x31b,0x301,0x83,0xe6,0x75,0x31b,0x301,0x83,0xe6,0x55,0x31b,0x300,
-0x83,0xe6,0x75,0x31b,0x300,0x83,0xe6,0x55,0x31b,0x309,0x83,0xe6,0x75,0x31b,0x309,0x83,
-0xe6,0x55,0x31b,0x303,0x83,0xe6,0x75,0x31b,0x303,0x83,0xdc,0x55,0x31b,0x323,0x83,0xdc,
-0x75,0x31b,0x323,0x82,0xe6,0x59,0x300,0x82,0xe6,0x79,0x300,0x82,0xdc,0x59,0x323,0x82,
-0xdc,0x79,0x323,0x82,0xe6,0x59,0x309,0x82,0xe6,0x79,0x309,0x82,0xe6,0x59,0x303,0x82,
-0xe6,0x79,0x303,0x55e,0x82,0xe6,0x3b1,0x313,0x566,0x82,0xe6,0x3b1,0x314,0x608,0x83,0xe6,
-0x3b1,0x313,0x300,0x60a,0x83,0xe6,0x3b1,0x314,0x300,0x60c,0x83,0xe6,0x3b1,0x313,0x301,0x60e,
-0x83,0xe6,0x3b1,0x314,0x301,0x610,0x83,0xe6,0x3b1,0x313,0x342,0x612,0x83,0xe6,0x3b1,0x314,
-0x342,0x56e,0x82,0xe6,0x391,0x313,0x576,0x82,0xe6,0x391,0x314,0x614,0x83,0xe6,0x391,0x313,
-0x300,0x616,0x83,0xe6,0x391,0x314,0x300,0x618,0x83,0xe6,0x391,0x313,0x301,0x61a,0x83,0xe6,
-0x391,0x314,0x301,0x61c,0x83,0xe6,0x391,0x313,0x342,0x61e,0x83,0xe6,0x391,0x314,0x342,0x57e,
-0x82,0xe6,0x3b5,0x313,0x582,0x82,0xe6,0x3b5,0x314,0x83,0xe6,0x3b5,0x313,0x300,0x83,0xe6,
-0x3b5,0x314,0x300,0x83,0xe6,0x3b5,0x313,0x301,0x83,0xe6,0x3b5,0x314,0x301,0x586,0x82,0xe6,
-0x395,0x313,0x58a,0x82,0xe6,0x395,0x314,0x83,0xe6,0x395,0x313,0x300,0x83,0xe6,0x395,0x314,
-0x300,0x83,0xe6,0x395,0x313,0x301,0x83,0xe6,0x395,0x314,0x301,0x58e,0x82,0xe6,0x3b7,0x313,
-0x596,0x82,0xe6,0x3b7,0x314,0x620,0x83,0xe6,0x3b7,0x313,0x300,0x622,0x83,0xe6,0x3b7,0x314,
-0x300,0x624,0x83,0xe6,0x3b7,0x313,0x301,0x626,0x83,0xe6,0x3b7,0x314,0x301,0x628,0x83,0xe6,
-0x3b7,0x313,0x342,0x62a,0x83,0xe6,0x3b7,0x314,0x342,0x59e,0x82,0xe6,0x397,0x313,0x5a6,0x82,
-0xe6,0x397,0x314,0x62c,0x83,0xe6,0x397,0x313,0x300,0x62e,0x83,0xe6,0x397,0x314,0x300,0x630,
-0x83,0xe6,0x397,0x313,0x301,0x632,0x83,0xe6,0x397,0x314,0x301,0x634,0x83,0xe6,0x397,0x313,
-0x342,0x636,0x83,0xe6,0x397,0x314,0x342,0x5ae,0x82,0xe6,0x3b9,0x313,0x5b4,0x82,0xe6,0x3b9,
-0x314,0x83,0xe6,0x3b9,0x313,0x300,0x83,0xe6,0x3b9,0x314,0x300,0x83,0xe6,0x3b9,0x313,0x301,
-0x83,0xe6,0x3b9,0x314,0x301,0x83,0xe6,0x3b9,0x313,0x342,0x83,0xe6,0x3b9,0x314,0x342,0x5ba,
-0x82,0xe6,0x399,0x313,0x5c0,0x82,0xe6,0x399,0x314,0x83,0xe6,0x399,0x313,0x300,0x83,0xe6,
-0x399,0x314,0x300,0x83,0xe6,0x399,0x313,0x301,0x83,0xe6,0x399,0x314,0x301,0x83,0xe6,0x399,
-0x313,0x342,0x83,0xe6,0x399,0x314,0x342,0x5c6,0x82,0xe6,0x3bf,0x313,0x5ca,0x82,0xe6,0x3bf,
-0x314,0x83,0xe6,0x3bf,0x313,0x300,0x83,0xe6,0x3bf,0x314,0x300,0x83,0xe6,0x3bf,0x313,0x301,
-0x83,0xe6,0x3bf,0x314,0x301,0x5ce,0x82,0xe6,0x39f,0x313,0x5d2,0x82,0xe6,0x39f,0x314,0x83,
-0xe6,0x39f,0x313,0x300,0x83,0xe6,0x39f,0x314,0x300,0x83,0xe6,0x39f,0x313,0x301,0x83,0xe6,
-0x39f,0x314,0x301,0x5d6,0x82,0xe6,0x3c5,0x313,0x5dc,0x82,0xe6,0x3c5,0x314,0x83,0xe6,0x3c5,
-0x313,0x300,0x83,0xe6,0x3c5,0x314,0x300,0x83,0xe6,0x3c5,0x313,0x301,0x83,0xe6,0x3c5,0x314,
-0x301,0x83,0xe6,0x3c5,0x313,0x342,0x83,0xe6,0x3c5,0x314,0x342,0x5e2,0x82,0xe6,0x3a5,0x314,
-0x83,0xe6,0x3a5,0x314,0x300,0x83,0xe6,0x3a5,0x314,0x301,0x83,0xe6,0x3a5,0x314,0x342,0x5e8,
-0x82,0xe6,0x3c9,0x313,0x5f0,0x82,0xe6,0x3c9,0x314,0x638,0x83,0xe6,0x3c9,0x313,0x300,0x63a,
-0x83,0xe6,0x3c9,0x314,0x300,0x63c,0x83,0xe6,0x3c9,0x313,0x301,0x63e,0x83,0xe6,0x3c9,0x314,
-0x301,0x640,0x83,0xe6,0x3c9,0x313,0x342,0x642,0x83,0xe6,0x3c9,0x314,0x342,0x5f8,0x82,0xe6,
-0x3a9,0x313,0x600,0x82,0xe6,0x3a9,0x314,0x644,0x83,0xe6,0x3a9,0x313,0x300,0x646,0x83,0xe6,
-0x3a9,0x314,0x300,0x648,0x83,0xe6,0x3a9,0x313,0x301,0x64a,0x83,0xe6,0x3a9,0x314,0x301,0x64c,
-0x83,0xe6,0x3a9,0x313,0x342,0x64e,0x83,0xe6,0x3a9,0x314,0x342,0x650,0x82,0xe6,0x3b1,0x300,
-0x82,0xe6,0x3b5,0x300,0x656,0x82,0xe6,0x3b7,0x300,0x82,0xe6,0x3b9,0x300,0x82,0xe6,0x3bf,
-0x300,0x82,0xe6,0x3c5,0x300,0x66e,0x82,0xe6,0x3c9,0x300,0x83,0xf0,0x3b1,0x313,0x345,0x83,
-0xf0,0x3b1,0x314,0x345,0x84,0xf0,0x3b1,0x313,0x300,0x345,0x84,0xf0,0x3b1,0x314,0x300,0x345,
-0x84,0xf0,0x3b1,0x313,0x301,0x345,0x84,0xf0,0x3b1,0x314,0x301,0x345,0x84,0xf0,0x3b1,0x313,
-0x342,0x345,0x84,0xf0,0x3b1,0x314,0x342,0x345,0x83,0xf0,0x391,0x313,0x345,0x83,0xf0,0x391,
-0x314,0x345,0x84,0xf0,0x391,0x313,0x300,0x345,0x84,0xf0,0x391,0x314,0x300,0x345,0x84,0xf0,
-0x391,0x313,0x301,0x345,0x84,0xf0,0x391,0x314,0x301,0x345,0x84,0xf0,0x391,0x313,0x342,0x345,
-0x84,0xf0,0x391,0x314,0x342,0x345,0x83,0xf0,0x3b7,0x313,0x345,0x83,0xf0,0x3b7,0x314,0x345,
-0x84,0xf0,0x3b7,0x313,0x300,0x345,0x84,0xf0,0x3b7,0x314,0x300,0x345,0x84,0xf0,0x3b7,0x313,
-0x301,0x345,0x84,0xf0,0x3b7,0x314,0x301,0x345,0x84,0xf0,0x3b7,0x313,0x342,0x345,0x84,0xf0,
-0x3b7,0x314,0x342,0x345,0x83,0xf0,0x397,0x313,0x345,0x83,0xf0,0x397,0x314,0x345,0x84,0xf0,
-0x397,0x313,0x300,0x345,0x84,0xf0,0x397,0x314,0x300,0x345,0x84,0xf0,0x397,0x313,0x301,0x345,
-0x84,0xf0,0x397,0x314,0x301,0x345,0x84,0xf0,0x397,0x313,0x342,0x345,0x84,0xf0,0x397,0x314,
-0x342,0x345,0x83,0xf0,0x3c9,0x313,0x345,0x83,0xf0,0x3c9,0x314,0x345,0x84,0xf0,0x3c9,0x313,
-0x300,0x345,0x84,0xf0,0x3c9,0x314,0x300,0x345,0x84,0xf0,0x3c9,0x313,0x301,0x345,0x84,0xf0,
-0x3c9,0x314,0x301,0x345,0x84,0xf0,0x3c9,0x313,0x342,0x345,0x84,0xf0,0x3c9,0x314,0x342,0x345,
-0x83,0xf0,0x3a9,0x313,0x345,0x83,0xf0,0x3a9,0x314,0x345,0x84,0xf0,0x3a9,0x313,0x300,0x345,
-0x84,0xf0,0x3a9,0x314,0x300,0x345,0x84,0xf0,0x3a9,0x313,0x301,0x345,0x84,0xf0,0x3a9,0x314,
-0x301,0x345,0x84,0xf0,0x3a9,0x313,0x342,0x345,0x84,0xf0,0x3a9,0x314,0x342,0x345,0x82,0xe6,
-0x3b1,0x306,0x82,0xe6,0x3b1,0x304,0x83,0xf0,0x3b1,0x300,0x345,0x82,0xf0,0x3b1,0x345,0x83,
-0xf0,0x3b1,0x301,0x345,0x654,0x82,0xe6,0x3b1,0x342,0x83,0xf0,0x3b1,0x342,0x345,0x82,0xe6,
-0x391,0x306,0x82,0xe6,0x391,0x304,0x82,0xe6,0x391,0x300,0x82,0xf0,0x391,0x345,0x8382,0xe6,
-0xa8,0x342,0xe6,0x20,0x308,0x342,0x83,0xf0,0x3b7,0x300,0x345,0x82,0xf0,0x3b7,0x345,0x83,
-0xf0,0x3b7,0x301,0x345,0x65a,0x82,0xe6,0x3b7,0x342,0x83,0xf0,0x3b7,0x342,0x345,0x82,0xe6,
-0x395,0x300,0x82,0xe6,0x397,0x300,0x82,0xf0,0x397,0x345,0x8382,0xe6,0x1fbf,0x300,0xe6,0x20,
-0x313,0x300,0x8382,0xe6,0x1fbf,0x301,0xe6,0x20,0x313,0x301,0x8382,0xe6,0x1fbf,0x342,0xe6,0x20,
-0x313,0x342,0x82,0xe6,0x3b9,0x306,0x82,0xe6,0x3b9,0x304,0x83,0xe6,0x3b9,0x308,0x300,0x82,
-0xe6,0x3b9,0x342,0x83,0xe6,0x3b9,0x308,0x342,0x82,0xe6,0x399,0x306,0x82,0xe6,0x399,0x304,
-0x82,0xe6,0x399,0x300,0x8382,0xe6,0x1ffe,0x300,0xe6,0x20,0x314,0x300,0x8382,0xe6,0x1ffe,0x301,
-0xe6,0x20,0x314,0x301,0x8382,0xe6,0x1ffe,0x342,0xe6,0x20,0x314,0x342,0x82,0xe6,0x3c5,0x306,
-0x82,0xe6,0x3c5,0x304,0x83,0xe6,0x3c5,0x308,0x300,0x82,0xe6,0x3c1,0x313,0x82,0xe6,0x3c1,
-0x314,0x82,0xe6,0x3c5,0x342,0x83,0xe6,0x3c5,0x308,0x342,0x82,0xe6,0x3a5,0x306,0x82,0xe6,
-0x3a5,0x304,0x82,0xe6,0x3a5,0x300,0x82,0xe6,0x3a1,0x314,0x8382,0xe6,0xa8,0x300,0xe6,0x20,
-0x308,0x300,0x83,0xf0,0x3c9,0x300,0x345,0x82,0xf0,0x3c9,0x345,0x83,0xf0,0x3c9,0x301,0x345,
-0x672,0x82,0xe6,0x3c9,0x342,0x83,0xf0,0x3c9,0x342,0x345,0x82,0xe6,0x39f,0x300,0x82,0xe6,
-0x3a9,0x300,0x82,0xf0,0x3a9,0x345,0x82,1,0x2190,0x338,0x82,1,0x2192,0x338,0x82,1,
-0x2194,0x338,0x82,1,0x21d0,0x338,0x82,1,0x21d4,0x338,0x82,1,0x21d2,0x338,0x82,1,
-0x2203,0x338,0x82,1,0x2208,0x338,0x82,1,0x220b,0x338,0x82,1,0x2223,0x338,0x82,1,
-0x2225,0x338,0x82,1,0x223c,0x338,0x82,1,0x2243,0x338,0x82,1,0x2245,0x338,0x82,1,
-0x2248,0x338,0x82,1,0x3d,0x338,0x82,1,0x2261,0x338,0x82,1,0x224d,0x338,0x82,1,
-0x3c,0x338,0x82,1,0x3e,0x338,0x82,1,0x2264,0x338,0x82,1,0x2265,0x338,0x82,1,
-0x2272,0x338,0x82,1,0x2273,0x338,0x82,1,0x2276,0x338,0x82,1,0x2277,0x338,0x82,1,
-0x227a,0x338,0x82,1,0x227b,0x338,0x82,1,0x2282,0x338,0x82,1,0x2283,0x338,0x82,1,
-0x2286,0x338,0x82,1,0x2287,0x338,0x82,1,0x22a2,0x338,0x82,1,0x22a8,0x338,0x82,1,
-0x22a9,0x338,0x82,1,0x22ab,0x338,0x82,1,0x227c,0x338,0x82,1,0x227d,0x338,0x82,1,
-0x2291,0x338,0x82,1,0x2292,0x338,0x82,1,0x22b2,0x338,0x82,1,0x22b3,0x338,0x82,1,
-0x22b4,0x338,0x82,1,0x22b5,0x338,0x82,8,0x304b,0x3099,0x82,8,0x304d,0x3099,0x82,8,
-0x304f,0x3099,0x82,8,0x3051,0x3099,0x82,8,0x3053,0x3099,0x82,8,0x3055,0x3099,0x82,8,
-0x3057,0x3099,0x82,8,0x3059,0x3099,0x82,8,0x305b,0x3099,0x82,8,0x305d,0x3099,0x82,8,
-0x305f,0x3099,0x82,8,0x3061,0x3099,0x82,8,0x3064,0x3099,0x82,8,0x3066,0x3099,0x82,8,
-0x3068,0x3099,0x82,8,0x306f,0x3099,0x82,8,0x306f,0x309a,0x82,8,0x3072,0x3099,0x82,8,
-0x3072,0x309a,0x82,8,0x3075,0x3099,0x82,8,0x3075,0x309a,0x82,8,0x3078,0x3099,0x82,8,
-0x3078,0x309a,0x82,8,0x307b,0x3099,0x82,8,0x307b,0x309a,0x82,8,0x3046,0x3099,0x82,8,
-0x309d,0x3099,0x82,8,0x30ab,0x3099,0x82,8,0x30ad,0x3099,0x82,8,0x30af,0x3099,0x82,8,
-0x30b1,0x3099,0x82,8,0x30b3,0x3099,0x82,8,0x30b5,0x3099,0x82,8,0x30b7,0x3099,0x82,8,
-0x30b9,0x3099,0x82,8,0x30bb,0x3099,0x82,8,0x30bd,0x3099,0x82,8,0x30bf,0x3099,0x82,8,
-0x30c1,0x3099,0x82,8,0x30c4,0x3099,0x82,8,0x30c6,0x3099,0x82,8,0x30c8,0x3099,0x82,8,
-0x30cf,0x3099,0x82,8,0x30cf,0x309a,0x82,8,0x30d2,0x3099,0x82,8,0x30d2,0x309a,0x82,8,
-0x30d5,0x3099,0x82,8,0x30d5,0x309a,0x82,8,0x30d8,0x3099,0x82,8,0x30d8,0x309a,0x82,8,
-0x30db,0x3099,0x82,8,0x30db,0x309a,0x82,8,0x30a6,0x3099,0x82,8,0x30ef,0x3099,0x82,8,
-0x30f0,0x3099,0x82,8,0x30f1,0x3099,0x82,8,0x30f2,0x3099,0x82,8,0x30fd,0x3099,0x7a6,0x7a7,
-0x7a8,0x7a9,0x7ad,0x7ae,0x7b0,0x7aa,0x7d4,0x7ab,0x7b2,0x7b1,0x7b4,0x7b5,0x7d5,0x7d6,0x7b3,0x7ce,
-0x7d3,0x7cd,0x7b6,0x7ac,0x7af,0x7d0,0x7d2,0x7d1,0x7cf,0x7d9,0x7d7,0x7d8,0x7b7,0x7b8,0x7b9,0x7ba,
-0x7bb,0x7bc,0x7be,0x7bd,0x7bf,0x7c1,0x7c0,0x7c2,0x7c5,0x7c3,0x7c4,0x7c6,0x7c7,0x7c8,0x7c9,0x7ca,
-0x7cb,0x7cc,0x7da,0x7db,0x100,0x20,0x2fc,0x8200,0xe6,0x20,0x308,0x100,0x61,0x8200,0xe6,0x20,
-0x304,0x100,0x32,0x100,0x33,0x8200,0xe6,0x20,0x301,0x100,0x3bc,0x8200,0xca,0x20,0x327,0x100,
-0x31,0x100,0x6f,0x300,0x31,0x2044,0x34,0x300,0x31,0x2044,0x32,0x300,0x33,0x2044,0x34,0x200,
-0x49,0x4a,0x200,0x69,0x6a,0x200,0x4c,0xb7,0x200,0x6c,0xb7,0x200,0x2bc,0x6e,0x4e4,0x100,
-0x73,0x8300,0xe6,0x44,0x5a,0x30c,0x8300,0xe6,0x44,0x7a,0x30c,0x8300,0xe6,0x64,0x7a,0x30c,
-0x200,0x4c,0x4a,0x200,0x4c,0x6a,0x200,0x6c,0x6a,0x200,0x4e,0x4a,0x200,0x4e,0x6a,0x200,
-0x6e,0x6a,0x200,0x44,0x5a,0x200,0x44,0x7a,0x200,0x64,0x7a,0x100,0x68,0x100,0x266,0x100,
-0x6a,0x100,0x72,0x100,0x279,0x100,0x27b,0x100,0x281,0x100,0x77,0x100,0x79,0x8200,0xe6,0x20,
-0x306,0x8200,0xe6,0x20,0x307,0x8200,0xe6,0x20,0x30a,0x8200,0xca,0x20,0x328,0x8200,0xe6,0x20,
-0x303,0x8200,0xe6,0x20,0x30b,0x100,0x263,0x100,0x6c,0x100,0x73,0x100,0x78,0x100,0x295,0x8200,
-0xe6,0x20,0x301,0x100,0x3b2,0x100,0x3b8,0x100,0x3c6,0x100,0x3c0,0x100,0x3ba,0x100,0x3c1,0x100,
-0x398,0x100,0x3b5,0x200,0x565,0x582,0x200,0x627,0x674,0x200,0x648,0x674,0x200,0x6c7,0x674,0x200,
-0x64a,0x674,0x200,0xe4d,0xe32,0x200,0xecd,0xeb2,0x200,0xeab,0xe99,0x200,0xeab,0xea1,0x100,0xf0b,
-0x8300,0x82,0xfb2,0xf71,0xf80,0x8300,0x82,0xfb3,0xf71,0xf80,0x100,0x10dc,0x100,0x61,0x100,0x250,
-0x100,0x251,0x100,0x1d02,0x100,0x62,0x100,0x64,0x100,0x65,0x100,0x259,0x100,0x25b,0x100,0x25c,
-0x100,0x67,0x100,0x6b,0x100,0x6d,0x100,0x14b,0x100,0x6f,0x100,0x254,0x100,0x1d16,0x100,0x1d17,
-0x100,0x70,0x100,0x74,0x100,0x75,0x100,0x1d1d,0x100,0x26f,0x100,0x76,0x100,0x1d25,0x100,0x3b2,
-0x100,0x3b3,0x100,0x3b4,0x100,0x3c6,0x100,0x3c7,0x100,0x69,0x100,0x72,0x100,0x75,0x100,0x76,
-0x100,0x3b2,0x100,0x3b3,0x100,0x3c1,0x100,0x3c6,0x100,0x3c7,0x100,0x43d,0x100,0x252,0x100,0x63,
-0x100,0x255,0x100,0xf0,0x100,0x25c,0x100,0x66,0x100,0x25f,0x100,0x261,0x100,0x265,0x100,0x268,
-0x100,0x269,0x100,0x26a,0x100,0x1d7b,0x100,0x29d,0x100,0x26d,0x100,0x1d85,0x100,0x29f,0x100,0x271,
-0x100,0x270,0x100,0x272,0x100,0x273,0x100,0x274,0x100,0x275,0x100,0x278,0x100,0x282,0x100,0x283,
-0x100,0x1ab,0x100,0x289,0x100,0x28a,0x100,0x1d1c,0x100,0x28b,0x100,0x28c,0x100,0x7a,0x100,0x290,
-0x100,0x291,0x100,0x292,0x100,0x3b8,0x200,0x61,0x2be,0x8200,0xe6,0x20,0x313,0x65c,0x8200,0xe6,
-0x20,0x313,0x8200,0xe6,0x20,0x342,0x662,0x8200,0xe6,0x20,0x314,0x100,0x20,0x100,0x20,0x100,
-0x20,0x100,0x20,0x100,0x20,0x100,0x20,0x100,0x20,0x100,0x20,0x100,0x20,0x100,0x2010,0x8200,
-0xdc,0x20,0x333,0x100,0x2e,0x200,0x2e,0x2e,0x300,0x2e,0x2e,0x2e,0x100,0x20,0x200,0x2032,
-0x2032,0x300,0x2032,0x2032,0x2032,0x200,0x2035,0x2035,0x300,0x2035,0x2035,0x2035,0x200,0x21,0x21,0x8200,
-0xe6,0x20,0x305,0x200,0x3f,0x3f,0x200,0x3f,0x21,0x200,0x21,0x3f,0x400,0x2032,0x2032,0x2032,
-0x2032,0x100,0x20,0x100,0x30,0x100,0x69,0x100,0x34,0x100,0x35,0x100,0x36,0x100,0x37,0x100,
-0x38,0x100,0x39,0x100,0x2b,0x100,0x2212,0x100,0x3d,0x100,0x28,0x100,0x29,0x100,0x6e,0x100,
-0x30,0x100,0x31,0x100,0x32,0x100,0x33,0x100,0x34,0x100,0x35,0x100,0x36,0x100,0x37,0x100,
-0x38,0x100,0x39,0x100,0x2b,0x100,0x2212,0x100,0x3d,0x100,0x28,0x100,0x29,0x100,0x61,0x100,
-0x65,0x100,0x6f,0x100,0x78,0x100,0x259,0x300,0x61,0x2f,0x63,0x300,0x61,0x2f,0x73,0x300,
-0x63,0x2f,0x6f,0x300,0x63,0x2f,0x75,0x100,0x67,0x100,0x68,0x100,0x127,0x100,0x6c,0x100,
-0x65,0x100,0x6f,0x100,0x5d0,0x100,0x5d1,0x100,0x5d2,0x100,0x5d3,0x100,0x69,0x100,0x3c0,0x100,
-0x3b3,0x100,0x2211,0x100,0x64,0x100,0x65,0x100,0x69,0x100,0x6a,0x300,0x31,0x2044,0x33,0x300,
-0x32,0x2044,0x33,0x300,0x31,0x2044,0x35,0x300,0x32,0x2044,0x35,0x300,0x33,0x2044,0x35,0x300,
-0x34,0x2044,0x35,0x300,0x31,0x2044,0x36,0x300,0x35,0x2044,0x36,0x300,0x31,0x2044,0x38,0x300,
-0x33,0x2044,0x38,0x300,0x35,0x2044,0x38,0x300,0x37,0x2044,0x38,0x200,0x31,0x2044,0x100,0x49,
-0x200,0x49,0x49,0x300,0x49,0x49,0x49,0x200,0x49,0x56,0x100,0x56,0x200,0x56,0x49,0x300,
-0x56,0x49,0x49,0x400,0x56,0x49,0x49,0x49,0x200,0x49,0x58,0x100,0x58,0x200,0x58,0x49,
-0x300,0x58,0x49,0x49,0x100,0x4c,0x100,0x43,0x100,0x44,0x100,0x4d,0x100,0x69,0x200,0x69,
-0x69,0x300,0x69,0x69,0x69,0x200,0x69,0x76,0x100,0x76,0x200,0x76,0x69,0x300,0x76,0x69,
-0x69,0x400,0x76,0x69,0x69,0x69,0x200,0x69,0x78,0x100,0x78,0x200,0x78,0x69,0x300,0x78,
-0x69,0x69,0x100,0x6c,0x100,0x63,0x100,0x64,0x100,0x6d,0x200,0x222b,0x222b,0x300,0x222b,0x222b,
-0x222b,0x200,0x222e,0x222e,0x300,0x222e,0x222e,0x222e,0x100,0x31,0x100,0x32,0x100,0x33,0x100,0x34,
-0x100,0x35,0x100,0x36,0x100,0x37,0x100,0x38,0x100,0x39,0x200,0x31,0x30,0x200,0x31,0x31,
-0x200,0x31,0x32,0x200,0x31,0x33,0x200,0x31,0x34,0x200,0x31,0x35,0x200,0x31,0x36,0x200,
-0x31,0x37,0x200,0x31,0x38,0x200,0x31,0x39,0x200,0x32,0x30,0x300,0x28,0x31,0x29,0x300,
-0x28,0x32,0x29,0x300,0x28,0x33,0x29,0x300,0x28,0x34,0x29,0x300,0x28,0x35,0x29,0x300,
-0x28,0x36,0x29,0x300,0x28,0x37,0x29,0x300,0x28,0x38,0x29,0x300,0x28,0x39,0x29,0x400,
-0x28,0x31,0x30,0x29,0x400,0x28,0x31,0x31,0x29,0x400,0x28,0x31,0x32,0x29,0x400,0x28,
-0x31,0x33,0x29,0x400,0x28,0x31,0x34,0x29,0x400,0x28,0x31,0x35,0x29,0x400,0x28,0x31,
-0x36,0x29,0x400,0x28,0x31,0x37,0x29,0x400,0x28,0x31,0x38,0x29,0x400,0x28,0x31,0x39,
-0x29,0x400,0x28,0x32,0x30,0x29,0x200,0x31,0x2e,0x200,0x32,0x2e,0x200,0x33,0x2e,0x200,
-0x34,0x2e,0x200,0x35,0x2e,0x200,0x36,0x2e,0x200,0x37,0x2e,0x200,0x38,0x2e,0x200,0x39,
-0x2e,0x300,0x31,0x30,0x2e,0x300,0x31,0x31,0x2e,0x300,0x31,0x32,0x2e,0x300,0x31,0x33,
-0x2e,0x300,0x31,0x34,0x2e,0x300,0x31,0x35,0x2e,0x300,0x31,0x36,0x2e,0x300,0x31,0x37,
-0x2e,0x300,0x31,0x38,0x2e,0x300,0x31,0x39,0x2e,0x300,0x32,0x30,0x2e,0x300,0x28,0x61,
-0x29,0x300,0x28,0x62,0x29,0x300,0x28,0x63,0x29,0x300,0x28,0x64,0x29,0x300,0x28,0x65,
-0x29,0x300,0x28,0x66,0x29,0x300,0x28,0x67,0x29,0x300,0x28,0x68,0x29,0x300,0x28,0x69,
-0x29,0x300,0x28,0x6a,0x29,0x300,0x28,0x6b,0x29,0x300,0x28,0x6c,0x29,0x300,0x28,0x6d,
-0x29,0x300,0x28,0x6e,0x29,0x300,0x28,0x6f,0x29,0x300,0x28,0x70,0x29,0x300,0x28,0x71,
-0x29,0x300,0x28,0x72,0x29,0x300,0x28,0x73,0x29,0x300,0x28,0x74,0x29,0x300,0x28,0x75,
-0x29,0x300,0x28,0x76,0x29,0x300,0x28,0x77,0x29,0x300,0x28,0x78,0x29,0x300,0x28,0x79,
-0x29,0x300,0x28,0x7a,0x29,0x100,0x41,0x100,0x42,0x100,0x43,0x100,0x44,0x100,0x45,0x100,
-0x46,0x100,0x47,0x100,0x48,0x100,0x49,0x100,0x4a,0x100,0x4b,0x100,0x4c,0x100,0x4d,0x100,
-0x4e,0x100,0x4f,0x100,0x50,0x100,0x51,0x100,0x52,0x100,0x53,0x100,0x54,0x100,0x55,0x100,
-0x56,0x100,0x57,0x100,0x58,0x100,0x59,0x100,0x5a,0x100,0x61,0x100,0x62,0x100,0x63,0x100,
+0x3a9,0x100,0x3c2,0x100,0x391,0x100,0x392,0x100,0x393,0x100,0x394,0x100,0x395,0x100,0x396,0x100,
+0x397,0x100,0x398,0x100,0x399,0x100,0x39a,0x100,0x39b,0x100,0x39c,0x100,0x39d,0x100,0x39e,0x100,
+0x39f,0x100,0x3a0,0x100,0x3a1,0x100,0x398,0x100,0x3a3,0x100,0x3a4,0x100,0x3a5,0x100,0x3a6,0x100,
+0x3a7,0x100,0x3a8,0x100,0x3a9,0x100,0x3c2,0x100,0x3dc,0x81,0xe6e6,0x300,0x81,0xe6e6,0x301,0x81,
+0xe6e6,0x313,0x82,0xe6e6,0x308,0x301,1,0x2b9,1,0x3b,1,0xb7,0x82,7,0x915,0x93c,
+0x82,7,0x916,0x93c,0x82,7,0x917,0x93c,0x82,7,0x91c,0x93c,0x82,7,0x921,0x93c,
+0x82,7,0x922,0x93c,0x82,7,0x92b,0x93c,0x82,7,0x92f,0x93c,0x82,7,0x9a1,0x9bc,
+0x82,7,0x9a2,0x9bc,0x82,7,0x9af,0x9bc,0x82,7,0xa32,0xa3c,0x82,7,0xa38,0xa3c,
+0x82,7,0xa16,0xa3c,0x82,7,0xa17,0xa3c,0x82,7,0xa1c,0xa3c,0x82,7,0xa2b,0xa3c,
+0x82,7,0xb21,0xb3c,0x82,7,0xb22,0xb3c,2,0xf42,0xfb7,2,0xf4c,0xfb7,2,0xf51,
+0xfb7,2,0xf56,0xfb7,2,0xf5b,0xfb7,2,0xf40,0xfb5,0x82,0x8182,0xf71,0xf72,0x82,0x8184,
+0xf71,0xf74,0x82,0x82,0xfb2,0xf80,0x82,0x82,0xfb3,0xf80,0x82,0x8182,0xf71,0xf80,2,0xf92,
+0xfb7,2,0xf9c,0xfb7,2,0xfa1,0xfb7,2,0xfa6,0xfb7,2,0xfab,0xfb7,2,0xf90,0xfb5,
+0x82,0xe6,0x3b1,0x301,0x82,0xe6,0x3b5,0x301,0x82,0xe6,0x3b7,0x301,0x82,0xe6,0x3b9,0x301,
+0x82,0xe6,0x3bf,0x301,0x82,0xe6,0x3c5,0x301,0x82,0xe6,0x3c9,0x301,0x82,0xe6,0x391,0x301,
+1,0x3b9,0x82,0xe6,0x395,0x301,0x82,0xe6,0x397,0x301,0x83,0xe6,0x3b9,0x308,0x301,0x82,
+0xe6,0x399,0x301,0x83,0xe6,0x3c5,0x308,0x301,0x82,0xe6,0x3a5,0x301,0x8382,0xe6,0xa8,0x301,
+0xe6,0x20,0x308,0x301,1,0x60,0x82,0xe6,0x39f,0x301,0x82,0xe6,0x3a9,0x301,0x8201,0xb4,
+0xe6,0x20,0x301,0x101,0x2002,0x20,0x101,0x2003,0x20,1,0x3a9,1,0x4b,0x82,0xe6,0x41,
+0x30a,1,0x3008,1,0x3009,0x82,1,0x2add,0x338,1,0x8c48,1,0x66f4,1,0x8eca,1,
+0x8cc8,1,0x6ed1,1,0x4e32,1,0x53e5,1,0x9f9c,1,0x9f9c,1,0x5951,1,0x91d1,1,
+0x5587,1,0x5948,1,0x61f6,1,0x7669,1,0x7f85,1,0x863f,1,0x87ba,1,0x88f8,1,
+0x908f,1,0x6a02,1,0x6d1b,1,0x70d9,1,0x73de,1,0x843d,1,0x916a,1,0x99f1,1,
+0x4e82,1,0x5375,1,0x6b04,1,0x721b,1,0x862d,1,0x9e1e,1,0x5d50,1,0x6feb,1,
+0x85cd,1,0x8964,1,0x62c9,1,0x81d8,1,0x881f,1,0x5eca,1,0x6717,1,0x6d6a,1,
+0x72fc,1,0x90ce,1,0x4f86,1,0x51b7,1,0x52de,1,0x64c4,1,0x6ad3,1,0x7210,1,
+0x76e7,1,0x8001,1,0x8606,1,0x865c,1,0x8def,1,0x9732,1,0x9b6f,1,0x9dfa,1,
+0x788c,1,0x797f,1,0x7da0,1,0x83c9,1,0x9304,1,0x9e7f,1,0x8ad6,1,0x58df,1,
+0x5f04,1,0x7c60,1,0x807e,1,0x7262,1,0x78ca,1,0x8cc2,1,0x96f7,1,0x58d8,1,
+0x5c62,1,0x6a13,1,0x6dda,1,0x6f0f,1,0x7d2f,1,0x7e37,1,0x964b,1,0x52d2,1,
+0x808b,1,0x51dc,1,0x51cc,1,0x7a1c,1,0x7dbe,1,0x83f1,1,0x9675,1,0x8b80,1,
+0x62cf,1,0x6a02,1,0x8afe,1,0x4e39,1,0x5be7,1,0x6012,1,0x7387,1,0x7570,1,
+0x5317,1,0x78fb,1,0x4fbf,1,0x5fa9,1,0x4e0d,1,0x6ccc,1,0x6578,1,0x7d22,1,
+0x53c3,1,0x585e,1,0x7701,1,0x8449,1,0x8aaa,1,0x6bba,1,0x8fb0,1,0x6c88,1,
+0x62fe,1,0x82e5,1,0x63a0,1,0x7565,1,0x4eae,1,0x5169,1,0x51c9,1,0x6881,1,
+0x7ce7,1,0x826f,1,0x8ad2,1,0x91cf,1,0x52f5,1,0x5442,1,0x5973,1,0x5eec,1,
+0x65c5,1,0x6ffe,1,0x792a,1,0x95ad,1,0x9a6a,1,0x9e97,1,0x9ece,1,0x529b,1,
+0x66c6,1,0x6b77,1,0x8f62,1,0x5e74,1,0x6190,1,0x6200,1,0x649a,1,0x6f23,1,
+0x7149,1,0x7489,1,0x79ca,1,0x7df4,1,0x806f,1,0x8f26,1,0x84ee,1,0x9023,1,
+0x934a,1,0x5217,1,0x52a3,1,0x54bd,1,0x70c8,1,0x88c2,1,0x8aaa,1,0x5ec9,1,
+0x5ff5,1,0x637b,1,0x6bae,1,0x7c3e,1,0x7375,1,0x4ee4,1,0x56f9,1,0x5be7,1,
+0x5dba,1,0x601c,1,0x73b2,1,0x7469,1,0x7f9a,1,0x8046,1,0x9234,1,0x96f6,1,
+0x9748,1,0x9818,1,0x4f8b,1,0x79ae,1,0x91b4,1,0x96b8,1,0x60e1,1,0x4e86,1,
+0x50da,1,0x5bee,1,0x5c3f,1,0x6599,1,0x6a02,1,0x71ce,1,0x7642,1,0x84fc,1,
+0x907c,1,0x9f8d,1,0x6688,1,0x962e,1,0x5289,1,0x677b,1,0x67f3,1,0x6d41,1,
+0x6e9c,1,0x7409,1,0x7559,1,0x786b,1,0x7d10,1,0x985e,1,0x516d,1,0x622e,1,
+0x9678,1,0x502b,1,0x5d19,1,0x6dea,1,0x8f2a,1,0x5f8b,1,0x6144,1,0x6817,1,
+0x7387,1,0x9686,1,0x5229,1,0x540f,1,0x5c65,1,0x6613,1,0x674e,1,0x68a8,1,
+0x6ce5,1,0x7406,1,0x75e2,1,0x7f79,1,0x88cf,1,0x88e1,1,0x91cc,1,0x96e2,1,
+0x533f,1,0x6eba,1,0x541d,1,0x71d0,1,0x7498,1,0x85fa,1,0x96a3,1,0x9c57,1,
+0x9e9f,1,0x6797,1,0x6dcb,1,0x81e8,1,0x7acb,1,0x7b20,1,0x7c92,1,0x72c0,1,
+0x7099,1,0x8b58,1,0x4ec0,1,0x8336,1,0x523a,1,0x5207,1,0x5ea6,1,0x62d3,1,
+0x7cd6,1,0x5b85,1,0x6d1e,1,0x66b4,1,0x8f3b,1,0x884c,1,0x964d,1,0x898b,1,
+0x5ed3,1,0x5140,1,0x55c0,1,0x585a,1,0x6674,1,0x51de,1,0x732a,1,0x76ca,1,
+0x793c,1,0x795e,1,0x7965,1,0x798f,1,0x9756,1,0x7cbe,1,0x7fbd,1,0x8612,1,
+0x8af8,1,0x9038,1,0x90fd,1,0x98ef,1,0x98fc,1,0x9928,1,0x9db4,1,0x4fae,1,
+0x50e7,1,0x514d,1,0x52c9,1,0x52e4,1,0x5351,1,0x559d,1,0x5606,1,0x5668,1,
+0x5840,1,0x58a8,1,0x5c64,1,0x5c6e,1,0x6094,1,0x6168,1,0x618e,1,0x61f2,1,
+0x654f,1,0x65e2,1,0x6691,1,0x6885,1,0x6d77,1,0x6e1a,1,0x6f22,1,0x716e,1,
+0x722b,1,0x7422,1,0x7891,1,0x793e,1,0x7949,1,0x7948,1,0x7950,1,0x7956,1,
+0x795d,1,0x798d,1,0x798e,1,0x7a40,1,0x7a81,1,0x7bc0,1,0x7df4,1,0x7e09,1,
+0x7e41,1,0x7f72,1,0x8005,1,0x81ed,1,0x8279,1,0x8279,1,0x8457,1,0x8910,1,
+0x8996,1,0x8b01,1,0x8b39,1,0x8cd3,1,0x8d08,1,0x8fb6,1,0x9038,1,0x96e3,1,
+0x97ff,1,0x983b,1,0x4e26,1,0x51b5,1,0x5168,1,0x4f80,1,0x5145,1,0x5180,1,
+0x52c7,1,0x52fa,1,0x559d,1,0x5555,1,0x5599,1,0x55e2,1,0x585a,1,0x58b3,1,
+0x5944,1,0x5954,1,0x5a62,1,0x5b28,1,0x5ed2,1,0x5ed9,1,0x5f69,1,0x5fad,1,
+0x60d8,1,0x614e,1,0x6108,1,0x618e,1,0x6160,1,0x61f2,1,0x6234,1,0x63c4,1,
+0x641c,1,0x6452,1,0x6556,1,0x6674,1,0x6717,1,0x671b,1,0x6756,1,0x6b79,1,
+0x6bba,1,0x6d41,1,0x6edb,1,0x6ecb,1,0x6f22,1,0x701e,1,0x716e,1,0x77a7,1,
+0x7235,1,0x72af,1,0x732a,1,0x7471,1,0x7506,1,0x753b,1,0x761d,1,0x761f,1,
+0x76ca,1,0x76db,1,0x76f4,1,0x774a,1,0x7740,1,0x78cc,1,0x7ab1,1,0x7bc0,1,
+0x7c7b,1,0x7d5b,1,0x7df4,1,0x7f3e,1,0x8005,1,0x8352,1,0x83ef,1,0x8779,1,
+0x8941,1,0x8986,1,0x8996,1,0x8abf,1,0x8af8,1,0x8acb,1,0x8b01,1,0x8afe,1,
+0x8aed,1,0x8b39,1,0x8b8a,1,0x8d08,1,0x8f38,1,0x9072,1,0x9199,1,0x9276,1,
+0x967c,1,0x96e3,1,0x9756,1,0x97db,1,0x97ff,1,0x980b,1,0x983b,1,0x9b12,1,
+0x9f9c,2,0xd84a,0xdc4a,2,0xd84a,0xdc44,2,0xd84c,0xdfd5,1,0x3b9d,1,0x4018,1,0x4039,
+2,0xd854,0xde49,2,0xd857,0xdcd0,2,0xd85f,0xded3,1,0x9f43,1,0x9f8e,0x82,0xe,0x5d9,
+0x5b4,0x82,0x11,0x5f2,0x5b7,0x82,0x18,0x5e9,0x5c1,0x82,0x19,0x5e9,0x5c2,0x83,0x18,0x5e9,
+0x5bc,0x5c1,0x83,0x19,0x5e9,0x5bc,0x5c2,0x82,0x11,0x5d0,0x5b7,0x82,0x12,0x5d0,0x5b8,0x82,
+0x15,0x5d0,0x5bc,0x82,0x15,0x5d1,0x5bc,0x82,0x15,0x5d2,0x5bc,0x82,0x15,0x5d3,0x5bc,0x82,
+0x15,0x5d4,0x5bc,0x82,0x15,0x5d5,0x5bc,0x82,0x15,0x5d6,0x5bc,0x82,0x15,0x5d8,0x5bc,0x82,
+0x15,0x5d9,0x5bc,0x82,0x15,0x5da,0x5bc,0x82,0x15,0x5db,0x5bc,0x82,0x15,0x5dc,0x5bc,0x82,
+0x15,0x5de,0x5bc,0x82,0x15,0x5e0,0x5bc,0x82,0x15,0x5e1,0x5bc,0x82,0x15,0x5e3,0x5bc,0x82,
+0x15,0x5e4,0x5bc,0x82,0x15,0x5e6,0x5bc,0x82,0x15,0x5e7,0x5bc,0x82,0x15,0x5e8,0x5bc,0x82,
+0x15,0x5e9,0x5bc,0x82,0x15,0x5ea,0x5bc,0x82,0x13,0x5d5,0x5b9,0x82,0x17,0x5d1,0x5bf,0x82,
+0x17,0x5db,0x5bf,0x82,0x17,0x5e4,0x5bf,0x84,0xd8,0xd834,0xdd57,0xd834,0xdd65,0x84,0xd8,0xd834,
+0xdd58,0xd834,0xdd65,0x86,0xd8,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd6e,0x86,0xd8,0xd834,0xdd58,0xd834,
+0xdd65,0xd834,0xdd6f,0x86,0xd8,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd70,0x86,0xd8,0xd834,0xdd58,0xd834,
+0xdd65,0xd834,0xdd71,0x86,0xd8,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd72,0x84,0xd8,0xd834,0xddb9,0xd834,
+0xdd65,0x84,0xd8,0xd834,0xddba,0xd834,0xdd65,0x86,0xd8,0xd834,0xddb9,0xd834,0xdd65,0xd834,0xdd6e,0x86,
+0xd8,0xd834,0xddba,0xd834,0xdd65,0xd834,0xdd6e,0x86,0xd8,0xd834,0xddb9,0xd834,0xdd65,0xd834,0xdd6f,0x86,
+0xd8,0xd834,0xddba,0xd834,0xdd65,0xd834,0xdd6f,1,0x4e3d,1,0x4e38,1,0x4e41,2,0xd840,0xdd22,
+1,0x4f60,1,0x4fae,1,0x4fbb,1,0x5002,1,0x507a,1,0x5099,1,0x50e7,1,0x50cf,
+1,0x349e,2,0xd841,0xde3a,1,0x514d,1,0x5154,1,0x5164,1,0x5177,2,0xd841,0xdd1c,
+1,0x34b9,1,0x5167,1,0x518d,2,0xd841,0xdd4b,1,0x5197,1,0x51a4,1,0x4ecc,1,
+0x51ac,1,0x51b5,2,0xd864,0xdddf,1,0x51f5,1,0x5203,1,0x34df,1,0x523b,1,0x5246,
+1,0x5272,1,0x5277,1,0x3515,1,0x52c7,1,0x52c9,1,0x52e4,1,0x52fa,1,0x5305,
+1,0x5306,1,0x5317,1,0x5349,1,0x5351,1,0x535a,1,0x5373,1,0x537d,1,0x537f,
+1,0x537f,1,0x537f,2,0xd842,0xde2c,1,0x7070,1,0x53ca,1,0x53df,2,0xd842,0xdf63,
+1,0x53eb,1,0x53f1,1,0x5406,1,0x549e,1,0x5438,1,0x5448,1,0x5468,1,0x54a2,
+1,0x54f6,1,0x5510,1,0x5553,1,0x5563,1,0x5584,1,0x5584,1,0x5599,1,0x55ab,
+1,0x55b3,1,0x55c2,1,0x5716,1,0x5606,1,0x5717,1,0x5651,1,0x5674,1,0x5207,
+1,0x58ee,1,0x57ce,1,0x57f4,1,0x580d,1,0x578b,1,0x5832,1,0x5831,1,0x58ac,
+2,0xd845,0xdce4,1,0x58f2,1,0x58f7,1,0x5906,1,0x591a,1,0x5922,1,0x5962,2,
+0xd845,0xdea8,2,0xd845,0xdeea,1,0x59ec,1,0x5a1b,1,0x5a27,1,0x59d8,1,0x5a66,1,
+0x36ee,1,0x36fc,1,0x5b08,1,0x5b3e,1,0x5b3e,2,0xd846,0xddc8,1,0x5bc3,1,0x5bd8,
+1,0x5be7,1,0x5bf3,2,0xd846,0xdf18,1,0x5bff,1,0x5c06,1,0x5f53,1,0x5c22,1,
+0x3781,1,0x5c60,1,0x5c6e,1,0x5cc0,1,0x5c8d,2,0xd847,0xdde4,1,0x5d43,2,0xd847,
+0xdde6,1,0x5d6e,1,0x5d6b,1,0x5d7c,1,0x5de1,1,0x5de2,1,0x382f,1,0x5dfd,1,
+0x5e28,1,0x5e3d,1,0x5e69,1,0x3862,2,0xd848,0xdd83,1,0x387c,1,0x5eb0,1,0x5eb3,
+1,0x5eb6,1,0x5eca,2,0xd868,0xdf92,1,0x5efe,2,0xd848,0xdf31,2,0xd848,0xdf31,1,
+0x8201,1,0x5f22,1,0x5f22,1,0x38c7,2,0xd84c,0xdeb8,2,0xd858,0xddda,1,0x5f62,1,
+0x5f6b,1,0x38e3,1,0x5f9a,1,0x5fcd,1,0x5fd7,1,0x5ff9,1,0x6081,1,0x393a,1,
+0x391c,1,0x6094,2,0xd849,0xded4,1,0x60c7,1,0x6148,1,0x614c,1,0x614e,1,0x614c,
+1,0x617a,1,0x618e,1,0x61b2,1,0x61a4,1,0x61af,1,0x61de,1,0x61f2,1,0x61f6,
+1,0x6210,1,0x621b,1,0x625d,1,0x62b1,1,0x62d4,1,0x6350,2,0xd84a,0xdf0c,1,
+0x633d,1,0x62fc,1,0x6368,1,0x6383,1,0x63e4,2,0xd84a,0xdff1,1,0x6422,1,0x63c5,
+1,0x63a9,1,0x3a2e,1,0x6469,1,0x647e,1,0x649d,1,0x6477,1,0x3a6c,1,0x654f,
+1,0x656c,2,0xd84c,0xdc0a,1,0x65e3,1,0x66f8,1,0x6649,1,0x3b19,1,0x6691,1,
+0x3b08,1,0x3ae4,1,0x5192,1,0x5195,1,0x6700,1,0x669c,1,0x80ad,1,0x43d9,1,
+0x6717,1,0x671b,1,0x6721,1,0x675e,1,0x6753,2,0xd84c,0xdfc3,1,0x3b49,1,0x67fa,
+1,0x6785,1,0x6852,1,0x6885,2,0xd84d,0xdc6d,1,0x688e,1,0x681f,1,0x6914,1,
+0x3b9d,1,0x6942,1,0x69a3,1,0x69ea,1,0x6aa8,2,0xd84d,0xdea3,1,0x6adb,1,0x3c18,
+1,0x6b21,2,0xd84e,0xdca7,1,0x6b54,1,0x3c4e,1,0x6b72,1,0x6b9f,1,0x6bba,1,
+0x6bbb,2,0xd84e,0xde8d,2,0xd847,0xdd0b,2,0xd84e,0xdefa,1,0x6c4e,2,0xd84f,0xdcbc,1,
+0x6cbf,1,0x6ccd,1,0x6c67,1,0x6d16,1,0x6d3e,1,0x6d77,1,0x6d41,1,0x6d69,1,
+0x6d78,1,0x6d85,2,0xd84f,0xdd1e,1,0x6d34,1,0x6e2f,1,0x6e6e,1,0x3d33,1,0x6ecb,
+1,0x6ec7,2,0xd84f,0xded1,1,0x6df9,1,0x6f6e,2,0xd84f,0xdf5e,2,0xd84f,0xdf8e,1,
+0x6fc6,1,0x7039,1,0x701e,1,0x701b,1,0x3d96,1,0x704a,1,0x707d,1,0x7077,1,
+0x70ad,2,0xd841,0xdd25,1,0x7145,2,0xd850,0xde63,1,0x719c,2,0xd850,0xdfab,1,0x7228,
+1,0x7235,1,0x7250,2,0xd851,0xde08,1,0x7280,1,0x7295,2,0xd851,0xdf35,2,0xd852,
+0xdc14,1,0x737a,1,0x738b,1,0x3eac,1,0x73a5,1,0x3eb8,1,0x3eb8,1,0x7447,1,
+0x745c,1,0x7471,1,0x7485,1,0x74ca,1,0x3f1b,1,0x7524,2,0xd853,0xdc36,1,0x753e,
+2,0xd853,0xdc92,1,0x7570,2,0xd848,0xdd9f,1,0x7610,2,0xd853,0xdfa1,2,0xd853,0xdfb8,
+2,0xd854,0xdc44,1,0x3ffc,1,0x4008,1,0x76f4,2,0xd854,0xdcf3,2,0xd854,0xdcf2,2,
+0xd854,0xdd19,2,0xd854,0xdd33,1,0x771e,1,0x771f,1,0x771f,1,0x774a,1,0x4039,1,
+0x778b,1,0x4046,1,0x4096,2,0xd855,0xdc1d,1,0x784e,1,0x788c,1,0x78cc,1,0x40e3,
+2,0xd855,0xde26,1,0x7956,2,0xd855,0xde9a,2,0xd855,0xdec5,1,0x798f,1,0x79eb,1,
+0x412f,1,0x7a40,1,0x7a4a,1,0x7a4f,2,0xd856,0xdd7c,2,0xd856,0xdea7,2,0xd856,0xdea7,
+1,0x7aee,1,0x4202,2,0xd856,0xdfab,1,0x7bc6,1,0x7bc9,1,0x4227,2,0xd857,0xdc80,
+1,0x7cd2,1,0x42a0,1,0x7ce8,1,0x7ce3,1,0x7d00,2,0xd857,0xdf86,1,0x7d63,1,
+0x4301,1,0x7dc7,1,0x7e02,1,0x7e45,1,0x4334,2,0xd858,0xde28,2,0xd858,0xde47,1,
+0x4359,2,0xd858,0xded9,1,0x7f7a,2,0xd858,0xdf3e,1,0x7f95,1,0x7ffa,1,0x8005,2,
+0xd859,0xdcda,2,0xd859,0xdd23,1,0x8060,2,0xd859,0xdda8,1,0x8070,2,0xd84c,0xdf5f,1,
+0x43d5,1,0x80b2,1,0x8103,1,0x440b,1,0x813e,1,0x5ab5,2,0xd859,0xdfa7,2,0xd859,
+0xdfb5,2,0xd84c,0xdf93,2,0xd84c,0xdf9c,1,0x8201,1,0x8204,1,0x8f9e,1,0x446b,1,
+0x8291,1,0x828b,1,0x829d,1,0x52b3,1,0x82b1,1,0x82b3,1,0x82bd,1,0x82e6,2,
+0xd85a,0xdf3c,1,0x82e5,1,0x831d,1,0x8363,1,0x83ad,1,0x8323,1,0x83bd,1,0x83e7,
+1,0x8457,1,0x8353,1,0x83ca,1,0x83cc,1,0x83dc,2,0xd85b,0xdc36,2,0xd85b,0xdd6b,
+2,0xd85b,0xdcd5,1,0x452b,1,0x84f1,1,0x84f3,1,0x8516,2,0xd85c,0xdfca,1,0x8564,
+2,0xd85b,0xdf2c,1,0x455d,1,0x4561,2,0xd85b,0xdfb1,2,0xd85c,0xdcd2,1,0x456b,1,
+0x8650,1,0x865c,1,0x8667,1,0x8669,1,0x86a9,1,0x8688,1,0x870e,1,0x86e2,1,
+0x8779,1,0x8728,1,0x876b,1,0x8786,1,0x45d7,1,0x87e1,1,0x8801,1,0x45f9,1,
+0x8860,1,0x8863,2,0xd85d,0xde67,1,0x88d7,1,0x88de,1,0x4635,1,0x88fa,1,0x34bb,
+2,0xd85e,0xdcae,2,0xd85e,0xdd66,1,0x46be,1,0x46c7,1,0x8aa0,1,0x8aed,1,0x8b8a,
+1,0x8c55,2,0xd85f,0xdca8,1,0x8cab,1,0x8cc1,1,0x8d1b,1,0x8d77,2,0xd85f,0xdf2f,
+2,0xd842,0xdc04,1,0x8dcb,1,0x8dbc,1,0x8df0,2,0xd842,0xdcde,1,0x8ed4,1,0x8f38,
+2,0xd861,0xddd2,2,0xd861,0xdded,1,0x9094,1,0x90f1,1,0x9111,2,0xd861,0xdf2e,1,
+0x911b,1,0x9238,1,0x92d7,1,0x92d8,1,0x927c,1,0x93f9,1,0x9415,2,0xd862,0xdffa,
+1,0x958b,1,0x4995,1,0x95b7,2,0xd863,0xdd77,1,0x49e6,1,0x96c3,1,0x5db2,1,
+0x9723,2,0xd864,0xdd45,2,0xd864,0xde1a,1,0x4a6e,1,0x4a76,1,0x97e0,2,0xd865,0xdc0a,
+1,0x4ab2,2,0xd865,0xdc96,1,0x980b,1,0x980b,1,0x9829,2,0xd865,0xddb6,1,0x98e2,
+1,0x4b33,1,0x9929,1,0x99a7,1,0x99c2,1,0x99fe,1,0x4bce,2,0xd866,0xdf30,1,
+0x9b12,1,0x9c40,1,0x9cfd,1,0x4cce,1,0x4ced,1,0x9d67,2,0xd868,0xdcce,1,0x4cf8,
+2,0xd868,0xdd05,2,0xd868,0xde0e,2,0xd868,0xde91,1,0x9ebb,1,0x4d56,1,0x9ef9,1,
+0x9efe,1,0x9f05,1,0x9f0f,1,0x9f16,1,0x9f3b,2,0xd869,0xde00,0x82,0xe6,0x41,0x300,
+0x82,0xe6,0x41,0x301,0x4e6,0x82,0xe6,0x41,0x302,0x82,0xe6,0x41,0x303,0x2c8,0x82,0xe6,
+0x41,0x308,0x2e0,0x82,0xe6,0x41,0x30a,0x484,0x82,0xca,0x43,0x327,0x82,0xe6,0x45,0x300,
+0x82,0xe6,0x45,0x301,0x50e,0x82,0xe6,0x45,0x302,0x82,0xe6,0x45,0x308,0x82,0xe6,0x49,
+0x300,0x82,0xe6,0x49,0x301,0x82,0xe6,0x49,0x302,0x498,0x82,0xe6,0x49,0x308,0x82,0xe6,
+0x4e,0x303,0x82,0xe6,0x4f,0x300,0x82,0xe6,0x4f,0x301,0x522,0x82,0xe6,0x4f,0x302,0x2ec,
+0x82,0xe6,0x4f,0x303,0x2e8,0x82,0xe6,0x4f,0x308,0x82,0xe6,0x55,0x300,0x82,0xe6,0x55,
+0x301,0x82,0xe6,0x55,0x302,0x2b8,0x82,0xe6,0x55,0x308,0x82,0xe6,0x59,0x301,0x82,0xe6,
+0x61,0x300,0x82,0xe6,0x61,0x301,0x4ee,0x82,0xe6,0x61,0x302,0x82,0xe6,0x61,0x303,0x2ca,
+0x82,0xe6,0x61,0x308,0x2e2,0x82,0xe6,0x61,0x30a,0x486,0x82,0xca,0x63,0x327,0x82,0xe6,
+0x65,0x300,0x82,0xe6,0x65,0x301,0x516,0x82,0xe6,0x65,0x302,0x82,0xe6,0x65,0x308,0x82,
+0xe6,0x69,0x300,0x82,0xe6,0x69,0x301,0x82,0xe6,0x69,0x302,0x49a,0x82,0xe6,0x69,0x308,
+0x82,0xe6,0x6e,0x303,0x82,0xe6,0x6f,0x300,0x82,0xe6,0x6f,0x301,0x52a,0x82,0xe6,0x6f,
+0x302,0x2f2,0x82,0xe6,0x6f,0x303,0x2ea,0x82,0xe6,0x6f,0x308,0x82,0xe6,0x75,0x300,0x82,
+0xe6,0x75,0x301,0x82,0xe6,0x75,0x302,0x2c0,0x82,0xe6,0x75,0x308,0x82,0xe6,0x79,0x301,
+0x82,0xe6,0x79,0x308,0x82,0xe6,0x41,0x304,0x82,0xe6,0x61,0x304,0x4fe,0x82,0xe6,0x41,
+0x306,0x506,0x82,0xe6,0x61,0x306,0x82,0xca,0x41,0x328,0x82,0xca,0x61,0x328,0x82,0xe6,
+0x43,0x301,0x82,0xe6,0x63,0x301,0x82,0xe6,0x43,0x302,0x82,0xe6,0x63,0x302,0x82,0xe6,
+0x43,0x307,0x82,0xe6,0x63,0x307,0x82,0xe6,0x43,0x30c,0x82,0xe6,0x63,0x30c,0x82,0xe6,
+0x44,0x30c,0x82,0xe6,0x64,0x30c,0x488,0x82,0xe6,0x45,0x304,0x48c,0x82,0xe6,0x65,0x304,
+0x82,0xe6,0x45,0x306,0x82,0xe6,0x65,0x306,0x82,0xe6,0x45,0x307,0x82,0xe6,0x65,0x307,
+0x82,0xca,0x45,0x328,0x82,0xca,0x65,0x328,0x82,0xe6,0x45,0x30c,0x82,0xe6,0x65,0x30c,
+0x82,0xe6,0x47,0x302,0x82,0xe6,0x67,0x302,0x82,0xe6,0x47,0x306,0x82,0xe6,0x67,0x306,
+0x82,0xe6,0x47,0x307,0x82,0xe6,0x67,0x307,0x82,0xca,0x47,0x327,0x82,0xca,0x67,0x327,
+0x82,0xe6,0x48,0x302,0x82,0xe6,0x68,0x302,0x82,0xe6,0x49,0x303,0x82,0xe6,0x69,0x303,
+0x82,0xe6,0x49,0x304,0x82,0xe6,0x69,0x304,0x82,0xe6,0x49,0x306,0x82,0xe6,0x69,0x306,
+0x82,0xca,0x49,0x328,0x82,0xca,0x69,0x328,0x82,0xe6,0x49,0x307,0x82,0xe6,0x4a,0x302,
+0x82,0xe6,0x6a,0x302,0x82,0xca,0x4b,0x327,0x82,0xca,0x6b,0x327,0x82,0xe6,0x4c,0x301,
+0x82,0xe6,0x6c,0x301,0x82,0xca,0x4c,0x327,0x82,0xca,0x6c,0x327,0x82,0xe6,0x4c,0x30c,
+0x82,0xe6,0x6c,0x30c,0x82,0xe6,0x4e,0x301,0x82,0xe6,0x6e,0x301,0x82,0xca,0x4e,0x327,
+0x82,0xca,0x6e,0x327,0x82,0xe6,0x4e,0x30c,0x82,0xe6,0x6e,0x30c,0x4ac,0x82,0xe6,0x4f,
+0x304,0x4b0,0x82,0xe6,0x6f,0x304,0x82,0xe6,0x4f,0x306,0x82,0xe6,0x6f,0x306,0x82,0xe6,
+0x4f,0x30b,0x82,0xe6,0x6f,0x30b,0x82,0xe6,0x52,0x301,0x82,0xe6,0x72,0x301,0x82,0xca,
+0x52,0x327,0x82,0xca,0x72,0x327,0x82,0xe6,0x52,0x30c,0x82,0xe6,0x72,0x30c,0x4c0,0x82,
+0xe6,0x53,0x301,0x4c2,0x82,0xe6,0x73,0x301,0x82,0xe6,0x53,0x302,0x82,0xe6,0x73,0x302,
+0x82,0xca,0x53,0x327,0x82,0xca,0x73,0x327,0x4c4,0x82,0xe6,0x53,0x30c,0x4c6,0x82,0xe6,
+0x73,0x30c,0x82,0xca,0x54,0x327,0x82,0xca,0x74,0x327,0x82,0xe6,0x54,0x30c,0x82,0xe6,
+0x74,0x30c,0x4cc,0x82,0xe6,0x55,0x303,0x4ce,0x82,0xe6,0x75,0x303,0x4d0,0x82,0xe6,0x55,
+0x304,0x4d2,0x82,0xe6,0x75,0x304,0x82,0xe6,0x55,0x306,0x82,0xe6,0x75,0x306,0x82,0xe6,
+0x55,0x30a,0x82,0xe6,0x75,0x30a,0x82,0xe6,0x55,0x30b,0x82,0xe6,0x75,0x30b,0x82,0xca,
+0x55,0x328,0x82,0xca,0x75,0x328,0x82,0xe6,0x57,0x302,0x82,0xe6,0x77,0x302,0x82,0xe6,
+0x59,0x302,0x82,0xe6,0x79,0x302,0x82,0xe6,0x59,0x308,0x82,0xe6,0x5a,0x301,0x82,0xe6,
+0x7a,0x301,0x82,0xe6,0x5a,0x307,0x82,0xe6,0x7a,0x307,0x82,0xe6,0x5a,0x30c,0x82,0xe6,
+0x7a,0x30c,0x536,0x82,0xd8,0x4f,0x31b,0x540,0x82,0xd8,0x6f,0x31b,0x54a,0x82,0xd8,0x55,
+0x31b,0x554,0x82,0xd8,0x75,0x31b,0x82,0xe6,0x41,0x30c,0x82,0xe6,0x61,0x30c,0x82,0xe6,
+0x49,0x30c,0x82,0xe6,0x69,0x30c,0x82,0xe6,0x4f,0x30c,0x82,0xe6,0x6f,0x30c,0x82,0xe6,
+0x55,0x30c,0x82,0xe6,0x75,0x30c,0x83,0xe6,0x55,0x308,0x304,0x83,0xe6,0x75,0x308,0x304,
+0x83,0xe6,0x55,0x308,0x301,0x83,0xe6,0x75,0x308,0x301,0x83,0xe6,0x55,0x308,0x30c,0x83,
+0xe6,0x75,0x308,0x30c,0x83,0xe6,0x55,0x308,0x300,0x83,0xe6,0x75,0x308,0x300,0x83,0xe6,
+0x41,0x308,0x304,0x83,0xe6,0x61,0x308,0x304,0x83,0xe6,0x41,0x307,0x304,0x83,0xe6,0x61,
+0x307,0x304,0x82,0xe6,0xc6,0x304,0x82,0xe6,0xe6,0x304,0x82,0xe6,0x47,0x30c,0x82,0xe6,
+0x67,0x30c,0x82,0xe6,0x4b,0x30c,0x82,0xe6,0x6b,0x30c,0x2d8,0x82,0xca,0x4f,0x328,0x2da,
+0x82,0xca,0x6f,0x328,0x83,0xe6,0x4f,0x328,0x304,0x83,0xe6,0x6f,0x328,0x304,0x82,0xe6,
+0x1b7,0x30c,0x82,0xe6,0x292,0x30c,0x82,0xe6,0x6a,0x30c,0x82,0xe6,0x47,0x301,0x82,0xe6,
+0x67,0x301,0x82,0xe6,0x4e,0x300,0x82,0xe6,0x6e,0x300,0x83,0xe6,0x41,0x30a,0x301,0x83,
+0xe6,0x61,0x30a,0x301,0x82,0xe6,0xc6,0x301,0x82,0xe6,0xe6,0x301,0x82,0xe6,0xd8,0x301,
+0x82,0xe6,0xf8,0x301,0x82,0xe6,0x41,0x30f,0x82,0xe6,0x61,0x30f,0x82,0xe6,0x41,0x311,
+0x82,0xe6,0x61,0x311,0x82,0xe6,0x45,0x30f,0x82,0xe6,0x65,0x30f,0x82,0xe6,0x45,0x311,
+0x82,0xe6,0x65,0x311,0x82,0xe6,0x49,0x30f,0x82,0xe6,0x69,0x30f,0x82,0xe6,0x49,0x311,
+0x82,0xe6,0x69,0x311,0x82,0xe6,0x4f,0x30f,0x82,0xe6,0x6f,0x30f,0x82,0xe6,0x4f,0x311,
+0x82,0xe6,0x6f,0x311,0x82,0xe6,0x52,0x30f,0x82,0xe6,0x72,0x30f,0x82,0xe6,0x52,0x311,
+0x82,0xe6,0x72,0x311,0x82,0xe6,0x55,0x30f,0x82,0xe6,0x75,0x30f,0x82,0xe6,0x55,0x311,
+0x82,0xe6,0x75,0x311,0x82,0xdc,0x53,0x326,0x82,0xdc,0x73,0x326,0x82,0xdc,0x54,0x326,
+0x82,0xdc,0x74,0x326,0x82,0xe6,0x48,0x30c,0x82,0xe6,0x68,0x30c,0x2cc,0x82,0xe6,0x41,
+0x307,0x2ce,0x82,0xe6,0x61,0x307,0x490,0x82,0xca,0x45,0x327,0x492,0x82,0xca,0x65,0x327,
+0x83,0xe6,0x4f,0x308,0x304,0x83,0xe6,0x6f,0x308,0x304,0x83,0xe6,0x4f,0x303,0x304,0x83,
+0xe6,0x6f,0x303,0x304,0x2f8,0x82,0xe6,0x4f,0x307,0x2fa,0x82,0xe6,0x6f,0x307,0x83,0xe6,
+0x4f,0x307,0x304,0x83,0xe6,0x6f,0x307,0x304,0x82,0xe6,0x59,0x304,0x82,0xe6,0x79,0x304,
+0x8382,0xe6,0xa8,0x301,0xe6,0x20,0x308,0x301,0x82,0xe6,0x391,0x301,0x82,0xe6,0x395,0x301,
+0x82,0xe6,0x397,0x301,0x82,0xe6,0x399,0x301,0x82,0xe6,0x39f,0x301,0x82,0xe6,0x3a5,0x301,
+0x82,0xe6,0x3a9,0x301,0x83,0xe6,0x3b9,0x308,0x301,0x82,0xe6,0x399,0x308,0x82,0xe6,0x3a5,
+0x308,0x652,0x82,0xe6,0x3b1,0x301,0x82,0xe6,0x3b5,0x301,0x658,0x82,0xe6,0x3b7,0x301,0x82,
+0xe6,0x3b9,0x301,0x83,0xe6,0x3c5,0x308,0x301,0x34e,0x82,0xe6,0x3b9,0x308,0x388,0x82,0xe6,
+0x3c5,0x308,0x82,0xe6,0x3bf,0x301,0x82,0xe6,0x3c5,0x301,0x670,0x82,0xe6,0x3c9,0x301,0x82,
+0xe6,0x415,0x300,0x82,0xe6,0x415,0x308,0x82,0xe6,0x413,0x301,0x82,0xe6,0x406,0x308,0x82,
+0xe6,0x41a,0x301,0x82,0xe6,0x418,0x300,0x82,0xe6,0x423,0x306,0x82,0xe6,0x418,0x306,0x82,
+0xe6,0x438,0x306,0x82,0xe6,0x435,0x300,0x82,0xe6,0x435,0x308,0x82,0xe6,0x433,0x301,0x82,
+0xe6,0x456,0x308,0x82,0xe6,0x43a,0x301,0x82,0xe6,0x438,0x300,0x82,0xe6,0x443,0x306,0x82,
+0xe6,0x474,0x30f,0x82,0xe6,0x475,0x30f,0x82,0xe6,0x416,0x306,0x82,0xe6,0x436,0x306,0x82,
+0xe6,0x410,0x306,0x82,0xe6,0x430,0x306,0x82,0xe6,0x410,0x308,0x82,0xe6,0x430,0x308,0x82,
+0xe6,0x415,0x306,0x82,0xe6,0x435,0x306,0x82,0xe6,0x4d8,0x308,0x82,0xe6,0x4d9,0x308,0x82,
+0xe6,0x416,0x308,0x82,0xe6,0x436,0x308,0x82,0xe6,0x417,0x308,0x82,0xe6,0x437,0x308,0x82,
+0xe6,0x418,0x304,0x82,0xe6,0x438,0x304,0x82,0xe6,0x418,0x308,0x82,0xe6,0x438,0x308,0x82,
+0xe6,0x41e,0x308,0x82,0xe6,0x43e,0x308,0x82,0xe6,0x4e8,0x308,0x82,0xe6,0x4e9,0x308,0x82,
+0xe6,0x42d,0x308,0x82,0xe6,0x44d,0x308,0x82,0xe6,0x423,0x304,0x82,0xe6,0x443,0x304,0x82,
+0xe6,0x423,0x308,0x82,0xe6,0x443,0x308,0x82,0xe6,0x423,0x30b,0x82,0xe6,0x443,0x30b,0x82,
+0xe6,0x427,0x308,0x82,0xe6,0x447,0x308,0x82,0xe6,0x42b,0x308,0x82,0xe6,0x44b,0x308,0x82,
+0xe6,0x627,0x653,0x82,0xe6,0x627,0x654,0x82,0xe6,0x648,0x654,0x82,0xdc,0x627,0x655,0x82,
+0xe6,0x64a,0x654,0x82,0xe6,0x6d5,0x654,0x82,0xe6,0x6c1,0x654,0x82,0xe6,0x6d2,0x654,0x82,
+7,0x928,0x93c,0x82,7,0x930,0x93c,0x82,7,0x933,0x93c,2,0x9c7,0x9be,2,0x9c7,
+0x9d7,2,0xb47,0xb56,2,0xb47,0xb3e,2,0xb47,0xb57,2,0xb92,0xbd7,2,0xbc6,0xbbe,
+2,0xbc7,0xbbe,2,0xbc6,0xbd7,0x82,0x5b,0xc46,0xc56,2,0xcbf,0xcd5,2,0xcc6,0xcd5,
+2,0xcc6,0xcd6,0x450,2,0xcc6,0xcc2,3,0xcc6,0xcc2,0xcd5,2,0xd46,0xd3e,2,0xd47,
+0xd3e,2,0xd46,0xd57,0x82,9,0xdd9,0xdca,0x45e,2,0xdd9,0xdcf,0x83,9,0xdd9,0xdcf,
+0xdca,2,0xdd9,0xddf,2,0x1025,0x102e,2,0x1b05,0x1b35,2,0x1b07,0x1b35,2,0x1b09,0x1b35,
+2,0x1b0b,0x1b35,2,0x1b0d,0x1b35,2,0x1b11,0x1b35,2,0x1b3a,0x1b35,2,0x1b3c,0x1b35,2,
+0x1b3e,0x1b35,2,0x1b3f,0x1b35,2,0x1b42,0x1b35,0x82,0xdc,0x41,0x325,0x82,0xdc,0x61,0x325,
+0x82,0xe6,0x42,0x307,0x82,0xe6,0x62,0x307,0x82,0xdc,0x42,0x323,0x82,0xdc,0x62,0x323,
+0x82,0xdc,0x42,0x331,0x82,0xdc,0x62,0x331,0x83,0xe6,0x43,0x327,0x301,0x83,0xe6,0x63,
+0x327,0x301,0x82,0xe6,0x44,0x307,0x82,0xe6,0x64,0x307,0x82,0xdc,0x44,0x323,0x82,0xdc,
+0x64,0x323,0x82,0xdc,0x44,0x331,0x82,0xdc,0x64,0x331,0x82,0xca,0x44,0x327,0x82,0xca,
+0x64,0x327,0x82,0xdc,0x44,0x32d,0x82,0xdc,0x64,0x32d,0x83,0xe6,0x45,0x304,0x300,0x83,
+0xe6,0x65,0x304,0x300,0x83,0xe6,0x45,0x304,0x301,0x83,0xe6,0x65,0x304,0x301,0x82,0xdc,
+0x45,0x32d,0x82,0xdc,0x65,0x32d,0x82,0xdc,0x45,0x330,0x82,0xdc,0x65,0x330,0x83,0xe6,
+0x45,0x327,0x306,0x83,0xe6,0x65,0x327,0x306,0x82,0xe6,0x46,0x307,0x82,0xe6,0x66,0x307,
+0x82,0xe6,0x47,0x304,0x82,0xe6,0x67,0x304,0x82,0xe6,0x48,0x307,0x82,0xe6,0x68,0x307,
+0x82,0xdc,0x48,0x323,0x82,0xdc,0x68,0x323,0x82,0xe6,0x48,0x308,0x82,0xe6,0x68,0x308,
+0x82,0xca,0x48,0x327,0x82,0xca,0x68,0x327,0x82,0xdc,0x48,0x32e,0x82,0xdc,0x68,0x32e,
+0x82,0xdc,0x49,0x330,0x82,0xdc,0x69,0x330,0x83,0xe6,0x49,0x308,0x301,0x83,0xe6,0x69,
+0x308,0x301,0x82,0xe6,0x4b,0x301,0x82,0xe6,0x6b,0x301,0x82,0xdc,0x4b,0x323,0x82,0xdc,
+0x6b,0x323,0x82,0xdc,0x4b,0x331,0x82,0xdc,0x6b,0x331,0x49c,0x82,0xdc,0x4c,0x323,0x49e,
+0x82,0xdc,0x6c,0x323,0x83,0xe6,0x4c,0x323,0x304,0x83,0xe6,0x6c,0x323,0x304,0x82,0xdc,
+0x4c,0x331,0x82,0xdc,0x6c,0x331,0x82,0xdc,0x4c,0x32d,0x82,0xdc,0x6c,0x32d,0x82,0xe6,
+0x4d,0x301,0x82,0xe6,0x6d,0x301,0x82,0xe6,0x4d,0x307,0x82,0xe6,0x6d,0x307,0x82,0xdc,
+0x4d,0x323,0x82,0xdc,0x6d,0x323,0x82,0xe6,0x4e,0x307,0x82,0xe6,0x6e,0x307,0x82,0xdc,
+0x4e,0x323,0x82,0xdc,0x6e,0x323,0x82,0xdc,0x4e,0x331,0x82,0xdc,0x6e,0x331,0x82,0xdc,
+0x4e,0x32d,0x82,0xdc,0x6e,0x32d,0x83,0xe6,0x4f,0x303,0x301,0x83,0xe6,0x6f,0x303,0x301,
+0x83,0xe6,0x4f,0x303,0x308,0x83,0xe6,0x6f,0x303,0x308,0x83,0xe6,0x4f,0x304,0x300,0x83,
+0xe6,0x6f,0x304,0x300,0x83,0xe6,0x4f,0x304,0x301,0x83,0xe6,0x6f,0x304,0x301,0x82,0xe6,
+0x50,0x301,0x82,0xe6,0x70,0x301,0x82,0xe6,0x50,0x307,0x82,0xe6,0x70,0x307,0x82,0xe6,
+0x52,0x307,0x82,0xe6,0x72,0x307,0x4bc,0x82,0xdc,0x52,0x323,0x4be,0x82,0xdc,0x72,0x323,
+0x83,0xe6,0x52,0x323,0x304,0x83,0xe6,0x72,0x323,0x304,0x82,0xdc,0x52,0x331,0x82,0xdc,
+0x72,0x331,0x82,0xe6,0x53,0x307,0x82,0xe6,0x73,0x307,0x4c8,0x82,0xdc,0x53,0x323,0x4ca,
+0x82,0xdc,0x73,0x323,0x83,0xe6,0x53,0x301,0x307,0x83,0xe6,0x73,0x301,0x307,0x83,0xe6,
+0x53,0x30c,0x307,0x83,0xe6,0x73,0x30c,0x307,0x83,0xe6,0x53,0x323,0x307,0x83,0xe6,0x73,
+0x323,0x307,0x82,0xe6,0x54,0x307,0x82,0xe6,0x74,0x307,0x82,0xdc,0x54,0x323,0x82,0xdc,
+0x74,0x323,0x82,0xdc,0x54,0x331,0x82,0xdc,0x74,0x331,0x82,0xdc,0x54,0x32d,0x82,0xdc,
+0x74,0x32d,0x82,0xdc,0x55,0x324,0x82,0xdc,0x75,0x324,0x82,0xdc,0x55,0x330,0x82,0xdc,
+0x75,0x330,0x82,0xdc,0x55,0x32d,0x82,0xdc,0x75,0x32d,0x83,0xe6,0x55,0x303,0x301,0x83,
+0xe6,0x75,0x303,0x301,0x83,0xe6,0x55,0x304,0x308,0x83,0xe6,0x75,0x304,0x308,0x82,0xe6,
+0x56,0x303,0x82,0xe6,0x76,0x303,0x82,0xdc,0x56,0x323,0x82,0xdc,0x76,0x323,0x82,0xe6,
+0x57,0x300,0x82,0xe6,0x77,0x300,0x82,0xe6,0x57,0x301,0x82,0xe6,0x77,0x301,0x82,0xe6,
+0x57,0x308,0x82,0xe6,0x77,0x308,0x82,0xe6,0x57,0x307,0x82,0xe6,0x77,0x307,0x82,0xdc,
+0x57,0x323,0x82,0xdc,0x77,0x323,0x82,0xe6,0x58,0x307,0x82,0xe6,0x78,0x307,0x82,0xe6,
+0x58,0x308,0x82,0xe6,0x78,0x308,0x82,0xe6,0x59,0x307,0x82,0xe6,0x79,0x307,0x82,0xe6,
+0x5a,0x302,0x82,0xe6,0x7a,0x302,0x82,0xdc,0x5a,0x323,0x82,0xdc,0x7a,0x323,0x82,0xdc,
+0x5a,0x331,0x82,0xdc,0x7a,0x331,0x82,0xdc,0x68,0x331,0x82,0xe6,0x74,0x308,0x82,0xe6,
+0x77,0x30a,0x82,0xe6,0x79,0x30a,0x8282,0xe6,0x17f,0x307,0xe6,0x73,0x307,0x4f6,0x82,0xdc,
+0x41,0x323,0x4fa,0x82,0xdc,0x61,0x323,0x82,0xe6,0x41,0x309,0x82,0xe6,0x61,0x309,0x83,
+0xe6,0x41,0x302,0x301,0x83,0xe6,0x61,0x302,0x301,0x83,0xe6,0x41,0x302,0x300,0x83,0xe6,
+0x61,0x302,0x300,0x83,0xe6,0x41,0x302,0x309,0x83,0xe6,0x61,0x302,0x309,0x83,0xe6,0x41,
+0x302,0x303,0x83,0xe6,0x61,0x302,0x303,0x83,0xe6,0x41,0x323,0x302,0x83,0xe6,0x61,0x323,
+0x302,0x83,0xe6,0x41,0x306,0x301,0x83,0xe6,0x61,0x306,0x301,0x83,0xe6,0x41,0x306,0x300,
+0x83,0xe6,0x61,0x306,0x300,0x83,0xe6,0x41,0x306,0x309,0x83,0xe6,0x61,0x306,0x309,0x83,
+0xe6,0x41,0x306,0x303,0x83,0xe6,0x61,0x306,0x303,0x83,0xe6,0x41,0x323,0x306,0x83,0xe6,
+0x61,0x323,0x306,0x51e,0x82,0xdc,0x45,0x323,0x520,0x82,0xdc,0x65,0x323,0x82,0xe6,0x45,
+0x309,0x82,0xe6,0x65,0x309,0x82,0xe6,0x45,0x303,0x82,0xe6,0x65,0x303,0x83,0xe6,0x45,
+0x302,0x301,0x83,0xe6,0x65,0x302,0x301,0x83,0xe6,0x45,0x302,0x300,0x83,0xe6,0x65,0x302,
+0x300,0x83,0xe6,0x45,0x302,0x309,0x83,0xe6,0x65,0x302,0x309,0x83,0xe6,0x45,0x302,0x303,
+0x83,0xe6,0x65,0x302,0x303,0x83,0xe6,0x45,0x323,0x302,0x83,0xe6,0x65,0x323,0x302,0x82,
+0xe6,0x49,0x309,0x82,0xe6,0x69,0x309,0x82,0xdc,0x49,0x323,0x82,0xdc,0x69,0x323,0x532,
+0x82,0xdc,0x4f,0x323,0x534,0x82,0xdc,0x6f,0x323,0x82,0xe6,0x4f,0x309,0x82,0xe6,0x6f,
+0x309,0x83,0xe6,0x4f,0x302,0x301,0x83,0xe6,0x6f,0x302,0x301,0x83,0xe6,0x4f,0x302,0x300,
+0x83,0xe6,0x6f,0x302,0x300,0x83,0xe6,0x4f,0x302,0x309,0x83,0xe6,0x6f,0x302,0x309,0x83,
+0xe6,0x4f,0x302,0x303,0x83,0xe6,0x6f,0x302,0x303,0x83,0xe6,0x4f,0x323,0x302,0x83,0xe6,
+0x6f,0x323,0x302,0x83,0xe6,0x4f,0x31b,0x301,0x83,0xe6,0x6f,0x31b,0x301,0x83,0xe6,0x4f,
+0x31b,0x300,0x83,0xe6,0x6f,0x31b,0x300,0x83,0xe6,0x4f,0x31b,0x309,0x83,0xe6,0x6f,0x31b,
+0x309,0x83,0xe6,0x4f,0x31b,0x303,0x83,0xe6,0x6f,0x31b,0x303,0x83,0xdc,0x4f,0x31b,0x323,
+0x83,0xdc,0x6f,0x31b,0x323,0x82,0xdc,0x55,0x323,0x82,0xdc,0x75,0x323,0x82,0xe6,0x55,
+0x309,0x82,0xe6,0x75,0x309,0x83,0xe6,0x55,0x31b,0x301,0x83,0xe6,0x75,0x31b,0x301,0x83,
+0xe6,0x55,0x31b,0x300,0x83,0xe6,0x75,0x31b,0x300,0x83,0xe6,0x55,0x31b,0x309,0x83,0xe6,
+0x75,0x31b,0x309,0x83,0xe6,0x55,0x31b,0x303,0x83,0xe6,0x75,0x31b,0x303,0x83,0xdc,0x55,
+0x31b,0x323,0x83,0xdc,0x75,0x31b,0x323,0x82,0xe6,0x59,0x300,0x82,0xe6,0x79,0x300,0x82,
+0xdc,0x59,0x323,0x82,0xdc,0x79,0x323,0x82,0xe6,0x59,0x309,0x82,0xe6,0x79,0x309,0x82,
+0xe6,0x59,0x303,0x82,0xe6,0x79,0x303,0x55e,0x82,0xe6,0x3b1,0x313,0x566,0x82,0xe6,0x3b1,
+0x314,0x608,0x83,0xe6,0x3b1,0x313,0x300,0x60a,0x83,0xe6,0x3b1,0x314,0x300,0x60c,0x83,0xe6,
+0x3b1,0x313,0x301,0x60e,0x83,0xe6,0x3b1,0x314,0x301,0x610,0x83,0xe6,0x3b1,0x313,0x342,0x612,
+0x83,0xe6,0x3b1,0x314,0x342,0x56e,0x82,0xe6,0x391,0x313,0x576,0x82,0xe6,0x391,0x314,0x614,
+0x83,0xe6,0x391,0x313,0x300,0x616,0x83,0xe6,0x391,0x314,0x300,0x618,0x83,0xe6,0x391,0x313,
+0x301,0x61a,0x83,0xe6,0x391,0x314,0x301,0x61c,0x83,0xe6,0x391,0x313,0x342,0x61e,0x83,0xe6,
+0x391,0x314,0x342,0x57e,0x82,0xe6,0x3b5,0x313,0x582,0x82,0xe6,0x3b5,0x314,0x83,0xe6,0x3b5,
+0x313,0x300,0x83,0xe6,0x3b5,0x314,0x300,0x83,0xe6,0x3b5,0x313,0x301,0x83,0xe6,0x3b5,0x314,
+0x301,0x586,0x82,0xe6,0x395,0x313,0x58a,0x82,0xe6,0x395,0x314,0x83,0xe6,0x395,0x313,0x300,
+0x83,0xe6,0x395,0x314,0x300,0x83,0xe6,0x395,0x313,0x301,0x83,0xe6,0x395,0x314,0x301,0x58e,
+0x82,0xe6,0x3b7,0x313,0x596,0x82,0xe6,0x3b7,0x314,0x620,0x83,0xe6,0x3b7,0x313,0x300,0x622,
+0x83,0xe6,0x3b7,0x314,0x300,0x624,0x83,0xe6,0x3b7,0x313,0x301,0x626,0x83,0xe6,0x3b7,0x314,
+0x301,0x628,0x83,0xe6,0x3b7,0x313,0x342,0x62a,0x83,0xe6,0x3b7,0x314,0x342,0x59e,0x82,0xe6,
+0x397,0x313,0x5a6,0x82,0xe6,0x397,0x314,0x62c,0x83,0xe6,0x397,0x313,0x300,0x62e,0x83,0xe6,
+0x397,0x314,0x300,0x630,0x83,0xe6,0x397,0x313,0x301,0x632,0x83,0xe6,0x397,0x314,0x301,0x634,
+0x83,0xe6,0x397,0x313,0x342,0x636,0x83,0xe6,0x397,0x314,0x342,0x5ae,0x82,0xe6,0x3b9,0x313,
+0x5b4,0x82,0xe6,0x3b9,0x314,0x83,0xe6,0x3b9,0x313,0x300,0x83,0xe6,0x3b9,0x314,0x300,0x83,
+0xe6,0x3b9,0x313,0x301,0x83,0xe6,0x3b9,0x314,0x301,0x83,0xe6,0x3b9,0x313,0x342,0x83,0xe6,
+0x3b9,0x314,0x342,0x5ba,0x82,0xe6,0x399,0x313,0x5c0,0x82,0xe6,0x399,0x314,0x83,0xe6,0x399,
+0x313,0x300,0x83,0xe6,0x399,0x314,0x300,0x83,0xe6,0x399,0x313,0x301,0x83,0xe6,0x399,0x314,
+0x301,0x83,0xe6,0x399,0x313,0x342,0x83,0xe6,0x399,0x314,0x342,0x5c6,0x82,0xe6,0x3bf,0x313,
+0x5ca,0x82,0xe6,0x3bf,0x314,0x83,0xe6,0x3bf,0x313,0x300,0x83,0xe6,0x3bf,0x314,0x300,0x83,
+0xe6,0x3bf,0x313,0x301,0x83,0xe6,0x3bf,0x314,0x301,0x5ce,0x82,0xe6,0x39f,0x313,0x5d2,0x82,
+0xe6,0x39f,0x314,0x83,0xe6,0x39f,0x313,0x300,0x83,0xe6,0x39f,0x314,0x300,0x83,0xe6,0x39f,
+0x313,0x301,0x83,0xe6,0x39f,0x314,0x301,0x5d6,0x82,0xe6,0x3c5,0x313,0x5dc,0x82,0xe6,0x3c5,
+0x314,0x83,0xe6,0x3c5,0x313,0x300,0x83,0xe6,0x3c5,0x314,0x300,0x83,0xe6,0x3c5,0x313,0x301,
+0x83,0xe6,0x3c5,0x314,0x301,0x83,0xe6,0x3c5,0x313,0x342,0x83,0xe6,0x3c5,0x314,0x342,0x5e2,
+0x82,0xe6,0x3a5,0x314,0x83,0xe6,0x3a5,0x314,0x300,0x83,0xe6,0x3a5,0x314,0x301,0x83,0xe6,
+0x3a5,0x314,0x342,0x5e8,0x82,0xe6,0x3c9,0x313,0x5f0,0x82,0xe6,0x3c9,0x314,0x638,0x83,0xe6,
+0x3c9,0x313,0x300,0x63a,0x83,0xe6,0x3c9,0x314,0x300,0x63c,0x83,0xe6,0x3c9,0x313,0x301,0x63e,
+0x83,0xe6,0x3c9,0x314,0x301,0x640,0x83,0xe6,0x3c9,0x313,0x342,0x642,0x83,0xe6,0x3c9,0x314,
+0x342,0x5f8,0x82,0xe6,0x3a9,0x313,0x600,0x82,0xe6,0x3a9,0x314,0x644,0x83,0xe6,0x3a9,0x313,
+0x300,0x646,0x83,0xe6,0x3a9,0x314,0x300,0x648,0x83,0xe6,0x3a9,0x313,0x301,0x64a,0x83,0xe6,
+0x3a9,0x314,0x301,0x64c,0x83,0xe6,0x3a9,0x313,0x342,0x64e,0x83,0xe6,0x3a9,0x314,0x342,0x650,
+0x82,0xe6,0x3b1,0x300,0x82,0xe6,0x3b5,0x300,0x656,0x82,0xe6,0x3b7,0x300,0x82,0xe6,0x3b9,
+0x300,0x82,0xe6,0x3bf,0x300,0x82,0xe6,0x3c5,0x300,0x66e,0x82,0xe6,0x3c9,0x300,0x83,0xf0,
+0x3b1,0x313,0x345,0x83,0xf0,0x3b1,0x314,0x345,0x84,0xf0,0x3b1,0x313,0x300,0x345,0x84,0xf0,
+0x3b1,0x314,0x300,0x345,0x84,0xf0,0x3b1,0x313,0x301,0x345,0x84,0xf0,0x3b1,0x314,0x301,0x345,
+0x84,0xf0,0x3b1,0x313,0x342,0x345,0x84,0xf0,0x3b1,0x314,0x342,0x345,0x83,0xf0,0x391,0x313,
+0x345,0x83,0xf0,0x391,0x314,0x345,0x84,0xf0,0x391,0x313,0x300,0x345,0x84,0xf0,0x391,0x314,
+0x300,0x345,0x84,0xf0,0x391,0x313,0x301,0x345,0x84,0xf0,0x391,0x314,0x301,0x345,0x84,0xf0,
+0x391,0x313,0x342,0x345,0x84,0xf0,0x391,0x314,0x342,0x345,0x83,0xf0,0x3b7,0x313,0x345,0x83,
+0xf0,0x3b7,0x314,0x345,0x84,0xf0,0x3b7,0x313,0x300,0x345,0x84,0xf0,0x3b7,0x314,0x300,0x345,
+0x84,0xf0,0x3b7,0x313,0x301,0x345,0x84,0xf0,0x3b7,0x314,0x301,0x345,0x84,0xf0,0x3b7,0x313,
+0x342,0x345,0x84,0xf0,0x3b7,0x314,0x342,0x345,0x83,0xf0,0x397,0x313,0x345,0x83,0xf0,0x397,
+0x314,0x345,0x84,0xf0,0x397,0x313,0x300,0x345,0x84,0xf0,0x397,0x314,0x300,0x345,0x84,0xf0,
+0x397,0x313,0x301,0x345,0x84,0xf0,0x397,0x314,0x301,0x345,0x84,0xf0,0x397,0x313,0x342,0x345,
+0x84,0xf0,0x397,0x314,0x342,0x345,0x83,0xf0,0x3c9,0x313,0x345,0x83,0xf0,0x3c9,0x314,0x345,
+0x84,0xf0,0x3c9,0x313,0x300,0x345,0x84,0xf0,0x3c9,0x314,0x300,0x345,0x84,0xf0,0x3c9,0x313,
+0x301,0x345,0x84,0xf0,0x3c9,0x314,0x301,0x345,0x84,0xf0,0x3c9,0x313,0x342,0x345,0x84,0xf0,
+0x3c9,0x314,0x342,0x345,0x83,0xf0,0x3a9,0x313,0x345,0x83,0xf0,0x3a9,0x314,0x345,0x84,0xf0,
+0x3a9,0x313,0x300,0x345,0x84,0xf0,0x3a9,0x314,0x300,0x345,0x84,0xf0,0x3a9,0x313,0x301,0x345,
+0x84,0xf0,0x3a9,0x314,0x301,0x345,0x84,0xf0,0x3a9,0x313,0x342,0x345,0x84,0xf0,0x3a9,0x314,
+0x342,0x345,0x82,0xe6,0x3b1,0x306,0x82,0xe6,0x3b1,0x304,0x83,0xf0,0x3b1,0x300,0x345,0x82,
+0xf0,0x3b1,0x345,0x83,0xf0,0x3b1,0x301,0x345,0x654,0x82,0xe6,0x3b1,0x342,0x83,0xf0,0x3b1,
+0x342,0x345,0x82,0xe6,0x391,0x306,0x82,0xe6,0x391,0x304,0x82,0xe6,0x391,0x300,0x82,0xf0,
+0x391,0x345,0x8382,0xe6,0xa8,0x342,0xe6,0x20,0x308,0x342,0x83,0xf0,0x3b7,0x300,0x345,0x82,
+0xf0,0x3b7,0x345,0x83,0xf0,0x3b7,0x301,0x345,0x65a,0x82,0xe6,0x3b7,0x342,0x83,0xf0,0x3b7,
+0x342,0x345,0x82,0xe6,0x395,0x300,0x82,0xe6,0x397,0x300,0x82,0xf0,0x397,0x345,0x8382,0xe6,
+0x1fbf,0x300,0xe6,0x20,0x313,0x300,0x8382,0xe6,0x1fbf,0x301,0xe6,0x20,0x313,0x301,0x8382,0xe6,
+0x1fbf,0x342,0xe6,0x20,0x313,0x342,0x82,0xe6,0x3b9,0x306,0x82,0xe6,0x3b9,0x304,0x83,0xe6,
+0x3b9,0x308,0x300,0x82,0xe6,0x3b9,0x342,0x83,0xe6,0x3b9,0x308,0x342,0x82,0xe6,0x399,0x306,
+0x82,0xe6,0x399,0x304,0x82,0xe6,0x399,0x300,0x8382,0xe6,0x1ffe,0x300,0xe6,0x20,0x314,0x300,
+0x8382,0xe6,0x1ffe,0x301,0xe6,0x20,0x314,0x301,0x8382,0xe6,0x1ffe,0x342,0xe6,0x20,0x314,0x342,
+0x82,0xe6,0x3c5,0x306,0x82,0xe6,0x3c5,0x304,0x83,0xe6,0x3c5,0x308,0x300,0x82,0xe6,0x3c1,
+0x313,0x82,0xe6,0x3c1,0x314,0x82,0xe6,0x3c5,0x342,0x83,0xe6,0x3c5,0x308,0x342,0x82,0xe6,
+0x3a5,0x306,0x82,0xe6,0x3a5,0x304,0x82,0xe6,0x3a5,0x300,0x82,0xe6,0x3a1,0x314,0x8382,0xe6,
+0xa8,0x300,0xe6,0x20,0x308,0x300,0x83,0xf0,0x3c9,0x300,0x345,0x82,0xf0,0x3c9,0x345,0x83,
+0xf0,0x3c9,0x301,0x345,0x672,0x82,0xe6,0x3c9,0x342,0x83,0xf0,0x3c9,0x342,0x345,0x82,0xe6,
+0x39f,0x300,0x82,0xe6,0x3a9,0x300,0x82,0xf0,0x3a9,0x345,0x82,1,0x2190,0x338,0x82,1,
+0x2192,0x338,0x82,1,0x2194,0x338,0x82,1,0x21d0,0x338,0x82,1,0x21d4,0x338,0x82,1,
+0x21d2,0x338,0x82,1,0x2203,0x338,0x82,1,0x2208,0x338,0x82,1,0x220b,0x338,0x82,1,
+0x2223,0x338,0x82,1,0x2225,0x338,0x82,1,0x223c,0x338,0x82,1,0x2243,0x338,0x82,1,
+0x2245,0x338,0x82,1,0x2248,0x338,0x82,1,0x3d,0x338,0x82,1,0x2261,0x338,0x82,1,
+0x224d,0x338,0x82,1,0x3c,0x338,0x82,1,0x3e,0x338,0x82,1,0x2264,0x338,0x82,1,
+0x2265,0x338,0x82,1,0x2272,0x338,0x82,1,0x2273,0x338,0x82,1,0x2276,0x338,0x82,1,
+0x2277,0x338,0x82,1,0x227a,0x338,0x82,1,0x227b,0x338,0x82,1,0x2282,0x338,0x82,1,
+0x2283,0x338,0x82,1,0x2286,0x338,0x82,1,0x2287,0x338,0x82,1,0x22a2,0x338,0x82,1,
+0x22a8,0x338,0x82,1,0x22a9,0x338,0x82,1,0x22ab,0x338,0x82,1,0x227c,0x338,0x82,1,
+0x227d,0x338,0x82,1,0x2291,0x338,0x82,1,0x2292,0x338,0x82,1,0x22b2,0x338,0x82,1,
+0x22b3,0x338,0x82,1,0x22b4,0x338,0x82,1,0x22b5,0x338,0x82,8,0x304b,0x3099,0x82,8,
+0x304d,0x3099,0x82,8,0x304f,0x3099,0x82,8,0x3051,0x3099,0x82,8,0x3053,0x3099,0x82,8,
+0x3055,0x3099,0x82,8,0x3057,0x3099,0x82,8,0x3059,0x3099,0x82,8,0x305b,0x3099,0x82,8,
+0x305d,0x3099,0x82,8,0x305f,0x3099,0x82,8,0x3061,0x3099,0x82,8,0x3064,0x3099,0x82,8,
+0x3066,0x3099,0x82,8,0x3068,0x3099,0x82,8,0x306f,0x3099,0x82,8,0x306f,0x309a,0x82,8,
+0x3072,0x3099,0x82,8,0x3072,0x309a,0x82,8,0x3075,0x3099,0x82,8,0x3075,0x309a,0x82,8,
+0x3078,0x3099,0x82,8,0x3078,0x309a,0x82,8,0x307b,0x3099,0x82,8,0x307b,0x309a,0x82,8,
+0x3046,0x3099,0x82,8,0x309d,0x3099,0x82,8,0x30ab,0x3099,0x82,8,0x30ad,0x3099,0x82,8,
+0x30af,0x3099,0x82,8,0x30b1,0x3099,0x82,8,0x30b3,0x3099,0x82,8,0x30b5,0x3099,0x82,8,
+0x30b7,0x3099,0x82,8,0x30b9,0x3099,0x82,8,0x30bb,0x3099,0x82,8,0x30bd,0x3099,0x82,8,
+0x30bf,0x3099,0x82,8,0x30c1,0x3099,0x82,8,0x30c4,0x3099,0x82,8,0x30c6,0x3099,0x82,8,
+0x30c8,0x3099,0x82,8,0x30cf,0x3099,0x82,8,0x30cf,0x309a,0x82,8,0x30d2,0x3099,0x82,8,
+0x30d2,0x309a,0x82,8,0x30d5,0x3099,0x82,8,0x30d5,0x309a,0x82,8,0x30d8,0x3099,0x82,8,
+0x30d8,0x309a,0x82,8,0x30db,0x3099,0x82,8,0x30db,0x309a,0x82,8,0x30a6,0x3099,0x82,8,
+0x30ef,0x3099,0x82,8,0x30f0,0x3099,0x82,8,0x30f1,0x3099,0x82,8,0x30f2,0x3099,0x82,8,
+0x30fd,0x3099,0x7a6,0x7a7,0x7a8,0x7a9,0x7ad,0x7ae,0x7b0,0x7aa,0x7d4,0x7ab,0x7b2,0x7b1,0x7b4,0x7b5,
+0x7d5,0x7d6,0x7b3,0x7ce,0x7d3,0x7cd,0x7b6,0x7ac,0x7af,0x7d0,0x7d2,0x7d1,0x7cf,0x7d9,0x7d7,0x7d8,
+0x7b7,0x7b8,0x7b9,0x7ba,0x7bb,0x7bc,0x7be,0x7bd,0x7bf,0x7c1,0x7c0,0x7c2,0x7c5,0x7c3,0x7c4,0x7c6,
+0x7c7,0x7c8,0x7c9,0x7ca,0x7cb,0x7cc,0x7da,0x7db,0x100,0x20,0x2fc,0x8200,0xe6,0x20,0x308,0x100,
+0x61,0x8200,0xe6,0x20,0x304,0x100,0x32,0x100,0x33,0x8200,0xe6,0x20,0x301,0x100,0x3bc,0x8200,
+0xca,0x20,0x327,0x100,0x31,0x100,0x6f,0x300,0x31,0x2044,0x34,0x300,0x31,0x2044,0x32,0x300,
+0x33,0x2044,0x34,0x200,0x49,0x4a,0x200,0x69,0x6a,0x200,0x4c,0xb7,0x200,0x6c,0xb7,0x200,
+0x2bc,0x6e,0x4e4,0x100,0x73,0x8300,0xe6,0x44,0x5a,0x30c,0x8300,0xe6,0x44,0x7a,0x30c,0x8300,
+0xe6,0x64,0x7a,0x30c,0x200,0x4c,0x4a,0x200,0x4c,0x6a,0x200,0x6c,0x6a,0x200,0x4e,0x4a,
+0x200,0x4e,0x6a,0x200,0x6e,0x6a,0x200,0x44,0x5a,0x200,0x44,0x7a,0x200,0x64,0x7a,0x100,
+0x68,0x100,0x266,0x100,0x6a,0x100,0x72,0x100,0x279,0x100,0x27b,0x100,0x281,0x100,0x77,0x100,
+0x79,0x8200,0xe6,0x20,0x306,0x8200,0xe6,0x20,0x307,0x8200,0xe6,0x20,0x30a,0x8200,0xca,0x20,
+0x328,0x8200,0xe6,0x20,0x303,0x8200,0xe6,0x20,0x30b,0x100,0x263,0x100,0x6c,0x100,0x73,0x100,
+0x78,0x100,0x295,0x8200,0xe6,0x20,0x301,0x100,0x3b2,0x100,0x3b8,0x100,0x3c6,0x100,0x3c0,0x100,
+0x3ba,0x100,0x3c1,0x100,0x398,0x100,0x3b5,0x200,0x565,0x582,0x200,0x627,0x674,0x200,0x648,0x674,
+0x200,0x6c7,0x674,0x200,0x64a,0x674,0x200,0xe4d,0xe32,0x200,0xecd,0xeb2,0x200,0xeab,0xe99,0x200,
+0xeab,0xea1,0x100,0xf0b,0x8300,0x82,0xfb2,0xf71,0xf80,0x8300,0x82,0xfb3,0xf71,0xf80,0x100,0x10dc,
+0x100,0x61,0x100,0x250,0x100,0x251,0x100,0x1d02,0x100,0x62,0x100,0x64,0x100,0x65,0x100,0x259,
+0x100,0x25b,0x100,0x25c,0x100,0x67,0x100,0x6b,0x100,0x6d,0x100,0x14b,0x100,0x6f,0x100,0x254,
+0x100,0x1d16,0x100,0x1d17,0x100,0x70,0x100,0x74,0x100,0x75,0x100,0x1d1d,0x100,0x26f,0x100,0x76,
+0x100,0x1d25,0x100,0x3b2,0x100,0x3b3,0x100,0x3b4,0x100,0x3c6,0x100,0x3c7,0x100,0x69,0x100,0x72,
+0x100,0x75,0x100,0x76,0x100,0x3b2,0x100,0x3b3,0x100,0x3c1,0x100,0x3c6,0x100,0x3c7,0x100,0x43d,
+0x100,0x252,0x100,0x63,0x100,0x255,0x100,0xf0,0x100,0x25c,0x100,0x66,0x100,0x25f,0x100,0x261,
+0x100,0x265,0x100,0x268,0x100,0x269,0x100,0x26a,0x100,0x1d7b,0x100,0x29d,0x100,0x26d,0x100,0x1d85,
+0x100,0x29f,0x100,0x271,0x100,0x270,0x100,0x272,0x100,0x273,0x100,0x274,0x100,0x275,0x100,0x278,
+0x100,0x282,0x100,0x283,0x100,0x1ab,0x100,0x289,0x100,0x28a,0x100,0x1d1c,0x100,0x28b,0x100,0x28c,
+0x100,0x7a,0x100,0x290,0x100,0x291,0x100,0x292,0x100,0x3b8,0x200,0x61,0x2be,0x8200,0xe6,0x20,
+0x313,0x65c,0x8200,0xe6,0x20,0x313,0x8200,0xe6,0x20,0x342,0x662,0x8200,0xe6,0x20,0x314,0x100,
+0x20,0x100,0x20,0x100,0x20,0x100,0x20,0x100,0x20,0x100,0x20,0x100,0x20,0x100,0x20,0x100,
+0x20,0x100,0x2010,0x8200,0xdc,0x20,0x333,0x100,0x2e,0x200,0x2e,0x2e,0x300,0x2e,0x2e,0x2e,
+0x100,0x20,0x200,0x2032,0x2032,0x300,0x2032,0x2032,0x2032,0x200,0x2035,0x2035,0x300,0x2035,0x2035,0x2035,
+0x200,0x21,0x21,0x8200,0xe6,0x20,0x305,0x200,0x3f,0x3f,0x200,0x3f,0x21,0x200,0x21,0x3f,
+0x400,0x2032,0x2032,0x2032,0x2032,0x100,0x20,0x100,0x30,0x100,0x69,0x100,0x34,0x100,0x35,0x100,
+0x36,0x100,0x37,0x100,0x38,0x100,0x39,0x100,0x2b,0x100,0x2212,0x100,0x3d,0x100,0x28,0x100,
+0x29,0x100,0x6e,0x100,0x30,0x100,0x31,0x100,0x32,0x100,0x33,0x100,0x34,0x100,0x35,0x100,
+0x36,0x100,0x37,0x100,0x38,0x100,0x39,0x100,0x2b,0x100,0x2212,0x100,0x3d,0x100,0x28,0x100,
+0x29,0x100,0x61,0x100,0x65,0x100,0x6f,0x100,0x78,0x100,0x259,0x300,0x61,0x2f,0x63,0x300,
+0x61,0x2f,0x73,0x300,0x63,0x2f,0x6f,0x300,0x63,0x2f,0x75,0x100,0x67,0x100,0x68,0x100,
+0x127,0x100,0x6c,0x100,0x65,0x100,0x6f,0x100,0x5d0,0x100,0x5d1,0x100,0x5d2,0x100,0x5d3,0x100,
+0x69,0x100,0x3c0,0x100,0x3b3,0x100,0x2211,0x100,0x64,0x100,0x65,0x100,0x69,0x100,0x6a,0x300,
+0x31,0x2044,0x33,0x300,0x32,0x2044,0x33,0x300,0x31,0x2044,0x35,0x300,0x32,0x2044,0x35,0x300,
+0x33,0x2044,0x35,0x300,0x34,0x2044,0x35,0x300,0x31,0x2044,0x36,0x300,0x35,0x2044,0x36,0x300,
+0x31,0x2044,0x38,0x300,0x33,0x2044,0x38,0x300,0x35,0x2044,0x38,0x300,0x37,0x2044,0x38,0x200,
+0x31,0x2044,0x100,0x49,0x200,0x49,0x49,0x300,0x49,0x49,0x49,0x200,0x49,0x56,0x100,0x56,
+0x200,0x56,0x49,0x300,0x56,0x49,0x49,0x400,0x56,0x49,0x49,0x49,0x200,0x49,0x58,0x100,
+0x58,0x200,0x58,0x49,0x300,0x58,0x49,0x49,0x100,0x4c,0x100,0x43,0x100,0x44,0x100,0x4d,
+0x100,0x69,0x200,0x69,0x69,0x300,0x69,0x69,0x69,0x200,0x69,0x76,0x100,0x76,0x200,0x76,
+0x69,0x300,0x76,0x69,0x69,0x400,0x76,0x69,0x69,0x69,0x200,0x69,0x78,0x100,0x78,0x200,
+0x78,0x69,0x300,0x78,0x69,0x69,0x100,0x6c,0x100,0x63,0x100,0x64,0x100,0x6d,0x200,0x222b,
+0x222b,0x300,0x222b,0x222b,0x222b,0x200,0x222e,0x222e,0x300,0x222e,0x222e,0x222e,0x100,0x31,0x100,0x32,
+0x100,0x33,0x100,0x34,0x100,0x35,0x100,0x36,0x100,0x37,0x100,0x38,0x100,0x39,0x200,0x31,
+0x30,0x200,0x31,0x31,0x200,0x31,0x32,0x200,0x31,0x33,0x200,0x31,0x34,0x200,0x31,0x35,
+0x200,0x31,0x36,0x200,0x31,0x37,0x200,0x31,0x38,0x200,0x31,0x39,0x200,0x32,0x30,0x300,
+0x28,0x31,0x29,0x300,0x28,0x32,0x29,0x300,0x28,0x33,0x29,0x300,0x28,0x34,0x29,0x300,
+0x28,0x35,0x29,0x300,0x28,0x36,0x29,0x300,0x28,0x37,0x29,0x300,0x28,0x38,0x29,0x300,
+0x28,0x39,0x29,0x400,0x28,0x31,0x30,0x29,0x400,0x28,0x31,0x31,0x29,0x400,0x28,0x31,
+0x32,0x29,0x400,0x28,0x31,0x33,0x29,0x400,0x28,0x31,0x34,0x29,0x400,0x28,0x31,0x35,
+0x29,0x400,0x28,0x31,0x36,0x29,0x400,0x28,0x31,0x37,0x29,0x400,0x28,0x31,0x38,0x29,
+0x400,0x28,0x31,0x39,0x29,0x400,0x28,0x32,0x30,0x29,0x200,0x31,0x2e,0x200,0x32,0x2e,
+0x200,0x33,0x2e,0x200,0x34,0x2e,0x200,0x35,0x2e,0x200,0x36,0x2e,0x200,0x37,0x2e,0x200,
+0x38,0x2e,0x200,0x39,0x2e,0x300,0x31,0x30,0x2e,0x300,0x31,0x31,0x2e,0x300,0x31,0x32,
+0x2e,0x300,0x31,0x33,0x2e,0x300,0x31,0x34,0x2e,0x300,0x31,0x35,0x2e,0x300,0x31,0x36,
+0x2e,0x300,0x31,0x37,0x2e,0x300,0x31,0x38,0x2e,0x300,0x31,0x39,0x2e,0x300,0x32,0x30,
+0x2e,0x300,0x28,0x61,0x29,0x300,0x28,0x62,0x29,0x300,0x28,0x63,0x29,0x300,0x28,0x64,
+0x29,0x300,0x28,0x65,0x29,0x300,0x28,0x66,0x29,0x300,0x28,0x67,0x29,0x300,0x28,0x68,
+0x29,0x300,0x28,0x69,0x29,0x300,0x28,0x6a,0x29,0x300,0x28,0x6b,0x29,0x300,0x28,0x6c,
+0x29,0x300,0x28,0x6d,0x29,0x300,0x28,0x6e,0x29,0x300,0x28,0x6f,0x29,0x300,0x28,0x70,
+0x29,0x300,0x28,0x71,0x29,0x300,0x28,0x72,0x29,0x300,0x28,0x73,0x29,0x300,0x28,0x74,
+0x29,0x300,0x28,0x75,0x29,0x300,0x28,0x76,0x29,0x300,0x28,0x77,0x29,0x300,0x28,0x78,
+0x29,0x300,0x28,0x79,0x29,0x300,0x28,0x7a,0x29,0x100,0x41,0x100,0x42,0x100,0x43,0x100,
+0x44,0x100,0x45,0x100,0x46,0x100,0x47,0x100,0x48,0x100,0x49,0x100,0x4a,0x100,0x4b,0x100,
+0x4c,0x100,0x4d,0x100,0x4e,0x100,0x4f,0x100,0x50,0x100,0x51,0x100,0x52,0x100,0x53,0x100,
+0x54,0x100,0x55,0x100,0x56,0x100,0x57,0x100,0x58,0x100,0x59,0x100,0x5a,0x100,0x61,0x100,
+0x62,0x100,0x63,0x100,0x64,0x100,0x65,0x100,0x66,0x100,0x67,0x100,0x68,0x100,0x69,0x100,
+0x6a,0x100,0x6b,0x100,0x6c,0x100,0x6d,0x100,0x6e,0x100,0x6f,0x100,0x70,0x100,0x71,0x100,
+0x72,0x100,0x73,0x100,0x74,0x100,0x75,0x100,0x76,0x100,0x77,0x100,0x78,0x100,0x79,0x100,
+0x7a,0x100,0x30,0x400,0x222b,0x222b,0x222b,0x222b,0x300,0x3a,0x3a,0x3d,0x200,0x3d,0x3d,0x300,
+0x3d,0x3d,0x3d,0x100,0x6a,0x100,0x2d61,0x100,0x6bcd,0x100,0x9f9f,0x100,0x4e00,0x100,0x4e28,0x100,
+0x4e36,0x100,0x4e3f,0x100,0x4e59,0x100,0x4e85,0x100,0x4e8c,0x100,0x4ea0,0x100,0x4eba,0x100,0x513f,0x100,
+0x5165,0x100,0x516b,0x100,0x5182,0x100,0x5196,0x100,0x51ab,0x100,0x51e0,0x100,0x51f5,0x100,0x5200,0x100,
+0x529b,0x100,0x52f9,0x100,0x5315,0x100,0x531a,0x100,0x5338,0x100,0x5341,0x100,0x535c,0x100,0x5369,0x100,
+0x5382,0x100,0x53b6,0x100,0x53c8,0x100,0x53e3,0x100,0x56d7,0x100,0x571f,0x100,0x58eb,0x100,0x5902,0x100,
+0x590a,0x100,0x5915,0x100,0x5927,0x100,0x5973,0x100,0x5b50,0x100,0x5b80,0x100,0x5bf8,0x100,0x5c0f,0x100,
+0x5c22,0x100,0x5c38,0x100,0x5c6e,0x100,0x5c71,0x100,0x5ddb,0x100,0x5de5,0x100,0x5df1,0x100,0x5dfe,0x100,
+0x5e72,0x100,0x5e7a,0x100,0x5e7f,0x100,0x5ef4,0x100,0x5efe,0x100,0x5f0b,0x100,0x5f13,0x100,0x5f50,0x100,
+0x5f61,0x100,0x5f73,0x100,0x5fc3,0x100,0x6208,0x100,0x6236,0x100,0x624b,0x100,0x652f,0x100,0x6534,0x100,
+0x6587,0x100,0x6597,0x100,0x65a4,0x100,0x65b9,0x100,0x65e0,0x100,0x65e5,0x100,0x66f0,0x100,0x6708,0x100,
+0x6728,0x100,0x6b20,0x100,0x6b62,0x100,0x6b79,0x100,0x6bb3,0x100,0x6bcb,0x100,0x6bd4,0x100,0x6bdb,0x100,
+0x6c0f,0x100,0x6c14,0x100,0x6c34,0x100,0x706b,0x100,0x722a,0x100,0x7236,0x100,0x723b,0x100,0x723f,0x100,
+0x7247,0x100,0x7259,0x100,0x725b,0x100,0x72ac,0x100,0x7384,0x100,0x7389,0x100,0x74dc,0x100,0x74e6,0x100,
+0x7518,0x100,0x751f,0x100,0x7528,0x100,0x7530,0x100,0x758b,0x100,0x7592,0x100,0x7676,0x100,0x767d,0x100,
+0x76ae,0x100,0x76bf,0x100,0x76ee,0x100,0x77db,0x100,0x77e2,0x100,0x77f3,0x100,0x793a,0x100,0x79b8,0x100,
+0x79be,0x100,0x7a74,0x100,0x7acb,0x100,0x7af9,0x100,0x7c73,0x100,0x7cf8,0x100,0x7f36,0x100,0x7f51,0x100,
+0x7f8a,0x100,0x7fbd,0x100,0x8001,0x100,0x800c,0x100,0x8012,0x100,0x8033,0x100,0x807f,0x100,0x8089,0x100,
+0x81e3,0x100,0x81ea,0x100,0x81f3,0x100,0x81fc,0x100,0x820c,0x100,0x821b,0x100,0x821f,0x100,0x826e,0x100,
+0x8272,0x100,0x8278,0x100,0x864d,0x100,0x866b,0x100,0x8840,0x100,0x884c,0x100,0x8863,0x100,0x897e,0x100,
+0x898b,0x100,0x89d2,0x100,0x8a00,0x100,0x8c37,0x100,0x8c46,0x100,0x8c55,0x100,0x8c78,0x100,0x8c9d,0x100,
+0x8d64,0x100,0x8d70,0x100,0x8db3,0x100,0x8eab,0x100,0x8eca,0x100,0x8f9b,0x100,0x8fb0,0x100,0x8fb5,0x100,
+0x9091,0x100,0x9149,0x100,0x91c6,0x100,0x91cc,0x100,0x91d1,0x100,0x9577,0x100,0x9580,0x100,0x961c,0x100,
+0x96b6,0x100,0x96b9,0x100,0x96e8,0x100,0x9751,0x100,0x975e,0x100,0x9762,0x100,0x9769,0x100,0x97cb,0x100,
+0x97ed,0x100,0x97f3,0x100,0x9801,0x100,0x98a8,0x100,0x98db,0x100,0x98df,0x100,0x9996,0x100,0x9999,0x100,
+0x99ac,0x100,0x9aa8,0x100,0x9ad8,0x100,0x9adf,0x100,0x9b25,0x100,0x9b2f,0x100,0x9b32,0x100,0x9b3c,0x100,
+0x9b5a,0x100,0x9ce5,0x100,0x9e75,0x100,0x9e7f,0x100,0x9ea5,0x100,0x9ebb,0x100,0x9ec3,0x100,0x9ecd,0x100,
+0x9ed1,0x100,0x9ef9,0x100,0x9efd,0x100,0x9f0e,0x100,0x9f13,0x100,0x9f20,0x100,0x9f3b,0x100,0x9f4a,0x100,
+0x9f52,0x100,0x9f8d,0x100,0x9f9c,0x100,0x9fa0,0x100,0x20,0x100,0x3012,0x100,0x5341,0x100,0x5344,0x100,
+0x5345,0x8200,8,0x20,0x3099,0x8200,8,0x20,0x309a,0x200,0x3088,0x308a,0x200,0x30b3,0x30c8,0x100,
+0x1100,0x100,0x1101,0x100,0x11aa,0x100,0x1102,0x100,0x11ac,0x100,0x11ad,0x100,0x1103,0x100,0x1104,0x100,
+0x1105,0x100,0x11b0,0x100,0x11b1,0x100,0x11b2,0x100,0x11b3,0x100,0x11b4,0x100,0x11b5,0x100,0x111a,0x100,
+0x1106,0x100,0x1107,0x100,0x1108,0x100,0x1121,0x100,0x1109,0x100,0x110a,0x100,0x110b,0x100,0x110c,0x100,
+0x110d,0x100,0x110e,0x100,0x110f,0x100,0x1110,0x100,0x1111,0x100,0x1112,0x100,0x1161,0x100,0x1162,0x100,
+0x1163,0x100,0x1164,0x100,0x1165,0x100,0x1166,0x100,0x1167,0x100,0x1168,0x100,0x1169,0x100,0x116a,0x100,
+0x116b,0x100,0x116c,0x100,0x116d,0x100,0x116e,0x100,0x116f,0x100,0x1170,0x100,0x1171,0x100,0x1172,0x100,
+0x1173,0x100,0x1174,0x100,0x1175,0x100,0x1160,0x100,0x1114,0x100,0x1115,0x100,0x11c7,0x100,0x11c8,0x100,
+0x11cc,0x100,0x11ce,0x100,0x11d3,0x100,0x11d7,0x100,0x11d9,0x100,0x111c,0x100,0x11dd,0x100,0x11df,0x100,
+0x111d,0x100,0x111e,0x100,0x1120,0x100,0x1122,0x100,0x1123,0x100,0x1127,0x100,0x1129,0x100,0x112b,0x100,
+0x112c,0x100,0x112d,0x100,0x112e,0x100,0x112f,0x100,0x1132,0x100,0x1136,0x100,0x1140,0x100,0x1147,0x100,
+0x114c,0x100,0x11f1,0x100,0x11f2,0x100,0x1157,0x100,0x1158,0x100,0x1159,0x100,0x1184,0x100,0x1185,0x100,
+0x1188,0x100,0x1191,0x100,0x1192,0x100,0x1194,0x100,0x119e,0x100,0x11a1,0x100,0x4e00,0x100,0x4e8c,0x100,
+0x4e09,0x100,0x56db,0x100,0x4e0a,0x100,0x4e2d,0x100,0x4e0b,0x100,0x7532,0x100,0x4e59,0x100,0x4e19,0x100,
+0x4e01,0x100,0x5929,0x100,0x5730,0x100,0x4eba,0x300,0x28,0x1100,0x29,0x300,0x28,0x1102,0x29,0x300,
+0x28,0x1103,0x29,0x300,0x28,0x1105,0x29,0x300,0x28,0x1106,0x29,0x300,0x28,0x1107,0x29,0x300,
+0x28,0x1109,0x29,0x300,0x28,0x110b,0x29,0x300,0x28,0x110c,0x29,0x300,0x28,0x110e,0x29,0x300,
+0x28,0x110f,0x29,0x300,0x28,0x1110,0x29,0x300,0x28,0x1111,0x29,0x300,0x28,0x1112,0x29,0x400,
+0x28,0x1100,0x1161,0x29,0x400,0x28,0x1102,0x1161,0x29,0x400,0x28,0x1103,0x1161,0x29,0x400,0x28,
+0x1105,0x1161,0x29,0x400,0x28,0x1106,0x1161,0x29,0x400,0x28,0x1107,0x1161,0x29,0x400,0x28,0x1109,
+0x1161,0x29,0x400,0x28,0x110b,0x1161,0x29,0x400,0x28,0x110c,0x1161,0x29,0x400,0x28,0x110e,0x1161,
+0x29,0x400,0x28,0x110f,0x1161,0x29,0x400,0x28,0x1110,0x1161,0x29,0x400,0x28,0x1111,0x1161,0x29,
+0x400,0x28,0x1112,0x1161,0x29,0x400,0x28,0x110c,0x116e,0x29,0x700,0x28,0x110b,0x1169,0x110c,0x1165,
+0x11ab,0x29,0x600,0x28,0x110b,0x1169,0x1112,0x116e,0x29,0x300,0x28,0x4e00,0x29,0x300,0x28,0x4e8c,
+0x29,0x300,0x28,0x4e09,0x29,0x300,0x28,0x56db,0x29,0x300,0x28,0x4e94,0x29,0x300,0x28,0x516d,
+0x29,0x300,0x28,0x4e03,0x29,0x300,0x28,0x516b,0x29,0x300,0x28,0x4e5d,0x29,0x300,0x28,0x5341,
+0x29,0x300,0x28,0x6708,0x29,0x300,0x28,0x706b,0x29,0x300,0x28,0x6c34,0x29,0x300,0x28,0x6728,
+0x29,0x300,0x28,0x91d1,0x29,0x300,0x28,0x571f,0x29,0x300,0x28,0x65e5,0x29,0x300,0x28,0x682a,
+0x29,0x300,0x28,0x6709,0x29,0x300,0x28,0x793e,0x29,0x300,0x28,0x540d,0x29,0x300,0x28,0x7279,
+0x29,0x300,0x28,0x8ca1,0x29,0x300,0x28,0x795d,0x29,0x300,0x28,0x52b4,0x29,0x300,0x28,0x4ee3,
+0x29,0x300,0x28,0x547c,0x29,0x300,0x28,0x5b66,0x29,0x300,0x28,0x76e3,0x29,0x300,0x28,0x4f01,
+0x29,0x300,0x28,0x8cc7,0x29,0x300,0x28,0x5354,0x29,0x300,0x28,0x796d,0x29,0x300,0x28,0x4f11,
+0x29,0x300,0x28,0x81ea,0x29,0x300,0x28,0x81f3,0x29,0x200,0x32,0x31,0x200,0x32,0x32,0x200,
+0x32,0x33,0x200,0x32,0x34,0x200,0x32,0x35,0x200,0x32,0x36,0x200,0x32,0x37,0x200,0x32,
+0x38,0x200,0x32,0x39,0x200,0x33,0x30,0x200,0x33,0x31,0x200,0x33,0x32,0x200,0x33,0x33,
+0x200,0x33,0x34,0x200,0x33,0x35,0x100,0x1100,0x100,0x1102,0x100,0x1103,0x100,0x1105,0x100,0x1106,
+0x100,0x1107,0x100,0x1109,0x100,0x110b,0x100,0x110c,0x100,0x110e,0x100,0x110f,0x100,0x1110,0x100,0x1111,
+0x100,0x1112,0x200,0x1100,0x1161,0x200,0x1102,0x1161,0x200,0x1103,0x1161,0x200,0x1105,0x1161,0x200,0x1106,
+0x1161,0x200,0x1107,0x1161,0x200,0x1109,0x1161,0x200,0x110b,0x1161,0x200,0x110c,0x1161,0x200,0x110e,0x1161,
+0x200,0x110f,0x1161,0x200,0x1110,0x1161,0x200,0x1111,0x1161,0x200,0x1112,0x1161,0x500,0x110e,0x1161,0x11b7,
+0x1100,0x1169,0x400,0x110c,0x116e,0x110b,0x1174,0x200,0x110b,0x116e,0x100,0x4e00,0x100,0x4e8c,0x100,0x4e09,
+0x100,0x56db,0x100,0x4e94,0x100,0x516d,0x100,0x4e03,0x100,0x516b,0x100,0x4e5d,0x100,0x5341,0x100,0x6708,
+0x100,0x706b,0x100,0x6c34,0x100,0x6728,0x100,0x91d1,0x100,0x571f,0x100,0x65e5,0x100,0x682a,0x100,0x6709,
+0x100,0x793e,0x100,0x540d,0x100,0x7279,0x100,0x8ca1,0x100,0x795d,0x100,0x52b4,0x100,0x79d8,0x100,0x7537,
+0x100,0x5973,0x100,0x9069,0x100,0x512a,0x100,0x5370,0x100,0x6ce8,0x100,0x9805,0x100,0x4f11,0x100,0x5199,
+0x100,0x6b63,0x100,0x4e0a,0x100,0x4e2d,0x100,0x4e0b,0x100,0x5de6,0x100,0x53f3,0x100,0x533b,0x100,0x5b97,
+0x100,0x5b66,0x100,0x76e3,0x100,0x4f01,0x100,0x8cc7,0x100,0x5354,0x100,0x591c,0x200,0x33,0x36,0x200,
+0x33,0x37,0x200,0x33,0x38,0x200,0x33,0x39,0x200,0x34,0x30,0x200,0x34,0x31,0x200,0x34,
+0x32,0x200,0x34,0x33,0x200,0x34,0x34,0x200,0x34,0x35,0x200,0x34,0x36,0x200,0x34,0x37,
+0x200,0x34,0x38,0x200,0x34,0x39,0x200,0x35,0x30,0x200,0x31,0x6708,0x200,0x32,0x6708,0x200,
+0x33,0x6708,0x200,0x34,0x6708,0x200,0x35,0x6708,0x200,0x36,0x6708,0x200,0x37,0x6708,0x200,0x38,
+0x6708,0x200,0x39,0x6708,0x300,0x31,0x30,0x6708,0x300,0x31,0x31,0x6708,0x300,0x31,0x32,0x6708,
+0x300,0x65,0x72,0x67,0x100,0x30a2,0x100,0x30a4,0x100,0x30a6,0x100,0x30a8,0x100,0x30aa,0x100,0x30ab,
+0x100,0x30ad,0x100,0x30af,0x100,0x30b1,0x100,0x30b3,0x100,0x30b5,0x100,0x30b7,0x100,0x30b9,0x100,0x30bb,
+0x100,0x30bd,0x100,0x30bf,0x100,0x30c1,0x100,0x30c4,0x100,0x30c6,0x100,0x30c8,0x100,0x30ca,0x100,0x30cb,
+0x100,0x30cc,0x100,0x30cd,0x100,0x30ce,0x100,0x30cf,0x100,0x30d2,0x100,0x30d5,0x100,0x30d8,0x100,0x30db,
+0x100,0x30de,0x100,0x30df,0x100,0x30e0,0x100,0x30e1,0x100,0x30e2,0x100,0x30e4,0x100,0x30e6,0x100,0x30e8,
+0x100,0x30e9,0x100,0x30ea,0x100,0x30eb,0x100,0x30ec,0x100,0x30ed,0x100,0x30ef,0x100,0x30f0,0x100,0x30f1,
+0x100,0x30f2,0x500,0x30a2,0x30cf,0x309a,0x30fc,0x30c8,0x400,0x30a2,0x30eb,0x30d5,0x30a1,0x500,0x30a2,0x30f3,
+0x30d8,0x309a,0x30a2,0x300,0x30a2,0x30fc,0x30eb,0x8500,8,0x30a4,0x30cb,0x30f3,0x30af,0x3099,0x300,0x30a4,
+0x30f3,0x30c1,0x300,0x30a6,0x30a9,0x30f3,0x8600,8,0x30a8,0x30b9,0x30af,0x30fc,0x30c8,0x3099,0x400,0x30a8,
+0x30fc,0x30ab,0x30fc,0x300,0x30aa,0x30f3,0x30b9,0x300,0x30aa,0x30fc,0x30e0,0x300,0x30ab,0x30a4,0x30ea,0x400,
+0x30ab,0x30e9,0x30c3,0x30c8,0x400,0x30ab,0x30ed,0x30ea,0x30fc,0x400,0x30ab,0x3099,0x30ed,0x30f3,0x400,0x30ab,
+0x3099,0x30f3,0x30de,0x8400,8,0x30ad,0x3099,0x30ab,0x3099,0x400,0x30ad,0x3099,0x30cb,0x30fc,0x400,0x30ad,
+0x30e5,0x30ea,0x30fc,0x600,0x30ad,0x3099,0x30eb,0x30bf,0x3099,0x30fc,0x200,0x30ad,0x30ed,0x600,0x30ad,0x30ed,
+0x30af,0x3099,0x30e9,0x30e0,0x600,0x30ad,0x30ed,0x30e1,0x30fc,0x30c8,0x30eb,0x500,0x30ad,0x30ed,0x30ef,0x30c3,
+0x30c8,0x400,0x30af,0x3099,0x30e9,0x30e0,0x600,0x30af,0x3099,0x30e9,0x30e0,0x30c8,0x30f3,0x600,0x30af,0x30eb,
+0x30bb,0x3099,0x30a4,0x30ed,0x400,0x30af,0x30ed,0x30fc,0x30cd,0x300,0x30b1,0x30fc,0x30b9,0x300,0x30b3,0x30eb,
+0x30ca,0x8400,8,0x30b3,0x30fc,0x30db,0x309a,0x400,0x30b5,0x30a4,0x30af,0x30eb,0x500,0x30b5,0x30f3,0x30c1,
+0x30fc,0x30e0,0x8500,8,0x30b7,0x30ea,0x30f3,0x30af,0x3099,0x300,0x30bb,0x30f3,0x30c1,0x300,0x30bb,0x30f3,
+0x30c8,0x400,0x30bf,0x3099,0x30fc,0x30b9,0x300,0x30c6,0x3099,0x30b7,0x300,0x30c8,0x3099,0x30eb,0x200,0x30c8,
+0x30f3,0x200,0x30ca,0x30ce,0x300,0x30ce,0x30c3,0x30c8,0x300,0x30cf,0x30a4,0x30c4,0x600,0x30cf,0x309a,0x30fc,
+0x30bb,0x30f3,0x30c8,0x400,0x30cf,0x309a,0x30fc,0x30c4,0x500,0x30cf,0x3099,0x30fc,0x30ec,0x30eb,0x600,0x30d2,
+0x309a,0x30a2,0x30b9,0x30c8,0x30eb,0x400,0x30d2,0x309a,0x30af,0x30eb,0x300,0x30d2,0x309a,0x30b3,0x300,0x30d2,
+0x3099,0x30eb,0x8600,8,0x30d5,0x30a1,0x30e9,0x30c3,0x30c8,0x3099,0x400,0x30d5,0x30a3,0x30fc,0x30c8,0x600,
+0x30d5,0x3099,0x30c3,0x30b7,0x30a7,0x30eb,0x300,0x30d5,0x30e9,0x30f3,0x500,0x30d8,0x30af,0x30bf,0x30fc,0x30eb,
+0x300,0x30d8,0x309a,0x30bd,0x400,0x30d8,0x309a,0x30cb,0x30d2,0x300,0x30d8,0x30eb,0x30c4,0x400,0x30d8,0x309a,
+0x30f3,0x30b9,0x8500,8,0x30d8,0x309a,0x30fc,0x30b7,0x3099,0x400,0x30d8,0x3099,0x30fc,0x30bf,0x500,0x30db,
+0x309a,0x30a4,0x30f3,0x30c8,0x400,0x30db,0x3099,0x30eb,0x30c8,0x200,0x30db,0x30f3,0x8500,8,0x30db,0x309a,
+0x30f3,0x30c8,0x3099,0x300,0x30db,0x30fc,0x30eb,0x300,0x30db,0x30fc,0x30f3,0x400,0x30de,0x30a4,0x30af,0x30ed,
+0x300,0x30de,0x30a4,0x30eb,0x300,0x30de,0x30c3,0x30cf,0x300,0x30de,0x30eb,0x30af,0x500,0x30de,0x30f3,0x30b7,
+0x30e7,0x30f3,0x400,0x30df,0x30af,0x30ed,0x30f3,0x200,0x30df,0x30ea,0x600,0x30df,0x30ea,0x30cf,0x3099,0x30fc,
+0x30eb,0x8300,8,0x30e1,0x30ab,0x3099,0x500,0x30e1,0x30ab,0x3099,0x30c8,0x30f3,0x400,0x30e1,0x30fc,0x30c8,
+0x30eb,0x8400,8,0x30e4,0x30fc,0x30c8,0x3099,0x300,0x30e4,0x30fc,0x30eb,0x300,0x30e6,0x30a2,0x30f3,0x400,
+0x30ea,0x30c3,0x30c8,0x30eb,0x200,0x30ea,0x30e9,0x400,0x30eb,0x30d2,0x309a,0x30fc,0x500,0x30eb,0x30fc,0x30d5,
+0x3099,0x30eb,0x200,0x30ec,0x30e0,0x600,0x30ec,0x30f3,0x30c8,0x30b1,0x3099,0x30f3,0x300,0x30ef,0x30c3,0x30c8,
+0x200,0x30,0x70b9,0x200,0x31,0x70b9,0x200,0x32,0x70b9,0x200,0x33,0x70b9,0x200,0x34,0x70b9,0x200,
+0x35,0x70b9,0x200,0x36,0x70b9,0x200,0x37,0x70b9,0x200,0x38,0x70b9,0x200,0x39,0x70b9,0x300,0x31,
+0x30,0x70b9,0x300,0x31,0x31,0x70b9,0x300,0x31,0x32,0x70b9,0x300,0x31,0x33,0x70b9,0x300,0x31,
+0x34,0x70b9,0x300,0x31,0x35,0x70b9,0x300,0x31,0x36,0x70b9,0x300,0x31,0x37,0x70b9,0x300,0x31,
+0x38,0x70b9,0x300,0x31,0x39,0x70b9,0x300,0x32,0x30,0x70b9,0x300,0x32,0x31,0x70b9,0x300,0x32,
+0x32,0x70b9,0x300,0x32,0x33,0x70b9,0x300,0x32,0x34,0x70b9,0x200,0x64,0x61,0x300,0x62,0x61,
+0x72,0x200,0x70,0x63,0x200,0x64,0x6d,0x300,0x64,0x6d,0x32,0x300,0x64,0x6d,0x33,0x200,
+0x5e73,0x6210,0x200,0x662d,0x548c,0x200,0x5927,0x6b63,0x200,0x660e,0x6cbb,0x400,0x682a,0x5f0f,0x4f1a,0x793e,
+0x300,0x63,0x61,0x6c,0x400,0x6b,0x63,0x61,0x6c,0x200,0x3bc,0x67,0x200,0x6d,0x67,0x200,
+0x6b,0x67,0x200,0x3bc,0x6c,0x200,0x6d,0x6c,0x200,0x64,0x6c,0x200,0x6b,0x6c,0x200,0x66,
+0x6d,0x200,0x6e,0x6d,0x200,0x3bc,0x6d,0x200,0x6d,0x6d,0x200,0x63,0x6d,0x200,0x6b,0x6d,
+0x300,0x6d,0x6d,0x32,0x300,0x63,0x6d,0x32,0x200,0x6d,0x32,0x300,0x6b,0x6d,0x32,0x300,
+0x6d,0x6d,0x33,0x300,0x63,0x6d,0x33,0x200,0x6d,0x33,0x300,0x6b,0x6d,0x33,0x300,0x6d,
+0x2215,0x73,0x400,0x6d,0x2215,0x73,0x32,0x300,0x72,0x61,0x64,0x500,0x72,0x61,0x64,0x2215,
+0x73,0x600,0x72,0x61,0x64,0x2215,0x73,0x32,0x200,0x70,0x73,0x200,0x6e,0x73,0x200,0x3bc,
+0x73,0x200,0x6d,0x73,0x400,0x61,0x2e,0x6d,0x2e,0x200,0x63,0x63,0x200,0x63,0x64,0x200,
+0x68,0x61,0x200,0x69,0x6e,0x200,0x6b,0x74,0x200,0x6c,0x6d,0x200,0x6c,0x6e,0x300,0x6c,
+0x6f,0x67,0x200,0x6c,0x78,0x200,0x6d,0x62,0x300,0x6d,0x69,0x6c,0x300,0x6d,0x6f,0x6c,
+0x400,0x70,0x2e,0x6d,0x2e,0x200,0x73,0x72,0x200,0x31,0x65e5,0x200,0x32,0x65e5,0x200,0x33,
+0x65e5,0x200,0x34,0x65e5,0x200,0x35,0x65e5,0x200,0x36,0x65e5,0x200,0x37,0x65e5,0x200,0x38,0x65e5,
+0x200,0x39,0x65e5,0x300,0x31,0x30,0x65e5,0x300,0x31,0x31,0x65e5,0x300,0x31,0x32,0x65e5,0x300,
+0x31,0x33,0x65e5,0x300,0x31,0x34,0x65e5,0x300,0x31,0x35,0x65e5,0x300,0x31,0x36,0x65e5,0x300,
+0x31,0x37,0x65e5,0x300,0x31,0x38,0x65e5,0x300,0x31,0x39,0x65e5,0x300,0x32,0x30,0x65e5,0x300,
+0x32,0x31,0x65e5,0x300,0x32,0x32,0x65e5,0x300,0x32,0x33,0x65e5,0x300,0x32,0x34,0x65e5,0x300,
+0x32,0x35,0x65e5,0x300,0x32,0x36,0x65e5,0x300,0x32,0x37,0x65e5,0x300,0x32,0x38,0x65e5,0x300,
+0x32,0x39,0x65e5,0x300,0x33,0x30,0x65e5,0x300,0x33,0x31,0x65e5,0x300,0x67,0x61,0x6c,0x100,
+0xa76f,0x200,0x66,0x66,0x200,0x66,0x69,0x200,0x66,0x6c,0x300,0x66,0x66,0x69,0x300,0x66,
+0x66,0x6c,0x200,0x73,0x74,0x200,0x73,0x74,0x200,0x574,0x576,0x200,0x574,0x565,0x200,0x574,
+0x56b,0x200,0x57e,0x576,0x200,0x574,0x56d,0x100,0x5e2,0x100,0x5d0,0x100,0x5d3,0x100,0x5d4,0x100,
+0x5db,0x100,0x5dc,0x100,0x5dd,0x100,0x5e8,0x100,0x5ea,0x100,0x2b,0x200,0x5d0,0x5dc,0x100,0x671,
+0x100,0x671,0x100,0x67b,0x100,0x67b,0x100,0x67b,0x100,0x67b,0x100,0x67e,0x100,0x67e,0x100,0x67e,
+0x100,0x67e,0x100,0x680,0x100,0x680,0x100,0x680,0x100,0x680,0x100,0x67a,0x100,0x67a,0x100,0x67a,
+0x100,0x67a,0x100,0x67f,0x100,0x67f,0x100,0x67f,0x100,0x67f,0x100,0x679,0x100,0x679,0x100,0x679,
+0x100,0x679,0x100,0x6a4,0x100,0x6a4,0x100,0x6a4,0x100,0x6a4,0x100,0x6a6,0x100,0x6a6,0x100,0x6a6,
+0x100,0x6a6,0x100,0x684,0x100,0x684,0x100,0x684,0x100,0x684,0x100,0x683,0x100,0x683,0x100,0x683,
+0x100,0x683,0x100,0x686,0x100,0x686,0x100,0x686,0x100,0x686,0x100,0x687,0x100,0x687,0x100,0x687,
+0x100,0x687,0x100,0x68d,0x100,0x68d,0x100,0x68c,0x100,0x68c,0x100,0x68e,0x100,0x68e,0x100,0x688,
+0x100,0x688,0x100,0x698,0x100,0x698,0x100,0x691,0x100,0x691,0x100,0x6a9,0x100,0x6a9,0x100,0x6a9,
+0x100,0x6a9,0x100,0x6af,0x100,0x6af,0x100,0x6af,0x100,0x6af,0x100,0x6b3,0x100,0x6b3,0x100,0x6b3,
+0x100,0x6b3,0x100,0x6b1,0x100,0x6b1,0x100,0x6b1,0x100,0x6b1,0x100,0x6ba,0x100,0x6ba,0x100,0x6bb,
+0x100,0x6bb,0x100,0x6bb,0x100,0x6bb,0x8200,0xe6,0x6d5,0x654,0x8200,0xe6,0x6d5,0x654,0x100,0x6c1,
+0x100,0x6c1,0x100,0x6c1,0x100,0x6c1,0x100,0x6be,0x100,0x6be,0x100,0x6be,0x100,0x6be,0x100,0x6d2,
+0x100,0x6d2,0x8200,0xe6,0x6d2,0x654,0x8200,0xe6,0x6d2,0x654,0x100,0x6ad,0x100,0x6ad,0x100,0x6ad,
+0x100,0x6ad,0x100,0x6c7,0x100,0x6c7,0x100,0x6c6,0x100,0x6c6,0x100,0x6c8,0x100,0x6c8,0x200,0x6c7,
+0x674,0x100,0x6cb,0x100,0x6cb,0x100,0x6c5,0x100,0x6c5,0x100,0x6c9,0x100,0x6c9,0x100,0x6d0,0x100,
+0x6d0,0x100,0x6d0,0x100,0x6d0,0x100,0x649,0x100,0x649,0x300,0x64a,0x654,0x627,0x300,0x64a,0x654,
+0x627,0x300,0x64a,0x654,0x6d5,0x300,0x64a,0x654,0x6d5,0x300,0x64a,0x654,0x648,0x300,0x64a,0x654,
+0x648,0x300,0x64a,0x654,0x6c7,0x300,0x64a,0x654,0x6c7,0x300,0x64a,0x654,0x6c6,0x300,0x64a,0x654,
+0x6c6,0x300,0x64a,0x654,0x6c8,0x300,0x64a,0x654,0x6c8,0x300,0x64a,0x654,0x6d0,0x300,0x64a,0x654,
+0x6d0,0x300,0x64a,0x654,0x6d0,0x300,0x64a,0x654,0x649,0x300,0x64a,0x654,0x649,0x300,0x64a,0x654,
+0x649,0x100,0x6cc,0x100,0x6cc,0x100,0x6cc,0x100,0x6cc,0x300,0x64a,0x654,0x62c,0x300,0x64a,0x654,
+0x62d,0x300,0x64a,0x654,0x645,0x300,0x64a,0x654,0x649,0x300,0x64a,0x654,0x64a,0x200,0x628,0x62c,
+0x200,0x628,0x62d,0x200,0x628,0x62e,0x200,0x628,0x645,0x200,0x628,0x649,0x200,0x628,0x64a,0x200,
+0x62a,0x62c,0x200,0x62a,0x62d,0x200,0x62a,0x62e,0x200,0x62a,0x645,0x200,0x62a,0x649,0x200,0x62a,
+0x64a,0x200,0x62b,0x62c,0x200,0x62b,0x645,0x200,0x62b,0x649,0x200,0x62b,0x64a,0x200,0x62c,0x62d,
+0x200,0x62c,0x645,0x200,0x62d,0x62c,0x200,0x62d,0x645,0x200,0x62e,0x62c,0x200,0x62e,0x62d,0x200,
+0x62e,0x645,0x200,0x633,0x62c,0x200,0x633,0x62d,0x200,0x633,0x62e,0x200,0x633,0x645,0x200,0x635,
+0x62d,0x200,0x635,0x645,0x200,0x636,0x62c,0x200,0x636,0x62d,0x200,0x636,0x62e,0x200,0x636,0x645,
+0x200,0x637,0x62d,0x200,0x637,0x645,0x200,0x638,0x645,0x200,0x639,0x62c,0x200,0x639,0x645,0x200,
+0x63a,0x62c,0x200,0x63a,0x645,0x200,0x641,0x62c,0x200,0x641,0x62d,0x200,0x641,0x62e,0x200,0x641,
+0x645,0x200,0x641,0x649,0x200,0x641,0x64a,0x200,0x642,0x62d,0x200,0x642,0x645,0x200,0x642,0x649,
+0x200,0x642,0x64a,0x200,0x643,0x627,0x200,0x643,0x62c,0x200,0x643,0x62d,0x200,0x643,0x62e,0x200,
+0x643,0x644,0x200,0x643,0x645,0x200,0x643,0x649,0x200,0x643,0x64a,0x200,0x644,0x62c,0x200,0x644,
+0x62d,0x200,0x644,0x62e,0x200,0x644,0x645,0x200,0x644,0x649,0x200,0x644,0x64a,0x200,0x645,0x62c,
+0x200,0x645,0x62d,0x200,0x645,0x62e,0x200,0x645,0x645,0x200,0x645,0x649,0x200,0x645,0x64a,0x200,
+0x646,0x62c,0x200,0x646,0x62d,0x200,0x646,0x62e,0x200,0x646,0x645,0x200,0x646,0x649,0x200,0x646,
+0x64a,0x200,0x647,0x62c,0x200,0x647,0x645,0x200,0x647,0x649,0x200,0x647,0x64a,0x200,0x64a,0x62c,
+0x200,0x64a,0x62d,0x200,0x64a,0x62e,0x200,0x64a,0x645,0x200,0x64a,0x649,0x200,0x64a,0x64a,0x8200,
+0x23,0x630,0x670,0x8200,0x23,0x631,0x670,0x8200,0x23,0x649,0x670,0x8300,0x21,0x20,0x64c,0x651,
+0x8300,0x21,0x20,0x64d,0x651,0x8300,0x21,0x20,0x64e,0x651,0x8300,0x21,0x20,0x64f,0x651,0x8300,
+0x21,0x20,0x650,0x651,0x8300,0x23,0x20,0x651,0x670,0x300,0x64a,0x654,0x631,0x300,0x64a,0x654,
+0x632,0x300,0x64a,0x654,0x645,0x300,0x64a,0x654,0x646,0x300,0x64a,0x654,0x649,0x300,0x64a,0x654,
+0x64a,0x200,0x628,0x631,0x200,0x628,0x632,0x200,0x628,0x645,0x200,0x628,0x646,0x200,0x628,0x649,
+0x200,0x628,0x64a,0x200,0x62a,0x631,0x200,0x62a,0x632,0x200,0x62a,0x645,0x200,0x62a,0x646,0x200,
+0x62a,0x649,0x200,0x62a,0x64a,0x200,0x62b,0x631,0x200,0x62b,0x632,0x200,0x62b,0x645,0x200,0x62b,
+0x646,0x200,0x62b,0x649,0x200,0x62b,0x64a,0x200,0x641,0x649,0x200,0x641,0x64a,0x200,0x642,0x649,
+0x200,0x642,0x64a,0x200,0x643,0x627,0x200,0x643,0x644,0x200,0x643,0x645,0x200,0x643,0x649,0x200,
+0x643,0x64a,0x200,0x644,0x645,0x200,0x644,0x649,0x200,0x644,0x64a,0x200,0x645,0x627,0x200,0x645,
+0x645,0x200,0x646,0x631,0x200,0x646,0x632,0x200,0x646,0x645,0x200,0x646,0x646,0x200,0x646,0x649,
+0x200,0x646,0x64a,0x8200,0x23,0x649,0x670,0x200,0x64a,0x631,0x200,0x64a,0x632,0x200,0x64a,0x645,
+0x200,0x64a,0x646,0x200,0x64a,0x649,0x200,0x64a,0x64a,0x300,0x64a,0x654,0x62c,0x300,0x64a,0x654,
+0x62d,0x300,0x64a,0x654,0x62e,0x300,0x64a,0x654,0x645,0x300,0x64a,0x654,0x647,0x200,0x628,0x62c,
+0x200,0x628,0x62d,0x200,0x628,0x62e,0x200,0x628,0x645,0x200,0x628,0x647,0x200,0x62a,0x62c,0x200,
+0x62a,0x62d,0x200,0x62a,0x62e,0x200,0x62a,0x645,0x200,0x62a,0x647,0x200,0x62b,0x645,0x200,0x62c,
+0x62d,0x200,0x62c,0x645,0x200,0x62d,0x62c,0x200,0x62d,0x645,0x200,0x62e,0x62c,0x200,0x62e,0x645,
+0x200,0x633,0x62c,0x200,0x633,0x62d,0x200,0x633,0x62e,0x200,0x633,0x645,0x200,0x635,0x62d,0x200,
+0x635,0x62e,0x200,0x635,0x645,0x200,0x636,0x62c,0x200,0x636,0x62d,0x200,0x636,0x62e,0x200,0x636,
+0x645,0x200,0x637,0x62d,0x200,0x638,0x645,0x200,0x639,0x62c,0x200,0x639,0x645,0x200,0x63a,0x62c,
+0x200,0x63a,0x645,0x200,0x641,0x62c,0x200,0x641,0x62d,0x200,0x641,0x62e,0x200,0x641,0x645,0x200,
+0x642,0x62d,0x200,0x642,0x645,0x200,0x643,0x62c,0x200,0x643,0x62d,0x200,0x643,0x62e,0x200,0x643,
+0x644,0x200,0x643,0x645,0x200,0x644,0x62c,0x200,0x644,0x62d,0x200,0x644,0x62e,0x200,0x644,0x645,
+0x200,0x644,0x647,0x200,0x645,0x62c,0x200,0x645,0x62d,0x200,0x645,0x62e,0x200,0x645,0x645,0x200,
+0x646,0x62c,0x200,0x646,0x62d,0x200,0x646,0x62e,0x200,0x646,0x645,0x200,0x646,0x647,0x200,0x647,
+0x62c,0x200,0x647,0x645,0x8200,0x23,0x647,0x670,0x200,0x64a,0x62c,0x200,0x64a,0x62d,0x200,0x64a,
+0x62e,0x200,0x64a,0x645,0x200,0x64a,0x647,0x300,0x64a,0x654,0x645,0x300,0x64a,0x654,0x647,0x200,
+0x628,0x645,0x200,0x628,0x647,0x200,0x62a,0x645,0x200,0x62a,0x647,0x200,0x62b,0x645,0x200,0x62b,
+0x647,0x200,0x633,0x645,0x200,0x633,0x647,0x200,0x634,0x645,0x200,0x634,0x647,0x200,0x643,0x644,
+0x200,0x643,0x645,0x200,0x644,0x645,0x200,0x646,0x645,0x200,0x646,0x647,0x200,0x64a,0x645,0x200,
+0x64a,0x647,0x8300,0x21,0x640,0x64e,0x651,0x8300,0x21,0x640,0x64f,0x651,0x8300,0x21,0x640,0x650,
+0x651,0x200,0x637,0x649,0x200,0x637,0x64a,0x200,0x639,0x649,0x200,0x639,0x64a,0x200,0x63a,0x649,
+0x200,0x63a,0x64a,0x200,0x633,0x649,0x200,0x633,0x64a,0x200,0x634,0x649,0x200,0x634,0x64a,0x200,
+0x62d,0x649,0x200,0x62d,0x64a,0x200,0x62c,0x649,0x200,0x62c,0x64a,0x200,0x62e,0x649,0x200,0x62e,
+0x64a,0x200,0x635,0x649,0x200,0x635,0x64a,0x200,0x636,0x649,0x200,0x636,0x64a,0x200,0x634,0x62c,
+0x200,0x634,0x62d,0x200,0x634,0x62e,0x200,0x634,0x645,0x200,0x634,0x631,0x200,0x633,0x631,0x200,
+0x635,0x631,0x200,0x636,0x631,0x200,0x637,0x649,0x200,0x637,0x64a,0x200,0x639,0x649,0x200,0x639,
+0x64a,0x200,0x63a,0x649,0x200,0x63a,0x64a,0x200,0x633,0x649,0x200,0x633,0x64a,0x200,0x634,0x649,
+0x200,0x634,0x64a,0x200,0x62d,0x649,0x200,0x62d,0x64a,0x200,0x62c,0x649,0x200,0x62c,0x64a,0x200,
+0x62e,0x649,0x200,0x62e,0x64a,0x200,0x635,0x649,0x200,0x635,0x64a,0x200,0x636,0x649,0x200,0x636,
+0x64a,0x200,0x634,0x62c,0x200,0x634,0x62d,0x200,0x634,0x62e,0x200,0x634,0x645,0x200,0x634,0x631,
+0x200,0x633,0x631,0x200,0x635,0x631,0x200,0x636,0x631,0x200,0x634,0x62c,0x200,0x634,0x62d,0x200,
+0x634,0x62e,0x200,0x634,0x645,0x200,0x633,0x647,0x200,0x634,0x647,0x200,0x637,0x645,0x200,0x633,
+0x62c,0x200,0x633,0x62d,0x200,0x633,0x62e,0x200,0x634,0x62c,0x200,0x634,0x62d,0x200,0x634,0x62e,
+0x200,0x637,0x645,0x200,0x638,0x645,0x8200,0x1b,0x627,0x64b,0x8200,0x1b,0x627,0x64b,0x300,0x62a,
+0x62c,0x645,0x300,0x62a,0x62d,0x62c,0x300,0x62a,0x62d,0x62c,0x300,0x62a,0x62d,0x645,0x300,0x62a,
+0x62e,0x645,0x300,0x62a,0x645,0x62c,0x300,0x62a,0x645,0x62d,0x300,0x62a,0x645,0x62e,0x300,0x62c,
+0x645,0x62d,0x300,0x62c,0x645,0x62d,0x300,0x62d,0x645,0x64a,0x300,0x62d,0x645,0x649,0x300,0x633,
+0x62d,0x62c,0x300,0x633,0x62c,0x62d,0x300,0x633,0x62c,0x649,0x300,0x633,0x645,0x62d,0x300,0x633,
+0x645,0x62d,0x300,0x633,0x645,0x62c,0x300,0x633,0x645,0x645,0x300,0x633,0x645,0x645,0x300,0x635,
+0x62d,0x62d,0x300,0x635,0x62d,0x62d,0x300,0x635,0x645,0x645,0x300,0x634,0x62d,0x645,0x300,0x634,
+0x62d,0x645,0x300,0x634,0x62c,0x64a,0x300,0x634,0x645,0x62e,0x300,0x634,0x645,0x62e,0x300,0x634,
+0x645,0x645,0x300,0x634,0x645,0x645,0x300,0x636,0x62d,0x649,0x300,0x636,0x62e,0x645,0x300,0x636,
+0x62e,0x645,0x300,0x637,0x645,0x62d,0x300,0x637,0x645,0x62d,0x300,0x637,0x645,0x645,0x300,0x637,
+0x645,0x64a,0x300,0x639,0x62c,0x645,0x300,0x639,0x645,0x645,0x300,0x639,0x645,0x645,0x300,0x639,
+0x645,0x649,0x300,0x63a,0x645,0x645,0x300,0x63a,0x645,0x64a,0x300,0x63a,0x645,0x649,0x300,0x641,
+0x62e,0x645,0x300,0x641,0x62e,0x645,0x300,0x642,0x645,0x62d,0x300,0x642,0x645,0x645,0x300,0x644,
+0x62d,0x645,0x300,0x644,0x62d,0x64a,0x300,0x644,0x62d,0x649,0x300,0x644,0x62c,0x62c,0x300,0x644,
+0x62c,0x62c,0x300,0x644,0x62e,0x645,0x300,0x644,0x62e,0x645,0x300,0x644,0x645,0x62d,0x300,0x644,
+0x645,0x62d,0x300,0x645,0x62d,0x62c,0x300,0x645,0x62d,0x645,0x300,0x645,0x62d,0x64a,0x300,0x645,
+0x62c,0x62d,0x300,0x645,0x62c,0x645,0x300,0x645,0x62e,0x62c,0x300,0x645,0x62e,0x645,0x300,0x645,
+0x62c,0x62e,0x300,0x647,0x645,0x62c,0x300,0x647,0x645,0x645,0x300,0x646,0x62d,0x645,0x300,0x646,
+0x62d,0x649,0x300,0x646,0x62c,0x645,0x300,0x646,0x62c,0x645,0x300,0x646,0x62c,0x649,0x300,0x646,
+0x645,0x64a,0x300,0x646,0x645,0x649,0x300,0x64a,0x645,0x645,0x300,0x64a,0x645,0x645,0x300,0x628,
+0x62e,0x64a,0x300,0x62a,0x62c,0x64a,0x300,0x62a,0x62c,0x649,0x300,0x62a,0x62e,0x64a,0x300,0x62a,
+0x62e,0x649,0x300,0x62a,0x645,0x64a,0x300,0x62a,0x645,0x649,0x300,0x62c,0x645,0x64a,0x300,0x62c,
+0x62d,0x649,0x300,0x62c,0x645,0x649,0x300,0x633,0x62e,0x649,0x300,0x635,0x62d,0x64a,0x300,0x634,
+0x62d,0x64a,0x300,0x636,0x62d,0x64a,0x300,0x644,0x62c,0x64a,0x300,0x644,0x645,0x64a,0x300,0x64a,
+0x62d,0x64a,0x300,0x64a,0x62c,0x64a,0x300,0x64a,0x645,0x64a,0x300,0x645,0x645,0x64a,0x300,0x642,
+0x645,0x64a,0x300,0x646,0x62d,0x64a,0x300,0x642,0x645,0x62d,0x300,0x644,0x62d,0x645,0x300,0x639,
+0x645,0x64a,0x300,0x643,0x645,0x64a,0x300,0x646,0x62c,0x62d,0x300,0x645,0x62e,0x64a,0x300,0x644,
+0x62c,0x645,0x300,0x643,0x645,0x645,0x300,0x644,0x62c,0x645,0x300,0x646,0x62c,0x62d,0x300,0x62c,
+0x62d,0x64a,0x300,0x62d,0x62c,0x64a,0x300,0x645,0x62c,0x64a,0x300,0x641,0x645,0x64a,0x300,0x628,
+0x62d,0x64a,0x300,0x643,0x645,0x645,0x300,0x639,0x62c,0x645,0x300,0x635,0x645,0x645,0x300,0x633,
+0x62e,0x64a,0x300,0x646,0x62c,0x64a,0x300,0x635,0x644,0x6d2,0x300,0x642,0x644,0x6d2,0x400,0x627,
+0x644,0x644,0x647,0x400,0x627,0x643,0x628,0x631,0x400,0x645,0x62d,0x645,0x62f,0x400,0x635,0x644,
+0x639,0x645,0x400,0x631,0x633,0x648,0x644,0x400,0x639,0x644,0x64a,0x647,0x400,0x648,0x633,0x644,
+0x645,0x300,0x635,0x644,0x649,0x1200,0x635,0x644,0x649,0x20,0x627,0x644,0x644,0x647,0x20,0x639,
+0x644,0x64a,0x647,0x20,0x648,0x633,0x644,0x645,0x800,0x62c,0x644,0x20,0x62c,0x644,0x627,0x644,
+0x647,0x400,0x631,0x6cc,0x627,0x644,0x100,0x2c,0x100,0x3001,0x100,0x3002,0x100,0x3a,0x100,0x3b,
+0x100,0x21,0x100,0x3f,0x100,0x3016,0x100,0x3017,0x300,0x2e,0x2e,0x2e,0x200,0x2e,0x2e,0x100,
+0x2014,0x100,0x2013,0x100,0x5f,0x100,0x5f,0x100,0x28,0x100,0x29,0x100,0x7b,0x100,0x7d,0x100,
+0x3014,0x100,0x3015,0x100,0x3010,0x100,0x3011,0x100,0x300a,0x100,0x300b,0x100,0x3008,0x100,0x3009,0x100,
+0x300c,0x100,0x300d,0x100,0x300e,0x100,0x300f,0x100,0x5b,0x100,0x5d,0x8200,0xe6,0x20,0x305,0x8200,
+0xe6,0x20,0x305,0x8200,0xe6,0x20,0x305,0x8200,0xe6,0x20,0x305,0x100,0x5f,0x100,0x5f,0x100,
+0x5f,0x100,0x2c,0x100,0x3001,0x100,0x2e,0x100,0x3b,0x100,0x3a,0x100,0x3f,0x100,0x21,0x100,
+0x2014,0x100,0x28,0x100,0x29,0x100,0x7b,0x100,0x7d,0x100,0x3014,0x100,0x3015,0x100,0x23,0x100,
+0x26,0x100,0x2a,0x100,0x2b,0x100,0x2d,0x100,0x3c,0x100,0x3e,0x100,0x3d,0x100,0x5c,0x100,
+0x24,0x100,0x25,0x100,0x40,0x8200,0x1b,0x20,0x64b,0x8200,0x1b,0x640,0x64b,0x8200,0x1c,0x20,
+0x64c,0x8200,0x1d,0x20,0x64d,0x8200,0x1e,0x20,0x64e,0x8200,0x1e,0x640,0x64e,0x8200,0x1f,0x20,
+0x64f,0x8200,0x1f,0x640,0x64f,0x8200,0x20,0x20,0x650,0x8200,0x20,0x640,0x650,0x8200,0x21,0x20,
+0x651,0x8200,0x21,0x640,0x651,0x8200,0x22,0x20,0x652,0x8200,0x22,0x640,0x652,0x100,0x621,0x8200,
+0xe6,0x627,0x653,0x8200,0xe6,0x627,0x653,0x8200,0xe6,0x627,0x654,0x8200,0xe6,0x627,0x654,0x8200,
+0xe6,0x648,0x654,0x8200,0xe6,0x648,0x654,0x8200,0xdc,0x627,0x655,0x8200,0xdc,0x627,0x655,0x8200,
+0xe6,0x64a,0x654,0x8200,0xe6,0x64a,0x654,0x8200,0xe6,0x64a,0x654,0x8200,0xe6,0x64a,0x654,0x100,
+0x627,0x100,0x627,0x100,0x628,0x100,0x628,0x100,0x628,0x100,0x628,0x100,0x629,0x100,0x629,0x100,
+0x62a,0x100,0x62a,0x100,0x62a,0x100,0x62a,0x100,0x62b,0x100,0x62b,0x100,0x62b,0x100,0x62b,0x100,
+0x62c,0x100,0x62c,0x100,0x62c,0x100,0x62c,0x100,0x62d,0x100,0x62d,0x100,0x62d,0x100,0x62d,0x100,
+0x62e,0x100,0x62e,0x100,0x62e,0x100,0x62e,0x100,0x62f,0x100,0x62f,0x100,0x630,0x100,0x630,0x100,
+0x631,0x100,0x631,0x100,0x632,0x100,0x632,0x100,0x633,0x100,0x633,0x100,0x633,0x100,0x633,0x100,
+0x634,0x100,0x634,0x100,0x634,0x100,0x634,0x100,0x635,0x100,0x635,0x100,0x635,0x100,0x635,0x100,
+0x636,0x100,0x636,0x100,0x636,0x100,0x636,0x100,0x637,0x100,0x637,0x100,0x637,0x100,0x637,0x100,
+0x638,0x100,0x638,0x100,0x638,0x100,0x638,0x100,0x639,0x100,0x639,0x100,0x639,0x100,0x639,0x100,
+0x63a,0x100,0x63a,0x100,0x63a,0x100,0x63a,0x100,0x641,0x100,0x641,0x100,0x641,0x100,0x641,0x100,
+0x642,0x100,0x642,0x100,0x642,0x100,0x642,0x100,0x643,0x100,0x643,0x100,0x643,0x100,0x643,0x100,
+0x644,0x100,0x644,0x100,0x644,0x100,0x644,0x100,0x645,0x100,0x645,0x100,0x645,0x100,0x645,0x100,
+0x646,0x100,0x646,0x100,0x646,0x100,0x646,0x100,0x647,0x100,0x647,0x100,0x647,0x100,0x647,0x100,
+0x648,0x100,0x648,0x100,0x649,0x100,0x649,0x100,0x64a,0x100,0x64a,0x100,0x64a,0x100,0x64a,0x8300,
+0xe6,0x644,0x627,0x653,0x8300,0xe6,0x644,0x627,0x653,0x8300,0xe6,0x644,0x627,0x654,0x8300,0xe6,
+0x644,0x627,0x654,0x8300,0xdc,0x644,0x627,0x655,0x8300,0xdc,0x644,0x627,0x655,0x200,0x644,0x627,
+0x200,0x644,0x627,0x100,0x21,0x100,0x22,0x100,0x23,0x100,0x24,0x100,0x25,0x100,0x26,0x100,
+0x27,0x100,0x28,0x100,0x29,0x100,0x2a,0x100,0x2b,0x100,0x2c,0x100,0x2d,0x100,0x2e,0x100,
+0x2f,0x100,0x30,0x100,0x31,0x100,0x32,0x100,0x33,0x100,0x34,0x100,0x35,0x100,0x36,0x100,
+0x37,0x100,0x38,0x100,0x39,0x100,0x3a,0x100,0x3b,0x100,0x3c,0x100,0x3d,0x100,0x3e,0x100,
+0x3f,0x100,0x40,0x100,0x41,0x100,0x42,0x100,0x43,0x100,0x44,0x100,0x45,0x100,0x46,0x100,
+0x47,0x100,0x48,0x100,0x49,0x100,0x4a,0x100,0x4b,0x100,0x4c,0x100,0x4d,0x100,0x4e,0x100,
+0x4f,0x100,0x50,0x100,0x51,0x100,0x52,0x100,0x53,0x100,0x54,0x100,0x55,0x100,0x56,0x100,
+0x57,0x100,0x58,0x100,0x59,0x100,0x5a,0x100,0x5b,0x100,0x5c,0x100,0x5d,0x100,0x5e,0x100,
+0x5f,0x100,0x60,0x100,0x61,0x100,0x62,0x100,0x63,0x100,0x64,0x100,0x65,0x100,0x66,0x100,
+0x67,0x100,0x68,0x100,0x69,0x100,0x6a,0x100,0x6b,0x100,0x6c,0x100,0x6d,0x100,0x6e,0x100,
+0x6f,0x100,0x70,0x100,0x71,0x100,0x72,0x100,0x73,0x100,0x74,0x100,0x75,0x100,0x76,0x100,
+0x77,0x100,0x78,0x100,0x79,0x100,0x7a,0x100,0x7b,0x100,0x7c,0x100,0x7d,0x100,0x7e,0x100,
+0x2985,0x100,0x2986,0x100,0x3002,0x100,0x300c,0x100,0x300d,0x100,0x3001,0x100,0x30fb,0x100,0x30f2,0x100,
+0x30a1,0x100,0x30a3,0x100,0x30a5,0x100,0x30a7,0x100,0x30a9,0x100,0x30e3,0x100,0x30e5,0x100,0x30e7,0x100,
+0x30c3,0x100,0x30fc,0x100,0x30a2,0x100,0x30a4,0x100,0x30a6,0x100,0x30a8,0x100,0x30aa,0x100,0x30ab,0x100,
+0x30ad,0x100,0x30af,0x100,0x30b1,0x100,0x30b3,0x100,0x30b5,0x100,0x30b7,0x100,0x30b9,0x100,0x30bb,0x100,
+0x30bd,0x100,0x30bf,0x100,0x30c1,0x100,0x30c4,0x100,0x30c6,0x100,0x30c8,0x100,0x30ca,0x100,0x30cb,0x100,
+0x30cc,0x100,0x30cd,0x100,0x30ce,0x100,0x30cf,0x100,0x30d2,0x100,0x30d5,0x100,0x30d8,0x100,0x30db,0x100,
+0x30de,0x100,0x30df,0x100,0x30e0,0x100,0x30e1,0x100,0x30e2,0x100,0x30e4,0x100,0x30e6,0x100,0x30e8,0x100,
+0x30e9,0x100,0x30ea,0x100,0x30eb,0x100,0x30ec,0x100,0x30ed,0x100,0x30ef,0x100,0x30f3,0x8100,0x808,0x3099,
+0x8100,0x808,0x309a,0x100,0x1160,0x100,0x1100,0x100,0x1101,0x100,0x11aa,0x100,0x1102,0x100,0x11ac,0x100,
+0x11ad,0x100,0x1103,0x100,0x1104,0x100,0x1105,0x100,0x11b0,0x100,0x11b1,0x100,0x11b2,0x100,0x11b3,0x100,
+0x11b4,0x100,0x11b5,0x100,0x111a,0x100,0x1106,0x100,0x1107,0x100,0x1108,0x100,0x1121,0x100,0x1109,0x100,
+0x110a,0x100,0x110b,0x100,0x110c,0x100,0x110d,0x100,0x110e,0x100,0x110f,0x100,0x1110,0x100,0x1111,0x100,
+0x1112,0x100,0x1161,0x100,0x1162,0x100,0x1163,0x100,0x1164,0x100,0x1165,0x100,0x1166,0x100,0x1167,0x100,
+0x1168,0x100,0x1169,0x100,0x116a,0x100,0x116b,0x100,0x116c,0x100,0x116d,0x100,0x116e,0x100,0x116f,0x100,
+0x1170,0x100,0x1171,0x100,0x1172,0x100,0x1173,0x100,0x1174,0x100,0x1175,0x100,0xa2,0x100,0xa3,0x100,
+0xac,0x8200,0xe6,0x20,0x304,0x100,0xa6,0x100,0xa5,0x100,0x20a9,0x100,0x2502,0x100,0x2190,0x100,
+0x2191,0x100,0x2192,0x100,0x2193,0x100,0x25a0,0x100,0x25cb,0x100,0x61,0x100,0x62,0x100,0x63,0x100,
0x64,0x100,0x65,0x100,0x66,0x100,0x67,0x100,0x68,0x100,0x69,0x100,0x6a,0x100,0x6b,0x100,
0x6c,0x100,0x6d,0x100,0x6e,0x100,0x6f,0x100,0x70,0x100,0x71,0x100,0x72,0x100,0x73,0x100,
-0x74,0x100,0x75,0x100,0x76,0x100,0x77,0x100,0x78,0x100,0x79,0x100,0x7a,0x100,0x30,0x400,
-0x222b,0x222b,0x222b,0x222b,0x300,0x3a,0x3a,0x3d,0x200,0x3d,0x3d,0x300,0x3d,0x3d,0x3d,0x100,
-0x2d61,0x100,0x6bcd,0x100,0x9f9f,0x100,0x4e00,0x100,0x4e28,0x100,0x4e36,0x100,0x4e3f,0x100,0x4e59,0x100,
-0x4e85,0x100,0x4e8c,0x100,0x4ea0,0x100,0x4eba,0x100,0x513f,0x100,0x5165,0x100,0x516b,0x100,0x5182,0x100,
-0x5196,0x100,0x51ab,0x100,0x51e0,0x100,0x51f5,0x100,0x5200,0x100,0x529b,0x100,0x52f9,0x100,0x5315,0x100,
-0x531a,0x100,0x5338,0x100,0x5341,0x100,0x535c,0x100,0x5369,0x100,0x5382,0x100,0x53b6,0x100,0x53c8,0x100,
-0x53e3,0x100,0x56d7,0x100,0x571f,0x100,0x58eb,0x100,0x5902,0x100,0x590a,0x100,0x5915,0x100,0x5927,0x100,
-0x5973,0x100,0x5b50,0x100,0x5b80,0x100,0x5bf8,0x100,0x5c0f,0x100,0x5c22,0x100,0x5c38,0x100,0x5c6e,0x100,
-0x5c71,0x100,0x5ddb,0x100,0x5de5,0x100,0x5df1,0x100,0x5dfe,0x100,0x5e72,0x100,0x5e7a,0x100,0x5e7f,0x100,
-0x5ef4,0x100,0x5efe,0x100,0x5f0b,0x100,0x5f13,0x100,0x5f50,0x100,0x5f61,0x100,0x5f73,0x100,0x5fc3,0x100,
-0x6208,0x100,0x6236,0x100,0x624b,0x100,0x652f,0x100,0x6534,0x100,0x6587,0x100,0x6597,0x100,0x65a4,0x100,
-0x65b9,0x100,0x65e0,0x100,0x65e5,0x100,0x66f0,0x100,0x6708,0x100,0x6728,0x100,0x6b20,0x100,0x6b62,0x100,
-0x6b79,0x100,0x6bb3,0x100,0x6bcb,0x100,0x6bd4,0x100,0x6bdb,0x100,0x6c0f,0x100,0x6c14,0x100,0x6c34,0x100,
-0x706b,0x100,0x722a,0x100,0x7236,0x100,0x723b,0x100,0x723f,0x100,0x7247,0x100,0x7259,0x100,0x725b,0x100,
-0x72ac,0x100,0x7384,0x100,0x7389,0x100,0x74dc,0x100,0x74e6,0x100,0x7518,0x100,0x751f,0x100,0x7528,0x100,
-0x7530,0x100,0x758b,0x100,0x7592,0x100,0x7676,0x100,0x767d,0x100,0x76ae,0x100,0x76bf,0x100,0x76ee,0x100,
-0x77db,0x100,0x77e2,0x100,0x77f3,0x100,0x793a,0x100,0x79b8,0x100,0x79be,0x100,0x7a74,0x100,0x7acb,0x100,
-0x7af9,0x100,0x7c73,0x100,0x7cf8,0x100,0x7f36,0x100,0x7f51,0x100,0x7f8a,0x100,0x7fbd,0x100,0x8001,0x100,
-0x800c,0x100,0x8012,0x100,0x8033,0x100,0x807f,0x100,0x8089,0x100,0x81e3,0x100,0x81ea,0x100,0x81f3,0x100,
-0x81fc,0x100,0x820c,0x100,0x821b,0x100,0x821f,0x100,0x826e,0x100,0x8272,0x100,0x8278,0x100,0x864d,0x100,
-0x866b,0x100,0x8840,0x100,0x884c,0x100,0x8863,0x100,0x897e,0x100,0x898b,0x100,0x89d2,0x100,0x8a00,0x100,
-0x8c37,0x100,0x8c46,0x100,0x8c55,0x100,0x8c78,0x100,0x8c9d,0x100,0x8d64,0x100,0x8d70,0x100,0x8db3,0x100,
-0x8eab,0x100,0x8eca,0x100,0x8f9b,0x100,0x8fb0,0x100,0x8fb5,0x100,0x9091,0x100,0x9149,0x100,0x91c6,0x100,
-0x91cc,0x100,0x91d1,0x100,0x9577,0x100,0x9580,0x100,0x961c,0x100,0x96b6,0x100,0x96b9,0x100,0x96e8,0x100,
-0x9751,0x100,0x975e,0x100,0x9762,0x100,0x9769,0x100,0x97cb,0x100,0x97ed,0x100,0x97f3,0x100,0x9801,0x100,
-0x98a8,0x100,0x98db,0x100,0x98df,0x100,0x9996,0x100,0x9999,0x100,0x99ac,0x100,0x9aa8,0x100,0x9ad8,0x100,
-0x9adf,0x100,0x9b25,0x100,0x9b2f,0x100,0x9b32,0x100,0x9b3c,0x100,0x9b5a,0x100,0x9ce5,0x100,0x9e75,0x100,
-0x9e7f,0x100,0x9ea5,0x100,0x9ebb,0x100,0x9ec3,0x100,0x9ecd,0x100,0x9ed1,0x100,0x9ef9,0x100,0x9efd,0x100,
-0x9f0e,0x100,0x9f13,0x100,0x9f20,0x100,0x9f3b,0x100,0x9f4a,0x100,0x9f52,0x100,0x9f8d,0x100,0x9f9c,0x100,
-0x9fa0,0x100,0x20,0x100,0x3012,0x100,0x5341,0x100,0x5344,0x100,0x5345,0x8200,8,0x20,0x3099,0x8200,
-8,0x20,0x309a,0x200,0x3088,0x308a,0x200,0x30b3,0x30c8,0x100,0x1100,0x100,0x1101,0x100,0x11aa,0x100,
-0x1102,0x100,0x11ac,0x100,0x11ad,0x100,0x1103,0x100,0x1104,0x100,0x1105,0x100,0x11b0,0x100,0x11b1,0x100,
-0x11b2,0x100,0x11b3,0x100,0x11b4,0x100,0x11b5,0x100,0x111a,0x100,0x1106,0x100,0x1107,0x100,0x1108,0x100,
-0x1121,0x100,0x1109,0x100,0x110a,0x100,0x110b,0x100,0x110c,0x100,0x110d,0x100,0x110e,0x100,0x110f,0x100,
-0x1110,0x100,0x1111,0x100,0x1112,0x100,0x1161,0x100,0x1162,0x100,0x1163,0x100,0x1164,0x100,0x1165,0x100,
-0x1166,0x100,0x1167,0x100,0x1168,0x100,0x1169,0x100,0x116a,0x100,0x116b,0x100,0x116c,0x100,0x116d,0x100,
-0x116e,0x100,0x116f,0x100,0x1170,0x100,0x1171,0x100,0x1172,0x100,0x1173,0x100,0x1174,0x100,0x1175,0x100,
-0x1160,0x100,0x1114,0x100,0x1115,0x100,0x11c7,0x100,0x11c8,0x100,0x11cc,0x100,0x11ce,0x100,0x11d3,0x100,
-0x11d7,0x100,0x11d9,0x100,0x111c,0x100,0x11dd,0x100,0x11df,0x100,0x111d,0x100,0x111e,0x100,0x1120,0x100,
-0x1122,0x100,0x1123,0x100,0x1127,0x100,0x1129,0x100,0x112b,0x100,0x112c,0x100,0x112d,0x100,0x112e,0x100,
-0x112f,0x100,0x1132,0x100,0x1136,0x100,0x1140,0x100,0x1147,0x100,0x114c,0x100,0x11f1,0x100,0x11f2,0x100,
-0x1157,0x100,0x1158,0x100,0x1159,0x100,0x1184,0x100,0x1185,0x100,0x1188,0x100,0x1191,0x100,0x1192,0x100,
-0x1194,0x100,0x119e,0x100,0x11a1,0x100,0x4e00,0x100,0x4e8c,0x100,0x4e09,0x100,0x56db,0x100,0x4e0a,0x100,
-0x4e2d,0x100,0x4e0b,0x100,0x7532,0x100,0x4e59,0x100,0x4e19,0x100,0x4e01,0x100,0x5929,0x100,0x5730,0x100,
-0x4eba,0x300,0x28,0x1100,0x29,0x300,0x28,0x1102,0x29,0x300,0x28,0x1103,0x29,0x300,0x28,0x1105,
-0x29,0x300,0x28,0x1106,0x29,0x300,0x28,0x1107,0x29,0x300,0x28,0x1109,0x29,0x300,0x28,0x110b,
-0x29,0x300,0x28,0x110c,0x29,0x300,0x28,0x110e,0x29,0x300,0x28,0x110f,0x29,0x300,0x28,0x1110,
-0x29,0x300,0x28,0x1111,0x29,0x300,0x28,0x1112,0x29,0x400,0x28,0x1100,0x1161,0x29,0x400,0x28,
-0x1102,0x1161,0x29,0x400,0x28,0x1103,0x1161,0x29,0x400,0x28,0x1105,0x1161,0x29,0x400,0x28,0x1106,
-0x1161,0x29,0x400,0x28,0x1107,0x1161,0x29,0x400,0x28,0x1109,0x1161,0x29,0x400,0x28,0x110b,0x1161,
-0x29,0x400,0x28,0x110c,0x1161,0x29,0x400,0x28,0x110e,0x1161,0x29,0x400,0x28,0x110f,0x1161,0x29,
-0x400,0x28,0x1110,0x1161,0x29,0x400,0x28,0x1111,0x1161,0x29,0x400,0x28,0x1112,0x1161,0x29,0x400,
-0x28,0x110c,0x116e,0x29,0x700,0x28,0x110b,0x1169,0x110c,0x1165,0x11ab,0x29,0x600,0x28,0x110b,0x1169,
-0x1112,0x116e,0x29,0x300,0x28,0x4e00,0x29,0x300,0x28,0x4e8c,0x29,0x300,0x28,0x4e09,0x29,0x300,
-0x28,0x56db,0x29,0x300,0x28,0x4e94,0x29,0x300,0x28,0x516d,0x29,0x300,0x28,0x4e03,0x29,0x300,
-0x28,0x516b,0x29,0x300,0x28,0x4e5d,0x29,0x300,0x28,0x5341,0x29,0x300,0x28,0x6708,0x29,0x300,
-0x28,0x706b,0x29,0x300,0x28,0x6c34,0x29,0x300,0x28,0x6728,0x29,0x300,0x28,0x91d1,0x29,0x300,
-0x28,0x571f,0x29,0x300,0x28,0x65e5,0x29,0x300,0x28,0x682a,0x29,0x300,0x28,0x6709,0x29,0x300,
-0x28,0x793e,0x29,0x300,0x28,0x540d,0x29,0x300,0x28,0x7279,0x29,0x300,0x28,0x8ca1,0x29,0x300,
-0x28,0x795d,0x29,0x300,0x28,0x52b4,0x29,0x300,0x28,0x4ee3,0x29,0x300,0x28,0x547c,0x29,0x300,
-0x28,0x5b66,0x29,0x300,0x28,0x76e3,0x29,0x300,0x28,0x4f01,0x29,0x300,0x28,0x8cc7,0x29,0x300,
-0x28,0x5354,0x29,0x300,0x28,0x796d,0x29,0x300,0x28,0x4f11,0x29,0x300,0x28,0x81ea,0x29,0x300,
-0x28,0x81f3,0x29,0x200,0x32,0x31,0x200,0x32,0x32,0x200,0x32,0x33,0x200,0x32,0x34,0x200,
-0x32,0x35,0x200,0x32,0x36,0x200,0x32,0x37,0x200,0x32,0x38,0x200,0x32,0x39,0x200,0x33,
-0x30,0x200,0x33,0x31,0x200,0x33,0x32,0x200,0x33,0x33,0x200,0x33,0x34,0x200,0x33,0x35,
-0x100,0x1100,0x100,0x1102,0x100,0x1103,0x100,0x1105,0x100,0x1106,0x100,0x1107,0x100,0x1109,0x100,0x110b,
-0x100,0x110c,0x100,0x110e,0x100,0x110f,0x100,0x1110,0x100,0x1111,0x100,0x1112,0x200,0x1100,0x1161,0x200,
-0x1102,0x1161,0x200,0x1103,0x1161,0x200,0x1105,0x1161,0x200,0x1106,0x1161,0x200,0x1107,0x1161,0x200,0x1109,
-0x1161,0x200,0x110b,0x1161,0x200,0x110c,0x1161,0x200,0x110e,0x1161,0x200,0x110f,0x1161,0x200,0x1110,0x1161,
-0x200,0x1111,0x1161,0x200,0x1112,0x1161,0x500,0x110e,0x1161,0x11b7,0x1100,0x1169,0x400,0x110c,0x116e,0x110b,
-0x1174,0x200,0x110b,0x116e,0x100,0x4e00,0x100,0x4e8c,0x100,0x4e09,0x100,0x56db,0x100,0x4e94,0x100,0x516d,
-0x100,0x4e03,0x100,0x516b,0x100,0x4e5d,0x100,0x5341,0x100,0x6708,0x100,0x706b,0x100,0x6c34,0x100,0x6728,
-0x100,0x91d1,0x100,0x571f,0x100,0x65e5,0x100,0x682a,0x100,0x6709,0x100,0x793e,0x100,0x540d,0x100,0x7279,
-0x100,0x8ca1,0x100,0x795d,0x100,0x52b4,0x100,0x79d8,0x100,0x7537,0x100,0x5973,0x100,0x9069,0x100,0x512a,
-0x100,0x5370,0x100,0x6ce8,0x100,0x9805,0x100,0x4f11,0x100,0x5199,0x100,0x6b63,0x100,0x4e0a,0x100,0x4e2d,
-0x100,0x4e0b,0x100,0x5de6,0x100,0x53f3,0x100,0x533b,0x100,0x5b97,0x100,0x5b66,0x100,0x76e3,0x100,0x4f01,
-0x100,0x8cc7,0x100,0x5354,0x100,0x591c,0x200,0x33,0x36,0x200,0x33,0x37,0x200,0x33,0x38,0x200,
-0x33,0x39,0x200,0x34,0x30,0x200,0x34,0x31,0x200,0x34,0x32,0x200,0x34,0x33,0x200,0x34,
-0x34,0x200,0x34,0x35,0x200,0x34,0x36,0x200,0x34,0x37,0x200,0x34,0x38,0x200,0x34,0x39,
-0x200,0x35,0x30,0x200,0x31,0x6708,0x200,0x32,0x6708,0x200,0x33,0x6708,0x200,0x34,0x6708,0x200,
-0x35,0x6708,0x200,0x36,0x6708,0x200,0x37,0x6708,0x200,0x38,0x6708,0x200,0x39,0x6708,0x300,0x31,
-0x30,0x6708,0x300,0x31,0x31,0x6708,0x300,0x31,0x32,0x6708,0x300,0x65,0x72,0x67,0x100,0x30a2,
-0x100,0x30a4,0x100,0x30a6,0x100,0x30a8,0x100,0x30aa,0x100,0x30ab,0x100,0x30ad,0x100,0x30af,0x100,0x30b1,
-0x100,0x30b3,0x100,0x30b5,0x100,0x30b7,0x100,0x30b9,0x100,0x30bb,0x100,0x30bd,0x100,0x30bf,0x100,0x30c1,
-0x100,0x30c4,0x100,0x30c6,0x100,0x30c8,0x100,0x30ca,0x100,0x30cb,0x100,0x30cc,0x100,0x30cd,0x100,0x30ce,
-0x100,0x30cf,0x100,0x30d2,0x100,0x30d5,0x100,0x30d8,0x100,0x30db,0x100,0x30de,0x100,0x30df,0x100,0x30e0,
-0x100,0x30e1,0x100,0x30e2,0x100,0x30e4,0x100,0x30e6,0x100,0x30e8,0x100,0x30e9,0x100,0x30ea,0x100,0x30eb,
-0x100,0x30ec,0x100,0x30ed,0x100,0x30ef,0x100,0x30f0,0x100,0x30f1,0x100,0x30f2,0x500,0x30a2,0x30cf,0x309a,
-0x30fc,0x30c8,0x400,0x30a2,0x30eb,0x30d5,0x30a1,0x500,0x30a2,0x30f3,0x30d8,0x309a,0x30a2,0x300,0x30a2,0x30fc,
-0x30eb,0x8500,8,0x30a4,0x30cb,0x30f3,0x30af,0x3099,0x300,0x30a4,0x30f3,0x30c1,0x300,0x30a6,0x30a9,0x30f3,
-0x8600,8,0x30a8,0x30b9,0x30af,0x30fc,0x30c8,0x3099,0x400,0x30a8,0x30fc,0x30ab,0x30fc,0x300,0x30aa,0x30f3,
-0x30b9,0x300,0x30aa,0x30fc,0x30e0,0x300,0x30ab,0x30a4,0x30ea,0x400,0x30ab,0x30e9,0x30c3,0x30c8,0x400,0x30ab,
-0x30ed,0x30ea,0x30fc,0x400,0x30ab,0x3099,0x30ed,0x30f3,0x400,0x30ab,0x3099,0x30f3,0x30de,0x8400,8,0x30ad,
-0x3099,0x30ab,0x3099,0x400,0x30ad,0x3099,0x30cb,0x30fc,0x400,0x30ad,0x30e5,0x30ea,0x30fc,0x600,0x30ad,0x3099,
-0x30eb,0x30bf,0x3099,0x30fc,0x200,0x30ad,0x30ed,0x600,0x30ad,0x30ed,0x30af,0x3099,0x30e9,0x30e0,0x600,0x30ad,
-0x30ed,0x30e1,0x30fc,0x30c8,0x30eb,0x500,0x30ad,0x30ed,0x30ef,0x30c3,0x30c8,0x400,0x30af,0x3099,0x30e9,0x30e0,
-0x600,0x30af,0x3099,0x30e9,0x30e0,0x30c8,0x30f3,0x600,0x30af,0x30eb,0x30bb,0x3099,0x30a4,0x30ed,0x400,0x30af,
-0x30ed,0x30fc,0x30cd,0x300,0x30b1,0x30fc,0x30b9,0x300,0x30b3,0x30eb,0x30ca,0x8400,8,0x30b3,0x30fc,0x30db,
-0x309a,0x400,0x30b5,0x30a4,0x30af,0x30eb,0x500,0x30b5,0x30f3,0x30c1,0x30fc,0x30e0,0x8500,8,0x30b7,0x30ea,
-0x30f3,0x30af,0x3099,0x300,0x30bb,0x30f3,0x30c1,0x300,0x30bb,0x30f3,0x30c8,0x400,0x30bf,0x3099,0x30fc,0x30b9,
-0x300,0x30c6,0x3099,0x30b7,0x300,0x30c8,0x3099,0x30eb,0x200,0x30c8,0x30f3,0x200,0x30ca,0x30ce,0x300,0x30ce,
-0x30c3,0x30c8,0x300,0x30cf,0x30a4,0x30c4,0x600,0x30cf,0x309a,0x30fc,0x30bb,0x30f3,0x30c8,0x400,0x30cf,0x309a,
-0x30fc,0x30c4,0x500,0x30cf,0x3099,0x30fc,0x30ec,0x30eb,0x600,0x30d2,0x309a,0x30a2,0x30b9,0x30c8,0x30eb,0x400,
-0x30d2,0x309a,0x30af,0x30eb,0x300,0x30d2,0x309a,0x30b3,0x300,0x30d2,0x3099,0x30eb,0x8600,8,0x30d5,0x30a1,
-0x30e9,0x30c3,0x30c8,0x3099,0x400,0x30d5,0x30a3,0x30fc,0x30c8,0x600,0x30d5,0x3099,0x30c3,0x30b7,0x30a7,0x30eb,
-0x300,0x30d5,0x30e9,0x30f3,0x500,0x30d8,0x30af,0x30bf,0x30fc,0x30eb,0x300,0x30d8,0x309a,0x30bd,0x400,0x30d8,
-0x309a,0x30cb,0x30d2,0x300,0x30d8,0x30eb,0x30c4,0x400,0x30d8,0x309a,0x30f3,0x30b9,0x8500,8,0x30d8,0x309a,
-0x30fc,0x30b7,0x3099,0x400,0x30d8,0x3099,0x30fc,0x30bf,0x500,0x30db,0x309a,0x30a4,0x30f3,0x30c8,0x400,0x30db,
-0x3099,0x30eb,0x30c8,0x200,0x30db,0x30f3,0x8500,8,0x30db,0x309a,0x30f3,0x30c8,0x3099,0x300,0x30db,0x30fc,
-0x30eb,0x300,0x30db,0x30fc,0x30f3,0x400,0x30de,0x30a4,0x30af,0x30ed,0x300,0x30de,0x30a4,0x30eb,0x300,0x30de,
-0x30c3,0x30cf,0x300,0x30de,0x30eb,0x30af,0x500,0x30de,0x30f3,0x30b7,0x30e7,0x30f3,0x400,0x30df,0x30af,0x30ed,
-0x30f3,0x200,0x30df,0x30ea,0x600,0x30df,0x30ea,0x30cf,0x3099,0x30fc,0x30eb,0x8300,8,0x30e1,0x30ab,0x3099,
-0x500,0x30e1,0x30ab,0x3099,0x30c8,0x30f3,0x400,0x30e1,0x30fc,0x30c8,0x30eb,0x8400,8,0x30e4,0x30fc,0x30c8,
-0x3099,0x300,0x30e4,0x30fc,0x30eb,0x300,0x30e6,0x30a2,0x30f3,0x400,0x30ea,0x30c3,0x30c8,0x30eb,0x200,0x30ea,
-0x30e9,0x400,0x30eb,0x30d2,0x309a,0x30fc,0x500,0x30eb,0x30fc,0x30d5,0x3099,0x30eb,0x200,0x30ec,0x30e0,0x600,
-0x30ec,0x30f3,0x30c8,0x30b1,0x3099,0x30f3,0x300,0x30ef,0x30c3,0x30c8,0x200,0x30,0x70b9,0x200,0x31,0x70b9,
-0x200,0x32,0x70b9,0x200,0x33,0x70b9,0x200,0x34,0x70b9,0x200,0x35,0x70b9,0x200,0x36,0x70b9,0x200,
-0x37,0x70b9,0x200,0x38,0x70b9,0x200,0x39,0x70b9,0x300,0x31,0x30,0x70b9,0x300,0x31,0x31,0x70b9,
-0x300,0x31,0x32,0x70b9,0x300,0x31,0x33,0x70b9,0x300,0x31,0x34,0x70b9,0x300,0x31,0x35,0x70b9,
-0x300,0x31,0x36,0x70b9,0x300,0x31,0x37,0x70b9,0x300,0x31,0x38,0x70b9,0x300,0x31,0x39,0x70b9,
-0x300,0x32,0x30,0x70b9,0x300,0x32,0x31,0x70b9,0x300,0x32,0x32,0x70b9,0x300,0x32,0x33,0x70b9,
-0x300,0x32,0x34,0x70b9,0x200,0x64,0x61,0x300,0x62,0x61,0x72,0x200,0x70,0x63,0x200,0x64,
-0x6d,0x300,0x64,0x6d,0x32,0x300,0x64,0x6d,0x33,0x200,0x5e73,0x6210,0x200,0x662d,0x548c,0x200,
-0x5927,0x6b63,0x200,0x660e,0x6cbb,0x400,0x682a,0x5f0f,0x4f1a,0x793e,0x300,0x63,0x61,0x6c,0x400,0x6b,
-0x63,0x61,0x6c,0x200,0x3bc,0x67,0x200,0x6d,0x67,0x200,0x6b,0x67,0x200,0x3bc,0x6c,0x200,
-0x6d,0x6c,0x200,0x64,0x6c,0x200,0x6b,0x6c,0x200,0x66,0x6d,0x200,0x6e,0x6d,0x200,0x3bc,
-0x6d,0x200,0x6d,0x6d,0x200,0x63,0x6d,0x200,0x6b,0x6d,0x300,0x6d,0x6d,0x32,0x300,0x63,
-0x6d,0x32,0x200,0x6d,0x32,0x300,0x6b,0x6d,0x32,0x300,0x6d,0x6d,0x33,0x300,0x63,0x6d,
-0x33,0x200,0x6d,0x33,0x300,0x6b,0x6d,0x33,0x300,0x6d,0x2215,0x73,0x400,0x6d,0x2215,0x73,
-0x32,0x300,0x72,0x61,0x64,0x500,0x72,0x61,0x64,0x2215,0x73,0x600,0x72,0x61,0x64,0x2215,
-0x73,0x32,0x200,0x70,0x73,0x200,0x6e,0x73,0x200,0x3bc,0x73,0x200,0x6d,0x73,0x400,0x61,
-0x2e,0x6d,0x2e,0x200,0x63,0x63,0x200,0x63,0x64,0x200,0x68,0x61,0x200,0x69,0x6e,0x200,
-0x6b,0x74,0x200,0x6c,0x6d,0x200,0x6c,0x6e,0x300,0x6c,0x6f,0x67,0x200,0x6c,0x78,0x200,
-0x6d,0x62,0x300,0x6d,0x69,0x6c,0x300,0x6d,0x6f,0x6c,0x400,0x70,0x2e,0x6d,0x2e,0x200,
-0x73,0x72,0x200,0x31,0x65e5,0x200,0x32,0x65e5,0x200,0x33,0x65e5,0x200,0x34,0x65e5,0x200,0x35,
-0x65e5,0x200,0x36,0x65e5,0x200,0x37,0x65e5,0x200,0x38,0x65e5,0x200,0x39,0x65e5,0x300,0x31,0x30,
-0x65e5,0x300,0x31,0x31,0x65e5,0x300,0x31,0x32,0x65e5,0x300,0x31,0x33,0x65e5,0x300,0x31,0x34,
-0x65e5,0x300,0x31,0x35,0x65e5,0x300,0x31,0x36,0x65e5,0x300,0x31,0x37,0x65e5,0x300,0x31,0x38,
-0x65e5,0x300,0x31,0x39,0x65e5,0x300,0x32,0x30,0x65e5,0x300,0x32,0x31,0x65e5,0x300,0x32,0x32,
-0x65e5,0x300,0x32,0x33,0x65e5,0x300,0x32,0x34,0x65e5,0x300,0x32,0x35,0x65e5,0x300,0x32,0x36,
-0x65e5,0x300,0x32,0x37,0x65e5,0x300,0x32,0x38,0x65e5,0x300,0x32,0x39,0x65e5,0x300,0x33,0x30,
-0x65e5,0x300,0x33,0x31,0x65e5,0x300,0x67,0x61,0x6c,0x200,0x66,0x66,0x200,0x66,0x69,0x200,
-0x66,0x6c,0x300,0x66,0x66,0x69,0x300,0x66,0x66,0x6c,0x200,0x73,0x74,0x200,0x73,0x74,
-0x200,0x574,0x576,0x200,0x574,0x565,0x200,0x574,0x56b,0x200,0x57e,0x576,0x200,0x574,0x56d,0x100,
-0x5e2,0x100,0x5d0,0x100,0x5d3,0x100,0x5d4,0x100,0x5db,0x100,0x5dc,0x100,0x5dd,0x100,0x5e8,0x100,
-0x5ea,0x100,0x2b,0x200,0x5d0,0x5dc,0x100,0x671,0x100,0x671,0x100,0x67b,0x100,0x67b,0x100,0x67b,
-0x100,0x67b,0x100,0x67e,0x100,0x67e,0x100,0x67e,0x100,0x67e,0x100,0x680,0x100,0x680,0x100,0x680,
-0x100,0x680,0x100,0x67a,0x100,0x67a,0x100,0x67a,0x100,0x67a,0x100,0x67f,0x100,0x67f,0x100,0x67f,
-0x100,0x67f,0x100,0x679,0x100,0x679,0x100,0x679,0x100,0x679,0x100,0x6a4,0x100,0x6a4,0x100,0x6a4,
-0x100,0x6a4,0x100,0x6a6,0x100,0x6a6,0x100,0x6a6,0x100,0x6a6,0x100,0x684,0x100,0x684,0x100,0x684,
-0x100,0x684,0x100,0x683,0x100,0x683,0x100,0x683,0x100,0x683,0x100,0x686,0x100,0x686,0x100,0x686,
-0x100,0x686,0x100,0x687,0x100,0x687,0x100,0x687,0x100,0x687,0x100,0x68d,0x100,0x68d,0x100,0x68c,
-0x100,0x68c,0x100,0x68e,0x100,0x68e,0x100,0x688,0x100,0x688,0x100,0x698,0x100,0x698,0x100,0x691,
-0x100,0x691,0x100,0x6a9,0x100,0x6a9,0x100,0x6a9,0x100,0x6a9,0x100,0x6af,0x100,0x6af,0x100,0x6af,
-0x100,0x6af,0x100,0x6b3,0x100,0x6b3,0x100,0x6b3,0x100,0x6b3,0x100,0x6b1,0x100,0x6b1,0x100,0x6b1,
-0x100,0x6b1,0x100,0x6ba,0x100,0x6ba,0x100,0x6bb,0x100,0x6bb,0x100,0x6bb,0x100,0x6bb,0x8200,0xe6,
-0x6d5,0x654,0x8200,0xe6,0x6d5,0x654,0x100,0x6c1,0x100,0x6c1,0x100,0x6c1,0x100,0x6c1,0x100,0x6be,
-0x100,0x6be,0x100,0x6be,0x100,0x6be,0x100,0x6d2,0x100,0x6d2,0x8200,0xe6,0x6d2,0x654,0x8200,0xe6,
-0x6d2,0x654,0x100,0x6ad,0x100,0x6ad,0x100,0x6ad,0x100,0x6ad,0x100,0x6c7,0x100,0x6c7,0x100,0x6c6,
-0x100,0x6c6,0x100,0x6c8,0x100,0x6c8,0x200,0x6c7,0x674,0x100,0x6cb,0x100,0x6cb,0x100,0x6c5,0x100,
-0x6c5,0x100,0x6c9,0x100,0x6c9,0x100,0x6d0,0x100,0x6d0,0x100,0x6d0,0x100,0x6d0,0x100,0x649,0x100,
-0x649,0x300,0x64a,0x654,0x627,0x300,0x64a,0x654,0x627,0x300,0x64a,0x654,0x6d5,0x300,0x64a,0x654,
-0x6d5,0x300,0x64a,0x654,0x648,0x300,0x64a,0x654,0x648,0x300,0x64a,0x654,0x6c7,0x300,0x64a,0x654,
-0x6c7,0x300,0x64a,0x654,0x6c6,0x300,0x64a,0x654,0x6c6,0x300,0x64a,0x654,0x6c8,0x300,0x64a,0x654,
-0x6c8,0x300,0x64a,0x654,0x6d0,0x300,0x64a,0x654,0x6d0,0x300,0x64a,0x654,0x6d0,0x300,0x64a,0x654,
-0x649,0x300,0x64a,0x654,0x649,0x300,0x64a,0x654,0x649,0x100,0x6cc,0x100,0x6cc,0x100,0x6cc,0x100,
-0x6cc,0x300,0x64a,0x654,0x62c,0x300,0x64a,0x654,0x62d,0x300,0x64a,0x654,0x645,0x300,0x64a,0x654,
-0x649,0x300,0x64a,0x654,0x64a,0x200,0x628,0x62c,0x200,0x628,0x62d,0x200,0x628,0x62e,0x200,0x628,
-0x645,0x200,0x628,0x649,0x200,0x628,0x64a,0x200,0x62a,0x62c,0x200,0x62a,0x62d,0x200,0x62a,0x62e,
-0x200,0x62a,0x645,0x200,0x62a,0x649,0x200,0x62a,0x64a,0x200,0x62b,0x62c,0x200,0x62b,0x645,0x200,
-0x62b,0x649,0x200,0x62b,0x64a,0x200,0x62c,0x62d,0x200,0x62c,0x645,0x200,0x62d,0x62c,0x200,0x62d,
-0x645,0x200,0x62e,0x62c,0x200,0x62e,0x62d,0x200,0x62e,0x645,0x200,0x633,0x62c,0x200,0x633,0x62d,
-0x200,0x633,0x62e,0x200,0x633,0x645,0x200,0x635,0x62d,0x200,0x635,0x645,0x200,0x636,0x62c,0x200,
-0x636,0x62d,0x200,0x636,0x62e,0x200,0x636,0x645,0x200,0x637,0x62d,0x200,0x637,0x645,0x200,0x638,
-0x645,0x200,0x639,0x62c,0x200,0x639,0x645,0x200,0x63a,0x62c,0x200,0x63a,0x645,0x200,0x641,0x62c,
-0x200,0x641,0x62d,0x200,0x641,0x62e,0x200,0x641,0x645,0x200,0x641,0x649,0x200,0x641,0x64a,0x200,
-0x642,0x62d,0x200,0x642,0x645,0x200,0x642,0x649,0x200,0x642,0x64a,0x200,0x643,0x627,0x200,0x643,
-0x62c,0x200,0x643,0x62d,0x200,0x643,0x62e,0x200,0x643,0x644,0x200,0x643,0x645,0x200,0x643,0x649,
-0x200,0x643,0x64a,0x200,0x644,0x62c,0x200,0x644,0x62d,0x200,0x644,0x62e,0x200,0x644,0x645,0x200,
-0x644,0x649,0x200,0x644,0x64a,0x200,0x645,0x62c,0x200,0x645,0x62d,0x200,0x645,0x62e,0x200,0x645,
-0x645,0x200,0x645,0x649,0x200,0x645,0x64a,0x200,0x646,0x62c,0x200,0x646,0x62d,0x200,0x646,0x62e,
-0x200,0x646,0x645,0x200,0x646,0x649,0x200,0x646,0x64a,0x200,0x647,0x62c,0x200,0x647,0x645,0x200,
-0x647,0x649,0x200,0x647,0x64a,0x200,0x64a,0x62c,0x200,0x64a,0x62d,0x200,0x64a,0x62e,0x200,0x64a,
-0x645,0x200,0x64a,0x649,0x200,0x64a,0x64a,0x8200,0x23,0x630,0x670,0x8200,0x23,0x631,0x670,0x8200,
-0x23,0x649,0x670,0x8300,0x21,0x20,0x64c,0x651,0x8300,0x21,0x20,0x64d,0x651,0x8300,0x21,0x20,
-0x64e,0x651,0x8300,0x21,0x20,0x64f,0x651,0x8300,0x21,0x20,0x650,0x651,0x8300,0x23,0x20,0x651,
-0x670,0x300,0x64a,0x654,0x631,0x300,0x64a,0x654,0x632,0x300,0x64a,0x654,0x645,0x300,0x64a,0x654,
-0x646,0x300,0x64a,0x654,0x649,0x300,0x64a,0x654,0x64a,0x200,0x628,0x631,0x200,0x628,0x632,0x200,
-0x628,0x645,0x200,0x628,0x646,0x200,0x628,0x649,0x200,0x628,0x64a,0x200,0x62a,0x631,0x200,0x62a,
-0x632,0x200,0x62a,0x645,0x200,0x62a,0x646,0x200,0x62a,0x649,0x200,0x62a,0x64a,0x200,0x62b,0x631,
-0x200,0x62b,0x632,0x200,0x62b,0x645,0x200,0x62b,0x646,0x200,0x62b,0x649,0x200,0x62b,0x64a,0x200,
-0x641,0x649,0x200,0x641,0x64a,0x200,0x642,0x649,0x200,0x642,0x64a,0x200,0x643,0x627,0x200,0x643,
-0x644,0x200,0x643,0x645,0x200,0x643,0x649,0x200,0x643,0x64a,0x200,0x644,0x645,0x200,0x644,0x649,
-0x200,0x644,0x64a,0x200,0x645,0x627,0x200,0x645,0x645,0x200,0x646,0x631,0x200,0x646,0x632,0x200,
-0x646,0x645,0x200,0x646,0x646,0x200,0x646,0x649,0x200,0x646,0x64a,0x8200,0x23,0x649,0x670,0x200,
-0x64a,0x631,0x200,0x64a,0x632,0x200,0x64a,0x645,0x200,0x64a,0x646,0x200,0x64a,0x649,0x200,0x64a,
-0x64a,0x300,0x64a,0x654,0x62c,0x300,0x64a,0x654,0x62d,0x300,0x64a,0x654,0x62e,0x300,0x64a,0x654,
-0x645,0x300,0x64a,0x654,0x647,0x200,0x628,0x62c,0x200,0x628,0x62d,0x200,0x628,0x62e,0x200,0x628,
-0x645,0x200,0x628,0x647,0x200,0x62a,0x62c,0x200,0x62a,0x62d,0x200,0x62a,0x62e,0x200,0x62a,0x645,
-0x200,0x62a,0x647,0x200,0x62b,0x645,0x200,0x62c,0x62d,0x200,0x62c,0x645,0x200,0x62d,0x62c,0x200,
-0x62d,0x645,0x200,0x62e,0x62c,0x200,0x62e,0x645,0x200,0x633,0x62c,0x200,0x633,0x62d,0x200,0x633,
-0x62e,0x200,0x633,0x645,0x200,0x635,0x62d,0x200,0x635,0x62e,0x200,0x635,0x645,0x200,0x636,0x62c,
-0x200,0x636,0x62d,0x200,0x636,0x62e,0x200,0x636,0x645,0x200,0x637,0x62d,0x200,0x638,0x645,0x200,
-0x639,0x62c,0x200,0x639,0x645,0x200,0x63a,0x62c,0x200,0x63a,0x645,0x200,0x641,0x62c,0x200,0x641,
-0x62d,0x200,0x641,0x62e,0x200,0x641,0x645,0x200,0x642,0x62d,0x200,0x642,0x645,0x200,0x643,0x62c,
-0x200,0x643,0x62d,0x200,0x643,0x62e,0x200,0x643,0x644,0x200,0x643,0x645,0x200,0x644,0x62c,0x200,
-0x644,0x62d,0x200,0x644,0x62e,0x200,0x644,0x645,0x200,0x644,0x647,0x200,0x645,0x62c,0x200,0x645,
-0x62d,0x200,0x645,0x62e,0x200,0x645,0x645,0x200,0x646,0x62c,0x200,0x646,0x62d,0x200,0x646,0x62e,
-0x200,0x646,0x645,0x200,0x646,0x647,0x200,0x647,0x62c,0x200,0x647,0x645,0x8200,0x23,0x647,0x670,
-0x200,0x64a,0x62c,0x200,0x64a,0x62d,0x200,0x64a,0x62e,0x200,0x64a,0x645,0x200,0x64a,0x647,0x300,
-0x64a,0x654,0x645,0x300,0x64a,0x654,0x647,0x200,0x628,0x645,0x200,0x628,0x647,0x200,0x62a,0x645,
-0x200,0x62a,0x647,0x200,0x62b,0x645,0x200,0x62b,0x647,0x200,0x633,0x645,0x200,0x633,0x647,0x200,
-0x634,0x645,0x200,0x634,0x647,0x200,0x643,0x644,0x200,0x643,0x645,0x200,0x644,0x645,0x200,0x646,
-0x645,0x200,0x646,0x647,0x200,0x64a,0x645,0x200,0x64a,0x647,0x8300,0x21,0x640,0x64e,0x651,0x8300,
-0x21,0x640,0x64f,0x651,0x8300,0x21,0x640,0x650,0x651,0x200,0x637,0x649,0x200,0x637,0x64a,0x200,
-0x639,0x649,0x200,0x639,0x64a,0x200,0x63a,0x649,0x200,0x63a,0x64a,0x200,0x633,0x649,0x200,0x633,
-0x64a,0x200,0x634,0x649,0x200,0x634,0x64a,0x200,0x62d,0x649,0x200,0x62d,0x64a,0x200,0x62c,0x649,
-0x200,0x62c,0x64a,0x200,0x62e,0x649,0x200,0x62e,0x64a,0x200,0x635,0x649,0x200,0x635,0x64a,0x200,
-0x636,0x649,0x200,0x636,0x64a,0x200,0x634,0x62c,0x200,0x634,0x62d,0x200,0x634,0x62e,0x200,0x634,
-0x645,0x200,0x634,0x631,0x200,0x633,0x631,0x200,0x635,0x631,0x200,0x636,0x631,0x200,0x637,0x649,
-0x200,0x637,0x64a,0x200,0x639,0x649,0x200,0x639,0x64a,0x200,0x63a,0x649,0x200,0x63a,0x64a,0x200,
-0x633,0x649,0x200,0x633,0x64a,0x200,0x634,0x649,0x200,0x634,0x64a,0x200,0x62d,0x649,0x200,0x62d,
-0x64a,0x200,0x62c,0x649,0x200,0x62c,0x64a,0x200,0x62e,0x649,0x200,0x62e,0x64a,0x200,0x635,0x649,
-0x200,0x635,0x64a,0x200,0x636,0x649,0x200,0x636,0x64a,0x200,0x634,0x62c,0x200,0x634,0x62d,0x200,
-0x634,0x62e,0x200,0x634,0x645,0x200,0x634,0x631,0x200,0x633,0x631,0x200,0x635,0x631,0x200,0x636,
-0x631,0x200,0x634,0x62c,0x200,0x634,0x62d,0x200,0x634,0x62e,0x200,0x634,0x645,0x200,0x633,0x647,
-0x200,0x634,0x647,0x200,0x637,0x645,0x200,0x633,0x62c,0x200,0x633,0x62d,0x200,0x633,0x62e,0x200,
-0x634,0x62c,0x200,0x634,0x62d,0x200,0x634,0x62e,0x200,0x637,0x645,0x200,0x638,0x645,0x8200,0x1b,
-0x627,0x64b,0x8200,0x1b,0x627,0x64b,0x300,0x62a,0x62c,0x645,0x300,0x62a,0x62d,0x62c,0x300,0x62a,
-0x62d,0x62c,0x300,0x62a,0x62d,0x645,0x300,0x62a,0x62e,0x645,0x300,0x62a,0x645,0x62c,0x300,0x62a,
-0x645,0x62d,0x300,0x62a,0x645,0x62e,0x300,0x62c,0x645,0x62d,0x300,0x62c,0x645,0x62d,0x300,0x62d,
-0x645,0x64a,0x300,0x62d,0x645,0x649,0x300,0x633,0x62d,0x62c,0x300,0x633,0x62c,0x62d,0x300,0x633,
-0x62c,0x649,0x300,0x633,0x645,0x62d,0x300,0x633,0x645,0x62d,0x300,0x633,0x645,0x62c,0x300,0x633,
-0x645,0x645,0x300,0x633,0x645,0x645,0x300,0x635,0x62d,0x62d,0x300,0x635,0x62d,0x62d,0x300,0x635,
-0x645,0x645,0x300,0x634,0x62d,0x645,0x300,0x634,0x62d,0x645,0x300,0x634,0x62c,0x64a,0x300,0x634,
-0x645,0x62e,0x300,0x634,0x645,0x62e,0x300,0x634,0x645,0x645,0x300,0x634,0x645,0x645,0x300,0x636,
-0x62d,0x649,0x300,0x636,0x62e,0x645,0x300,0x636,0x62e,0x645,0x300,0x637,0x645,0x62d,0x300,0x637,
-0x645,0x62d,0x300,0x637,0x645,0x645,0x300,0x637,0x645,0x64a,0x300,0x639,0x62c,0x645,0x300,0x639,
-0x645,0x645,0x300,0x639,0x645,0x645,0x300,0x639,0x645,0x649,0x300,0x63a,0x645,0x645,0x300,0x63a,
-0x645,0x64a,0x300,0x63a,0x645,0x649,0x300,0x641,0x62e,0x645,0x300,0x641,0x62e,0x645,0x300,0x642,
-0x645,0x62d,0x300,0x642,0x645,0x645,0x300,0x644,0x62d,0x645,0x300,0x644,0x62d,0x64a,0x300,0x644,
-0x62d,0x649,0x300,0x644,0x62c,0x62c,0x300,0x644,0x62c,0x62c,0x300,0x644,0x62e,0x645,0x300,0x644,
-0x62e,0x645,0x300,0x644,0x645,0x62d,0x300,0x644,0x645,0x62d,0x300,0x645,0x62d,0x62c,0x300,0x645,
-0x62d,0x645,0x300,0x645,0x62d,0x64a,0x300,0x645,0x62c,0x62d,0x300,0x645,0x62c,0x645,0x300,0x645,
-0x62e,0x62c,0x300,0x645,0x62e,0x645,0x300,0x645,0x62c,0x62e,0x300,0x647,0x645,0x62c,0x300,0x647,
-0x645,0x645,0x300,0x646,0x62d,0x645,0x300,0x646,0x62d,0x649,0x300,0x646,0x62c,0x645,0x300,0x646,
-0x62c,0x645,0x300,0x646,0x62c,0x649,0x300,0x646,0x645,0x64a,0x300,0x646,0x645,0x649,0x300,0x64a,
-0x645,0x645,0x300,0x64a,0x645,0x645,0x300,0x628,0x62e,0x64a,0x300,0x62a,0x62c,0x64a,0x300,0x62a,
-0x62c,0x649,0x300,0x62a,0x62e,0x64a,0x300,0x62a,0x62e,0x649,0x300,0x62a,0x645,0x64a,0x300,0x62a,
-0x645,0x649,0x300,0x62c,0x645,0x64a,0x300,0x62c,0x62d,0x649,0x300,0x62c,0x645,0x649,0x300,0x633,
-0x62e,0x649,0x300,0x635,0x62d,0x64a,0x300,0x634,0x62d,0x64a,0x300,0x636,0x62d,0x64a,0x300,0x644,
-0x62c,0x64a,0x300,0x644,0x645,0x64a,0x300,0x64a,0x62d,0x64a,0x300,0x64a,0x62c,0x64a,0x300,0x64a,
-0x645,0x64a,0x300,0x645,0x645,0x64a,0x300,0x642,0x645,0x64a,0x300,0x646,0x62d,0x64a,0x300,0x642,
-0x645,0x62d,0x300,0x644,0x62d,0x645,0x300,0x639,0x645,0x64a,0x300,0x643,0x645,0x64a,0x300,0x646,
-0x62c,0x62d,0x300,0x645,0x62e,0x64a,0x300,0x644,0x62c,0x645,0x300,0x643,0x645,0x645,0x300,0x644,
-0x62c,0x645,0x300,0x646,0x62c,0x62d,0x300,0x62c,0x62d,0x64a,0x300,0x62d,0x62c,0x64a,0x300,0x645,
-0x62c,0x64a,0x300,0x641,0x645,0x64a,0x300,0x628,0x62d,0x64a,0x300,0x643,0x645,0x645,0x300,0x639,
-0x62c,0x645,0x300,0x635,0x645,0x645,0x300,0x633,0x62e,0x64a,0x300,0x646,0x62c,0x64a,0x300,0x635,
-0x644,0x6d2,0x300,0x642,0x644,0x6d2,0x400,0x627,0x644,0x644,0x647,0x400,0x627,0x643,0x628,0x631,
-0x400,0x645,0x62d,0x645,0x62f,0x400,0x635,0x644,0x639,0x645,0x400,0x631,0x633,0x648,0x644,0x400,
-0x639,0x644,0x64a,0x647,0x400,0x648,0x633,0x644,0x645,0x300,0x635,0x644,0x649,0x1200,0x635,0x644,
-0x649,0x20,0x627,0x644,0x644,0x647,0x20,0x639,0x644,0x64a,0x647,0x20,0x648,0x633,0x644,0x645,
-0x800,0x62c,0x644,0x20,0x62c,0x644,0x627,0x644,0x647,0x400,0x631,0x6cc,0x627,0x644,0x100,0x2c,
-0x100,0x3001,0x100,0x3002,0x100,0x3a,0x100,0x3b,0x100,0x21,0x100,0x3f,0x100,0x3016,0x100,0x3017,
-0x300,0x2e,0x2e,0x2e,0x200,0x2e,0x2e,0x100,0x2014,0x100,0x2013,0x100,0x5f,0x100,0x5f,0x100,
-0x28,0x100,0x29,0x100,0x7b,0x100,0x7d,0x100,0x3014,0x100,0x3015,0x100,0x3010,0x100,0x3011,0x100,
-0x300a,0x100,0x300b,0x100,0x3008,0x100,0x3009,0x100,0x300c,0x100,0x300d,0x100,0x300e,0x100,0x300f,0x100,
-0x5b,0x100,0x5d,0x8200,0xe6,0x20,0x305,0x8200,0xe6,0x20,0x305,0x8200,0xe6,0x20,0x305,0x8200,
-0xe6,0x20,0x305,0x100,0x5f,0x100,0x5f,0x100,0x5f,0x100,0x2c,0x100,0x3001,0x100,0x2e,0x100,
-0x3b,0x100,0x3a,0x100,0x3f,0x100,0x21,0x100,0x2014,0x100,0x28,0x100,0x29,0x100,0x7b,0x100,
-0x7d,0x100,0x3014,0x100,0x3015,0x100,0x23,0x100,0x26,0x100,0x2a,0x100,0x2b,0x100,0x2d,0x100,
-0x3c,0x100,0x3e,0x100,0x3d,0x100,0x5c,0x100,0x24,0x100,0x25,0x100,0x40,0x8200,0x1b,0x20,
-0x64b,0x8200,0x1b,0x640,0x64b,0x8200,0x1c,0x20,0x64c,0x8200,0x1d,0x20,0x64d,0x8200,0x1e,0x20,
-0x64e,0x8200,0x1e,0x640,0x64e,0x8200,0x1f,0x20,0x64f,0x8200,0x1f,0x640,0x64f,0x8200,0x20,0x20,
-0x650,0x8200,0x20,0x640,0x650,0x8200,0x21,0x20,0x651,0x8200,0x21,0x640,0x651,0x8200,0x22,0x20,
-0x652,0x8200,0x22,0x640,0x652,0x100,0x621,0x8200,0xe6,0x627,0x653,0x8200,0xe6,0x627,0x653,0x8200,
-0xe6,0x627,0x654,0x8200,0xe6,0x627,0x654,0x8200,0xe6,0x648,0x654,0x8200,0xe6,0x648,0x654,0x8200,
-0xdc,0x627,0x655,0x8200,0xdc,0x627,0x655,0x8200,0xe6,0x64a,0x654,0x8200,0xe6,0x64a,0x654,0x8200,
-0xe6,0x64a,0x654,0x8200,0xe6,0x64a,0x654,0x100,0x627,0x100,0x627,0x100,0x628,0x100,0x628,0x100,
-0x628,0x100,0x628,0x100,0x629,0x100,0x629,0x100,0x62a,0x100,0x62a,0x100,0x62a,0x100,0x62a,0x100,
-0x62b,0x100,0x62b,0x100,0x62b,0x100,0x62b,0x100,0x62c,0x100,0x62c,0x100,0x62c,0x100,0x62c,0x100,
-0x62d,0x100,0x62d,0x100,0x62d,0x100,0x62d,0x100,0x62e,0x100,0x62e,0x100,0x62e,0x100,0x62e,0x100,
-0x62f,0x100,0x62f,0x100,0x630,0x100,0x630,0x100,0x631,0x100,0x631,0x100,0x632,0x100,0x632,0x100,
-0x633,0x100,0x633,0x100,0x633,0x100,0x633,0x100,0x634,0x100,0x634,0x100,0x634,0x100,0x634,0x100,
-0x635,0x100,0x635,0x100,0x635,0x100,0x635,0x100,0x636,0x100,0x636,0x100,0x636,0x100,0x636,0x100,
-0x637,0x100,0x637,0x100,0x637,0x100,0x637,0x100,0x638,0x100,0x638,0x100,0x638,0x100,0x638,0x100,
-0x639,0x100,0x639,0x100,0x639,0x100,0x639,0x100,0x63a,0x100,0x63a,0x100,0x63a,0x100,0x63a,0x100,
-0x641,0x100,0x641,0x100,0x641,0x100,0x641,0x100,0x642,0x100,0x642,0x100,0x642,0x100,0x642,0x100,
-0x643,0x100,0x643,0x100,0x643,0x100,0x643,0x100,0x644,0x100,0x644,0x100,0x644,0x100,0x644,0x100,
-0x645,0x100,0x645,0x100,0x645,0x100,0x645,0x100,0x646,0x100,0x646,0x100,0x646,0x100,0x646,0x100,
-0x647,0x100,0x647,0x100,0x647,0x100,0x647,0x100,0x648,0x100,0x648,0x100,0x649,0x100,0x649,0x100,
-0x64a,0x100,0x64a,0x100,0x64a,0x100,0x64a,0x8300,0xe6,0x644,0x627,0x653,0x8300,0xe6,0x644,0x627,
-0x653,0x8300,0xe6,0x644,0x627,0x654,0x8300,0xe6,0x644,0x627,0x654,0x8300,0xdc,0x644,0x627,0x655,
-0x8300,0xdc,0x644,0x627,0x655,0x200,0x644,0x627,0x200,0x644,0x627,0x100,0x21,0x100,0x22,0x100,
-0x23,0x100,0x24,0x100,0x25,0x100,0x26,0x100,0x27,0x100,0x28,0x100,0x29,0x100,0x2a,0x100,
-0x2b,0x100,0x2c,0x100,0x2d,0x100,0x2e,0x100,0x2f,0x100,0x30,0x100,0x31,0x100,0x32,0x100,
-0x33,0x100,0x34,0x100,0x35,0x100,0x36,0x100,0x37,0x100,0x38,0x100,0x39,0x100,0x3a,0x100,
-0x3b,0x100,0x3c,0x100,0x3d,0x100,0x3e,0x100,0x3f,0x100,0x40,0x100,0x41,0x100,0x42,0x100,
-0x43,0x100,0x44,0x100,0x45,0x100,0x46,0x100,0x47,0x100,0x48,0x100,0x49,0x100,0x4a,0x100,
-0x4b,0x100,0x4c,0x100,0x4d,0x100,0x4e,0x100,0x4f,0x100,0x50,0x100,0x51,0x100,0x52,0x100,
-0x53,0x100,0x54,0x100,0x55,0x100,0x56,0x100,0x57,0x100,0x58,0x100,0x59,0x100,0x5a,0x100,
-0x5b,0x100,0x5c,0x100,0x5d,0x100,0x5e,0x100,0x5f,0x100,0x60,0x100,0x61,0x100,0x62,0x100,
-0x63,0x100,0x64,0x100,0x65,0x100,0x66,0x100,0x67,0x100,0x68,0x100,0x69,0x100,0x6a,0x100,
+0x74,0x100,0x75,0x100,0x76,0x100,0x77,0x100,0x78,0x100,0x79,0x100,0x7a,0x100,0x61,0x100,
+0x62,0x100,0x63,0x100,0x64,0x100,0x65,0x100,0x66,0x100,0x67,0x100,0x69,0x100,0x6a,0x100,
0x6b,0x100,0x6c,0x100,0x6d,0x100,0x6e,0x100,0x6f,0x100,0x70,0x100,0x71,0x100,0x72,0x100,
0x73,0x100,0x74,0x100,0x75,0x100,0x76,0x100,0x77,0x100,0x78,0x100,0x79,0x100,0x7a,0x100,
-0x7b,0x100,0x7c,0x100,0x7d,0x100,0x7e,0x100,0x2985,0x100,0x2986,0x100,0x3002,0x100,0x300c,0x100,
-0x300d,0x100,0x3001,0x100,0x30fb,0x100,0x30f2,0x100,0x30a1,0x100,0x30a3,0x100,0x30a5,0x100,0x30a7,0x100,
-0x30a9,0x100,0x30e3,0x100,0x30e5,0x100,0x30e7,0x100,0x30c3,0x100,0x30fc,0x100,0x30a2,0x100,0x30a4,0x100,
-0x30a6,0x100,0x30a8,0x100,0x30aa,0x100,0x30ab,0x100,0x30ad,0x100,0x30af,0x100,0x30b1,0x100,0x30b3,0x100,
-0x30b5,0x100,0x30b7,0x100,0x30b9,0x100,0x30bb,0x100,0x30bd,0x100,0x30bf,0x100,0x30c1,0x100,0x30c4,0x100,
-0x30c6,0x100,0x30c8,0x100,0x30ca,0x100,0x30cb,0x100,0x30cc,0x100,0x30cd,0x100,0x30ce,0x100,0x30cf,0x100,
-0x30d2,0x100,0x30d5,0x100,0x30d8,0x100,0x30db,0x100,0x30de,0x100,0x30df,0x100,0x30e0,0x100,0x30e1,0x100,
-0x30e2,0x100,0x30e4,0x100,0x30e6,0x100,0x30e8,0x100,0x30e9,0x100,0x30ea,0x100,0x30eb,0x100,0x30ec,0x100,
-0x30ed,0x100,0x30ef,0x100,0x30f3,0x8100,0x808,0x3099,0x8100,0x808,0x309a,0x100,0x1160,0x100,0x1100,0x100,
-0x1101,0x100,0x11aa,0x100,0x1102,0x100,0x11ac,0x100,0x11ad,0x100,0x1103,0x100,0x1104,0x100,0x1105,0x100,
-0x11b0,0x100,0x11b1,0x100,0x11b2,0x100,0x11b3,0x100,0x11b4,0x100,0x11b5,0x100,0x111a,0x100,0x1106,0x100,
-0x1107,0x100,0x1108,0x100,0x1121,0x100,0x1109,0x100,0x110a,0x100,0x110b,0x100,0x110c,0x100,0x110d,0x100,
-0x110e,0x100,0x110f,0x100,0x1110,0x100,0x1111,0x100,0x1112,0x100,0x1161,0x100,0x1162,0x100,0x1163,0x100,
-0x1164,0x100,0x1165,0x100,0x1166,0x100,0x1167,0x100,0x1168,0x100,0x1169,0x100,0x116a,0x100,0x116b,0x100,
-0x116c,0x100,0x116d,0x100,0x116e,0x100,0x116f,0x100,0x1170,0x100,0x1171,0x100,0x1172,0x100,0x1173,0x100,
-0x1174,0x100,0x1175,0x100,0xa2,0x100,0xa3,0x100,0xac,0x8200,0xe6,0x20,0x304,0x100,0xa6,0x100,
-0xa5,0x100,0x20a9,0x100,0x2502,0x100,0x2190,0x100,0x2191,0x100,0x2192,0x100,0x2193,0x100,0x25a0,0x100,
-0x25cb,0x100,0x61,0x100,0x62,0x100,0x63,0x100,0x64,0x100,0x65,0x100,0x66,0x100,0x67,0x100,
+0x61,0x100,0x62,0x100,0x63,0x100,0x64,0x100,0x65,0x100,0x66,0x100,0x67,0x100,0x68,0x100,
+0x69,0x100,0x6a,0x100,0x6b,0x100,0x6c,0x100,0x6d,0x100,0x6e,0x100,0x6f,0x100,0x70,0x100,
+0x71,0x100,0x72,0x100,0x73,0x100,0x74,0x100,0x75,0x100,0x76,0x100,0x77,0x100,0x78,0x100,
+0x79,0x100,0x7a,0x100,0x61,0x100,0x62,0x100,0x63,0x100,0x64,0x100,0x66,0x100,0x68,0x100,
+0x69,0x100,0x6a,0x100,0x6b,0x100,0x6c,0x100,0x6d,0x100,0x6e,0x100,0x70,0x100,0x71,0x100,
+0x72,0x100,0x73,0x100,0x74,0x100,0x75,0x100,0x76,0x100,0x77,0x100,0x78,0x100,0x79,0x100,
+0x7a,0x100,0x61,0x100,0x62,0x100,0x63,0x100,0x64,0x100,0x65,0x100,0x66,0x100,0x67,0x100,
0x68,0x100,0x69,0x100,0x6a,0x100,0x6b,0x100,0x6c,0x100,0x6d,0x100,0x6e,0x100,0x6f,0x100,
0x70,0x100,0x71,0x100,0x72,0x100,0x73,0x100,0x74,0x100,0x75,0x100,0x76,0x100,0x77,0x100,
0x78,0x100,0x79,0x100,0x7a,0x100,0x61,0x100,0x62,0x100,0x63,0x100,0x64,0x100,0x65,0x100,
-0x66,0x100,0x67,0x100,0x69,0x100,0x6a,0x100,0x6b,0x100,0x6c,0x100,0x6d,0x100,0x6e,0x100,
-0x6f,0x100,0x70,0x100,0x71,0x100,0x72,0x100,0x73,0x100,0x74,0x100,0x75,0x100,0x76,0x100,
-0x77,0x100,0x78,0x100,0x79,0x100,0x7a,0x100,0x61,0x100,0x62,0x100,0x63,0x100,0x64,0x100,
-0x65,0x100,0x66,0x100,0x67,0x100,0x68,0x100,0x69,0x100,0x6a,0x100,0x6b,0x100,0x6c,0x100,
-0x6d,0x100,0x6e,0x100,0x6f,0x100,0x70,0x100,0x71,0x100,0x72,0x100,0x73,0x100,0x74,0x100,
-0x75,0x100,0x76,0x100,0x77,0x100,0x78,0x100,0x79,0x100,0x7a,0x100,0x61,0x100,0x62,0x100,
-0x63,0x100,0x64,0x100,0x66,0x100,0x68,0x100,0x69,0x100,0x6a,0x100,0x6b,0x100,0x6c,0x100,
-0x6d,0x100,0x6e,0x100,0x70,0x100,0x71,0x100,0x72,0x100,0x73,0x100,0x74,0x100,0x75,0x100,
+0x66,0x100,0x67,0x100,0x68,0x100,0x69,0x100,0x6a,0x100,0x6b,0x100,0x6c,0x100,0x6d,0x100,
+0x6e,0x100,0x6f,0x100,0x70,0x100,0x71,0x100,0x72,0x100,0x73,0x100,0x74,0x100,0x75,0x100,
0x76,0x100,0x77,0x100,0x78,0x100,0x79,0x100,0x7a,0x100,0x61,0x100,0x62,0x100,0x63,0x100,
0x64,0x100,0x65,0x100,0x66,0x100,0x67,0x100,0x68,0x100,0x69,0x100,0x6a,0x100,0x6b,0x100,
0x6c,0x100,0x6d,0x100,0x6e,0x100,0x6f,0x100,0x70,0x100,0x71,0x100,0x72,0x100,0x73,0x100,
@@ -1781,54 +1817,48 @@ static const uint16_t extraData[15947]={
0x7a,0x100,0x61,0x100,0x62,0x100,0x63,0x100,0x64,0x100,0x65,0x100,0x66,0x100,0x67,0x100,
0x68,0x100,0x69,0x100,0x6a,0x100,0x6b,0x100,0x6c,0x100,0x6d,0x100,0x6e,0x100,0x6f,0x100,
0x70,0x100,0x71,0x100,0x72,0x100,0x73,0x100,0x74,0x100,0x75,0x100,0x76,0x100,0x77,0x100,
-0x78,0x100,0x79,0x100,0x7a,0x100,0x61,0x100,0x62,0x100,0x63,0x100,0x64,0x100,0x65,0x100,
-0x66,0x100,0x67,0x100,0x68,0x100,0x69,0x100,0x6a,0x100,0x6b,0x100,0x6c,0x100,0x6d,0x100,
-0x6e,0x100,0x6f,0x100,0x70,0x100,0x71,0x100,0x72,0x100,0x73,0x100,0x74,0x100,0x75,0x100,
-0x76,0x100,0x77,0x100,0x78,0x100,0x79,0x100,0x7a,0x100,0x61,0x100,0x62,0x100,0x63,0x100,
-0x64,0x100,0x65,0x100,0x66,0x100,0x67,0x100,0x68,0x100,0x69,0x100,0x6a,0x100,0x6b,0x100,
-0x6c,0x100,0x6d,0x100,0x6e,0x100,0x6f,0x100,0x70,0x100,0x71,0x100,0x72,0x100,0x73,0x100,
-0x74,0x100,0x75,0x100,0x76,0x100,0x77,0x100,0x78,0x100,0x79,0x100,0x7a,0x100,0x131,0x100,
-0x237,0x100,0x2207,0x100,0x3b1,0x100,0x3b2,0x100,0x3b3,0x100,0x3b4,0x100,0x3b5,0x100,0x3b6,0x100,
-0x3b7,0x100,0x3b8,0x100,0x3b9,0x100,0x3ba,0x100,0x3bb,0x100,0x3bc,0x100,0x3bd,0x100,0x3be,0x100,
-0x3bf,0x100,0x3c0,0x100,0x3c1,0x100,0x3c3,0x100,0x3c4,0x100,0x3c5,0x100,0x3c6,0x100,0x3c7,0x100,
-0x3c8,0x100,0x3c9,0x100,0x2202,0x100,0x3b5,0x100,0x3b8,0x100,0x3ba,0x100,0x3c6,0x100,0x3c1,0x100,
-0x3c0,0x100,0x2207,0x100,0x3b1,0x100,0x3b2,0x100,0x3b3,0x100,0x3b4,0x100,0x3b5,0x100,0x3b6,0x100,
-0x3b7,0x100,0x3b8,0x100,0x3b9,0x100,0x3ba,0x100,0x3bb,0x100,0x3bc,0x100,0x3bd,0x100,0x3be,0x100,
-0x3bf,0x100,0x3c0,0x100,0x3c1,0x100,0x3c3,0x100,0x3c4,0x100,0x3c5,0x100,0x3c6,0x100,0x3c7,0x100,
-0x3c8,0x100,0x3c9,0x100,0x2202,0x100,0x3b5,0x100,0x3b8,0x100,0x3ba,0x100,0x3c6,0x100,0x3c1,0x100,
-0x3c0,0x100,0x2207,0x100,0x3b1,0x100,0x3b2,0x100,0x3b3,0x100,0x3b4,0x100,0x3b5,0x100,0x3b6,0x100,
-0x3b7,0x100,0x3b8,0x100,0x3b9,0x100,0x3ba,0x100,0x3bb,0x100,0x3bc,0x100,0x3bd,0x100,0x3be,0x100,
-0x3bf,0x100,0x3c0,0x100,0x3c1,0x100,0x3c3,0x100,0x3c4,0x100,0x3c5,0x100,0x3c6,0x100,0x3c7,0x100,
-0x3c8,0x100,0x3c9,0x100,0x2202,0x100,0x3b5,0x100,0x3b8,0x100,0x3ba,0x100,0x3c6,0x100,0x3c1,0x100,
-0x3c0,0x100,0x2207,0x100,0x3b1,0x100,0x3b2,0x100,0x3b3,0x100,0x3b4,0x100,0x3b5,0x100,0x3b6,0x100,
-0x3b7,0x100,0x3b8,0x100,0x3b9,0x100,0x3ba,0x100,0x3bb,0x100,0x3bc,0x100,0x3bd,0x100,0x3be,0x100,
-0x3bf,0x100,0x3c0,0x100,0x3c1,0x100,0x3c3,0x100,0x3c4,0x100,0x3c5,0x100,0x3c6,0x100,0x3c7,0x100,
-0x3c8,0x100,0x3c9,0x100,0x2202,0x100,0x3b5,0x100,0x3b8,0x100,0x3ba,0x100,0x3c6,0x100,0x3c1,0x100,
-0x3c0,0x100,0x2207,0x100,0x3b1,0x100,0x3b2,0x100,0x3b3,0x100,0x3b4,0x100,0x3b5,0x100,0x3b6,0x100,
-0x3b7,0x100,0x3b8,0x100,0x3b9,0x100,0x3ba,0x100,0x3bb,0x100,0x3bc,0x100,0x3bd,0x100,0x3be,0x100,
-0x3bf,0x100,0x3c0,0x100,0x3c1,0x100,0x3c3,0x100,0x3c4,0x100,0x3c5,0x100,0x3c6,0x100,0x3c7,0x100,
-0x3c8,0x100,0x3c9,0x100,0x2202,0x100,0x3b5,0x100,0x3b8,0x100,0x3ba,0x100,0x3c6,0x100,0x3c1,0x100,
-0x3c0,0x100,0x3dd,0x100,0x30,0x100,0x31,0x100,0x32,0x100,0x33,0x100,0x34,0x100,0x35,0x100,
-0x36,0x100,0x37,0x100,0x38,0x100,0x39,0x100,0x30,0x100,0x31,0x100,0x32,0x100,0x33,0x100,
-0x34,0x100,0x35,0x100,0x36,0x100,0x37,0x100,0x38,0x100,0x39,0x100,0x30,0x100,0x31,0x100,
+0x78,0x100,0x79,0x100,0x7a,0x100,0x131,0x100,0x237,0x100,0x2207,0x100,0x3b1,0x100,0x3b2,0x100,
+0x3b3,0x100,0x3b4,0x100,0x3b5,0x100,0x3b6,0x100,0x3b7,0x100,0x3b8,0x100,0x3b9,0x100,0x3ba,0x100,
+0x3bb,0x100,0x3bc,0x100,0x3bd,0x100,0x3be,0x100,0x3bf,0x100,0x3c0,0x100,0x3c1,0x100,0x3c3,0x100,
+0x3c4,0x100,0x3c5,0x100,0x3c6,0x100,0x3c7,0x100,0x3c8,0x100,0x3c9,0x100,0x2202,0x100,0x3b5,0x100,
+0x3b8,0x100,0x3ba,0x100,0x3c6,0x100,0x3c1,0x100,0x3c0,0x100,0x2207,0x100,0x3b1,0x100,0x3b2,0x100,
+0x3b3,0x100,0x3b4,0x100,0x3b5,0x100,0x3b6,0x100,0x3b7,0x100,0x3b8,0x100,0x3b9,0x100,0x3ba,0x100,
+0x3bb,0x100,0x3bc,0x100,0x3bd,0x100,0x3be,0x100,0x3bf,0x100,0x3c0,0x100,0x3c1,0x100,0x3c3,0x100,
+0x3c4,0x100,0x3c5,0x100,0x3c6,0x100,0x3c7,0x100,0x3c8,0x100,0x3c9,0x100,0x2202,0x100,0x3b5,0x100,
+0x3b8,0x100,0x3ba,0x100,0x3c6,0x100,0x3c1,0x100,0x3c0,0x100,0x2207,0x100,0x3b1,0x100,0x3b2,0x100,
+0x3b3,0x100,0x3b4,0x100,0x3b5,0x100,0x3b6,0x100,0x3b7,0x100,0x3b8,0x100,0x3b9,0x100,0x3ba,0x100,
+0x3bb,0x100,0x3bc,0x100,0x3bd,0x100,0x3be,0x100,0x3bf,0x100,0x3c0,0x100,0x3c1,0x100,0x3c3,0x100,
+0x3c4,0x100,0x3c5,0x100,0x3c6,0x100,0x3c7,0x100,0x3c8,0x100,0x3c9,0x100,0x2202,0x100,0x3b5,0x100,
+0x3b8,0x100,0x3ba,0x100,0x3c6,0x100,0x3c1,0x100,0x3c0,0x100,0x2207,0x100,0x3b1,0x100,0x3b2,0x100,
+0x3b3,0x100,0x3b4,0x100,0x3b5,0x100,0x3b6,0x100,0x3b7,0x100,0x3b8,0x100,0x3b9,0x100,0x3ba,0x100,
+0x3bb,0x100,0x3bc,0x100,0x3bd,0x100,0x3be,0x100,0x3bf,0x100,0x3c0,0x100,0x3c1,0x100,0x3c3,0x100,
+0x3c4,0x100,0x3c5,0x100,0x3c6,0x100,0x3c7,0x100,0x3c8,0x100,0x3c9,0x100,0x2202,0x100,0x3b5,0x100,
+0x3b8,0x100,0x3ba,0x100,0x3c6,0x100,0x3c1,0x100,0x3c0,0x100,0x2207,0x100,0x3b1,0x100,0x3b2,0x100,
+0x3b3,0x100,0x3b4,0x100,0x3b5,0x100,0x3b6,0x100,0x3b7,0x100,0x3b8,0x100,0x3b9,0x100,0x3ba,0x100,
+0x3bb,0x100,0x3bc,0x100,0x3bd,0x100,0x3be,0x100,0x3bf,0x100,0x3c0,0x100,0x3c1,0x100,0x3c3,0x100,
+0x3c4,0x100,0x3c5,0x100,0x3c6,0x100,0x3c7,0x100,0x3c8,0x100,0x3c9,0x100,0x2202,0x100,0x3b5,0x100,
+0x3b8,0x100,0x3ba,0x100,0x3c6,0x100,0x3c1,0x100,0x3c0,0x100,0x3dd,0x100,0x30,0x100,0x31,0x100,
0x32,0x100,0x33,0x100,0x34,0x100,0x35,0x100,0x36,0x100,0x37,0x100,0x38,0x100,0x39,0x100,
0x30,0x100,0x31,0x100,0x32,0x100,0x33,0x100,0x34,0x100,0x35,0x100,0x36,0x100,0x37,0x100,
0x38,0x100,0x39,0x100,0x30,0x100,0x31,0x100,0x32,0x100,0x33,0x100,0x34,0x100,0x35,0x100,
-0x36,0x100,0x37,0x100,0x38,0x100,0x39,0,0x20,0x2a,0x4c,0x6a,0x7c,0x9c,0xc2,0xd4,
-0xf4,0xfe,0x120,0x13c,0x14e,0x16e,0x194,0x1a8,0x1b4,0x1c0,0x1ce,0x1dc,0x1ea,0x1fa,0x1fc,0x200,
-0x20a,0x214,0x220,0x22c,0x23c,0x24c,0x25a,0x268,0x276,0x286,0x292,0x2a0,0x2ac,0x2d0,0x2d4,0x2dc,
-0x2de,0x2e4,0x2e6,0x302,0x310,0x318,0x322,0x330,0x338,0x344,0x354,0x364,0x36c,0x378,0x38e,0x39e,
-0x3a6,0x3b6,0x3bc,0x3be,0x3c0,0x3c2,0x3ca,0x3d2,0x3da,0x3e0,0x3e2,0x3e4,0x3e6,0x3ee,0x3f0,0x3f2,
-0x3f6,0x3fa,0x3fe,0x402,0x404,0x406,0x408,0x40a,0x40c,0x40e,0x410,0x412,0x414,0x416,0x418,0x41a,
-0x41c,0x41e,0x424,0x426,0x428,0x42a,0x42c,0x42e,0x430,0x432,0x434,0x438,0x43e,0x440,0x444,0x446,
-0x448,0x44a,0x452,0x456,0x458,0x460,0x462,0x464,0x466,0x468,0x46a,0x46c,0x46e,0x470,0x472,0x474,
-0x476,0x478,0x47e,0x494,0x496,0x4a0,0x4a6,0x4b4,0x4b8,0x4d4,0x4d8,0x4dc,0x4e0,0x668,0x66c,0x674,
-0x677,0x67a,0x67d,0x680,0x683,0x686,0x689,0x68c,0x68f,0x692,0x695,0x698,0x69b,0x69e,0x6a1,0x6a4,
-0x6a7,0x6aa,0x6ad,0x6b0,0x6b3,0x6b6,0x6b9,0x6bc,0x6bf,0x6c2,0x6c5,0x6c8,0x6cb,0x6ce,0x6d1,0x6d4,
-0x6d7,0x6da,0x6dd,0x6e0,0x6e3,0x6e6,0x6e9,0x6ec,0x6ef,0x6f2,0x6f5,0x6f8,0x6fb,0x6fe,0x701,0x704,
-0x707,0x70a,0x70d,0x710,0x713,0x716,0x719,0x71c,0x71f,0x722,0x725,0x72b,0x731,0x737,0x73d,0x743,
-0x746,0x749,0x74c,0x74f,0x752,0x755,0x758,0x75b,0x75e,0x761,0x764,0x767,0x76a,0x76d,0x770,0x773,
-0x776,0x77c,0x782,0x788,0x78e,0x794,0x797,0x79a,0x79d,0x7a0,0x7a3
+0x36,0x100,0x37,0x100,0x38,0x100,0x39,0x100,0x30,0x100,0x31,0x100,0x32,0x100,0x33,0x100,
+0x34,0x100,0x35,0x100,0x36,0x100,0x37,0x100,0x38,0x100,0x39,0x100,0x30,0x100,0x31,0x100,
+0x32,0x100,0x33,0x100,0x34,0x100,0x35,0x100,0x36,0x100,0x37,0x100,0x38,0x100,0x39,0,
+0x20,0x2a,0x4c,0x6a,0x7c,0x9c,0xc2,0xd4,0xf4,0xfe,0x120,0x13c,0x14e,0x16e,0x194,0x1a8,
+0x1b4,0x1c0,0x1ce,0x1dc,0x1ea,0x1fa,0x1fc,0x200,0x20a,0x214,0x220,0x22c,0x23c,0x24c,0x25a,0x268,
+0x276,0x286,0x292,0x2a0,0x2ac,0x2d0,0x2d4,0x2dc,0x2de,0x2e4,0x2e6,0x302,0x310,0x318,0x322,0x330,
+0x338,0x344,0x354,0x364,0x36c,0x378,0x38e,0x39e,0x3a6,0x3b6,0x3bc,0x3be,0x3c0,0x3c2,0x3ca,0x3d2,
+0x3da,0x3e0,0x3e2,0x3e4,0x3e6,0x3ee,0x3f0,0x3f2,0x3f6,0x3fa,0x3fe,0x402,0x404,0x406,0x408,0x40a,
+0x40c,0x40e,0x410,0x412,0x414,0x416,0x418,0x41a,0x41c,0x41e,0x424,0x426,0x428,0x42a,0x42c,0x42e,
+0x430,0x432,0x434,0x438,0x43e,0x440,0x444,0x446,0x448,0x44a,0x452,0x456,0x458,0x460,0x462,0x464,
+0x466,0x468,0x46a,0x46c,0x46e,0x470,0x472,0x474,0x476,0x478,0x47e,0x494,0x496,0x4a0,0x4a6,0x4b4,
+0x4b8,0x4d4,0x4d8,0x4dc,0x4e0,0x668,0x66c,0x674,0x677,0x67a,0x67d,0x680,0x683,0x686,0x689,0x68c,
+0x68f,0x692,0x695,0x698,0x69b,0x69e,0x6a1,0x6a4,0x6a7,0x6aa,0x6ad,0x6b0,0x6b3,0x6b6,0x6b9,0x6bc,
+0x6bf,0x6c2,0x6c5,0x6c8,0x6cb,0x6ce,0x6d1,0x6d4,0x6d7,0x6da,0x6dd,0x6e0,0x6e3,0x6e6,0x6e9,0x6ec,
+0x6ef,0x6f2,0x6f5,0x6f8,0x6fb,0x6fe,0x701,0x704,0x707,0x70a,0x70d,0x710,0x713,0x716,0x719,0x71c,
+0x71f,0x722,0x725,0x72b,0x731,0x737,0x73d,0x743,0x746,0x749,0x74c,0x74f,0x752,0x755,0x758,0x75b,
+0x75e,0x761,0x764,0x767,0x76a,0x76d,0x770,0x773,0x776,0x77c,0x782,0x788,0x78e,0x794,0x797,0x79a,
+0x79d,0x7a0,0x7a3
};
static const uint16_t combiningTable[1959]={
@@ -1958,156 +1988,162 @@ static const uint16_t combiningTable[1959]={
};
#ifndef U_DARWIN
-static const uint16_t fcdTrie_index[5496]={
+static const uint16_t fcdTrie_index[5776]={
#else /* U_DARWIN */
-static const uint16_t fcdTrie_index[5532]={
+static const uint16_t fcdTrie_index[5812]={
#endif /* U_DARWIN */
-0x218,0x218,0x218,0x218,0x218,0x218,0x2d5,0x2dd,0x2e5,0x2ed,0x2f5,0x2fc,0x218,0x304,0x309,0x311,
-0x317,0x31f,0x218,0x218,0x218,0x218,0x218,0x218,0x456,0x45e,0x234,0x220,0x23c,0x325,0x226,0x218,
-0x32d,0x334,0x33b,0x343,0x4ab,0x218,0x34b,0x351,0x218,0x218,0x218,0x218,0x476,0x4b3,0x4bb,0x218,
-0x4bf,0x359,0x466,0x47e,0x218,0x218,0x361,0x4c7,0x4cb,0x4d0,0x4d8,0x218,0x218,0x218,0x218,0x4de,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x369,0x241,0x218,0x218,0x46e,0x249,0x218,
-0x218,0x251,0x259,0x218,0x218,0x46e,0x371,0x218,0x218,0x46e,0x261,0x218,0x218,0x218,0x371,0x218,
-0x218,0x218,0x377,0x218,0x218,0x46e,0x371,0x218,0x218,0x218,0x371,0x218,0x218,0x218,0x37d,0x218,
-0x218,0x483,0x4e4,0x218,0x218,0x48a,0x491,0x218,0x494,0x4e7,0x218,0x269,0x271,0x218,0x4ee,0x218,
-0x218,0x385,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x4a4,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x4f1,0x4f1,0x218,0x218,0x218,0x218,0x4f7,0x218,
-0x218,0x218,0x218,0x218,0x218,0x4ff,0x218,0x218,0x218,0x502,0x218,0x218,0x218,0x218,0x218,0x218,
-0x509,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x38c,0x393,0x510,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x518,0x51b,
-0x39b,0x3a2,0x3aa,0x3b1,0x3b9,0x3c1,0x3c8,0x3d0,0x3d8,0x3e0,0x3e7,0x279,0x3ef,0x281,0x289,0x291,
-0x218,0x218,0x218,0x218,0x218,0x218,0x523,0x52b,0x218,0x22c,0x218,0x218,0x3f7,0x3fe,0x403,0x218,
-0x40a,0x411,0x419,0x421,0x425,0x42a,0x218,0x432,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x299,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x49b,0x437,0x43e,0x446,0x437,0x43e,0x44e,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x532,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
+0x220,0x220,0x220,0x220,0x220,0x220,0x2dd,0x2e5,0x2ed,0x2f5,0x2fd,0x304,0x220,0x30c,0x311,0x319,
+0x31f,0x327,0x220,0x220,0x220,0x220,0x220,0x220,0x45e,0x466,0x23c,0x228,0x244,0x32d,0x22e,0x220,
+0x335,0x33c,0x343,0x34b,0x4b3,0x220,0x353,0x359,0x220,0x220,0x220,0x220,0x47e,0x4bb,0x4c3,0x220,
+0x4c7,0x361,0x46e,0x486,0x220,0x220,0x369,0x4cf,0x4d3,0x4d8,0x4e0,0x220,0x220,0x220,0x220,0x4e6,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x371,0x249,0x220,0x220,0x476,0x251,0x220,
+0x220,0x259,0x261,0x220,0x220,0x476,0x379,0x220,0x220,0x476,0x269,0x220,0x220,0x220,0x379,0x220,
+0x220,0x220,0x37f,0x220,0x220,0x476,0x379,0x220,0x220,0x220,0x379,0x220,0x220,0x220,0x385,0x220,
+0x220,0x48b,0x4ec,0x220,0x220,0x492,0x499,0x220,0x49c,0x4ef,0x220,0x271,0x279,0x220,0x4f6,0x220,
+0x220,0x38d,0x220,0x220,0x4fb,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x4ff,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x507,0x507,0x220,0x220,0x220,0x220,0x50d,0x220,
+0x220,0x220,0x220,0x220,0x220,0x515,0x220,0x220,0x220,0x518,0x220,0x220,0x220,0x220,0x220,0x220,
+0x51f,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x394,0x39b,0x526,0x220,0x52c,0x220,0x220,
+0x220,0x52f,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x537,0x53e,
+0x3a3,0x3aa,0x3b2,0x3b9,0x3c1,0x3c9,0x3d0,0x3d8,0x3e0,0x3e8,0x3ef,0x281,0x3f7,0x289,0x291,0x299,
+0x220,0x220,0x220,0x220,0x220,0x220,0x546,0x54e,0x220,0x234,0x220,0x220,0x3ff,0x406,0x40b,0x220,
+0x412,0x419,0x421,0x429,0x42d,0x432,0x220,0x43a,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x2a1,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x556,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x4a3,0x43f,0x446,0x44e,0x43f,0x446,0x456,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x55e,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x566,0x220,0x220,0x220,0x220,0x220,0x39b,0x220,0x220,0x56c,0x570,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
#ifndef U_DARWIN
-0x553,0x556,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
+0x599,0x59c,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
#else /* U_DARWIN */
-0x55c,0x55f,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
+0x5a2,0x5a5,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
#endif /* U_DARWIN */
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
#ifdef U_DARWIN
-0x218,0x218,0x218,0x218,0x538,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
+0x220,0x220,0x220,0x220,0x576,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
#endif /* U_DARWIN */
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x2a1,0x2a9,0x2b1,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x4a3,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x2a9,0x2b1,0x2b9,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x4ab,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
#ifndef U_DARWIN
-0x537,0x53b,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x2b5,0x2bd,0x543,0x2c5,0x2cd,0x218,
-0x218,0x218,0x54b,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x575,
#else /* U_DARWIN */
-0x540,0x544,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
-0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x2b5,0x2bd,0x54c,0x2c5,0x2cd,0x218,
-0x218,0x218,0x554,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x57e,
+#endif /* U_DARWIN */
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+#ifndef U_DARWIN
+0x57d,0x581,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x2bd,0x2c5,0x589,0x2cd,0x2d5,0x220,
+0x220,0x220,0x591,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+#else /* U_DARWIN */
+0x586,0x58a,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
+0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x2bd,0x2c5,0x592,0x2cd,0x2d5,0x220,
+0x220,0x220,0x59a,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,0x220,
#endif /* U_DARWIN */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -2201,7 +2237,7 @@ static const uint16_t fcdTrie_index[5532]={
0,0x5454,0x5b5b,0,0,0,0,0,0,0,0,0,0,0,0x909,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,
0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0x707,0,0x909,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0x707,0,0x909,0x909,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0x707,0,0,0,0,0,0,0,0,0,0,0,
0x909,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -2272,15 +2308,15 @@ static const uint16_t fcdTrie_index[5532]={
0,0,0,0,0,0,0,0,0xdcdc,0xdcdc,0,0,0,0,0,0,
0,0,0,0,0,0,0xdada,0xe4e4,0xe8e8,0xdede,0xe0e0,0xe0e0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0xe6e6,0xe6e6,0xe6e6,0xe6e6,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xe6e6,
0xe6e6,0xe6e6,0xe6e6,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xe6e6,
+0xe6e6,0xe6e6,0xe6e6,0xe6e6,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0xe6e6,0xe6e6,0xdcdc,0xdcdc,
0xdcdc,0xdcdc,0xdcdc,0xdcdc,0xe6e6,0xe6e6,0xdcdc,0xe6e6,0xe6e6,0xdede,0xe4e4,0xe6e6,0xa0a,0xb0b,0xc0c,0xd0d,
0xe0e,0xf0f,0x1010,0x1111,0x1212,0x1313,0x1313,0x1414,0x1515,0x1616,0,0x1717,0,0x1818,0x1919,0,
0xe6e6,0xdcdc,0,0x1212,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0xe6e6,0xe6e6,0xe6e6,0xe6e6,
-0xe6e6,0xe6e6,0,0,0,0,0,0,0,0,0,0,0xe6e6,0xe6e6,0xe6e6,0xdcdc,
+0xe6e6,0xe6e6,0xe6e6,0xe6e6,0x1e1e,0x1f1f,0x2020,0,0,0,0,0,0xe6e6,0xe6e6,0xe6e6,0xdcdc,
0xe6e6,0,0,0xe6e6,0xe6e6,0,0xdcdc,0xe6e6,0xe6e6,0xdcdc,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0x2424,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -2292,51 +2328,71 @@ static const uint16_t fcdTrie_index[5532]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0xdcdc,0,0xdcdc,0,0xd8d8,0,0,0,0,0,0,0,0,0xdcdc,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x909,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x909,0,
-0,0,0,0,0,0,0,0,0,0xe6e6,0,0,0,0,0,0,
-0,0,0,0,0,0xe4e4,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0xdcdc,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0xdede,0xe6e6,0xdcdc,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0xe6e6,0xdcdc,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0xe6e6,0xdcdc,0xe6e6,0xe6e6,0xe6e6,
-0xe6e6,0xe6e6,0xe6e6,0xe6e6,0,0,0,0,0,0,0,0,0,0,0,0,
-0xe6e6,0xe6e6,0xdcdc,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xdcdc,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0xe6e6,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xe6e6,0xdcdc,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0xe6e6,0xe6e6,0x101,0x101,
-0xe6e6,0xe6e6,0xe6e6,0xe6e6,0x101,0x101,0x101,0xe6e6,0xe6e6,0,0,0,0,0xe6e6,0,0,
-0,0x101,0x101,0xe6e6,0xdcdc,0xe6e6,0x101,0x101,0xdcdc,0xdcdc,0xdcdc,0xdcdc,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x909,0,
+0x909,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0x909,0,0,0,0,0,0,0,0,0,
+0,0xe6e6,0,0,0,0,0,0,0,0,0,0,0,0xe4e4,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0xdede,0xe6e6,0xdcdc,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0xe6e6,0xdcdc,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0xe6e6,0xdcdc,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0x909,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0x707,0,0,0,0,0,0,0,0,0xe6e6,0xe6e6,0xdcdc,0xe6e6,
+0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xdcdc,0xe6e6,0xe6e6,0xeaea,0xd6d6,0xdcdc,0xcaca,0xe6e6,0xe6e6,0xe6e6,
+0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0xe6e6,0xdcdc,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0xe6e6,0xe6e6,0x101,0x101,0xe6e6,0xe6e6,0xe6e6,0xe6e6,
+0x101,0x101,0x101,0xe6e6,0xe6e6,0,0,0,0,0xe6e6,0,0,0,0x101,0x101,0xe6e6,
+0xdcdc,0xe6e6,0x101,0x101,0xdcdc,0xdcdc,0xdcdc,0xdcdc,0xe6e6,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,
+0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,
+0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0xe6e6,0,0,0,0,0,0,0,0,
+0,0,0,0,0xe6e6,0xe6e6,0,0,0,0,0,0,0,0,0x909,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0xdcdc,0xdcdc,0xdcdc,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0x909,0,0,0,0,0,0,0,0,0,0,0,0,
+#ifdef U_DARWIN
+0,0,0x6b6b,0x6b6b,0x6b6b,0x6b6b,0x6b6b,0x6b6b,0x6b6b,0x6b6b,0x6b6b,0x6b6b,0x6b6b,0x6b6b,0,0,
+0,0,0,0,0,0,0,0x1212,0,0,0,0,0,0,0,0,
+#endif /* U_DARWIN */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
#ifndef U_DARWIN
-0,0,0,0,0,0,0,0,0,0xdcdc,0,0xe6e6,0,0,0,0,
+0,0xdcdc,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0xdcdc,0,0xe6e6,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0xe6e6,0x101,0xdcdc,0,
+0,0,0,0x909,0xdcdc,0xdcdc,0xdcdc,0,0,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xdcdc,0xdcdc,
#else /* U_DARWIN */
-0,0,0,0,0,0,0,0,0,0,0x6b6b,0x6b6b,0x6b6b,0x6b6b,0x6b6b,0x6b6b,
-0x6b6b,0x6b6b,0x6b6b,0x6b6b,0x6b6b,0x6b6b,0,0,0,0,0,0,0,0,0,0x1212,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0xdcdc,0,0xe6e6,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xe6e6,0x101,0xdcdc,0,0,0,0,0x909,
-0xdcdc,0xdcdc,0xdcdc,0,0,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xdcdc,0xdcdc,0,0,0,0,
+0,0,0,0,0,0xdcdc,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0xdcdc,0,0xe6e6,0,0,0,0,0,0,0,0,
+#endif /* U_DARWIN */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0xe6e6,0xe6e6,0xe6e6,0,0,0,0,0,0,0,0,0,0,0,
+#ifndef U_DARWIN
+0,0,0,0,0,0,0xe6e6,0xe6e6,0xe6e6,0,0,0,0,0,0,0,
+#else /* U_DARWIN */
+0xe6e6,0x101,0xdcdc,0,0,0,0,0x909,0xdcdc,0xdcdc,0xdcdc,0,0,0xe6e6,0xe6e6,0xe6e6,
+0xe6e6,0xe6e6,0xdcdc,0xdcdc,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0xe6e6,0xe6e6,0xe6e6,0,0,0,
#endif /* U_DARWIN */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
#ifndef U_DARWIN
-0,0,0,0,0xe6e6,0x101,0xdcdc,0,0,0,0,0x909,0xdcdc,0xdcdc,0xdcdc,0,
-0,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xdcdc,0xdcdc,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xe6e6,0xe6e6,
-0xe6e6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x820,0,
+0,0,0,0,0x820,0,0x840,0,0,0,0,0,0,0,0,0,
#else /* U_DARWIN */
-0,0,0x820,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x820,0,0x840,0,0,0,0,0,
#endif /* U_DARWIN */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
#ifndef U_DARWIN
-0,0,0,0,0,0,0,0,0,0,0,0,0x840,0,0,0,
-0,0,0,0,0,0,0,0
+0,0,0,0,0x860,0,0,0,0,0,0,0,0,0,0,0
#else /* U_DARWIN */
-0x840,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0x860,0,0,0,0,0,0,0,
+0,0,0,0
#endif /* U_DARWIN */
};
@@ -2344,173 +2400,179 @@ static const UTrie fcdTrie={
fcdTrie_index,
NULL,
utrie_defaultGetFoldingOffset,
- 2144,
+ 2176,
#ifndef U_DARWIN
- 3352,
+ 3600,
#else /* U_DARWIN */
- 3388,
+ 3636,
#endif /* U_DARWIN */
0,
FALSE
};
#ifndef U_DARWIN
-static const uint16_t auxTrie_index[5748]={
+static const uint16_t auxTrie_index[5960]={
#else /* U_DARWIN */
-static const uint16_t auxTrie_index[5784]={
+static const uint16_t auxTrie_index[6000]={
#endif /* U_DARWIN */
-0x228,0x228,0x228,0x228,0x228,0x228,0x3ea,0x3f2,0x3fa,0x402,0x40a,0x412,0x228,0x228,0x41a,0x422,
-0x42a,0x432,0x228,0x228,0x228,0x228,0x228,0x228,0x4be,0x4be,0x315,0x230,0x31d,0x228,0x238,0x23e,
-0x228,0x228,0x228,0x228,0x513,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x4ec,0x51b,0x523,0x228,
-0x527,0x43a,0x4c6,0x448,0x228,0x228,0x43d,0x52f,0x533,0x22c,0x4cb,0x228,0x228,0x228,0x228,0x539,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x445,0x322,0x228,0x228,0x4ce,0x32a,0x228,
-0x228,0x332,0x33a,0x228,0x228,0x445,0x53e,0x228,0x228,0x4ce,0x342,0x228,0x228,0x4d6,0x44d,0x228,
-0x228,0x228,0x453,0x228,0x228,0x445,0x45b,0x228,0x228,0x4d6,0x44d,0x228,0x228,0x228,0x461,0x228,
-0x228,0x4f4,0x502,0x228,0x228,0x4fb,0x502,0x228,0x4fb,0x542,0x34a,0x352,0x35a,0x362,0x549,0x228,
-0x228,0x469,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x4de,0x228,0x4e4,0x4cd,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x50c,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x447,0x447,0x228,0x228,0x228,0x228,0x54d,0x228,
-0x228,0x228,0x228,0x228,0x228,0x53f,0x228,0x228,0x228,0x555,0x228,0x228,0x228,0x228,0x228,0x228,
-0x55c,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x470,0x477,0x539,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x245,0x24d,0x228,0x228,0x228,0x4cb,0x43b,
-0x47f,0x487,0x48c,0x492,0x49a,0x4a2,0x4a5,0x4a9,0x228,0x228,0x228,0x369,0x4af,0x371,0x379,0x37f,
-0x387,0x228,0x228,0x228,0x228,0x253,0x563,0x56b,0x25b,0x263,0x26b,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x38d,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x390,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x508,0x228,0x228,0x4b6,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x26f,0x228,0x228,0x228,0x274,0x228,0x228,0x228,0x228,0x278,0x280,0x286,0x28e,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x549,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
+0x230,0x230,0x230,0x230,0x230,0x230,0x3f8,0x400,0x408,0x410,0x418,0x420,0x230,0x230,0x428,0x430,
+0x438,0x440,0x230,0x230,0x230,0x230,0x230,0x230,0x4cc,0x4cc,0x323,0x238,0x32b,0x230,0x240,0x246,
+0x230,0x230,0x230,0x230,0x51e,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x4fa,0x526,0x52e,0x230,
+0x532,0x448,0x4d4,0x456,0x230,0x230,0x44b,0x53a,0x53e,0x234,0x4d9,0x230,0x230,0x230,0x230,0x544,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x453,0x330,0x230,0x230,0x4dc,0x338,0x230,
+0x230,0x340,0x348,0x230,0x230,0x453,0x549,0x230,0x230,0x4dc,0x350,0x230,0x230,0x4e4,0x45b,0x230,
+0x230,0x230,0x461,0x230,0x230,0x453,0x469,0x230,0x230,0x4e4,0x45b,0x230,0x230,0x230,0x46f,0x230,
+0x230,0x502,0x510,0x230,0x230,0x509,0x510,0x230,0x509,0x54d,0x358,0x360,0x368,0x370,0x554,0x230,
+0x230,0x477,0x230,0x230,0x549,0x230,0x230,0x230,0x230,0x230,0x230,0x4ec,0x230,0x4f2,0x4db,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x556,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x455,0x455,0x230,0x230,0x230,0x230,0x55e,0x230,
+0x230,0x230,0x230,0x230,0x230,0x54a,0x230,0x230,0x230,0x566,0x230,0x230,0x230,0x230,0x230,0x230,
+0x56d,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x47e,0x485,0x544,0x230,0x574,0x230,0x230,
+0x230,0x558,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x24d,0x255,0x230,0x230,0x230,0x4cc,0x57c,
+0x48d,0x495,0x49a,0x4a0,0x4a8,0x4b0,0x4b3,0x4b7,0x230,0x230,0x230,0x377,0x4bd,0x37f,0x387,0x38d,
+0x395,0x230,0x230,0x230,0x230,0x25b,0x584,0x58c,0x263,0x26b,0x273,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x39b,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x39e,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x275,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x4cc,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x516,0x230,0x230,0x4c4,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x27d,0x230,0x230,0x230,0x282,0x230,0x230,0x230,0x230,0x286,0x28e,0x294,0x29c,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x591,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x554,0x230,0x230,0x230,0x230,0x230,0x485,0x230,0x230,0x599,0x559,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
#ifndef U_DARWIN
-0x58c,0x58f,0x228,0x595,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
+0x5c1,0x5c4,0x230,0x5ca,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
#else /* U_DARWIN */
-0x595,0x598,0x228,0x59e,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
+0x5cb,0x5ce,0x230,0x5d4,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
#endif /* U_DARWIN */
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
#ifndef U_DARWIN
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x398,0x398,0x398,0x398,0x398,0x398,0x398,0x398,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x3a6,0x3a6,0x3a6,0x3a6,0x3a6,0x3a6,0x3a6,0x3a6,
#else /* U_DARWIN */
-0x228,0x228,0x228,0x228,0x571,0x228,0x228,0x228,0x398,0x398,0x398,0x398,0x398,0x398,0x398,0x398,
+0x230,0x230,0x230,0x230,0x59f,0x230,0x230,0x230,0x3a6,0x3a6,0x3a6,0x3a6,0x3a6,0x3a6,0x3a6,0x3a6,
#endif /* U_DARWIN */
-0x39d,0x3a5,0x398,0x3ab,0x398,0x398,0x3af,0x228,0x3b6,0x3be,0x3c6,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x50b,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
+0x3ab,0x3b3,0x3a6,0x3b9,0x3a6,0x3a6,0x3bd,0x230,0x3c4,0x3cc,0x3d4,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x4da,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
#ifndef U_DARWIN
-0x570,0x574,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x3ca,0x3d2,0x57c,0x3da,0x3e2,0x228,
-0x228,0x228,0x584,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x59d,
#else /* U_DARWIN */
-0x579,0x57d,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
-0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x3ca,0x3d2,0x585,0x3da,0x3e2,0x228,
-0x228,0x228,0x58d,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x5a7,
#endif /* U_DARWIN */
-0x296,0x29d,0x299,0x2a0,0x2a8,0x2b0,0x29e,0x29a,0x2b7,0x2bf,0x2c7,0x29f,0x2a7,0x296,0x29d,0x299,
-0x2a0,0x2cf,0x297,0x29e,0x29a,0x2d7,0x2df,0x2e7,0x2ee,0x2f6,0x2e2,0x2fe,0x2f1,0x306,0x30d,0x228,
-0x398,0x398,0x398,0x398,0x398,0x398,0x398,0x398,0x398,0x398,0x398,0x398,0x398,0x398,0x398,0x398,
-0x399,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+#ifndef U_DARWIN
+0x5a5,0x5a9,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x3d8,0x3e0,0x5b1,0x3e8,0x3f0,0x230,
+0x230,0x230,0x5b9,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+#else /* U_DARWIN */
+0x5af,0x5b3,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x3d8,0x3e0,0x5bb,0x3e8,0x3f0,0x230,
+0x230,0x230,0x5c3,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
+#endif /* U_DARWIN */
+0x2a4,0x2ab,0x2a7,0x2ae,0x2b6,0x2be,0x2ac,0x2a8,0x2c5,0x2cd,0x2d5,0x2ad,0x2b5,0x2a4,0x2ab,0x2a7,
+0x2ae,0x2dd,0x2a5,0x2ac,0x2a8,0x2e5,0x2ed,0x2f5,0x2fc,0x304,0x2f0,0x30c,0x2ff,0x314,0x31b,0x230,
+0x3a6,0x3a6,0x3a6,0x3a6,0x3a6,0x3a6,0x3a6,0x3a6,0x3a6,0x3a6,0x3a6,0x3a6,0x3a6,0x3a6,0x3a6,0x3a6,
+0x3a7,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,
@@ -2529,234 +2591,245 @@ static const uint16_t auxTrie_index[5784]={
0x52,0,0x400,0,0x53,0,0x400,0x400,0x11,0x3a,0,0,0x15,0x42,0,0x25,
0,0,0,0,0,0,0,0x54,0,0,0x58,0x5a,0,0,0,0,
0,0x13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x5c,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x60,0,0x63,0x66,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0x6a,0,0x6e,0,0x71,0,0,0,0,0x74,0,0,0,0,0,
-0x77,0x7a,0x7d,0x80,0x83,0x86,0x89,0x8c,0,0,0x8f,0x92,0x95,0,0,0,
-0x98,0x9b,0x9f,0xa3,0xa7,0,0,0,0,0,0,0,0,0,0,0,
-0,0xab,0xae,0xb2,0xb6,0,0,0,0,0,0,0,0xba,0xbd,0xc0,0xc3,
-0xc6,0xc9,0xcc,0xcf,0xd2,0xd5,0xd8,0xdb,0xde,0xe1,0,0xe4,0,0,0xe7,0xec,
-0xf0,0xf3,0,0xf6,0,0xf9,0xfc,0,0,0,0,0,0,0,0,0xff,
-0,0x102,0x106,0,0x109,0x10c,0x10f,0x113,0xd,0x11,0x3a,0x13,0x15,0x42,0x19,0x1b,
-0x1d,0x1f,0x21,0x23,0x25,0x27,0x29,0x2d,0x47,0x2f,0x38,0x31,0x33,0x65,0x35,0x57,
-0xf5,0x53,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xd,0x11,0x3a,0x13,0x15,0x42,0x19,0x1b,
-0x1d,0x1f,0x21,0x23,0x25,0x27,0x29,0x2d,0x47,0x2f,0x38,0x31,0x33,0x65,0x35,0x57,
-0xf5,0x53,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0xd,0,0x3a,0x13,
-0,0,0x19,0,0,0x1f,0x21,0,0,0x27,0x29,0x2d,0x47,0,0x38,0x31,
-0x33,0x65,0x35,0x57,0xf5,0x53,0,0,0,0,0,0,0,0,0,0,
-0xd,0x11,0,0x13,0x15,0x42,0x19,0,0,0x1f,0x21,0x23,0x25,0x27,0x29,0x2d,
-0x47,0,0x38,0x31,0x33,0x65,0x35,0x57,0xf5,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xd,0x11,0,0x13,0x15,0x42,0x19,0,0x1d,0x1f,0x21,0x23,
-0x25,0,0x29,0,0,0,0x38,0x31,0x33,0x65,0x35,0x57,0xf5,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0xf5,0x53,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xd,0x11,0x3a,0x13,0,0,0,0,
-0,0,0,0,0x117,0x119,0x59,0x11b,0x11d,0x11f,0x121,0x123,3,0x125,0x127,0x7e,
-0x129,0x12b,0x12d,0x5b,0x12f,0x124,0xb,0x131,5,0x133,0x135,0x137,0xe0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x118,0x11a,
-0x59,0x11c,0x11e,0x120,0x122,0x124,3,0x126,0x128,0x7e,0x12a,0x12c,0x12e,0x5b,0x130,0x124,
-0xb,0x132,5,0x134,0x136,0x138,0xe0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xb,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x118,0x11a,0x59,0x11c,0x11e,0x120,0x122,0x124,3,0x126,0x128,0x7e,
-0x12a,0x12c,0x12e,0x5b,0x130,0x124,0xb,0x132,5,0x134,0x136,0x138,0xe0,0,0,0,
-0,0,0,0,0,0,0,0,0x128,0x7e,0x12a,0x12c,0x12e,0x5b,0x130,0x124,
-0xb,0x132,5,0x134,0x136,0x138,0xe0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x130,0x124,0xb,0x132,5,0x134,0x136,0x138,
-0xe0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0xb,0,0,0,0,0,0,0,0,0,0,0x139,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xc00,0xc00,0x800,0xc00,0xc00,0x800,0x800,0x800,0x800,0x800,0x800,0x800,
-0x800,0x800,0x800,0,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,
-0x800,0x800,0x800,0x800,0,0,0,0,0,0,0,0x400,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0x800,0,0,0,0x800,0x800,0x800,0x800,0,0,0,
-0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0x800,0,0,0,0,0,0,0,0,0,0x800,
-0,0,0,0,0x400,0x400,0,0x400,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0x400,0,0,0x400,0,
-0,0,0,0,0x800,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0x800,0,0,0,0,0,0,0,0,0,0,
-0,0x400,0x400,0x400,0,0,0x400,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0x800,0,0,0,0,0,0,0,0,0x800,0x800,
-0,0,0,0,0x400,0x400,0,0,0,0,0,0x400,0,0,0,0,
-0,0,0,0,0,0x400,0,0,0,0,0x400,0,0,0,0,0x400,
-0,0,0,0,0x400,0,0,0,0,0,0,0,0,0,0,0,
-0,0x400,0,0,0,0,0,0,0,0x800,0x800,0x400,0x800,0x400,0x400,0,
-0x400,0,0x800,0x800,0x800,0x800,0,0,0x800,0x400,0x800,0x800,0x800,0,0x800,0x800,
-0,0,0,0,0,0,0,0,0,0,0,0x400,0,0,0,0,
-0,0,0,0,0,0x400,0,0,0,0,0x400,0,0,0,0,0x400,
-0,0,0,0,0x400,0,0,0,0,0,0,0,0,0x800,0,0x800,
-0,0x400,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0x400,0,0x400,0,0x400,0,0x400,0,0x400,0,0x400,
-0,0x400,0,0,0x1000,0x1000,0,0,0,0,0,0,0x1000,0x1000,0,0,
-0,0,0,0,0,0,0,0x1000,0,0,0,0,0,0,0,0x400,
-0x1000,0,0x400,0,0,0,0,0x1000,0,0,0,0,0,0x400,0,0x400,
-0x1000,0,0,0,0,0,0,0x400,0,0,0,0,0,0,0,0x400,
-0,0,0,0,0,0,0,0x400,0,0,0x400,0x400,0,0,0,0x1000,
-0,0,0,0,0,0x400,0,0x400,0x1000,0x400,0,0,0x400,0x400,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0x400,0x400,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x400,0,0,0,
-0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,
-0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,
-0x400,0x400,0,0,0x400,0,0x400,0,0,0x400,0x400,0x400,0x400,0x400,0x400,0x400,
-0x400,0x400,0x400,0,0x400,0,0x400,0,0,0x400,0x400,0,0,0,0x400,0x400,
-0x400,0x400,0,0,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,
-0x400,0x400,0x400,0x400,0x400,0x400,0x400,0,0,0,0,0,0x400,0x400,0x400,0x400,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0x5c,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x5e,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x62,0,0x65,0x68,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0x6c,0,0x70,0,0x73,0,0,
+0,0,0x76,0,0,0,0,0,0x79,0x7c,0x7f,0x82,0x85,0x88,0x8b,0x8e,
+0,0,0x91,0x94,0x97,0,0,0,0x9a,0x9d,0xa1,0xa5,0xa9,0,0,0,
+0,0,0,0,0,0,0,0,0,0xad,0xb0,0xb4,0xb8,0,0,0,
+0,0,0,0,0xbc,0xbf,0xc2,0xc5,0xc8,0xcb,0xce,0xd1,0xd4,0xd7,0xda,0xdd,
+0xe0,0xe3,0,0xe6,0,0,0xe9,0xee,0xf2,0xf5,0,0xf8,0,0xfb,0xfe,0,
+0,0,0,0,0,0,0,0x101,0,0x104,0x108,0,0x10b,0x10e,0x111,0x115,
+0xd,0x11,0x3a,0x13,0x15,0x42,0x19,0x1b,0x1d,0x1f,0x21,0x23,0x25,0x27,0x29,0x2d,
+0x47,0x2f,0x38,0x31,0x33,0x5d,0x35,0x57,0xf7,0x53,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0xd,0x11,0x3a,0x13,0x15,0x42,0x19,0x1b,0x1d,0x1f,0x21,0x23,0x25,0x27,0x29,0x2d,
+0x47,0x2f,0x38,0x31,0x33,0x5d,0x35,0x57,0xf7,0x53,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0xd,0,0x3a,0x13,0,0,0x19,0,0,0x1f,0x21,0,
+0,0x27,0x29,0x2d,0x47,0,0x38,0x31,0x33,0x5d,0x35,0x57,0xf7,0x53,0,0,
+0,0,0,0,0,0,0,0,0xd,0x11,0,0x13,0x15,0x42,0x19,0,
+0,0x1f,0x21,0x23,0x25,0x27,0x29,0x2d,0x47,0,0x38,0x31,0x33,0x5d,0x35,0x57,
+0xf7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0xd,0x11,0,0x13,
+0x15,0x42,0x19,0,0x1d,0x1f,0x21,0x23,0x25,0,0x29,0,0,0,0x38,0x31,
+0x33,0x5d,0x35,0x57,0xf7,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0xf7,0x53,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0xd,0x11,0x3a,0x13,0,0,0,0,0,0,0,0,0x119,0x11b,0x59,0x11d,
+0x11f,0x121,0x123,0x125,3,0x127,0x129,0x80,0x12b,0x12d,0x12f,0x5b,0x131,0x126,0xb,0x133,
+5,0x135,0x137,0x139,0xe2,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0xb,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0x11a,0x11c,0x59,0x11e,0x120,0x122,0x124,0x126,3,0x128,
+0x12a,0x80,0x12c,0x12e,0x130,0x5b,0x132,0x126,0xb,0x134,5,0x136,0x138,0x13a,0xe2,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0xb,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x11a,0x11c,0x59,0x11e,
+0x120,0x122,0x124,0x126,3,0x128,0x12a,0x80,0x12c,0x12e,0x130,0x5b,0x132,0x126,0xb,0x134,
+5,0x136,0x138,0x13a,0xe2,0,0,0,0,0,0,0,0,0,0,0,
+0x12a,0x80,0x12c,0x12e,0x130,0x5b,0x132,0x126,0xb,0x134,5,0x136,0x138,0x13a,0xe2,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x132,0x126,0xb,0x134,5,0x136,0x138,0x13a,0xe2,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0xb,0,0,0,0,
+0,0,0,0,0,0,0x13b,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0xc00,0xc00,0x800,0xc00,
+0xc00,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0,0x800,0x800,0x800,0x800,
+0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0,0,0,0,
+0,0,0,0x400,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0x800,0,0,
+0,0x800,0x800,0x800,0x800,0,0,0,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0x800,0,0,
+0,0,0,0,0,0,0,0x800,0,0,0,0,0x400,0x400,0,0x400,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0x400,0,0,0x400,0,0,0,0,0,0x800,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0x800,0,0,
+0,0,0,0,0,0,0,0,0,0x400,0x400,0x400,0,0,0x400,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0x800,0,0,
+0,0,0,0,0,0,0x800,0x800,0,0,0,0,0x400,0x400,0,0,
+0,0,0,0x400,0,0,0,0,0,0,0,0,0,0x400,0,0,
+0,0,0x400,0,0,0,0,0x400,0,0,0,0,0x400,0,0,0,
+0,0,0,0,0,0,0,0,0,0x400,0,0,0,0,0,0,
+0,0x800,0x800,0x400,0x800,0x400,0x400,0,0x400,0,0x800,0x800,0x800,0x800,0,0,
+0x800,0x400,0x800,0x800,0x800,0,0x800,0x800,0,0,0,0,0,0,0,0,
+0,0,0,0x400,0,0,0,0,0,0,0,0,0,0x400,0,0,
+0,0,0x400,0,0,0,0,0x400,0,0,0,0,0x400,0,0,0,
+0,0,0,0,0,0x800,0,0x800,0,0x400,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0x400,0,0x400,
+0,0x400,0,0x400,0,0x400,0,0x400,0,0x400,0,0,0x1000,0x1000,0,0,
+0,0,0,0,0x1000,0x1000,0,0,0,0,0,0,0,0,0,0x1000,
+0,0,0,0,0,0,0,0x400,0x1000,0,0x400,0,0,0,0,0x1000,
+0,0,0,0,0,0x400,0,0x400,0x1000,0,0,0,0,0,0,0x400,
+0,0,0,0,0,0,0,0x400,0,0,0,0,0,0,0,0x400,
+0,0,0x400,0x400,0,0,0,0x1000,0,0,0,0,0,0x400,0,0x400,
+0x1000,0x400,0,0,0x400,0x400,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0x400,0x400,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x400,0,0,0,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,
0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,
-0x400,0x400,0x400,0x400,0x400,0x400,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0x400,0x800,0x400,0,0,0,0,0,0,0,0,
-0,0,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0,
-0x400,0x400,0x400,0x400,0x400,0,0x400,0,0x400,0x400,0,0x400,0x400,0,0x400,0x400,
-0x400,0x400,0x400,0x400,0x400,0x400,0x400,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x800,0x800,0x800,
-0x800,0x800,0,0,0,0x800,0x800,0x800,0x800,0x800,0x800,0,0,0,0,0,
-0,0,0,0x800,0x800,0x800,0x800,0x800,0,0,0,0,0,0,0,0,
-0,0,0x800,0x800,0x800,0x800,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0x400,0x400,0x400,0x400,0x400,0x400,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x1000,0x1000,0,0x1000,0,0,0,0,
-0x1000,0x1000,0,0x1000,0x1000,0x1000,0x1000,0,0,0x1000,0x1000,0x1000,0,0,0,0,
-0,0x1000,0x1000,0x1000,0,0x1000,0,0,0x1000,0x1000,0,0x1000,0,0,0,0,
-0x1000,0x1000,0,0x1000,0x1000,0x1000,0x1000,0,0,0x1000,0x1000,0x1000,0,0,0,0,
-0,0x1000,0x1000,0x1000,0,0x1000,0,0x1000,0x1000,0x1000,0,0,0,0,0x1000,0x1000,
-0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0,0,0,0,0x1000,0x1000,0x1000,0x1000,
-0,0,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0,0,0x1000,0x1000,0,0,
-0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0,0,0x1000,0,0,0,0,0,0,0,
-0,0x1000,0x1000,0,0,0x1000,0x1000,0,0,0,0,0x1000,0x1000,0,0,0x1000,
-0x1000,0,0,0,0,0,0x1000,0x1000,0x1000,0x1000,0,0,0x1000,0x1000,0,0,
-0x1000,0x1000,0,0,0x1000,0x1000,0,0,0,0,0,0,0x1000,0x1000,0,0,
-0,0,0,0,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0,0,0x1000,0x1000,0x1000,0x1000,
-0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
-0x1000,0x1000,0x1000,0x1000,0x1000,0,0x1000,0x1000,0x1000,0x1000,0,0,0,0,0x1000,0x1000,
-0x1000,0x1000,0,0,0,0,0,0,0,0,0,0,0x1000,0x1000,0,0,
-0x1000,0x1000,0x1000,0x1000,0,0,0,0,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0,0,0x400,0,0x400,0,
+0,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0,0x400,0,0x400,0,
+0,0x400,0x400,0,0,0,0x400,0x400,0x400,0x400,0,0,0x400,0x400,0x400,0x400,
+0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0,
+0,0,0,0,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,
+0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0x400,0x800,0x400,
+0,0,0,0,0,0,0,0,0,0,0x400,0x400,0x400,0x400,0x400,0x400,
+0x400,0x400,0x400,0x400,0x400,0x400,0x400,0,0x400,0x400,0x400,0x400,0x400,0,0x400,0,
+0x400,0x400,0,0x400,0x400,0,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x400,0x400,
+0x400,0x400,0x400,0x400,0x400,0x800,0x800,0x800,0x800,0x800,0,0,0,0x800,0x800,0x800,
+0x800,0x800,0x800,0,0,0,0,0,0,0,0,0x800,0x800,0x800,0x800,0x800,
+0,0,0,0,0,0,0,0,0,0,0x800,0x800,0x800,0x800,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0x400,0x400,0x400,0x400,0x400,
+0x400,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x1000,0x1000,0,0x1000,0,0,0,0,0x1000,0x1000,0,0x1000,0x1000,0x1000,0x1000,0,
+0,0x1000,0x1000,0x1000,0,0,0,0,0,0x1000,0x1000,0x1000,0,0x1000,0,0,
+0x1000,0x1000,0,0x1000,0,0,0,0,0x1000,0x1000,0,0x1000,0x1000,0x1000,0x1000,0,
+0,0x1000,0x1000,0x1000,0,0,0,0,0,0x1000,0x1000,0x1000,0,0x1000,0,0x1000,
+0x1000,0x1000,0,0,0,0,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+0,0,0,0,0x1000,0x1000,0x1000,0x1000,0,0,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+0x1000,0x1000,0,0,0x1000,0x1000,0,0,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0,0,
+0x1000,0,0,0,0,0,0,0,0,0x1000,0x1000,0,0,0x1000,0x1000,0,
+0,0,0,0x1000,0x1000,0,0,0x1000,0x1000,0,0,0,0,0,0x1000,0x1000,
+0x1000,0x1000,0,0,0x1000,0x1000,0,0,0x1000,0x1000,0,0,0x1000,0x1000,0,0,
+0,0,0,0,0x1000,0x1000,0,0,0,0,0,0,0x1000,0x1000,0x1000,0x1000,
+0x1000,0x1000,0,0,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0x1000,0x1000,0x1000,
+0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0,0x1000,0x1000,
+0x1000,0x1000,0,0,0,0,0x1000,0x1000,0x1000,0x1000,0,0,0,0,0,0,
+0,0,0,0,0x1000,0x1000,0,0,0x1000,0x1000,0x1000,0x1000,0,0,0,0,
0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
-0x1000,0x1000,0x1000,0x1000,0,0,0x1000,0x1000,0,0,0,0,0,0,0,0,
-0,0,0x1000,0x1000,0x1000,0x1000,0,0,0x1000,0x1000,0x1000,0x1000,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0x1000,0x1000,0,0,0,0,
+0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0,0,0x1000,0x1000,
+0,0,0,0,0,0,0,0,0,0,0x1000,0x1000,0x1000,0x1000,0,0,
+0x1000,0x1000,0x1000,0x1000,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0x1000,0x1000,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0x800,0x800,0x800,0x800,0x800,0x800,
-0x800,0,0,0x800,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0,0,0x800,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0x800,0,0,0,0,0,0,0,0,0,0x800,0,0,0,0,
+0,0,0,0,0,0,0,0,0x800,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0x800,0,0,0,0,0,0,
-0,0x800,0x800,0,0,0,0,0,0,0,0,0,0,0,0x800,0,
-0,0,0,0,0,0,0,0,0,0x800,0,0,0,0,0,0,
-0,0x800,0x800,0,0,0,0,0,0,0,0,0,0,0,0x800,0,
-0,0,0,0x800,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0x800,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0x800,0,0,0,0,0,0,0,0,0x800,0,0x800,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x800,0x800,0,0,0,0,0,0,0,0,0,0,
-0x800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x1000,0x1000,0x1000,0x1000,
-0,0,0,0,0,0,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0,0,0x1000,0x1000,
-0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0,0,0,0,0x1000,0x1000,0x1000,0x1000,
+0,0x800,0,0,0,0,0,0,0,0x800,0x800,0,0,0,0,0,
+0,0,0,0,0,0,0x800,0,0,0,0,0,0,0,0,0,
+0,0x800,0,0,0,0,0,0,0,0x800,0x800,0,0,0,0,0,
+0,0,0,0,0,0,0x800,0,0,0,0,0x800,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0x800,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0x800,0,0,0,0,0,
+0,0,0,0x800,0,0x800,0x800,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x800,0x800,0,0,
+0,0,0,0,0,0,0,0,0x800,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x1000,0x1000,0x1000,0x1000,0,0,0,0,0,0,0x1000,0x1000,
0x1000,0x1000,0x1000,0x1000,0,0,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+0,0,0,0,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0,0,0x1000,0x1000,
+0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0,0,0x1000,0x1000,0x1000,0x1000,
+0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0,0,0,0,
0x1000,0x1000,0,0,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
-0x1000,0x1000,0x1000,0x1000,0,0,0,0,0x1000,0x1000,0,0,0x1000,0x1000,0x1000,0x1000,
-0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
-0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0,0,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
-0,0,0,0,0,0,0x1000,0x1000,0x1000,0x1000,0,0,0,0,0x1000,0x1000,
-0x1000,0x1000,0,0,0,0,0,0,0,0,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
-0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0,0,
+0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0,0,0,0,0,0,0x1000,0x1000,
+0x1000,0x1000,0,0,0,0,0x1000,0x1000,0x1000,0x1000,0,0,0,0,0,0,
0,0,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
-0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0,0,0x1000,0x1000,0x1000,0x1000,0,0,
+0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0,0,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+0,0,0x1000,0x1000,0x1000,0x1000,0,0,0,0,0,0,0x1000,0x1000,0,0,
0,0,0,0,0x1000,0x1000,0,0,0,0,0,0,0x1000,0x1000,0,0,
-0,0,0,0,0x1000,0x1000,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0x800,0x800,0,0,0,0,0,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,
+0,0,0,0,0,0,0,0,0,0x800,0x800,0,0,0,0,0,
0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,
-0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0,0,0,0,0,0,0,0,
-0,0,0,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,
-0x800,0x800,0x800,0x800,0x800,0x800,0x800,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x800,0,0x800,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0x800,0,0,0x800,0x800,0x800,0x800,0x800,0x800,0x800,
-0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0,0,
-0,0,0,0,0,0,0,0,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,
0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,
+0,0,0,0,0,0,0,0,0,0,0,0x800,0x800,0x800,0x800,0x800,
+0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x800,0,0x800,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x800,0,
0,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,
+0x800,0x800,0x800,0x800,0x800,0x800,0,0,0,0,0,0,0,0,0,0,
+0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,
+0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0x800,0x800,0x800,0x800,0x800,0x800,0x800,
+0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x800,0x800,0x800,0,0,0,0,0,
+0x800,0x800,0x800,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x800,0x800,0,0,
+0,0,0,0,0,0,0,0,0x800,0x800,0x800,0x800,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x800,0x800,0,0,0,0,0,0,0,0,0,0,
-0x800,0x800,0x800,0x800,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0x800,0x800,0x800,0x800,0x800,0x800,
+0,0,0x800,0x800,0x800,0x800,0x800,0x800,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0x800,0x800,0x800,0x800,0x800,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x800,
-0x800,0x800,0x800,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x800,0x800,0x800,0x800,
+0,0,0,0,0,0,0,0,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,
0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,
-0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0,0x800,0,0x800,0x800,0,
-0x800,0x800,0,0x800,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x800,0x800,0x800,0x800,
-0x800,0x800,0,0,0,0,0,0,0,0,0,0,0x800,0x800,0x800,0x800,
-0x800,0,0,0x800,0x800,0,0x800,0x800,0x800,0x800,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0x800,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x800,
-0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0x800,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0x800,0,0x800,
-0,0x800,0,0,0,0,0,0,0,0,0x800,0,0,0,0,0,
+0x800,0x800,0x800,0x800,0x800,0x800,0,0x800,0,0x800,0x800,0,0x800,0x800,0,0x800,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0x800,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,
+0x800,0x800,0x800,0,0,0,0,0,0x800,0x800,0x800,0x800,0x800,0,0,0x800,
+0x800,0,0x800,0x800,0x800,0x800,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0x800,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0x800,0x800,0x800,0x800,0x800,
+0x800,0x800,0x800,0x800,0,0,0,0,0,0,0,0,0,0,0,0,
0,0x800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0x800,0x800,0x800,
+0,0,0,0,0,0,0,0,0,0x800,0,0x800,0,0x800,0,0,
+0,0,0,0,0,0,0x800,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0x800,0x800,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x800,0x800,0x800,0x800,
-0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0,0,0,0,0x800,0,0,
-0,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0,0,0,0,
-#ifndef U_DARWIN
-0,0,0,0,0,0,0,0,0,0,0,0,0,0x800,0,0x800,
+0,0,0,0,0,0,0,0x800,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0x800,0,0,0,0,0,
+0,0,0,0,0,0x800,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x800,0x800,0x800,0,0,0,0,0x800,
-0x800,0x800,0x800,0,0,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0,0,0,0,
-#else /* U_DARWIN */
+0,0x800,0x800,0x800,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0x800,0x800,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0x800,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x800,0x800,0x800,0x800,0x800,0x800,0x800,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x800,0x800,
-0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0,0,0,
+0,0x800,0,0,0,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,
+0x800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0x800,0,0,0,0,0,0,0,0,0,0,0,0,
+0x800,0x800,0,0,0,0,0,0,0,0,0,0,0,0,0,0x800,
+0x800,0x800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+#ifdef U_DARWIN
+0,0,0,0,0,0,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,
+0x800,0x800,0,0,0,0,0,0,0,0,0,0x800,0,0,0,0,
+#endif /* U_DARWIN */
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+#ifndef U_DARWIN
+0,0x800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0x800,0,0x800,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0x800,0x800,0x800,0,
0,0,0,0x800,0x800,0x800,0x800,0,0,0x800,0x800,0x800,0x800,0x800,0x800,0x800,
-#endif /* U_DARWIN */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-#ifndef U_DARWIN
-0,0,0x800,0x800,0x800,0,0,0,0,0,0,0,0,0,0,0,
-#else /* U_DARWIN */
0,0,0,0,0,0,0x800,0x800,0x800,0,0,0,0,0,0,0,
+#else /* U_DARWIN */
+0,0,0,0,0,0,0,0,0,0x800,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0x800,0,0x800,0,0,0,0,
#endif /* U_DARWIN */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
#ifndef U_DARWIN
-0,0,0x841,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x841,0,0x842,0,0,0,0,0,0,0,0,0,
#else /* U_DARWIN */
-0,0,0,0,0,0,0x841,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x800,0x800,0x800,0,0,0,0,0x800,0x800,0x800,0x800,0,
+0,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x800,0x800,
+0x800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x841,0,0x842,0,
#endif /* U_DARWIN */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
#ifndef U_DARWIN
-0xc42,0x43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0xc43,0x44,0,0,0,0,0,0,0,0,0,0,
#else /* U_DARWIN */
-0,0,0,0,0xc42,0x43,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0xc43,0x44,0,0,
#endif /* U_DARWIN */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
#ifndef U_DARWIN
-0,0,0x444,0
+0,0,0,0,0,0,0x445,0
#else /* U_DARWIN */
-0,0,0,0,0,0,0x444,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x445,0
#endif /* U_DARWIN */
};
@@ -2764,18 +2837,18 @@ static const UTrie auxTrie={
auxTrie_index,
NULL,
getFoldingAuxOffset,
- 2208,
+ 2240,
#ifndef U_DARWIN
- 3540,
+ 3720,
#else /* U_DARWIN */
- 3576,
+ 3760,
#endif /* U_DARWIN */
0,
FALSE
};
-static const uint16_t canonStartSets[7724]={
-0x109b,0x8ae,0x153,0x1a9c,0x1ab4,0x1e2c,0,0,0,0,0,0,0,0,0,0,
+static const uint16_t canonStartSets[7726]={
+0x109b,0x8ae,0x153,0x1a9c,0x1ab6,0x1e2e,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0x32,0xc0,0xc6,0x100,0x101,0x102,0x103,0x104,0x105,0x1cd,0x1ce,0x1de,0x1df,0x1e0,0x1e1,0x1fa,
0x1fb,0x200,0x201,0x202,0x203,0x226,0x227,0x1e00,0x1e01,0x1ea0,0x1ea1,0x1ea2,0x1ea3,0x1ea4,0x1ea5,0x1ea6,
@@ -3200,63 +3273,63 @@ static const uint16_t canonStartSets[7724]={
0x8002,0x7ed3,0xfad7,0x8202,0x7f2f,0xf9d8,0x8202,0x85d2,0xf9e0,0x8202,0x85ed,0xf9e1,0x8202,0x872e,0xf9e5,0x8202,
0x8bfa,0xf9ed,0x8202,0x8d77,0xf9f1,0x8202,0x9145,0xf9f6,0x8202,0x91df,0xf81c,0x8202,0x921a,0xf9f7,0x8202,0x940a,
0xf9fb,0x8202,0x9496,0xf9fd,0x8202,0x95b6,0xfa01,0x8202,0x9b30,0xfa09,0x8202,0xa0ce,0xfa10,0x8202,0xa105,0xfa12,
-0x8202,0xa20e,0xfa13,0x8202,0xa291,0xfa14,0x8202,0xa392,0xf88f,0x8202,0xa600,0xfa1d,0x8016,0x12,0xf900,0xfa0e,
-0xfa10,0xfa11,0xfa12,0xfa13,0xfa15,0xfa1f,0xfa20,0xfa21,0xfa22,0xfa23,0xfa25,0xfa27,0xfa2a,0xfa2e,0xfa70,0xfada,
-2,0xf800,2,0xfa1e,0x8376,0x2ba,0x221,0x222,0x234,0x250,0x2ae,0x2b0,0x2ef,0x300,0x350,0x360,
-0x370,0x374,0x376,0x37a,0x37b,0x37e,0x37f,0x384,0x38b,0x38c,0x38d,0x38e,0x3a2,0x3a3,0x3cf,0x3d0,
-0x3f7,0x400,0x487,0x488,0x4cf,0x4d0,0x4f6,0x4f8,0x4fa,0x500,0x510,0x531,0x557,0x559,0x560,0x561,
-0x588,0x589,0x58b,0x591,0x5a2,0x5a3,0x5ba,0x5bb,0x5c5,0x5d0,0x5eb,0x5f0,0x5f5,0x60c,0x60d,0x61b,
-0x61c,0x61f,0x620,0x621,0x63b,0x640,0x656,0x660,0x6ee,0x6f0,0x6ff,0x700,0x70e,0x70f,0x72d,0x730,
-0x74b,0x780,0x7b2,0x901,0x904,0x905,0x93a,0x93c,0x94e,0x950,0x955,0x958,0x971,0x981,0x984,0x985,
-0x98d,0x98f,0x991,0x993,0x9a9,0x9aa,0x9b1,0x9b2,0x9b3,0x9b6,0x9ba,0x9bc,0x9bd,0x9be,0x9c5,0x9c7,
-0x9c9,0x9cb,0x9ce,0x9d7,0x9d8,0x9dc,0x9de,0x9df,0x9e4,0x9e6,0x9fb,0xa02,0xa03,0xa05,0xa0b,0xa0f,
-0xa11,0xa13,0xa29,0xa2a,0xa31,0xa32,0xa34,0xa35,0xa37,0xa38,0xa3a,0xa3c,0xa3d,0xa3e,0xa43,0xa47,
-0xa49,0xa4b,0xa4e,0xa59,0xa5d,0xa5e,0xa5f,0xa66,0xa75,0xa81,0xa84,0xa85,0xa8c,0xa8d,0xa8e,0xa8f,
-0xa92,0xa93,0xaa9,0xaaa,0xab1,0xab2,0xab4,0xab5,0xaba,0xabc,0xac6,0xac7,0xaca,0xacb,0xace,0xad0,
-0xad1,0xae0,0xae1,0xae6,0xaf0,0xb01,0xb04,0xb05,0xb0d,0xb0f,0xb11,0xb13,0xb29,0xb2a,0xb31,0xb32,
-0xb34,0xb36,0xb3a,0xb3c,0xb44,0xb47,0xb49,0xb4b,0xb4e,0xb56,0xb58,0xb5c,0xb5e,0xb5f,0xb62,0xb66,
-0xb71,0xb82,0xb84,0xb85,0xb8b,0xb8e,0xb91,0xb92,0xb96,0xb99,0xb9b,0xb9c,0xb9d,0xb9e,0xba0,0xba3,
-0xba5,0xba8,0xbab,0xbae,0xbb6,0xbb7,0xbba,0xbbe,0xbc3,0xbc6,0xbc9,0xbca,0xbce,0xbd7,0xbd8,0xbe7,
-0xbf3,0xc01,0xc04,0xc05,0xc0d,0xc0e,0xc11,0xc12,0xc29,0xc2a,0xc34,0xc35,0xc3a,0xc3e,0xc45,0xc46,
-0xc49,0xc4a,0xc4e,0xc55,0xc57,0xc60,0xc62,0xc66,0xc70,0xc82,0xc84,0xc85,0xc8d,0xc8e,0xc91,0xc92,
-0xca9,0xcaa,0xcb4,0xcb5,0xcba,0xcbe,0xcc5,0xcc6,0xcc9,0xcca,0xcce,0xcd5,0xcd7,0xcde,0xcdf,0xce0,
-0xce2,0xce6,0xcf0,0xd02,0xd04,0xd05,0xd0d,0xd0e,0xd11,0xd12,0xd29,0xd2a,0xd3a,0xd3e,0xd44,0xd46,
-0xd49,0xd4a,0xd4e,0xd57,0xd58,0xd60,0xd62,0xd66,0xd70,0xd82,0xd84,0xd85,0xd97,0xd9a,0xdb2,0xdb3,
-0xdbc,0xdbd,0xdbe,0xdc0,0xdc7,0xdca,0xdcb,0xdcf,0xdd5,0xdd6,0xdd7,0xdd8,0xde0,0xdf2,0xdf5,0xe01,
-0xe3b,0xe3f,0xe5c,0xe81,0xe83,0xe84,0xe85,0xe87,0xe89,0xe8a,0xe8b,0xe8d,0xe8e,0xe94,0xe98,0xe99,
-0xea0,0xea1,0xea4,0xea5,0xea6,0xea7,0xea8,0xeaa,0xeac,0xead,0xeba,0xebb,0xebe,0xec0,0xec5,0xec6,
-0xec7,0xec8,0xece,0xed0,0xeda,0xedc,0xede,0xf00,0xf48,0xf49,0xf6b,0xf71,0xf8c,0xf90,0xf98,0xf99,
-0xfbd,0xfbe,0xfcd,0xfcf,0xfd0,0x1000,0x1022,0x1023,0x1028,0x1029,0x102b,0x102c,0x1033,0x1036,0x103a,0x1040,
-0x105a,0x10a0,0x10c6,0x10d0,0x10f9,0x10fb,0x10fc,0x1100,0x115a,0x115f,0x11a3,0x11a8,0x11fa,0x1200,0x1207,0x1208,
-0x1247,0x1248,0x1249,0x124a,0x124e,0x1250,0x1257,0x1258,0x1259,0x125a,0x125e,0x1260,0x1287,0x1288,0x1289,0x128a,
-0x128e,0x1290,0x12af,0x12b0,0x12b1,0x12b2,0x12b6,0x12b8,0x12bf,0x12c0,0x12c1,0x12c2,0x12c6,0x12c8,0x12cf,0x12d0,
-0x12d7,0x12d8,0x12ef,0x12f0,0x130f,0x1310,0x1311,0x1312,0x1316,0x1318,0x131f,0x1320,0x1347,0x1348,0x135b,0x1361,
-0x137d,0x13a0,0x13f5,0x1401,0x1677,0x1680,0x169d,0x16a0,0x16f1,0x1700,0x170d,0x170e,0x1715,0x1720,0x1737,0x1740,
-0x1754,0x1760,0x176d,0x176e,0x1771,0x1772,0x1774,0x1780,0x17dd,0x17e0,0x17ea,0x1800,0x180f,0x1810,0x181a,0x1820,
-0x1878,0x1880,0x18aa,0x1e00,0x1e9c,0x1ea0,0x1efa,0x1f00,0x1f16,0x1f18,0x1f1e,0x1f20,0x1f46,0x1f48,0x1f4e,0x1f50,
-0x1f58,0x1f59,0x1f5a,0x1f5b,0x1f5c,0x1f5d,0x1f5e,0x1f5f,0x1f7e,0x1f80,0x1fb5,0x1fb6,0x1fc5,0x1fc6,0x1fd4,0x1fd6,
-0x1fdc,0x1fdd,0x1ff0,0x1ff2,0x1ff5,0x1ff6,0x1fff,0x2000,0x2053,0x2057,0x2058,0x205f,0x2064,0x206a,0x2072,0x2074,
-0x208f,0x20a0,0x20b2,0x20d0,0x20eb,0x2100,0x213b,0x213d,0x214c,0x2153,0x2184,0x2190,0x23cf,0x2400,0x2427,0x2440,
-0x244b,0x2460,0x24ff,0x2500,0x2614,0x2616,0x2618,0x2619,0x267e,0x2680,0x268a,0x2701,0x2705,0x2706,0x270a,0x270c,
-0x2728,0x2729,0x274c,0x274d,0x274e,0x274f,0x2753,0x2756,0x2757,0x2758,0x275f,0x2761,0x2795,0x2798,0x27b0,0x27b1,
-0x27bf,0x27d0,0x27ec,0x27f0,0x2b00,0x2e80,0x2e9a,0x2e9b,0x2ef4,0x2f00,0x2fd6,0x2ff0,0x2ffc,0x3000,0x3040,0x3041,
-0x3097,0x3099,0x3100,0x3105,0x312d,0x3131,0x318f,0x3190,0x31b8,0x31f0,0x321d,0x3220,0x3244,0x3251,0x327c,0x327f,
-0x32cc,0x32d0,0x32ff,0x3300,0x3377,0x337b,0x33de,0x33e0,0x33ff,0x3400,0x4db6,0x4e00,0x9fa6,0xa000,0xa48d,0xa490,
-0xa4c7,0xac00,0xd7a4,0xd800,0xfa2e,0xfa30,0xfa6b,0xfb00,0xfb07,0xfb13,0xfb18,0xfb1d,0xfb37,0xfb38,0xfb3d,0xfb3e,
-0xfb3f,0xfb40,0xfb42,0xfb43,0xfb45,0xfb46,0xfbb2,0xfbd3,0xfd40,0xfd50,0xfd90,0xfd92,0xfdc8,0xfdd0,0xfdfd,0xfe00,
-0xfe10,0xfe20,0xfe24,0xfe30,0xfe47,0xfe49,0xfe53,0xfe54,0xfe67,0xfe68,0xfe6c,0xfe70,0xfe75,0xfe76,0xfefd,0xfeff,
-0xff00,0xff01,0xffbf,0xffc2,0xffc8,0xffca,0xffd0,0xffd2,0xffd8,0xffda,0xffdd,0xffe0,0xffe7,0xffe8,0xffef,0xfff9,
-1,0,1,0x300,1,0x31f,1,0x320,1,0x324,1,0x330,1,0x34b,1,0x400,
-1,0x426,1,0x428,1,0x44e,1,0xd000,1,0xd0f6,1,0xd100,1,0xd127,1,0xd12a,
-1,0xd1de,1,0xd400,1,0xd455,1,0xd456,1,0xd49d,1,0xd49e,1,0xd4a0,1,0xd4a2,
-1,0xd4a3,1,0xd4a5,1,0xd4a7,1,0xd4a9,1,0xd4ad,1,0xd4ae,1,0xd4ba,1,0xd4bb,
-1,0xd4bc,1,0xd4bd,1,0xd4c1,1,0xd4c2,1,0xd4c4,1,0xd4c5,1,0xd506,1,0xd507,
-1,0xd50b,1,0xd50d,1,0xd515,1,0xd516,1,0xd51d,1,0xd51e,1,0xd53a,1,0xd53b,
-1,0xd53f,1,0xd540,1,0xd545,1,0xd546,1,0xd547,1,0xd54a,1,0xd551,1,0xd552,
-1,0xd6a4,1,0xd6a8,1,0xd7ca,1,0xd7ce,1,0xd800,1,0xfffe,2,0xa6d7,2,0xf800,
-2,0xfa1e,2,0xfffe,3,0,3,0xfffe,4,0,4,0xfffe,5,0,5,0xfffe,
-6,0,6,0xfffe,7,0,7,0xfffe,8,0,8,0xfffe,9,0,9,0xfffe,
-0xa,0,0xa,0xfffe,0xb,0,0xb,0xfffe,0xc,0,0xc,0xfffe,0xd,0,0xd,0xfffe,
-0xe,0,0xe,1,0xe,2,0xe,0x20,0xe,0x80,0xe,0xfffe
+0x8202,0xa20e,0xfa13,0x8202,0xa291,0xfa14,0x8202,0xa392,0xf88f,0x8202,0xa600,0xfa1d,0x8018,0x14,0xf900,0xfa0e,
+0xfa10,0xfa11,0xfa12,0xfa13,0xfa15,0xfa1f,0xfa20,0xfa21,0xfa22,0xfa23,0xfa25,0xfa27,0xfa2a,0xfa2e,0xfa30,0xfa6b,
+0xfa70,0xfada,2,0xf800,2,0xfa1e,0x8376,0x2ba,0x221,0x222,0x234,0x250,0x2ae,0x2b0,0x2ef,0x300,
+0x350,0x360,0x370,0x374,0x376,0x37a,0x37b,0x37e,0x37f,0x384,0x38b,0x38c,0x38d,0x38e,0x3a2,0x3a3,
+0x3cf,0x3d0,0x3f7,0x400,0x487,0x488,0x4cf,0x4d0,0x4f6,0x4f8,0x4fa,0x500,0x510,0x531,0x557,0x559,
+0x560,0x561,0x588,0x589,0x58b,0x591,0x5a2,0x5a3,0x5ba,0x5bb,0x5c5,0x5d0,0x5eb,0x5f0,0x5f5,0x60c,
+0x60d,0x61b,0x61c,0x61f,0x620,0x621,0x63b,0x640,0x656,0x660,0x6ee,0x6f0,0x6ff,0x700,0x70e,0x70f,
+0x72d,0x730,0x74b,0x780,0x7b2,0x901,0x904,0x905,0x93a,0x93c,0x94e,0x950,0x955,0x958,0x971,0x981,
+0x984,0x985,0x98d,0x98f,0x991,0x993,0x9a9,0x9aa,0x9b1,0x9b2,0x9b3,0x9b6,0x9ba,0x9bc,0x9bd,0x9be,
+0x9c5,0x9c7,0x9c9,0x9cb,0x9ce,0x9d7,0x9d8,0x9dc,0x9de,0x9df,0x9e4,0x9e6,0x9fb,0xa02,0xa03,0xa05,
+0xa0b,0xa0f,0xa11,0xa13,0xa29,0xa2a,0xa31,0xa32,0xa34,0xa35,0xa37,0xa38,0xa3a,0xa3c,0xa3d,0xa3e,
+0xa43,0xa47,0xa49,0xa4b,0xa4e,0xa59,0xa5d,0xa5e,0xa5f,0xa66,0xa75,0xa81,0xa84,0xa85,0xa8c,0xa8d,
+0xa8e,0xa8f,0xa92,0xa93,0xaa9,0xaaa,0xab1,0xab2,0xab4,0xab5,0xaba,0xabc,0xac6,0xac7,0xaca,0xacb,
+0xace,0xad0,0xad1,0xae0,0xae1,0xae6,0xaf0,0xb01,0xb04,0xb05,0xb0d,0xb0f,0xb11,0xb13,0xb29,0xb2a,
+0xb31,0xb32,0xb34,0xb36,0xb3a,0xb3c,0xb44,0xb47,0xb49,0xb4b,0xb4e,0xb56,0xb58,0xb5c,0xb5e,0xb5f,
+0xb62,0xb66,0xb71,0xb82,0xb84,0xb85,0xb8b,0xb8e,0xb91,0xb92,0xb96,0xb99,0xb9b,0xb9c,0xb9d,0xb9e,
+0xba0,0xba3,0xba5,0xba8,0xbab,0xbae,0xbb6,0xbb7,0xbba,0xbbe,0xbc3,0xbc6,0xbc9,0xbca,0xbce,0xbd7,
+0xbd8,0xbe7,0xbf3,0xc01,0xc04,0xc05,0xc0d,0xc0e,0xc11,0xc12,0xc29,0xc2a,0xc34,0xc35,0xc3a,0xc3e,
+0xc45,0xc46,0xc49,0xc4a,0xc4e,0xc55,0xc57,0xc60,0xc62,0xc66,0xc70,0xc82,0xc84,0xc85,0xc8d,0xc8e,
+0xc91,0xc92,0xca9,0xcaa,0xcb4,0xcb5,0xcba,0xcbe,0xcc5,0xcc6,0xcc9,0xcca,0xcce,0xcd5,0xcd7,0xcde,
+0xcdf,0xce0,0xce2,0xce6,0xcf0,0xd02,0xd04,0xd05,0xd0d,0xd0e,0xd11,0xd12,0xd29,0xd2a,0xd3a,0xd3e,
+0xd44,0xd46,0xd49,0xd4a,0xd4e,0xd57,0xd58,0xd60,0xd62,0xd66,0xd70,0xd82,0xd84,0xd85,0xd97,0xd9a,
+0xdb2,0xdb3,0xdbc,0xdbd,0xdbe,0xdc0,0xdc7,0xdca,0xdcb,0xdcf,0xdd5,0xdd6,0xdd7,0xdd8,0xde0,0xdf2,
+0xdf5,0xe01,0xe3b,0xe3f,0xe5c,0xe81,0xe83,0xe84,0xe85,0xe87,0xe89,0xe8a,0xe8b,0xe8d,0xe8e,0xe94,
+0xe98,0xe99,0xea0,0xea1,0xea4,0xea5,0xea6,0xea7,0xea8,0xeaa,0xeac,0xead,0xeba,0xebb,0xebe,0xec0,
+0xec5,0xec6,0xec7,0xec8,0xece,0xed0,0xeda,0xedc,0xede,0xf00,0xf48,0xf49,0xf6b,0xf71,0xf8c,0xf90,
+0xf98,0xf99,0xfbd,0xfbe,0xfcd,0xfcf,0xfd0,0x1000,0x1022,0x1023,0x1028,0x1029,0x102b,0x102c,0x1033,0x1036,
+0x103a,0x1040,0x105a,0x10a0,0x10c6,0x10d0,0x10f9,0x10fb,0x10fc,0x1100,0x115a,0x115f,0x11a3,0x11a8,0x11fa,0x1200,
+0x1207,0x1208,0x1247,0x1248,0x1249,0x124a,0x124e,0x1250,0x1257,0x1258,0x1259,0x125a,0x125e,0x1260,0x1287,0x1288,
+0x1289,0x128a,0x128e,0x1290,0x12af,0x12b0,0x12b1,0x12b2,0x12b6,0x12b8,0x12bf,0x12c0,0x12c1,0x12c2,0x12c6,0x12c8,
+0x12cf,0x12d0,0x12d7,0x12d8,0x12ef,0x12f0,0x130f,0x1310,0x1311,0x1312,0x1316,0x1318,0x131f,0x1320,0x1347,0x1348,
+0x135b,0x1361,0x137d,0x13a0,0x13f5,0x1401,0x1677,0x1680,0x169d,0x16a0,0x16f1,0x1700,0x170d,0x170e,0x1715,0x1720,
+0x1737,0x1740,0x1754,0x1760,0x176d,0x176e,0x1771,0x1772,0x1774,0x1780,0x17dd,0x17e0,0x17ea,0x1800,0x180f,0x1810,
+0x181a,0x1820,0x1878,0x1880,0x18aa,0x1e00,0x1e9c,0x1ea0,0x1efa,0x1f00,0x1f16,0x1f18,0x1f1e,0x1f20,0x1f46,0x1f48,
+0x1f4e,0x1f50,0x1f58,0x1f59,0x1f5a,0x1f5b,0x1f5c,0x1f5d,0x1f5e,0x1f5f,0x1f7e,0x1f80,0x1fb5,0x1fb6,0x1fc5,0x1fc6,
+0x1fd4,0x1fd6,0x1fdc,0x1fdd,0x1ff0,0x1ff2,0x1ff5,0x1ff6,0x1fff,0x2000,0x2053,0x2057,0x2058,0x205f,0x2064,0x206a,
+0x2072,0x2074,0x208f,0x20a0,0x20b2,0x20d0,0x20eb,0x2100,0x213b,0x213d,0x214c,0x2153,0x2184,0x2190,0x23cf,0x2400,
+0x2427,0x2440,0x244b,0x2460,0x24ff,0x2500,0x2614,0x2616,0x2618,0x2619,0x267e,0x2680,0x268a,0x2701,0x2705,0x2706,
+0x270a,0x270c,0x2728,0x2729,0x274c,0x274d,0x274e,0x274f,0x2753,0x2756,0x2757,0x2758,0x275f,0x2761,0x2795,0x2798,
+0x27b0,0x27b1,0x27bf,0x27d0,0x27ec,0x27f0,0x2b00,0x2e80,0x2e9a,0x2e9b,0x2ef4,0x2f00,0x2fd6,0x2ff0,0x2ffc,0x3000,
+0x3040,0x3041,0x3097,0x3099,0x3100,0x3105,0x312d,0x3131,0x318f,0x3190,0x31b8,0x31f0,0x321d,0x3220,0x3244,0x3251,
+0x327c,0x327f,0x32cc,0x32d0,0x32ff,0x3300,0x3377,0x337b,0x33de,0x33e0,0x33ff,0x3400,0x4db6,0x4e00,0x9fa6,0xa000,
+0xa48d,0xa490,0xa4c7,0xac00,0xd7a4,0xd800,0xfa2e,0xfa30,0xfa6b,0xfb00,0xfb07,0xfb13,0xfb18,0xfb1d,0xfb37,0xfb38,
+0xfb3d,0xfb3e,0xfb3f,0xfb40,0xfb42,0xfb43,0xfb45,0xfb46,0xfbb2,0xfbd3,0xfd40,0xfd50,0xfd90,0xfd92,0xfdc8,0xfdd0,
+0xfdfd,0xfe00,0xfe10,0xfe20,0xfe24,0xfe30,0xfe47,0xfe49,0xfe53,0xfe54,0xfe67,0xfe68,0xfe6c,0xfe70,0xfe75,0xfe76,
+0xfefd,0xfeff,0xff00,0xff01,0xffbf,0xffc2,0xffc8,0xffca,0xffd0,0xffd2,0xffd8,0xffda,0xffdd,0xffe0,0xffe7,0xffe8,
+0xffef,0xfff9,1,0,1,0x300,1,0x31f,1,0x320,1,0x324,1,0x330,1,0x34b,
+1,0x400,1,0x426,1,0x428,1,0x44e,1,0xd000,1,0xd0f6,1,0xd100,1,0xd127,
+1,0xd12a,1,0xd1de,1,0xd400,1,0xd455,1,0xd456,1,0xd49d,1,0xd49e,1,0xd4a0,
+1,0xd4a2,1,0xd4a3,1,0xd4a5,1,0xd4a7,1,0xd4a9,1,0xd4ad,1,0xd4ae,1,0xd4ba,
+1,0xd4bb,1,0xd4bc,1,0xd4bd,1,0xd4c1,1,0xd4c2,1,0xd4c4,1,0xd4c5,1,0xd506,
+1,0xd507,1,0xd50b,1,0xd50d,1,0xd515,1,0xd516,1,0xd51d,1,0xd51e,1,0xd53a,
+1,0xd53b,1,0xd53f,1,0xd540,1,0xd545,1,0xd546,1,0xd547,1,0xd54a,1,0xd551,
+1,0xd552,1,0xd6a4,1,0xd6a8,1,0xd7ca,1,0xd7ce,1,0xd800,1,0xfffe,2,0xa6d7,
+2,0xf800,2,0xfa1e,2,0xfffe,3,0,3,0xfffe,4,0,4,0xfffe,5,0,
+5,0xfffe,6,0,6,0xfffe,7,0,7,0xfffe,8,0,8,0xfffe,9,0,
+9,0xfffe,0xa,0,0xa,0xfffe,0xb,0,0xb,0xfffe,0xc,0,0xc,0xfffe,0xd,0,
+0xd,0xfffe,0xe,0,0xe,1,0xe,2,0xe,0x20,0xe,0x80,0xe,0xfffe
};
diff --git a/icuSources/common/unormcmp.cpp b/icuSources/common/unormcmp.cpp
index ded2e730..7b3903d8 100644
--- a/icuSources/common/unormcmp.cpp
+++ b/icuSources/common/unormcmp.cpp
@@ -1,7 +1,7 @@
/*
*******************************************************************************
*
-* Copyright (C) 2001-2005, International Business Machines
+* Copyright (C) 2001-2006, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
@@ -29,6 +29,8 @@
#include "ucase.h"
#include "cmemory.h"
+U_NAMESPACE_USE
+
#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
/* compare canonically equivalent ------------------------------------------- */
diff --git a/icuSources/common/unormimp.h b/icuSources/common/unormimp.h
index f7b67806..498bf0a8 100644
--- a/icuSources/common/unormimp.h
+++ b/icuSources/common/unormimp.h
@@ -1,7 +1,7 @@
/*
*******************************************************************************
*
-* Copyright (C) 2001-2004, International Business Machines
+* Copyright (C) 2001-2007, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
@@ -236,7 +236,7 @@ unorm_internalNormalize(UChar *dest, int32_t destCapacity,
U_CFUNC int32_t
unorm_internalNormalizeWithNX(UChar *dest, int32_t destCapacity,
const UChar *src, int32_t srcLength,
- UNormalizationMode mode, int32_t options, const UnicodeSet *nx,
+ UNormalizationMode mode, int32_t options, const U_NAMESPACE_QUALIFIER UnicodeSet *nx,
UErrorCode *pErrorCode);
#endif
@@ -272,7 +272,7 @@ unorm_internalQuickCheck(const UChar *src,
int32_t srcLength,
UNormalizationMode mode,
UBool allowMaybe,
- const UnicodeSet *nx,
+ const U_NAMESPACE_QUALIFIER UnicodeSet *nx,
UErrorCode *pErrorCode);
#endif
@@ -310,7 +310,7 @@ unorm_internalQuickCheck(const UChar *src,
* for u_getIntPropertyValue().
* @internal
*/
-U_CAPI uint16_t U_EXPORT2
+U_CFUNC uint16_t U_EXPORT2
unorm_getFCD16FromCodePoint(UChar32 c);
/**
@@ -326,7 +326,6 @@ unorm_getFCDTrie(UErrorCode *pErrorCode);
#ifdef XP_CPLUSPLUS
-U_NAMESPACE_BEGIN
/**
* Internal API, used by collation code.
* Get the FCD value for a code unit, with
@@ -340,7 +339,7 @@ U_NAMESPACE_BEGIN
*
* @internal
*/
-inline uint16_t
+static inline uint16_t
unorm_getFCD16(const uint16_t *fcdTrieIndex, UChar c) {
return
fcdTrieIndex[
@@ -362,7 +361,7 @@ unorm_getFCD16(const uint16_t *fcdTrieIndex, UChar c) {
*
* @internal
*/
-inline uint16_t
+static inline uint16_t
unorm_getFCD16FromSurrogatePair(const uint16_t *fcdTrieIndex, uint16_t fcd16, UChar c2) {
return
fcdTrieIndex[
@@ -373,7 +372,6 @@ unorm_getFCD16FromSurrogatePair(const uint16_t *fcdTrieIndex, uint16_t fcd16, UC
];
}
-U_NAMESPACE_END
#endif
@@ -410,14 +408,14 @@ unorm_getDecomposition(UChar32 c, UBool compat,
* internal API, used by uprops.cpp
* @internal
*/
-U_CAPI UBool U_EXPORT2
+U_CFUNC UBool U_EXPORT2
unorm_internalIsFullCompositionExclusion(UChar32 c);
/**
* Internal API, used by enumeration of canonically equivalent strings
* @internal
*/
-U_CAPI UBool U_EXPORT2
+U_CFUNC UBool U_EXPORT2
unorm_isCanonSafeStart(UChar32 c);
/**
@@ -441,7 +439,7 @@ unorm_isNFSkippable(UChar32 c, UNormalizationMode mode);
* Requires unorm_haveData().
* @internal
*/
-U_CFUNC const UnicodeSet *
+U_CFUNC const U_NAMESPACE_QUALIFIER UnicodeSet *
unorm_getNX(int32_t options, UErrorCode *pErrorCode);
#endif
@@ -467,7 +465,7 @@ unorm_swap(const UDataSwapper *ds,
* Get the NF*_QC property for a code point, for u_getIntPropertyValue().
* @internal
*/
-U_CAPI UNormalizationCheckResult U_EXPORT2
+U_CFUNC UNormalizationCheckResult U_EXPORT2
unorm_getQuickCheck(UChar32 c, UNormalizationMode mode);
/**
diff --git a/icuSources/common/uprops.c b/icuSources/common/uprops.c
index 86464e54..a3c2aa33 100644
--- a/icuSources/common/uprops.c
+++ b/icuSources/common/uprops.c
@@ -1,7 +1,7 @@
/*
*******************************************************************************
*
-* Copyright (C) 2002-2006, International Business Machines
+* Copyright (C) 2002-2008, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
@@ -59,6 +59,7 @@ getBiDiProps() {
UErrorCode errorCode=U_ZERO_ERROR;
bdp=ubidi_getSingleton(&errorCode);
+#if !UBIDI_HARDCODE_DATA
if(U_FAILURE(errorCode)) {
errorCode=U_ZERO_ERROR;
bdp=ubidi_getDummy(&errorCode);
@@ -66,11 +67,11 @@ getBiDiProps() {
return NULL;
}
}
+#endif
umtx_lock(NULL);
if(gBdp==NULL) {
gBdp=bdp;
- bdp=NULL;
ucln_common_registerCleanup(UCLN_COMMON_UPROPS, uprops_cleanup);
}
umtx_unlock(NULL);
@@ -130,15 +131,15 @@ static const struct {
{ 1, U_MASK(UPROPS_XID_CONTINUE) },
{ 1, U_MASK(UPROPS_XID_START) },
{ UPROPS_SRC_CASE, 0 }, /* UCHAR_CASE_SENSITIVE */
- { 2, U_MASK(UPROPS_V2_S_TERM) },
- { 2, U_MASK(UPROPS_V2_VARIATION_SELECTOR) },
+ { 1, U_MASK(UPROPS_S_TERM) },
+ { 1, U_MASK(UPROPS_VARIATION_SELECTOR) },
{ UPROPS_SRC_NORM, 0 }, /* UCHAR_NFD_INERT */
{ UPROPS_SRC_NORM, 0 }, /* UCHAR_NFKD_INERT */
{ UPROPS_SRC_NORM, 0 }, /* UCHAR_NFC_INERT */
{ UPROPS_SRC_NORM, 0 }, /* UCHAR_NFKC_INERT */
{ UPROPS_SRC_NORM, 0 }, /* UCHAR_SEGMENT_STARTER */
- { 2, U_MASK(UPROPS_V2_PATTERN_SYNTAX) },
- { 2, U_MASK(UPROPS_V2_PATTERN_WHITE_SPACE) },
+ { 1, U_MASK(UPROPS_PATTERN_SYNTAX) },
+ { 1, U_MASK(UPROPS_PATTERN_WHITE_SPACE) },
{ UPROPS_SRC_CHAR_AND_PROPSVEC, 0 }, /* UCHAR_POSIX_ALNUM */
{ UPROPS_SRC_CHAR, 0 }, /* UCHAR_POSIX_BLANK */
{ UPROPS_SRC_CHAR, 0 }, /* UCHAR_POSIX_GRAPH */
@@ -253,7 +254,7 @@ u_getIntPropertyValue(UChar32 c, UProperty which) {
case UCHAR_JOINING_TYPE:
return ubidi_getJoiningType(GET_BIDI_PROPS(), c);
case UCHAR_LINE_BREAK:
- return (int32_t)(u_getUnicodeProperties(c, 0)&UPROPS_LB_MASK)>>UPROPS_LB_SHIFT;
+ return (int32_t)(u_getUnicodeProperties(c, UPROPS_LB_VWORD)&UPROPS_LB_MASK)>>UPROPS_LB_SHIFT;
case UCHAR_NUMERIC_TYPE:
type=(int32_t)GET_NUMERIC_TYPE(u_getUnicodeProperties(c, -1));
if(type>U_NT_NUMERIC) {
@@ -325,7 +326,7 @@ u_getIntPropertyMaxValue(UProperty which) {
case UCHAR_GENERAL_CATEGORY:
return (int32_t)U_CHAR_CATEGORY_COUNT-1;
case UCHAR_LINE_BREAK:
- return (uprv_getMaxValues(0)&UPROPS_LB_MASK)>>UPROPS_LB_SHIFT;
+ return (uprv_getMaxValues(UPROPS_LB_VWORD)&UPROPS_LB_MASK)>>UPROPS_LB_SHIFT;
case UCHAR_NUMERIC_TYPE:
return (int32_t)U_NT_COUNT-1;
case UCHAR_SCRIPT:
@@ -354,7 +355,7 @@ u_getIntPropertyMaxValue(UProperty which) {
}
}
-U_CAPI UPropertySource U_EXPORT2
+U_CFUNC UPropertySource U_EXPORT2
uprops_getSource(UProperty which) {
if(whichinfo.dataVersion[3] = 0;
uprv_memcpy(((uint8_t*)dh) + sizeof(DataHeader), rules, length);
- int32_t outLength = ubrk_swap(ds, dh, totalLength, outH, status);
+ outLength = ubrk_swap(ds, dh, totalLength, outH, status);
if (U_SUCCESS(*status) && outLength != totalLength) // something went horribly wrong
{
*status = U_INVALID_FORMAT_ERROR;
diff --git a/icuSources/common/uresbund.c b/icuSources/common/uresbund.c
index 1a99a241..5b4a9951 100644
--- a/icuSources/common/uresbund.c
+++ b/icuSources/common/uresbund.c
@@ -1,6 +1,6 @@
/*
******************************************************************************
-* Copyright (C) 1997-2006, International Business Machines Corporation and *
+* Copyright (C) 1997-2008, International Business Machines Corporation and *
* others. All Rights Reserved. *
******************************************************************************
*
@@ -139,6 +139,20 @@ static const ResourceData *getFallbackData(const UResourceBundle* resBundle, con
}
}
+static void
+free_entry(UResourceDataEntry *entry) {
+ if(entry->fBogus == U_ZERO_ERROR) {
+ res_unload(&(entry->fData));
+ }
+ if(entry->fName != NULL && entry->fName != entry->fNameBuffer) {
+ uprv_free(entry->fName);
+ }
+ if(entry->fPath != NULL) {
+ uprv_free(entry->fPath);
+ }
+ uprv_free(entry);
+}
+
/* Works just like ucnv_flushCache() */
/* TODO: figure out why fCountExisting may not go to zero. Do not make this function public yet. */
static int32_t ures_flushCache()
@@ -175,16 +189,7 @@ static int32_t ures_flushCache()
if (resB->fCountExisting == 0) {
rbDeletedNum++;
uhash_removeElement(cache, e);
- if(resB->fBogus == U_ZERO_ERROR) {
- res_unload(&(resB->fData));
- }
- if(resB->fName != NULL) {
- uprv_free(resB->fName);
- }
- if(resB->fPath != NULL) {
- uprv_free(resB->fPath);
- }
- uprv_free(resB);
+ free_entry(resB);
}
}
umtx_unlock(&resbMutex);
@@ -210,9 +215,7 @@ static UBool U_CALLCONV ures_cleanup(void)
/** INTERNAL: Initializes the cache for resources */
static void initCache(UErrorCode *status) {
UBool makeCache = FALSE;
- umtx_lock(&resbMutex);
- makeCache = (cache == NULL);
- umtx_unlock(&resbMutex);
+ UMTX_CHECK(&resbMutex, (cache == NULL), makeCache);
if(makeCache) {
UHashtable *newCache = uhash_open(hashEntry, compareEntries, NULL, status);
if (U_FAILURE(*status)) {
@@ -234,10 +237,16 @@ static void initCache(UErrorCode *status) {
/** INTERNAL: sets the name (locale) of the resource bundle to given name */
static void setEntryName(UResourceDataEntry *res, char *name, UErrorCode *status) {
- if(res->fName != NULL) {
+ int32_t len = uprv_strlen(name);
+ if(res->fName != NULL && res->fName != res->fNameBuffer) {
uprv_free(res->fName);
}
- res->fName = (char *)uprv_malloc(sizeof(char)*uprv_strlen(name)+1);
+ if (len < (int32_t)sizeof(res->fNameBuffer)) {
+ res->fName = res->fNameBuffer;
+ }
+ else {
+ res->fName = (char *)uprv_malloc(len+1);
+ }
if(res->fName == NULL) {
*status = U_MEMORY_ALLOCATION_ERROR;
} else {
@@ -252,7 +261,7 @@ static void setEntryName(UResourceDataEntry *res, char *name, UErrorCode *status
static UResourceDataEntry *init_entry(const char *localeID, const char *path, UErrorCode *status) {
UResourceDataEntry *r = NULL;
UResourceDataEntry find;
- int32_t hashValue;
+ /*int32_t hashValue;*/
char name[96];
const char *myPath = NULL;
char aliasName[100] = { 0 };
@@ -274,7 +283,7 @@ static UResourceDataEntry *init_entry(const char *localeID, const char *path, UE
}
if(path != NULL) { /* if we actually have path, we'll use it */
- myPath = path;
+ myPath = path;
}
find.fName = name;
@@ -282,7 +291,7 @@ static UResourceDataEntry *init_entry(const char *localeID, const char *path, UE
/* calculate the hash value of the entry */
hashkey.pointer = (void *)&find;
- hashValue = hashEntry(hashkey);
+ /*hashValue = hashEntry(hashkey);*/
/* check to see if we already have this entry */
r = (UResourceDataEntry *)uhash_get(cache, &find);
@@ -298,31 +307,30 @@ static UResourceDataEntry *init_entry(const char *localeID, const char *path, UE
UBool result = FALSE;
r = (UResourceDataEntry *) uprv_malloc(sizeof(UResourceDataEntry));
-
if(r == NULL) {
*status = U_MEMORY_ALLOCATION_ERROR;
return NULL;
}
+
+ uprv_memset(r, 0, sizeof(UResourceDataEntry));
r->fCountExisting = 1;
+ /*r->fHashKey = hashValue;*/
- r->fName = NULL;
setEntryName(r, name, status);
+ if (U_FAILURE(*status)) {
+ uprv_free(r);
+ return NULL;
+ }
- r->fPath = NULL;
- if(myPath != NULL && !U_FAILURE(*status)) {
- r->fPath = (char *)uprv_malloc(sizeof(char)*uprv_strlen(myPath)+1);
+ if(myPath != NULL) {
+ r->fPath = (char *)uprv_strdup(myPath);
if(r->fPath == NULL) {
*status = U_MEMORY_ALLOCATION_ERROR;
- } else {
- uprv_strcpy(r->fPath, myPath);
+ uprv_free(r);
+ return NULL;
}
}
- r->fHashKey = hashValue;
- r->fParent = NULL;
- uprv_memset(&r->fData, 0, sizeof(ResourceData));
- r->fBogus = U_ZERO_ERROR;
-
/* this is the actual loading - returns bool true/false */
result = res_load(&(r->fData), r->fPath, r->fName, status);
@@ -356,17 +364,16 @@ static UResourceDataEntry *init_entry(const char *localeID, const char *path, UE
{
UResourceDataEntry *oldR = NULL;
if((oldR = (UResourceDataEntry *)uhash_get(cache, r)) == NULL) { /* if the data is not cached */
- /* just insert it in the cache */
+ /* just insert it in the cache */
uhash_put(cache, (void *)r, r, status);
- } else {
- /* somebody have already inserted it while we were working, discard newly opened data */
- /* Also, we could get here IF we opened an alias */
- uprv_free(r->fName);
- if(r->fPath != NULL) {
- uprv_free(r->fPath);
+ if (U_FAILURE(*status)) {
+ free_entry(r);
+ r = NULL;
}
- res_unload(&(r->fData));
- uprv_free(r);
+ } else {
+ /* somebody have already inserted it while we were working, discard newly opened data */
+ /* Also, we could get here IF we opened an alias */
+ free_entry(r);
r = oldR;
r->fCountExisting++;
}
@@ -379,36 +386,39 @@ static UResourceDataEntry *init_entry(const char *localeID, const char *path, UE
/* INTERNAL: */
/* CAUTION: resbMutex must be locked when calling this function! */
static UResourceDataEntry *findFirstExisting(const char* path, char* name, UBool *isRoot, UBool *hasChopped, UBool *isDefault, UErrorCode* status) {
- UResourceDataEntry *r = NULL;
- UBool hasRealData = FALSE;
- const char *defaultLoc = uloc_getDefault();
- UErrorCode intStatus = U_ZERO_ERROR;
- *hasChopped = TRUE; /* we're starting with a fresh name */
-
- while(*hasChopped && !hasRealData) {
- r = init_entry(name, path, &intStatus);
- *isDefault = (UBool)(uprv_strncmp(name, defaultLoc, uprv_strlen(name)) == 0);
- hasRealData = (UBool)(r->fBogus == U_ZERO_ERROR);
- if(!hasRealData) {
- /* this entry is not real. We will discard it. */
- /* However, the parent line for this entry is */
- /* not to be used - as there might be parent */
- /* lines in cache from previous openings that */
- /* are not updated yet. */
- r->fCountExisting--;
- /*entryCloseInt(r);*/
- r = NULL;
- *status = U_USING_FALLBACK_WARNING;
- } else {
- uprv_strcpy(name, r->fName); /* this is needed for supporting aliases */
- }
+ UResourceDataEntry *r = NULL;
+ UBool hasRealData = FALSE;
+ const char *defaultLoc = uloc_getDefault();
+ *hasChopped = TRUE; /* we're starting with a fresh name */
- *isRoot = (UBool)(uprv_strcmp(name, kRootLocaleName) == 0);
+ while(*hasChopped && !hasRealData) {
+ r = init_entry(name, path, status);
+ /* Null pointer test */
+ if (U_FAILURE(*status)) {
+ return NULL;
+ }
+ *isDefault = (UBool)(uprv_strncmp(name, defaultLoc, uprv_strlen(name)) == 0);
+ hasRealData = (UBool)(r->fBogus == U_ZERO_ERROR);
+ if(!hasRealData) {
+ /* this entry is not real. We will discard it. */
+ /* However, the parent line for this entry is */
+ /* not to be used - as there might be parent */
+ /* lines in cache from previous openings that */
+ /* are not updated yet. */
+ r->fCountExisting--;
+ /*entryCloseInt(r);*/
+ r = NULL;
+ *status = U_USING_FALLBACK_WARNING;
+ } else {
+ uprv_strcpy(name, r->fName); /* this is needed for supporting aliases */
+ }
- /*Fallback data stuff*/
- *hasChopped = chopLocale(name);
- }
- return r;
+ *isRoot = (UBool)(uprv_strcmp(name, kRootLocaleName) == 0);
+
+ /*Fallback data stuff*/
+ *hasChopped = chopLocale(name);
+ }
+ return r;
}
static void ures_setIsStackObject( UResourceBundle* resB, UBool state) {
@@ -443,95 +453,112 @@ static UResourceDataEntry *entryOpen(const char* path, const char* localeID, UEr
UBool hasChopped = TRUE;
char name[96];
+ initCache(status);
+
if(U_FAILURE(*status)) {
- return NULL;
+ return NULL;
}
- initCache(status);
-
uprv_strcpy(name, localeID);
umtx_lock(&resbMutex);
{ /* umtx_lock */
- /* We're going to skip all the locales that do not have any data */
- r = findFirstExisting(path, name, &isRoot, &hasChopped, &isDefault, &intStatus);
-
- if(r != NULL) { /* if there is one real locale, we can look for parents. */
- t1 = r;
- hasRealData = TRUE;
- while (hasChopped && !isRoot && t1->fParent == NULL && !t1->fData.noFallback) {
- /* insert regular parents */
- t2 = init_entry(name, r->fPath, &parentStatus);
- t1->fParent = t2;
- t1 = t2;
- hasChopped = chopLocale(name);
- }
- }
+ /* We're going to skip all the locales that do not have any data */
+ r = findFirstExisting(path, name, &isRoot, &hasChopped, &isDefault, &intStatus);
- /* we could have reached this point without having any real data */
- /* if that is the case, we need to chain in the default locale */
- if(r==NULL && !isDefault && !isRoot /*&& t1->fParent == NULL*/) {
- /* insert default locale */
- uprv_strcpy(name, uloc_getDefault());
- r = findFirstExisting(path, name, &isRoot, &hasChopped, &isDefault, &intStatus);
- intStatus = U_USING_DEFAULT_WARNING;
- if(r != NULL) { /* the default locale exists */
+ if(r != NULL) { /* if there is one real locale, we can look for parents. */
t1 = r;
hasRealData = TRUE;
- isDefault = TRUE;
- while (hasChopped && t1->fParent == NULL) {
- /* insert chopped defaults */
+ while (hasChopped && !isRoot && t1->fParent == NULL && !t1->fData.noFallback) {
+ /* insert regular parents */
t2 = init_entry(name, r->fPath, &parentStatus);
+ /* Check for null pointer. */
+ if (t2 == NULL) {
+ *status = U_MEMORY_ALLOCATION_ERROR;
+ goto finishUnlock;
+ }
t1->fParent = t2;
t1 = t2;
hasChopped = chopLocale(name);
}
- }
- }
+ }
- /* we could still have r == NULL at this point - maybe even default locale is not */
- /* present */
- if(r == NULL) {
- uprv_strcpy(name, kRootLocaleName);
- r = findFirstExisting(path, name, &isRoot, &hasChopped, &isDefault, &intStatus);
- if(r != NULL) {
- t1 = r;
- intStatus = U_USING_DEFAULT_WARNING;
- hasRealData = TRUE;
- } else { /* we don't even have the root locale */
- *status = U_MISSING_RESOURCE_ERROR;
+ /* we could have reached this point without having any real data */
+ /* if that is the case, we need to chain in the default locale */
+ if(r==NULL && !isDefault && !isRoot /*&& t1->fParent == NULL*/) {
+ /* insert default locale */
+ uprv_strcpy(name, uloc_getDefault());
+ r = findFirstExisting(path, name, &isRoot, &hasChopped, &isDefault, &intStatus);
+ intStatus = U_USING_DEFAULT_WARNING;
+ if(r != NULL) { /* the default locale exists */
+ t1 = r;
+ hasRealData = TRUE;
+ isDefault = TRUE;
+ while (hasChopped && t1->fParent == NULL) {
+ /* insert chopped defaults */
+ t2 = init_entry(name, r->fPath, &parentStatus);
+ /* Check for null pointer. */
+ if (t2 == NULL) {
+ *status = U_MEMORY_ALLOCATION_ERROR;
+ goto finishUnlock;
+ }
+ t1->fParent = t2;
+ t1 = t2;
+ hasChopped = chopLocale(name);
+ }
+ }
}
- } else if(!isRoot && uprv_strcmp(t1->fName, kRootLocaleName) != 0 && t1->fParent == NULL && !r->fData.noFallback) {
- /* insert root locale */
- t2 = init_entry(kRootLocaleName, r->fPath, &parentStatus);
- if(!hasRealData) {
- r->fBogus = U_USING_DEFAULT_WARNING;
- }
- hasRealData = (UBool)((t2->fBogus == U_ZERO_ERROR) | hasRealData);
- t1->fParent = t2;
- t1 = t2;
- }
- while(r != NULL && !isRoot && t1->fParent != NULL) {
- t1->fParent->fCountExisting++;
- t1 = t1->fParent;
- hasRealData = (UBool)((t1->fBogus == U_ZERO_ERROR) | hasRealData);
- }
+ /* we could still have r == NULL at this point - maybe even default locale is not */
+ /* present */
+ if(r == NULL) {
+ uprv_strcpy(name, kRootLocaleName);
+ r = findFirstExisting(path, name, &isRoot, &hasChopped, &isDefault, &intStatus);
+ if(r != NULL) {
+ t1 = r;
+ intStatus = U_USING_DEFAULT_WARNING;
+ hasRealData = TRUE;
+ } else { /* we don't even have the root locale */
+ *status = U_MISSING_RESOURCE_ERROR;
+ goto finishUnlock;
+ }
+ } else if(!isRoot && uprv_strcmp(t1->fName, kRootLocaleName) != 0 && t1->fParent == NULL && !r->fData.noFallback) {
+ /* insert root locale */
+ t2 = init_entry(kRootLocaleName, r->fPath, &parentStatus);
+ /* Check for null pointer. */
+ if (t2 == NULL) {
+ *status = U_MEMORY_ALLOCATION_ERROR;
+ goto finishUnlock;
+ }
+ if(!hasRealData) {
+ r->fBogus = U_USING_DEFAULT_WARNING;
+ }
+ hasRealData = (UBool)((t2->fBogus == U_ZERO_ERROR) | hasRealData);
+ t1->fParent = t2;
+ t1 = t2;
+ }
+
+ while(r != NULL && !isRoot && t1->fParent != NULL) {
+ t1->fParent->fCountExisting++;
+ t1 = t1->fParent;
+ hasRealData = (UBool)((t1->fBogus == U_ZERO_ERROR) | hasRealData);
+ }
} /* umtx_lock */
+finishUnlock:
umtx_unlock(&resbMutex);
if(U_SUCCESS(*status)) {
- if(U_SUCCESS(parentStatus)) {
- if(intStatus != U_ZERO_ERROR) {
- *status = intStatus;
+ if(U_SUCCESS(parentStatus)) {
+ if(intStatus != U_ZERO_ERROR) {
+ *status = intStatus;
+ }
+ return r;
+ } else {
+ *status = parentStatus;
+ return NULL;
}
- return r;
- } else {
- *status = parentStatus;
- return NULL;
- }
} else {
- return NULL;
+ return NULL;
}
}
@@ -597,23 +624,34 @@ U_CFUNC void ures_setResPath(UResourceBundle *resB, const char* toAdd) {
uprv_strcpy(resB->fResPath, toAdd);
}
*/
-static void ures_appendResPath(UResourceBundle *resB, const char* toAdd, int32_t lenToAdd) {
- int32_t resPathLenOrig = resB->fResPathLen;
- if(resB->fResPath == NULL) {
- resB->fResPath = resB->fResBuf;
- *(resB->fResPath) = 0;
- resB->fResPathLen = 0;
- }
- resB->fResPathLen += lenToAdd;
- if(RES_BUFSIZE <= resB->fResPathLen+1) {
- if(resB->fResPath == resB->fResBuf) {
- resB->fResPath = (char *)uprv_malloc((resB->fResPathLen+1)*sizeof(char));
- uprv_strcpy(resB->fResPath, resB->fResBuf);
- } else {
- resB->fResPath = (char *)uprv_realloc(resB->fResPath, (resB->fResPathLen+1)*sizeof(char));
+static void ures_appendResPath(UResourceBundle *resB, const char* toAdd, int32_t lenToAdd, UErrorCode *status) {
+ int32_t resPathLenOrig = resB->fResPathLen;
+ if(resB->fResPath == NULL) {
+ resB->fResPath = resB->fResBuf;
+ *(resB->fResPath) = 0;
+ resB->fResPathLen = 0;
+ }
+ resB->fResPathLen += lenToAdd;
+ if(RES_BUFSIZE <= resB->fResPathLen+1) {
+ if(resB->fResPath == resB->fResBuf) {
+ resB->fResPath = (char *)uprv_malloc((resB->fResPathLen+1)*sizeof(char));
+ /* Check that memory was allocated correctly. */
+ if (resB->fResPath == NULL) {
+ *status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ uprv_strcpy(resB->fResPath, resB->fResBuf);
+ } else {
+ char *temp = (char *)uprv_realloc(resB->fResPath, (resB->fResPathLen+1)*sizeof(char));
+ /* Check that memory was reallocated correctly. */
+ if (temp == NULL) {
+ *status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ resB->fResPath = temp;
+ }
}
- }
- uprv_strcpy(resB->fResPath + resPathLenOrig, toAdd);
+ uprv_strcpy(resB->fResPath + resPathLenOrig, toAdd);
}
static void ures_freeResPath(UResourceBundle *resB) {
@@ -662,219 +700,223 @@ static UResourceBundle *init_resb_result(const ResourceData *rdata, Resource r,
if(status == NULL || U_FAILURE(*status)) {
return resB;
}
+ if (parent == NULL) {
+ *status = U_ILLEGAL_ARGUMENT_ERROR;
+ return NULL;
+ }
if(RES_GET_TYPE(r) == URES_ALIAS) { /* This is an alias, need to exchange with real data */
- if(noAlias < URES_MAX_ALIAS_LEVEL) {
- int32_t len = 0;
- const UChar *alias = res_getAlias(rdata, r, &len);
- if(len > 0) {
- /* we have an alias, now let's cut it up */
- char stackAlias[200];
- char *chAlias = NULL, *path = NULL, *locale = NULL, *keyPath = NULL;
- int32_t capacity;
-
- /*
- * Allocate enough space for both the char * version
- * of the alias and parent->fResPath.
- *
- * We do this so that res_findResource() can modify the path,
- * which allows us to remove redundant _res_findResource() variants
- * in uresdata.c.
- * res_findResource() now NUL-terminates each segment so that table keys
- * can always be compared with strcmp() instead of strncmp().
- * Saves code there and simplifies testing and code coverage.
- *
- * markus 2003oct17
- */
- ++len; /* count the terminating NUL */
- if(parent != NULL && parent->fResPath != NULL) {
- capacity = (int32_t)uprv_strlen(parent->fResPath) + 1;
- } else {
- capacity = 0;
- }
- if(capacity < len) {
- capacity = len;
- }
- if(capacity <= sizeof(stackAlias)) {
- capacity = sizeof(stackAlias);
- chAlias = stackAlias;
- } else {
- chAlias = (char *)uprv_malloc(capacity);
- /* test for NULL */
- if(chAlias == NULL) {
- *status = U_MEMORY_ALLOCATION_ERROR;
- return NULL;
- }
- }
- u_UCharsToChars(alias, chAlias, len);
-
- if(*chAlias == RES_PATH_SEPARATOR) {
- /* there is a path included */
- locale = uprv_strchr(chAlias+1, RES_PATH_SEPARATOR);
- if(locale == NULL) {
- locale = uprv_strchr(chAlias, 0); /* avoid locale == NULL to make code below work */
- } else {
- *locale = 0;
- locale++;
- }
- path = chAlias+1;
- if(uprv_strcmp(path, "LOCALE") == 0) {
- /* this is an XPath alias, starting with "/LOCALE/" */
- /* it contains the path to a resource which should be looked up */
- /* starting in parent */
- keyPath = locale;
- locale = parent->fData->fName; /* this is the parent's name */
- path = realData->fPath; /* we will be looking in the same package */
- } else {
- if(uprv_strcmp(path, "ICUDATA") == 0) { /* want ICU data */
- path = NULL;
+ if(noAlias < URES_MAX_ALIAS_LEVEL) {
+ int32_t len = 0;
+ const UChar *alias = res_getAlias(rdata, r, &len);
+ if(len > 0) {
+ /* we have an alias, now let's cut it up */
+ char stackAlias[200];
+ char *chAlias = NULL, *path = NULL, *locale = NULL, *keyPath = NULL;
+ int32_t capacity;
+
+ /*
+ * Allocate enough space for both the char * version
+ * of the alias and parent->fResPath.
+ *
+ * We do this so that res_findResource() can modify the path,
+ * which allows us to remove redundant _res_findResource() variants
+ * in uresdata.c.
+ * res_findResource() now NUL-terminates each segment so that table keys
+ * can always be compared with strcmp() instead of strncmp().
+ * Saves code there and simplifies testing and code coverage.
+ *
+ * markus 2003oct17
+ */
+ ++len; /* count the terminating NUL */
+ if(parent->fResPath != NULL) {
+ capacity = (int32_t)uprv_strlen(parent->fResPath) + 1;
+ } else {
+ capacity = 0;
}
- keyPath = uprv_strchr(locale, RES_PATH_SEPARATOR);
- if(keyPath) {
- *keyPath = 0;
- keyPath++;
+ if(capacity < len) {
+ capacity = len;
}
- }
- } else {
- /* no path, start with a locale */
- locale = chAlias;
- keyPath = uprv_strchr(locale, RES_PATH_SEPARATOR);
- if(keyPath) {
- *keyPath = 0;
- keyPath++;
- }
- path = realData->fPath;
- }
-
-
- {
- /* got almost everything, let's try to open */
- /* first, open the bundle with real data */
- UResourceBundle *result = resB;
- const char* temp = NULL;
- UErrorCode intStatus = U_ZERO_ERROR;
- UResourceBundle *mainRes = ures_openDirect(path, locale, &intStatus);
- if(U_SUCCESS(intStatus)) {
- if(keyPath == NULL) {
- /* no key path. This means that we are going to
- * to use the corresponding resource from
- * another bundle
- */
- /* first, we are going to get a corresponding parent
- * resource to the one we are searching.
- */
- char *aKey = parent->fResPath;
- if(aKey) {
- uprv_strcpy(chAlias, aKey); /* allocated large enough above */
- aKey = chAlias;
- r = res_findResource(&(mainRes->fResData), mainRes->fRes, &aKey, &temp);
+ if(capacity <= sizeof(stackAlias)) {
+ capacity = sizeof(stackAlias);
+ chAlias = stackAlias;
} else {
- r = mainRes->fRes;
+ chAlias = (char *)uprv_malloc(capacity);
+ /* test for NULL */
+ if(chAlias == NULL) {
+ *status = U_MEMORY_ALLOCATION_ERROR;
+ return NULL;
+ }
}
- if(key) {
- /* we need to make keyPath from parent's fResPath and
- * current key, if there is a key associated
- */
- len = (int32_t)(uprv_strlen(key) + 1);
- if(len > capacity) {
- capacity = len;
- if(chAlias == stackAlias) {
- chAlias = (char *)uprv_malloc(capacity);
+ u_UCharsToChars(alias, chAlias, len);
+
+ if(*chAlias == RES_PATH_SEPARATOR) {
+ /* there is a path included */
+ locale = uprv_strchr(chAlias+1, RES_PATH_SEPARATOR);
+ if(locale == NULL) {
+ locale = uprv_strchr(chAlias, 0); /* avoid locale == NULL to make code below work */
} else {
- chAlias = (char *)uprv_realloc(chAlias, capacity);
+ *locale = 0;
+ locale++;
}
- if(chAlias == NULL) {
- ures_close(mainRes);
- *status = U_MEMORY_ALLOCATION_ERROR;
- return NULL;
+ path = chAlias+1;
+ if(uprv_strcmp(path, "LOCALE") == 0) {
+ /* this is an XPath alias, starting with "/LOCALE/" */
+ /* it contains the path to a resource which should be looked up */
+ /* starting in the requested locale */
+ keyPath = locale;
+ locale = parent->fTopLevelData->fName; /* this is the requested locale's name */
+ path = realData->fPath; /* we will be looking in the same package */
+ } else {
+ if(uprv_strcmp(path, "ICUDATA") == 0) { /* want ICU data */
+ path = NULL;
+ }
+ keyPath = uprv_strchr(locale, RES_PATH_SEPARATOR);
+ if(keyPath) {
+ *keyPath = 0;
+ keyPath++;
+ }
}
- }
- uprv_memcpy(chAlias, key, len);
- aKey = chAlias;
- r = res_findResource(&(mainRes->fResData), r, &aKey, &temp);
- } else if(index != -1) {
- /* if there is no key, but there is an index, try to get by the index */
- /* here we have either a table or an array, so get the element */
- if(RES_GET_TYPE(r) == URES_TABLE || RES_GET_TYPE(r) == URES_TABLE32) {
- r = res_getTableItemByIndex(&(mainRes->fResData), r, index, (const char **)&aKey);
- } else { /* array */
- r = res_getArrayItem(&(mainRes->fResData), r, index);
- }
- }
- if(r != RES_BOGUS) {
- result = init_resb_result(&(mainRes->fResData), r, temp, -1, mainRes->fData, mainRes, noAlias+1, resB, status);
} else {
- *status = U_MISSING_RESOURCE_ERROR;
- result = resB;
- }
- } else {
- /* this one is a bit trickier.
- * we start finding keys, but after we resolve one alias, the path might continue.
- * Consider:
- * aliastest:alias { "testtypes/anotheralias/Sequence" }
- * anotheralias:alias { "/ICUDATA/sh/CollationElements" }
- * aliastest resource should finally have the sequence, not collation elements.
- */
- UResourceDataEntry *dataEntry = mainRes->fData;
- char stackPath[URES_MAX_BUFFER_SIZE];
- char *pathBuf = stackPath, *myPath = pathBuf;
- if(uprv_strlen(keyPath) > URES_MAX_BUFFER_SIZE) {
- pathBuf = (char *)uprv_malloc((uprv_strlen(keyPath)+1)*sizeof(char));
- if(pathBuf == NULL) {
- *status = U_MEMORY_ALLOCATION_ERROR;
- return NULL;
- }
- }
- uprv_strcpy(pathBuf, keyPath);
- result = mainRes;
- /* now we have fallback following here */
- do {
- r = dataEntry->fData.rootRes;
- /* this loop handles 'found' resources over several levels */
- while(*myPath && U_SUCCESS(*status)) {
- r = res_findResource(&(dataEntry->fData), r, &myPath, &temp);
- if(r != RES_BOGUS) { /* found a resource, but it might be an indirection */
- resB = init_resb_result(&(dataEntry->fData), r, temp, -1, dataEntry, result, noAlias+1, resB, status);
- result = resB;
- if(result) {
- r = result->fRes; /* switch to a new resource, possibly a new tree */
- dataEntry = result->fData;
- }
- } else { /* no resource found, we don't really want to look anymore on this level */
- break;
+ /* no path, start with a locale */
+ locale = chAlias;
+ keyPath = uprv_strchr(locale, RES_PATH_SEPARATOR);
+ if(keyPath) {
+ *keyPath = 0;
+ keyPath++;
}
- }
- dataEntry = dataEntry->fParent;
- uprv_strcpy(pathBuf, keyPath);
- myPath = pathBuf;
- } while(r == RES_BOGUS && dataEntry != NULL);
- if(r == RES_BOGUS) {
- *status = U_MISSING_RESOURCE_ERROR;
- result = resB;
+ path = realData->fPath;
}
- if(pathBuf != stackPath) {
- uprv_free(pathBuf);
+
+
+ {
+ /* got almost everything, let's try to open */
+ /* first, open the bundle with real data */
+ UResourceBundle *result = resB;
+ const char* temp = NULL;
+ UErrorCode intStatus = U_ZERO_ERROR;
+ UResourceBundle *mainRes = ures_openDirect(path, locale, &intStatus);
+ if(U_SUCCESS(intStatus)) {
+ if(keyPath == NULL) {
+ /* no key path. This means that we are going to
+ * to use the corresponding resource from
+ * another bundle
+ */
+ /* first, we are going to get a corresponding parent
+ * resource to the one we are searching.
+ */
+ char *aKey = parent->fResPath;
+ if(aKey) {
+ uprv_strcpy(chAlias, aKey); /* allocated large enough above */
+ aKey = chAlias;
+ r = res_findResource(&(mainRes->fResData), mainRes->fRes, &aKey, &temp);
+ } else {
+ r = mainRes->fRes;
+ }
+ if(key) {
+ /* we need to make keyPath from parent's fResPath and
+ * current key, if there is a key associated
+ */
+ len = (int32_t)(uprv_strlen(key) + 1);
+ if(len > capacity) {
+ capacity = len;
+ if(chAlias == stackAlias) {
+ chAlias = (char *)uprv_malloc(capacity);
+ } else {
+ chAlias = (char *)uprv_realloc(chAlias, capacity);
+ }
+ if(chAlias == NULL) {
+ ures_close(mainRes);
+ *status = U_MEMORY_ALLOCATION_ERROR;
+ return NULL;
+ }
+ }
+ uprv_memcpy(chAlias, key, len);
+ aKey = chAlias;
+ r = res_findResource(&(mainRes->fResData), r, &aKey, &temp);
+ } else if(index != -1) {
+ /* if there is no key, but there is an index, try to get by the index */
+ /* here we have either a table or an array, so get the element */
+ if(RES_GET_TYPE(r) == URES_TABLE || RES_GET_TYPE(r) == URES_TABLE32) {
+ r = res_getTableItemByIndex(&(mainRes->fResData), r, index, (const char **)&aKey);
+ } else { /* array */
+ r = res_getArrayItem(&(mainRes->fResData), r, index);
+ }
+ }
+ if(r != RES_BOGUS) {
+ result = init_resb_result(&(mainRes->fResData), r, temp, -1, mainRes->fData, mainRes, noAlias+1, resB, status);
+ } else {
+ *status = U_MISSING_RESOURCE_ERROR;
+ result = resB;
+ }
+ } else {
+ /* this one is a bit trickier.
+ * we start finding keys, but after we resolve one alias, the path might continue.
+ * Consider:
+ * aliastest:alias { "testtypes/anotheralias/Sequence" }
+ * anotheralias:alias { "/ICUDATA/sh/CollationElements" }
+ * aliastest resource should finally have the sequence, not collation elements.
+ */
+ UResourceDataEntry *dataEntry = mainRes->fData;
+ char stackPath[URES_MAX_BUFFER_SIZE];
+ char *pathBuf = stackPath, *myPath = pathBuf;
+ if(uprv_strlen(keyPath) > URES_MAX_BUFFER_SIZE) {
+ pathBuf = (char *)uprv_malloc((uprv_strlen(keyPath)+1)*sizeof(char));
+ if(pathBuf == NULL) {
+ *status = U_MEMORY_ALLOCATION_ERROR;
+ return NULL;
+ }
+ }
+ uprv_strcpy(pathBuf, keyPath);
+ result = mainRes;
+ /* now we have fallback following here */
+ do {
+ r = dataEntry->fData.rootRes;
+ /* this loop handles 'found' resources over several levels */
+ while(*myPath && U_SUCCESS(*status)) {
+ r = res_findResource(&(dataEntry->fData), r, &myPath, &temp);
+ if(r != RES_BOGUS) { /* found a resource, but it might be an indirection */
+ resB = init_resb_result(&(dataEntry->fData), r, temp, -1, dataEntry, result, noAlias+1, resB, status);
+ result = resB;
+ if(result) {
+ r = result->fRes; /* switch to a new resource, possibly a new tree */
+ dataEntry = result->fData;
+ }
+ } else { /* no resource found, we don't really want to look anymore on this level */
+ break;
+ }
+ }
+ dataEntry = dataEntry->fParent;
+ uprv_strcpy(pathBuf, keyPath);
+ myPath = pathBuf;
+ } while(r == RES_BOGUS && dataEntry != NULL);
+ if(r == RES_BOGUS) {
+ *status = U_MISSING_RESOURCE_ERROR;
+ result = resB;
+ }
+ if(pathBuf != stackPath) {
+ uprv_free(pathBuf);
+ }
+ }
+ } else { /* we failed to open the resource we're aliasing to */
+ *status = intStatus;
+ }
+ if(chAlias != stackAlias) {
+ uprv_free(chAlias);
+ }
+ if(mainRes != result) {
+ ures_close(mainRes);
+ }
+ return result;
}
- }
- } else { /* we failed to open the resource we're aliasing to */
- *status = intStatus;
- }
- if(chAlias != stackAlias) {
- uprv_free(chAlias);
- }
- if(mainRes != result) {
- ures_close(mainRes);
+ } else {
+ /* bad alias, should be an error */
+ *status = U_ILLEGAL_ARGUMENT_ERROR;
+ return resB;
}
- return result;
- }
} else {
- /* bad alias, should be an error */
- *status = U_ILLEGAL_ARGUMENT_ERROR;
- return resB;
+ *status = U_TOO_MANY_ALIASES_ERROR;
+ return resB;
}
- } else {
- *status = U_TOO_MANY_ALIASES_ERROR;
- return resB;
- }
}
if(resB == NULL) {
resB = (UResourceBundle *)uprv_malloc(sizeof(UResourceBundle));
@@ -894,14 +936,14 @@ static UResourceBundle *init_resb_result(const ResourceData *rdata, Resource r,
uprv_free(resB->fVersion);
}
/*
- weiv: if stack object was passed in, it doesn't really need to be reinited,
- since the purpose of initing is to remove stack junk. However, at this point
- we would not do anything to an allocated object, so stack object should be
- treated the same
+ weiv: if stack object was passed in, it doesn't really need to be reinited,
+ since the purpose of initing is to remove stack junk. However, at this point
+ we would not do anything to an allocated object, so stack object should be
+ treated the same
*/
/*
if(ures_isStackObject(resB) != FALSE) {
- ures_initStackObject(resB);
+ ures_initStackObject(resB);
}
*/
if(parent != resB) {
@@ -914,22 +956,22 @@ static UResourceBundle *init_resb_result(const ResourceData *rdata, Resource r,
resB->fIsTopLevel = FALSE;
resB->fIndex = -1;
resB->fKey = key;
- resB->fParentRes = parent;
+ /*resB->fParentRes = parent;*/
resB->fTopLevelData = parent->fTopLevelData;
if(parent->fResPath && parent != resB) {
- ures_appendResPath(resB, parent->fResPath, parent->fResPathLen);
+ ures_appendResPath(resB, parent->fResPath, parent->fResPathLen, status);
}
if(key != NULL) {
- ures_appendResPath(resB, key, (int32_t)uprv_strlen(key));
+ ures_appendResPath(resB, key, (int32_t)uprv_strlen(key), status);
if(resB->fResPath[resB->fResPathLen-1] != RES_PATH_SEPARATOR) {
- ures_appendResPath(resB, RES_PATH_SEPARATOR_S, 1);
+ ures_appendResPath(resB, RES_PATH_SEPARATOR_S, 1, status);
}
} else if(index >= 0) {
char buf[256];
int32_t len = T_CString_integerToString(buf, index, 10);
- ures_appendResPath(resB, buf, len);
+ ures_appendResPath(resB, buf, len, status);
if(resB->fResPath[resB->fResPathLen-1] != RES_PATH_SEPARATOR) {
- ures_appendResPath(resB, RES_PATH_SEPARATOR_S, 1);
+ ures_appendResPath(resB, RES_PATH_SEPARATOR_S, 1, status);
}
}
/* Make sure that Purify doesn't complain about uninitialized memory copies. */
@@ -941,7 +983,7 @@ static UResourceBundle *init_resb_result(const ResourceData *rdata, Resource r,
resB->fVersion = NULL;
resB->fRes = r;
/*resB->fParent = parent->fRes;*/
- uprv_memcpy(&resB->fResData, rdata, sizeof(ResourceData));
+ uprv_memmove(&resB->fResData, rdata, sizeof(ResourceData));
resB->fSize = res_countArrayItems(&(resB->fResData), resB->fRes);
return resB;
}
@@ -968,11 +1010,11 @@ UResourceBundle *ures_copyResb(UResourceBundle *r, const UResourceBundle *origin
r->fResPath = NULL;
r->fResPathLen = 0;
if(original->fResPath) {
- ures_appendResPath(r, original->fResPath, original->fResPathLen);
+ ures_appendResPath(r, original->fResPath, original->fResPathLen, status);
}
ures_setIsStackObject(r, isStackObject);
if(r->fData != NULL) {
- entryIncrease(r->fData);
+ entryIncrease(r->fData);
}
}
return r;
@@ -1070,7 +1112,7 @@ ures_toUTF8String(const UChar *s16, int32_t length16,
}
}
-U_DRAFT const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
ures_getUTF8String(const UResourceBundle *resB,
char *dest, int32_t *pLength,
UBool forceCopy,
@@ -1383,11 +1425,13 @@ U_CAPI const UChar* U_EXPORT2 ures_getStringByIndex(const UResourceBundle *resB,
}
return ures_getStringWithAlias(resB, r, indexS, len, status);
case URES_ALIAS:
- return ures_getStringWithAlias(resB, resB->fRes, indexS, len, status);
+ return ures_getStringWithAlias(resB, resB->fRes, indexS, len, status);
/*case URES_INT_VECTOR:*/
- /*default:*/
- /*return;*/
+ default:
+ /* must not occur */
+ *status = U_INTERNAL_PROGRAM_ERROR;
+ break;
}
} else {
*status = U_MISSING_RESOURCE_ERROR;
@@ -1395,7 +1439,7 @@ U_CAPI const UChar* U_EXPORT2 ures_getStringByIndex(const UResourceBundle *resB,
return NULL;
}
-U_DRAFT const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
ures_getUTF8StringByIndex(const UResourceBundle *resB,
int32_t index,
char *dest, int32_t *pLength,
@@ -1724,7 +1768,7 @@ U_CAPI const UChar* U_EXPORT2 ures_getStringByKey(const UResourceBundle *resB, c
return NULL;
}
-U_DRAFT const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
ures_getUTF8StringByKey(const UResourceBundle *resB,
const char *key,
char *dest, int32_t *pLength,
@@ -1788,6 +1832,7 @@ U_CFUNC const char* ures_getName(const UResourceBundle* resB) {
return resB->fData->fName;
}
+#ifdef URES_DEBUG
U_CFUNC const char* ures_getPath(const UResourceBundle* resB) {
if(resB == NULL) {
return NULL;
@@ -1795,6 +1840,7 @@ U_CFUNC const char* ures_getPath(const UResourceBundle* resB) {
return resB->fData->fPath;
}
+#endif
/* OLD API implementation */
@@ -1951,7 +1997,7 @@ ures_openDirect(const char* path, const char* localeID, UErrorCode* status) {
r->fSize = res_countArrayItems(&(r->fResData), r->fRes);
r->fResPath = NULL;
r->fResPathLen = 0;
- r->fParentRes = NULL;
+ /*r->fParentRes = NULL;*/
r->fTopLevelData = r->fData;
return r;
@@ -2015,6 +2061,10 @@ ures_getVersionNumber(const UResourceBundle* resourceBundle)
((UResourceBundle *)resourceBundle)->fVersion = (char *)uprv_malloc(1 + len);
+ /* Check for null pointer. */
+ if (((UResourceBundle *)resourceBundle)->fVersion == NULL) {
+ return NULL;
+ }
if(minor_len > 0) {
u_UCharsToChars(minor_version, resourceBundle->fVersion , minor_len);
@@ -2146,6 +2196,16 @@ ures_openAvailableLocales(const char *path, UErrorCode *status)
return en;
}
+static UBool isLocaleInList(UEnumeration *locEnum, const char *locToSearch, UErrorCode *status) {
+ const char *loc;
+ while ((loc = uenum_next(locEnum, NULL, status)) != NULL) {
+ if (uprv_strcmp(loc, locToSearch) == 0) {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
U_CAPI int32_t U_EXPORT2
ures_getFunctionalEquivalent(char *result, int32_t resultCapacity,
const char *path, const char *resName, const char *keyword, const char *locid,
@@ -2163,9 +2223,6 @@ ures_getFunctionalEquivalent(char *result, int32_t resultCapacity,
UErrorCode subStatus = U_ZERO_ERROR;
int32_t length = 0;
if(U_FAILURE(*status)) return 0;
- if(isAvailable) {
- *isAvailable = TRUE;
- }
uloc_getKeywordValue(locid, keyword, kwVal, 1024-1,&subStatus);
if(!uprv_strcmp(kwVal, DEFAULT_TAG)) {
kwVal[0]=0;
@@ -2181,7 +2238,16 @@ ures_getFunctionalEquivalent(char *result, int32_t resultCapacity,
uprv_strcpy(parent, base);
uprv_strcpy(found, base);
-
+
+ if(isAvailable) {
+ UEnumeration *locEnum = ures_openAvailableLocales(path, &subStatus);
+ *isAvailable = TRUE;
+ if (U_SUCCESS(subStatus)) {
+ *isAvailable = isLocaleInList(locEnum, parent, &subStatus);
+ }
+ uenum_close(locEnum);
+ }
+
if(U_FAILURE(subStatus)) {
*status = subStatus;
return 0;
@@ -2191,7 +2257,8 @@ ures_getFunctionalEquivalent(char *result, int32_t resultCapacity,
subStatus = U_ZERO_ERROR;
res = ures_open(path, parent, &subStatus);
if(((subStatus == U_USING_FALLBACK_WARNING) ||
- (subStatus == U_USING_DEFAULT_WARNING)) && isAvailable) {
+ (subStatus == U_USING_DEFAULT_WARNING)) && isAvailable)
+ {
*isAvailable = FALSE;
}
isAvailable = NULL; /* only want to set this the first time around */
@@ -2231,11 +2298,14 @@ ures_getFunctionalEquivalent(char *result, int32_t resultCapacity,
}
subStatus = U_ZERO_ERROR;
-
- uprv_strcpy(found, parent);
- uloc_getParent(found,parent,1023,&subStatus);
+
+ if (res != NULL) {
+ uprv_strcpy(found, ures_getLocaleByType(res, ULOC_VALID_LOCALE, &subStatus));
+ }
+
+ uloc_getParent(found,parent,sizeof(parent),&subStatus);
ures_close(res);
- } while(!defVal[0] && *found && U_SUCCESS(*status));
+ } while(!defVal[0] && *found && uprv_strcmp(found, "root") != 0 && U_SUCCESS(*status));
/* Now, see if we can find the kwVal collator.. start the search over.. */
uprv_strcpy(parent, base);
@@ -2545,6 +2615,8 @@ ures_getKeywordValues(const char *path, const char *keyword, UErrorCode *status)
#endif
return uloc_openKeywordList(valuesBuf, valuesIndex, status);
}
+#if 0
+/* This code isn't needed, and given the documentation warnings the implementation is suspect */
U_INTERNAL UBool U_EXPORT2
ures_equal(const UResourceBundle* res1, const UResourceBundle* res2){
if(res1==NULL || res2==NULL){
@@ -2604,4 +2676,6 @@ ures_getParentBundle(const UResourceBundle* res){
}
return res->fParentRes;
}
+#endif
+
/* eof */
diff --git a/icuSources/common/uresimp.h b/icuSources/common/uresimp.h
index 3e530d9e..4d9ed92d 100644
--- a/icuSources/common/uresimp.h
+++ b/icuSources/common/uresimp.h
@@ -1,6 +1,6 @@
/*
**********************************************************************
-* Copyright (C) 2000-2006, International Business Machines
+* Copyright (C) 2000-2008, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
*/
@@ -46,12 +46,12 @@ typedef struct UResourceDataEntry UResourceDataEntry;
struct UResourceDataEntry {
char *fName; /* name of the locale for bundle - still to decide whether it is original or fallback */
char *fPath; /* path to bundle - used for distinguishing between resources with the same name */
- uint32_t fCountExisting; /* how much is this resource used */
- ResourceData fData; /* data for low level access */
UResourceDataEntry *fParent; /*next resource in fallback chain*/
-/* UResEntryType fStatus;*/
+ ResourceData fData; /* data for low level access */
+ char fNameBuffer[3]; /* A small buffer of free space for fName. The free space is due to struct padding. */
+ uint32_t fCountExisting; /* how much is this resource used */
UErrorCode fBogus;
- int32_t fHashKey; /* for faster access in the hashtable */
+ /* int32_t fHashKey;*/ /* for faster access in the hashtable */
};
#define RES_BUFSIZE 64
@@ -62,28 +62,29 @@ struct UResourceBundle {
const char *fKey; /*tag*/
UResourceDataEntry *fData; /*for low-level access*/
char *fVersion;
+ UResourceDataEntry *fTopLevelData; /* for getting the valid locale */
char *fResPath; /* full path to the resource: "zh_TW/CollationElements/Sequence" */
+ ResourceData fResData;
char fResBuf[RES_BUFSIZE];
int32_t fResPathLen;
+ Resource fRes;
UBool fHasFallback;
UBool fIsTopLevel;
uint32_t fMagic1; /* For determining if it's a stack object */
uint32_t fMagic2; /* For determining if it's a stack object */
int32_t fIndex;
int32_t fSize;
- ResourceData fResData;
- Resource fRes;
-
- UResourceDataEntry *fTopLevelData; /* for getting the valid locale */
- const UResourceBundle *fParentRes; /* needed to get the actual locale for a child resource */
+ /*const UResourceBundle *fParentRes;*/ /* needed to get the actual locale for a child resource */
};
U_CAPI void U_EXPORT2 ures_initStackObject(UResourceBundle* resB);
/* Some getters used by the copy constructor */
U_CFUNC const char* ures_getName(const UResourceBundle* resB);
+#ifdef URES_DEBUG
U_CFUNC const char* ures_getPath(const UResourceBundle* resB);
+#endif
/*U_CFUNC void ures_appendResPath(UResourceBundle *resB, const char* toAdd, int32_t lenToAdd);*/
/*U_CFUNC void ures_setResPath(UResourceBundle *resB, const char* toAdd);*/
/*U_CFUNC void ures_freeResPath(UResourceBundle *resB);*/
@@ -165,33 +166,6 @@ ures_getFunctionalEquivalent(char *result, int32_t resultCapacity,
U_INTERNAL UEnumeration* U_EXPORT2
ures_getKeywordValues(const char *path, const char *keyword, UErrorCode *status);
-/**
- * Test if 2 resource bundles are equal
- * @param res1
- * @param res2
- * @param status error code
- * @internal ICU 3.6
- */
-U_INTERNAL UBool U_EXPORT2
-ures_equal(const UResourceBundle* res1, const UResourceBundle* res2);
-
-/**
- * Clones the given resource bundle
- * @param res
- * @param status error code
- * @internal ICU 3.6
- */
-U_INTERNAL UResourceBundle* U_EXPORT2
-ures_clone(const UResourceBundle* res, UErrorCode* status);
-
-/**
- * Returns the parent bundle. Internal. DONOT close the returned bundle!!!
- * @param res
- * @internal ICU 3.6
- */
-U_INTERNAL const UResourceBundle* U_EXPORT2
-ures_getParentBundle(const UResourceBundle* res);
-
/**
* Get a resource with multi-level fallback. Normally only the top level resources will
diff --git a/icuSources/common/uscript.c b/icuSources/common/uscript.c
index 47ae56da..5da2d497 100644
--- a/icuSources/common/uscript.c
+++ b/icuSources/common/uscript.c
@@ -1,6 +1,6 @@
/*
**********************************************************************
-* Copyright (C) 1997-2006, International Business Machines
+* Copyright (C) 1997-2008, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
*
@@ -22,8 +22,6 @@
#include "cstring.h"
static const char kLocaleScript[] = "LocaleScript";
-static const char kHyphen = '-';
-static const char kUnderscore = '_';
/* TODO: this is a bad API should be deprecated */
U_CAPI int32_t U_EXPORT2
@@ -44,7 +42,7 @@ uscript_getCode(const char* nameOrAbbrOrLocale,
return numFilled;
}
- if(uprv_strchr(nameOrAbbrOrLocale, kHyphen)==NULL && uprv_strchr(nameOrAbbrOrLocale, kUnderscore)==NULL ){
+ if(uprv_strchr(nameOrAbbrOrLocale, '-')==NULL && uprv_strchr(nameOrAbbrOrLocale, '_')==NULL ){
/* try long and abbreviated script names first */
code = (UScriptCode) u_getPropertyValueEnum(UCHAR_SCRIPT, nameOrAbbrOrLocale);
diff --git a/icuSources/common/uset.cpp b/icuSources/common/uset.cpp
index 8cd25221..add0ee0f 100644
--- a/icuSources/common/uset.cpp
+++ b/icuSources/common/uset.cpp
@@ -1,7 +1,7 @@
/*
*******************************************************************************
*
-* Copyright (C) 2002-2006, International Business Machines
+* Copyright (C) 2002-2007, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
@@ -29,6 +29,8 @@
#include "unicode/ustring.h"
#include "unicode/parsepos.h"
+U_NAMESPACE_USE
+
U_CAPI USet* U_EXPORT2
uset_open(UChar32 start, UChar32 end) {
return (USet*) new UnicodeSet(start, end);
@@ -39,6 +41,26 @@ uset_close(USet* set) {
delete (UnicodeSet*) set;
}
+U_CAPI USet * U_EXPORT2
+uset_clone(const USet *set) {
+ return (USet*) (((UnicodeSet*) set)->UnicodeSet::clone());
+}
+
+U_CAPI UBool U_EXPORT2
+uset_isFrozen(const USet *set) {
+ return ((UnicodeSet*) set)->UnicodeSet::isFrozen();
+}
+
+U_CAPI void U_EXPORT2
+uset_freeze(USet *set) {
+ ((UnicodeSet*) set)->UnicodeSet::freeze();
+}
+
+U_CAPI USet * U_EXPORT2
+uset_cloneAsThawed(const USet *set) {
+ return (USet*) (((UnicodeSet*) set)->UnicodeSet::cloneAsThawed());
+}
+
U_CAPI void U_EXPORT2
uset_set(USet* set,
UChar32 start, UChar32 end) {
@@ -62,12 +84,8 @@ uset_addRange(USet* set, UChar32 start, UChar32 end) {
U_CAPI void U_EXPORT2
uset_addString(USet* set, const UChar* str, int32_t strLen) {
- // WRONG! Do not alias, it will stay aliased, even after
- // copying. TODO: do we need a copy ctor that unaliases
- //UnicodeString s(strLen==-1, str, strLen);
-
// UnicodeString handles -1 for strLen
- UnicodeString s(str, strLen);
+ UnicodeString s(strLen<0, str, strLen);
((UnicodeSet*) set)->UnicodeSet::add(s);
}
@@ -172,6 +190,26 @@ uset_containsSome(const USet* set1, const USet* set2) {
return ((const UnicodeSet*) set1)->UnicodeSet::containsSome(* (const UnicodeSet*) set2);
}
+U_CAPI int32_t U_EXPORT2
+uset_span(const USet *set, const UChar *s, int32_t length, USetSpanCondition spanCondition) {
+ return ((UnicodeSet*) set)->UnicodeSet::span(s, length, spanCondition);
+}
+
+U_CAPI int32_t U_EXPORT2
+uset_spanBack(const USet *set, const UChar *s, int32_t length, USetSpanCondition spanCondition) {
+ return ((UnicodeSet*) set)->UnicodeSet::spanBack(s, length, spanCondition);
+}
+
+U_CAPI int32_t U_EXPORT2
+uset_spanUTF8(const USet *set, const char *s, int32_t length, USetSpanCondition spanCondition) {
+ return ((UnicodeSet*) set)->UnicodeSet::spanUTF8(s, length, spanCondition);
+}
+
+U_CAPI int32_t U_EXPORT2
+uset_spanBackUTF8(const USet *set, const char *s, int32_t length, USetSpanCondition spanCondition) {
+ return ((UnicodeSet*) set)->UnicodeSet::spanBackUTF8(s, length, spanCondition);
+}
+
U_CAPI UBool U_EXPORT2
uset_equals(const USet* set1, const USet* set2) {
return *(const UnicodeSet*)set1 == *(const UnicodeSet*)set2;
@@ -265,18 +303,6 @@ uset_getItem(const USet* uset, int32_t itemIndex,
// return TRUE;
//}
-U_CAPI USet* U_EXPORT2
-uprv_openRuleWhiteSpaceSet(UErrorCode* ec) {
- if(U_FAILURE(*ec)) {
- return NULL;
- }
- // create a set with the Pattern_White_Space characters,
- // without a pattern for fewer code dependencies
- UnicodeSet *set=new UnicodeSet(9, 0xd);
- set->UnicodeSet::add(0x20).add(0x85).add(0x200e, 0x200f).add(0x2028, 0x2029);
- return (USet *)set;
-}
-
/*
* Serialize a USet into 16-bit units.
* Store BMP code points as themselves with one 16-bit unit each.
diff --git a/icuSources/common/uset_imp.h b/icuSources/common/uset_imp.h
index c826f49f..07a7381e 100644
--- a/icuSources/common/uset_imp.h
+++ b/icuSources/common/uset_imp.h
@@ -1,7 +1,7 @@
/*
*******************************************************************************
*
-* Copyright (C) 2004-2005, International Business Machines
+* Copyright (C) 2004-2007, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
@@ -36,6 +36,9 @@ USetAddString(USet *set, const UChar *str, int32_t length);
typedef void U_CALLCONV
USetRemove(USet *set, UChar32 c);
+typedef void U_CALLCONV
+USetRemoveRange(USet *set, UChar32 start, UChar32 end);
+
/**
* Interface for adding items to a USet, to keep low-level code from
* statically depending on the USet implementation.
@@ -47,21 +50,11 @@ struct USetAdder {
USetAddRange *addRange;
USetAddString *addString;
USetRemove *remove;
+ USetRemoveRange *removeRange;
};
typedef struct USetAdder USetAdder;
U_CDECL_END
-/**
- * Get the set of "white space" characters in the sense of ICU rule
- * parsers. Caller must close/delete result.
- * Equivalent to the set of characters with the Pattern_White_Space Unicode property.
- * Stable set of characters, won't change.
- * See UAX #31 Identifier and Pattern Syntax: http://www.unicode.org/reports/tr31/
- * @internal
- */
-U_CAPI USet* U_EXPORT2
-uprv_openRuleWhiteSpaceSet(UErrorCode* ec);
-
#endif
diff --git a/icuSources/common/uset_props.cpp b/icuSources/common/uset_props.cpp
index d36a5250..fb607390 100644
--- a/icuSources/common/uset_props.cpp
+++ b/icuSources/common/uset_props.cpp
@@ -1,7 +1,7 @@
/*
*******************************************************************************
*
-* Copyright (C) 2002-2005, International Business Machines
+* Copyright (C) 2002-2006, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
@@ -25,6 +25,8 @@
#include "unicode/ustring.h"
#include "unicode/parsepos.h"
+U_NAMESPACE_USE
+
U_CAPI USet* U_EXPORT2
uset_openPattern(const UChar* pattern, int32_t patternLength,
UErrorCode* ec)
diff --git a/icuSources/common/ushape.c b/icuSources/common/ushape.c
index ad0b449d..92984f16 100644
--- a/icuSources/common/ushape.c
+++ b/icuSources/common/ushape.c
@@ -1,20 +1,20 @@
/*
-******************************************************************************
-*
-* Copyright (C) 2000-2006, International Business Machines
-* Corporation and others. All Rights Reserved.
-*
-******************************************************************************
-* file name: ushape.c
-* encoding: US-ASCII
-* tab size: 8 (not used)
-* indentation:4
-*
-* created on: 2000jun29
-* created by: Markus W. Scherer
-*
-* Arabic letter shaping implemented by Ayman Roshdy
-*/
+ ******************************************************************************
+ *
+ * Copyright (C) 2000-2008, International Business Machines
+ * Corporation and others. All Rights Reserved.
+ *
+ ******************************************************************************
+ * file name: ushape.c
+ * encoding: US-ASCII
+ * tab size: 8 (not used)
+ * indentation:4
+ *
+ * created on: 2000jun29
+ * created by: Markus W. Scherer
+ *
+ * Arabic letter shaping implemented by Ayman Roshdy
+ */
#include "unicode/utypes.h"
#include "unicode/uchar.h"
@@ -54,8 +54,13 @@
#define ALEFTYPE 32
#define LINKR 1
#define LINKL 2
+#define APRESENT 8
+#define SHADDA 64
+#define CSHADDA 128
+#define COMBINE (SHADDA+CSHADDA)
+
-static const UChar IrrelevantPos[] = {
+static const uint8_t IrrelevantPos[] = {
0x0, 0x2, 0x4, 0x6,
0x8, 0xA, 0xC, 0xE,
};
@@ -111,10 +116,19 @@ static const UChar araLink[178]=
1 + 256 * 0x7D,/*0x0648*/
1 + 256 * 0x7F,/*0x0649*/
1 + 2 + 256 * 0x81,/*0x064A*/
- 4, 4, 4, 4, /*0x064B-0x064E*/
- 4, 4, 4, 4, /*0x064F-0x0652*/
- 4, 4, 4, 0, 0, /*0x0653-0x0657*/
- 0, 0, 0, 0, /*0x0658-0x065B*/
+ 4 + 256 * 1, /*0x064B*/
+ 4 + 128 + 256 * 1, /*0x064C*/
+ 4 + 128 + 256 * 1, /*0x064D*/
+ 4 + 128 + 256 * 1, /*0x064E*/
+ 4 + 128 + 256 * 1, /*0x064F*/
+ 4 + 128 + 256 * 1, /*0x0650*/
+ 4 + 64 + 256 * 3, /*0x0651*/
+ 4 + 256 * 1, /*0x0652*/
+ 4 + 256 * 7, /*0x0653*/
+ 4 + 256 * 8, /*0x0654*/
+ 4 + 256 * 8, /*0x0655*/
+ 4 + 256 * 1, /*0x0656*/
+ 0, 0, 0, 0, 0, /*0x0657-0x065B*/
1 + 256 * 0x85,/*0x065C*/
1 + 256 * 0x87,/*0x065D*/
1 + 256 * 0x89,/*0x065E*/
@@ -122,75 +136,85 @@ static const UChar araLink[178]=
0, 0, 0, 0, 0, /*0x0660-0x0664*/
0, 0, 0, 0, 0, /*0x0665-0x0669*/
0, 0, 0, 0, 0, 0, /*0x066A-0x066F*/
- 4, /*0x0670*/
- 0, /*0x0671*/
- 1 + 32, /*0x0672*/
- 1 + 32, /*0x0673*/
+ 4 + 256 * 6, /*0x0670*/
+ 1 + 8 + 256 * 0x00,/*0x0671*/
+ 1 + 32, /*0x0672*/
+ 1 + 32, /*0x0673*/
0, /*0x0674*/
- 1 + 32, /*0x0675*/
+ 1 + 32, /*0x0675*/
1, 1, /*0x0676-0x0677*/
1+2, 1+2, 1+2, 1+2, 1+2, 1+2, /*0x0678-0x067D*/
- 1+2, 1+2, 1+2, 1+2, 1+2, 1+2, /*0x067E-0x0683*/
- 1+2, 1+2, 1+2, 1+2, /*0x0684-0x0687*/
+ 1+2+8+256 * 0x06, 1+2, 1+2, 1+2, 1+2, 1+2, /*0x067E-0x0683*/
+ 1+2, 1+2, 1+2+8+256 * 0x2A, 1+2, /*0x0684-0x0687*/
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*0x0688-0x0691*/
- 1, 1, 1, 1, 1, 1, 1, 1, /*0x0692-0x0699*/
+ 1, 1, 1, 1, 1, 1, 1+8+256 * 0x3A, 1, /*0x0692-0x0699*/
1+2, 1+2, 1+2, 1+2, 1+2, 1+2, /*0x069A-0x06A3*/
1+2, 1+2, 1+2, 1+2, /*0x069A-0x06A3*/
- 1+2, 1+2, 1+2, 1+2, 1+2, 1+2, /*0x06A4-0x06AD*/
+ 1+2, 1+2, 1+2, 1+2, 1+2, 1+2+8+256 * 0x3E, /*0x06A4-0x06AD*/
1+2, 1+2, 1+2, 1+2, /*0x06A4-0x06AD*/
- 1+2, 1+2, 1+2, 1+2, 1+2, 1+2, /*0x06AE-0x06B7*/
+ 1+2, 1+2+8+256 * 0x42, 1+2, 1+2, 1+2, 1+2, /*0x06AE-0x06B7*/
1+2, 1+2, 1+2, 1+2, /*0x06AE-0x06B7*/
1+2, 1+2, 1+2, 1+2, 1+2, 1+2, /*0x06B8-0x06BF*/
1+2, 1+2, /*0x06B8-0x06BF*/
1, /*0x06C0*/
1+2, /*0x06C1*/
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*0x06C2-0x06CB*/
- 1+2, /*0x06CC*/
+ 1+2+8+256 * 0xAC, /*0x06CC*/
1, /*0x06CD*/
1+2, 1+2, 1+2, 1+2, /*0x06CE-0x06D1*/
1, 1 /*0x06D2-0x06D3*/
};
-static const UChar presLink[141]=
+static const uint8_t presALink[] = {
+/***********0*****1*****2*****3*****4*****5*****6*****7*****8*****9*****A*****B*****C*****D*****E*****F*/
+/*FB5*/ 0, 1, 0, 0, 0, 0, 0, 1, 2,1 + 2, 0, 0, 0, 0, 0, 0,
+/*FB6*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/*FB7*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,1 + 2, 0, 0,
+/*FB8*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1,
+/*FB9*/ 2,1 + 2, 0, 1, 2,1 + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/*FBA*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/*FBB*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/*FBC*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/*FBD*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/*FBE*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/*FBF*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,1 + 2,
+/*FC0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/*FC1*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/*FC2*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/*FC3*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/*FC4*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/*FC5*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4,
+/*FC6*/ 4, 4, 4
+};
+
+static const uint8_t presBLink[]=
{
- 1 + 2, /*0xFE70*/
- 1 + 2, /*0xFE71*/
- 1 + 2, 0, 1+ 2, 0, 1+ 2, /*0xFE72-0xFE76*/
- 1 + 2, /*0xFE77*/
- 1+ 2, 1 + 2, 1+2, 1 + 2, /*0xFE78-0xFE81*/
- 1+ 2, 1 + 2, 1+2, 1 + 2, /*0xFE82-0xFE85*/
- 0, 0 + 32, 1 + 32, 0 + 32, /*0xFE86-0xFE89*/
- 1 + 32, 0, 1, 0 + 32, /*0xFE8A-0xFE8D*/
- 1 + 32, 0, 2, 1 + 2, /*0xFE8E-0xFE91*/
- 1, 0 + 32, 1 + 32, 0, /*0xFE92-0xFE95*/
- 2, 1 + 2, 1, 0, /*0xFE96-0xFE99*/
- 1, 0, 2, 1 + 2, /*0xFE9A-0xFE9D*/
- 1, 0, 2, 1 + 2, /*0xFE9E-0xFEA1*/
- 1, 0, 2, 1 + 2, /*0xFEA2-0xFEA5*/
- 1, 0, 2, 1 + 2, /*0xFEA6-0xFEA9*/
- 1, 0, 2, 1 + 2, /*0xFEAA-0xFEAD*/
- 1, 0, 1, 0, /*0xFEAE-0xFEB1*/
- 1, 0, 1, 0, /*0xFEB2-0xFEB5*/
- 1, 0, 2, 1+2, /*0xFEB6-0xFEB9*/
- 1, 0, 2, 1+2, /*0xFEBA-0xFEBD*/
- 1, 0, 2, 1+2, /*0xFEBE-0xFEC1*/
- 1, 0, 2, 1+2, /*0xFEC2-0xFEC5*/
- 1, 0, 2, 1+2, /*0xFEC6-0xFEC9*/
- 1, 0, 2, 1+2, /*0xFECA-0xFECD*/
- 1, 0, 2, 1+2, /*0xFECE-0xFED1*/
- 1, 0, 2, 1+2, /*0xFED2-0xFED5*/
- 1, 0, 2, 1+2, /*0xFED6-0xFED9*/
- 1, 0, 2, 1+2, /*0xFEDA-0xFEDD*/
- 1, 0, 2, 1+2, /*0xFEDE-0xFEE1*/
- 1, 0 + 16, 2 + 16, 1 + 2 +16, /*0xFEE2-0xFEE5*/
- 1 + 16, 0, 2, 1+2, /*0xFEE6-0xFEE9*/
- 1, 0, 2, 1+2, /*0xFEEA-0xFEED*/
- 1, 0, 2, 1+2, /*0xFEEE-0xFEF1*/
- 1, 0, 1, 0, /*0xFEF2-0xFEF5*/
- 1, 0, 2, 1+2, /*0xFEF6-0xFEF9*/
- 1, 0, 1, 0, /*0xFEFA-0xFEFD*/
- 1, 0, 1, 0,
- 1
+/***********0*****1*****2*****3*****4*****5*****6*****7*****8*****9*****A*****B*****C*****D*****E*****F*/
+/*FE7*/1 + 2,1 + 2,1 + 2, 0,1 + 2, 0,1 + 2,1 + 2,1 + 2,1 + 2,1 + 2,1 + 2,1 + 2,1 + 2,1 + 2,1 + 2,
+/*FE8*/ 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2,1 + 2, 0, 1, 0,
+/*FE9*/ 1, 2,1 + 2, 0, 1, 0, 1, 2,1 + 2, 0, 1, 2,1 + 2, 0, 1, 2,
+/*FEA*/1 + 2, 0, 1, 2,1 + 2, 0, 1, 2,1 + 2, 0, 1, 0, 1, 0, 1, 0,
+/*FEB*/ 1, 0, 1, 2,1 + 2, 0, 1, 2,1 + 2, 0, 1, 2,1 + 2, 0, 1, 2,
+/*FEC*/1 + 2, 0, 1, 2,1 + 2, 0, 1, 2,1 + 2, 0, 1, 2,1 + 2, 0, 1, 2,
+/*FED*/1 + 2, 0, 1, 2,1 + 2, 0, 1, 2,1 + 2, 0, 1, 2,1 + 2, 0, 1, 2,
+/*FEE*/1 + 2, 0, 1, 2,1 + 2, 0, 1, 2,1 + 2, 0, 1, 2,1 + 2, 0, 1, 0,
+/*FEF*/ 1, 0, 1, 2,1 + 2, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0
+};
+
+static const UChar convertFBto06[] =
+{
+/***********0******1******2******3******4******5******6******7******8******9******A******B******C******D******E******F***/
+/*FB5*/ 0x671, 0x671, 0, 0, 0, 0, 0x07E, 0x07E, 0x07E, 0x07E, 0, 0, 0, 0, 0, 0,
+/*FB6*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/*FB7*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x686, 0x686, 0x686, 0x686, 0, 0,
+/*FB8*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x698, 0x698, 0, 0, 0x6A9, 0x6A9,
+/*FB9*/ 0x6A9, 0x6A9, 0x6AF, 0x6AF, 0x6AF, 0x6AF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/*FBA*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/*FBB*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/*FBC*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/*FBD*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/*FBE*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/*FBF*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x6CC, 0x6CC, 0x6CC, 0x6CC
};
static const UChar convertFEto06[] =
@@ -207,7 +231,7 @@ static const UChar convertFEto06[] =
/*FEF*/ 0x649, 0x64A, 0x64A, 0x64A, 0x64A, 0x65C, 0x65C, 0x65D, 0x65D, 0x65E, 0x65E, 0x65F, 0x65F
};
-static const UChar shapeTable[4][4][4]=
+static const uint8_t shapeTable[4][4][4]=
{
{ {0,0,0,0}, {0,0,0,0}, {0,1,0,3}, {0,1,0,1} },
{ {0,0,2,2}, {0,0,1,2}, {0,1,1,2}, {0,1,1,3} },
@@ -290,15 +314,9 @@ _shapeToArabicDigitsWithContext(UChar *s, int32_t length,
* U_SHAPE_TEXT_DIRECTION_LOGICAL
*/
static void
-invertBuffer(UChar *buffer,int32_t size,uint32_t options,int32_t *spacesCountl,int32_t *spacesCountr) {
-
+invertBuffer(UChar *buffer,int32_t size,uint32_t options,int32_t lowlimit,int32_t highlimit) {
UChar temp;
int32_t i=0,j=0;
- int32_t lowlimit = 0, highlimit = 0;
-
- lowlimit = *spacesCountl;
- highlimit = *spacesCountr;
-
for(i=lowlimit,j=size-highlimit-1;i0x0621 && ch<0x0626)||(ch==0x0627)||(ch>0x062e && ch<0x0633)||
- (ch>0x0647 && ch<0x064a)||(ch==0x0629) ) {
- return (1);
- }
- else if( ch>=0x064B && ch<= 0x0652 )
- return (2);
- else if( (ch>=0x0653 && ch<= 0x0655) || ch == 0x0670 ||
- (ch>=0xFE70 && ch<= 0xFE7F) )
- return (3);
- else
- return (0);
-}
-
/*
*Name : getLink
*Function : Resolves the link between the characters as
@@ -359,15 +355,16 @@ specialChar(UChar ch) {
*/
static UChar
getLink(UChar ch) {
-
if(ch >= 0x0622 && ch <= 0x06D3) {
return(araLink[ch-0x0622]);
} else if(ch == 0x200D) {
return(3);
} else if(ch >= 0x206D && ch <= 0x206F) {
return(4);
+ } else if(ch >= 0xFB50 && ch <= 0xFC62) {
+ return(presALink[ch-0xFB50]);
} else if(ch >= 0xFE70 && ch <= 0xFEFC) {
- return(presLink[ch-0xFE70]);
+ return(presBLink[ch-0xFE70]);
} else {
return(0);
}
@@ -380,10 +377,8 @@ getLink(UChar ch) {
*/
static void
countSpaces(UChar *dest,int32_t size,uint32_t options,int32_t *spacesCountl,int32_t *spacesCountr) {
-
int32_t i = 0;
int32_t countl = 0,countr = 0;
-
while(dest[i] == 0x0020) {
countl++;
i++;
@@ -431,26 +426,22 @@ isLamAlefChar(UChar ch) {
static int32_t
calculateSize(const UChar *source, int32_t sourceLength,
int32_t destSize,uint32_t options) {
-
int32_t i = 0;
destSize = sourceLength;
-
switch(options&U_SHAPE_LETTERS_MASK) {
-
case U_SHAPE_LETTERS_SHAPE :
+ case U_SHAPE_LETTERS_SHAPE_TASHKEEL_ISOLATED:
if((options&U_SHAPE_TEXT_DIRECTION_MASK)==U_SHAPE_TEXT_DIRECTION_VISUAL_LTR) {
for(i=0;i 0) {
- uprv_memcpy(tempbuffer, tempbuffer+countr, sourceLength*U_SIZEOF_UCHAR);
+ uprv_memmove(tempbuffer, tempbuffer+countr, sourceLength*U_SIZEOF_UCHAR);
if(u_strlen(tempbuffer) < sourceLength) {
- for(i=sourceLength-1;i>=sourceLength-countr;i--)
+ for(i=sourceLength-1;i>=sourceLength-countr;i--) {
tempbuffer[i] = 0x0020;
+ }
}
}
@@ -788,7 +780,6 @@ shapeUnicode(UChar *dest, int32_t sourceLength,
int32_t step;
int32_t lastPos,Nx, Nw;
unsigned int Shape;
- int32_t flag;
int32_t lamalef_found = 0;
UChar prevLink = 0, lastLink = 0, currLink, nextLink = 0;
UChar wLamalef;
@@ -799,12 +790,18 @@ shapeUnicode(UChar *dest, int32_t sourceLength,
* even the lamalef is converted to the special region in
* the 06xx range
*/
- for (i = 0; i < sourceLength; i++) {
- UChar inputChar = dest[i];
- if ( (inputChar >= 0xFE70) && (inputChar <= 0xFEFC)) {
- dest[i] = convertFEto06 [ (inputChar - 0xFE70) ] ;
- } else {
- dest[i] = inputChar ;
+ if ((options & U_SHAPE_PRESERVE_PRESENTATION_MASK) == U_SHAPE_PRESERVE_PRESENTATION_NOOP) {
+ for (i = 0; i < sourceLength; i++) {
+ UChar inputChar = dest[i];
+ if ( (inputChar >= 0xFB50) && (inputChar <= 0xFBFF)) {
+ UChar c = convertFBto06 [ (inputChar - 0xFB50) ];
+ if (c != 0)
+ dest[i] = c;
+ } else if ( (inputChar >= 0xFE70) && (inputChar <= 0xFEFC)) {
+ dest[i] = convertFEto06 [ (inputChar - 0xFE70) ] ;
+ } else {
+ dest[i] = inputChar ;
+ }
}
}
@@ -825,7 +822,7 @@ shapeUnicode(UChar *dest, int32_t sourceLength,
while (i != iend) {
/* If high byte of currLink > 0 then more than one shape */
- if ((currLink & 0xFF00) > 0 || isTashkeelChar(dest[i])) {
+ if ((currLink & 0xFF00) > 0 || (getLink(dest[i]) & IRRELEVANT) != 0) {
Nw = i + step;
while (Nx < 0) { /* we need to know about next char */
if(Nw == iend) {
@@ -852,59 +849,56 @@ shapeUnicode(UChar *dest, int32_t sourceLength,
lastLink = prevLink; /* spaces generated during lamalef generation. */
currLink = getLink(wLamalef); /* 0xFFFF is added here and is replaced by spaces */
} /* in removeLamAlefSpaces() */
- /*
+ /*
* get the proper shape according to link ability of neighbors
* and of character; depends on the order of the shapes
* (isolated, initial, middle, final) in the compatibility area
*/
- flag = specialChar(dest[i]);
-
- Shape = shapeTable[nextLink & (LINKR + LINKL)]
- [lastLink & (LINKR + LINKL)]
- [currLink & (LINKR + LINKL)];
-
- if (flag == 1) {
- Shape = (Shape == 1 || Shape == 3) ? 1 : 0;
- }
- else if(flag == 2) {
- if( (lastLink & LINKL) && (nextLink & LINKR) && (tashkeelFlag == 1) &&
- dest[i] != 0x064C && dest[i] != 0x064D )
- {
- Shape = 1;
- if( (nextLink&ALEFTYPE) == ALEFTYPE && (lastLink&LAMTYPE) == LAMTYPE ) {
- Shape = 0;
- }
- }
- else {
- Shape = 0;
- }
- }
-
- if(flag == 2) {
- dest[i] = 0xFE70 + IrrelevantPos[(dest[i] - 0x064B)] + Shape;
- }
- else
- dest[i] = (UChar)(0xFE70 + (currLink >> 8) + Shape);
+ Shape = shapeTable[nextLink & (LINKR + LINKL)]
+ [lastLink & (LINKR + LINKL)]
+ [currLink & (LINKR + LINKL)];
+
+ if ((currLink & (LINKR+LINKL)) == 1) {
+ Shape &= 1;
+ } else if(isTashkeelChar(dest[i])) {
+ if( (lastLink & LINKL) && (nextLink & LINKR) && (tashkeelFlag == 1) &&
+ dest[i] != 0x064C && dest[i] != 0x064D )
+ {
+ Shape = 1;
+ if( (nextLink&ALEFTYPE) == ALEFTYPE && (lastLink&LAMTYPE) == LAMTYPE ) {
+ Shape = 0;
+ }
+ }
+ else {
+ Shape = 0;
+ }
+ }
+ if ((dest[i] ^ 0x0600) < 0x100) {
+ if(isTashkeelChar(dest[i]))
+ dest[i] = 0xFE70 + IrrelevantPos[(dest[i] - 0x064B)] + Shape;
+ else if ((currLink & APRESENT) > 0)
+ dest[i] = (UChar)(0xFB50 + (currLink >> 8) + Shape);
+ else if ((currLink >> 8) > 0 && (currLink & IRRELEVANT) == 0)
+ dest[i] = (UChar)(0xFE70 + (currLink >> 8) + Shape);
+ }
}
/* move one notch forward */
if ((currLink & IRRELEVANT) == 0) {
- prevLink = lastLink;
- lastLink = currLink;
- lastPos = i;
+ prevLink = lastLink;
+ lastLink = currLink;
+ lastPos = i;
}
i = i + step;
if (i == Nx) {
currLink = nextLink;
Nx = -2;
- }
- else if(i != iend) {
+ } else if(i != iend) {
currLink = getLink(dest[i]);
}
}
- /* If there is lamalef in the buffer call expandLamAlef */
if(lamalef_found != 0)
destSize = removeLamAlefSpaces(dest,sourceLength,destSize,options,pErrorCode);
else
@@ -931,7 +925,11 @@ deShapeUnicode(UChar *dest, int32_t sourceLength,
*/
for(i = 0; i < sourceLength; i++) {
UChar inputChar = dest[i];
- if (( inputChar >= 0xFE70) && (inputChar <= 0xFEF4 )) { /* FExx Arabic range */
+ if ( (inputChar >= 0xFB50) && (inputChar <= 0xFBFF)) { /* FBxx Arabic range */
+ UChar c = convertFBto06 [ (inputChar - 0xFB50) ];
+ if (c != 0)
+ dest[i] = c;
+ } else if (( inputChar >= 0xFE70) && (inputChar <= 0xFEF4 )) { /* FExx Arabic range */
dest[i] = convertFEto06 [ (inputChar - 0xFE70) ] ;
} else {
dest[i] = inputChar ;
@@ -963,15 +961,18 @@ u_shapeArabic(const UChar *source, int32_t sourceLength,
}
/* make sure that no reserved options values are used; allow dest==NULL only for preflighting */
- if( source==NULL || sourceLength<-1 ||
- (dest==NULL && destCapacity!=0) || destCapacity<0 ||
- options>=U_SHAPE_DIGIT_TYPE_RESERVED ||
- (options&U_SHAPE_DIGITS_MASK)>=U_SHAPE_DIGITS_RESERVED
+ if( source==NULL || sourceLength<-1 || (dest==NULL && destCapacity!=0) || destCapacity<0 ||
+ (options&U_SHAPE_DIGIT_TYPE_RESERVED)==U_SHAPE_DIGIT_TYPE_RESERVED ||
+ (options&U_SHAPE_DIGITS_MASK)==U_SHAPE_DIGITS_RESERVED ||
+ ((options&U_SHAPE_LENGTH_MASK) != U_SHAPE_LENGTH_GROW_SHRINK &&
+ (options&U_SHAPE_AGGREGATE_TASHKEEL_MASK) != 0) ||
+ ((options&U_SHAPE_AGGREGATE_TASHKEEL_MASK) == U_SHAPE_AGGREGATE_TASHKEEL &&
+ (options&U_SHAPE_LETTERS_SHAPE_TASHKEEL_ISOLATED) != U_SHAPE_LETTERS_SHAPE_TASHKEEL_ISOLATED)
) {
*pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
return 0;
}
-
+
/* determine the source length */
if(sourceLength==-1) {
sourceLength=u_strlen(source);
@@ -983,17 +984,53 @@ u_shapeArabic(const UChar *source, int32_t sourceLength,
/* check that source and destination do not overlap */
if( dest!=NULL &&
((source<=dest && dest