-{-# OPTIONS_GHC -fno-implicit-prelude #-}
+{-# OPTIONS -fno-implicit-prelude #-}
+{-# OPTIONS -#include "WCsubst.h" #-}
-----------------------------------------------------------------------------
-- |
-- Module : GHC.Unicde
--
-----------------------------------------------------------------------------
--- #hide
module GHC.Unicode (
+ GeneralCategory (..),
+ generalCategory,
isAscii, isLatin1, isControl,
isAsciiUpper, isAsciiLower,
isPrint, isSpace, isUpper,
isLower, isAlpha, isDigit,
isOctDigit, isHexDigit, isAlphaNum,
- toUpper, toLower,
+ toUpper, toLower, toTitle,
+ isLetter, -- :: Char -> Bool
+ isMark, -- :: Char -> Bool
+ isNumber, -- :: Char -> Bool
+ isPunctuation, -- :: Char -> Bool
+ isSymbol, -- :: Char -> Bool
+ isSeparator, -- :: Char -> Bool
) where
import GHC.Base
import GHC.Int
import GHC.Word
import GHC.Num (fromInteger)
+import GHC.Read
+import GHC.Show
+import GHC.Enum
#include "HsBaseConfig.h"
+-- | Unicode General Categories (column 2 of the UnicodeData table)
+-- in the order they are listed in the Unicode standard.
+
+data GeneralCategory
+ = UppercaseLetter -- Lu Letter, Uppercase
+ | LowercaseLetter -- Ll Letter, Lowercase
+ | TitlecaseLetter -- Lt Letter, Titlecase
+ | ModifierLetter -- Lm Letter, Modifier
+ | OtherLetter -- Lo Letter, Other
+ | NonSpacingMark -- Mn Mark, Non-Spacing
+ | SpacingCombiningMark -- Mc Mark, Spacing Combining
+ | EnclosingMark -- Me Mark, Enclosing
+ | DecimalNumber -- Nd Number, Decimal
+ | LetterNumber -- Nl Number, Letter
+ | OtherNumber -- No Number, Other
+ | ConnectorPunctuation -- Pc Punctuation, Connector
+ | DashPunctuation -- Pd Punctuation, Dash
+ | OpenPunctuation -- Ps Punctuation, Open
+ | ClosePunctuation -- Pe Punctuation, Close
+ | InitialQuote -- Pi Punctuation, Initial quote
+ | FinalQuote -- Pf Punctuation, Final quote
+ | OtherPunctuation -- Po Punctuation, Other
+ | MathSymbol -- Sm Symbol, Math
+ | CurrencySymbol -- Sc Symbol, Currency
+ | ModifierSymbol -- Sk Symbol, Modifier
+ | OtherSymbol -- So Symbol, Other
+ | Space -- Zs Separator, Space
+ | LineSeparator -- Zl Separator, Line
+ | ParagraphSeparator -- Zp Separator, Paragraph
+ | Control -- Cc Other, Control
+ | Format -- Cf Other, Format
+ | Surrogate -- Cs Other, Surrogate
+ | PrivateUse -- Co Other, Private Use
+ | NotAssigned -- Cn Other, Not Assigned
+ deriving (Eq, Ord, Enum, Read, Show, Bounded)
+
+-- | Retrieves the general Unicode category of the character.
+generalCategory :: Char -> GeneralCategory
+generalCategory c = toEnum (wgencat (fromIntegral (ord c)))
+
+-- ------------------------------------------------------------------------
+-- These are copied from Hugs Unicode.hs
+
+-- derived character classifiers
+
+isLetter :: Char -> Bool
+isLetter c = case generalCategory c of
+ UppercaseLetter -> True
+ LowercaseLetter -> True
+ TitlecaseLetter -> True
+ ModifierLetter -> True
+ OtherLetter -> True
+ _ -> False
+
+isMark :: Char -> Bool
+isMark c = case generalCategory c of
+ NonSpacingMark -> True
+ SpacingCombiningMark -> True
+ EnclosingMark -> True
+ _ -> False
+
+isNumber :: Char -> Bool
+isNumber c = case generalCategory c of
+ DecimalNumber -> True
+ LetterNumber -> True
+ OtherNumber -> True
+ _ -> False
+
+isPunctuation :: Char -> Bool
+isPunctuation c = case generalCategory c of
+ ConnectorPunctuation -> True
+ DashPunctuation -> True
+ OpenPunctuation -> True
+ ClosePunctuation -> True
+ InitialQuote -> True
+ FinalQuote -> True
+ OtherPunctuation -> True
+ _ -> False
+
+isSymbol :: Char -> Bool
+isSymbol c = case generalCategory c of
+ MathSymbol -> True
+ CurrencySymbol -> True
+ ModifierSymbol -> True
+ OtherSymbol -> True
+ _ -> False
+
+isSeparator :: Char -> Bool
+isSeparator c = case generalCategory c of
+ Space -> True
+ LineSeparator -> True
+ ParagraphSeparator -> True
+ _ -> False
+
-- | Selects the first 128 characters of the Unicode character set,
-- corresponding to the ASCII character set.
isAscii :: Char -> Bool
c == '\r' ||
c == '\f' ||
c == '\v' ||
- c == '\xa0'
+ c == '\xa0' ||
+ iswspace (fromIntegral (ord c)) /= 0
-- | Selects alphabetic Unicode characters (letters) that are not lower-case.
-- (In Unicode terms, this includes letters in upper and title cases,
isLower :: Char -> Bool
-- | Selects alphabetic Unicode characters (letters).
---
--- Note: the Haskell 98 definition of 'isAlpha' is:
---
--- > isAlpha c = isUpper c || isLower c
---
--- the implementation here diverges from the Haskell 98
--- definition in the sense that Unicode alphabetic characters which
--- are neither upper nor lower case will still be identified as
--- alphabetic by 'isAlpha'.
isAlpha :: Char -> Bool
-- | Selects alphabetic or numeric digit Unicode characters.
toLower :: Char -> Char
-- -----------------------------------------------------------------------------
--- Win32 implementation
+-- Implementation with the supplied auto-generated Unicode character properties
+-- table (default)
-#if (defined(HAVE_WCTYPE_H) && HAVE_ISWSPACE && defined(HTYPE_WINT_T)) || mingw32_HOST_OS
+#if 1
--- Use the wide-char classification functions if available. Glibc
--- seems to implement these properly, even for chars > 0xffff, as long
--- as you call setlocale() to set the locale to something other than
--- "C". Therefore, we call setlocale() in hs_init().
-
--- Win32 uses UTF-16, so presumably the system-supplied iswlower() and
--- friends won't work properly with characters > 0xffff. These
--- characters are represented as surrogate pairs in UTF-16.
+-- Regardless of the O/S and Library, use the functions contained in WCsubst.c
type WInt = HTYPE_WINT_T
-type CInt = HTYPE_INT
isDigit c = iswdigit (fromIntegral (ord c)) /= 0
isAlpha c = iswalpha (fromIntegral (ord c)) /= 0
toLower c = chr (fromIntegral (towlower (fromIntegral (ord c))))
toUpper c = chr (fromIntegral (towupper (fromIntegral (ord c))))
+toTitle c = chr (fromIntegral (towtitle (fromIntegral (ord c))))
+
+foreign import ccall unsafe "u_iswdigit"
+ iswdigit :: CInt -> CInt
+
+foreign import ccall unsafe "u_iswalpha"
+ iswalpha :: CInt -> CInt
-foreign import ccall unsafe "iswdigit"
- iswdigit :: WInt -> CInt
+foreign import ccall unsafe "u_iswalnum"
+ iswalnum :: CInt -> CInt
-foreign import ccall unsafe "iswalpha"
- iswalpha :: WInt -> CInt
+foreign import ccall unsafe "u_iswcntrl"
+ iswcntrl :: CInt -> CInt
-foreign import ccall unsafe "iswalnum"
- iswalnum :: WInt -> CInt
+foreign import ccall unsafe "u_iswspace"
+ iswspace :: CInt -> CInt
-foreign import ccall unsafe "iswcntrl"
- iswcntrl :: WInt -> CInt
+foreign import ccall unsafe "u_iswprint"
+ iswprint :: CInt -> CInt
-foreign import ccall unsafe "iswspace"
- iswspace :: WInt -> CInt
+foreign import ccall unsafe "u_iswlower"
+ iswlower :: CInt -> CInt
-foreign import ccall unsafe "iswprint"
- iswprint :: WInt -> CInt
+foreign import ccall unsafe "u_iswupper"
+ iswupper :: CInt -> CInt
-foreign import ccall unsafe "iswlower"
- iswlower :: WInt -> CInt
+foreign import ccall unsafe "u_towlower"
+ towlower :: CInt -> CInt
-foreign import ccall unsafe "iswupper"
- iswupper :: WInt -> CInt
+foreign import ccall unsafe "u_towupper"
+ towupper :: CInt -> CInt
-foreign import ccall unsafe "towlower"
- towlower :: WInt -> WInt
+foreign import ccall unsafe "u_towtitle"
+ towtitle :: CInt -> CInt
-foreign import ccall unsafe "towupper"
- towupper :: WInt -> WInt
+foreign import ccall unsafe "u_gencat"
+ wgencat :: CInt -> Int
-- -----------------------------------------------------------------------------
--- No libunicode, so fall back to the ASCII-only implementation
+-- No libunicode, so fall back to the ASCII-only implementation (never used, indeed)
#else
--- /dev/null
+/*-------------------------------------------------------------------------
+This is an automatically generated file: do not edit
+Generated by udconfc at Mon Jan 31 23:37:36 EST 2005
+-------------------------------------------------------------------------*/
+
+#include "WCsubst.h"
+
+/* Unicode general categories, listed in the same order as in the Unicode
+ * standard -- this must be the same order as in GHC.Unicode.
+ */
+
+enum {
+ NUMCAT_LU, /* Letter, Uppercase */
+ NUMCAT_LL, /* Letter, Lowercase */
+ NUMCAT_LT, /* Letter, Titlecase */
+ NUMCAT_LM, /* Letter, Modifier */
+ NUMCAT_LO, /* Letter, Other */
+ NUMCAT_MN, /* Mark, Non-Spacing */
+ NUMCAT_MC, /* Mark, Spacing Combining */
+ NUMCAT_ME, /* Mark, Enclosing */
+ NUMCAT_ND, /* Number, Decimal */
+ NUMCAT_NL, /* Number, Letter */
+ NUMCAT_NO, /* Number, Other */
+ NUMCAT_PC, /* Punctuation, Connector */
+ NUMCAT_PD, /* Punctuation, Dash */
+ NUMCAT_PS, /* Punctuation, Open */
+ NUMCAT_PE, /* Punctuation, Close */
+ NUMCAT_PI, /* Punctuation, Initial quote */
+ NUMCAT_PF, /* Punctuation, Final quote */
+ NUMCAT_PO, /* Punctuation, Other */
+ NUMCAT_SM, /* Symbol, Math */
+ NUMCAT_SC, /* Symbol, Currency */
+ NUMCAT_SK, /* Symbol, Modifier */
+ NUMCAT_SO, /* Symbol, Other */
+ NUMCAT_ZS, /* Separator, Space */
+ NUMCAT_ZL, /* Separator, Line */
+ NUMCAT_ZP, /* Separator, Paragraph */
+ NUMCAT_CC, /* Other, Control */
+ NUMCAT_CF, /* Other, Format */
+ NUMCAT_CS, /* Other, Surrogate */
+ NUMCAT_CO, /* Other, Private Use */
+ NUMCAT_CN /* Other, Not Assigned */
+};
+
+struct _convrule_
+{
+ unsigned int category;
+ unsigned int catnumber;
+ int possible;
+ int updist;
+ int lowdist;
+ int titledist;
+};
+
+struct _charblock_
+{
+ int start;
+ int length;
+ const struct _convrule_ *rule;
+};
+
+#define GENCAT_ZP 67108864
+#define GENCAT_MC 8388608
+#define GENCAT_NO 65536
+#define GENCAT_SK 1024
+#define GENCAT_CO 268435456
+#define GENCAT_ME 4194304
+#define GENCAT_ND 256
+#define GENCAT_PO 4
+#define GENCAT_LT 524288
+#define GENCAT_PC 2048
+#define GENCAT_SM 64
+#define GENCAT_ZS 2
+#define GENCAT_CC 1
+#define GENCAT_LU 512
+#define GENCAT_PD 128
+#define GENCAT_SO 8192
+#define GENCAT_PE 32
+#define GENCAT_CS 134217728
+#define GENCAT_PF 131072
+#define GENCAT_CF 32768
+#define GENCAT_PS 16
+#define GENCAT_SC 8
+#define GENCAT_LL 4096
+#define GENCAT_ZL 33554432
+#define GENCAT_LM 1048576
+#define GENCAT_PI 16384
+#define GENCAT_NL 16777216
+#define GENCAT_MN 2097152
+#define GENCAT_LO 262144
+#define MAX_UNI_CHAR 1114109
+#define NUM_BLOCKS 1916
+#define NUM_CONVBLOCKS 835
+#define NUM_SPACEBLOCKS 8
+#define NUM_LAT1BLOCKS 63
+#define NUM_RULES 126
+static const struct _convrule_ rule116={GENCAT_LU, NUMCAT_LU, 1, 0, -8383, 0};
+static const struct _convrule_ rule108={GENCAT_LU, NUMCAT_LU, 1, 0, -86, 0};
+static const struct _convrule_ rule88={GENCAT_LU, NUMCAT_LU, 1, 0, 80, 0};
+static const struct _convrule_ rule86={GENCAT_LL, NUMCAT_LL, 1, -96, 0, -96};
+static const struct _convrule_ rule79={GENCAT_LU, NUMCAT_LU, 0, 0, 0, 0};
+static const struct _convrule_ rule56={GENCAT_LL, NUMCAT_LL, 1, -203, 0, -203};
+static const struct _convrule_ rule54={GENCAT_LL, NUMCAT_LL, 1, -205, 0, -205};
+static const struct _convrule_ rule48={GENCAT_LL, NUMCAT_LL, 1, -79, 0, -79};
+static const struct _convrule_ rule40={GENCAT_LU, NUMCAT_LU, 1, 0, 218, 0};
+static const struct _convrule_ rule113={GENCAT_ZL, NUMCAT_ZL, 0, 0, 0, 0};
+static const struct _convrule_ rule103={GENCAT_LT, NUMCAT_LT, 1, 0, -8, 0};
+static const struct _convrule_ rule98={GENCAT_LL, NUMCAT_LL, 1, 86, 0, 86};
+static const struct _convrule_ rule95={GENCAT_LL, NUMCAT_LL, 1, 8, 0, 8};
+static const struct _convrule_ rule39={GENCAT_LU, NUMCAT_LU, 1, 0, 214, 0};
+static const struct _convrule_ rule119={GENCAT_NL, NUMCAT_NL, 1, -16, 0, -16};
+static const struct _convrule_ rule101={GENCAT_LL, NUMCAT_LL, 1, 112, 0, 112};
+static const struct _convrule_ rule93={GENCAT_NL, NUMCAT_NL, 0, 0, 0, 0};
+static const struct _convrule_ rule60={GENCAT_LL, NUMCAT_LL, 1, -213, 0, -213};
+static const struct _convrule_ rule59={GENCAT_LL, NUMCAT_LL, 1, -211, 0, -211};
+static const struct _convrule_ rule42={GENCAT_LU, NUMCAT_LU, 1, 0, 219, 0};
+static const struct _convrule_ rule38={GENCAT_LL, NUMCAT_LL, 1, 130, 0, 130};
+static const struct _convrule_ rule34={GENCAT_LL, NUMCAT_LL, 1, 97, 0, 97};
+static const struct _convrule_ rule25={GENCAT_LU, NUMCAT_LU, 1, 0, -121, 0};
+static const struct _convrule_ rule24={GENCAT_LL, NUMCAT_LL, 1, -232, 0, -232};
+static const struct _convrule_ rule20={GENCAT_LL, NUMCAT_LL, 1, 121, 0, 121};
+static const struct _convrule_ rule16={GENCAT_CF, NUMCAT_CF, 0, 0, 0, 0};
+static const struct _convrule_ rule4={GENCAT_PS, NUMCAT_PS, 0, 0, 0, 0};
+static const struct _convrule_ rule123={GENCAT_CO, NUMCAT_CO, 0, 0, 0, 0};
+static const struct _convrule_ rule112={GENCAT_LU, NUMCAT_LU, 1, 0, -126, 0};
+static const struct _convrule_ rule106={GENCAT_LT, NUMCAT_LT, 1, 0, -9, 0};
+static const struct _convrule_ rule105={GENCAT_LU, NUMCAT_LU, 1, 0, -74, 0};
+static const struct _convrule_ rule97={GENCAT_LL, NUMCAT_LL, 1, 74, 0, 74};
+static const struct _convrule_ rule65={GENCAT_LM, NUMCAT_LM, 0, 0, 0, 0};
+static const struct _convrule_ rule30={GENCAT_LU, NUMCAT_LU, 1, 0, 79, 0};
+static const struct _convrule_ rule5={GENCAT_PE, NUMCAT_PE, 0, 0, 0, 0};
+static const struct _convrule_ rule114={GENCAT_ZP, NUMCAT_ZP, 0, 0, 0, 0};
+static const struct _convrule_ rule104={GENCAT_LL, NUMCAT_LL, 1, 9, 0, 9};
+static const struct _convrule_ rule94={GENCAT_LL, NUMCAT_LL, 1, -59, 0, -59};
+static const struct _convrule_ rule92={GENCAT_MC, NUMCAT_MC, 0, 0, 0, 0};
+static const struct _convrule_ rule91={GENCAT_LL, NUMCAT_LL, 1, -48, 0, -48};
+static const struct _convrule_ rule82={GENCAT_LL, NUMCAT_LL, 1, -86, 0, -86};
+static const struct _convrule_ rule78={GENCAT_LL, NUMCAT_LL, 1, -57, 0, -57};
+static const struct _convrule_ rule66={GENCAT_MN, NUMCAT_MN, 0, 0, 0, 0};
+static const struct _convrule_ rule55={GENCAT_LL, NUMCAT_LL, 1, -202, 0, -202};
+static const struct _convrule_ rule50={GENCAT_LU, NUMCAT_LU, 1, 0, -56, 0};
+static const struct _convrule_ rule45={GENCAT_LU, NUMCAT_LU, 1, 0, 2, 1};
+static const struct _convrule_ rule31={GENCAT_LU, NUMCAT_LU, 1, 0, 202, 0};
+static const struct _convrule_ rule6={GENCAT_SM, NUMCAT_SM, 0, 0, 0, 0};
+static const struct _convrule_ rule107={GENCAT_LL, NUMCAT_LL, 1, -7205, 0, -7205};
+static const struct _convrule_ rule90={GENCAT_LU, NUMCAT_LU, 1, 0, 48, 0};
+static const struct _convrule_ rule87={GENCAT_LU, NUMCAT_LU, 1, 0, -7, 0};
+static const struct _convrule_ rule44={GENCAT_LL, NUMCAT_LL, 1, 56, 0, 56};
+static const struct _convrule_ rule33={GENCAT_LU, NUMCAT_LU, 1, 0, 207, 0};
+static const struct _convrule_ rule18={GENCAT_LL, NUMCAT_LL, 1, 743, 0, 743};
+static const struct _convrule_ rule17={GENCAT_NO, NUMCAT_NO, 0, 0, 0, 0};
+static const struct _convrule_ rule10={GENCAT_SK, NUMCAT_SK, 0, 0, 0, 0};
+static const struct _convrule_ rule8={GENCAT_ND, NUMCAT_ND, 0, 0, 0, 0};
+static const struct _convrule_ rule122={GENCAT_CS, NUMCAT_CS, 0, 0, 0, 0};
+static const struct _convrule_ rule99={GENCAT_LL, NUMCAT_LL, 1, 100, 0, 100};
+static const struct _convrule_ rule67={GENCAT_MN, NUMCAT_MN, 1, 84, 0, 84};
+static const struct _convrule_ rule52={GENCAT_LL, NUMCAT_LL, 1, -210, 0, -210};
+static const struct _convrule_ rule51={GENCAT_LU, NUMCAT_LU, 1, 0, -130, 0};
+static const struct _convrule_ rule32={GENCAT_LU, NUMCAT_LU, 1, 0, 203, 0};
+static const struct _convrule_ rule27={GENCAT_LU, NUMCAT_LU, 1, 0, 210, 0};
+static const struct _convrule_ rule15={GENCAT_PI, NUMCAT_PI, 0, 0, 0, 0};
+static const struct _convrule_ rule111={GENCAT_LU, NUMCAT_LU, 1, 0, -128, 0};
+static const struct _convrule_ rule96={GENCAT_LU, NUMCAT_LU, 1, 0, -8, 0};
+static const struct _convrule_ rule71={GENCAT_LU, NUMCAT_LU, 1, 0, 63, 0};
+static const struct _convrule_ rule64={GENCAT_LL, NUMCAT_LL, 1, -219, 0, -219};
+static const struct _convrule_ rule62={GENCAT_LL, NUMCAT_LL, 1, -218, 0, -218};
+static const struct _convrule_ rule23={GENCAT_LU, NUMCAT_LU, 1, 0, -199, 0};
+static const struct _convrule_ rule19={GENCAT_PF, NUMCAT_PF, 0, 0, 0, 0};
+static const struct _convrule_ rule1={GENCAT_ZS, NUMCAT_ZS, 0, 0, 0, 0};
+static const struct _convrule_ rule120={GENCAT_SO, NUMCAT_SO, 1, 0, 26, 0};
+static const struct _convrule_ rule115={GENCAT_LU, NUMCAT_LU, 1, 0, -7517, 0};
+static const struct _convrule_ rule83={GENCAT_LL, NUMCAT_LL, 1, -80, 0, -80};
+static const struct _convrule_ rule81={GENCAT_LL, NUMCAT_LL, 1, -54, 0, -54};
+static const struct _convrule_ rule80={GENCAT_LL, NUMCAT_LL, 1, -47, 0, -47};
+static const struct _convrule_ rule77={GENCAT_LL, NUMCAT_LL, 1, -62, 0, -62};
+static const struct _convrule_ rule76={GENCAT_LL, NUMCAT_LL, 1, -63, 0, -63};
+static const struct _convrule_ rule75={GENCAT_LL, NUMCAT_LL, 1, -64, 0, -64};
+static const struct _convrule_ rule73={GENCAT_LL, NUMCAT_LL, 1, -37, 0, -37};
+static const struct _convrule_ rule72={GENCAT_LL, NUMCAT_LL, 1, -38, 0, -38};
+static const struct _convrule_ rule35={GENCAT_LU, NUMCAT_LU, 1, 0, 211, 0};
+static const struct _convrule_ rule14={GENCAT_LL, NUMCAT_LL, 0, 0, 0, 0};
+static const struct _convrule_ rule11={GENCAT_PC, NUMCAT_PC, 0, 0, 0, 0};
+static const struct _convrule_ rule3={GENCAT_SC, NUMCAT_SC, 0, 0, 0, 0};
+static const struct _convrule_ rule2={GENCAT_PO, NUMCAT_PO, 0, 0, 0, 0};
+static const struct _convrule_ rule70={GENCAT_LU, NUMCAT_LU, 1, 0, 64, 0};
+static const struct _convrule_ rule58={GENCAT_LL, NUMCAT_LL, 1, -209, 0, -209};
+static const struct _convrule_ rule57={GENCAT_LL, NUMCAT_LL, 1, -207, 0, -207};
+static const struct _convrule_ rule53={GENCAT_LL, NUMCAT_LL, 1, -206, 0, -206};
+static const struct _convrule_ rule46={GENCAT_LT, NUMCAT_LT, 1, -1, 1, 0};
+static const struct _convrule_ rule36={GENCAT_LU, NUMCAT_LU, 1, 0, 209, 0};
+static const struct _convrule_ rule26={GENCAT_LL, NUMCAT_LL, 1, -300, 0, -300};
+static const struct _convrule_ rule9={GENCAT_LU, NUMCAT_LU, 1, 0, 32, 0};
+static const struct _convrule_ rule121={GENCAT_SO, NUMCAT_SO, 1, -26, 0, -26};
+static const struct _convrule_ rule117={GENCAT_LU, NUMCAT_LU, 1, 0, -8262, 0};
+static const struct _convrule_ rule109={GENCAT_LU, NUMCAT_LU, 1, 0, -100, 0};
+static const struct _convrule_ rule69={GENCAT_LU, NUMCAT_LU, 1, 0, 37, 0};
+static const struct _convrule_ rule29={GENCAT_LU, NUMCAT_LU, 1, 0, 205, 0};
+static const struct _convrule_ rule21={GENCAT_LU, NUMCAT_LU, 1, 0, 1, 0};
+static const struct _convrule_ rule124={GENCAT_LU, NUMCAT_LU, 1, 0, 40, 0};
+static const struct _convrule_ rule110={GENCAT_LU, NUMCAT_LU, 1, 0, -112, 0};
+static const struct _convrule_ rule102={GENCAT_LL, NUMCAT_LL, 1, 126, 0, 126};
+static const struct _convrule_ rule100={GENCAT_LL, NUMCAT_LL, 1, 128, 0, 128};
+static const struct _convrule_ rule85={GENCAT_LU, NUMCAT_LU, 1, 0, -60, 0};
+static const struct _convrule_ rule84={GENCAT_LL, NUMCAT_LL, 1, 7, 0, 7};
+static const struct _convrule_ rule63={GENCAT_LL, NUMCAT_LL, 1, -217, 0, -217};
+static const struct _convrule_ rule61={GENCAT_LL, NUMCAT_LL, 1, -214, 0, -214};
+static const struct _convrule_ rule43={GENCAT_LO, NUMCAT_LO, 0, 0, 0, 0};
+static const struct _convrule_ rule41={GENCAT_LU, NUMCAT_LU, 1, 0, 217, 0};
+static const struct _convrule_ rule125={GENCAT_LL, NUMCAT_LL, 1, -40, 0, -40};
+static const struct _convrule_ rule118={GENCAT_NL, NUMCAT_NL, 1, 0, 16, 0};
+static const struct _convrule_ rule89={GENCAT_ME, NUMCAT_ME, 0, 0, 0, 0};
+static const struct _convrule_ rule74={GENCAT_LL, NUMCAT_LL, 1, -31, 0, -31};
+static const struct _convrule_ rule68={GENCAT_LU, NUMCAT_LU, 1, 0, 38, 0};
+static const struct _convrule_ rule49={GENCAT_LU, NUMCAT_LU, 1, 0, -97, 0};
+static const struct _convrule_ rule47={GENCAT_LL, NUMCAT_LL, 1, -2, 0, -1};
+static const struct _convrule_ rule37={GENCAT_LU, NUMCAT_LU, 1, 0, 213, 0};
+static const struct _convrule_ rule28={GENCAT_LU, NUMCAT_LU, 1, 0, 206, 0};
+static const struct _convrule_ rule22={GENCAT_LL, NUMCAT_LL, 1, -1, 0, -1};
+static const struct _convrule_ rule13={GENCAT_SO, NUMCAT_SO, 0, 0, 0, 0};
+static const struct _convrule_ rule12={GENCAT_LL, NUMCAT_LL, 1, -32, 0, -32};
+static const struct _convrule_ rule7={GENCAT_PD, NUMCAT_PD, 0, 0, 0, 0};
+static const struct _convrule_ rule0={GENCAT_CC, NUMCAT_CC, 0, 0, 0, 0};
+static const struct _charblock_ allchars[]={
+ {0, 32, &rule0},
+ {32, 1, &rule1},
+ {33, 3, &rule2},
+ {36, 1, &rule3},
+ {37, 3, &rule2},
+ {40, 1, &rule4},
+ {41, 1, &rule5},
+ {42, 1, &rule2},
+ {43, 1, &rule6},
+ {44, 1, &rule2},
+ {45, 1, &rule7},
+ {46, 2, &rule2},
+ {48, 10, &rule8},
+ {58, 2, &rule2},
+ {60, 3, &rule6},
+ {63, 2, &rule2},
+ {65, 26, &rule9},
+ {91, 1, &rule4},
+ {92, 1, &rule2},
+ {93, 1, &rule5},
+ {94, 1, &rule10},
+ {95, 1, &rule11},
+ {96, 1, &rule10},
+ {97, 26, &rule12},
+ {123, 1, &rule4},
+ {124, 1, &rule6},
+ {125, 1, &rule5},
+ {126, 1, &rule6},
+ {127, 33, &rule0},
+ {160, 1, &rule1},
+ {161, 1, &rule2},
+ {162, 4, &rule3},
+ {166, 2, &rule13},
+ {168, 1, &rule10},
+ {169, 1, &rule13},
+ {170, 1, &rule14},
+ {171, 1, &rule15},
+ {172, 1, &rule6},
+ {173, 1, &rule16},
+ {174, 1, &rule13},
+ {175, 1, &rule10},
+ {176, 1, &rule13},
+ {177, 1, &rule6},
+ {178, 2, &rule17},
+ {180, 1, &rule10},
+ {181, 1, &rule18},
+ {182, 1, &rule13},
+ {183, 1, &rule2},
+ {184, 1, &rule10},
+ {185, 1, &rule17},
+ {186, 1, &rule14},
+ {187, 1, &rule19},
+ {188, 3, &rule17},
+ {191, 1, &rule2},
+ {192, 23, &rule9},
+ {215, 1, &rule6},
+ {216, 7, &rule9},
+ {223, 1, &rule14},
+ {224, 23, &rule12},
+ {247, 1, &rule6},
+ {248, 7, &rule12},
+ {255, 1, &rule20},
+ {256, 1, &rule21},
+ {257, 1, &rule22},
+ {258, 1, &rule21},
+ {259, 1, &rule22},
+ {260, 1, &rule21},
+ {261, 1, &rule22},
+ {262, 1, &rule21},
+ {263, 1, &rule22},
+ {264, 1, &rule21},
+ {265, 1, &rule22},
+ {266, 1, &rule21},
+ {267, 1, &rule22},
+ {268, 1, &rule21},
+ {269, 1, &rule22},
+ {270, 1, &rule21},
+ {271, 1, &rule22},
+ {272, 1, &rule21},
+ {273, 1, &rule22},
+ {274, 1, &rule21},
+ {275, 1, &rule22},
+ {276, 1, &rule21},
+ {277, 1, &rule22},
+ {278, 1, &rule21},
+ {279, 1, &rule22},
+ {280, 1, &rule21},
+ {281, 1, &rule22},
+ {282, 1, &rule21},
+ {283, 1, &rule22},
+ {284, 1, &rule21},
+ {285, 1, &rule22},
+ {286, 1, &rule21},
+ {287, 1, &rule22},
+ {288, 1, &rule21},
+ {289, 1, &rule22},
+ {290, 1, &rule21},
+ {291, 1, &rule22},
+ {292, 1, &rule21},
+ {293, 1, &rule22},
+ {294, 1, &rule21},
+ {295, 1, &rule22},
+ {296, 1, &rule21},
+ {297, 1, &rule22},
+ {298, 1, &rule21},
+ {299, 1, &rule22},
+ {300, 1, &rule21},
+ {301, 1, &rule22},
+ {302, 1, &rule21},
+ {303, 1, &rule22},
+ {304, 1, &rule23},
+ {305, 1, &rule24},
+ {306, 1, &rule21},
+ {307, 1, &rule22},
+ {308, 1, &rule21},
+ {309, 1, &rule22},
+ {310, 1, &rule21},
+ {311, 1, &rule22},
+ {312, 1, &rule14},
+ {313, 1, &rule21},
+ {314, 1, &rule22},
+ {315, 1, &rule21},
+ {316, 1, &rule22},
+ {317, 1, &rule21},
+ {318, 1, &rule22},
+ {319, 1, &rule21},
+ {320, 1, &rule22},
+ {321, 1, &rule21},
+ {322, 1, &rule22},
+ {323, 1, &rule21},
+ {324, 1, &rule22},
+ {325, 1, &rule21},
+ {326, 1, &rule22},
+ {327, 1, &rule21},
+ {328, 1, &rule22},
+ {329, 1, &rule14},
+ {330, 1, &rule21},
+ {331, 1, &rule22},
+ {332, 1, &rule21},
+ {333, 1, &rule22},
+ {334, 1, &rule21},
+ {335, 1, &rule22},
+ {336, 1, &rule21},
+ {337, 1, &rule22},
+ {338, 1, &rule21},
+ {339, 1, &rule22},
+ {340, 1, &rule21},
+ {341, 1, &rule22},
+ {342, 1, &rule21},
+ {343, 1, &rule22},
+ {344, 1, &rule21},
+ {345, 1, &rule22},
+ {346, 1, &rule21},
+ {347, 1, &rule22},
+ {348, 1, &rule21},
+ {349, 1, &rule22},
+ {350, 1, &rule21},
+ {351, 1, &rule22},
+ {352, 1, &rule21},
+ {353, 1, &rule22},
+ {354, 1, &rule21},
+ {355, 1, &rule22},
+ {356, 1, &rule21},
+ {357, 1, &rule22},
+ {358, 1, &rule21},
+ {359, 1, &rule22},
+ {360, 1, &rule21},
+ {361, 1, &rule22},
+ {362, 1, &rule21},
+ {363, 1, &rule22},
+ {364, 1, &rule21},
+ {365, 1, &rule22},
+ {366, 1, &rule21},
+ {367, 1, &rule22},
+ {368, 1, &rule21},
+ {369, 1, &rule22},
+ {370, 1, &rule21},
+ {371, 1, &rule22},
+ {372, 1, &rule21},
+ {373, 1, &rule22},
+ {374, 1, &rule21},
+ {375, 1, &rule22},
+ {376, 1, &rule25},
+ {377, 1, &rule21},
+ {378, 1, &rule22},
+ {379, 1, &rule21},
+ {380, 1, &rule22},
+ {381, 1, &rule21},
+ {382, 1, &rule22},
+ {383, 1, &rule26},
+ {384, 1, &rule14},
+ {385, 1, &rule27},
+ {386, 1, &rule21},
+ {387, 1, &rule22},
+ {388, 1, &rule21},
+ {389, 1, &rule22},
+ {390, 1, &rule28},
+ {391, 1, &rule21},
+ {392, 1, &rule22},
+ {393, 2, &rule29},
+ {395, 1, &rule21},
+ {396, 1, &rule22},
+ {397, 1, &rule14},
+ {398, 1, &rule30},
+ {399, 1, &rule31},
+ {400, 1, &rule32},
+ {401, 1, &rule21},
+ {402, 1, &rule22},
+ {403, 1, &rule29},
+ {404, 1, &rule33},
+ {405, 1, &rule34},
+ {406, 1, &rule35},
+ {407, 1, &rule36},
+ {408, 1, &rule21},
+ {409, 1, &rule22},
+ {410, 2, &rule14},
+ {412, 1, &rule35},
+ {413, 1, &rule37},
+ {414, 1, &rule38},
+ {415, 1, &rule39},
+ {416, 1, &rule21},
+ {417, 1, &rule22},
+ {418, 1, &rule21},
+ {419, 1, &rule22},
+ {420, 1, &rule21},
+ {421, 1, &rule22},
+ {422, 1, &rule40},
+ {423, 1, &rule21},
+ {424, 1, &rule22},
+ {425, 1, &rule40},
+ {426, 2, &rule14},
+ {428, 1, &rule21},
+ {429, 1, &rule22},
+ {430, 1, &rule40},
+ {431, 1, &rule21},
+ {432, 1, &rule22},
+ {433, 2, &rule41},
+ {435, 1, &rule21},
+ {436, 1, &rule22},
+ {437, 1, &rule21},
+ {438, 1, &rule22},
+ {439, 1, &rule42},
+ {440, 1, &rule21},
+ {441, 1, &rule22},
+ {442, 1, &rule14},
+ {443, 1, &rule43},
+ {444, 1, &rule21},
+ {445, 1, &rule22},
+ {446, 1, &rule14},
+ {447, 1, &rule44},
+ {448, 4, &rule43},
+ {452, 1, &rule45},
+ {453, 1, &rule46},
+ {454, 1, &rule47},
+ {455, 1, &rule45},
+ {456, 1, &rule46},
+ {457, 1, &rule47},
+ {458, 1, &rule45},
+ {459, 1, &rule46},
+ {460, 1, &rule47},
+ {461, 1, &rule21},
+ {462, 1, &rule22},
+ {463, 1, &rule21},
+ {464, 1, &rule22},
+ {465, 1, &rule21},
+ {466, 1, &rule22},
+ {467, 1, &rule21},
+ {468, 1, &rule22},
+ {469, 1, &rule21},
+ {470, 1, &rule22},
+ {471, 1, &rule21},
+ {472, 1, &rule22},
+ {473, 1, &rule21},
+ {474, 1, &rule22},
+ {475, 1, &rule21},
+ {476, 1, &rule22},
+ {477, 1, &rule48},
+ {478, 1, &rule21},
+ {479, 1, &rule22},
+ {480, 1, &rule21},
+ {481, 1, &rule22},
+ {482, 1, &rule21},
+ {483, 1, &rule22},
+ {484, 1, &rule21},
+ {485, 1, &rule22},
+ {486, 1, &rule21},
+ {487, 1, &rule22},
+ {488, 1, &rule21},
+ {489, 1, &rule22},
+ {490, 1, &rule21},
+ {491, 1, &rule22},
+ {492, 1, &rule21},
+ {493, 1, &rule22},
+ {494, 1, &rule21},
+ {495, 1, &rule22},
+ {496, 1, &rule14},
+ {497, 1, &rule45},
+ {498, 1, &rule46},
+ {499, 1, &rule47},
+ {500, 1, &rule21},
+ {501, 1, &rule22},
+ {502, 1, &rule49},
+ {503, 1, &rule50},
+ {504, 1, &rule21},
+ {505, 1, &rule22},
+ {506, 1, &rule21},
+ {507, 1, &rule22},
+ {508, 1, &rule21},
+ {509, 1, &rule22},
+ {510, 1, &rule21},
+ {511, 1, &rule22},
+ {512, 1, &rule21},
+ {513, 1, &rule22},
+ {514, 1, &rule21},
+ {515, 1, &rule22},
+ {516, 1, &rule21},
+ {517, 1, &rule22},
+ {518, 1, &rule21},
+ {519, 1, &rule22},
+ {520, 1, &rule21},
+ {521, 1, &rule22},
+ {522, 1, &rule21},
+ {523, 1, &rule22},
+ {524, 1, &rule21},
+ {525, 1, &rule22},
+ {526, 1, &rule21},
+ {527, 1, &rule22},
+ {528, 1, &rule21},
+ {529, 1, &rule22},
+ {530, 1, &rule21},
+ {531, 1, &rule22},
+ {532, 1, &rule21},
+ {533, 1, &rule22},
+ {534, 1, &rule21},
+ {535, 1, &rule22},
+ {536, 1, &rule21},
+ {537, 1, &rule22},
+ {538, 1, &rule21},
+ {539, 1, &rule22},
+ {540, 1, &rule21},
+ {541, 1, &rule22},
+ {542, 1, &rule21},
+ {543, 1, &rule22},
+ {544, 1, &rule51},
+ {545, 1, &rule14},
+ {546, 1, &rule21},
+ {547, 1, &rule22},
+ {548, 1, &rule21},
+ {549, 1, &rule22},
+ {550, 1, &rule21},
+ {551, 1, &rule22},
+ {552, 1, &rule21},
+ {553, 1, &rule22},
+ {554, 1, &rule21},
+ {555, 1, &rule22},
+ {556, 1, &rule21},
+ {557, 1, &rule22},
+ {558, 1, &rule21},
+ {559, 1, &rule22},
+ {560, 1, &rule21},
+ {561, 1, &rule22},
+ {562, 1, &rule21},
+ {563, 1, &rule22},
+ {564, 3, &rule14},
+ {592, 3, &rule14},
+ {595, 1, &rule52},
+ {596, 1, &rule53},
+ {597, 1, &rule14},
+ {598, 2, &rule54},
+ {600, 1, &rule14},
+ {601, 1, &rule55},
+ {602, 1, &rule14},
+ {603, 1, &rule56},
+ {604, 4, &rule14},
+ {608, 1, &rule54},
+ {609, 2, &rule14},
+ {611, 1, &rule57},
+ {612, 4, &rule14},
+ {616, 1, &rule58},
+ {617, 1, &rule59},
+ {618, 5, &rule14},
+ {623, 1, &rule59},
+ {624, 2, &rule14},
+ {626, 1, &rule60},
+ {627, 2, &rule14},
+ {629, 1, &rule61},
+ {630, 10, &rule14},
+ {640, 1, &rule62},
+ {641, 2, &rule14},
+ {643, 1, &rule62},
+ {644, 4, &rule14},
+ {648, 1, &rule62},
+ {649, 1, &rule14},
+ {650, 2, &rule63},
+ {652, 6, &rule14},
+ {658, 1, &rule64},
+ {659, 29, &rule14},
+ {688, 18, &rule65},
+ {706, 4, &rule10},
+ {710, 12, &rule65},
+ {722, 14, &rule10},
+ {736, 5, &rule65},
+ {741, 9, &rule10},
+ {750, 1, &rule65},
+ {751, 17, &rule10},
+ {768, 69, &rule66},
+ {837, 1, &rule67},
+ {838, 18, &rule66},
+ {861, 19, &rule66},
+ {884, 2, &rule10},
+ {890, 1, &rule65},
+ {894, 1, &rule2},
+ {900, 2, &rule10},
+ {902, 1, &rule68},
+ {903, 1, &rule2},
+ {904, 3, &rule69},
+ {908, 1, &rule70},
+ {910, 2, &rule71},
+ {912, 1, &rule14},
+ {913, 17, &rule9},
+ {931, 9, &rule9},
+ {940, 1, &rule72},
+ {941, 3, &rule73},
+ {944, 1, &rule14},
+ {945, 17, &rule12},
+ {962, 1, &rule74},
+ {963, 9, &rule12},
+ {972, 1, &rule75},
+ {973, 2, &rule76},
+ {976, 1, &rule77},
+ {977, 1, &rule78},
+ {978, 3, &rule79},
+ {981, 1, &rule80},
+ {982, 1, &rule81},
+ {983, 1, &rule14},
+ {984, 1, &rule21},
+ {985, 1, &rule22},
+ {986, 1, &rule21},
+ {987, 1, &rule22},
+ {988, 1, &rule21},
+ {989, 1, &rule22},
+ {990, 1, &rule21},
+ {991, 1, &rule22},
+ {992, 1, &rule21},
+ {993, 1, &rule22},
+ {994, 1, &rule21},
+ {995, 1, &rule22},
+ {996, 1, &rule21},
+ {997, 1, &rule22},
+ {998, 1, &rule21},
+ {999, 1, &rule22},
+ {1000, 1, &rule21},
+ {1001, 1, &rule22},
+ {1002, 1, &rule21},
+ {1003, 1, &rule22},
+ {1004, 1, &rule21},
+ {1005, 1, &rule22},
+ {1006, 1, &rule21},
+ {1007, 1, &rule22},
+ {1008, 1, &rule82},
+ {1009, 1, &rule83},
+ {1010, 1, &rule84},
+ {1011, 1, &rule14},
+ {1012, 1, &rule85},
+ {1013, 1, &rule86},
+ {1014, 1, &rule6},
+ {1015, 1, &rule21},
+ {1016, 1, &rule22},
+ {1017, 1, &rule87},
+ {1018, 1, &rule21},
+ {1019, 1, &rule22},
+ {1024, 16, &rule88},
+ {1040, 32, &rule9},
+ {1072, 32, &rule12},
+ {1104, 16, &rule83},
+ {1120, 1, &rule21},
+ {1121, 1, &rule22},
+ {1122, 1, &rule21},
+ {1123, 1, &rule22},
+ {1124, 1, &rule21},
+ {1125, 1, &rule22},
+ {1126, 1, &rule21},
+ {1127, 1, &rule22},
+ {1128, 1, &rule21},
+ {1129, 1, &rule22},
+ {1130, 1, &rule21},
+ {1131, 1, &rule22},
+ {1132, 1, &rule21},
+ {1133, 1, &rule22},
+ {1134, 1, &rule21},
+ {1135, 1, &rule22},
+ {1136, 1, &rule21},
+ {1137, 1, &rule22},
+ {1138, 1, &rule21},
+ {1139, 1, &rule22},
+ {1140, 1, &rule21},
+ {1141, 1, &rule22},
+ {1142, 1, &rule21},
+ {1143, 1, &rule22},
+ {1144, 1, &rule21},
+ {1145, 1, &rule22},
+ {1146, 1, &rule21},
+ {1147, 1, &rule22},
+ {1148, 1, &rule21},
+ {1149, 1, &rule22},
+ {1150, 1, &rule21},
+ {1151, 1, &rule22},
+ {1152, 1, &rule21},
+ {1153, 1, &rule22},
+ {1154, 1, &rule13},
+ {1155, 4, &rule66},
+ {1160, 2, &rule89},
+ {1162, 1, &rule21},
+ {1163, 1, &rule22},
+ {1164, 1, &rule21},
+ {1165, 1, &rule22},
+ {1166, 1, &rule21},
+ {1167, 1, &rule22},
+ {1168, 1, &rule21},
+ {1169, 1, &rule22},
+ {1170, 1, &rule21},
+ {1171, 1, &rule22},
+ {1172, 1, &rule21},
+ {1173, 1, &rule22},
+ {1174, 1, &rule21},
+ {1175, 1, &rule22},
+ {1176, 1, &rule21},
+ {1177, 1, &rule22},
+ {1178, 1, &rule21},
+ {1179, 1, &rule22},
+ {1180, 1, &rule21},
+ {1181, 1, &rule22},
+ {1182, 1, &rule21},
+ {1183, 1, &rule22},
+ {1184, 1, &rule21},
+ {1185, 1, &rule22},
+ {1186, 1, &rule21},
+ {1187, 1, &rule22},
+ {1188, 1, &rule21},
+ {1189, 1, &rule22},
+ {1190, 1, &rule21},
+ {1191, 1, &rule22},
+ {1192, 1, &rule21},
+ {1193, 1, &rule22},
+ {1194, 1, &rule21},
+ {1195, 1, &rule22},
+ {1196, 1, &rule21},
+ {1197, 1, &rule22},
+ {1198, 1, &rule21},
+ {1199, 1, &rule22},
+ {1200, 1, &rule21},
+ {1201, 1, &rule22},
+ {1202, 1, &rule21},
+ {1203, 1, &rule22},
+ {1204, 1, &rule21},
+ {1205, 1, &rule22},
+ {1206, 1, &rule21},
+ {1207, 1, &rule22},
+ {1208, 1, &rule21},
+ {1209, 1, &rule22},
+ {1210, 1, &rule21},
+ {1211, 1, &rule22},
+ {1212, 1, &rule21},
+ {1213, 1, &rule22},
+ {1214, 1, &rule21},
+ {1215, 1, &rule22},
+ {1216, 1, &rule79},
+ {1217, 1, &rule21},
+ {1218, 1, &rule22},
+ {1219, 1, &rule21},
+ {1220, 1, &rule22},
+ {1221, 1, &rule21},
+ {1222, 1, &rule22},
+ {1223, 1, &rule21},
+ {1224, 1, &rule22},
+ {1225, 1, &rule21},
+ {1226, 1, &rule22},
+ {1227, 1, &rule21},
+ {1228, 1, &rule22},
+ {1229, 1, &rule21},
+ {1230, 1, &rule22},
+ {1232, 1, &rule21},
+ {1233, 1, &rule22},
+ {1234, 1, &rule21},
+ {1235, 1, &rule22},
+ {1236, 1, &rule21},
+ {1237, 1, &rule22},
+ {1238, 1, &rule21},
+ {1239, 1, &rule22},
+ {1240, 1, &rule21},
+ {1241, 1, &rule22},
+ {1242, 1, &rule21},
+ {1243, 1, &rule22},
+ {1244, 1, &rule21},
+ {1245, 1, &rule22},
+ {1246, 1, &rule21},
+ {1247, 1, &rule22},
+ {1248, 1, &rule21},
+ {1249, 1, &rule22},
+ {1250, 1, &rule21},
+ {1251, 1, &rule22},
+ {1252, 1, &rule21},
+ {1253, 1, &rule22},
+ {1254, 1, &rule21},
+ {1255, 1, &rule22},
+ {1256, 1, &rule21},
+ {1257, 1, &rule22},
+ {1258, 1, &rule21},
+ {1259, 1, &rule22},
+ {1260, 1, &rule21},
+ {1261, 1, &rule22},
+ {1262, 1, &rule21},
+ {1263, 1, &rule22},
+ {1264, 1, &rule21},
+ {1265, 1, &rule22},
+ {1266, 1, &rule21},
+ {1267, 1, &rule22},
+ {1268, 1, &rule21},
+ {1269, 1, &rule22},
+ {1272, 1, &rule21},
+ {1273, 1, &rule22},
+ {1280, 1, &rule21},
+ {1281, 1, &rule22},
+ {1282, 1, &rule21},
+ {1283, 1, &rule22},
+ {1284, 1, &rule21},
+ {1285, 1, &rule22},
+ {1286, 1, &rule21},
+ {1287, 1, &rule22},
+ {1288, 1, &rule21},
+ {1289, 1, &rule22},
+ {1290, 1, &rule21},
+ {1291, 1, &rule22},
+ {1292, 1, &rule21},
+ {1293, 1, &rule22},
+ {1294, 1, &rule21},
+ {1295, 1, &rule22},
+ {1329, 38, &rule90},
+ {1369, 1, &rule65},
+ {1370, 6, &rule2},
+ {1377, 38, &rule91},
+ {1415, 1, &rule14},
+ {1417, 1, &rule2},
+ {1418, 1, &rule7},
+ {1425, 17, &rule66},
+ {1443, 23, &rule66},
+ {1467, 3, &rule66},
+ {1470, 1, &rule2},
+ {1471, 1, &rule66},
+ {1472, 1, &rule2},
+ {1473, 2, &rule66},
+ {1475, 1, &rule2},
+ {1476, 1, &rule66},
+ {1488, 27, &rule43},
+ {1520, 3, &rule43},
+ {1523, 2, &rule2},
+ {1536, 4, &rule16},
+ {1548, 2, &rule2},
+ {1550, 2, &rule13},
+ {1552, 6, &rule66},
+ {1563, 1, &rule2},
+ {1567, 1, &rule2},
+ {1569, 26, &rule43},
+ {1600, 1, &rule65},
+ {1601, 10, &rule43},
+ {1611, 14, &rule66},
+ {1632, 10, &rule8},
+ {1642, 4, &rule2},
+ {1646, 2, &rule43},
+ {1648, 1, &rule66},
+ {1649, 99, &rule43},
+ {1748, 1, &rule2},
+ {1749, 1, &rule43},
+ {1750, 7, &rule66},
+ {1757, 1, &rule16},
+ {1758, 1, &rule89},
+ {1759, 6, &rule66},
+ {1765, 2, &rule65},
+ {1767, 2, &rule66},
+ {1769, 1, &rule13},
+ {1770, 4, &rule66},
+ {1774, 2, &rule43},
+ {1776, 10, &rule8},
+ {1786, 3, &rule43},
+ {1789, 2, &rule13},
+ {1791, 1, &rule43},
+ {1792, 14, &rule2},
+ {1807, 1, &rule16},
+ {1808, 1, &rule43},
+ {1809, 1, &rule66},
+ {1810, 30, &rule43},
+ {1840, 27, &rule66},
+ {1869, 3, &rule43},
+ {1920, 38, &rule43},
+ {1958, 11, &rule66},
+ {1969, 1, &rule43},
+ {2305, 2, &rule66},
+ {2307, 1, &rule92},
+ {2308, 54, &rule43},
+ {2364, 1, &rule66},
+ {2365, 1, &rule43},
+ {2366, 3, &rule92},
+ {2369, 8, &rule66},
+ {2377, 4, &rule92},
+ {2381, 1, &rule66},
+ {2384, 1, &rule43},
+ {2385, 4, &rule66},
+ {2392, 10, &rule43},
+ {2402, 2, &rule66},
+ {2404, 2, &rule2},
+ {2406, 10, &rule8},
+ {2416, 1, &rule2},
+ {2433, 1, &rule66},
+ {2434, 2, &rule92},
+ {2437, 8, &rule43},
+ {2447, 2, &rule43},
+ {2451, 22, &rule43},
+ {2474, 7, &rule43},
+ {2482, 1, &rule43},
+ {2486, 4, &rule43},
+ {2492, 1, &rule66},
+ {2493, 1, &rule43},
+ {2494, 3, &rule92},
+ {2497, 4, &rule66},
+ {2503, 2, &rule92},
+ {2507, 2, &rule92},
+ {2509, 1, &rule66},
+ {2519, 1, &rule92},
+ {2524, 2, &rule43},
+ {2527, 3, &rule43},
+ {2530, 2, &rule66},
+ {2534, 10, &rule8},
+ {2544, 2, &rule43},
+ {2546, 2, &rule3},
+ {2548, 6, &rule17},
+ {2554, 1, &rule13},
+ {2561, 2, &rule66},
+ {2563, 1, &rule92},
+ {2565, 6, &rule43},
+ {2575, 2, &rule43},
+ {2579, 22, &rule43},
+ {2602, 7, &rule43},
+ {2610, 2, &rule43},
+ {2613, 2, &rule43},
+ {2616, 2, &rule43},
+ {2620, 1, &rule66},
+ {2622, 3, &rule92},
+ {2625, 2, &rule66},
+ {2631, 2, &rule66},
+ {2635, 3, &rule66},
+ {2649, 4, &rule43},
+ {2654, 1, &rule43},
+ {2662, 10, &rule8},
+ {2672, 2, &rule66},
+ {2674, 3, &rule43},
+ {2689, 2, &rule66},
+ {2691, 1, &rule92},
+ {2693, 9, &rule43},
+ {2703, 3, &rule43},
+ {2707, 22, &rule43},
+ {2730, 7, &rule43},
+ {2738, 2, &rule43},
+ {2741, 5, &rule43},
+ {2748, 1, &rule66},
+ {2749, 1, &rule43},
+ {2750, 3, &rule92},
+ {2753, 5, &rule66},
+ {2759, 2, &rule66},
+ {2761, 1, &rule92},
+ {2763, 2, &rule92},
+ {2765, 1, &rule66},
+ {2768, 1, &rule43},
+ {2784, 2, &rule43},
+ {2786, 2, &rule66},
+ {2790, 10, &rule8},
+ {2801, 1, &rule3},
+ {2817, 1, &rule66},
+ {2818, 2, &rule92},
+ {2821, 8, &rule43},
+ {2831, 2, &rule43},
+ {2835, 22, &rule43},
+ {2858, 7, &rule43},
+ {2866, 2, &rule43},
+ {2869, 5, &rule43},
+ {2876, 1, &rule66},
+ {2877, 1, &rule43},
+ {2878, 1, &rule92},
+ {2879, 1, &rule66},
+ {2880, 1, &rule92},
+ {2881, 3, &rule66},
+ {2887, 2, &rule92},
+ {2891, 2, &rule92},
+ {2893, 1, &rule66},
+ {2902, 1, &rule66},
+ {2903, 1, &rule92},
+ {2908, 2, &rule43},
+ {2911, 3, &rule43},
+ {2918, 10, &rule8},
+ {2928, 1, &rule13},
+ {2929, 1, &rule43},
+ {2946, 1, &rule66},
+ {2947, 1, &rule43},
+ {2949, 6, &rule43},
+ {2958, 3, &rule43},
+ {2962, 4, &rule43},
+ {2969, 2, &rule43},
+ {2972, 1, &rule43},
+ {2974, 2, &rule43},
+ {2979, 2, &rule43},
+ {2984, 3, &rule43},
+ {2990, 8, &rule43},
+ {2999, 3, &rule43},
+ {3006, 2, &rule92},
+ {3008, 1, &rule66},
+ {3009, 2, &rule92},
+ {3014, 3, &rule92},
+ {3018, 3, &rule92},
+ {3021, 1, &rule66},
+ {3031, 1, &rule92},
+ {3047, 9, &rule8},
+ {3056, 3, &rule17},
+ {3059, 6, &rule13},
+ {3065, 1, &rule3},
+ {3066, 1, &rule13},
+ {3073, 3, &rule92},
+ {3077, 8, &rule43},
+ {3086, 3, &rule43},
+ {3090, 23, &rule43},
+ {3114, 10, &rule43},
+ {3125, 5, &rule43},
+ {3134, 3, &rule66},
+ {3137, 4, &rule92},
+ {3142, 3, &rule66},
+ {3146, 4, &rule66},
+ {3157, 2, &rule66},
+ {3168, 2, &rule43},
+ {3174, 10, &rule8},
+ {3202, 2, &rule92},
+ {3205, 8, &rule43},
+ {3214, 3, &rule43},
+ {3218, 23, &rule43},
+ {3242, 10, &rule43},
+ {3253, 5, &rule43},
+ {3260, 1, &rule66},
+ {3261, 1, &rule43},
+ {3262, 1, &rule92},
+ {3263, 1, &rule66},
+ {3264, 5, &rule92},
+ {3270, 1, &rule66},
+ {3271, 2, &rule92},
+ {3274, 2, &rule92},
+ {3276, 2, &rule66},
+ {3285, 2, &rule92},
+ {3294, 1, &rule43},
+ {3296, 2, &rule43},
+ {3302, 10, &rule8},
+ {3330, 2, &rule92},
+ {3333, 8, &rule43},
+ {3342, 3, &rule43},
+ {3346, 23, &rule43},
+ {3370, 16, &rule43},
+ {3390, 3, &rule92},
+ {3393, 3, &rule66},
+ {3398, 3, &rule92},
+ {3402, 3, &rule92},
+ {3405, 1, &rule66},
+ {3415, 1, &rule92},
+ {3424, 2, &rule43},
+ {3430, 10, &rule8},
+ {3458, 2, &rule92},
+ {3461, 18, &rule43},
+ {3482, 24, &rule43},
+ {3507, 9, &rule43},
+ {3517, 1, &rule43},
+ {3520, 7, &rule43},
+ {3530, 1, &rule66},
+ {3535, 3, &rule92},
+ {3538, 3, &rule66},
+ {3542, 1, &rule66},
+ {3544, 8, &rule92},
+ {3570, 2, &rule92},
+ {3572, 1, &rule2},
+ {3585, 48, &rule43},
+ {3633, 1, &rule66},
+ {3634, 2, &rule43},
+ {3636, 7, &rule66},
+ {3647, 1, &rule3},
+ {3648, 6, &rule43},
+ {3654, 1, &rule65},
+ {3655, 8, &rule66},
+ {3663, 1, &rule2},
+ {3664, 10, &rule8},
+ {3674, 2, &rule2},
+ {3713, 2, &rule43},
+ {3716, 1, &rule43},
+ {3719, 2, &rule43},
+ {3722, 1, &rule43},
+ {3725, 1, &rule43},
+ {3732, 4, &rule43},
+ {3737, 7, &rule43},
+ {3745, 3, &rule43},
+ {3749, 1, &rule43},
+ {3751, 1, &rule43},
+ {3754, 2, &rule43},
+ {3757, 4, &rule43},
+ {3761, 1, &rule66},
+ {3762, 2, &rule43},
+ {3764, 6, &rule66},
+ {3771, 2, &rule66},
+ {3773, 1, &rule43},
+ {3776, 5, &rule43},
+ {3782, 1, &rule65},
+ {3784, 6, &rule66},
+ {3792, 10, &rule8},
+ {3804, 2, &rule43},
+ {3840, 1, &rule43},
+ {3841, 3, &rule13},
+ {3844, 15, &rule2},
+ {3859, 5, &rule13},
+ {3864, 2, &rule66},
+ {3866, 6, &rule13},
+ {3872, 10, &rule8},
+ {3882, 10, &rule17},
+ {3892, 1, &rule13},
+ {3893, 1, &rule66},
+ {3894, 1, &rule13},
+ {3895, 1, &rule66},
+ {3896, 1, &rule13},
+ {3897, 1, &rule66},
+ {3898, 1, &rule4},
+ {3899, 1, &rule5},
+ {3900, 1, &rule4},
+ {3901, 1, &rule5},
+ {3902, 2, &rule92},
+ {3904, 8, &rule43},
+ {3913, 34, &rule43},
+ {3953, 14, &rule66},
+ {3967, 1, &rule92},
+ {3968, 5, &rule66},
+ {3973, 1, &rule2},
+ {3974, 2, &rule66},
+ {3976, 4, &rule43},
+ {3984, 8, &rule66},
+ {3993, 36, &rule66},
+ {4030, 8, &rule13},
+ {4038, 1, &rule66},
+ {4039, 6, &rule13},
+ {4047, 1, &rule13},
+ {4096, 34, &rule43},
+ {4131, 5, &rule43},
+ {4137, 2, &rule43},
+ {4140, 1, &rule92},
+ {4141, 4, &rule66},
+ {4145, 1, &rule92},
+ {4146, 1, &rule66},
+ {4150, 2, &rule66},
+ {4152, 1, &rule92},
+ {4153, 1, &rule66},
+ {4160, 10, &rule8},
+ {4170, 6, &rule2},
+ {4176, 6, &rule43},
+ {4182, 2, &rule92},
+ {4184, 2, &rule66},
+ {4256, 38, &rule79},
+ {4304, 41, &rule43},
+ {4347, 1, &rule2},
+ {4352, 90, &rule43},
+ {4447, 68, &rule43},
+ {4520, 82, &rule43},
+ {4608, 7, &rule43},
+ {4616, 63, &rule43},
+ {4680, 1, &rule43},
+ {4682, 4, &rule43},
+ {4688, 7, &rule43},
+ {4696, 1, &rule43},
+ {4698, 4, &rule43},
+ {4704, 39, &rule43},
+ {4744, 1, &rule43},
+ {4746, 4, &rule43},
+ {4752, 31, &rule43},
+ {4784, 1, &rule43},
+ {4786, 4, &rule43},
+ {4792, 7, &rule43},
+ {4800, 1, &rule43},
+ {4802, 4, &rule43},
+ {4808, 7, &rule43},
+ {4816, 7, &rule43},
+ {4824, 23, &rule43},
+ {4848, 31, &rule43},
+ {4880, 1, &rule43},
+ {4882, 4, &rule43},
+ {4888, 7, &rule43},
+ {4896, 39, &rule43},
+ {4936, 19, &rule43},
+ {4961, 8, &rule2},
+ {4969, 9, &rule8},
+ {4978, 11, &rule17},
+ {5024, 85, &rule43},
+ {5121, 620, &rule43},
+ {5741, 2, &rule2},
+ {5743, 8, &rule43},
+ {5760, 1, &rule1},
+ {5761, 26, &rule43},
+ {5787, 1, &rule4},
+ {5788, 1, &rule5},
+ {5792, 75, &rule43},
+ {5867, 3, &rule2},
+ {5870, 3, &rule93},
+ {5888, 13, &rule43},
+ {5902, 4, &rule43},
+ {5906, 3, &rule66},
+ {5920, 18, &rule43},
+ {5938, 3, &rule66},
+ {5941, 2, &rule2},
+ {5952, 18, &rule43},
+ {5970, 2, &rule66},
+ {5984, 13, &rule43},
+ {5998, 3, &rule43},
+ {6002, 2, &rule66},
+ {6016, 52, &rule43},
+ {6068, 2, &rule16},
+ {6070, 1, &rule92},
+ {6071, 7, &rule66},
+ {6078, 8, &rule92},
+ {6086, 1, &rule66},
+ {6087, 2, &rule92},
+ {6089, 11, &rule66},
+ {6100, 3, &rule2},
+ {6103, 1, &rule65},
+ {6104, 3, &rule2},
+ {6107, 1, &rule3},
+ {6108, 1, &rule43},
+ {6109, 1, &rule66},
+ {6112, 10, &rule8},
+ {6128, 10, &rule17},
+ {6144, 6, &rule2},
+ {6150, 1, &rule7},
+ {6151, 4, &rule2},
+ {6155, 3, &rule66},
+ {6158, 1, &rule1},
+ {6160, 10, &rule8},
+ {6176, 35, &rule43},
+ {6211, 1, &rule65},
+ {6212, 52, &rule43},
+ {6272, 41, &rule43},
+ {6313, 1, &rule66},
+ {6400, 29, &rule43},
+ {6432, 3, &rule66},
+ {6435, 4, &rule92},
+ {6439, 2, &rule66},
+ {6441, 3, &rule92},
+ {6448, 2, &rule92},
+ {6450, 1, &rule66},
+ {6451, 6, &rule92},
+ {6457, 3, &rule66},
+ {6464, 1, &rule13},
+ {6468, 2, &rule2},
+ {6470, 10, &rule8},
+ {6480, 30, &rule43},
+ {6512, 5, &rule43},
+ {6624, 32, &rule13},
+ {7424, 44, &rule14},
+ {7468, 54, &rule65},
+ {7522, 10, &rule14},
+ {7680, 1, &rule21},
+ {7681, 1, &rule22},
+ {7682, 1, &rule21},
+ {7683, 1, &rule22},
+ {7684, 1, &rule21},
+ {7685, 1, &rule22},
+ {7686, 1, &rule21},
+ {7687, 1, &rule22},
+ {7688, 1, &rule21},
+ {7689, 1, &rule22},
+ {7690, 1, &rule21},
+ {7691, 1, &rule22},
+ {7692, 1, &rule21},
+ {7693, 1, &rule22},
+ {7694, 1, &rule21},
+ {7695, 1, &rule22},
+ {7696, 1, &rule21},
+ {7697, 1, &rule22},
+ {7698, 1, &rule21},
+ {7699, 1, &rule22},
+ {7700, 1, &rule21},
+ {7701, 1, &rule22},
+ {7702, 1, &rule21},
+ {7703, 1, &rule22},
+ {7704, 1, &rule21},
+ {7705, 1, &rule22},
+ {7706, 1, &rule21},
+ {7707, 1, &rule22},
+ {7708, 1, &rule21},
+ {7709, 1, &rule22},
+ {7710, 1, &rule21},
+ {7711, 1, &rule22},
+ {7712, 1, &rule21},
+ {7713, 1, &rule22},
+ {7714, 1, &rule21},
+ {7715, 1, &rule22},
+ {7716, 1, &rule21},
+ {7717, 1, &rule22},
+ {7718, 1, &rule21},
+ {7719, 1, &rule22},
+ {7720, 1, &rule21},
+ {7721, 1, &rule22},
+ {7722, 1, &rule21},
+ {7723, 1, &rule22},
+ {7724, 1, &rule21},
+ {7725, 1, &rule22},
+ {7726, 1, &rule21},
+ {7727, 1, &rule22},
+ {7728, 1, &rule21},
+ {7729, 1, &rule22},
+ {7730, 1, &rule21},
+ {7731, 1, &rule22},
+ {7732, 1, &rule21},
+ {7733, 1, &rule22},
+ {7734, 1, &rule21},
+ {7735, 1, &rule22},
+ {7736, 1, &rule21},
+ {7737, 1, &rule22},
+ {7738, 1, &rule21},
+ {7739, 1, &rule22},
+ {7740, 1, &rule21},
+ {7741, 1, &rule22},
+ {7742, 1, &rule21},
+ {7743, 1, &rule22},
+ {7744, 1, &rule21},
+ {7745, 1, &rule22},
+ {7746, 1, &rule21},
+ {7747, 1, &rule22},
+ {7748, 1, &rule21},
+ {7749, 1, &rule22},
+ {7750, 1, &rule21},
+ {7751, 1, &rule22},
+ {7752, 1, &rule21},
+ {7753, 1, &rule22},
+ {7754, 1, &rule21},
+ {7755, 1, &rule22},
+ {7756, 1, &rule21},
+ {7757, 1, &rule22},
+ {7758, 1, &rule21},
+ {7759, 1, &rule22},
+ {7760, 1, &rule21},
+ {7761, 1, &rule22},
+ {7762, 1, &rule21},
+ {7763, 1, &rule22},
+ {7764, 1, &rule21},
+ {7765, 1, &rule22},
+ {7766, 1, &rule21},
+ {7767, 1, &rule22},
+ {7768, 1, &rule21},
+ {7769, 1, &rule22},
+ {7770, 1, &rule21},
+ {7771, 1, &rule22},
+ {7772, 1, &rule21},
+ {7773, 1, &rule22},
+ {7774, 1, &rule21},
+ {7775, 1, &rule22},
+ {7776, 1, &rule21},
+ {7777, 1, &rule22},
+ {7778, 1, &rule21},
+ {7779, 1, &rule22},
+ {7780, 1, &rule21},
+ {7781, 1, &rule22},
+ {7782, 1, &rule21},
+ {7783, 1, &rule22},
+ {7784, 1, &rule21},
+ {7785, 1, &rule22},
+ {7786, 1, &rule21},
+ {7787, 1, &rule22},
+ {7788, 1, &rule21},
+ {7789, 1, &rule22},
+ {7790, 1, &rule21},
+ {7791, 1, &rule22},
+ {7792, 1, &rule21},
+ {7793, 1, &rule22},
+ {7794, 1, &rule21},
+ {7795, 1, &rule22},
+ {7796, 1, &rule21},
+ {7797, 1, &rule22},
+ {7798, 1, &rule21},
+ {7799, 1, &rule22},
+ {7800, 1, &rule21},
+ {7801, 1, &rule22},
+ {7802, 1, &rule21},
+ {7803, 1, &rule22},
+ {7804, 1, &rule21},
+ {7805, 1, &rule22},
+ {7806, 1, &rule21},
+ {7807, 1, &rule22},
+ {7808, 1, &rule21},
+ {7809, 1, &rule22},
+ {7810, 1, &rule21},
+ {7811, 1, &rule22},
+ {7812, 1, &rule21},
+ {7813, 1, &rule22},
+ {7814, 1, &rule21},
+ {7815, 1, &rule22},
+ {7816, 1, &rule21},
+ {7817, 1, &rule22},
+ {7818, 1, &rule21},
+ {7819, 1, &rule22},
+ {7820, 1, &rule21},
+ {7821, 1, &rule22},
+ {7822, 1, &rule21},
+ {7823, 1, &rule22},
+ {7824, 1, &rule21},
+ {7825, 1, &rule22},
+ {7826, 1, &rule21},
+ {7827, 1, &rule22},
+ {7828, 1, &rule21},
+ {7829, 1, &rule22},
+ {7830, 5, &rule14},
+ {7835, 1, &rule94},
+ {7840, 1, &rule21},
+ {7841, 1, &rule22},
+ {7842, 1, &rule21},
+ {7843, 1, &rule22},
+ {7844, 1, &rule21},
+ {7845, 1, &rule22},
+ {7846, 1, &rule21},
+ {7847, 1, &rule22},
+ {7848, 1, &rule21},
+ {7849, 1, &rule22},
+ {7850, 1, &rule21},
+ {7851, 1, &rule22},
+ {7852, 1, &rule21},
+ {7853, 1, &rule22},
+ {7854, 1, &rule21},
+ {7855, 1, &rule22},
+ {7856, 1, &rule21},
+ {7857, 1, &rule22},
+ {7858, 1, &rule21},
+ {7859, 1, &rule22},
+ {7860, 1, &rule21},
+ {7861, 1, &rule22},
+ {7862, 1, &rule21},
+ {7863, 1, &rule22},
+ {7864, 1, &rule21},
+ {7865, 1, &rule22},
+ {7866, 1, &rule21},
+ {7867, 1, &rule22},
+ {7868, 1, &rule21},
+ {7869, 1, &rule22},
+ {7870, 1, &rule21},
+ {7871, 1, &rule22},
+ {7872, 1, &rule21},
+ {7873, 1, &rule22},
+ {7874, 1, &rule21},
+ {7875, 1, &rule22},
+ {7876, 1, &rule21},
+ {7877, 1, &rule22},
+ {7878, 1, &rule21},
+ {7879, 1, &rule22},
+ {7880, 1, &rule21},
+ {7881, 1, &rule22},
+ {7882, 1, &rule21},
+ {7883, 1, &rule22},
+ {7884, 1, &rule21},
+ {7885, 1, &rule22},
+ {7886, 1, &rule21},
+ {7887, 1, &rule22},
+ {7888, 1, &rule21},
+ {7889, 1, &rule22},
+ {7890, 1, &rule21},
+ {7891, 1, &rule22},
+ {7892, 1, &rule21},
+ {7893, 1, &rule22},
+ {7894, 1, &rule21},
+ {7895, 1, &rule22},
+ {7896, 1, &rule21},
+ {7897, 1, &rule22},
+ {7898, 1, &rule21},
+ {7899, 1, &rule22},
+ {7900, 1, &rule21},
+ {7901, 1, &rule22},
+ {7902, 1, &rule21},
+ {7903, 1, &rule22},
+ {7904, 1, &rule21},
+ {7905, 1, &rule22},
+ {7906, 1, &rule21},
+ {7907, 1, &rule22},
+ {7908, 1, &rule21},
+ {7909, 1, &rule22},
+ {7910, 1, &rule21},
+ {7911, 1, &rule22},
+ {7912, 1, &rule21},
+ {7913, 1, &rule22},
+ {7914, 1, &rule21},
+ {7915, 1, &rule22},
+ {7916, 1, &rule21},
+ {7917, 1, &rule22},
+ {7918, 1, &rule21},
+ {7919, 1, &rule22},
+ {7920, 1, &rule21},
+ {7921, 1, &rule22},
+ {7922, 1, &rule21},
+ {7923, 1, &rule22},
+ {7924, 1, &rule21},
+ {7925, 1, &rule22},
+ {7926, 1, &rule21},
+ {7927, 1, &rule22},
+ {7928, 1, &rule21},
+ {7929, 1, &rule22},
+ {7936, 8, &rule95},
+ {7944, 8, &rule96},
+ {7952, 6, &rule95},
+ {7960, 6, &rule96},
+ {7968, 8, &rule95},
+ {7976, 8, &rule96},
+ {7984, 8, &rule95},
+ {7992, 8, &rule96},
+ {8000, 6, &rule95},
+ {8008, 6, &rule96},
+ {8016, 1, &rule14},
+ {8017, 1, &rule95},
+ {8018, 1, &rule14},
+ {8019, 1, &rule95},
+ {8020, 1, &rule14},
+ {8021, 1, &rule95},
+ {8022, 1, &rule14},
+ {8023, 1, &rule95},
+ {8025, 1, &rule96},
+ {8027, 1, &rule96},
+ {8029, 1, &rule96},
+ {8031, 1, &rule96},
+ {8032, 8, &rule95},
+ {8040, 8, &rule96},
+ {8048, 2, &rule97},
+ {8050, 4, &rule98},
+ {8054, 2, &rule99},
+ {8056, 2, &rule100},
+ {8058, 2, &rule101},
+ {8060, 2, &rule102},
+ {8064, 8, &rule95},
+ {8072, 8, &rule103},
+ {8080, 8, &rule95},
+ {8088, 8, &rule103},
+ {8096, 8, &rule95},
+ {8104, 8, &rule103},
+ {8112, 2, &rule95},
+ {8114, 1, &rule14},
+ {8115, 1, &rule104},
+ {8116, 1, &rule14},
+ {8118, 2, &rule14},
+ {8120, 2, &rule96},
+ {8122, 2, &rule105},
+ {8124, 1, &rule106},
+ {8125, 1, &rule10},
+ {8126, 1, &rule107},
+ {8127, 3, &rule10},
+ {8130, 1, &rule14},
+ {8131, 1, &rule104},
+ {8132, 1, &rule14},
+ {8134, 2, &rule14},
+ {8136, 4, &rule108},
+ {8140, 1, &rule106},
+ {8141, 3, &rule10},
+ {8144, 2, &rule95},
+ {8146, 2, &rule14},
+ {8150, 2, &rule14},
+ {8152, 2, &rule96},
+ {8154, 2, &rule109},
+ {8157, 3, &rule10},
+ {8160, 2, &rule95},
+ {8162, 3, &rule14},
+ {8165, 1, &rule84},
+ {8166, 2, &rule14},
+ {8168, 2, &rule96},
+ {8170, 2, &rule110},
+ {8172, 1, &rule87},
+ {8173, 3, &rule10},
+ {8178, 1, &rule14},
+ {8179, 1, &rule104},
+ {8180, 1, &rule14},
+ {8182, 2, &rule14},
+ {8184, 2, &rule111},
+ {8186, 2, &rule112},
+ {8188, 1, &rule106},
+ {8189, 2, &rule10},
+ {8192, 12, &rule1},
+ {8204, 4, &rule16},
+ {8208, 6, &rule7},
+ {8214, 2, &rule2},
+ {8216, 1, &rule15},
+ {8217, 1, &rule19},
+ {8218, 1, &rule4},
+ {8219, 2, &rule15},
+ {8221, 1, &rule19},
+ {8222, 1, &rule4},
+ {8223, 1, &rule15},
+ {8224, 8, &rule2},
+ {8232, 1, &rule113},
+ {8233, 1, &rule114},
+ {8234, 5, &rule16},
+ {8239, 1, &rule1},
+ {8240, 9, &rule2},
+ {8249, 1, &rule15},
+ {8250, 1, &rule19},
+ {8251, 4, &rule2},
+ {8255, 2, &rule11},
+ {8257, 3, &rule2},
+ {8260, 1, &rule6},
+ {8261, 1, &rule4},
+ {8262, 1, &rule5},
+ {8263, 11, &rule2},
+ {8274, 1, &rule6},
+ {8275, 1, &rule2},
+ {8276, 1, &rule11},
+ {8279, 1, &rule2},
+ {8287, 1, &rule1},
+ {8288, 4, &rule16},
+ {8298, 6, &rule16},
+ {8304, 1, &rule17},
+ {8305, 1, &rule14},
+ {8308, 6, &rule17},
+ {8314, 3, &rule6},
+ {8317, 1, &rule4},
+ {8318, 1, &rule5},
+ {8319, 1, &rule14},
+ {8320, 10, &rule17},
+ {8330, 3, &rule6},
+ {8333, 1, &rule4},
+ {8334, 1, &rule5},
+ {8352, 18, &rule3},
+ {8400, 13, &rule66},
+ {8413, 4, &rule89},
+ {8417, 1, &rule66},
+ {8418, 3, &rule89},
+ {8421, 6, &rule66},
+ {8448, 2, &rule13},
+ {8450, 1, &rule79},
+ {8451, 4, &rule13},
+ {8455, 1, &rule79},
+ {8456, 2, &rule13},
+ {8458, 1, &rule14},
+ {8459, 3, &rule79},
+ {8462, 2, &rule14},
+ {8464, 3, &rule79},
+ {8467, 1, &rule14},
+ {8468, 1, &rule13},
+ {8469, 1, &rule79},
+ {8470, 3, &rule13},
+ {8473, 5, &rule79},
+ {8478, 6, &rule13},
+ {8484, 1, &rule79},
+ {8485, 1, &rule13},
+ {8486, 1, &rule115},
+ {8487, 1, &rule13},
+ {8488, 1, &rule79},
+ {8489, 1, &rule13},
+ {8490, 1, &rule116},
+ {8491, 1, &rule117},
+ {8492, 2, &rule79},
+ {8494, 1, &rule13},
+ {8495, 1, &rule14},
+ {8496, 2, &rule79},
+ {8498, 1, &rule13},
+ {8499, 1, &rule79},
+ {8500, 1, &rule14},
+ {8501, 4, &rule43},
+ {8505, 1, &rule14},
+ {8506, 2, &rule13},
+ {8509, 1, &rule14},
+ {8510, 2, &rule79},
+ {8512, 5, &rule6},
+ {8517, 1, &rule79},
+ {8518, 4, &rule14},
+ {8522, 1, &rule13},
+ {8523, 1, &rule6},
+ {8531, 13, &rule17},
+ {8544, 16, &rule118},
+ {8560, 16, &rule119},
+ {8576, 4, &rule93},
+ {8592, 5, &rule6},
+ {8597, 5, &rule13},
+ {8602, 2, &rule6},
+ {8604, 4, &rule13},
+ {8608, 1, &rule6},
+ {8609, 2, &rule13},
+ {8611, 1, &rule6},
+ {8612, 2, &rule13},
+ {8614, 1, &rule6},
+ {8615, 7, &rule13},
+ {8622, 1, &rule6},
+ {8623, 31, &rule13},
+ {8654, 2, &rule6},
+ {8656, 2, &rule13},
+ {8658, 1, &rule6},
+ {8659, 1, &rule13},
+ {8660, 1, &rule6},
+ {8661, 31, &rule13},
+ {8692, 268, &rule6},
+ {8960, 8, &rule13},
+ {8968, 4, &rule6},
+ {8972, 20, &rule13},
+ {8992, 2, &rule6},
+ {8994, 7, &rule13},
+ {9001, 1, &rule4},
+ {9002, 1, &rule5},
+ {9003, 81, &rule13},
+ {9084, 1, &rule6},
+ {9085, 30, &rule13},
+ {9115, 25, &rule6},
+ {9140, 1, &rule4},
+ {9141, 1, &rule5},
+ {9142, 1, &rule2},
+ {9143, 26, &rule13},
+ {9216, 39, &rule13},
+ {9280, 11, &rule13},
+ {9312, 60, &rule17},
+ {9372, 26, &rule13},
+ {9398, 26, &rule120},
+ {9424, 26, &rule121},
+ {9450, 22, &rule17},
+ {9472, 183, &rule13},
+ {9655, 1, &rule6},
+ {9656, 9, &rule13},
+ {9665, 1, &rule6},
+ {9666, 54, &rule13},
+ {9720, 8, &rule6},
+ {9728, 24, &rule13},
+ {9753, 86, &rule13},
+ {9839, 1, &rule6},
+ {9840, 14, &rule13},
+ {9856, 18, &rule13},
+ {9888, 2, &rule13},
+ {9985, 4, &rule13},
+ {9990, 4, &rule13},
+ {9996, 28, &rule13},
+ {10025, 35, &rule13},
+ {10061, 1, &rule13},
+ {10063, 4, &rule13},
+ {10070, 1, &rule13},
+ {10072, 7, &rule13},
+ {10081, 7, &rule13},
+ {10088, 1, &rule4},
+ {10089, 1, &rule5},
+ {10090, 1, &rule4},
+ {10091, 1, &rule5},
+ {10092, 1, &rule4},
+ {10093, 1, &rule5},
+ {10094, 1, &rule4},
+ {10095, 1, &rule5},
+ {10096, 1, &rule4},
+ {10097, 1, &rule5},
+ {10098, 1, &rule4},
+ {10099, 1, &rule5},
+ {10100, 1, &rule4},
+ {10101, 1, &rule5},
+ {10102, 30, &rule17},
+ {10132, 1, &rule13},
+ {10136, 24, &rule13},
+ {10161, 14, &rule13},
+ {10192, 22, &rule6},
+ {10214, 1, &rule4},
+ {10215, 1, &rule5},
+ {10216, 1, &rule4},
+ {10217, 1, &rule5},
+ {10218, 1, &rule4},
+ {10219, 1, &rule5},
+ {10224, 16, &rule6},
+ {10240, 256, &rule13},
+ {10496, 131, &rule6},
+ {10627, 1, &rule4},
+ {10628, 1, &rule5},
+ {10629, 1, &rule4},
+ {10630, 1, &rule5},
+ {10631, 1, &rule4},
+ {10632, 1, &rule5},
+ {10633, 1, &rule4},
+ {10634, 1, &rule5},
+ {10635, 1, &rule4},
+ {10636, 1, &rule5},
+ {10637, 1, &rule4},
+ {10638, 1, &rule5},
+ {10639, 1, &rule4},
+ {10640, 1, &rule5},
+ {10641, 1, &rule4},
+ {10642, 1, &rule5},
+ {10643, 1, &rule4},
+ {10644, 1, &rule5},
+ {10645, 1, &rule4},
+ {10646, 1, &rule5},
+ {10647, 1, &rule4},
+ {10648, 1, &rule5},
+ {10649, 63, &rule6},
+ {10712, 1, &rule4},
+ {10713, 1, &rule5},
+ {10714, 1, &rule4},
+ {10715, 1, &rule5},
+ {10716, 32, &rule6},
+ {10748, 1, &rule4},
+ {10749, 1, &rule5},
+ {10750, 258, &rule6},
+ {11008, 14, &rule13},
+ {11904, 26, &rule13},
+ {11931, 89, &rule13},
+ {12032, 214, &rule13},
+ {12272, 12, &rule13},
+ {12288, 1, &rule1},
+ {12289, 3, &rule2},
+ {12292, 1, &rule13},
+ {12293, 1, &rule65},
+ {12294, 1, &rule43},
+ {12295, 1, &rule93},
+ {12296, 1, &rule4},
+ {12297, 1, &rule5},
+ {12298, 1, &rule4},
+ {12299, 1, &rule5},
+ {12300, 1, &rule4},
+ {12301, 1, &rule5},
+ {12302, 1, &rule4},
+ {12303, 1, &rule5},
+ {12304, 1, &rule4},
+ {12305, 1, &rule5},
+ {12306, 2, &rule13},
+ {12308, 1, &rule4},
+ {12309, 1, &rule5},
+ {12310, 1, &rule4},
+ {12311, 1, &rule5},
+ {12312, 1, &rule4},
+ {12313, 1, &rule5},
+ {12314, 1, &rule4},
+ {12315, 1, &rule5},
+ {12316, 1, &rule7},
+ {12317, 1, &rule4},
+ {12318, 2, &rule5},
+ {12320, 1, &rule13},
+ {12321, 9, &rule93},
+ {12330, 6, &rule66},
+ {12336, 1, &rule7},
+ {12337, 5, &rule65},
+ {12342, 2, &rule13},
+ {12344, 3, &rule93},
+ {12347, 1, &rule65},
+ {12348, 1, &rule43},
+ {12349, 1, &rule2},
+ {12350, 2, &rule13},
+ {12353, 86, &rule43},
+ {12441, 2, &rule66},
+ {12443, 2, &rule10},
+ {12445, 2, &rule65},
+ {12447, 1, &rule43},
+ {12448, 1, &rule7},
+ {12449, 90, &rule43},
+ {12539, 1, &rule11},
+ {12540, 3, &rule65},
+ {12543, 1, &rule43},
+ {12549, 40, &rule43},
+ {12593, 94, &rule43},
+ {12688, 2, &rule13},
+ {12690, 4, &rule17},
+ {12694, 10, &rule13},
+ {12704, 24, &rule43},
+ {12784, 16, &rule43},
+ {12800, 31, &rule13},
+ {12832, 10, &rule17},
+ {12842, 26, &rule13},
+ {12880, 1, &rule13},
+ {12881, 15, &rule17},
+ {12896, 30, &rule13},
+ {12927, 1, &rule13},
+ {12928, 10, &rule17},
+ {12938, 39, &rule13},
+ {12977, 15, &rule17},
+ {12992, 63, &rule13},
+ {13056, 256, &rule13},
+ {13312, 6582, &rule43},
+ {19904, 64, &rule13},
+ {19968, 20902, &rule43},
+ {40960, 1165, &rule43},
+ {42128, 55, &rule13},
+ {44032, 11172, &rule43},
+ {55296, 896, &rule122},
+ {56192, 128, &rule122},
+ {56320, 1024, &rule122},
+ {57344, 6400, &rule123},
+ {63744, 302, &rule43},
+ {64048, 59, &rule43},
+ {64256, 7, &rule14},
+ {64275, 5, &rule14},
+ {64285, 1, &rule43},
+ {64286, 1, &rule66},
+ {64287, 10, &rule43},
+ {64297, 1, &rule6},
+ {64298, 13, &rule43},
+ {64312, 5, &rule43},
+ {64318, 1, &rule43},
+ {64320, 2, &rule43},
+ {64323, 2, &rule43},
+ {64326, 108, &rule43},
+ {64467, 363, &rule43},
+ {64830, 1, &rule4},
+ {64831, 1, &rule5},
+ {64848, 64, &rule43},
+ {64914, 54, &rule43},
+ {65008, 12, &rule43},
+ {65020, 1, &rule3},
+ {65021, 1, &rule13},
+ {65024, 16, &rule66},
+ {65056, 4, &rule66},
+ {65072, 1, &rule2},
+ {65073, 2, &rule7},
+ {65075, 2, &rule11},
+ {65077, 1, &rule4},
+ {65078, 1, &rule5},
+ {65079, 1, &rule4},
+ {65080, 1, &rule5},
+ {65081, 1, &rule4},
+ {65082, 1, &rule5},
+ {65083, 1, &rule4},
+ {65084, 1, &rule5},
+ {65085, 1, &rule4},
+ {65086, 1, &rule5},
+ {65087, 1, &rule4},
+ {65088, 1, &rule5},
+ {65089, 1, &rule4},
+ {65090, 1, &rule5},
+ {65091, 1, &rule4},
+ {65092, 1, &rule5},
+ {65093, 2, &rule2},
+ {65095, 1, &rule4},
+ {65096, 1, &rule5},
+ {65097, 4, &rule2},
+ {65101, 3, &rule11},
+ {65104, 3, &rule2},
+ {65108, 4, &rule2},
+ {65112, 1, &rule7},
+ {65113, 1, &rule4},
+ {65114, 1, &rule5},
+ {65115, 1, &rule4},
+ {65116, 1, &rule5},
+ {65117, 1, &rule4},
+ {65118, 1, &rule5},
+ {65119, 3, &rule2},
+ {65122, 1, &rule6},
+ {65123, 1, &rule7},
+ {65124, 3, &rule6},
+ {65128, 1, &rule2},
+ {65129, 1, &rule3},
+ {65130, 2, &rule2},
+ {65136, 5, &rule43},
+ {65142, 135, &rule43},
+ {65279, 1, &rule16},
+ {65281, 3, &rule2},
+ {65284, 1, &rule3},
+ {65285, 3, &rule2},
+ {65288, 1, &rule4},
+ {65289, 1, &rule5},
+ {65290, 1, &rule2},
+ {65291, 1, &rule6},
+ {65292, 1, &rule2},
+ {65293, 1, &rule7},
+ {65294, 2, &rule2},
+ {65296, 10, &rule8},
+ {65306, 2, &rule2},
+ {65308, 3, &rule6},
+ {65311, 2, &rule2},
+ {65313, 26, &rule9},
+ {65339, 1, &rule4},
+ {65340, 1, &rule2},
+ {65341, 1, &rule5},
+ {65342, 1, &rule10},
+ {65343, 1, &rule11},
+ {65344, 1, &rule10},
+ {65345, 26, &rule12},
+ {65371, 1, &rule4},
+ {65372, 1, &rule6},
+ {65373, 1, &rule5},
+ {65374, 1, &rule6},
+ {65375, 1, &rule4},
+ {65376, 1, &rule5},
+ {65377, 1, &rule2},
+ {65378, 1, &rule4},
+ {65379, 1, &rule5},
+ {65380, 1, &rule2},
+ {65381, 1, &rule11},
+ {65382, 10, &rule43},
+ {65392, 1, &rule65},
+ {65393, 45, &rule43},
+ {65438, 2, &rule65},
+ {65440, 31, &rule43},
+ {65474, 6, &rule43},
+ {65482, 6, &rule43},
+ {65490, 6, &rule43},
+ {65498, 3, &rule43},
+ {65504, 2, &rule3},
+ {65506, 1, &rule6},
+ {65507, 1, &rule10},
+ {65508, 1, &rule13},
+ {65509, 2, &rule3},
+ {65512, 1, &rule13},
+ {65513, 4, &rule6},
+ {65517, 2, &rule13},
+ {65529, 3, &rule16},
+ {65532, 2, &rule13},
+ {65536, 12, &rule43},
+ {65549, 26, &rule43},
+ {65576, 19, &rule43},
+ {65596, 2, &rule43},
+ {65599, 15, &rule43},
+ {65616, 14, &rule43},
+ {65664, 123, &rule43},
+ {65792, 2, &rule2},
+ {65794, 1, &rule13},
+ {65799, 45, &rule17},
+ {65847, 9, &rule13},
+ {66304, 31, &rule43},
+ {66336, 4, &rule17},
+ {66352, 26, &rule43},
+ {66378, 1, &rule93},
+ {66432, 30, &rule43},
+ {66463, 1, &rule2},
+ {66560, 40, &rule124},
+ {66600, 40, &rule125},
+ {66640, 78, &rule43},
+ {66720, 10, &rule8},
+ {67584, 6, &rule43},
+ {67592, 1, &rule43},
+ {67594, 44, &rule43},
+ {67639, 2, &rule43},
+ {67644, 1, &rule43},
+ {67647, 1, &rule43},
+ {118784, 246, &rule13},
+ {119040, 39, &rule13},
+ {119082, 59, &rule13},
+ {119141, 2, &rule92},
+ {119143, 3, &rule66},
+ {119146, 3, &rule13},
+ {119149, 6, &rule92},
+ {119155, 8, &rule16},
+ {119163, 8, &rule66},
+ {119171, 2, &rule13},
+ {119173, 7, &rule66},
+ {119180, 30, &rule13},
+ {119210, 4, &rule66},
+ {119214, 48, &rule13},
+ {119552, 87, &rule13},
+ {119808, 26, &rule79},
+ {119834, 26, &rule14},
+ {119860, 26, &rule79},
+ {119886, 7, &rule14},
+ {119894, 18, &rule14},
+ {119912, 26, &rule79},
+ {119938, 26, &rule14},
+ {119964, 1, &rule79},
+ {119966, 2, &rule79},
+ {119970, 1, &rule79},
+ {119973, 2, &rule79},
+ {119977, 4, &rule79},
+ {119982, 8, &rule79},
+ {119990, 4, &rule14},
+ {119995, 1, &rule14},
+ {119997, 7, &rule14},
+ {120005, 11, &rule14},
+ {120016, 26, &rule79},
+ {120042, 26, &rule14},
+ {120068, 2, &rule79},
+ {120071, 4, &rule79},
+ {120077, 8, &rule79},
+ {120086, 7, &rule79},
+ {120094, 26, &rule14},
+ {120120, 2, &rule79},
+ {120123, 4, &rule79},
+ {120128, 5, &rule79},
+ {120134, 1, &rule79},
+ {120138, 7, &rule79},
+ {120146, 26, &rule14},
+ {120172, 26, &rule79},
+ {120198, 26, &rule14},
+ {120224, 26, &rule79},
+ {120250, 26, &rule14},
+ {120276, 26, &rule79},
+ {120302, 26, &rule14},
+ {120328, 26, &rule79},
+ {120354, 26, &rule14},
+ {120380, 26, &rule79},
+ {120406, 26, &rule14},
+ {120432, 26, &rule79},
+ {120458, 26, &rule14},
+ {120488, 25, &rule79},
+ {120513, 1, &rule6},
+ {120514, 25, &rule14},
+ {120539, 1, &rule6},
+ {120540, 6, &rule14},
+ {120546, 25, &rule79},
+ {120571, 1, &rule6},
+ {120572, 25, &rule14},
+ {120597, 1, &rule6},
+ {120598, 6, &rule14},
+ {120604, 25, &rule79},
+ {120629, 1, &rule6},
+ {120630, 25, &rule14},
+ {120655, 1, &rule6},
+ {120656, 6, &rule14},
+ {120662, 25, &rule79},
+ {120687, 1, &rule6},
+ {120688, 25, &rule14},
+ {120713, 1, &rule6},
+ {120714, 6, &rule14},
+ {120720, 25, &rule79},
+ {120745, 1, &rule6},
+ {120746, 25, &rule14},
+ {120771, 1, &rule6},
+ {120772, 6, &rule14},
+ {120782, 50, &rule8},
+ {131072, 42711, &rule43},
+ {194560, 542, &rule43},
+ {917505, 1, &rule16},
+ {917536, 96, &rule16},
+ {917760, 240, &rule66},
+ {983040, 65534, &rule123},
+ {1048576, 65534, &rule123}
+};
+static const struct _charblock_ convchars[]={
+ {65, 26, &rule9},
+ {97, 26, &rule12},
+ {181, 1, &rule18},
+ {192, 23, &rule9},
+ {216, 7, &rule9},
+ {224, 23, &rule12},
+ {248, 7, &rule12},
+ {255, 1, &rule20},
+ {256, 1, &rule21},
+ {257, 1, &rule22},
+ {258, 1, &rule21},
+ {259, 1, &rule22},
+ {260, 1, &rule21},
+ {261, 1, &rule22},
+ {262, 1, &rule21},
+ {263, 1, &rule22},
+ {264, 1, &rule21},
+ {265, 1, &rule22},
+ {266, 1, &rule21},
+ {267, 1, &rule22},
+ {268, 1, &rule21},
+ {269, 1, &rule22},
+ {270, 1, &rule21},
+ {271, 1, &rule22},
+ {272, 1, &rule21},
+ {273, 1, &rule22},
+ {274, 1, &rule21},
+ {275, 1, &rule22},
+ {276, 1, &rule21},
+ {277, 1, &rule22},
+ {278, 1, &rule21},
+ {279, 1, &rule22},
+ {280, 1, &rule21},
+ {281, 1, &rule22},
+ {282, 1, &rule21},
+ {283, 1, &rule22},
+ {284, 1, &rule21},
+ {285, 1, &rule22},
+ {286, 1, &rule21},
+ {287, 1, &rule22},
+ {288, 1, &rule21},
+ {289, 1, &rule22},
+ {290, 1, &rule21},
+ {291, 1, &rule22},
+ {292, 1, &rule21},
+ {293, 1, &rule22},
+ {294, 1, &rule21},
+ {295, 1, &rule22},
+ {296, 1, &rule21},
+ {297, 1, &rule22},
+ {298, 1, &rule21},
+ {299, 1, &rule22},
+ {300, 1, &rule21},
+ {301, 1, &rule22},
+ {302, 1, &rule21},
+ {303, 1, &rule22},
+ {304, 1, &rule23},
+ {305, 1, &rule24},
+ {306, 1, &rule21},
+ {307, 1, &rule22},
+ {308, 1, &rule21},
+ {309, 1, &rule22},
+ {310, 1, &rule21},
+ {311, 1, &rule22},
+ {313, 1, &rule21},
+ {314, 1, &rule22},
+ {315, 1, &rule21},
+ {316, 1, &rule22},
+ {317, 1, &rule21},
+ {318, 1, &rule22},
+ {319, 1, &rule21},
+ {320, 1, &rule22},
+ {321, 1, &rule21},
+ {322, 1, &rule22},
+ {323, 1, &rule21},
+ {324, 1, &rule22},
+ {325, 1, &rule21},
+ {326, 1, &rule22},
+ {327, 1, &rule21},
+ {328, 1, &rule22},
+ {330, 1, &rule21},
+ {331, 1, &rule22},
+ {332, 1, &rule21},
+ {333, 1, &rule22},
+ {334, 1, &rule21},
+ {335, 1, &rule22},
+ {336, 1, &rule21},
+ {337, 1, &rule22},
+ {338, 1, &rule21},
+ {339, 1, &rule22},
+ {340, 1, &rule21},
+ {341, 1, &rule22},
+ {342, 1, &rule21},
+ {343, 1, &rule22},
+ {344, 1, &rule21},
+ {345, 1, &rule22},
+ {346, 1, &rule21},
+ {347, 1, &rule22},
+ {348, 1, &rule21},
+ {349, 1, &rule22},
+ {350, 1, &rule21},
+ {351, 1, &rule22},
+ {352, 1, &rule21},
+ {353, 1, &rule22},
+ {354, 1, &rule21},
+ {355, 1, &rule22},
+ {356, 1, &rule21},
+ {357, 1, &rule22},
+ {358, 1, &rule21},
+ {359, 1, &rule22},
+ {360, 1, &rule21},
+ {361, 1, &rule22},
+ {362, 1, &rule21},
+ {363, 1, &rule22},
+ {364, 1, &rule21},
+ {365, 1, &rule22},
+ {366, 1, &rule21},
+ {367, 1, &rule22},
+ {368, 1, &rule21},
+ {369, 1, &rule22},
+ {370, 1, &rule21},
+ {371, 1, &rule22},
+ {372, 1, &rule21},
+ {373, 1, &rule22},
+ {374, 1, &rule21},
+ {375, 1, &rule22},
+ {376, 1, &rule25},
+ {377, 1, &rule21},
+ {378, 1, &rule22},
+ {379, 1, &rule21},
+ {380, 1, &rule22},
+ {381, 1, &rule21},
+ {382, 1, &rule22},
+ {383, 1, &rule26},
+ {385, 1, &rule27},
+ {386, 1, &rule21},
+ {387, 1, &rule22},
+ {388, 1, &rule21},
+ {389, 1, &rule22},
+ {390, 1, &rule28},
+ {391, 1, &rule21},
+ {392, 1, &rule22},
+ {393, 2, &rule29},
+ {395, 1, &rule21},
+ {396, 1, &rule22},
+ {398, 1, &rule30},
+ {399, 1, &rule31},
+ {400, 1, &rule32},
+ {401, 1, &rule21},
+ {402, 1, &rule22},
+ {403, 1, &rule29},
+ {404, 1, &rule33},
+ {405, 1, &rule34},
+ {406, 1, &rule35},
+ {407, 1, &rule36},
+ {408, 1, &rule21},
+ {409, 1, &rule22},
+ {412, 1, &rule35},
+ {413, 1, &rule37},
+ {414, 1, &rule38},
+ {415, 1, &rule39},
+ {416, 1, &rule21},
+ {417, 1, &rule22},
+ {418, 1, &rule21},
+ {419, 1, &rule22},
+ {420, 1, &rule21},
+ {421, 1, &rule22},
+ {422, 1, &rule40},
+ {423, 1, &rule21},
+ {424, 1, &rule22},
+ {425, 1, &rule40},
+ {428, 1, &rule21},
+ {429, 1, &rule22},
+ {430, 1, &rule40},
+ {431, 1, &rule21},
+ {432, 1, &rule22},
+ {433, 2, &rule41},
+ {435, 1, &rule21},
+ {436, 1, &rule22},
+ {437, 1, &rule21},
+ {438, 1, &rule22},
+ {439, 1, &rule42},
+ {440, 1, &rule21},
+ {441, 1, &rule22},
+ {444, 1, &rule21},
+ {445, 1, &rule22},
+ {447, 1, &rule44},
+ {452, 1, &rule45},
+ {453, 1, &rule46},
+ {454, 1, &rule47},
+ {455, 1, &rule45},
+ {456, 1, &rule46},
+ {457, 1, &rule47},
+ {458, 1, &rule45},
+ {459, 1, &rule46},
+ {460, 1, &rule47},
+ {461, 1, &rule21},
+ {462, 1, &rule22},
+ {463, 1, &rule21},
+ {464, 1, &rule22},
+ {465, 1, &rule21},
+ {466, 1, &rule22},
+ {467, 1, &rule21},
+ {468, 1, &rule22},
+ {469, 1, &rule21},
+ {470, 1, &rule22},
+ {471, 1, &rule21},
+ {472, 1, &rule22},
+ {473, 1, &rule21},
+ {474, 1, &rule22},
+ {475, 1, &rule21},
+ {476, 1, &rule22},
+ {477, 1, &rule48},
+ {478, 1, &rule21},
+ {479, 1, &rule22},
+ {480, 1, &rule21},
+ {481, 1, &rule22},
+ {482, 1, &rule21},
+ {483, 1, &rule22},
+ {484, 1, &rule21},
+ {485, 1, &rule22},
+ {486, 1, &rule21},
+ {487, 1, &rule22},
+ {488, 1, &rule21},
+ {489, 1, &rule22},
+ {490, 1, &rule21},
+ {491, 1, &rule22},
+ {492, 1, &rule21},
+ {493, 1, &rule22},
+ {494, 1, &rule21},
+ {495, 1, &rule22},
+ {497, 1, &rule45},
+ {498, 1, &rule46},
+ {499, 1, &rule47},
+ {500, 1, &rule21},
+ {501, 1, &rule22},
+ {502, 1, &rule49},
+ {503, 1, &rule50},
+ {504, 1, &rule21},
+ {505, 1, &rule22},
+ {506, 1, &rule21},
+ {507, 1, &rule22},
+ {508, 1, &rule21},
+ {509, 1, &rule22},
+ {510, 1, &rule21},
+ {511, 1, &rule22},
+ {512, 1, &rule21},
+ {513, 1, &rule22},
+ {514, 1, &rule21},
+ {515, 1, &rule22},
+ {516, 1, &rule21},
+ {517, 1, &rule22},
+ {518, 1, &rule21},
+ {519, 1, &rule22},
+ {520, 1, &rule21},
+ {521, 1, &rule22},
+ {522, 1, &rule21},
+ {523, 1, &rule22},
+ {524, 1, &rule21},
+ {525, 1, &rule22},
+ {526, 1, &rule21},
+ {527, 1, &rule22},
+ {528, 1, &rule21},
+ {529, 1, &rule22},
+ {530, 1, &rule21},
+ {531, 1, &rule22},
+ {532, 1, &rule21},
+ {533, 1, &rule22},
+ {534, 1, &rule21},
+ {535, 1, &rule22},
+ {536, 1, &rule21},
+ {537, 1, &rule22},
+ {538, 1, &rule21},
+ {539, 1, &rule22},
+ {540, 1, &rule21},
+ {541, 1, &rule22},
+ {542, 1, &rule21},
+ {543, 1, &rule22},
+ {544, 1, &rule51},
+ {546, 1, &rule21},
+ {547, 1, &rule22},
+ {548, 1, &rule21},
+ {549, 1, &rule22},
+ {550, 1, &rule21},
+ {551, 1, &rule22},
+ {552, 1, &rule21},
+ {553, 1, &rule22},
+ {554, 1, &rule21},
+ {555, 1, &rule22},
+ {556, 1, &rule21},
+ {557, 1, &rule22},
+ {558, 1, &rule21},
+ {559, 1, &rule22},
+ {560, 1, &rule21},
+ {561, 1, &rule22},
+ {562, 1, &rule21},
+ {563, 1, &rule22},
+ {595, 1, &rule52},
+ {596, 1, &rule53},
+ {598, 2, &rule54},
+ {601, 1, &rule55},
+ {603, 1, &rule56},
+ {608, 1, &rule54},
+ {611, 1, &rule57},
+ {616, 1, &rule58},
+ {617, 1, &rule59},
+ {623, 1, &rule59},
+ {626, 1, &rule60},
+ {629, 1, &rule61},
+ {640, 1, &rule62},
+ {643, 1, &rule62},
+ {648, 1, &rule62},
+ {650, 2, &rule63},
+ {658, 1, &rule64},
+ {837, 1, &rule67},
+ {902, 1, &rule68},
+ {904, 3, &rule69},
+ {908, 1, &rule70},
+ {910, 2, &rule71},
+ {913, 17, &rule9},
+ {931, 9, &rule9},
+ {940, 1, &rule72},
+ {941, 3, &rule73},
+ {945, 17, &rule12},
+ {962, 1, &rule74},
+ {963, 9, &rule12},
+ {972, 1, &rule75},
+ {973, 2, &rule76},
+ {976, 1, &rule77},
+ {977, 1, &rule78},
+ {981, 1, &rule80},
+ {982, 1, &rule81},
+ {984, 1, &rule21},
+ {985, 1, &rule22},
+ {986, 1, &rule21},
+ {987, 1, &rule22},
+ {988, 1, &rule21},
+ {989, 1, &rule22},
+ {990, 1, &rule21},
+ {991, 1, &rule22},
+ {992, 1, &rule21},
+ {993, 1, &rule22},
+ {994, 1, &rule21},
+ {995, 1, &rule22},
+ {996, 1, &rule21},
+ {997, 1, &rule22},
+ {998, 1, &rule21},
+ {999, 1, &rule22},
+ {1000, 1, &rule21},
+ {1001, 1, &rule22},
+ {1002, 1, &rule21},
+ {1003, 1, &rule22},
+ {1004, 1, &rule21},
+ {1005, 1, &rule22},
+ {1006, 1, &rule21},
+ {1007, 1, &rule22},
+ {1008, 1, &rule82},
+ {1009, 1, &rule83},
+ {1010, 1, &rule84},
+ {1012, 1, &rule85},
+ {1013, 1, &rule86},
+ {1015, 1, &rule21},
+ {1016, 1, &rule22},
+ {1017, 1, &rule87},
+ {1018, 1, &rule21},
+ {1019, 1, &rule22},
+ {1024, 16, &rule88},
+ {1040, 32, &rule9},
+ {1072, 32, &rule12},
+ {1104, 16, &rule83},
+ {1120, 1, &rule21},
+ {1121, 1, &rule22},
+ {1122, 1, &rule21},
+ {1123, 1, &rule22},
+ {1124, 1, &rule21},
+ {1125, 1, &rule22},
+ {1126, 1, &rule21},
+ {1127, 1, &rule22},
+ {1128, 1, &rule21},
+ {1129, 1, &rule22},
+ {1130, 1, &rule21},
+ {1131, 1, &rule22},
+ {1132, 1, &rule21},
+ {1133, 1, &rule22},
+ {1134, 1, &rule21},
+ {1135, 1, &rule22},
+ {1136, 1, &rule21},
+ {1137, 1, &rule22},
+ {1138, 1, &rule21},
+ {1139, 1, &rule22},
+ {1140, 1, &rule21},
+ {1141, 1, &rule22},
+ {1142, 1, &rule21},
+ {1143, 1, &rule22},
+ {1144, 1, &rule21},
+ {1145, 1, &rule22},
+ {1146, 1, &rule21},
+ {1147, 1, &rule22},
+ {1148, 1, &rule21},
+ {1149, 1, &rule22},
+ {1150, 1, &rule21},
+ {1151, 1, &rule22},
+ {1152, 1, &rule21},
+ {1153, 1, &rule22},
+ {1162, 1, &rule21},
+ {1163, 1, &rule22},
+ {1164, 1, &rule21},
+ {1165, 1, &rule22},
+ {1166, 1, &rule21},
+ {1167, 1, &rule22},
+ {1168, 1, &rule21},
+ {1169, 1, &rule22},
+ {1170, 1, &rule21},
+ {1171, 1, &rule22},
+ {1172, 1, &rule21},
+ {1173, 1, &rule22},
+ {1174, 1, &rule21},
+ {1175, 1, &rule22},
+ {1176, 1, &rule21},
+ {1177, 1, &rule22},
+ {1178, 1, &rule21},
+ {1179, 1, &rule22},
+ {1180, 1, &rule21},
+ {1181, 1, &rule22},
+ {1182, 1, &rule21},
+ {1183, 1, &rule22},
+ {1184, 1, &rule21},
+ {1185, 1, &rule22},
+ {1186, 1, &rule21},
+ {1187, 1, &rule22},
+ {1188, 1, &rule21},
+ {1189, 1, &rule22},
+ {1190, 1, &rule21},
+ {1191, 1, &rule22},
+ {1192, 1, &rule21},
+ {1193, 1, &rule22},
+ {1194, 1, &rule21},
+ {1195, 1, &rule22},
+ {1196, 1, &rule21},
+ {1197, 1, &rule22},
+ {1198, 1, &rule21},
+ {1199, 1, &rule22},
+ {1200, 1, &rule21},
+ {1201, 1, &rule22},
+ {1202, 1, &rule21},
+ {1203, 1, &rule22},
+ {1204, 1, &rule21},
+ {1205, 1, &rule22},
+ {1206, 1, &rule21},
+ {1207, 1, &rule22},
+ {1208, 1, &rule21},
+ {1209, 1, &rule22},
+ {1210, 1, &rule21},
+ {1211, 1, &rule22},
+ {1212, 1, &rule21},
+ {1213, 1, &rule22},
+ {1214, 1, &rule21},
+ {1215, 1, &rule22},
+ {1217, 1, &rule21},
+ {1218, 1, &rule22},
+ {1219, 1, &rule21},
+ {1220, 1, &rule22},
+ {1221, 1, &rule21},
+ {1222, 1, &rule22},
+ {1223, 1, &rule21},
+ {1224, 1, &rule22},
+ {1225, 1, &rule21},
+ {1226, 1, &rule22},
+ {1227, 1, &rule21},
+ {1228, 1, &rule22},
+ {1229, 1, &rule21},
+ {1230, 1, &rule22},
+ {1232, 1, &rule21},
+ {1233, 1, &rule22},
+ {1234, 1, &rule21},
+ {1235, 1, &rule22},
+ {1236, 1, &rule21},
+ {1237, 1, &rule22},
+ {1238, 1, &rule21},
+ {1239, 1, &rule22},
+ {1240, 1, &rule21},
+ {1241, 1, &rule22},
+ {1242, 1, &rule21},
+ {1243, 1, &rule22},
+ {1244, 1, &rule21},
+ {1245, 1, &rule22},
+ {1246, 1, &rule21},
+ {1247, 1, &rule22},
+ {1248, 1, &rule21},
+ {1249, 1, &rule22},
+ {1250, 1, &rule21},
+ {1251, 1, &rule22},
+ {1252, 1, &rule21},
+ {1253, 1, &rule22},
+ {1254, 1, &rule21},
+ {1255, 1, &rule22},
+ {1256, 1, &rule21},
+ {1257, 1, &rule22},
+ {1258, 1, &rule21},
+ {1259, 1, &rule22},
+ {1260, 1, &rule21},
+ {1261, 1, &rule22},
+ {1262, 1, &rule21},
+ {1263, 1, &rule22},
+ {1264, 1, &rule21},
+ {1265, 1, &rule22},
+ {1266, 1, &rule21},
+ {1267, 1, &rule22},
+ {1268, 1, &rule21},
+ {1269, 1, &rule22},
+ {1272, 1, &rule21},
+ {1273, 1, &rule22},
+ {1280, 1, &rule21},
+ {1281, 1, &rule22},
+ {1282, 1, &rule21},
+ {1283, 1, &rule22},
+ {1284, 1, &rule21},
+ {1285, 1, &rule22},
+ {1286, 1, &rule21},
+ {1287, 1, &rule22},
+ {1288, 1, &rule21},
+ {1289, 1, &rule22},
+ {1290, 1, &rule21},
+ {1291, 1, &rule22},
+ {1292, 1, &rule21},
+ {1293, 1, &rule22},
+ {1294, 1, &rule21},
+ {1295, 1, &rule22},
+ {1329, 38, &rule90},
+ {1377, 38, &rule91},
+ {7680, 1, &rule21},
+ {7681, 1, &rule22},
+ {7682, 1, &rule21},
+ {7683, 1, &rule22},
+ {7684, 1, &rule21},
+ {7685, 1, &rule22},
+ {7686, 1, &rule21},
+ {7687, 1, &rule22},
+ {7688, 1, &rule21},
+ {7689, 1, &rule22},
+ {7690, 1, &rule21},
+ {7691, 1, &rule22},
+ {7692, 1, &rule21},
+ {7693, 1, &rule22},
+ {7694, 1, &rule21},
+ {7695, 1, &rule22},
+ {7696, 1, &rule21},
+ {7697, 1, &rule22},
+ {7698, 1, &rule21},
+ {7699, 1, &rule22},
+ {7700, 1, &rule21},
+ {7701, 1, &rule22},
+ {7702, 1, &rule21},
+ {7703, 1, &rule22},
+ {7704, 1, &rule21},
+ {7705, 1, &rule22},
+ {7706, 1, &rule21},
+ {7707, 1, &rule22},
+ {7708, 1, &rule21},
+ {7709, 1, &rule22},
+ {7710, 1, &rule21},
+ {7711, 1, &rule22},
+ {7712, 1, &rule21},
+ {7713, 1, &rule22},
+ {7714, 1, &rule21},
+ {7715, 1, &rule22},
+ {7716, 1, &rule21},
+ {7717, 1, &rule22},
+ {7718, 1, &rule21},
+ {7719, 1, &rule22},
+ {7720, 1, &rule21},
+ {7721, 1, &rule22},
+ {7722, 1, &rule21},
+ {7723, 1, &rule22},
+ {7724, 1, &rule21},
+ {7725, 1, &rule22},
+ {7726, 1, &rule21},
+ {7727, 1, &rule22},
+ {7728, 1, &rule21},
+ {7729, 1, &rule22},
+ {7730, 1, &rule21},
+ {7731, 1, &rule22},
+ {7732, 1, &rule21},
+ {7733, 1, &rule22},
+ {7734, 1, &rule21},
+ {7735, 1, &rule22},
+ {7736, 1, &rule21},
+ {7737, 1, &rule22},
+ {7738, 1, &rule21},
+ {7739, 1, &rule22},
+ {7740, 1, &rule21},
+ {7741, 1, &rule22},
+ {7742, 1, &rule21},
+ {7743, 1, &rule22},
+ {7744, 1, &rule21},
+ {7745, 1, &rule22},
+ {7746, 1, &rule21},
+ {7747, 1, &rule22},
+ {7748, 1, &rule21},
+ {7749, 1, &rule22},
+ {7750, 1, &rule21},
+ {7751, 1, &rule22},
+ {7752, 1, &rule21},
+ {7753, 1, &rule22},
+ {7754, 1, &rule21},
+ {7755, 1, &rule22},
+ {7756, 1, &rule21},
+ {7757, 1, &rule22},
+ {7758, 1, &rule21},
+ {7759, 1, &rule22},
+ {7760, 1, &rule21},
+ {7761, 1, &rule22},
+ {7762, 1, &rule21},
+ {7763, 1, &rule22},
+ {7764, 1, &rule21},
+ {7765, 1, &rule22},
+ {7766, 1, &rule21},
+ {7767, 1, &rule22},
+ {7768, 1, &rule21},
+ {7769, 1, &rule22},
+ {7770, 1, &rule21},
+ {7771, 1, &rule22},
+ {7772, 1, &rule21},
+ {7773, 1, &rule22},
+ {7774, 1, &rule21},
+ {7775, 1, &rule22},
+ {7776, 1, &rule21},
+ {7777, 1, &rule22},
+ {7778, 1, &rule21},
+ {7779, 1, &rule22},
+ {7780, 1, &rule21},
+ {7781, 1, &rule22},
+ {7782, 1, &rule21},
+ {7783, 1, &rule22},
+ {7784, 1, &rule21},
+ {7785, 1, &rule22},
+ {7786, 1, &rule21},
+ {7787, 1, &rule22},
+ {7788, 1, &rule21},
+ {7789, 1, &rule22},
+ {7790, 1, &rule21},
+ {7791, 1, &rule22},
+ {7792, 1, &rule21},
+ {7793, 1, &rule22},
+ {7794, 1, &rule21},
+ {7795, 1, &rule22},
+ {7796, 1, &rule21},
+ {7797, 1, &rule22},
+ {7798, 1, &rule21},
+ {7799, 1, &rule22},
+ {7800, 1, &rule21},
+ {7801, 1, &rule22},
+ {7802, 1, &rule21},
+ {7803, 1, &rule22},
+ {7804, 1, &rule21},
+ {7805, 1, &rule22},
+ {7806, 1, &rule21},
+ {7807, 1, &rule22},
+ {7808, 1, &rule21},
+ {7809, 1, &rule22},
+ {7810, 1, &rule21},
+ {7811, 1, &rule22},
+ {7812, 1, &rule21},
+ {7813, 1, &rule22},
+ {7814, 1, &rule21},
+ {7815, 1, &rule22},
+ {7816, 1, &rule21},
+ {7817, 1, &rule22},
+ {7818, 1, &rule21},
+ {7819, 1, &rule22},
+ {7820, 1, &rule21},
+ {7821, 1, &rule22},
+ {7822, 1, &rule21},
+ {7823, 1, &rule22},
+ {7824, 1, &rule21},
+ {7825, 1, &rule22},
+ {7826, 1, &rule21},
+ {7827, 1, &rule22},
+ {7828, 1, &rule21},
+ {7829, 1, &rule22},
+ {7835, 1, &rule94},
+ {7840, 1, &rule21},
+ {7841, 1, &rule22},
+ {7842, 1, &rule21},
+ {7843, 1, &rule22},
+ {7844, 1, &rule21},
+ {7845, 1, &rule22},
+ {7846, 1, &rule21},
+ {7847, 1, &rule22},
+ {7848, 1, &rule21},
+ {7849, 1, &rule22},
+ {7850, 1, &rule21},
+ {7851, 1, &rule22},
+ {7852, 1, &rule21},
+ {7853, 1, &rule22},
+ {7854, 1, &rule21},
+ {7855, 1, &rule22},
+ {7856, 1, &rule21},
+ {7857, 1, &rule22},
+ {7858, 1, &rule21},
+ {7859, 1, &rule22},
+ {7860, 1, &rule21},
+ {7861, 1, &rule22},
+ {7862, 1, &rule21},
+ {7863, 1, &rule22},
+ {7864, 1, &rule21},
+ {7865, 1, &rule22},
+ {7866, 1, &rule21},
+ {7867, 1, &rule22},
+ {7868, 1, &rule21},
+ {7869, 1, &rule22},
+ {7870, 1, &rule21},
+ {7871, 1, &rule22},
+ {7872, 1, &rule21},
+ {7873, 1, &rule22},
+ {7874, 1, &rule21},
+ {7875, 1, &rule22},
+ {7876, 1, &rule21},
+ {7877, 1, &rule22},
+ {7878, 1, &rule21},
+ {7879, 1, &rule22},
+ {7880, 1, &rule21},
+ {7881, 1, &rule22},
+ {7882, 1, &rule21},
+ {7883, 1, &rule22},
+ {7884, 1, &rule21},
+ {7885, 1, &rule22},
+ {7886, 1, &rule21},
+ {7887, 1, &rule22},
+ {7888, 1, &rule21},
+ {7889, 1, &rule22},
+ {7890, 1, &rule21},
+ {7891, 1, &rule22},
+ {7892, 1, &rule21},
+ {7893, 1, &rule22},
+ {7894, 1, &rule21},
+ {7895, 1, &rule22},
+ {7896, 1, &rule21},
+ {7897, 1, &rule22},
+ {7898, 1, &rule21},
+ {7899, 1, &rule22},
+ {7900, 1, &rule21},
+ {7901, 1, &rule22},
+ {7902, 1, &rule21},
+ {7903, 1, &rule22},
+ {7904, 1, &rule21},
+ {7905, 1, &rule22},
+ {7906, 1, &rule21},
+ {7907, 1, &rule22},
+ {7908, 1, &rule21},
+ {7909, 1, &rule22},
+ {7910, 1, &rule21},
+ {7911, 1, &rule22},
+ {7912, 1, &rule21},
+ {7913, 1, &rule22},
+ {7914, 1, &rule21},
+ {7915, 1, &rule22},
+ {7916, 1, &rule21},
+ {7917, 1, &rule22},
+ {7918, 1, &rule21},
+ {7919, 1, &rule22},
+ {7920, 1, &rule21},
+ {7921, 1, &rule22},
+ {7922, 1, &rule21},
+ {7923, 1, &rule22},
+ {7924, 1, &rule21},
+ {7925, 1, &rule22},
+ {7926, 1, &rule21},
+ {7927, 1, &rule22},
+ {7928, 1, &rule21},
+ {7929, 1, &rule22},
+ {7936, 8, &rule95},
+ {7944, 8, &rule96},
+ {7952, 6, &rule95},
+ {7960, 6, &rule96},
+ {7968, 8, &rule95},
+ {7976, 8, &rule96},
+ {7984, 8, &rule95},
+ {7992, 8, &rule96},
+ {8000, 6, &rule95},
+ {8008, 6, &rule96},
+ {8017, 1, &rule95},
+ {8019, 1, &rule95},
+ {8021, 1, &rule95},
+ {8023, 1, &rule95},
+ {8025, 1, &rule96},
+ {8027, 1, &rule96},
+ {8029, 1, &rule96},
+ {8031, 1, &rule96},
+ {8032, 8, &rule95},
+ {8040, 8, &rule96},
+ {8048, 2, &rule97},
+ {8050, 4, &rule98},
+ {8054, 2, &rule99},
+ {8056, 2, &rule100},
+ {8058, 2, &rule101},
+ {8060, 2, &rule102},
+ {8064, 8, &rule95},
+ {8072, 8, &rule103},
+ {8080, 8, &rule95},
+ {8088, 8, &rule103},
+ {8096, 8, &rule95},
+ {8104, 8, &rule103},
+ {8112, 2, &rule95},
+ {8115, 1, &rule104},
+ {8120, 2, &rule96},
+ {8122, 2, &rule105},
+ {8124, 1, &rule106},
+ {8126, 1, &rule107},
+ {8131, 1, &rule104},
+ {8136, 4, &rule108},
+ {8140, 1, &rule106},
+ {8144, 2, &rule95},
+ {8152, 2, &rule96},
+ {8154, 2, &rule109},
+ {8160, 2, &rule95},
+ {8165, 1, &rule84},
+ {8168, 2, &rule96},
+ {8170, 2, &rule110},
+ {8172, 1, &rule87},
+ {8179, 1, &rule104},
+ {8184, 2, &rule111},
+ {8186, 2, &rule112},
+ {8188, 1, &rule106},
+ {8486, 1, &rule115},
+ {8490, 1, &rule116},
+ {8491, 1, &rule117},
+ {8544, 16, &rule118},
+ {8560, 16, &rule119},
+ {9398, 26, &rule120},
+ {9424, 26, &rule121},
+ {65313, 26, &rule9},
+ {65345, 26, &rule12},
+ {66560, 40, &rule124},
+ {66600, 40, &rule125}
+};
+static const struct _charblock_ spacechars[]={
+ {32, 1, &rule1},
+ {160, 1, &rule1},
+ {5760, 1, &rule1},
+ {6158, 1, &rule1},
+ {8192, 12, &rule1},
+ {8239, 1, &rule1},
+ {8287, 1, &rule1},
+ {12288, 1, &rule1}
+};
+
+/*
+ Obtain the reference to character rule by doing
+ binary search over the specified array of blocks.
+ To make checkattr shorter, the address of
+ nullrule is returned if the search fails:
+ this rule defines no category and no conversion
+ distances. The compare function returns 0 when
+ key->start is within the block. Otherwise
+ result of comparison of key->start and start of the
+ current block is returned as usual.
+*/
+
+static const struct _convrule_ nullrule={0,NUMCAT_CN,0,0,0,0};
+
+int blkcmp(const void *vk,const void *vb)
+{
+ const struct _charblock_ *key,*cur;
+ key=vk;
+ cur=vb;
+ if((key->start>=cur->start)&&(key->start<(cur->start+cur->length)))
+ {
+ return 0;
+ }
+ if(key->start>cur->start) return 1;
+ return -1;
+}
+
+static const struct _convrule_ *getrule(
+ const struct _charblock_ *blocks,
+ int numblocks,
+ int unichar)
+{
+ struct _charblock_ key={unichar,1,(void *)0};
+ struct _charblock_ *cb=bsearch(&key,blocks,numblocks,sizeof(key),blkcmp);
+ if(cb==(void *)0) return &nullrule;
+ return cb->rule;
+}
+
+
+
+/*
+ Check whether a character (internal code) has certain attributes.
+ Attributes (category flags) may be ORed. The function ANDs
+ character category flags and the mask and returns the result.
+ If the character belongs to one of the categories requested,
+ the result will be nonzero.
+*/
+
+inline static int checkattr(int c,unsigned int catmask)
+{
+ return (catmask & (getrule(allchars,(c<256)?NUM_LAT1BLOCKS:NUM_BLOCKS,c)->category));
+}
+
+inline static int checkattr_s(int c,unsigned int catmask)
+{
+ return (catmask & (getrule(spacechars,NUM_SPACEBLOCKS,c)->category));
+}
+
+/*
+ Define predicate functions for some combinations of categories.
+*/
+
+#define unipred(p,m) \
+int p(int c) \
+{ \
+ return checkattr(c,m); \
+}
+
+#define unipred_s(p,m) \
+int p(int c) \
+{ \
+ return checkattr_s(c,m); \
+}
+
+/*
+ Make these rules as close to Hugs as possible.
+*/
+
+unipred(u_iswcntrl,GENCAT_CC)
+unipred(u_iswprint,~(GENCAT_ZL|GENCAT_ZP|GENCAT_CC|GENCAT_CF|GENCAT_CS|GENCAT_CO))
+unipred_s(u_iswspace,GENCAT_ZS)
+unipred(u_iswupper,(GENCAT_LU|GENCAT_LT))
+unipred(u_iswlower,GENCAT_LL)
+unipred(u_iswalpha,(GENCAT_LL|GENCAT_LU|GENCAT_LT|GENCAT_LM|GENCAT_LO))
+unipred(u_iswdigit,GENCAT_ND)
+
+unipred(u_iswalnum,(GENCAT_LT|GENCAT_LU|GENCAT_LL|GENCAT_LM|GENCAT_LO|
+ GENCAT_MC|GENCAT_ME|GENCAT_MN|
+ GENCAT_NO|GENCAT_ND|GENCAT_NL))
+
+#define caseconv(p,to) \
+int p(int c) \
+{ \
+ const struct _convrule_ *rule=getrule(convchars,NUM_CONVBLOCKS,c);\
+ if(rule==&nullrule) return c;\
+ return c+rule->to;\
+}
+
+caseconv(u_towupper,updist)
+caseconv(u_towlower,lowdist)
+caseconv(u_towtitle,titledist)
+
+int u_gencat(int c)
+{
+ return getrule(allchars,NUM_BLOCKS,c)->catnumber;
+}
+