[Pcre-svn] [1019] code/trunk: Basic "script run" implementat…

Page principale
Supprimer ce message
Auteur: Subversion repository
Date:  
À: pcre-svn
Sujet: [Pcre-svn] [1019] code/trunk: Basic "script run" implementation.
Revision: 1019
          http://www.exim.org/viewvc/pcre2?view=rev&revision=1019
Author:   ph10
Date:     2018-10-02 16:25:58 +0100 (Tue, 02 Oct 2018)
Log Message:
-----------
Basic "script run" implementation. Not yet complete, and not yet documented.


Modified Paths:
--------------
    code/trunk/ChangeLog
    code/trunk/Makefile.am
    code/trunk/NON-AUTOTOOLS-BUILD
    code/trunk/README
    code/trunk/doc/html/NON-AUTOTOOLS-BUILD.txt
    code/trunk/doc/html/README.txt
    code/trunk/maint/GenerateUtt.py
    code/trunk/maint/MultiStage2.py
    code/trunk/maint/ucptest.c
    code/trunk/perltest.sh
    code/trunk/src/pcre2.h.in
    code/trunk/src/pcre2_auto_possess.c
    code/trunk/src/pcre2_compile.c
    code/trunk/src/pcre2_dfa_match.c
    code/trunk/src/pcre2_error.c
    code/trunk/src/pcre2_internal.h
    code/trunk/src/pcre2_match.c
    code/trunk/src/pcre2_printint.c
    code/trunk/src/pcre2_study.c
    code/trunk/src/pcre2_tables.c
    code/trunk/src/pcre2_ucd.c
    code/trunk/src/pcre2_ucp.h
    code/trunk/testdata/testinput12
    code/trunk/testdata/testinput4
    code/trunk/testdata/testinput5
    code/trunk/testdata/testoutput12-16
    code/trunk/testdata/testoutput12-32
    code/trunk/testdata/testoutput4
    code/trunk/testdata/testoutput5


Added Paths:
-----------
    code/trunk/src/pcre2_script_run.c


Modified: code/trunk/ChangeLog
===================================================================
--- code/trunk/ChangeLog    2018-09-24 16:23:53 UTC (rev 1018)
+++ code/trunk/ChangeLog    2018-10-02 15:25:58 UTC (rev 1019)
@@ -30,7 +30,11 @@
 hexadecimal digit" bit was removed. The default tables in
 src/pcre2_chartables.c.dist are updated.


+8. Implement the new Perl "script run" features (*script_run:...) and
+(*atomic_script_run:...) aka (*sr:...) and (*asr:...). At present, this is
+incomplete and not yet documented.

+
Version 10.32 10-September-2018
-------------------------------


Modified: code/trunk/Makefile.am
===================================================================
--- code/trunk/Makefile.am    2018-09-24 16:23:53 UTC (rev 1018)
+++ code/trunk/Makefile.am    2018-10-02 15:25:58 UTC (rev 1019)
@@ -364,6 +364,7 @@
   src/pcre2_newline.c \
   src/pcre2_ord2utf.c \
   src/pcre2_pattern_info.c \
+  src/pcre2_script_run.c \
   src/pcre2_serialize.c \
   src/pcre2_string_utils.c \
   src/pcre2_study.c \


Modified: code/trunk/NON-AUTOTOOLS-BUILD
===================================================================
--- code/trunk/NON-AUTOTOOLS-BUILD    2018-09-24 16:23:53 UTC (rev 1018)
+++ code/trunk/NON-AUTOTOOLS-BUILD    2018-10-02 15:25:58 UTC (rev 1019)
@@ -104,6 +104,7 @@
        pcre2_newline.c
        pcre2_ord2utf.c
        pcre2_pattern_info.c
+       pcre2_script_run.c 
        pcre2_serialize.c
        pcre2_string_utils.c
        pcre2_study.c


Modified: code/trunk/README
===================================================================
--- code/trunk/README    2018-09-24 16:23:53 UTC (rev 1018)
+++ code/trunk/README    2018-10-02 15:25:58 UTC (rev 1019)
@@ -788,6 +788,7 @@
   src/pcre2_newline.c      )
   src/pcre2_ord2utf.c      )
   src/pcre2_pattern_info.c )
+  src/pcre2_script_run.c   ) 
   src/pcre2_serialize.c    )
   src/pcre2_string_utils.c )
   src/pcre2_study.c        )


Modified: code/trunk/doc/html/NON-AUTOTOOLS-BUILD.txt
===================================================================
--- code/trunk/doc/html/NON-AUTOTOOLS-BUILD.txt    2018-09-24 16:23:53 UTC (rev 1018)
+++ code/trunk/doc/html/NON-AUTOTOOLS-BUILD.txt    2018-10-02 15:25:58 UTC (rev 1019)
@@ -104,6 +104,7 @@
        pcre2_newline.c
        pcre2_ord2utf.c
        pcre2_pattern_info.c
+       pcre2_script_run.c 
        pcre2_serialize.c
        pcre2_string_utils.c
        pcre2_study.c


Modified: code/trunk/doc/html/README.txt
===================================================================
--- code/trunk/doc/html/README.txt    2018-09-24 16:23:53 UTC (rev 1018)
+++ code/trunk/doc/html/README.txt    2018-10-02 15:25:58 UTC (rev 1019)
@@ -788,6 +788,7 @@
   src/pcre2_newline.c      )
   src/pcre2_ord2utf.c      )
   src/pcre2_pattern_info.c )
+  src/pcre2_script_run.c   ) 
   src/pcre2_serialize.c    )
   src/pcre2_string_utils.c )
   src/pcre2_study.c        )


Modified: code/trunk/maint/GenerateUtt.py
===================================================================
--- code/trunk/maint/GenerateUtt.py    2018-09-24 16:23:53 UTC (rev 1018)
+++ code/trunk/maint/GenerateUtt.py    2018-10-02 15:25:58 UTC (rev 1019)
@@ -25,8 +25,9 @@
 # Added script names for Unicode 8.0.0, 19-June-2015.
 # Added script names for Unicode 10.0.0, 02-July-2017.
 # Added script names for Unicode 11.0.0, 03-July-2018.
+# Added 'Unknown' script, 01-October-2018.


-script_names = ['Arabic', 'Armenian', 'Bengali', 'Bopomofo', 'Braille', 'Buginese', 'Buhid', 'Canadian_Aboriginal', \
+script_names = ['Unknown', 'Arabic', 'Armenian', 'Bengali', 'Bopomofo', 'Braille', 'Buginese', 'Buhid', 'Canadian_Aboriginal', \
'Cherokee', 'Common', 'Coptic', 'Cypriot', 'Cyrillic', 'Deseret', 'Devanagari', 'Ethiopic', 'Georgian', \
'Glagolitic', 'Gothic', 'Greek', 'Gujarati', 'Gurmukhi', 'Han', 'Hangul', 'Hanunoo', 'Hebrew', 'Hiragana', \
'Inherited', 'Kannada', 'Katakana', 'Kharoshthi', 'Khmer', 'Lao', 'Latin', 'Limbu', 'Linear_B', 'Malayalam', \

Modified: code/trunk/maint/MultiStage2.py
===================================================================
--- code/trunk/maint/MultiStage2.py    2018-09-24 16:23:53 UTC (rev 1018)
+++ code/trunk/maint/MultiStage2.py    2018-10-02 15:25:58 UTC (rev 1019)
@@ -143,6 +143,7 @@
 # 03-July-2018:      Updated for Unicode 11.0.0
 # 07-July-2018:      Added code to scan emoji-data.txt for the Extended
 #                      Pictographic property.
+# 01-October-2018:   Added the 'Unknown' script name
 ##############################################################################



@@ -300,7 +301,7 @@
         slice_type, slice_size = get_type_size(record_slice)
         size = (size + slice_size - 1) & -slice_size


-        structure += '} ucd_record;\n*/\n\n'
+        structure += '} ucd_record;\n*/\n'
         return size, structure


 def test_record_size():
@@ -329,7 +330,7 @@
                 print(('  {' + '%6d, ' * len(record[0]) + '}, /* %3d */') % (record[0] + (i,)))
         print('};\n')


-script_names = ['Arabic', 'Armenian', 'Bengali', 'Bopomofo', 'Braille', 'Buginese', 'Buhid', 'Canadian_Aboriginal', \
+script_names = ['Unknown', 'Arabic', 'Armenian', 'Bengali', 'Bopomofo', 'Braille', 'Buginese', 'Buhid', 'Canadian_Aboriginal', \
'Cherokee', 'Common', 'Coptic', 'Cypriot', 'Cyrillic', 'Deseret', 'Devanagari', 'Ethiopic', 'Georgian', \
'Glagolitic', 'Gothic', 'Greek', 'Gujarati', 'Gurmukhi', 'Han', 'Hangul', 'Hanunoo', 'Hebrew', 'Hiragana', \
'Inherited', 'Kannada', 'Katakana', 'Kharoshthi', 'Khmer', 'Lao', 'Latin', 'Limbu', 'Linear_B', 'Malayalam', \
@@ -380,7 +381,7 @@
test_record_size()
unicode_version = ""

-script = read_table('Unicode.tables/Scripts.txt', make_get_names(script_names), script_names.index('Common'))
+script = read_table('Unicode.tables/Scripts.txt', make_get_names(script_names), script_names.index('Unknown'))
 category = read_table('Unicode.tables/DerivedGeneralCategory.txt', make_get_names(category_names), category_names.index('Cn'))
 break_props = read_table('Unicode.tables/GraphemeBreakProperty.txt', make_get_names(break_property_names), break_property_names.index('Other'))
 other_case = read_table('Unicode.tables/CaseFolding.txt', get_other_case, 0)
@@ -553,11 +554,11 @@
 print()
 print("#if PCRE2_CODE_UNIT_WIDTH == 32")
 print("const ucd_record PRIV(dummy_ucd_record)[] = {{")
-print("  ucp_Common,    /* script */")
-print("  ucp_Cn,        /* type unassigned */")
-print("  ucp_gbOther,   /* grapheme break property */")
-print("  0,             /* case set */")
-print("  0,             /* other case */")
+print("  ucp_Unknown,    /* script */")
+print("  ucp_Cn,         /* type unassigned */")
+print("  ucp_gbOther,    /* grapheme break property */")
+print("  0,              /* case set */")
+print("  0,              /* other case */")
 print("  }};")
 print("#endif")
 print()
@@ -565,6 +566,9 @@


# --- Added by PH: output the table of caseless character sets ---

+print("/* This table contains lists of characters that are caseless sets of")
+print("more than one character. Each list is terminated by NOTACHAR. */\n")
+
print("const uint32_t PRIV(ucd_caseless_sets)[] = {")
print(" NOTACHAR,")
for s in sets:
@@ -577,10 +581,53 @@

# ------

-print("/* When #included in pcre2test, we don't need this large table. */")
+print("/* When #included in pcre2test, we don't need the table of digit")
+print("sets, nor the the large main UCD tables. */")
 print()
 print("#ifndef PCRE2_PCRE2TEST")
 print()
+
+# --- Added by PH: read Scripts.txt again for the sets of 10 digits. ---
+
+digitsets = []
+file = open('Unicode.tables/Scripts.txt', 'r', encoding='utf-8')
+
+for line in file:
+  m = re.match(r'([0-9a-fA-F]+)\.\.([0-9a-fA-F]+)\s+;\s+\S+\s+#\s+Nd\s+', line)
+  if m is None:
+    continue
+  first = int(m.group(1),16)   
+  last  = int(m.group(2),16)   
+  if ((last - first + 1) % 10) != 0:
+    print("ERROR: %04x..%04x does not contain a multiple of 10 characters" % (first, last),
+      file=sys.stderr) 
+  while first < last:
+    digitsets.append(first + 9)
+    first += 10
+file.close()
+digitsets.sort()
+
+print("/* This table lists the code points for the '9' characters in each")
+print("set of decimal digits. It is used to ensure that all the digits in")
+print("a script run come from the same set. */")
+print()
+print("const uint32_t PRIV(ucd_digit_sets)[] = {")
+
+print("  %d,  /* Number of subsequent values */" % len(digitsets), end='')
+count = 8
+for d in digitsets:
+  if count == 8:
+    print("\n ", end='')
+    count = 0
+  print(" 0x%05x," % d, end='')
+  count += 1
+print("\n};")
+print()
+
+# Output the main UCD tables.
+
+print("/* These are the main two-stage UCD tables. */\n")
+
 print_records(records, record_size)
 print_table(min_stage1, 'PRIV(ucd_stage1)')
 print_table(min_stage2, 'PRIV(ucd_stage2)', min_block_size)
@@ -591,6 +638,10 @@
 print()
 print("#endif  /* PCRE2_PCRE2TEST */")


+
+# This code was part of the original contribution, but is commented out as it
+# was never used. A two-stage table has sufficed.
+
"""

# Three-stage tables:

Modified: code/trunk/maint/ucptest.c
===================================================================
--- code/trunk/maint/ucptest.c    2018-09-24 16:23:53 UTC (rev 1018)
+++ code/trunk/maint/ucptest.c    2018-10-02 15:25:58 UTC (rev 1019)
@@ -134,6 +134,7 @@


 switch(script)
   {
+  case ucp_Unknown:     scriptname = US"Unknown"; break; 
   case ucp_Arabic:      scriptname = US"Arabic"; break;
   case ucp_Armenian:    scriptname = US"Armenian"; break;
   case ucp_Balinese:    scriptname = US"Balinese"; break;


Modified: code/trunk/perltest.sh
===================================================================
--- code/trunk/perltest.sh    2018-09-24 16:23:53 UTC (rev 1018)
+++ code/trunk/perltest.sh    2018-10-02 15:25:58 UTC (rev 1019)
@@ -1,8 +1,10 @@
 #! /bin/sh


# Script for testing regular expressions with perl to check that PCRE2 handles
-# them the same. If the first argument to this script is "-w", Perl is also
-# called with "-w", which turns on its warning mode.
+# them the same. For testing with different versions of Perl, if the first
+# argument is -perl then the second is taken as the Perl command to use, and
+# both are then removed. If the next argument is "-w", Perl is called with
+# "-w", which turns on its warning mode.
#
# The Perl code has to have "use utf8" and "require Encode" at the start when
# running UTF-8 tests, but *not* for non-utf8 tests. (The "require" would
@@ -10,8 +12,8 @@
# the script will always run for these tests.)
#
# The desired effect is achieved by making this a shell script that passes the
-# Perl script to Perl through a pipe. If the first argument (possibly after
-# removing "-w") is "-utf8", a suitable prefix is set up.
+# Perl script to Perl through a pipe. If the next argument is "-utf8", a
+# suitable prefix is set up.
#
# The remaining arguments, if any, are passed to Perl. They are an input file
# and an output file. If there is one argument, the output is written to
@@ -23,6 +25,12 @@
perlarg=''
prefix=''

+if [ $# -gt 1 -a "$1" = "-perl" ] ; then
+  shift
+  perl=$1
+  shift
+fi     
+
 if [ $# -gt 0 -a "$1" = "-w" ] ; then
   perlarg="-w"
   shift
@@ -78,6 +86,7 @@
 # The alpha assertions currently give warnings even when -w is not specified.


no warnings "experimental::alpha_assertions";
+no warnings "experimental::script_run";

# Function for turning a string into a string of printing chars.


Modified: code/trunk/src/pcre2.h.in
===================================================================
--- code/trunk/src/pcre2.h.in    2018-09-24 16:23:53 UTC (rev 1018)
+++ code/trunk/src/pcre2.h.in    2018-10-02 15:25:58 UTC (rev 1019)
@@ -321,6 +321,7 @@
 #define PCRE2_ERROR_SUPPORTED_ONLY_IN_UNICODE      193
 #define PCRE2_ERROR_INVALID_HYPHEN_IN_OPTIONS      194
 #define PCRE2_ERROR_ALPHA_ASSERTION_UNKNOWN        195
+#define PCRE2_ERROR_SCRIPT_RUN_NOT_AVAILABLE       196



/* "Expected" matching error codes: no match and partial match. */

Modified: code/trunk/src/pcre2_auto_possess.c
===================================================================
--- code/trunk/src/pcre2_auto_possess.c    2018-09-24 16:23:53 UTC (rev 1018)
+++ code/trunk/src/pcre2_auto_possess.c    2018-10-02 15:25:58 UTC (rev 1019)
@@ -604,6 +604,15 @@
       case OP_SCBRAPOS:
       if (cb->had_recurse) return FALSE;
       break;
+      
+      /* A script run might have to backtrack if the iterated item can match
+      characters from more than one script. So give up unless repeating an 
+      explicit character. */
+      
+      case OP_SCRIPT_RUN:
+      if (base_list[0] != OP_CHAR && base_list[0] != OP_CHARI)
+        return FALSE; 
+      break;   


       /* Atomic sub-patterns and assertions can always auto-possessify their
       last iterator. However, if the group was entered as a result of checking
@@ -614,7 +623,6 @@
       case OP_ASSERTBACK:
       case OP_ASSERTBACK_NOT:
       case OP_ONCE:
-
       return !entered_a_group;
       }



Modified: code/trunk/src/pcre2_compile.c
===================================================================
--- code/trunk/src/pcre2_compile.c    2018-09-24 16:23:53 UTC (rev 1018)
+++ code/trunk/src/pcre2_compile.c    2018-10-02 15:25:58 UTC (rev 1019)
@@ -240,49 +240,57 @@
 #define META_RANGE_LITERAL    0x801f0000u  /* range defined literally */
 #define META_RECURSE          0x80200000u  /* Recursion */
 #define META_RECURSE_BYNAME   0x80210000u  /* (?&name) */
+#define META_SCRIPT_RUN       0x80220000u  /* (*script_run:...) */


/* These must be kept together to make it easy to check that an assertion
is present where expected in a conditional group. */

-#define META_LOOKAHEAD        0x80220000u  /* (?= */
-#define META_LOOKAHEADNOT     0x80230000u  /* (?! */
-#define META_LOOKBEHIND       0x80240000u  /* (?<= */
-#define META_LOOKBEHINDNOT    0x80250000u  /* (?<! */
+#define META_LOOKAHEAD        0x80230000u  /* (?= */
+#define META_LOOKAHEADNOT     0x80240000u  /* (?! */
+#define META_LOOKBEHIND       0x80250000u  /* (?<= */
+#define META_LOOKBEHINDNOT    0x80260000u  /* (?<! */


/* These must be kept in this order, with consecutive values, and the _ARG
versions of COMMIT, PRUNE, SKIP, and THEN immediately after their non-argument
versions. */

-#define META_MARK             0x80260000u  /* (*MARK) */
-#define META_ACCEPT           0x80270000u  /* (*ACCEPT) */
-#define META_FAIL             0x80280000u  /* (*FAIL) */
-#define META_COMMIT           0x80290000u  /* These               */
-#define META_COMMIT_ARG       0x802a0000u  /*   pairs             */
-#define META_PRUNE            0x802b0000u  /*     must            */
-#define META_PRUNE_ARG        0x802c0000u  /*       be            */
-#define META_SKIP             0x802d0000u  /*         kept        */
-#define META_SKIP_ARG         0x802e0000u  /*           in        */
-#define META_THEN             0x802f0000u  /*             this    */
-#define META_THEN_ARG         0x80300000u  /*               order */
+#define META_MARK             0x80270000u  /* (*MARK) */
+#define META_ACCEPT           0x80280000u  /* (*ACCEPT) */
+#define META_FAIL             0x80290000u  /* (*FAIL) */
+#define META_COMMIT           0x802a0000u  /* These               */
+#define META_COMMIT_ARG       0x802b0000u  /*   pairs             */
+#define META_PRUNE            0x802c0000u  /*     must            */
+#define META_PRUNE_ARG        0x802d0000u  /*       be            */
+#define META_SKIP             0x802e0000u  /*         kept        */
+#define META_SKIP_ARG         0x802f0000u  /*           in        */
+#define META_THEN             0x80300000u  /*             this    */
+#define META_THEN_ARG         0x80310000u  /*               order */


/* These must be kept in groups of adjacent 3 values, and all together. */

-#define META_ASTERISK         0x80310000u  /* *  */
-#define META_ASTERISK_PLUS    0x80320000u  /* *+ */
-#define META_ASTERISK_QUERY   0x80330000u  /* *? */
-#define META_PLUS             0x80340000u  /* +  */
-#define META_PLUS_PLUS        0x80350000u  /* ++ */
-#define META_PLUS_QUERY       0x80360000u  /* +? */
-#define META_QUERY            0x80370000u  /* ?  */
-#define META_QUERY_PLUS       0x80380000u  /* ?+ */
-#define META_QUERY_QUERY      0x80390000u  /* ?? */
-#define META_MINMAX           0x803a0000u  /* {n,m}  repeat */
-#define META_MINMAX_PLUS      0x803b0000u  /* {n,m}+ repeat */
-#define META_MINMAX_QUERY     0x803c0000u  /* {n,m}? repeat */
+#define META_ASTERISK         0x80320000u  /* *  */
+#define META_ASTERISK_PLUS    0x80330000u  /* *+ */
+#define META_ASTERISK_QUERY   0x80340000u  /* *? */
+#define META_PLUS             0x80350000u  /* +  */
+#define META_PLUS_PLUS        0x80360000u  /* ++ */
+#define META_PLUS_QUERY       0x80370000u  /* +? */
+#define META_QUERY            0x80380000u  /* ?  */
+#define META_QUERY_PLUS       0x80390000u  /* ?+ */
+#define META_QUERY_QUERY      0x803a0000u  /* ?? */
+#define META_MINMAX           0x803b0000u  /* {n,m}  repeat */
+#define META_MINMAX_PLUS      0x803c0000u  /* {n,m}+ repeat */
+#define META_MINMAX_QUERY     0x803d0000u  /* {n,m}? repeat */


#define META_FIRST_QUANTIFIER META_ASTERISK
#define META_LAST_QUANTIFIER META_MINMAX_QUERY

+/* This is a special "meta code" that is used only to distinguish (*asr: from
+(*sr in the table of aphabetic assertions. It is never stored in the parsed
+pattern because (*asr: is turned into (*sr:(*atomic: at that stage. There is
+therefore no need for it to have a length entry, so use a high value. */
+
+#define META_ATOMIC_SCRIPT_RUN 0x8fff0000u
+
 /* Table of extra lengths for each of the meta codes. Must be kept in step with
 the definitions above. For some items these values are a basic length to which
 a variable amount has to be added. */
@@ -322,6 +330,7 @@
   0,             /* META_RANGE_LITERAL */
   SIZEOFFSET,    /* META_RECURSE */
   1+SIZEOFFSET,  /* META_RECURSE_BYNAME */
+  0,             /* META_SCRIPT_RUN */
   0,             /* META_LOOKAHEAD */
   0,             /* META_LOOKAHEADNOT */
   SIZEOFFSET,    /* META_LOOKBEHIND */
@@ -638,19 +647,19 @@
   STRING_atomic_script_run;


 static const alasitem alasmeta[] = {
-  {  3, META_LOOKAHEAD     },
-  {  3, META_LOOKBEHIND    },
-  {  3, META_LOOKAHEADNOT  },
-  {  3, META_LOOKBEHINDNOT },
-  { 18, META_LOOKAHEAD     },
-  { 19, META_LOOKBEHIND    },
-  { 18, META_LOOKAHEADNOT  },
-  { 19, META_LOOKBEHINDNOT },
-  {  6, META_ATOMIC        },
-  {  2, 0                  }, /* sr = script run */
-  {  3, 0                  }, /* asr = atomic script run */
-  { 10, 0                  }, /* script run */
-  { 17, 0                  }  /* atomic script run */
+  {  3, META_LOOKAHEAD         },
+  {  3, META_LOOKBEHIND        },
+  {  3, META_LOOKAHEADNOT      },
+  {  3, META_LOOKBEHINDNOT     },
+  { 18, META_LOOKAHEAD         },
+  { 19, META_LOOKBEHIND        },
+  { 18, META_LOOKAHEADNOT      },
+  { 19, META_LOOKBEHINDNOT     },
+  {  6, META_ATOMIC            },
+  {  2, META_SCRIPT_RUN        }, /* sr = script run */
+  {  3, META_ATOMIC_SCRIPT_RUN }, /* asr = atomic script run */
+  { 10, META_SCRIPT_RUN        }, /* script run */
+  { 17, META_ATOMIC_SCRIPT_RUN }  /* atomic script run */
 };


 static const int alascount = sizeof(alasmeta)/sizeof(alasitem);
@@ -772,7 +781,7 @@
        ERR61, ERR62, ERR63, ERR64, ERR65, ERR66, ERR67, ERR68, ERR69, ERR70,
        ERR71, ERR72, ERR73, ERR74, ERR75, ERR76, ERR77, ERR78, ERR79, ERR80,
        ERR81, ERR82, ERR83, ERR84, ERR85, ERR86, ERR87, ERR88, ERR89, ERR90,
-       ERR91, ERR92, ERR93, ERR94, ERR95 };
+       ERR91, ERR92, ERR93, ERR94, ERR95, ERR96 };


 /* This is a table of start-of-pattern options such as (*UTF) and settings such
 as (*LIMIT_MATCH=nnnn) and (*CRLF). For completeness and backward
@@ -1003,6 +1012,7 @@
     case META_NOCAPTURE: fprintf(stderr, "META (?:"); break;
     case META_LOOKAHEAD: fprintf(stderr, "META (?="); break;
     case META_LOOKAHEADNOT: fprintf(stderr, "META (?!"); break;
+    case META_SCRIPT_RUN: fprintf(stderr, "META (*sr:"); break;
     case META_KET: fprintf(stderr, "META )"); break;
     case META_ALT: fprintf(stderr, "META | %d", meta_arg); break;


@@ -2210,15 +2220,15 @@
                             ERR60; /* Verb not recognized or malformed */
   goto FAILED;
   }
-  
-/* A group name must not start with a digit. If either of the others start with 
-a digit it just won't be recognized. */ 
-  
+
+/* A group name must not start with a digit. If either of the others start with
+a digit it just won't be recognized. */
+
 if (is_group && IS_DIGIT(*ptr))
   {
   *errorcodeptr = ERR44;
   goto FAILED;
-  }   
+  }


*nameptr = ptr;
*offsetptr = (PCRE2_SIZE)(ptr - cb->start_pattern);
@@ -2345,6 +2355,7 @@

 #define NSF_RESET          0x0001u
 #define NSF_CONDASSERT     0x0002u
+#define NSF_ATOMICSR       0x0004u


 /* Options that are changeable within the pattern must be tracked during
 parsing. Some (e.g. PCRE2_EXTENDED) are implemented entirely during parsing,
@@ -2707,19 +2718,19 @@
         case CHAR_C:
         ok = expect_cond_assert == 2;
         break;
-       
+
         case CHAR_EQUALS_SIGN:
         case CHAR_EXCLAMATION_MARK:
         break;
-       
+
         case CHAR_LESS_THAN_SIGN:
         ok = ptr[2] == CHAR_EQUALS_SIGN || ptr[2] == CHAR_EXCLAMATION_MARK;
         break;
-       
+
         default:
         ok = FALSE;
         }
-      }      
+      }


     if (!ok)
       {
@@ -3533,13 +3544,13 @@
       /* Handle "alpha assertions" such as (*pla:...). Most of these are
       synonyms for the historical symbolic assertions, but the script run ones
       are new. They are distinguished by starting with a lower case letter.
-      Checking both ends of the alphabet makes this work in all character 
+      Checking both ends of the alphabet makes this work in all character
       codes. */


       else if (CHMAX_255(c) && (cb->ctypes[c] & ctype_lcletter) != 0)
         {
         uint32_t meta;
-          
+
         vn = alasnames;
         if (!read_name(&ptr, ptrend, 0, &offset, &name, &namelen, &errorcode,
           cb)) goto FAILED;
@@ -3550,7 +3561,7 @@
           }


         /* Scan the table of alpha assertion names */
-        
+
         for (i = 0; i < alascount; i++)
           {
           if (namelen == alasmeta[i].len &&
@@ -3564,42 +3575,72 @@
           errorcode = ERR95;  /* Alpha assertion not recognized */
           goto FAILED;
           }
-          
-        /* Check for expecting an assertion condition. If so, only lookaround 
+
+        /* Check for expecting an assertion condition. If so, only lookaround
         assertions are valid. */
-         
+
         meta = alasmeta[i].meta;
-        if (prev_expect_cond_assert > 0 && 
+        if (prev_expect_cond_assert > 0 &&
             (meta < META_LOOKAHEAD || meta > META_LOOKBEHINDNOT))
           {
           errorcode = ERR28;  /* Assertion expected */
-          goto FAILED;  
-          }                                  
+          goto FAILED;
+          }


+        /* The lookaround alphabetic synonyms can be almost entirely handled by
+        jumping to the code that handles the traditional symbolic forms. */
+
         switch(meta)
           {
+          default:
+          errorcode = ERR89;  /* Unknown code; should never occur because */
+          goto FAILED;        /* the meta values come from a table above. */
+
           case META_ATOMIC:
-          goto ATOMIC_GROUP; 
+          goto ATOMIC_GROUP;


           case META_LOOKAHEAD:
           goto POSITIVE_LOOK_AHEAD;
-          
+
           case META_LOOKAHEADNOT:
           goto NEGATIVE_LOOK_AHEAD;
-          
+
           case META_LOOKBEHIND:
-          case META_LOOKBEHINDNOT: 
-          *parsed_pattern++ = meta; 
+          case META_LOOKBEHINDNOT:
+          *parsed_pattern++ = meta;
           ptr--;
-          goto LOOKBEHIND;  
-          
-          /* FIXME: Script Run stuff ... */ 
-            
-          
- 
+          goto POST_LOOKBEHIND;


- 
-          }  
+          /* The script run facilities are handled here. Unicode support is
+          required (give an error if not, as this is a security issue). Always
+          record a META_SCRIPT_RUN item. Then, for the atomic version, insert
+          META_ATOMIC and remember that we need two META_KETs at the end. */
+
+          case META_SCRIPT_RUN:
+          case META_ATOMIC_SCRIPT_RUN:
+#ifdef SUPPORT_UNICODE
+          *parsed_pattern++ = META_SCRIPT_RUN;
+          nest_depth++;
+          ptr++;
+          if (meta == META_ATOMIC_SCRIPT_RUN)
+            {
+            *parsed_pattern++ = META_ATOMIC;
+            if (top_nest == NULL) top_nest = (nest_save *)(cb->start_workspace);
+            else if (++top_nest >= end_nests)
+              {
+              errorcode = ERR84;
+              goto FAILED;
+              }
+            top_nest->nest_depth = nest_depth;
+            top_nest->flags = NSF_ATOMICSR;
+            top_nest->options = options & PARSE_TRACKED_OPTIONS;
+            }
+          break;
+#else  /* SUPPORT_UNICODE */
+          errorcode = ERR96;
+          goto FAILED;
+#endif
+          }
         }



@@ -4262,8 +4303,8 @@
         }
       *parsed_pattern++ = (ptr[1] == CHAR_EQUALS_SIGN)?
         META_LOOKBEHIND : META_LOOKBEHINDNOT;
-        
-      LOOKBEHIND:                /* Come from (*plb: and (*nlb: */
+
+      POST_LOOKBEHIND:              /* Come from (*plb: and (*nlb: */
       *has_lookbehind = TRUE;
       offset = (PCRE2_SIZE)(ptr - cb->start_pattern - 2);
       PUTOFFSET(offset, parsed_pattern);
@@ -4425,6 +4466,14 @@
         cb->bracount = top_nest->max_group;
       if ((top_nest->flags & NSF_CONDASSERT) != 0)
         okquantifier = FALSE;
+
+      if ((top_nest->flags & NSF_ATOMICSR) != 0)
+        {
+        *parsed_pattern++ = META_KET;
+        }
+
+
+
       if (top_nest == (nest_save *)(cb->start_workspace)) top_nest = NULL;
         else top_nest--;
       }
@@ -6142,6 +6191,10 @@
     bravalue = OP_ONCE;
     goto GROUP_PROCESS_NOTE_EMPTY;


+    case META_SCRIPT_RUN:
+    bravalue = OP_SCRIPT_RUN;
+    goto GROUP_PROCESS_NOTE_EMPTY;
+
     case META_NOCAPTURE:
     bravalue = OP_BRA;
     /* Fall through */
@@ -6777,6 +6830,7 @@
       case OP_ASSERTBACK:
       case OP_ASSERTBACK_NOT:
       case OP_ONCE:
+      case OP_SCRIPT_RUN:
       case OP_BRA:
       case OP_CBRA:
       case OP_COND:
@@ -6989,16 +7043,16 @@
           }


         /* If the maximum is unlimited, set a repeater in the final copy. For
-        ONCE brackets, that's all we need to do. However, possessively repeated
-        ONCE brackets can be converted into non-capturing brackets, as the
-        behaviour of (?:xx)++ is the same as (?>xx)++ and this saves having to
-        deal with possessive ONCEs specially.
+        SCRIPT_RUN and ONCE brackets, that's all we need to do. However,
+        possessively repeated ONCE brackets can be converted into non-capturing
+        brackets, as the behaviour of (?:xx)++ is the same as (?>xx)++ and this
+        saves having to deal with possessive ONCEs specially.


         Otherwise, when we are doing the actual compile phase, check to see
         whether this group is one that could match an empty string. If so,
         convert the initial operator to the S form (e.g. OP_BRA -> OP_SBRA) so
         that runtime checking can be done. [This check is also applied to ONCE
-        groups at runtime, but in a different way.]
+        and SCRIPT_RUN groups at runtime, but in a different way.]


         Then, if the quantifier was possessive and the bracket is not a
         conditional, we convert the BRA code to the POS form, and the KET code to
@@ -7022,13 +7076,14 @@


           if (*bracode == OP_ONCE && possessive_quantifier) *bracode = OP_BRA;


-          /* For non-possessive ONCE brackets, all we need to do is to
-          set the KET. */
+          /* For non-possessive ONCE and for SCRIPT_RUN brackets, all we need
+          to do is to set the KET. */


-          if (*bracode == OP_ONCE) *ketcode = OP_KETRMAX + repeat_type;
+          if (*bracode == OP_ONCE || *bracode == OP_SCRIPT_RUN)
+            *ketcode = OP_KETRMAX + repeat_type;


-          /* Handle non-ONCE brackets and possessive ONCEs (which have been
-          converted to non-capturing above). */
+          /* Handle non-SCRIPT_RUN and non-ONCE brackets and possessive ONCEs
+          (which have been converted to non-capturing above). */


           else
             {
@@ -8385,6 +8440,7 @@
      case OP_SCBRAPOS:
      case OP_ASSERT:
      case OP_ONCE:
+     case OP_SCRIPT_RUN:
      d = find_firstassertedcu(scode, &dflags, inassert + ((op==OP_ASSERT)?1:0));
      if (dflags < 0)
        return 0;


Modified: code/trunk/src/pcre2_dfa_match.c
===================================================================
--- code/trunk/src/pcre2_dfa_match.c    2018-09-24 16:23:53 UTC (rev 1018)
+++ code/trunk/src/pcre2_dfa_match.c    2018-10-02 15:25:58 UTC (rev 1019)
@@ -173,6 +173,7 @@
   0,                             /* Assert behind                          */
   0,                             /* Assert behind not                      */
   0,                             /* ONCE                                   */
+  0,                             /* SCRIPT_RUN                             */
   0, 0, 0, 0, 0,                 /* BRA, BRAPOS, CBRA, CBRAPOS, COND       */
   0, 0, 0, 0, 0,                 /* SBRA, SBRAPOS, SCBRA, SCBRAPOS, SCOND  */
   0, 0,                          /* CREF, DNCREF                           */
@@ -247,6 +248,7 @@
   0,                             /* Assert behind                          */
   0,                             /* Assert behind not                      */
   0,                             /* ONCE                                   */
+  0,                             /* SCRIPT_RUN                             */
   0, 0, 0, 0, 0,                 /* BRA, BRAPOS, CBRA, CBRAPOS, COND       */
   0, 0, 0, 0, 0,                 /* SBRA, SBRAPOS, SCBRA, SCBRAPOS, SCOND  */
   0, 0,                          /* CREF, DNCREF                           */


Modified: code/trunk/src/pcre2_error.c
===================================================================
--- code/trunk/src/pcre2_error.c    2018-09-24 16:23:53 UTC (rev 1018)
+++ code/trunk/src/pcre2_error.c    2018-10-02 15:25:58 UTC (rev 1019)
@@ -183,6 +183,7 @@
   "invalid hyphen in option setting\0"
   /* 95 */
   "(*alpha_assertion) not recognized\0"  
+  "script runs require Unicode support, which this version of PCRE2 does not have\0" 
   ;


/* Match-time and UTF error texts are in the same format. */

Modified: code/trunk/src/pcre2_internal.h
===================================================================
--- code/trunk/src/pcre2_internal.h    2018-09-24 16:23:53 UTC (rev 1018)
+++ code/trunk/src/pcre2_internal.h    2018-10-02 15:25:58 UTC (rev 1019)
@@ -1513,70 +1513,71 @@
   OP_ASSERTBACK,     /* 128 Positive lookbehind */
   OP_ASSERTBACK_NOT, /* 129 Negative lookbehind */


- /* ONCE, BRA, BRAPOS, CBRA, CBRAPOS, and COND must come immediately after the
- assertions, with ONCE first, as there's a test for >= ONCE for a subpattern
- that isn't an assertion. The POS versions must immediately follow the non-POS
- versions in each case. */
+ /* ONCE, SCRIPT_RUN, BRA, BRAPOS, CBRA, CBRAPOS, and COND must come
+ immediately after the assertions, with ONCE first, as there's a test for >=
+ ONCE for a subpattern that isn't an assertion. The POS versions must
+ immediately follow the non-POS versions in each case. */

   OP_ONCE,           /* 130 Atomic group, contains captures */
-  OP_BRA,            /* 131 Start of non-capturing bracket */
-  OP_BRAPOS,         /* 132 Ditto, with unlimited, possessive repeat */
-  OP_CBRA,           /* 133 Start of capturing bracket */
-  OP_CBRAPOS,        /* 134 Ditto, with unlimited, possessive repeat */
-  OP_COND,           /* 135 Conditional group */
+  OP_SCRIPT_RUN,     /* 131 Non-capture, but check characters' scripts */
+  OP_BRA,            /* 132 Start of non-capturing bracket */
+  OP_BRAPOS,         /* 133 Ditto, with unlimited, possessive repeat */
+  OP_CBRA,           /* 134 Start of capturing bracket */
+  OP_CBRAPOS,        /* 135 Ditto, with unlimited, possessive repeat */
+  OP_COND,           /* 136 Conditional group */


/* These five must follow the previous five, in the same order. There's a
check for >= SBRA to distinguish the two sets. */

-  OP_SBRA,           /* 136 Start of non-capturing bracket, check empty  */
-  OP_SBRAPOS,        /* 137 Ditto, with unlimited, possessive repeat */
-  OP_SCBRA,          /* 138 Start of capturing bracket, check empty */
-  OP_SCBRAPOS,       /* 139 Ditto, with unlimited, possessive repeat */
-  OP_SCOND,          /* 140 Conditional group, check empty */
+  OP_SBRA,           /* 137 Start of non-capturing bracket, check empty  */
+  OP_SBRAPOS,        /* 138 Ditto, with unlimited, possessive repeat */
+  OP_SCBRA,          /* 139 Start of capturing bracket, check empty */
+  OP_SCBRAPOS,       /* 140 Ditto, with unlimited, possessive repeat */
+  OP_SCOND,          /* 141 Conditional group, check empty */


/* The next two pairs must (respectively) be kept together. */

-  OP_CREF,           /* 141 Used to hold a capture number as condition */
-  OP_DNCREF,         /* 142 Used to point to duplicate names as a condition */
-  OP_RREF,           /* 143 Used to hold a recursion number as condition */
-  OP_DNRREF,         /* 144 Used to point to duplicate names as a condition */
-  OP_FALSE,          /* 145 Always false (used by DEFINE and VERSION) */
-  OP_TRUE,           /* 146 Always true (used by VERSION) */
+  OP_CREF,           /* 142 Used to hold a capture number as condition */
+  OP_DNCREF,         /* 143 Used to point to duplicate names as a condition */
+  OP_RREF,           /* 144 Used to hold a recursion number as condition */
+  OP_DNRREF,         /* 145 Used to point to duplicate names as a condition */
+  OP_FALSE,          /* 146 Always false (used by DEFINE and VERSION) */
+  OP_TRUE,           /* 147 Always true (used by VERSION) */


-  OP_BRAZERO,        /* 147 These two must remain together and in this */
-  OP_BRAMINZERO,     /* 148 order. */
-  OP_BRAPOSZERO,     /* 149 */
+  OP_BRAZERO,        /* 148 These two must remain together and in this */
+  OP_BRAMINZERO,     /* 149 order. */
+  OP_BRAPOSZERO,     /* 150 */


/* These are backtracking control verbs */

-  OP_MARK,           /* 150 always has an argument */
-  OP_PRUNE,          /* 151 */
-  OP_PRUNE_ARG,      /* 152 same, but with argument */
-  OP_SKIP,           /* 153 */
-  OP_SKIP_ARG,       /* 154 same, but with argument */
-  OP_THEN,           /* 155 */
-  OP_THEN_ARG,       /* 156 same, but with argument */
-  OP_COMMIT,         /* 157 */
-  OP_COMMIT_ARG,     /* 158 same, but with argument */
+  OP_MARK,           /* 151 always has an argument */
+  OP_PRUNE,          /* 152 */
+  OP_PRUNE_ARG,      /* 153 same, but with argument */
+  OP_SKIP,           /* 154 */
+  OP_SKIP_ARG,       /* 155 same, but with argument */
+  OP_THEN,           /* 156 */
+  OP_THEN_ARG,       /* 157 same, but with argument */
+  OP_COMMIT,         /* 158 */
+  OP_COMMIT_ARG,     /* 159 same, but with argument */


/* These are forced failure and success verbs. FAIL and ACCEPT do accept an
argument, but these cases can be compiled as, for example, (*MARK:X)(*FAIL)
without the need for a special opcode. */

-  OP_FAIL,           /* 159 */
-  OP_ACCEPT,         /* 160 */
-  OP_ASSERT_ACCEPT,  /* 161 Used inside assertions */
-  OP_CLOSE,          /* 162 Used before OP_ACCEPT to close open captures */
+  OP_FAIL,           /* 160 */
+  OP_ACCEPT,         /* 161 */
+  OP_ASSERT_ACCEPT,  /* 162 Used inside assertions */
+  OP_CLOSE,          /* 163 Used before OP_ACCEPT to close open captures */


/* This is used to skip a subpattern with a {0} quantifier */

-  OP_SKIPZERO,       /* 163 */
+  OP_SKIPZERO,       /* 164 */


/* This is used to identify a DEFINE group during compilation so that it can
be checked for having only one branch. It is changed to OP_FALSE before
compilation finishes. */

-  OP_DEFINE,         /* 164 */
+  OP_DEFINE,         /* 165 */


   /* This is not an opcode, but is used to check that tables indexed by opcode
   are the correct length, in order to catch updating errors - there have been
@@ -1624,6 +1625,7 @@
   "Alt", "Ket", "KetRmax", "KetRmin", "KetRpos",                  \
   "Reverse", "Assert", "Assert not", "AssertB", "AssertB not",    \
   "Once",                                                         \
+  "Script run",                                                   \
   "Bra", "BraPos", "CBra", "CBraPos",                             \
   "Cond",                                                         \
   "SBra", "SBraPos", "SCBra", "SCBraPos",                         \
@@ -1707,6 +1709,7 @@
   1+LINK_SIZE,                   /* Assert behind                          */ \
   1+LINK_SIZE,                   /* Assert behind not                      */ \
   1+LINK_SIZE,                   /* ONCE                                   */ \
+  1+LINK_SIZE,                   /* SCRIPT_RUN                             */ \
   1+LINK_SIZE,                   /* BRA                                    */ \
   1+LINK_SIZE,                   /* BRAPOS                                 */ \
   1+LINK_SIZE+IMM2_SIZE,         /* CBRA                                   */ \
@@ -1854,6 +1857,7 @@
 #define _pcre2_hspace_list             PCRE2_SUFFIX(_pcre2_hspace_list_)
 #define _pcre2_vspace_list             PCRE2_SUFFIX(_pcre2_vspace_list_)
 #define _pcre2_ucd_caseless_sets       PCRE2_SUFFIX(_pcre2_ucd_caseless_sets_)
+#define _pcre2_ucd_digit_sets          PCRE2_SUFFIX(_pcre2_ucd_digit_sets_)
 #define _pcre2_ucd_records             PCRE2_SUFFIX(_pcre2_ucd_records_)
 #define _pcre2_ucd_stage1              PCRE2_SUFFIX(_pcre2_ucd_stage1_)
 #define _pcre2_ucd_stage2              PCRE2_SUFFIX(_pcre2_ucd_stage2_)
@@ -1875,6 +1879,7 @@
 extern const uint32_t                  PRIV(hspace_list)[];
 extern const uint32_t                  PRIV(vspace_list)[];
 extern const uint32_t                  PRIV(ucd_caseless_sets)[];
+extern const uint32_t                  PRIV(ucd_digit_sets)[];
 extern const ucd_record                PRIV(ucd_records)[];
 #if PCRE2_CODE_UNIT_WIDTH == 32
 extern const ucd_record                PRIV(dummy_ucd_record)[];
@@ -1922,6 +1927,7 @@
 #define _pcre2_jit_get_target        PCRE2_SUFFIX(_pcre2_jit_get_target_)
 #define _pcre2_memctl_malloc         PCRE2_SUFFIX(_pcre2_memctl_malloc_)
 #define _pcre2_ord2utf               PCRE2_SUFFIX(_pcre2_ord2utf_)
+#define _pcre2_script_run            PCRE2_SUFFIX(_pcre2_script_run_)
 #define _pcre2_strcmp                PCRE2_SUFFIX(_pcre2_strcmp_)
 #define _pcre2_strcmp_c8             PCRE2_SUFFIX(_pcre2_strcmp_c8_)
 #define _pcre2_strcpy_c8             PCRE2_SUFFIX(_pcre2_strcpy_c8_)
@@ -1948,6 +1954,7 @@
 const char *        _pcre2_jit_get_target(void);
 extern void *       _pcre2_memctl_malloc(size_t, pcre2_memctl *);
 extern unsigned int _pcre2_ord2utf(uint32_t, PCRE2_UCHAR *);
+extern BOOL         _pcre2_script_run(PCRE2_SPTR, PCRE2_SPTR, BOOL);
 extern int          _pcre2_strcmp(PCRE2_SPTR, PCRE2_SPTR);
 extern int          _pcre2_strcmp_c8(PCRE2_SPTR, const char *);
 extern PCRE2_SIZE   _pcre2_strcpy_c8(PCRE2_UCHAR *, const char *);


Modified: code/trunk/src/pcre2_match.c
===================================================================
--- code/trunk/src/pcre2_match.c    2018-09-24 16:23:53 UTC (rev 1018)
+++ code/trunk/src/pcre2_match.c    2018-10-02 15:25:58 UTC (rev 1019)
@@ -5014,6 +5014,7 @@
     must record a backtracking point and also set up a chained frame. */


     case OP_ONCE:
+    case OP_SCRIPT_RUN: 
     case OP_SBRA:
     Lframe_type = GF_NOCAPTURE | Fop;


@@ -5525,6 +5526,14 @@
       case OP_ASSERT_NOT:
       case OP_ASSERTBACK_NOT:
       RRETURN(MATCH_MATCH);
+      
+      /* At the end of a script run, apply the script-checking rules. This code 
+      will never by exercised if Unicode support it not compiled, because in 
+      that environment script runs cause an error at compile time. */
+      
+      case OP_SCRIPT_RUN:
+      if (!PRIV(script_run)(P->eptr, Feptr, utf)) RRETURN(MATCH_NOMATCH);
+      break;  


       /* Whole-pattern recursion is coded as a recurse into group 0, so it
       won't be picked up here. Instead, we catch it when the OP_END is reached.


Modified: code/trunk/src/pcre2_printint.c
===================================================================
--- code/trunk/src/pcre2_printint.c    2018-09-24 16:23:53 UTC (rev 1018)
+++ code/trunk/src/pcre2_printint.c    2018-10-02 15:25:58 UTC (rev 1019)
@@ -393,6 +393,7 @@
     case OP_ASSERTBACK:
     case OP_ASSERTBACK_NOT:
     case OP_ONCE:
+    case OP_SCRIPT_RUN: 
     case OP_COND:
     case OP_SCOND:
     case OP_REVERSE:


Added: code/trunk/src/pcre2_script_run.c
===================================================================
--- code/trunk/src/pcre2_script_run.c                            (rev 0)
+++ code/trunk/src/pcre2_script_run.c    2018-10-02 15:25:58 UTC (rev 1019)
@@ -0,0 +1,228 @@
+/*************************************************
+*      Perl-Compatible Regular Expressions       *
+*************************************************/
+
+/* PCRE is a library of functions to support regular expressions whose syntax
+and semantics are as close as possible to those of the Perl 5 language.
+
+                       Written by Philip Hazel
+     Original API code Copyright (c) 1997-2012 University of Cambridge
+          New API code Copyright (c) 2016-2018 University of Cambridge
+
+-----------------------------------------------------------------------------
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+-----------------------------------------------------------------------------
+*/
+
+/* This module contains the function for checking a script run. */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "pcre2_internal.h"
+
+
+/*************************************************
+*                Check script run                *
+*************************************************/
+
+/* A script run is conceptually a sequence of characters all in the same
+Unicode script. However, it isn't quite that simple. There are special rules
+for scripts that are commonly used together, and also special rules for digits.
+This function implements the appropriate checks, which is possible only when
+PCRE2 is compiled with Unicode support. The function returns TRUE if there is
+no Unicode support; however, it should never be called in that circumstance
+because an error is given by pcre2_compile() if a script run is called for in a
+version of PCRE2 compiled without Unicode support.
+
+Arguments:
+  pgr       point to the first character
+  endptr    point after the last character
+  utf       TRUE if in UTF mode
+
+Returns:    TRUE if this is a valid script run
+*/
+
+#define SCRIPT_UNSET        (-1)
+#define SCRIPT_HANPENDING   (-2)
+#define SCRIPT_HANHIRAKATA  (-3)
+#define SCRIPT_HANBOPOMOFO  (-4)
+#define SCRIPT_HANHANGUL    (-5)
+
+BOOL
+PRIV(script_run)(PCRE2_SPTR ptr, PCRE2_SPTR endptr, BOOL utf)
+{
+#ifdef SUPPORT_UNICODE
+int require_script = SCRIPT_UNSET;
+uint32_t require_digitset = 0;
+uint32_t c;
+
+#if PCRE2_CODE_UNIT_WIDTH == 32
+(void)utf;    /* Avoid compiler warning */
+#endif
+
+/* Any string containing fewer than 2 characters is a valid script run. */
+
+if (ptr >= endptr) return TRUE;
+GETCHARINCTEST(c, ptr);
+if (ptr >= endptr) return TRUE;
+
+/* Scan strings of two or more characters, checking the Unicode characteristics
+of each code point. */
+
+for (;;)
+  {
+  const ucd_record *ucd = GET_UCD(c);
+  uint32_t script = ucd->script;
+
+  /* If the script is Unknown, the string is not a valid script run. Such
+  characters can only form script runs of length one. */
+  
+  if (script == ucp_Unknown) return FALSE; 
+
+  /* A character whose script is Inherited is always accepted, and plays no
+  further part. A character whose script is Common is always accepted, but must
+  still be tested for a digit below. Otherwise, the character must match the
+  script of the first non-Inherited, non-Common character encountered. For most
+  scripts, the test is for the same script. However, the Han Chinese script may
+  be used in conjunction with four other scripts in these combinations:
+
+  . Han with Hiragana and Katakana is allowed (for Japanese).
+
+  . Han with Bopomofo is allowed (for Taiwanese Mandarin).
+
+  . Han with Hangul is allowed (for Korean).
+
+  If the first significant character's script is one of the four, the required
+  script type is immediately known. However, if the first significant
+  character's script is Han, we have to keep checking for a non-Han character.
+  Hence the SCRIPT_HANPENDING state. */
+ 
+  if (script != ucp_Inherited)
+    { 
+    if (script != ucp_Common) switch(require_script)
+      {
+      default:
+      if (script != (unsigned int)require_script) return FALSE;
+      break;
+    
+      case SCRIPT_UNSET:
+      case SCRIPT_HANPENDING:
+      switch(script)
+        {
+        case ucp_Han:
+        require_script = SCRIPT_HANPENDING;
+        break;
+    
+        case ucp_Hiragana:
+        case ucp_Katakana:
+        require_script = SCRIPT_HANHIRAKATA;
+        break;
+    
+        case ucp_Bopomofo:
+        require_script = SCRIPT_HANBOPOMOFO;
+        break;
+    
+        case ucp_Hangul:
+        require_script = SCRIPT_HANHANGUL;
+        break;
+    
+        default:
+        if (require_script == SCRIPT_HANPENDING) return FALSE;
+        require_script = script;
+        break;
+        }
+      break;
+    
+      case SCRIPT_HANHIRAKATA:
+      if (script != ucp_Han && script != ucp_Hiragana && script != ucp_Katakana)
+        return FALSE;
+      break;
+    
+      case SCRIPT_HANBOPOMOFO:
+      if (script != ucp_Han && script != ucp_Bopomofo) return FALSE;
+      break;
+    
+      case SCRIPT_HANHANGUL:
+      if (script != ucp_Han && script != ucp_Hangul) return FALSE;
+      break;
+      }
+    
+    /* The character is in an acceptable script. We must now ensure that all
+    decimal digits in the string come from the same set. Some scripts (e.g.
+    Common, Arabic) have more than one set of decimal digits. This code does
+    not allow mixing sets, even within the same script. The vector called
+    PRIV(ucd_digit_sets)[] contains, in its first element, the number of
+    following elements, and then, in ascending order, the code points of the
+    '9' characters in every set of 10 digits. Each set is identified by the
+    offset in the vector of its '9' character. An initial check of the first
+    value picks up ASCII digits quickly. Otherwise, a binary chop is used. */
+    
+    if (ucd->chartype == ucp_Nd)
+      {
+      uint32_t digitset;
+        
+      if (c <= PRIV(ucd_digit_sets)[1]) digitset = 1; else
+        {
+        int mid;
+        int bot = 1;
+        int top = PRIV(ucd_digit_sets)[0];
+        for (;;)
+          {
+          if (top <= bot + 1)    /* <= rather than == is paranoia */
+            {
+            digitset = top;
+            break;
+            }
+          mid = (top + bot) / 2;
+          if (c <= PRIV(ucd_digit_sets)[mid]) top = mid; else bot = mid;
+          }
+        }
+    
+      /* A required value of 0 means "unset". */
+    
+      if (require_digitset == 0) require_digitset = digitset;
+        else if (digitset != require_digitset) return FALSE;
+      }   /* End digit handling */
+    }     /* End checking non-Inherited character */
+
+  /* If we haven't yet got to the end, pick up the next character. */
+
+  if (ptr >= endptr) return TRUE;
+  GETCHARINCTEST(c, ptr);
+  }  /* End checking loop */
+
+#else   /* NOT SUPPORT_UNICODE */
+(void)ptr;
+(void)endptr;
+(void)utf;
+return TRUE;
+#endif  /* SUPPORT_UNICODE */
+}
+
+/* End of pcre2_script_run.c */


Modified: code/trunk/src/pcre2_study.c
===================================================================
--- code/trunk/src/pcre2_study.c    2018-09-24 16:23:53 UTC (rev 1018)
+++ code/trunk/src/pcre2_study.c    2018-10-02 15:25:58 UTC (rev 1019)
@@ -171,6 +171,7 @@
     /* Fall through */


     case OP_ONCE:
+    case OP_SCRIPT_RUN: 
     case OP_SBRA:
     case OP_BRAPOS:
     case OP_SBRAPOS:
@@ -1075,6 +1076,7 @@
       case OP_CBRAPOS:
       case OP_SCBRAPOS:
       case OP_ONCE:
+      case OP_SCRIPT_RUN: 
       case OP_ASSERT:
       rc = set_start_bits(re, tcode, utf);
       if (rc == SSB_FAIL || rc == SSB_UNKNOWN) return rc;


Modified: code/trunk/src/pcre2_tables.c
===================================================================
--- code/trunk/src/pcre2_tables.c    2018-09-24 16:23:53 UTC (rev 1018)
+++ code/trunk/src/pcre2_tables.c    2018-10-02 15:25:58 UTC (rev 1019)
@@ -417,6 +417,7 @@
 #define STRING_Tifinagh0 STR_T STR_i STR_f STR_i STR_n STR_a STR_g STR_h "\0"
 #define STRING_Tirhuta0 STR_T STR_i STR_r STR_h STR_u STR_t STR_a "\0"
 #define STRING_Ugaritic0 STR_U STR_g STR_a STR_r STR_i STR_t STR_i STR_c "\0"
+#define STRING_Unknown0 STR_U STR_n STR_k STR_n STR_o STR_w STR_n "\0"
 #define STRING_Vai0 STR_V STR_a STR_i "\0"
 #define STRING_Warang_Citi0 STR_W STR_a STR_r STR_a STR_n STR_g STR_UNDERSCORE STR_C STR_i STR_t STR_i "\0"
 #define STRING_Xan0 STR_X STR_a STR_n "\0"
@@ -611,6 +612,7 @@
   STRING_Tifinagh0
   STRING_Tirhuta0
   STRING_Ugaritic0
+  STRING_Unknown0
   STRING_Vai0
   STRING_Warang_Citi0
   STRING_Xan0
@@ -805,19 +807,20 @@
   { 1424, PT_SC, ucp_Tifinagh },
   { 1433, PT_SC, ucp_Tirhuta },
   { 1441, PT_SC, ucp_Ugaritic },
-  { 1450, PT_SC, ucp_Vai },
-  { 1454, PT_SC, ucp_Warang_Citi },
-  { 1466, PT_ALNUM, 0 },
-  { 1470, PT_PXSPACE, 0 },
-  { 1474, PT_SPACE, 0 },
-  { 1478, PT_UCNC, 0 },
-  { 1482, PT_WORD, 0 },
-  { 1486, PT_SC, ucp_Yi },
-  { 1489, PT_GC, ucp_Z },
-  { 1491, PT_SC, ucp_Zanabazar_Square },
-  { 1508, PT_PC, ucp_Zl },
-  { 1511, PT_PC, ucp_Zp },
-  { 1514, PT_PC, ucp_Zs }
+  { 1450, PT_SC, ucp_Unknown },
+  { 1458, PT_SC, ucp_Vai },
+  { 1462, PT_SC, ucp_Warang_Citi },
+  { 1474, PT_ALNUM, 0 },
+  { 1478, PT_PXSPACE, 0 },
+  { 1482, PT_SPACE, 0 },
+  { 1486, PT_UCNC, 0 },
+  { 1490, PT_WORD, 0 },
+  { 1494, PT_SC, ucp_Yi },
+  { 1497, PT_GC, ucp_Z },
+  { 1499, PT_SC, ucp_Zanabazar_Square },
+  { 1516, PT_PC, ucp_Zl },
+  { 1519, PT_PC, ucp_Zp },
+  { 1522, PT_PC, ucp_Zs }
 };


const size_t PRIV(utt_size) = sizeof(PRIV(utt)) / sizeof(ucp_type_table);

Modified: code/trunk/src/pcre2_ucd.c
===================================================================
--- code/trunk/src/pcre2_ucd.c    2018-09-24 16:23:53 UTC (rev 1018)
+++ code/trunk/src/pcre2_ucd.c    2018-10-02 15:25:58 UTC (rev 1019)
@@ -47,11 +47,11 @@


 #if PCRE2_CODE_UNIT_WIDTH == 32
 const ucd_record PRIV(dummy_ucd_record)[] = {{
-  ucp_Common,    /* script */
-  ucp_Cn,        /* type unassigned */
-  ucp_gbOther,   /* grapheme break property */
-  0,             /* case set */
-  0,             /* other case */
+  ucp_Unknown,    /* script */
+  ucp_Cn,         /* type unassigned */
+  ucp_gbOther,    /* grapheme break property */
+  0,              /* case set */
+  0,              /* other case */
   }};
 #endif


@@ -68,6 +68,8 @@
} ucd_record;
*/

+/* This table contains lists of characters that are caseless sets of
+more than one character. Each list is terminated by NOTACHAR. */

const uint32_t PRIV(ucd_caseless_sets)[] = {
NOTACHAR,
@@ -100,865 +102,884 @@
0x1c88, 0xa64a, 0xa64b, NOTACHAR,
};

-/* When #included in pcre2test, we don't need this large table. */
+/* When #included in pcre2test, we don't need the table of digit
+sets, nor the the large main UCD tables. */

#ifndef PCRE2_PCRE2TEST

+/* This table lists the code points for the '9' characters in each
+set of decimal digits. It is used to ensure that all the digits in
+a script run come from the same set. */
+
+const uint32_t PRIV(ucd_digit_sets)[] = {
+  61,  /* Number of subsequent values */
+  0x00039, 0x00669, 0x006f9, 0x007c9, 0x0096f, 0x009ef, 0x00a6f, 0x00aef,
+  0x00b6f, 0x00bef, 0x00c6f, 0x00cef, 0x00d6f, 0x00def, 0x00e59, 0x00ed9,
+  0x00f29, 0x01049, 0x01099, 0x017e9, 0x01819, 0x0194f, 0x019d9, 0x01a89,
+  0x01a99, 0x01b59, 0x01bb9, 0x01c49, 0x01c59, 0x0a629, 0x0a8d9, 0x0a909,
+  0x0a9d9, 0x0a9f9, 0x0aa59, 0x0abf9, 0x0ff19, 0x104a9, 0x10d39, 0x1106f,
+  0x110f9, 0x1113f, 0x111d9, 0x112f9, 0x11459, 0x114d9, 0x11659, 0x116c9,
+  0x11739, 0x118e9, 0x11c59, 0x11d59, 0x11da9, 0x16a69, 0x16b59, 0x1d7d7,
+  0x1d7e1, 0x1d7eb, 0x1d7f5, 0x1d7ff, 0x1e959,
+};
+
+/* These are the main two-stage UCD tables. */
+
 const ucd_record PRIV(ucd_records)[] = { /* 6832 bytes, record size 8 */
-  {     9,      0,      2,      0,      0, }, /*   0 */
-  {     9,      0,      1,      0,      0, }, /*   1 */
-  {     9,      0,      0,      0,      0, }, /*   2 */
-  {     9,     29,     12,      0,      0, }, /*   3 */
-  {     9,     21,     12,      0,      0, }, /*   4 */
-  {     9,     23,     12,      0,      0, }, /*   5 */
-  {     9,     22,     12,      0,      0, }, /*   6 */
-  {     9,     18,     12,      0,      0, }, /*   7 */
-  {     9,     25,     12,      0,      0, }, /*   8 */
-  {     9,     17,     12,      0,      0, }, /*   9 */
-  {     9,     13,     12,      0,      0, }, /*  10 */
-  {    33,      9,     12,      0,     32, }, /*  11 */
-  {    33,      9,     12,    100,     32, }, /*  12 */
-  {    33,      9,     12,      1,     32, }, /*  13 */
-  {     9,     24,     12,      0,      0, }, /*  14 */
-  {     9,     16,     12,      0,      0, }, /*  15 */
-  {    33,      5,     12,      0,    -32, }, /*  16 */
-  {    33,      5,     12,    100,    -32, }, /*  17 */
-  {    33,      5,     12,      1,    -32, }, /*  18 */
-  {     9,     26,     12,      0,      0, }, /*  19 */
-  {     9,     26,     14,      0,      0, }, /*  20 */
-  {    33,      7,     12,      0,      0, }, /*  21 */
-  {     9,     20,     12,      0,      0, }, /*  22 */
-  {     9,      1,      2,      0,      0, }, /*  23 */
-  {     9,     15,     12,      0,      0, }, /*  24 */
-  {     9,      5,     12,     26,    775, }, /*  25 */
-  {     9,     19,     12,      0,      0, }, /*  26 */
-  {    33,      9,     12,    104,     32, }, /*  27 */
-  {    33,      5,     12,      0,   7615, }, /*  28 */
-  {    33,      5,     12,    104,    -32, }, /*  29 */
-  {    33,      5,     12,      0,    121, }, /*  30 */
-  {    33,      9,     12,      0,      1, }, /*  31 */
-  {    33,      5,     12,      0,     -1, }, /*  32 */
-  {    33,      9,     12,      0,      0, }, /*  33 */
-  {    33,      5,     12,      0,      0, }, /*  34 */
-  {    33,      9,     12,      0,   -121, }, /*  35 */
-  {    33,      5,     12,      1,   -268, }, /*  36 */
-  {    33,      5,     12,      0,    195, }, /*  37 */
-  {    33,      9,     12,      0,    210, }, /*  38 */
-  {    33,      9,     12,      0,    206, }, /*  39 */
-  {    33,      9,     12,      0,    205, }, /*  40 */
-  {    33,      9,     12,      0,     79, }, /*  41 */
-  {    33,      9,     12,      0,    202, }, /*  42 */
-  {    33,      9,     12,      0,    203, }, /*  43 */
-  {    33,      9,     12,      0,    207, }, /*  44 */
-  {    33,      5,     12,      0,     97, }, /*  45 */
-  {    33,      9,     12,      0,    211, }, /*  46 */
-  {    33,      9,     12,      0,    209, }, /*  47 */
-  {    33,      5,     12,      0,    163, }, /*  48 */
-  {    33,      9,     12,      0,    213, }, /*  49 */
-  {    33,      5,     12,      0,    130, }, /*  50 */
-  {    33,      9,     12,      0,    214, }, /*  51 */
-  {    33,      9,     12,      0,    218, }, /*  52 */
-  {    33,      9,     12,      0,    217, }, /*  53 */
-  {    33,      9,     12,      0,    219, }, /*  54 */
-  {    33,      5,     12,      0,     56, }, /*  55 */
-  {    33,      9,     12,      5,      2, }, /*  56 */
-  {    33,      8,     12,      5,      1, }, /*  57 */
-  {    33,      5,     12,      5,     -2, }, /*  58 */
-  {    33,      9,     12,      9,      2, }, /*  59 */
-  {    33,      8,     12,      9,      1, }, /*  60 */
-  {    33,      5,     12,      9,     -2, }, /*  61 */
-  {    33,      9,     12,     13,      2, }, /*  62 */
-  {    33,      8,     12,     13,      1, }, /*  63 */
-  {    33,      5,     12,     13,     -2, }, /*  64 */
-  {    33,      5,     12,      0,    -79, }, /*  65 */
-  {    33,      9,     12,     17,      2, }, /*  66 */
-  {    33,      8,     12,     17,      1, }, /*  67 */
-  {    33,      5,     12,     17,     -2, }, /*  68 */
-  {    33,      9,     12,      0,    -97, }, /*  69 */
-  {    33,      9,     12,      0,    -56, }, /*  70 */
-  {    33,      9,     12,      0,   -130, }, /*  71 */
-  {    33,      9,     12,      0,  10795, }, /*  72 */
-  {    33,      9,     12,      0,   -163, }, /*  73 */
-  {    33,      9,     12,      0,  10792, }, /*  74 */
-  {    33,      5,     12,      0,  10815, }, /*  75 */
-  {    33,      9,     12,      0,   -195, }, /*  76 */
-  {    33,      9,     12,      0,     69, }, /*  77 */
-  {    33,      9,     12,      0,     71, }, /*  78 */
-  {    33,      5,     12,      0,  10783, }, /*  79 */
-  {    33,      5,     12,      0,  10780, }, /*  80 */
-  {    33,      5,     12,      0,  10782, }, /*  81 */
-  {    33,      5,     12,      0,   -210, }, /*  82 */
-  {    33,      5,     12,      0,   -206, }, /*  83 */
-  {    33,      5,     12,      0,   -205, }, /*  84 */
-  {    33,      5,     12,      0,   -202, }, /*  85 */
-  {    33,      5,     12,      0,   -203, }, /*  86 */
-  {    33,      5,     12,      0,  42319, }, /*  87 */
-  {    33,      5,     12,      0,  42315, }, /*  88 */
-  {    33,      5,     12,      0,   -207, }, /*  89 */
-  {    33,      5,     12,      0,  42280, }, /*  90 */
-  {    33,      5,     12,      0,  42308, }, /*  91 */
-  {    33,      5,     12,      0,   -209, }, /*  92 */
-  {    33,      5,     12,      0,   -211, }, /*  93 */
-  {    33,      5,     12,      0,  10743, }, /*  94 */
-  {    33,      5,     12,      0,  42305, }, /*  95 */
-  {    33,      5,     12,      0,  10749, }, /*  96 */
-  {    33,      5,     12,      0,   -213, }, /*  97 */
-  {    33,      5,     12,      0,   -214, }, /*  98 */
-  {    33,      5,     12,      0,  10727, }, /*  99 */
-  {    33,      5,     12,      0,   -218, }, /* 100 */
-  {    33,      5,     12,      0,  42282, }, /* 101 */
-  {    33,      5,     12,      0,    -69, }, /* 102 */
-  {    33,      5,     12,      0,   -217, }, /* 103 */
-  {    33,      5,     12,      0,    -71, }, /* 104 */
-  {    33,      5,     12,      0,   -219, }, /* 105 */
-  {    33,      5,     12,      0,  42261, }, /* 106 */
-  {    33,      5,     12,      0,  42258, }, /* 107 */
-  {    33,      6,     12,      0,      0, }, /* 108 */
-  {     9,      6,     12,      0,      0, }, /* 109 */
-  {     3,     24,     12,      0,      0, }, /* 110 */
-  {    27,     12,      3,      0,      0, }, /* 111 */
-  {    27,     12,      3,     21,    116, }, /* 112 */
-  {    19,      9,     12,      0,      1, }, /* 113 */
-  {    19,      5,     12,      0,     -1, }, /* 114 */
-  {    19,     24,     12,      0,      0, }, /* 115 */
-  {     9,      2,     12,      0,      0, }, /* 116 */
-  {    19,      6,     12,      0,      0, }, /* 117 */
-  {    19,      5,     12,      0,    130, }, /* 118 */
-  {    19,      9,     12,      0,    116, }, /* 119 */
-  {    19,      9,     12,      0,     38, }, /* 120 */
-  {    19,      9,     12,      0,     37, }, /* 121 */
-  {    19,      9,     12,      0,     64, }, /* 122 */
-  {    19,      9,     12,      0,     63, }, /* 123 */
-  {    19,      5,     12,      0,      0, }, /* 124 */
-  {    19,      9,     12,      0,     32, }, /* 125 */
-  {    19,      9,     12,     34,     32, }, /* 126 */
-  {    19,      9,     12,     59,     32, }, /* 127 */
-  {    19,      9,     12,     38,     32, }, /* 128 */
-  {    19,      9,     12,     21,     32, }, /* 129 */
-  {    19,      9,     12,     51,     32, }, /* 130 */
-  {    19,      9,     12,     26,     32, }, /* 131 */
-  {    19,      9,     12,     47,     32, }, /* 132 */
-  {    19,      9,     12,     55,     32, }, /* 133 */
-  {    19,      9,     12,     30,     32, }, /* 134 */
-  {    19,      9,     12,     43,     32, }, /* 135 */
-  {    19,      9,     12,     96,     32, }, /* 136 */
-  {    19,      5,     12,      0,    -38, }, /* 137 */
-  {    19,      5,     12,      0,    -37, }, /* 138 */
-  {    19,      5,     12,      0,    -32, }, /* 139 */
-  {    19,      5,     12,     34,    -32, }, /* 140 */
-  {    19,      5,     12,     59,    -32, }, /* 141 */
-  {    19,      5,     12,     38,    -32, }, /* 142 */
-  {    19,      5,     12,     21,   -116, }, /* 143 */
-  {    19,      5,     12,     51,    -32, }, /* 144 */
-  {    19,      5,     12,     26,   -775, }, /* 145 */
-  {    19,      5,     12,     47,    -32, }, /* 146 */
-  {    19,      5,     12,     55,    -32, }, /* 147 */
-  {    19,      5,     12,     30,      1, }, /* 148 */
-  {    19,      5,     12,     30,    -32, }, /* 149 */
-  {    19,      5,     12,     43,    -32, }, /* 150 */
-  {    19,      5,     12,     96,    -32, }, /* 151 */
-  {    19,      5,     12,      0,    -64, }, /* 152 */
-  {    19,      5,     12,      0,    -63, }, /* 153 */
-  {    19,      9,     12,      0,      8, }, /* 154 */
-  {    19,      5,     12,     34,    -30, }, /* 155 */
-  {    19,      5,     12,     38,    -25, }, /* 156 */
-  {    19,      9,     12,      0,      0, }, /* 157 */
-  {    19,      5,     12,     43,    -15, }, /* 158 */
-  {    19,      5,     12,     47,    -22, }, /* 159 */
-  {    19,      5,     12,      0,     -8, }, /* 160 */
-  {    10,      9,     12,      0,      1, }, /* 161 */
-  {    10,      5,     12,      0,     -1, }, /* 162 */
-  {    19,      5,     12,     51,    -54, }, /* 163 */
-  {    19,      5,     12,     55,    -48, }, /* 164 */
-  {    19,      5,     12,      0,      7, }, /* 165 */
-  {    19,      5,     12,      0,   -116, }, /* 166 */
-  {    19,      9,     12,     38,    -60, }, /* 167 */
-  {    19,      5,     12,     59,    -64, }, /* 168 */
-  {    19,     25,     12,      0,      0, }, /* 169 */
-  {    19,      9,     12,      0,     -7, }, /* 170 */
-  {    19,      9,     12,      0,   -130, }, /* 171 */
-  {    12,      9,     12,      0,     80, }, /* 172 */
-  {    12,      9,     12,      0,     32, }, /* 173 */
-  {    12,      9,     12,     63,     32, }, /* 174 */
-  {    12,      9,     12,     67,     32, }, /* 175 */
-  {    12,      9,     12,     71,     32, }, /* 176 */
-  {    12,      9,     12,     75,     32, }, /* 177 */
-  {    12,      9,     12,     79,     32, }, /* 178 */
-  {    12,      9,     12,     84,     32, }, /* 179 */
-  {    12,      5,     12,      0,    -32, }, /* 180 */
-  {    12,      5,     12,     63,    -32, }, /* 181 */
-  {    12,      5,     12,     67,    -32, }, /* 182 */
-  {    12,      5,     12,     71,    -32, }, /* 183 */
-  {    12,      5,     12,     75,    -32, }, /* 184 */
-  {    12,      5,     12,     79,    -32, }, /* 185 */
-  {    12,      5,     12,     84,    -32, }, /* 186 */
-  {    12,      5,     12,      0,    -80, }, /* 187 */
-  {    12,      9,     12,      0,      1, }, /* 188 */
-  {    12,      5,     12,      0,     -1, }, /* 189 */
-  {    12,      9,     12,     88,      1, }, /* 190 */
-  {    12,      5,     12,     88,     -1, }, /* 191 */
-  {    12,     26,     12,      0,      0, }, /* 192 */
-  {    12,     12,      3,      0,      0, }, /* 193 */
-  {    12,     11,      3,      0,      0, }, /* 194 */
-  {    12,      9,     12,      0,     15, }, /* 195 */
-  {    12,      5,     12,      0,    -15, }, /* 196 */
-  {     1,      9,     12,      0,     48, }, /* 197 */
-  {     1,      6,     12,      0,      0, }, /* 198 */
-  {     1,     21,     12,      0,      0, }, /* 199 */
-  {     1,      5,     12,      0,      0, }, /* 200 */
-  {     1,      5,     12,      0,    -48, }, /* 201 */
-  {     1,     17,     12,      0,      0, }, /* 202 */
-  {     1,     26,     12,      0,      0, }, /* 203 */
-  {     1,     23,     12,      0,      0, }, /* 204 */
-  {    25,     12,      3,      0,      0, }, /* 205 */
-  {    25,     17,     12,      0,      0, }, /* 206 */
-  {    25,     21,     12,      0,      0, }, /* 207 */
-  {    25,      7,     12,      0,      0, }, /* 208 */
-  {     0,      1,      4,      0,      0, }, /* 209 */
-  {     9,      1,      4,      0,      0, }, /* 210 */
-  {     0,     25,     12,      0,      0, }, /* 211 */
-  {     0,     21,     12,      0,      0, }, /* 212 */
-  {     0,     23,     12,      0,      0, }, /* 213 */
-  {     0,     26,     12,      0,      0, }, /* 214 */
-  {     0,     12,      3,      0,      0, }, /* 215 */
-  {     0,      1,      2,      0,      0, }, /* 216 */
-  {     0,      7,     12,      0,      0, }, /* 217 */
-  {     0,     13,     12,      0,      0, }, /* 218 */
-  {     0,      6,     12,      0,      0, }, /* 219 */
-  {    49,     21,     12,      0,      0, }, /* 220 */
-  {    49,      1,      4,      0,      0, }, /* 221 */
-  {    49,      7,     12,      0,      0, }, /* 222 */
-  {    49,     12,      3,      0,      0, }, /* 223 */
-  {    55,      7,     12,      0,      0, }, /* 224 */
-  {    55,     12,      3,      0,      0, }, /* 225 */
-  {    63,     13,     12,      0,      0, }, /* 226 */
-  {    63,      7,     12,      0,      0, }, /* 227 */
-  {    63,     12,      3,      0,      0, }, /* 228 */
-  {    63,      6,     12,      0,      0, }, /* 229 */
-  {    63,     26,     12,      0,      0, }, /* 230 */
-  {    63,     21,     12,      0,      0, }, /* 231 */
-  {    63,     23,     12,      0,      0, }, /* 232 */
-  {    89,      7,     12,      0,      0, }, /* 233 */
-  {    89,     12,      3,      0,      0, }, /* 234 */
-  {    89,      6,     12,      0,      0, }, /* 235 */
-  {    89,     21,     12,      0,      0, }, /* 236 */
-  {    94,      7,     12,      0,      0, }, /* 237 */
-  {    94,     12,      3,      0,      0, }, /* 238 */
-  {    94,     21,     12,      0,      0, }, /* 239 */
-  {    14,     12,      3,      0,      0, }, /* 240 */
-  {    14,     10,      5,      0,      0, }, /* 241 */
-  {    14,      7,     12,      0,      0, }, /* 242 */
-  {    14,     13,     12,      0,      0, }, /* 243 */
-  {    14,     21,     12,      0,      0, }, /* 244 */
-  {    14,      6,     12,      0,      0, }, /* 245 */
-  {     2,      7,     12,      0,      0, }, /* 246 */
-  {     2,     12,      3,      0,      0, }, /* 247 */
-  {     2,     10,      5,      0,      0, }, /* 248 */
-  {     2,     10,      3,      0,      0, }, /* 249 */
-  {     2,     13,     12,      0,      0, }, /* 250 */
-  {     2,     23,     12,      0,      0, }, /* 251 */
-  {     2,     15,     12,      0,      0, }, /* 252 */
-  {     2,     26,     12,      0,      0, }, /* 253 */
-  {     2,     21,     12,      0,      0, }, /* 254 */
-  {    21,     12,      3,      0,      0, }, /* 255 */
-  {    21,     10,      5,      0,      0, }, /* 256 */
-  {    21,      7,     12,      0,      0, }, /* 257 */
-  {    21,     13,     12,      0,      0, }, /* 258 */
-  {    21,     21,     12,      0,      0, }, /* 259 */
-  {    20,     12,      3,      0,      0, }, /* 260 */
-  {    20,     10,      5,      0,      0, }, /* 261 */
-  {    20,      7,     12,      0,      0, }, /* 262 */
-  {    20,     13,     12,      0,      0, }, /* 263 */
-  {    20,     21,     12,      0,      0, }, /* 264 */
-  {    20,     23,     12,      0,      0, }, /* 265 */
-  {    43,     12,      3,      0,      0, }, /* 266 */
-  {    43,     10,      5,      0,      0, }, /* 267 */
-  {    43,      7,     12,      0,      0, }, /* 268 */
-  {    43,     10,      3,      0,      0, }, /* 269 */
-  {    43,     13,     12,      0,      0, }, /* 270 */
-  {    43,     26,     12,      0,      0, }, /* 271 */
-  {    43,     15,     12,      0,      0, }, /* 272 */
-  {    53,     12,      3,      0,      0, }, /* 273 */
-  {    53,      7,     12,      0,      0, }, /* 274 */
-  {    53,     10,      3,      0,      0, }, /* 275 */
-  {    53,     10,      5,      0,      0, }, /* 276 */
-  {    53,     13,     12,      0,      0, }, /* 277 */
-  {    53,     15,     12,      0,      0, }, /* 278 */
-  {    53,     26,     12,      0,      0, }, /* 279 */
-  {    53,     23,     12,      0,      0, }, /* 280 */
-  {    54,     12,      3,      0,      0, }, /* 281 */
-  {    54,     10,      5,      0,      0, }, /* 282 */
-  {    54,      7,     12,      0,      0, }, /* 283 */
-  {    54,     13,     12,      0,      0, }, /* 284 */
-  {    54,     15,     12,      0,      0, }, /* 285 */
-  {    54,     26,     12,      0,      0, }, /* 286 */
-  {    28,      7,     12,      0,      0, }, /* 287 */
-  {    28,     12,      3,      0,      0, }, /* 288 */
-  {    28,     10,      5,      0,      0, }, /* 289 */
-  {    28,     21,     12,      0,      0, }, /* 290 */
-  {    28,     10,      3,      0,      0, }, /* 291 */
-  {    28,     13,     12,      0,      0, }, /* 292 */
-  {    36,     12,      3,      0,      0, }, /* 293 */
-  {    36,     10,      5,      0,      0, }, /* 294 */
-  {    36,      7,     12,      0,      0, }, /* 295 */
-  {    36,     10,      3,      0,      0, }, /* 296 */
-  {    36,      7,      4,      0,      0, }, /* 297 */
-  {    36,     26,     12,      0,      0, }, /* 298 */
-  {    36,     15,     12,      0,      0, }, /* 299 */
-  {    36,     13,     12,      0,      0, }, /* 300 */
-  {    47,     10,      5,      0,      0, }, /* 301 */
-  {    47,      7,     12,      0,      0, }, /* 302 */
-  {    47,     12,      3,      0,      0, }, /* 303 */
-  {    47,     10,      3,      0,      0, }, /* 304 */
-  {    47,     13,     12,      0,      0, }, /* 305 */
-  {    47,     21,     12,      0,      0, }, /* 306 */
-  {    56,      7,     12,      0,      0, }, /* 307 */
-  {    56,     12,      3,      0,      0, }, /* 308 */
-  {    56,      7,      5,      0,      0, }, /* 309 */
-  {    56,      6,     12,      0,      0, }, /* 310 */
-  {    56,     21,     12,      0,      0, }, /* 311 */
-  {    56,     13,     12,      0,      0, }, /* 312 */
-  {    32,      7,     12,      0,      0, }, /* 313 */
-  {    32,     12,      3,      0,      0, }, /* 314 */
-  {    32,      7,      5,      0,      0, }, /* 315 */
-  {    32,      6,     12,      0,      0, }, /* 316 */
-  {    32,     13,     12,      0,      0, }, /* 317 */
-  {    57,      7,     12,      0,      0, }, /* 318 */
-  {    57,     26,     12,      0,      0, }, /* 319 */
-  {    57,     21,     12,      0,      0, }, /* 320 */
-  {    57,     12,      3,      0,      0, }, /* 321 */
-  {    57,     13,     12,      0,      0, }, /* 322 */
-  {    57,     15,     12,      0,      0, }, /* 323 */
-  {    57,     22,     12,      0,      0, }, /* 324 */
-  {    57,     18,     12,      0,      0, }, /* 325 */
-  {    57,     10,      5,      0,      0, }, /* 326 */
-  {    38,      7,     12,      0,      0, }, /* 327 */
-  {    38,     10,     12,      0,      0, }, /* 328 */
-  {    38,     12,      3,      0,      0, }, /* 329 */
-  {    38,     10,      5,      0,      0, }, /* 330 */
-  {    38,     13,     12,      0,      0, }, /* 331 */
-  {    38,     21,     12,      0,      0, }, /* 332 */
-  {    38,     26,     12,      0,      0, }, /* 333 */
-  {    16,      9,     12,      0,   7264, }, /* 334 */
-  {    16,      5,     12,      0,   3008, }, /* 335 */
-  {    16,      6,     12,      0,      0, }, /* 336 */
-  {    23,      7,      6,      0,      0, }, /* 337 */
-  {    23,      7,      7,      0,      0, }, /* 338 */
-  {    23,      7,      8,      0,      0, }, /* 339 */
-  {    15,      7,     12,      0,      0, }, /* 340 */
-  {    15,     12,      3,      0,      0, }, /* 341 */
-  {    15,     21,     12,      0,      0, }, /* 342 */
-  {    15,     15,     12,      0,      0, }, /* 343 */
-  {    15,     26,     12,      0,      0, }, /* 344 */
-  {     8,      9,     12,      0,  38864, }, /* 345 */
-  {     8,      9,     12,      0,      8, }, /* 346 */
-  {     8,      5,     12,      0,     -8, }, /* 347 */
-  {     7,     17,     12,      0,      0, }, /* 348 */
-  {     7,      7,     12,      0,      0, }, /* 349 */
-  {     7,     21,     12,      0,      0, }, /* 350 */
-  {    40,     29,     12,      0,      0, }, /* 351 */
-  {    40,      7,     12,      0,      0, }, /* 352 */
-  {    40,     22,     12,      0,      0, }, /* 353 */
-  {    40,     18,     12,      0,      0, }, /* 354 */
-  {    45,      7,     12,      0,      0, }, /* 355 */
-  {    45,     14,     12,      0,      0, }, /* 356 */
-  {    50,      7,     12,      0,      0, }, /* 357 */
-  {    50,     12,      3,      0,      0, }, /* 358 */
-  {    24,      7,     12,      0,      0, }, /* 359 */
-  {    24,     12,      3,      0,      0, }, /* 360 */
-  {     6,      7,     12,      0,      0, }, /* 361 */
-  {     6,     12,      3,      0,      0, }, /* 362 */
-  {    51,      7,     12,      0,      0, }, /* 363 */
-  {    51,     12,      3,      0,      0, }, /* 364 */
-  {    31,      7,     12,      0,      0, }, /* 365 */
-  {    31,     12,      3,      0,      0, }, /* 366 */
-  {    31,     10,      5,      0,      0, }, /* 367 */
-  {    31,     21,     12,      0,      0, }, /* 368 */
-  {    31,      6,     12,      0,      0, }, /* 369 */
-  {    31,     23,     12,      0,      0, }, /* 370 */
-  {    31,     13,     12,      0,      0, }, /* 371 */
-  {    31,     15,     12,      0,      0, }, /* 372 */
-  {    37,     21,     12,      0,      0, }, /* 373 */
-  {    37,     17,     12,      0,      0, }, /* 374 */
-  {    37,     12,      3,      0,      0, }, /* 375 */
-  {    37,      1,      2,      0,      0, }, /* 376 */
-  {    37,     13,     12,      0,      0, }, /* 377 */
-  {    37,      7,     12,      0,      0, }, /* 378 */
-  {    37,      6,     12,      0,      0, }, /* 379 */
-  {    34,      7,     12,      0,      0, }, /* 380 */
-  {    34,     12,      3,      0,      0, }, /* 381 */
-  {    34,     10,      5,      0,      0, }, /* 382 */
-  {    34,     26,     12,      0,      0, }, /* 383 */
-  {    34,     21,     12,      0,      0, }, /* 384 */
-  {    34,     13,     12,      0,      0, }, /* 385 */
-  {    52,      7,     12,      0,      0, }, /* 386 */
-  {    39,      7,     12,      0,      0, }, /* 387 */
-  {    39,     13,     12,      0,      0, }, /* 388 */
-  {    39,     15,     12,      0,      0, }, /* 389 */
-  {    39,     26,     12,      0,      0, }, /* 390 */
-  {    31,     26,     12,      0,      0, }, /* 391 */
-  {     5,      7,     12,      0,      0, }, /* 392 */
-  {     5,     12,      3,      0,      0, }, /* 393 */
-  {     5,     10,      5,      0,      0, }, /* 394 */
-  {     5,     21,     12,      0,      0, }, /* 395 */
-  {    90,      7,     12,      0,      0, }, /* 396 */
-  {    90,     10,      5,      0,      0, }, /* 397 */
-  {    90,     12,      3,      0,      0, }, /* 398 */
-  {    90,     10,     12,      0,      0, }, /* 399 */
-  {    90,     13,     12,      0,      0, }, /* 400 */
-  {    90,     21,     12,      0,      0, }, /* 401 */
-  {    90,      6,     12,      0,      0, }, /* 402 */
-  {    27,     11,      3,      0,      0, }, /* 403 */
-  {    61,     12,      3,      0,      0, }, /* 404 */
-  {    61,     10,      5,      0,      0, }, /* 405 */
-  {    61,      7,     12,      0,      0, }, /* 406 */
-  {    61,     13,     12,      0,      0, }, /* 407 */
-  {    61,     21,     12,      0,      0, }, /* 408 */
-  {    61,     26,     12,      0,      0, }, /* 409 */
-  {    75,     12,      3,      0,      0, }, /* 410 */
-  {    75,     10,      5,      0,      0, }, /* 411 */
-  {    75,      7,     12,      0,      0, }, /* 412 */
-  {    75,     13,     12,      0,      0, }, /* 413 */
-  {    92,      7,     12,      0,      0, }, /* 414 */
-  {    92,     12,      3,      0,      0, }, /* 415 */
-  {    92,     10,      5,      0,      0, }, /* 416 */
-  {    92,     21,     12,      0,      0, }, /* 417 */
-  {    69,      7,     12,      0,      0, }, /* 418 */
-  {    69,     10,      5,      0,      0, }, /* 419 */
-  {    69,     12,      3,      0,      0, }, /* 420 */
-  {    69,     21,     12,      0,      0, }, /* 421 */
-  {    69,     13,     12,      0,      0, }, /* 422 */
-  {    72,     13,     12,      0,      0, }, /* 423 */
-  {    72,      7,     12,      0,      0, }, /* 424 */
-  {    72,      6,     12,      0,      0, }, /* 425 */
-  {    72,     21,     12,      0,      0, }, /* 426 */
-  {    12,      5,     12,     63,  -6222, }, /* 427 */
-  {    12,      5,     12,     67,  -6221, }, /* 428 */
-  {    12,      5,     12,     71,  -6212, }, /* 429 */
-  {    12,      5,     12,     75,  -6210, }, /* 430 */
-  {    12,      5,     12,     79,  -6210, }, /* 431 */
-  {    12,      5,     12,     79,  -6211, }, /* 432 */
-  {    12,      5,     12,     84,  -6204, }, /* 433 */
-  {    12,      5,     12,     88,  -6180, }, /* 434 */
-  {    12,      5,     12,    108,  35267, }, /* 435 */
-  {    16,      9,     12,      0,  -3008, }, /* 436 */
-  {    75,     21,     12,      0,      0, }, /* 437 */
-  {     9,     10,      5,      0,      0, }, /* 438 */
-  {     9,      7,     12,      0,      0, }, /* 439 */
-  {    12,      5,     12,      0,      0, }, /* 440 */
-  {    12,      6,     12,      0,      0, }, /* 441 */
-  {    33,      5,     12,      0,  35332, }, /* 442 */
-  {    33,      5,     12,      0,   3814, }, /* 443 */
-  {    33,      9,     12,     92,      1, }, /* 444 */
-  {    33,      5,     12,     92,     -1, }, /* 445 */
-  {    33,      5,     12,     92,    -58, }, /* 446 */
-  {    33,      9,     12,      0,  -7615, }, /* 447 */
-  {    19,      5,     12,      0,      8, }, /* 448 */
-  {    19,      9,     12,      0,     -8, }, /* 449 */
-  {    19,      5,     12,      0,     74, }, /* 450 */
-  {    19,      5,     12,      0,     86, }, /* 451 */
-  {    19,      5,     12,      0,    100, }, /* 452 */
-  {    19,      5,     12,      0,    128, }, /* 453 */
-  {    19,      5,     12,      0,    112, }, /* 454 */
-  {    19,      5,     12,      0,    126, }, /* 455 */
-  {    19,      8,     12,      0,     -8, }, /* 456 */
-  {    19,      5,     12,      0,      9, }, /* 457 */
-  {    19,      9,     12,      0,    -74, }, /* 458 */
-  {    19,      8,     12,      0,     -9, }, /* 459 */
-  {    19,      5,     12,     21,  -7173, }, /* 460 */
-  {    19,      9,     12,      0,    -86, }, /* 461 */
-  {    19,      9,     12,      0,   -100, }, /* 462 */
-  {    19,      9,     12,      0,   -112, }, /* 463 */
-  {    19,      9,     12,      0,   -128, }, /* 464 */
-  {    19,      9,     12,      0,   -126, }, /* 465 */
-  {    27,      1,      3,      0,      0, }, /* 466 */
-  {    27,      1,     13,      0,      0, }, /* 467 */
-  {     9,     27,      2,      0,      0, }, /* 468 */
-  {     9,     28,      2,      0,      0, }, /* 469 */
-  {     9,     21,     14,      0,      0, }, /* 470 */
-  {     9,      2,      2,      0,      0, }, /* 471 */
-  {     9,      9,     12,      0,      0, }, /* 472 */
-  {     9,      5,     12,      0,      0, }, /* 473 */
-  {    19,      9,     12,     96,  -7517, }, /* 474 */
-  {    33,      9,     12,    100,  -8383, }, /* 475 */
-  {    33,      9,     12,    104,  -8262, }, /* 476 */
-  {    33,      9,     12,      0,     28, }, /* 477 */
-  {     9,      5,     14,      0,      0, }, /* 478 */
-  {    33,      5,     12,      0,    -28, }, /* 479 */
-  {    33,     14,     12,      0,     16, }, /* 480 */
-  {    33,     14,     12,      0,    -16, }, /* 481 */
-  {    33,     14,     12,      0,      0, }, /* 482 */
-  {     9,     25,     14,      0,      0, }, /* 483 */
-  {     9,     26,     12,      0,     26, }, /* 484 */
-  {     9,     26,     14,      0,     26, }, /* 485 */
-  {     9,     26,     12,      0,    -26, }, /* 486 */
-  {     4,     26,     12,      0,      0, }, /* 487 */
-  {    17,      9,     12,      0,     48, }, /* 488 */
-  {    17,      5,     12,      0,    -48, }, /* 489 */
-  {    33,      9,     12,      0, -10743, }, /* 490 */
-  {    33,      9,     12,      0,  -3814, }, /* 491 */
-  {    33,      9,     12,      0, -10727, }, /* 492 */
-  {    33,      5,     12,      0, -10795, }, /* 493 */
-  {    33,      5,     12,      0, -10792, }, /* 494 */
-  {    33,      9,     12,      0, -10780, }, /* 495 */
-  {    33,      9,     12,      0, -10749, }, /* 496 */
-  {    33,      9,     12,      0, -10783, }, /* 497 */
-  {    33,      9,     12,      0, -10782, }, /* 498 */
-  {    33,      9,     12,      0, -10815, }, /* 499 */
-  {    10,      5,     12,      0,      0, }, /* 500 */
-  {    10,     26,     12,      0,      0, }, /* 501 */
-  {    10,     12,      3,      0,      0, }, /* 502 */
-  {    10,     21,     12,      0,      0, }, /* 503 */
-  {    10,     15,     12,      0,      0, }, /* 504 */
-  {    16,      5,     12,      0,  -7264, }, /* 505 */
-  {    58,      7,     12,      0,      0, }, /* 506 */
-  {    58,      6,     12,      0,      0, }, /* 507 */
-  {    58,     21,     12,      0,      0, }, /* 508 */
-  {    58,     12,      3,      0,      0, }, /* 509 */
-  {    22,     26,     12,      0,      0, }, /* 510 */
-  {    22,      6,     12,      0,      0, }, /* 511 */
-  {    22,     14,     12,      0,      0, }, /* 512 */
-  {    23,     10,      3,      0,      0, }, /* 513 */
-  {     9,     17,     14,      0,      0, }, /* 514 */
-  {    26,      7,     12,      0,      0, }, /* 515 */
-  {    26,      6,     12,      0,      0, }, /* 516 */
-  {    29,      7,     12,      0,      0, }, /* 517 */
-  {    29,      6,     12,      0,      0, }, /* 518 */
-  {     3,      7,     12,      0,      0, }, /* 519 */
-  {    23,      7,     12,      0,      0, }, /* 520 */
-  {    23,     26,     12,      0,      0, }, /* 521 */
-  {    29,     26,     12,      0,      0, }, /* 522 */
-  {    22,      7,     12,      0,      0, }, /* 523 */
-  {    60,      7,     12,      0,      0, }, /* 524 */
-  {    60,      6,     12,      0,      0, }, /* 525 */
-  {    60,     26,     12,      0,      0, }, /* 526 */
-  {    85,      7,     12,      0,      0, }, /* 527 */
-  {    85,      6,     12,      0,      0, }, /* 528 */
-  {    85,     21,     12,      0,      0, }, /* 529 */
-  {    76,      7,     12,      0,      0, }, /* 530 */
-  {    76,      6,     12,      0,      0, }, /* 531 */
-  {    76,     21,     12,      0,      0, }, /* 532 */
-  {    76,     13,     12,      0,      0, }, /* 533 */
-  {    12,      9,     12,    108,      1, }, /* 534 */
-  {    12,      5,     12,    108, -35267, }, /* 535 */
-  {    12,      7,     12,      0,      0, }, /* 536 */
-  {    12,     21,     12,      0,      0, }, /* 537 */
-  {    78,      7,     12,      0,      0, }, /* 538 */
-  {    78,     14,     12,      0,      0, }, /* 539 */
-  {    78,     12,      3,      0,      0, }, /* 540 */
-  {    78,     21,     12,      0,      0, }, /* 541 */
-  {    33,      9,     12,      0, -35332, }, /* 542 */
-  {    33,      9,     12,      0, -42280, }, /* 543 */
-  {    33,      9,     12,      0, -42308, }, /* 544 */
-  {    33,      9,     12,      0, -42319, }, /* 545 */
-  {    33,      9,     12,      0, -42315, }, /* 546 */
-  {    33,      9,     12,      0, -42305, }, /* 547 */
-  {    33,      9,     12,      0, -42258, }, /* 548 */
-  {    33,      9,     12,      0, -42282, }, /* 549 */
-  {    33,      9,     12,      0, -42261, }, /* 550 */
-  {    33,      9,     12,      0,    928, }, /* 551 */
-  {    48,      7,     12,      0,      0, }, /* 552 */
-  {    48,     12,      3,      0,      0, }, /* 553 */
-  {    48,     10,      5,      0,      0, }, /* 554 */
-  {    48,     26,     12,      0,      0, }, /* 555 */
-  {    64,      7,     12,      0,      0, }, /* 556 */
-  {    64,     21,     12,      0,      0, }, /* 557 */
-  {    74,     10,      5,      0,      0, }, /* 558 */
-  {    74,      7,     12,      0,      0, }, /* 559 */
-  {    74,     12,      3,      0,      0, }, /* 560 */
-  {    74,     21,     12,      0,      0, }, /* 561 */
-  {    74,     13,     12,      0,      0, }, /* 562 */
-  {    68,     13,     12,      0,      0, }, /* 563 */
-  {    68,      7,     12,      0,      0, }, /* 564 */
-  {    68,     12,      3,      0,      0, }, /* 565 */
-  {    68,     21,     12,      0,      0, }, /* 566 */
-  {    73,      7,     12,      0,      0, }, /* 567 */
-  {    73,     12,      3,      0,      0, }, /* 568 */
-  {    73,     10,      5,      0,      0, }, /* 569 */
-  {    73,     21,     12,      0,      0, }, /* 570 */
-  {    83,     12,      3,      0,      0, }, /* 571 */
-  {    83,     10,      5,      0,      0, }, /* 572 */
-  {    83,      7,     12,      0,      0, }, /* 573 */
-  {    83,     21,     12,      0,      0, }, /* 574 */
-  {    83,     13,     12,      0,      0, }, /* 575 */
-  {    38,      6,     12,      0,      0, }, /* 576 */
-  {    67,      7,     12,      0,      0, }, /* 577 */
-  {    67,     12,      3,      0,      0, }, /* 578 */
-  {    67,     10,      5,      0,      0, }, /* 579 */
-  {    67,     13,     12,      0,      0, }, /* 580 */
-  {    67,     21,     12,      0,      0, }, /* 581 */
-  {    91,      7,     12,      0,      0, }, /* 582 */
-  {    91,     12,      3,      0,      0, }, /* 583 */
-  {    91,      6,     12,      0,      0, }, /* 584 */
-  {    91,     21,     12,      0,      0, }, /* 585 */
-  {    86,      7,     12,      0,      0, }, /* 586 */
-  {    86,     10,      5,      0,      0, }, /* 587 */
-  {    86,     12,      3,      0,      0, }, /* 588 */
-  {    86,     21,     12,      0,      0, }, /* 589 */
-  {    86,      6,     12,      0,      0, }, /* 590 */
-  {    33,      5,     12,      0,   -928, }, /* 591 */
-  {     8,      5,     12,      0, -38864, }, /* 592 */
-  {    86,     13,     12,      0,      0, }, /* 593 */
-  {    23,      7,      9,      0,      0, }, /* 594 */
-  {    23,      7,     10,      0,      0, }, /* 595 */
-  {     9,      4,      2,      0,      0, }, /* 596 */
-  {     9,      3,     12,      0,      0, }, /* 597 */
-  {    25,     25,     12,      0,      0, }, /* 598 */
-  {     0,     24,     12,      0,      0, }, /* 599 */
-  {     9,      6,      3,      0,      0, }, /* 600 */
-  {    35,      7,     12,      0,      0, }, /* 601 */
-  {    19,     14,     12,      0,      0, }, /* 602 */
-  {    19,     15,     12,      0,      0, }, /* 603 */
-  {    19,     26,     12,      0,      0, }, /* 604 */
-  {    70,      7,     12,      0,      0, }, /* 605 */
-  {    66,      7,     12,      0,      0, }, /* 606 */
-  {    41,      7,     12,      0,      0, }, /* 607 */
-  {    41,     15,     12,      0,      0, }, /* 608 */
-  {    18,      7,     12,      0,      0, }, /* 609 */
-  {    18,     14,     12,      0,      0, }, /* 610 */
-  {   117,      7,     12,      0,      0, }, /* 611 */
-  {   117,     12,      3,      0,      0, }, /* 612 */
-  {    59,      7,     12,      0,      0, }, /* 613 */
-  {    59,     21,     12,      0,      0, }, /* 614 */
-  {    42,      7,     12,      0,      0, }, /* 615 */
-  {    42,     21,     12,      0,      0, }, /* 616 */
-  {    42,     14,     12,      0,      0, }, /* 617 */
-  {    13,      9,     12,      0,     40, }, /* 618 */
-  {    13,      5,     12,      0,    -40, }, /* 619 */
-  {    46,      7,     12,      0,      0, }, /* 620 */
-  {    44,      7,     12,      0,      0, }, /* 621 */
-  {    44,     13,     12,      0,      0, }, /* 622 */
-  {   135,      9,     12,      0,     40, }, /* 623 */
-  {   135,      5,     12,      0,    -40, }, /* 624 */
-  {   105,      7,     12,      0,      0, }, /* 625 */
-  {   103,      7,     12,      0,      0, }, /* 626 */
-  {   103,     21,     12,      0,      0, }, /* 627 */
-  {   109,      7,     12,      0,      0, }, /* 628 */
-  {    11,      7,     12,      0,      0, }, /* 629 */
-  {    80,      7,     12,      0,      0, }, /* 630 */
-  {    80,     21,     12,      0,      0, }, /* 631 */
-  {    80,     15,     12,      0,      0, }, /* 632 */
-  {   119,      7,     12,      0,      0, }, /* 633 */
-  {   119,     26,     12,      0,      0, }, /* 634 */
-  {   119,     15,     12,      0,      0, }, /* 635 */
-  {   115,      7,     12,      0,      0, }, /* 636 */
-  {   115,     15,     12,      0,      0, }, /* 637 */
-  {   127,      7,     12,      0,      0, }, /* 638 */
-  {   127,     15,     12,      0,      0, }, /* 639 */
-  {    65,      7,     12,      0,      0, }, /* 640 */
-  {    65,     15,     12,      0,      0, }, /* 641 */
-  {    65,     21,     12,      0,      0, }, /* 642 */
-  {    71,      7,     12,      0,      0, }, /* 643 */
-  {    71,     21,     12,      0,      0, }, /* 644 */
-  {    97,      7,     12,      0,      0, }, /* 645 */
-  {    96,      7,     12,      0,      0, }, /* 646 */
-  {    96,     15,     12,      0,      0, }, /* 647 */
-  {    30,      7,     12,      0,      0, }, /* 648 */
-  {    30,     12,      3,      0,      0, }, /* 649 */
-  {    30,     15,     12,      0,      0, }, /* 650 */
-  {    30,     21,     12,      0,      0, }, /* 651 */
-  {    87,      7,     12,      0,      0, }, /* 652 */
-  {    87,     15,     12,      0,      0, }, /* 653 */
-  {    87,     21,     12,      0,      0, }, /* 654 */
-  {   116,      7,     12,      0,      0, }, /* 655 */
-  {   116,     15,     12,      0,      0, }, /* 656 */
-  {   111,      7,     12,      0,      0, }, /* 657 */
-  {   111,     26,     12,      0,      0, }, /* 658 */
-  {   111,     12,      3,      0,      0, }, /* 659 */
-  {   111,     15,     12,      0,      0, }, /* 660 */
-  {   111,     21,     12,      0,      0, }, /* 661 */
-  {    77,      7,     12,      0,      0, }, /* 662 */
-  {    77,     21,     12,      0,      0, }, /* 663 */
-  {    82,      7,     12,      0,      0, }, /* 664 */
-  {    82,     15,     12,      0,      0, }, /* 665 */
-  {    81,      7,     12,      0,      0, }, /* 666 */
-  {    81,     15,     12,      0,      0, }, /* 667 */
-  {   120,      7,     12,      0,      0, }, /* 668 */
-  {   120,     21,     12,      0,      0, }, /* 669 */
-  {   120,     15,     12,      0,      0, }, /* 670 */
-  {    88,      7,     12,      0,      0, }, /* 671 */
-  {   129,      9,     12,      0,     64, }, /* 672 */
-  {   129,      5,     12,      0,    -64, }, /* 673 */
-  {   129,     15,     12,      0,      0, }, /* 674 */
-  {   143,      7,     12,      0,      0, }, /* 675 */
-  {   143,     12,      3,      0,      0, }, /* 676 */
-  {   143,     13,     12,      0,      0, }, /* 677 */
-  {     0,     15,     12,      0,      0, }, /* 678 */
-  {   146,      7,     12,      0,      0, }, /* 679 */
-  {   146,     15,     12,      0,      0, }, /* 680 */
-  {   147,      7,     12,      0,      0, }, /* 681 */
-  {   147,     12,      3,      0,      0, }, /* 682 */
-  {   147,     15,     12,      0,      0, }, /* 683 */
-  {   147,     21,     12,      0,      0, }, /* 684 */
-  {    93,     10,      5,      0,      0, }, /* 685 */
-  {    93,     12,      3,      0,      0, }, /* 686 */
-  {    93,      7,     12,      0,      0, }, /* 687 */
-  {    93,     21,     12,      0,      0, }, /* 688 */
-  {    93,     15,     12,      0,      0, }, /* 689 */
-  {    93,     13,     12,      0,      0, }, /* 690 */
-  {    84,     12,      3,      0,      0, }, /* 691 */
-  {    84,     10,      5,      0,      0, }, /* 692 */
-  {    84,      7,     12,      0,      0, }, /* 693 */
-  {    84,     21,     12,      0,      0, }, /* 694 */
-  {    84,      1,      4,      0,      0, }, /* 695 */
-  {   100,      7,     12,      0,      0, }, /* 696 */
-  {   100,     13,     12,      0,      0, }, /* 697 */
-  {    95,     12,      3,      0,      0, }, /* 698 */
-  {    95,      7,     12,      0,      0, }, /* 699 */
-  {    95,     10,      5,      0,      0, }, /* 700 */
-  {    95,     13,     12,      0,      0, }, /* 701 */
-  {    95,     21,     12,      0,      0, }, /* 702 */
-  {   110,      7,     12,      0,      0, }, /* 703 */
-  {   110,     12,      3,      0,      0, }, /* 704 */
-  {   110,     21,     12,      0,      0, }, /* 705 */
-  {    99,     12,      3,      0,      0, }, /* 706 */
-  {    99,     10,      5,      0,      0, }, /* 707 */
-  {    99,      7,     12,      0,      0, }, /* 708 */
-  {    99,      7,      4,      0,      0, }, /* 709 */
-  {    99,     21,     12,      0,      0, }, /* 710 */
-  {    99,     13,     12,      0,      0, }, /* 711 */
-  {    47,     15,     12,      0,      0, }, /* 712 */
-  {   107,      7,     12,      0,      0, }, /* 713 */
-  {   107,     10,      5,      0,      0, }, /* 714 */
-  {   107,     12,      3,      0,      0, }, /* 715 */
-  {   107,     21,     12,      0,      0, }, /* 716 */
-  {   128,      7,     12,      0,      0, }, /* 717 */
-  {   128,     21,     12,      0,      0, }, /* 718 */
-  {   108,      7,     12,      0,      0, }, /* 719 */
-  {   108,     12,      3,      0,      0, }, /* 720 */
-  {   108,     10,      5,      0,      0, }, /* 721 */
-  {   108,     13,     12,      0,      0, }, /* 722 */
-  {   106,     12,      3,      0,      0, }, /* 723 */
-  {   106,     10,      5,      0,      0, }, /* 724 */
-  {   106,      7,     12,      0,      0, }, /* 725 */
-  {   106,     10,      3,      0,      0, }, /* 726 */
-  {   134,      7,     12,      0,      0, }, /* 727 */
-  {   134,     10,      5,      0,      0, }, /* 728 */
-  {   134,     12,      3,      0,      0, }, /* 729 */
-  {   134,     21,     12,      0,      0, }, /* 730 */
-  {   134,     13,     12,      0,      0, }, /* 731 */
-  {   123,      7,     12,      0,      0, }, /* 732 */
-  {   123,     10,      3,      0,      0, }, /* 733 */
-  {   123,     10,      5,      0,      0, }, /* 734 */
-  {   123,     12,      3,      0,      0, }, /* 735 */
-  {   123,     21,     12,      0,      0, }, /* 736 */
-  {   123,     13,     12,      0,      0, }, /* 737 */
-  {   122,      7,     12,      0,      0, }, /* 738 */
-  {   122,     10,      3,      0,      0, }, /* 739 */
-  {   122,     10,      5,      0,      0, }, /* 740 */
-  {   122,     12,      3,      0,      0, }, /* 741 */
-  {   122,     21,     12,      0,      0, }, /* 742 */
-  {   113,      7,     12,      0,      0, }, /* 743 */
-  {   113,     10,      5,      0,      0, }, /* 744 */
-  {   113,     12,      3,      0,      0, }, /* 745 */
-  {   113,     21,     12,      0,      0, }, /* 746 */
-  {   113,     13,     12,      0,      0, }, /* 747 */
-  {   101,      7,     12,      0,      0, }, /* 748 */
-  {   101,     12,      3,      0,      0, }, /* 749 */
-  {   101,     10,      5,      0,      0, }, /* 750 */
-  {   101,     13,     12,      0,      0, }, /* 751 */
-  {   125,      7,     12,      0,      0, }, /* 752 */
-  {   125,     12,      3,      0,      0, }, /* 753 */
-  {   125,     10,      5,      0,      0, }, /* 754 */
-  {   125,     13,     12,      0,      0, }, /* 755 */
-  {   125,     15,     12,      0,      0, }, /* 756 */
-  {   125,     21,     12,      0,      0, }, /* 757 */
-  {   125,     26,     12,      0,      0, }, /* 758 */
-  {   141,      7,     12,      0,      0, }, /* 759 */
-  {   141,     10,      5,      0,      0, }, /* 760 */
-  {   141,     12,      3,      0,      0, }, /* 761 */
-  {   141,     21,     12,      0,      0, }, /* 762 */
-  {   124,      9,     12,      0,     32, }, /* 763 */
-  {   124,      5,     12,      0,    -32, }, /* 764 */
-  {   124,     13,     12,      0,      0, }, /* 765 */
-  {   124,     15,     12,      0,      0, }, /* 766 */
-  {   124,      7,     12,      0,      0, }, /* 767 */
-  {   140,      7,     12,      0,      0, }, /* 768 */
-  {   140,     12,      3,      0,      0, }, /* 769 */
-  {   140,     10,      5,      0,      0, }, /* 770 */
-  {   140,      7,      4,      0,      0, }, /* 771 */
-  {   140,     21,     12,      0,      0, }, /* 772 */
-  {   139,      7,     12,      0,      0, }, /* 773 */
-  {   139,     12,      3,      0,      0, }, /* 774 */
-  {   139,     10,      5,      0,      0, }, /* 775 */
-  {   139,      7,      4,      0,      0, }, /* 776 */
-  {   139,     21,     12,      0,      0, }, /* 777 */
-  {   121,      7,     12,      0,      0, }, /* 778 */
-  {   132,      7,     12,      0,      0, }, /* 779 */
-  {   132,     10,      5,      0,      0, }, /* 780 */
-  {   132,     12,      3,      0,      0, }, /* 781 */
-  {   132,     21,     12,      0,      0, }, /* 782 */
-  {   132,     13,     12,      0,      0, }, /* 783 */
-  {   132,     15,     12,      0,      0, }, /* 784 */
-  {   133,     21,     12,      0,      0, }, /* 785 */
-  {   133,      7,     12,      0,      0, }, /* 786 */
-  {   133,     12,      3,      0,      0, }, /* 787 */
-  {   133,     10,      5,      0,      0, }, /* 788 */
-  {   137,      7,     12,      0,      0, }, /* 789 */
-  {   137,     12,      3,      0,      0, }, /* 790 */
-  {   137,      7,      4,      0,      0, }, /* 791 */
-  {   137,     13,     12,      0,      0, }, /* 792 */
-  {   142,      7,     12,      0,      0, }, /* 793 */
-  {   142,     10,      5,      0,      0, }, /* 794 */
-  {   142,     12,      3,      0,      0, }, /* 795 */
-  {   142,     13,     12,      0,      0, }, /* 796 */
-  {   144,      7,     12,      0,      0, }, /* 797 */
-  {   144,     12,      3,      0,      0, }, /* 798 */
-  {   144,     10,      5,      0,      0, }, /* 799 */
-  {   144,     21,     12,      0,      0, }, /* 800 */
-  {    62,      7,     12,      0,      0, }, /* 801 */
-  {    62,     14,     12,      0,      0, }, /* 802 */
-  {    62,     21,     12,      0,      0, }, /* 803 */
-  {    79,      7,     12,      0,      0, }, /* 804 */
-  {   126,      7,     12,      0,      0, }, /* 805 */
-  {   114,      7,     12,      0,      0, }, /* 806 */
-  {   114,     13,     12,      0,      0, }, /* 807 */
-  {   114,     21,     12,      0,      0, }, /* 808 */
-  {   102,      7,     12,      0,      0, }, /* 809 */
-  {   102,     12,      3,      0,      0, }, /* 810 */
-  {   102,     21,     12,      0,      0, }, /* 811 */
-  {   118,      7,     12,      0,      0, }, /* 812 */
-  {   118,     12,      3,      0,      0, }, /* 813 */
-  {   118,     21,     12,      0,      0, }, /* 814 */
-  {   118,     26,     12,      0,      0, }, /* 815 */
-  {   118,      6,     12,      0,      0, }, /* 816 */
-  {   118,     13,     12,      0,      0, }, /* 817 */
-  {   118,     15,     12,      0,      0, }, /* 818 */
-  {   145,      9,     12,      0,     32, }, /* 819 */
-  {   145,      5,     12,      0,    -32, }, /* 820 */
-  {   145,     15,     12,      0,      0, }, /* 821 */
-  {   145,     21,     12,      0,      0, }, /* 822 */
-  {    98,      7,     12,      0,      0, }, /* 823 */
-  {    98,     10,      5,      0,      0, }, /* 824 */
-  {    98,     12,      3,      0,      0, }, /* 825 */
-  {    98,      6,     12,      0,      0, }, /* 826 */
-  {   136,      6,     12,      0,      0, }, /* 827 */
-  {   138,      6,     12,      0,      0, }, /* 828 */
-  {   136,      7,     12,      0,      0, }, /* 829 */
-  {   138,      7,     12,      0,      0, }, /* 830 */
-  {   104,      7,     12,      0,      0, }, /* 831 */
-  {   104,     26,     12,      0,      0, }, /* 832 */
-  {   104,     12,      3,      0,      0, }, /* 833 */
-  {   104,     21,     12,      0,      0, }, /* 834 */
-  {     9,     10,      3,      0,      0, }, /* 835 */
-  {    19,     12,      3,      0,      0, }, /* 836 */
-  {   130,     26,     12,      0,      0, }, /* 837 */
-  {   130,     12,      3,      0,      0, }, /* 838 */
-  {   130,     21,     12,      0,      0, }, /* 839 */
-  {    17,     12,      3,      0,      0, }, /* 840 */
-  {   112,      7,     12,      0,      0, }, /* 841 */
-  {   112,     15,     12,      0,      0, }, /* 842 */
-  {   112,     12,      3,      0,      0, }, /* 843 */
-  {   131,      9,     12,      0,     34, }, /* 844 */
-  {   131,      5,     12,      0,    -34, }, /* 845 */
-  {   131,     12,      3,      0,      0, }, /* 846 */
-  {   131,     13,     12,      0,      0, }, /* 847 */
-  {   131,     21,     12,      0,      0, }, /* 848 */
-  {     9,      2,     14,      0,      0, }, /* 849 */
-  {     9,     26,     11,      0,      0, }, /* 850 */
-  {    26,     26,     12,      0,      0, }, /* 851 */
-  {     9,     24,      3,      0,      0, }, /* 852 */
-  {     9,      1,      3,      0,      0, }, /* 853 */
+  {    10,      0,      2,      0,      0, }, /*   0 */
+  {    10,      0,      1,      0,      0, }, /*   1 */
+  {    10,      0,      0,      0,      0, }, /*   2 */
+  {    10,     29,     12,      0,      0, }, /*   3 */
+  {    10,     21,     12,      0,      0, }, /*   4 */
+  {    10,     23,     12,      0,      0, }, /*   5 */
+  {    10,     22,     12,      0,      0, }, /*   6 */
+  {    10,     18,     12,      0,      0, }, /*   7 */
+  {    10,     25,     12,      0,      0, }, /*   8 */
+  {    10,     17,     12,      0,      0, }, /*   9 */
+  {    10,     13,     12,      0,      0, }, /*  10 */
+  {    34,      9,     12,      0,     32, }, /*  11 */
+  {    34,      9,     12,    100,     32, }, /*  12 */
+  {    34,      9,     12,      1,     32, }, /*  13 */
+  {    10,     24,     12,      0,      0, }, /*  14 */
+  {    10,     16,     12,      0,      0, }, /*  15 */
+  {    34,      5,     12,      0,    -32, }, /*  16 */
+  {    34,      5,     12,    100,    -32, }, /*  17 */
+  {    34,      5,     12,      1,    -32, }, /*  18 */
+  {    10,     26,     12,      0,      0, }, /*  19 */
+  {    10,     26,     14,      0,      0, }, /*  20 */
+  {    34,      7,     12,      0,      0, }, /*  21 */
+  {    10,     20,     12,      0,      0, }, /*  22 */
+  {    10,      1,      2,      0,      0, }, /*  23 */
+  {    10,     15,     12,      0,      0, }, /*  24 */
+  {    10,      5,     12,     26,    775, }, /*  25 */
+  {    10,     19,     12,      0,      0, }, /*  26 */
+  {    34,      9,     12,    104,     32, }, /*  27 */
+  {    34,      5,     12,      0,   7615, }, /*  28 */
+  {    34,      5,     12,    104,    -32, }, /*  29 */
+  {    34,      5,     12,      0,    121, }, /*  30 */
+  {    34,      9,     12,      0,      1, }, /*  31 */
+  {    34,      5,     12,      0,     -1, }, /*  32 */
+  {    34,      9,     12,      0,      0, }, /*  33 */
+  {    34,      5,     12,      0,      0, }, /*  34 */
+  {    34,      9,     12,      0,   -121, }, /*  35 */
+  {    34,      5,     12,      1,   -268, }, /*  36 */
+  {    34,      5,     12,      0,    195, }, /*  37 */
+  {    34,      9,     12,      0,    210, }, /*  38 */
+  {    34,      9,     12,      0,    206, }, /*  39 */
+  {    34,      9,     12,      0,    205, }, /*  40 */
+  {    34,      9,     12,      0,     79, }, /*  41 */
+  {    34,      9,     12,      0,    202, }, /*  42 */
+  {    34,      9,     12,      0,    203, }, /*  43 */
+  {    34,      9,     12,      0,    207, }, /*  44 */
+  {    34,      5,     12,      0,     97, }, /*  45 */
+  {    34,      9,     12,      0,    211, }, /*  46 */
+  {    34,      9,     12,      0,    209, }, /*  47 */
+  {    34,      5,     12,      0,    163, }, /*  48 */
+  {    34,      9,     12,      0,    213, }, /*  49 */
+  {    34,      5,     12,      0,    130, }, /*  50 */
+  {    34,      9,     12,      0,    214, }, /*  51 */
+  {    34,      9,     12,      0,    218, }, /*  52 */
+  {    34,      9,     12,      0,    217, }, /*  53 */
+  {    34,      9,     12,      0,    219, }, /*  54 */
+  {    34,      5,     12,      0,     56, }, /*  55 */
+  {    34,      9,     12,      5,      2, }, /*  56 */
+  {    34,      8,     12,      5,      1, }, /*  57 */
+  {    34,      5,     12,      5,     -2, }, /*  58 */
+  {    34,      9,     12,      9,      2, }, /*  59 */
+  {    34,      8,     12,      9,      1, }, /*  60 */
+  {    34,      5,     12,      9,     -2, }, /*  61 */
+  {    34,      9,     12,     13,      2, }, /*  62 */
+  {    34,      8,     12,     13,      1, }, /*  63 */
+  {    34,      5,     12,     13,     -2, }, /*  64 */
+  {    34,      5,     12,      0,    -79, }, /*  65 */
+  {    34,      9,     12,     17,      2, }, /*  66 */
+  {    34,      8,     12,     17,      1, }, /*  67 */
+  {    34,      5,     12,     17,     -2, }, /*  68 */
+  {    34,      9,     12,      0,    -97, }, /*  69 */
+  {    34,      9,     12,      0,    -56, }, /*  70 */
+  {    34,      9,     12,      0,   -130, }, /*  71 */
+  {    34,      9,     12,      0,  10795, }, /*  72 */
+  {    34,      9,     12,      0,   -163, }, /*  73 */
+  {    34,      9,     12,      0,  10792, }, /*  74 */
+  {    34,      5,     12,      0,  10815, }, /*  75 */
+  {    34,      9,     12,      0,   -195, }, /*  76 */
+  {    34,      9,     12,      0,     69, }, /*  77 */
+  {    34,      9,     12,      0,     71, }, /*  78 */
+  {    34,      5,     12,      0,  10783, }, /*  79 */
+  {    34,      5,     12,      0,  10780, }, /*  80 */
+  {    34,      5,     12,      0,  10782, }, /*  81 */
+  {    34,      5,     12,      0,   -210, }, /*  82 */
+  {    34,      5,     12,      0,   -206, }, /*  83 */
+  {    34,      5,     12,      0,   -205, }, /*  84 */
+  {    34,      5,     12,      0,   -202, }, /*  85 */
+  {    34,      5,     12,      0,   -203, }, /*  86 */
+  {    34,      5,     12,      0,  42319, }, /*  87 */
+  {    34,      5,     12,      0,  42315, }, /*  88 */
+  {    34,      5,     12,      0,   -207, }, /*  89 */
+  {    34,      5,     12,      0,  42280, }, /*  90 */
+  {    34,      5,     12,      0,  42308, }, /*  91 */
+  {    34,      5,     12,      0,   -209, }, /*  92 */
+  {    34,      5,     12,      0,   -211, }, /*  93 */
+  {    34,      5,     12,      0,  10743, }, /*  94 */
+  {    34,      5,     12,      0,  42305, }, /*  95 */
+  {    34,      5,     12,      0,  10749, }, /*  96 */
+  {    34,      5,     12,      0,   -213, }, /*  97 */
+  {    34,      5,     12,      0,   -214, }, /*  98 */
+  {    34,      5,     12,      0,  10727, }, /*  99 */
+  {    34,      5,     12,      0,   -218, }, /* 100 */
+  {    34,      5,     12,      0,  42282, }, /* 101 */
+  {    34,      5,     12,      0,    -69, }, /* 102 */
+  {    34,      5,     12,      0,   -217, }, /* 103 */
+  {    34,      5,     12,      0,    -71, }, /* 104 */
+  {    34,      5,     12,      0,   -219, }, /* 105 */
+  {    34,      5,     12,      0,  42261, }, /* 106 */
+  {    34,      5,     12,      0,  42258, }, /* 107 */
+  {    34,      6,     12,      0,      0, }, /* 108 */
+  {    10,      6,     12,      0,      0, }, /* 109 */
+  {     4,     24,     12,      0,      0, }, /* 110 */
+  {    28,     12,      3,      0,      0, }, /* 111 */
+  {    28,     12,      3,     21,    116, }, /* 112 */
+  {    20,      9,     12,      0,      1, }, /* 113 */
+  {    20,      5,     12,      0,     -1, }, /* 114 */
+  {    20,     24,     12,      0,      0, }, /* 115 */
+  {     0,      2,     12,      0,      0, }, /* 116 */
+  {    20,      6,     12,      0,      0, }, /* 117 */
+  {    20,      5,     12,      0,    130, }, /* 118 */
+  {    20,      9,     12,      0,    116, }, /* 119 */
+  {    20,      9,     12,      0,     38, }, /* 120 */
+  {    20,      9,     12,      0,     37, }, /* 121 */
+  {    20,      9,     12,      0,     64, }, /* 122 */
+  {    20,      9,     12,      0,     63, }, /* 123 */
+  {    20,      5,     12,      0,      0, }, /* 124 */
+  {    20,      9,     12,      0,     32, }, /* 125 */
+  {    20,      9,     12,     34,     32, }, /* 126 */
+  {    20,      9,     12,     59,     32, }, /* 127 */
+  {    20,      9,     12,     38,     32, }, /* 128 */
+  {    20,      9,     12,     21,     32, }, /* 129 */
+  {    20,      9,     12,     51,     32, }, /* 130 */
+  {    20,      9,     12,     26,     32, }, /* 131 */
+  {    20,      9,     12,     47,     32, }, /* 132 */
+  {    20,      9,     12,     55,     32, }, /* 133 */
+  {    20,      9,     12,     30,     32, }, /* 134 */
+  {    20,      9,     12,     43,     32, }, /* 135 */
+  {    20,      9,     12,     96,     32, }, /* 136 */
+  {    20,      5,     12,      0,    -38, }, /* 137 */
+  {    20,      5,     12,      0,    -37, }, /* 138 */
+  {    20,      5,     12,      0,    -32, }, /* 139 */
+  {    20,      5,     12,     34,    -32, }, /* 140 */
+  {    20,      5,     12,     59,    -32, }, /* 141 */
+  {    20,      5,     12,     38,    -32, }, /* 142 */
+  {    20,      5,     12,     21,   -116, }, /* 143 */
+  {    20,      5,     12,     51,    -32, }, /* 144 */
+  {    20,      5,     12,     26,   -775, }, /* 145 */
+  {    20,      5,     12,     47,    -32, }, /* 146 */
+  {    20,      5,     12,     55,    -32, }, /* 147 */
+  {    20,      5,     12,     30,      1, }, /* 148 */
+  {    20,      5,     12,     30,    -32, }, /* 149 */
+  {    20,      5,     12,     43,    -32, }, /* 150 */
+  {    20,      5,     12,     96,    -32, }, /* 151 */
+  {    20,      5,     12,      0,    -64, }, /* 152 */
+  {    20,      5,     12,      0,    -63, }, /* 153 */
+  {    20,      9,     12,      0,      8, }, /* 154 */
+  {    20,      5,     12,     34,    -30, }, /* 155 */
+  {    20,      5,     12,     38,    -25, }, /* 156 */
+  {    20,      9,     12,      0,      0, }, /* 157 */
+  {    20,      5,     12,     43,    -15, }, /* 158 */
+  {    20,      5,     12,     47,    -22, }, /* 159 */
+  {    20,      5,     12,      0,     -8, }, /* 160 */
+  {    11,      9,     12,      0,      1, }, /* 161 */
+  {    11,      5,     12,      0,     -1, }, /* 162 */
+  {    20,      5,     12,     51,    -54, }, /* 163 */
+  {    20,      5,     12,     55,    -48, }, /* 164 */
+  {    20,      5,     12,      0,      7, }, /* 165 */
+  {    20,      5,     12,      0,   -116, }, /* 166 */
+  {    20,      9,     12,     38,    -60, }, /* 167 */
+  {    20,      5,     12,     59,    -64, }, /* 168 */
+  {    20,     25,     12,      0,      0, }, /* 169 */
+  {    20,      9,     12,      0,     -7, }, /* 170 */
+  {    20,      9,     12,      0,   -130, }, /* 171 */
+  {    13,      9,     12,      0,     80, }, /* 172 */
+  {    13,      9,     12,      0,     32, }, /* 173 */
+  {    13,      9,     12,     63,     32, }, /* 174 */
+  {    13,      9,     12,     67,     32, }, /* 175 */
+  {    13,      9,     12,     71,     32, }, /* 176 */
+  {    13,      9,     12,     75,     32, }, /* 177 */
+  {    13,      9,     12,     79,     32, }, /* 178 */
+  {    13,      9,     12,     84,     32, }, /* 179 */
+  {    13,      5,     12,      0,    -32, }, /* 180 */
+  {    13,      5,     12,     63,    -32, }, /* 181 */
+  {    13,      5,     12,     67,    -32, }, /* 182 */
+  {    13,      5,     12,     71,    -32, }, /* 183 */
+  {    13,      5,     12,     75,    -32, }, /* 184 */
+  {    13,      5,     12,     79,    -32, }, /* 185 */
+  {    13,      5,     12,     84,    -32, }, /* 186 */
+  {    13,      5,     12,      0,    -80, }, /* 187 */
+  {    13,      9,     12,      0,      1, }, /* 188 */
+  {    13,      5,     12,      0,     -1, }, /* 189 */
+  {    13,      9,     12,     88,      1, }, /* 190 */
+  {    13,      5,     12,     88,     -1, }, /* 191 */
+  {    13,     26,     12,      0,      0, }, /* 192 */
+  {    13,     12,      3,      0,      0, }, /* 193 */
+  {    13,     11,      3,      0,      0, }, /* 194 */
+  {    13,      9,     12,      0,     15, }, /* 195 */
+  {    13,      5,     12,      0,    -15, }, /* 196 */
+  {     2,      9,     12,      0,     48, }, /* 197 */
+  {     2,      6,     12,      0,      0, }, /* 198 */
+  {     2,     21,     12,      0,      0, }, /* 199 */
+  {     2,      5,     12,      0,      0, }, /* 200 */
+  {     2,      5,     12,      0,    -48, }, /* 201 */
+  {     2,     17,     12,      0,      0, }, /* 202 */
+  {     2,     26,     12,      0,      0, }, /* 203 */
+  {     2,     23,     12,      0,      0, }, /* 204 */
+  {    26,     12,      3,      0,      0, }, /* 205 */
+  {    26,     17,     12,      0,      0, }, /* 206 */
+  {    26,     21,     12,      0,      0, }, /* 207 */
+  {    26,      7,     12,      0,      0, }, /* 208 */
+  {     1,      1,      4,      0,      0, }, /* 209 */
+  {    10,      1,      4,      0,      0, }, /* 210 */
+  {     1,     25,     12,      0,      0, }, /* 211 */
+  {     1,     21,     12,      0,      0, }, /* 212 */
+  {     1,     23,     12,      0,      0, }, /* 213 */
+  {     1,     26,     12,      0,      0, }, /* 214 */
+  {     1,     12,      3,      0,      0, }, /* 215 */
+  {     1,      1,      2,      0,      0, }, /* 216 */
+  {     1,      7,     12,      0,      0, }, /* 217 */
+  {     1,     13,     12,      0,      0, }, /* 218 */
+  {     1,      6,     12,      0,      0, }, /* 219 */
+  {    50,     21,     12,      0,      0, }, /* 220 */
+  {    50,      1,      4,      0,      0, }, /* 221 */
+  {    50,      7,     12,      0,      0, }, /* 222 */
+  {    50,     12,      3,      0,      0, }, /* 223 */
+  {    56,      7,     12,      0,      0, }, /* 224 */
+  {    56,     12,      3,      0,      0, }, /* 225 */
+  {    64,     13,     12,      0,      0, }, /* 226 */
+  {    64,      7,     12,      0,      0, }, /* 227 */
+  {    64,     12,      3,      0,      0, }, /* 228 */
+  {    64,      6,     12,      0,      0, }, /* 229 */
+  {    64,     26,     12,      0,      0, }, /* 230 */
+  {    64,     21,     12,      0,      0, }, /* 231 */
+  {    64,     23,     12,      0,      0, }, /* 232 */
+  {    90,      7,     12,      0,      0, }, /* 233 */
+  {    90,     12,      3,      0,      0, }, /* 234 */
+  {    90,      6,     12,      0,      0, }, /* 235 */
+  {    90,     21,     12,      0,      0, }, /* 236 */
+  {    95,      7,     12,      0,      0, }, /* 237 */
+  {    95,     12,      3,      0,      0, }, /* 238 */
+  {    95,     21,     12,      0,      0, }, /* 239 */
+  {    15,     12,      3,      0,      0, }, /* 240 */
+  {    15,     10,      5,      0,      0, }, /* 241 */
+  {    15,      7,     12,      0,      0, }, /* 242 */
+  {    15,     13,     12,      0,      0, }, /* 243 */
+  {    15,     21,     12,      0,      0, }, /* 244 */
+  {    15,      6,     12,      0,      0, }, /* 245 */
+  {     3,      7,     12,      0,      0, }, /* 246 */
+  {     3,     12,      3,      0,      0, }, /* 247 */
+  {     3,     10,      5,      0,      0, }, /* 248 */
+  {     3,     10,      3,      0,      0, }, /* 249 */
+  {     3,     13,     12,      0,      0, }, /* 250 */
+  {     3,     23,     12,      0,      0, }, /* 251 */
+  {     3,     15,     12,      0,      0, }, /* 252 */
+  {     3,     26,     12,      0,      0, }, /* 253 */
+  {     3,     21,     12,      0,      0, }, /* 254 */
+  {    22,     12,      3,      0,      0, }, /* 255 */
+  {    22,     10,      5,      0,      0, }, /* 256 */
+  {    22,      7,     12,      0,      0, }, /* 257 */
+  {    22,     13,     12,      0,      0, }, /* 258 */
+  {    22,     21,     12,      0,      0, }, /* 259 */
+  {    21,     12,      3,      0,      0, }, /* 260 */
+  {    21,     10,      5,      0,      0, }, /* 261 */
+  {    21,      7,     12,      0,      0, }, /* 262 */
+  {    21,     13,     12,      0,      0, }, /* 263 */
+  {    21,     21,     12,      0,      0, }, /* 264 */
+  {    21,     23,     12,      0,      0, }, /* 265 */
+  {    44,     12,      3,      0,      0, }, /* 266 */
+  {    44,     10,      5,      0,      0, }, /* 267 */
+  {    44,      7,     12,      0,      0, }, /* 268 */
+  {    44,     10,      3,      0,      0, }, /* 269 */
+  {    44,     13,     12,      0,      0, }, /* 270 */
+  {    44,     26,     12,      0,      0, }, /* 271 */
+  {    44,     15,     12,      0,      0, }, /* 272 */
+  {    54,     12,      3,      0,      0, }, /* 273 */
+  {    54,      7,     12,      0,      0, }, /* 274 */
+  {    54,     10,      3,      0,      0, }, /* 275 */
+  {    54,     10,      5,      0,      0, }, /* 276 */
+  {    54,     13,     12,      0,      0, }, /* 277 */
+  {    54,     15,     12,      0,      0, }, /* 278 */
+  {    54,     26,     12,      0,      0, }, /* 279 */
+  {    54,     23,     12,      0,      0, }, /* 280 */
+  {    55,     12,      3,      0,      0, }, /* 281 */
+  {    55,     10,      5,      0,      0, }, /* 282 */
+  {    55,      7,     12,      0,      0, }, /* 283 */
+  {    55,     13,     12,      0,      0, }, /* 284 */
+  {    55,     15,     12,      0,      0, }, /* 285 */
+  {    55,     26,     12,      0,      0, }, /* 286 */
+  {    29,      7,     12,      0,      0, }, /* 287 */
+  {    29,     12,      3,      0,      0, }, /* 288 */
+  {    29,     10,      5,      0,      0, }, /* 289 */
+  {    29,     21,     12,      0,      0, }, /* 290 */
+  {    29,     10,      3,      0,      0, }, /* 291 */
+  {    29,     13,     12,      0,      0, }, /* 292 */
+  {    37,     12,      3,      0,      0, }, /* 293 */
+  {    37,     10,      5,      0,      0, }, /* 294 */
+  {    37,      7,     12,      0,      0, }, /* 295 */
+  {    37,     10,      3,      0,      0, }, /* 296 */
+  {    37,      7,      4,      0,      0, }, /* 297 */
+  {    37,     26,     12,      0,      0, }, /* 298 */
+  {    37,     15,     12,      0,      0, }, /* 299 */
+  {    37,     13,     12,      0,      0, }, /* 300 */
+  {    48,     10,      5,      0,      0, }, /* 301 */
+  {    48,      7,     12,      0,      0, }, /* 302 */
+  {    48,     12,      3,      0,      0, }, /* 303 */
+  {    48,     10,      3,      0,      0, }, /* 304 */
+  {    48,     13,     12,      0,      0, }, /* 305 */
+  {    48,     21,     12,      0,      0, }, /* 306 */
+  {    57,      7,     12,      0,      0, }, /* 307 */
+  {    57,     12,      3,      0,      0, }, /* 308 */
+  {    57,      7,      5,      0,      0, }, /* 309 */
+  {    57,      6,     12,      0,      0, }, /* 310 */
+  {    57,     21,     12,      0,      0, }, /* 311 */
+  {    57,     13,     12,      0,      0, }, /* 312 */
+  {    33,      7,     12,      0,      0, }, /* 313 */
+  {    33,     12,      3,      0,      0, }, /* 314 */
+  {    33,      7,      5,      0,      0, }, /* 315 */
+  {    33,      6,     12,      0,      0, }, /* 316 */
+  {    33,     13,     12,      0,      0, }, /* 317 */
+  {    58,      7,     12,      0,      0, }, /* 318 */
+  {    58,     26,     12,      0,      0, }, /* 319 */
+  {    58,     21,     12,      0,      0, }, /* 320 */
+  {    58,     12,      3,      0,      0, }, /* 321 */
+  {    58,     13,     12,      0,      0, }, /* 322 */
+  {    58,     15,     12,      0,      0, }, /* 323 */
+  {    58,     22,     12,      0,      0, }, /* 324 */
+  {    58,     18,     12,      0,      0, }, /* 325 */
+  {    58,     10,      5,      0,      0, }, /* 326 */
+  {    39,      7,     12,      0,      0, }, /* 327 */
+  {    39,     10,     12,      0,      0, }, /* 328 */
+  {    39,     12,      3,      0,      0, }, /* 329 */
+  {    39,     10,      5,      0,      0, }, /* 330 */
+  {    39,     13,     12,      0,      0, }, /* 331 */
+  {    39,     21,     12,      0,      0, }, /* 332 */
+  {    39,     26,     12,      0,      0, }, /* 333 */
+  {    17,      9,     12,      0,   7264, }, /* 334 */
+  {    17,      5,     12,      0,   3008, }, /* 335 */
+  {    17,      6,     12,      0,      0, }, /* 336 */
+  {    24,      7,      6,      0,      0, }, /* 337 */
+  {    24,      7,      7,      0,      0, }, /* 338 */
+  {    24,      7,      8,      0,      0, }, /* 339 */
+  {    16,      7,     12,      0,      0, }, /* 340 */
+  {    16,     12,      3,      0,      0, }, /* 341 */
+  {    16,     21,     12,      0,      0, }, /* 342 */
+  {    16,     15,     12,      0,      0, }, /* 343 */
+  {    16,     26,     12,      0,      0, }, /* 344 */
+  {     9,      9,     12,      0,  38864, }, /* 345 */
+  {     9,      9,     12,      0,      8, }, /* 346 */
+  {     9,      5,     12,      0,     -8, }, /* 347 */
+  {     8,     17,     12,      0,      0, }, /* 348 */
+  {     8,      7,     12,      0,      0, }, /* 349 */
+  {     8,     21,     12,      0,      0, }, /* 350 */
+  {    41,     29,     12,      0,      0, }, /* 351 */
+  {    41,      7,     12,      0,      0, }, /* 352 */
+  {    41,     22,     12,      0,      0, }, /* 353 */
+  {    41,     18,     12,      0,      0, }, /* 354 */
+  {    46,      7,     12,      0,      0, }, /* 355 */
+  {    46,     14,     12,      0,      0, }, /* 356 */
+  {    51,      7,     12,      0,      0, }, /* 357 */
+  {    51,     12,      3,      0,      0, }, /* 358 */
+  {    25,      7,     12,      0,      0, }, /* 359 */
+  {    25,     12,      3,      0,      0, }, /* 360 */
+  {     7,      7,     12,      0,      0, }, /* 361 */
+  {     7,     12,      3,      0,      0, }, /* 362 */
+  {    52,      7,     12,      0,      0, }, /* 363 */
+  {    52,     12,      3,      0,      0, }, /* 364 */
+  {    32,      7,     12,      0,      0, }, /* 365 */
+  {    32,     12,      3,      0,      0, }, /* 366 */
+  {    32,     10,      5,      0,      0, }, /* 367 */
+  {    32,     21,     12,      0,      0, }, /* 368 */
+  {    32,      6,     12,      0,      0, }, /* 369 */
+  {    32,     23,     12,      0,      0, }, /* 370 */
+  {    32,     13,     12,      0,      0, }, /* 371 */
+  {    32,     15,     12,      0,      0, }, /* 372 */
+  {    38,     21,     12,      0,      0, }, /* 373 */
+  {    38,     17,     12,      0,      0, }, /* 374 */
+  {    38,     12,      3,      0,      0, }, /* 375 */
+  {    38,      1,      2,      0,      0, }, /* 376 */
+  {    38,     13,     12,      0,      0, }, /* 377 */
+  {    38,      7,     12,      0,      0, }, /* 378 */
+  {    38,      6,     12,      0,      0, }, /* 379 */
+  {    35,      7,     12,      0,      0, }, /* 380 */
+  {    35,     12,      3,      0,      0, }, /* 381 */
+  {    35,     10,      5,      0,      0, }, /* 382 */
+  {    35,     26,     12,      0,      0, }, /* 383 */
+  {    35,     21,     12,      0,      0, }, /* 384 */
+  {    35,     13,     12,      0,      0, }, /* 385 */
+  {    53,      7,     12,      0,      0, }, /* 386 */
+  {    40,      7,     12,      0,      0, }, /* 387 */
+  {    40,     13,     12,      0,      0, }, /* 388 */
+  {    40,     15,     12,      0,      0, }, /* 389 */
+  {    40,     26,     12,      0,      0, }, /* 390 */
+  {    32,     26,     12,      0,      0, }, /* 391 */
+  {     6,      7,     12,      0,      0, }, /* 392 */
+  {     6,     12,      3,      0,      0, }, /* 393 */
+  {     6,     10,      5,      0,      0, }, /* 394 */
+  {     6,     21,     12,      0,      0, }, /* 395 */
+  {    91,      7,     12,      0,      0, }, /* 396 */
+  {    91,     10,      5,      0,      0, }, /* 397 */
+  {    91,     12,      3,      0,      0, }, /* 398 */
+  {    91,     10,     12,      0,      0, }, /* 399 */
+  {    91,     13,     12,      0,      0, }, /* 400 */
+  {    91,     21,     12,      0,      0, }, /* 401 */
+  {    91,      6,     12,      0,      0, }, /* 402 */
+  {    28,     11,      3,      0,      0, }, /* 403 */
+  {    62,     12,      3,      0,      0, }, /* 404 */
+  {    62,     10,      5,      0,      0, }, /* 405 */
+  {    62,      7,     12,      0,      0, }, /* 406 */
+  {    62,     13,     12,      0,      0, }, /* 407 */
+  {    62,     21,     12,      0,      0, }, /* 408 */
+  {    62,     26,     12,      0,      0, }, /* 409 */
+  {    76,     12,      3,      0,      0, }, /* 410 */
+  {    76,     10,      5,      0,      0, }, /* 411 */
+  {    76,      7,     12,      0,      0, }, /* 412 */
+  {    76,     13,     12,      0,      0, }, /* 413 */
+  {    93,      7,     12,      0,      0, }, /* 414 */
+  {    93,     12,      3,      0,      0, }, /* 415 */
+  {    93,     10,      5,      0,      0, }, /* 416 */
+  {    93,     21,     12,      0,      0, }, /* 417 */
+  {    70,      7,     12,      0,      0, }, /* 418 */
+  {    70,     10,      5,      0,      0, }, /* 419 */
+  {    70,     12,      3,      0,      0, }, /* 420 */
+  {    70,     21,     12,      0,      0, }, /* 421 */
+  {    70,     13,     12,      0,      0, }, /* 422 */
+  {    73,     13,     12,      0,      0, }, /* 423 */
+  {    73,      7,     12,      0,      0, }, /* 424 */
+  {    73,      6,     12,      0,      0, }, /* 425 */
+  {    73,     21,     12,      0,      0, }, /* 426 */
+  {    13,      5,     12,     63,  -6222, }, /* 427 */
+  {    13,      5,     12,     67,  -6221, }, /* 428 */
+  {    13,      5,     12,     71,  -6212, }, /* 429 */
+  {    13,      5,     12,     75,  -6210, }, /* 430 */
+  {    13,      5,     12,     79,  -6210, }, /* 431 */
+  {    13,      5,     12,     79,  -6211, }, /* 432 */
+  {    13,      5,     12,     84,  -6204, }, /* 433 */
+  {    13,      5,     12,     88,  -6180, }, /* 434 */
+  {    13,      5,     12,    108,  35267, }, /* 435 */
+  {    17,      9,     12,      0,  -3008, }, /* 436 */
+  {    76,     21,     12,      0,      0, }, /* 437 */
+  {    10,     10,      5,      0,      0, }, /* 438 */
+  {    10,      7,     12,      0,      0, }, /* 439 */
+  {    13,      5,     12,      0,      0, }, /* 440 */
+  {    13,      6,     12,      0,      0, }, /* 441 */
+  {    34,      5,     12,      0,  35332, }, /* 442 */
+  {    34,      5,     12,      0,   3814, }, /* 443 */
+  {    34,      9,     12,     92,      1, }, /* 444 */
+  {    34,      5,     12,     92,     -1, }, /* 445 */
+  {    34,      5,     12,     92,    -58, }, /* 446 */
+  {    34,      9,     12,      0,  -7615, }, /* 447 */
+  {    20,      5,     12,      0,      8, }, /* 448 */
+  {    20,      9,     12,      0,     -8, }, /* 449 */
+  {    20,      5,     12,      0,     74, }, /* 450 */
+  {    20,      5,     12,      0,     86, }, /* 451 */
+  {    20,      5,     12,      0,    100, }, /* 452 */
+  {    20,      5,     12,      0,    128, }, /* 453 */
+  {    20,      5,     12,      0,    112, }, /* 454 */
+  {    20,      5,     12,      0,    126, }, /* 455 */
+  {    20,      8,     12,      0,     -8, }, /* 456 */
+  {    20,      5,     12,      0,      9, }, /* 457 */
+  {    20,      9,     12,      0,    -74, }, /* 458 */
+  {    20,      8,     12,      0,     -9, }, /* 459 */
+  {    20,      5,     12,     21,  -7173, }, /* 460 */
+  {    20,      9,     12,      0,    -86, }, /* 461 */
+  {    20,      9,     12,      0,   -100, }, /* 462 */
+  {    20,      9,     12,      0,   -112, }, /* 463 */
+  {    20,      9,     12,      0,   -128, }, /* 464 */
+  {    20,      9,     12,      0,   -126, }, /* 465 */
+  {    28,      1,      3,      0,      0, }, /* 466 */
+  {    28,      1,     13,      0,      0, }, /* 467 */
+  {    10,     27,      2,      0,      0, }, /* 468 */
+  {    10,     28,      2,      0,      0, }, /* 469 */
+  {    10,     21,     14,      0,      0, }, /* 470 */
+  {     0,      2,      2,      0,      0, }, /* 471 */
+  {    10,      9,     12,      0,      0, }, /* 472 */
+  {    10,      5,     12,      0,      0, }, /* 473 */
+  {    20,      9,     12,     96,  -7517, }, /* 474 */
+  {    34,      9,     12,    100,  -8383, }, /* 475 */
+  {    34,      9,     12,    104,  -8262, }, /* 476 */
+  {    34,      9,     12,      0,     28, }, /* 477 */
+  {    10,      5,     14,      0,      0, }, /* 478 */
+  {    34,      5,     12,      0,    -28, }, /* 479 */
+  {    34,     14,     12,      0,     16, }, /* 480 */
+  {    34,     14,     12,      0,    -16, }, /* 481 */
+  {    34,     14,     12,      0,      0, }, /* 482 */
+  {    10,     25,     14,      0,      0, }, /* 483 */
+  {    10,     26,     12,      0,     26, }, /* 484 */
+  {    10,     26,     14,      0,     26, }, /* 485 */
+  {    10,     26,     12,      0,    -26, }, /* 486 */
+  {     5,     26,     12,      0,      0, }, /* 487 */
+  {    18,      9,     12,      0,     48, }, /* 488 */
+  {    18,      5,     12,      0,    -48, }, /* 489 */
+  {    34,      9,     12,      0, -10743, }, /* 490 */
+  {    34,      9,     12,      0,  -3814, }, /* 491 */
+  {    34,      9,     12,      0, -10727, }, /* 492 */
+  {    34,      5,     12,      0, -10795, }, /* 493 */
+  {    34,      5,     12,      0, -10792, }, /* 494 */
+  {    34,      9,     12,      0, -10780, }, /* 495 */
+  {    34,      9,     12,      0, -10749, }, /* 496 */
+  {    34,      9,     12,      0, -10783, }, /* 497 */
+  {    34,      9,     12,      0, -10782, }, /* 498 */
+  {    34,      9,     12,      0, -10815, }, /* 499 */
+  {    11,      5,     12,      0,      0, }, /* 500 */
+  {    11,     26,     12,      0,      0, }, /* 501 */
+  {    11,     12,      3,      0,      0, }, /* 502 */
+  {    11,     21,     12,      0,      0, }, /* 503 */
+  {    11,     15,     12,      0,      0, }, /* 504 */
+  {    17,      5,     12,      0,  -7264, }, /* 505 */
+  {    59,      7,     12,      0,      0, }, /* 506 */
+  {    59,      6,     12,      0,      0, }, /* 507 */
+  {    59,     21,     12,      0,      0, }, /* 508 */
+  {    59,     12,      3,      0,      0, }, /* 509 */
+  {    23,     26,     12,      0,      0, }, /* 510 */
+  {    23,      6,     12,      0,      0, }, /* 511 */
+  {    23,     14,     12,      0,      0, }, /* 512 */
+  {    24,     10,      3,      0,      0, }, /* 513 */
+  {    10,     17,     14,      0,      0, }, /* 514 */
+  {    27,      7,     12,      0,      0, }, /* 515 */
+  {    27,      6,     12,      0,      0, }, /* 516 */
+  {    30,      7,     12,      0,      0, }, /* 517 */
+  {    30,      6,     12,      0,      0, }, /* 518 */
+  {     4,      7,     12,      0,      0, }, /* 519 */
+  {    24,      7,     12,      0,      0, }, /* 520 */
+  {    24,     26,     12,      0,      0, }, /* 521 */
+  {    30,     26,     12,      0,      0, }, /* 522 */
+  {    23,      7,     12,      0,      0, }, /* 523 */
+  {    61,      7,     12,      0,      0, }, /* 524 */
+  {    61,      6,     12,      0,      0, }, /* 525 */
+  {    61,     26,     12,      0,      0, }, /* 526 */
+  {    86,      7,     12,      0,      0, }, /* 527 */
+  {    86,      6,     12,      0,      0, }, /* 528 */
+  {    86,     21,     12,      0,      0, }, /* 529 */
+  {    77,      7,     12,      0,      0, }, /* 530 */
+  {    77,      6,     12,      0,      0, }, /* 531 */
+  {    77,     21,     12,      0,      0, }, /* 532 */
+  {    77,     13,     12,      0,      0, }, /* 533 */
+  {    13,      9,     12,    108,      1, }, /* 534 */
+  {    13,      5,     12,    108, -35267, }, /* 535 */
+  {    13,      7,     12,      0,      0, }, /* 536 */
+  {    13,     21,     12,      0,      0, }, /* 537 */
+  {    79,      7,     12,      0,      0, }, /* 538 */
+  {    79,     14,     12,      0,      0, }, /* 539 */
+  {    79,     12,      3,      0,      0, }, /* 540 */
+  {    79,     21,     12,      0,      0, }, /* 541 */
+  {    34,      9,     12,      0, -35332, }, /* 542 */
+  {    34,      9,     12,      0, -42280, }, /* 543 */
+  {    34,      9,     12,      0, -42308, }, /* 544 */
+  {    34,      9,     12,      0, -42319, }, /* 545 */
+  {    34,      9,     12,      0, -42315, }, /* 546 */
+  {    34,      9,     12,      0, -42305, }, /* 547 */
+  {    34,      9,     12,      0, -42258, }, /* 548 */
+  {    34,      9,     12,      0, -42282, }, /* 549 */
+  {    34,      9,     12,      0, -42261, }, /* 550 */
+  {    34,      9,     12,      0,    928, }, /* 551 */
+  {    49,      7,     12,      0,      0, }, /* 552 */
+  {    49,     12,      3,      0,      0, }, /* 553 */
+  {    49,     10,      5,      0,      0, }, /* 554 */
+  {    49,     26,     12,      0,      0, }, /* 555 */
+  {    65,      7,     12,      0,      0, }, /* 556 */
+  {    65,     21,     12,      0,      0, }, /* 557 */
+  {    75,     10,      5,      0,      0, }, /* 558 */
+  {    75,      7,     12,      0,      0, }, /* 559 */
+  {    75,     12,      3,      0,      0, }, /* 560 */
+  {    75,     21,     12,      0,      0, }, /* 561 */
+  {    75,     13,     12,      0,      0, }, /* 562 */
+  {    69,     13,     12,      0,      0, }, /* 563 */
+  {    69,      7,     12,      0,      0, }, /* 564 */
+  {    69,     12,      3,      0,      0, }, /* 565 */
+  {    69,     21,     12,      0,      0, }, /* 566 */
+  {    74,      7,     12,      0,      0, }, /* 567 */
+  {    74,     12,      3,      0,      0, }, /* 568 */
+  {    74,     10,      5,      0,      0, }, /* 569 */
+  {    74,     21,     12,      0,      0, }, /* 570 */
+  {    84,     12,      3,      0,      0, }, /* 571 */
+  {    84,     10,      5,      0,      0, }, /* 572 */
+  {    84,      7,     12,      0,      0, }, /* 573 */
+  {    84,     21,     12,      0,      0, }, /* 574 */
+  {    84,     13,     12,      0,      0, }, /* 575 */
+  {    39,      6,     12,      0,      0, }, /* 576 */
+  {    68,      7,     12,      0,      0, }, /* 577 */
+  {    68,     12,      3,      0,      0, }, /* 578 */
+  {    68,     10,      5,      0,      0, }, /* 579 */
+  {    68,     13,     12,      0,      0, }, /* 580 */
+  {    68,     21,     12,      0,      0, }, /* 581 */
+  {    92,      7,     12,      0,      0, }, /* 582 */
+  {    92,     12,      3,      0,      0, }, /* 583 */
+  {    92,      6,     12,      0,      0, }, /* 584 */
+  {    92,     21,     12,      0,      0, }, /* 585 */
+  {    87,      7,     12,      0,      0, }, /* 586 */
+  {    87,     10,      5,      0,      0, }, /* 587 */
+  {    87,     12,      3,      0,      0, }, /* 588 */
+  {    87,     21,     12,      0,      0, }, /* 589 */
+  {    87,      6,     12,      0,      0, }, /* 590 */
+  {    34,      5,     12,      0,   -928, }, /* 591 */
+  {     9,      5,     12,      0, -38864, }, /* 592 */
+  {    87,     13,     12,      0,      0, }, /* 593 */
+  {    24,      7,      9,      0,      0, }, /* 594 */
+  {    24,      7,     10,      0,      0, }, /* 595 */
+  {     0,      4,      2,      0,      0, }, /* 596 */
+  {     0,      3,     12,      0,      0, }, /* 597 */
+  {    26,     25,     12,      0,      0, }, /* 598 */
+  {     1,     24,     12,      0,      0, }, /* 599 */
+  {    10,      6,      3,      0,      0, }, /* 600 */
+  {    36,      7,     12,      0,      0, }, /* 601 */
+  {    20,     14,     12,      0,      0, }, /* 602 */
+  {    20,     15,     12,      0,      0, }, /* 603 */
+  {    20,     26,     12,      0,      0, }, /* 604 */
+  {    71,      7,     12,      0,      0, }, /* 605 */
+  {    67,      7,     12,      0,      0, }, /* 606 */
+  {    42,      7,     12,      0,      0, }, /* 607 */
+  {    42,     15,     12,      0,      0, }, /* 608 */
+  {    19,      7,     12,      0,      0, }, /* 609 */
+  {    19,     14,     12,      0,      0, }, /* 610 */
+  {   118,      7,     12,      0,      0, }, /* 611 */
+  {   118,     12,      3,      0,      0, }, /* 612 */
+  {    60,      7,     12,      0,      0, }, /* 613 */
+  {    60,     21,     12,      0,      0, }, /* 614 */
+  {    43,      7,     12,      0,      0, }, /* 615 */
+  {    43,     21,     12,      0,      0, }, /* 616 */
+  {    43,     14,     12,      0,      0, }, /* 617 */
+  {    14,      9,     12,      0,     40, }, /* 618 */
+  {    14,      5,     12,      0,    -40, }, /* 619 */
+  {    47,      7,     12,      0,      0, }, /* 620 */
+  {    45,      7,     12,      0,      0, }, /* 621 */
+  {    45,     13,     12,      0,      0, }, /* 622 */
+  {   136,      9,     12,      0,     40, }, /* 623 */
+  {   136,      5,     12,      0,    -40, }, /* 624 */
+  {   106,      7,     12,      0,      0, }, /* 625 */
+  {   104,      7,     12,      0,      0, }, /* 626 */
+  {   104,     21,     12,      0,      0, }, /* 627 */
+  {   110,      7,     12,      0,      0, }, /* 628 */
+  {    12,      7,     12,      0,      0, }, /* 629 */
+  {    81,      7,     12,      0,      0, }, /* 630 */
+  {    81,     21,     12,      0,      0, }, /* 631 */
+  {    81,     15,     12,      0,      0, }, /* 632 */
+  {   120,      7,     12,      0,      0, }, /* 633 */
+  {   120,     26,     12,      0,      0, }, /* 634 */
+  {   120,     15,     12,      0,      0, }, /* 635 */
+  {   116,      7,     12,      0,      0, }, /* 636 */
+  {   116,     15,     12,      0,      0, }, /* 637 */
+  {   128,      7,     12,      0,      0, }, /* 638 */
+  {   128,     15,     12,      0,      0, }, /* 639 */
+  {    66,      7,     12,      0,      0, }, /* 640 */
+  {    66,     15,     12,      0,      0, }, /* 641 */
+  {    66,     21,     12,      0,      0, }, /* 642 */
+  {    72,      7,     12,      0,      0, }, /* 643 */
+  {    72,     21,     12,      0,      0, }, /* 644 */
+  {    98,      7,     12,      0,      0, }, /* 645 */
+  {    97,      7,     12,      0,      0, }, /* 646 */
+  {    97,     15,     12,      0,      0, }, /* 647 */
+  {    31,      7,     12,      0,      0, }, /* 648 */
+  {    31,     12,      3,      0,      0, }, /* 649 */
+  {    31,     15,     12,      0,      0, }, /* 650 */
+  {    31,     21,     12,      0,      0, }, /* 651 */
+  {    88,      7,     12,      0,      0, }, /* 652 */
+  {    88,     15,     12,      0,      0, }, /* 653 */
+  {    88,     21,     12,      0,      0, }, /* 654 */
+  {   117,      7,     12,      0,      0, }, /* 655 */
+  {   117,     15,     12,      0,      0, }, /* 656 */
+  {   112,      7,     12,      0,      0, }, /* 657 */
+  {   112,     26,     12,      0,      0, }, /* 658 */
+  {   112,     12,      3,      0,      0, }, /* 659 */
+  {   112,     15,     12,      0,      0, }, /* 660 */
+  {   112,     21,     12,      0,      0, }, /* 661 */
+  {    78,      7,     12,      0,      0, }, /* 662 */
+  {    78,     21,     12,      0,      0, }, /* 663 */
+  {    83,      7,     12,      0,      0, }, /* 664 */
+  {    83,     15,     12,      0,      0, }, /* 665 */
+  {    82,      7,     12,      0,      0, }, /* 666 */
+  {    82,     15,     12,      0,      0, }, /* 667 */
+  {   121,      7,     12,      0,      0, }, /* 668 */
+  {   121,     21,     12,      0,      0, }, /* 669 */
+  {   121,     15,     12,      0,      0, }, /* 670 */
+  {    89,      7,     12,      0,      0, }, /* 671 */
+  {   130,      9,     12,      0,     64, }, /* 672 */
+  {   130,      5,     12,      0,    -64, }, /* 673 */
+  {   130,     15,     12,      0,      0, }, /* 674 */
+  {   144,      7,     12,      0,      0, }, /* 675 */
+  {   144,     12,      3,      0,      0, }, /* 676 */
+  {   144,     13,     12,      0,      0, }, /* 677 */
+  {     1,     15,     12,      0,      0, }, /* 678 */
+  {   147,      7,     12,      0,      0, }, /* 679 */
+  {   147,     15,     12,      0,      0, }, /* 680 */
+  {   148,      7,     12,      0,      0, }, /* 681 */
+  {   148,     12,      3,      0,      0, }, /* 682 */
+  {   148,     15,     12,      0,      0, }, /* 683 */
+  {   148,     21,     12,      0,      0, }, /* 684 */
+  {    94,     10,      5,      0,      0, }, /* 685 */
+  {    94,     12,      3,      0,      0, }, /* 686 */
+  {    94,      7,     12,      0,      0, }, /* 687 */
+  {    94,     21,     12,      0,      0, }, /* 688 */
+  {    94,     15,     12,      0,      0, }, /* 689 */
+  {    94,     13,     12,      0,      0, }, /* 690 */
+  {    85,     12,      3,      0,      0, }, /* 691 */
+  {    85,     10,      5,      0,      0, }, /* 692 */
+  {    85,      7,     12,      0,      0, }, /* 693 */
+  {    85,     21,     12,      0,      0, }, /* 694 */
+  {    85,      1,      4,      0,      0, }, /* 695 */
+  {   101,      7,     12,      0,      0, }, /* 696 */
+  {   101,     13,     12,      0,      0, }, /* 697 */
+  {    96,     12,      3,      0,      0, }, /* 698 */
+  {    96,      7,     12,      0,      0, }, /* 699 */
+  {    96,     10,      5,      0,      0, }, /* 700 */
+  {    96,     13,     12,      0,      0, }, /* 701 */
+  {    96,     21,     12,      0,      0, }, /* 702 */
+  {   111,      7,     12,      0,      0, }, /* 703 */
+  {   111,     12,      3,      0,      0, }, /* 704 */
+  {   111,     21,     12,      0,      0, }, /* 705 */
+  {   100,     12,      3,      0,      0, }, /* 706 */
+  {   100,     10,      5,      0,      0, }, /* 707 */
+  {   100,      7,     12,      0,      0, }, /* 708 */
+  {   100,      7,      4,      0,      0, }, /* 709 */
+  {   100,     21,     12,      0,      0, }, /* 710 */
+  {   100,     13,     12,      0,      0, }, /* 711 */
+  {    48,     15,     12,      0,      0, }, /* 712 */
+  {   108,      7,     12,      0,      0, }, /* 713 */
+  {   108,     10,      5,      0,      0, }, /* 714 */
+  {   108,     12,      3,      0,      0, }, /* 715 */
+  {   108,     21,     12,      0,      0, }, /* 716 */
+  {   129,      7,     12,      0,      0, }, /* 717 */
+  {   129,     21,     12,      0,      0, }, /* 718 */
+  {   109,      7,     12,      0,      0, }, /* 719 */
+  {   109,     12,      3,      0,      0, }, /* 720 */
+  {   109,     10,      5,      0,      0, }, /* 721 */
+  {   109,     13,     12,      0,      0, }, /* 722 */
+  {   107,     12,      3,      0,      0, }, /* 723 */
+  {   107,     10,      5,      0,      0, }, /* 724 */
+  {   107,      7,     12,      0,      0, }, /* 725 */
+  {   107,     10,      3,      0,      0, }, /* 726 */
+  {   135,      7,     12,      0,      0, }, /* 727 */
+  {   135,     10,      5,      0,      0, }, /* 728 */
+  {   135,     12,      3,      0,      0, }, /* 729 */
+  {   135,     21,     12,      0,      0, }, /* 730 */
+  {   135,     13,     12,      0,      0, }, /* 731 */
+  {   124,      7,     12,      0,      0, }, /* 732 */
+  {   124,     10,      3,      0,      0, }, /* 733 */
+  {   124,     10,      5,      0,      0, }, /* 734 */
+  {   124,     12,      3,      0,      0, }, /* 735 */
+  {   124,     21,     12,      0,      0, }, /* 736 */
+  {   124,     13,     12,      0,      0, }, /* 737 */
+  {   123,      7,     12,      0,      0, }, /* 738 */
+  {   123,     10,      3,      0,      0, }, /* 739 */
+  {   123,     10,      5,      0,      0, }, /* 740 */
+  {   123,     12,      3,      0,      0, }, /* 741 */
+  {   123,     21,     12,      0,      0, }, /* 742 */
+  {   114,      7,     12,      0,      0, }, /* 743 */
+  {   114,     10,      5,      0,      0, }, /* 744 */
+  {   114,     12,      3,      0,      0, }, /* 745 */
+  {   114,     21,     12,      0,      0, }, /* 746 */
+  {   114,     13,     12,      0,      0, }, /* 747 */
+  {   102,      7,     12,      0,      0, }, /* 748 */
+  {   102,     12,      3,      0,      0, }, /* 749 */
+  {   102,     10,      5,      0,      0, }, /* 750 */
+  {   102,     13,     12,      0,      0, }, /* 751 */
+  {   126,      7,     12,      0,      0, }, /* 752 */
+  {   126,     12,      3,      0,      0, }, /* 753 */
+  {   126,     10,      5,      0,      0, }, /* 754 */
+  {   126,     13,     12,      0,      0, }, /* 755 */
+  {   126,     15,     12,      0,      0, }, /* 756 */
+  {   126,     21,     12,      0,      0, }, /* 757 */
+  {   126,     26,     12,      0,      0, }, /* 758 */
+  {   142,      7,     12,      0,      0, }, /* 759 */
+  {   142,     10,      5,      0,      0, }, /* 760 */
+  {   142,     12,      3,      0,      0, }, /* 761 */
+  {   142,     21,     12,      0,      0, }, /* 762 */
+  {   125,      9,     12,      0,     32, }, /* 763 */
+  {   125,      5,     12,      0,    -32, }, /* 764 */
+  {   125,     13,     12,      0,      0, }, /* 765 */
+  {   125,     15,     12,      0,      0, }, /* 766 */
+  {   125,      7,     12,      0,      0, }, /* 767 */
+  {   141,      7,     12,      0,      0, }, /* 768 */
+  {   141,     12,      3,      0,      0, }, /* 769 */
+  {   141,     10,      5,      0,      0, }, /* 770 */
+  {   141,      7,      4,      0,      0, }, /* 771 */
+  {   141,     21,     12,      0,      0, }, /* 772 */
+  {   140,      7,     12,      0,      0, }, /* 773 */
+  {   140,     12,      3,      0,      0, }, /* 774 */
+  {   140,     10,      5,      0,      0, }, /* 775 */
+  {   140,      7,      4,      0,      0, }, /* 776 */
+  {   140,     21,     12,      0,      0, }, /* 777 */
+  {   122,      7,     12,      0,      0, }, /* 778 */
+  {   133,      7,     12,      0,      0, }, /* 779 */
+  {   133,     10,      5,      0,      0, }, /* 780 */
+  {   133,     12,      3,      0,      0, }, /* 781 */
+  {   133,     21,     12,      0,      0, }, /* 782 */
+  {   133,     13,     12,      0,      0, }, /* 783 */
+  {   133,     15,     12,      0,      0, }, /* 784 */
+  {   134,     21,     12,      0,      0, }, /* 785 */
+  {   134,      7,     12,      0,      0, }, /* 786 */
+  {   134,     12,      3,      0,      0, }, /* 787 */
+  {   134,     10,      5,      0,      0, }, /* 788 */
+  {   138,      7,     12,      0,      0, }, /* 789 */
+  {   138,     12,      3,      0,      0, }, /* 790 */
+  {   138,      7,      4,      0,      0, }, /* 791 */
+  {   138,     13,     12,      0,      0, }, /* 792 */
+  {   143,      7,     12,      0,      0, }, /* 793 */
+  {   143,     10,      5,      0,      0, }, /* 794 */
+  {   143,     12,      3,      0,      0, }, /* 795 */
+  {   143,     13,     12,      0,      0, }, /* 796 */
+  {   145,      7,     12,      0,      0, }, /* 797 */
+  {   145,     12,      3,      0,      0, }, /* 798 */
+  {   145,     10,      5,      0,      0, }, /* 799 */
+  {   145,     21,     12,      0,      0, }, /* 800 */
+  {    63,      7,     12,      0,      0, }, /* 801 */
+  {    63,     14,     12,      0,      0, }, /* 802 */
+  {    63,     21,     12,      0,      0, }, /* 803 */
+  {    80,      7,     12,      0,      0, }, /* 804 */
+  {   127,      7,     12,      0,      0, }, /* 805 */
+  {   115,      7,     12,      0,      0, }, /* 806 */
+  {   115,     13,     12,      0,      0, }, /* 807 */
+  {   115,     21,     12,      0,      0, }, /* 808 */
+  {   103,      7,     12,      0,      0, }, /* 809 */
+  {   103,     12,      3,      0,      0, }, /* 810 */
+  {   103,     21,     12,      0,      0, }, /* 811 */
+  {   119,      7,     12,      0,      0, }, /* 812 */
+  {   119,     12,      3,      0,      0, }, /* 813 */
+  {   119,     21,     12,      0,      0, }, /* 814 */
+  {   119,     26,     12,      0,      0, }, /* 815 */
+  {   119,      6,     12,      0,      0, }, /* 816 */
+  {   119,     13,     12,      0,      0, }, /* 817 */
+  {   119,     15,     12,      0,      0, }, /* 818 */
+  {   146,      9,     12,      0,     32, }, /* 819 */
+  {   146,      5,     12,      0,    -32, }, /* 820 */
+  {   146,     15,     12,      0,      0, }, /* 821 */
+  {   146,     21,     12,      0,      0, }, /* 822 */
+  {    99,      7,     12,      0,      0, }, /* 823 */
+  {    99,     10,      5,      0,      0, }, /* 824 */
+  {    99,     12,      3,      0,      0, }, /* 825 */
+  {    99,      6,     12,      0,      0, }, /* 826 */
+  {   137,      6,     12,      0,      0, }, /* 827 */
+  {   139,      6,     12,      0,      0, }, /* 828 */
+  {   137,      7,     12,      0,      0, }, /* 829 */
+  {   139,      7,     12,      0,      0, }, /* 830 */
+  {   105,      7,     12,      0,      0, }, /* 831 */
+  {   105,     26,     12,      0,      0, }, /* 832 */
+  {   105,     12,      3,      0,      0, }, /* 833 */
+  {   105,     21,     12,      0,      0, }, /* 834 */
+  {    10,     10,      3,      0,      0, }, /* 835 */
+  {    20,     12,      3,      0,      0, }, /* 836 */
+  {   131,     26,     12,      0,      0, }, /* 837 */
+  {   131,     12,      3,      0,      0, }, /* 838 */
+  {   131,     21,     12,      0,      0, }, /* 839 */
+  {    18,     12,      3,      0,      0, }, /* 840 */
+  {   113,      7,     12,      0,      0, }, /* 841 */
+  {   113,     15,     12,      0,      0, }, /* 842 */
+  {   113,     12,      3,      0,      0, }, /* 843 */
+  {   132,      9,     12,      0,     34, }, /* 844 */
+  {   132,      5,     12,      0,    -34, }, /* 845 */
+  {   132,     12,      3,      0,      0, }, /* 846 */
+  {   132,     13,     12,      0,      0, }, /* 847 */
+  {   132,     21,     12,      0,      0, }, /* 848 */
+  {     0,      2,     14,      0,      0, }, /* 849 */
+  {    10,     26,     11,      0,      0, }, /* 850 */
+  {    27,     26,     12,      0,      0, }, /* 851 */
+  {    10,     24,      3,      0,      0, }, /* 852 */
+  {    10,      1,      3,      0,      0, }, /* 853 */
 };


const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */

Modified: code/trunk/src/pcre2_ucp.h
===================================================================
--- code/trunk/src/pcre2_ucp.h    2018-09-24 16:23:53 UTC (rev 1018)
+++ code/trunk/src/pcre2_ucp.h    2018-10-02 15:25:58 UTC (rev 1019)
@@ -124,6 +124,7 @@
 /* These are the script identifications. */


enum {
+ ucp_Unknown,
ucp_Arabic,
ucp_Armenian,
ucp_Bengali,

Modified: code/trunk/testdata/testinput12
===================================================================
--- code/trunk/testdata/testinput12    2018-09-24 16:23:53 UTC (rev 1018)
+++ code/trunk/testdata/testinput12    2018-10-02 15:25:58 UTC (rev 1019)
@@ -386,5 +386,16 @@


 /(?<=abc)(|def)/g,utf,replace=<$0>,substitute_callout
     123abcáyzabcdef789abcሴqr
+    
+# A few script run tests in non-UTF mode (but they need Unicode support)


+/^(*script_run:.{4})/
+    \x{3041}\x{30a1}\x{3007}\x{3007}   Hiragana Katakana Han Han
+    \x{30a1}\x{3041}\x{3007}\x{3007}   Katakana Hiragana Han Han
+    \x{1100}\x{2e80}\x{2e80}\x{1101}   Hangul Han Han Hangul
+ 
+/^(*sr:.*)/utf,allow_surrogate_escapes
+    \x{2e80}\x{3105}\x{2e80}\x{30a1}   Han Bopomofo Han Katakana
+    \x{d800}\x{dfff}                   Surrogates (Unknown) \=no_utf_check
+
 # End of testinput12


Modified: code/trunk/testdata/testinput4
===================================================================
--- code/trunk/testdata/testinput4    2018-09-24 16:23:53 UTC (rev 1018)
+++ code/trunk/testdata/testinput4    2018-10-02 15:25:58 UTC (rev 1019)
@@ -2317,5 +2317,96 @@


 /[^\x{100}-\x{ffff}]*[\x80-\xff]/i,utf
     \x{99}\x{99}\x{99}
+    
+# Script run tests


+/^(*script_run:.{4})/utf
+    abcd                               Latin x4
+    \x{2e80}\x{2fa1d}\x{3041}\x{30a1}  Han Han Hiragana Katakana
+    \x{3041}\x{30a1}\x{3007}\x{3007}   Hiragana Katakana Han Han
+    \x{30a1}\x{3041}\x{3007}\x{3007}   Katakana Hiragana Han Han
+    \x{1100}\x{2e80}\x{2e80}\x{1101}   Hangul Han Han Hangul
+    \x{2e80}\x{3105}\x{2e80}\x{3105}   Han Bopomofo Han Bopomofo
+    \x{02ea}\x{2e80}\x{2e80}\x{3105}   Bopomofo-Sk Han Han Bopomofo
+    \x{3105}\x{2e80}\x{2e80}\x{3105}   Bopomofo Han Han Bopomofo
+    \x{0300}cd!                        Inherited Latin Latin Common
+    \x{0391}12\x{03a9}                 Greek Common-digits Greek 
+    \x{0400}12\x{fe2f}                 Cyrillic Common-digits Cyrillic
+    \x{0531}12\x{fb17}                 Armenian Common-digits Armenian
+    \x{0591}12\x{fb4f}                 Hebrew Common-digits Hebrew
+    \x{0600}12\x{1eef1}                Arabic Common-digits Arabic
+    \x{0600}\x{0660}\x{0669}\x{1eef1}  Arabic Arabic-digits Arabic
+    \x{0700}12\x{086a}                 Syriac Common-digits Syriac
+    \x{1200}12\x{ab2e}                 Ethiopic Common-digits Ethiopic
+    \x{1680}12\x{169c}                 Ogham Common-digits Ogham
+    \x{3041}12\x{3041}                 Hiragana Common-digits Hiragana
+    \x{0980}\x{09e6}\x{09e7}\x{0993}   Bengali Bengali-digits Bengali
+    !cde                               Common Latin Latin Latin
+    A..B                               Latin Common Common Latin 
+    0abc                               Ascii-digit Latin Latin Latin
+    1\x{0700}\x{0700}\x{0700}          Ascii-digit Syriac x 3
+    \x{1A80}\x{1A80}\x{1a40}\x{1a41}   Tai Tham Hora digits, letters
+\= Expect no match
+    a\x{370}bcd                        Latin Greek Latin Latin
+    \x{1100}\x{02ea}\x{02ea}\x{02ea}   Hangul Bopomofo x3
+    \x{02ea}\x{02ea}\x{02ea}\x{1100}   Bopomofo x3 Hangul
+    \x{1100}\x{2e80}\x{3041}\x{1101}   Hangul Han Hiragana Hangul
+    \x{0391}\x{09e6}\x{09e7}\x{03a9}   Greek Bengali digits Greek 
+    \x{0600}7\x{0669}\x{1eef1}         Arabic ascii-digit Arabic-digit Arabic
+    \x{0600}\x{0669}7\x{1eef1}         Arabic Arabic-digit ascii-digit Arabic
+    A5\x{ff19}B                        Latin Common-ascii/notascii-digits Latin 
+    \x{0300}cd\x{0391}                 Inherited Latin Latin Greek
+    !cd\x{0391}                        Common Latin Latin Greek
+    \x{1A80}\x{1A90}\x{1a40}\x{1a41}   Tai Tham Hora digit, Tham digit, letters
+    A\x{1d7ce}\x{1d7ff}B               Common fancy-common-2-sets-digits Common
+    \x{2e80}\x{3105}\x{2e80}\x{30a1}   Han Bopomofo Han Katakana
+    
+/^(*sr:.{4}|..)/utf
+    \x{2e80}\x{3105}\x{2e80}\x{30a1}   Han Bopomofo Han Katakana
+
+/^(*atomic_script_run:.{4}|..)/utf
+\= Expect no match
+    \x{2e80}\x{3105}\x{2e80}\x{30a1}   Han Bopomofo Han Katakana
+
+/^(*asr:.*)/utf
+\= Expect no match
+    \x{2e80}\x{3105}\x{2e80}\x{30a1}   Han Bopomofo Han Katakana
+
+/^(?>(*sr:.*))/utf
+    \x{2e80}\x{3105}\x{2e80}\x{30a1}   Han Bopomofo Han Katakana
+
+/^(*sr:.*)/utf
+    \x{2e80}\x{3105}\x{2e80}\x{30a1}   Han Bopomofo Han Katakana
+    \x{10fffd}\x{10fffd}\x{10fffd}     Private use (Unknown)
+
+/^(*sr:\x{2e80}*)/utf
+    \x{2e80}\x{2e80}\x{3105}           Han Han Bopomofo
+
+/^(*sr:\x{2e80}*)\x{2e80}/utf
+    \x{2e80}\x{2e80}\x{3105}           Han Han Bopomofo
+    
+/^(*sr:.*)Test/utf
+    Test script run on an empty string
+
+/^(*sr:(.{2})){2}/utf
+    \x{0600}7\x{0669}\x{1eef1}         Arabic ascii-digit Arabic-digit Arabic
+    \x{1A80}\x{1A80}\x{1a40}\x{1a41}   Tai Tham Hora digits, letters
+    \x{1A80}\x{1a40}\x{1A90}\x{1a41}   Tai Tham Hora digit, letter, Tham digit, letter
+\= Expect no match
+    \x{1100}\x{2e80}\x{3041}\x{1101}   Hangul Han Hiragana Hangul
+
+# Test loop breaking for empty string match
+
+/^(*sr:A|)*BCD/utf
+    AABCD
+    ABCD
+    BCD 
+    
+# The use of (*ACCEPT) breaks script run checking 
+
+/^(*sr:.*(*ACCEPT)ZZ)/utf
+    \x{1100}\x{2e80}\x{3041}\x{1101}   Hangul Han Hiragana Hangul
+
+# ------- 
+
 # End of testinput4


Modified: code/trunk/testdata/testinput5
===================================================================
--- code/trunk/testdata/testinput5    2018-09-24 16:23:53 UTC (rev 1018)
+++ code/trunk/testdata/testinput5    2018-10-02 15:25:58 UTC (rev 1019)
@@ -2109,5 +2109,28 @@


 /(*: A‎B
C)abc/x,utf,mark,alt_verbnames
     abc
+    
+# Script run tests: auto-possessification


+/^(*sr:.*)/B,utf 
+    paypаl.com   A classic example of why script run checks are a good thing
+
+/^(*sr:\x{2e80}*)/B,utf
+
+/^(*sr:\x{2e80}*)\x{2e80}/B,utf
+
+# Some script run patterns are broken in Perl 5.28.0. These can be moved into
+# test 4 when a mended version of Perl is released.
+
+/^(*sr:.{4})/utf
+    \x{0980}12\x{0993}     Bengali Common-digits Bengali
+    \x{0780}12\x{07b1}     Thaana Common-digits Thaana
+    \x{0e01}12\x{0e5b}     Thai Common-digits Thai
+    \x{1780}12\x{19ff}     Khmer Common-digits Khmer
+    \x{0904}12\x{0939}     Devanagari Common-digits Devanagari
+    A\x{ff10}\x{ff19}B     Latin Common-notascii-digits Latin 
+    A\x{1d7ce}\x{1d7cf}B   Latin fancy-common-digits Latin
+
+# ------- 
+
 # End of testinput5


Modified: code/trunk/testdata/testoutput12-16
===================================================================
--- code/trunk/testdata/testoutput12-16    2018-09-24 16:23:53 UTC (rev 1018)
+++ code/trunk/testdata/testoutput12-16    2018-10-02 15:25:58 UTC (rev 1019)
@@ -1480,5 +1480,20 @@
 Old 12 15  New 16 21
 Old 21 21  New 27 29
  4: 123abc<>\x{e1}yzabc<><def>789abc<>\x{1234}qr
+    
+# A few script run tests in non-UTF mode (but they need Unicode support)


+/^(*script_run:.{4})/
+    \x{3041}\x{30a1}\x{3007}\x{3007}   Hiragana Katakana Han Han
+ 0: \x{3041}\x{30a1}\x{3007}\x{3007}
+    \x{30a1}\x{3041}\x{3007}\x{3007}   Katakana Hiragana Han Han
+ 0: \x{30a1}\x{3041}\x{3007}\x{3007}
+    \x{1100}\x{2e80}\x{2e80}\x{1101}   Hangul Han Han Hangul
+ 0: \x{1100}\x{2e80}\x{2e80}\x{1101}
+ 
+/^(*sr:.*)/utf,allow_surrogate_escapes
+Failed: error 191 at offset 0: PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES is not allowed in UTF-16 mode
+    \x{2e80}\x{3105}\x{2e80}\x{30a1}   Han Bopomofo Han Katakana
+    \x{d800}\x{dfff}                   Surrogates (Unknown) \=no_utf_check
+
 # End of testinput12


Modified: code/trunk/testdata/testoutput12-32
===================================================================
--- code/trunk/testdata/testoutput12-32    2018-09-24 16:23:53 UTC (rev 1018)
+++ code/trunk/testdata/testoutput12-32    2018-10-02 15:25:58 UTC (rev 1019)
@@ -1477,5 +1477,21 @@
 Old 12 15  New 16 21
 Old 21 21  New 27 29
  4: 123abc<>\x{e1}yzabc<><def>789abc<>\x{1234}qr
+    
+# A few script run tests in non-UTF mode (but they need Unicode support)


+/^(*script_run:.{4})/
+    \x{3041}\x{30a1}\x{3007}\x{3007}   Hiragana Katakana Han Han
+ 0: \x{3041}\x{30a1}\x{3007}\x{3007}
+    \x{30a1}\x{3041}\x{3007}\x{3007}   Katakana Hiragana Han Han
+ 0: \x{30a1}\x{3041}\x{3007}\x{3007}
+    \x{1100}\x{2e80}\x{2e80}\x{1101}   Hangul Han Han Hangul
+ 0: \x{1100}\x{2e80}\x{2e80}\x{1101}
+ 
+/^(*sr:.*)/utf,allow_surrogate_escapes
+    \x{2e80}\x{3105}\x{2e80}\x{30a1}   Han Bopomofo Han Katakana
+ 0: \x{2e80}\x{3105}\x{2e80}
+    \x{d800}\x{dfff}                   Surrogates (Unknown) \=no_utf_check
+ 0: \x{d800}
+
 # End of testinput12


Modified: code/trunk/testdata/testoutput4
===================================================================
--- code/trunk/testdata/testoutput4    2018-09-24 16:23:53 UTC (rev 1018)
+++ code/trunk/testdata/testoutput4    2018-10-02 15:25:58 UTC (rev 1019)
@@ -3741,5 +3741,154 @@
 /[^\x{100}-\x{ffff}]*[\x80-\xff]/i,utf
     \x{99}\x{99}\x{99}
  0: \x{99}\x{99}\x{99}
+    
+# Script run tests


+/^(*script_run:.{4})/utf
+    abcd                               Latin x4
+ 0: abcd
+    \x{2e80}\x{2fa1d}\x{3041}\x{30a1}  Han Han Hiragana Katakana
+ 0: \x{2e80}\x{2fa1d}\x{3041}\x{30a1}
+    \x{3041}\x{30a1}\x{3007}\x{3007}   Hiragana Katakana Han Han
+ 0: \x{3041}\x{30a1}\x{3007}\x{3007}
+    \x{30a1}\x{3041}\x{3007}\x{3007}   Katakana Hiragana Han Han
+ 0: \x{30a1}\x{3041}\x{3007}\x{3007}
+    \x{1100}\x{2e80}\x{2e80}\x{1101}   Hangul Han Han Hangul
+ 0: \x{1100}\x{2e80}\x{2e80}\x{1101}
+    \x{2e80}\x{3105}\x{2e80}\x{3105}   Han Bopomofo Han Bopomofo
+ 0: \x{2e80}\x{3105}\x{2e80}\x{3105}
+    \x{02ea}\x{2e80}\x{2e80}\x{3105}   Bopomofo-Sk Han Han Bopomofo
+ 0: \x{2ea}\x{2e80}\x{2e80}\x{3105}
+    \x{3105}\x{2e80}\x{2e80}\x{3105}   Bopomofo Han Han Bopomofo
+ 0: \x{3105}\x{2e80}\x{2e80}\x{3105}
+    \x{0300}cd!                        Inherited Latin Latin Common
+ 0: \x{300}cd!
+    \x{0391}12\x{03a9}                 Greek Common-digits Greek 
+ 0: \x{391}12\x{3a9}
+    \x{0400}12\x{fe2f}                 Cyrillic Common-digits Cyrillic
+ 0: \x{400}12\x{fe2f}
+    \x{0531}12\x{fb17}                 Armenian Common-digits Armenian
+ 0: \x{531}12\x{fb17}
+    \x{0591}12\x{fb4f}                 Hebrew Common-digits Hebrew
+ 0: \x{591}12\x{fb4f}
+    \x{0600}12\x{1eef1}                Arabic Common-digits Arabic
+ 0: \x{600}12\x{1eef1}
+    \x{0600}\x{0660}\x{0669}\x{1eef1}  Arabic Arabic-digits Arabic
+ 0: \x{600}\x{660}\x{669}\x{1eef1}
+    \x{0700}12\x{086a}                 Syriac Common-digits Syriac
+ 0: \x{700}12\x{86a}
+    \x{1200}12\x{ab2e}                 Ethiopic Common-digits Ethiopic
+ 0: \x{1200}12\x{ab2e}
+    \x{1680}12\x{169c}                 Ogham Common-digits Ogham
+ 0: \x{1680}12\x{169c}
+    \x{3041}12\x{3041}                 Hiragana Common-digits Hiragana
+ 0: \x{3041}12\x{3041}
+    \x{0980}\x{09e6}\x{09e7}\x{0993}   Bengali Bengali-digits Bengali
+ 0: \x{980}\x{9e6}\x{9e7}\x{993}
+    !cde                               Common Latin Latin Latin
+ 0: !cde
+    A..B                               Latin Common Common Latin 
+ 0: A..B
+    0abc                               Ascii-digit Latin Latin Latin
+ 0: 0abc
+    1\x{0700}\x{0700}\x{0700}          Ascii-digit Syriac x 3
+ 0: 1\x{700}\x{700}\x{700}
+    \x{1A80}\x{1A80}\x{1a40}\x{1a41}   Tai Tham Hora digits, letters
+ 0: \x{1a80}\x{1a80}\x{1a40}\x{1a41}
+\= Expect no match
+    a\x{370}bcd                        Latin Greek Latin Latin
+No match
+    \x{1100}\x{02ea}\x{02ea}\x{02ea}   Hangul Bopomofo x3
+No match
+    \x{02ea}\x{02ea}\x{02ea}\x{1100}   Bopomofo x3 Hangul
+No match
+    \x{1100}\x{2e80}\x{3041}\x{1101}   Hangul Han Hiragana Hangul
+No match
+    \x{0391}\x{09e6}\x{09e7}\x{03a9}   Greek Bengali digits Greek 
+No match
+    \x{0600}7\x{0669}\x{1eef1}         Arabic ascii-digit Arabic-digit Arabic
+No match
+    \x{0600}\x{0669}7\x{1eef1}         Arabic Arabic-digit ascii-digit Arabic
+No match
+    A5\x{ff19}B                        Latin Common-ascii/notascii-digits Latin 
+No match
+    \x{0300}cd\x{0391}                 Inherited Latin Latin Greek
+No match
+    !cd\x{0391}                        Common Latin Latin Greek
+No match
+    \x{1A80}\x{1A90}\x{1a40}\x{1a41}   Tai Tham Hora digit, Tham digit, letters
+No match
+    A\x{1d7ce}\x{1d7ff}B               Common fancy-common-2-sets-digits Common
+No match
+    \x{2e80}\x{3105}\x{2e80}\x{30a1}   Han Bopomofo Han Katakana
+No match
+    
+/^(*sr:.{4}|..)/utf
+    \x{2e80}\x{3105}\x{2e80}\x{30a1}   Han Bopomofo Han Katakana
+ 0: \x{2e80}\x{3105}
+
+/^(*atomic_script_run:.{4}|..)/utf
+\= Expect no match
+    \x{2e80}\x{3105}\x{2e80}\x{30a1}   Han Bopomofo Han Katakana
+No match
+
+/^(*asr:.*)/utf
+\= Expect no match
+    \x{2e80}\x{3105}\x{2e80}\x{30a1}   Han Bopomofo Han Katakana
+No match
+
+/^(?>(*sr:.*))/utf
+    \x{2e80}\x{3105}\x{2e80}\x{30a1}   Han Bopomofo Han Katakana
+ 0: \x{2e80}\x{3105}\x{2e80}
+
+/^(*sr:.*)/utf
+    \x{2e80}\x{3105}\x{2e80}\x{30a1}   Han Bopomofo Han Katakana
+ 0: \x{2e80}\x{3105}\x{2e80}
+    \x{10fffd}\x{10fffd}\x{10fffd}     Private use (Unknown)
+ 0: \x{10fffd}
+
+/^(*sr:\x{2e80}*)/utf
+    \x{2e80}\x{2e80}\x{3105}           Han Han Bopomofo
+ 0: \x{2e80}\x{2e80}
+
+/^(*sr:\x{2e80}*)\x{2e80}/utf
+    \x{2e80}\x{2e80}\x{3105}           Han Han Bopomofo
+ 0: \x{2e80}\x{2e80}
+    
+/^(*sr:.*)Test/utf
+    Test script run on an empty string
+ 0: Test
+
+/^(*sr:(.{2})){2}/utf
+    \x{0600}7\x{0669}\x{1eef1}         Arabic ascii-digit Arabic-digit Arabic
+ 0: \x{600}7\x{669}\x{1eef1}
+ 1: \x{669}\x{1eef1}
+    \x{1A80}\x{1A80}\x{1a40}\x{1a41}   Tai Tham Hora digits, letters
+ 0: \x{1a80}\x{1a80}\x{1a40}\x{1a41}
+ 1: \x{1a40}\x{1a41}
+    \x{1A80}\x{1a40}\x{1A90}\x{1a41}   Tai Tham Hora digit, letter, Tham digit, letter
+ 0: \x{1a80}\x{1a40}\x{1a90}\x{1a41}
+ 1: \x{1a90}\x{1a41}
+\= Expect no match
+    \x{1100}\x{2e80}\x{3041}\x{1101}   Hangul Han Hiragana Hangul
+No match
+
+# Test loop breaking for empty string match
+
+/^(*sr:A|)*BCD/utf
+    AABCD
+ 0: AABCD
+    ABCD
+ 0: ABCD
+    BCD 
+ 0: BCD
+    
+# The use of (*ACCEPT) breaks script run checking 
+
+/^(*sr:.*(*ACCEPT)ZZ)/utf
+    \x{1100}\x{2e80}\x{3041}\x{1101}   Hangul Han Hiragana Hangul
+ 0: \x{1100}\x{2e80}\x{3041}\x{1101}   Hangul Han Hiragana Hangul
+
+# ------- 
+
 # End of testinput4


Modified: code/trunk/testdata/testoutput5
===================================================================
--- code/trunk/testdata/testoutput5    2018-09-24 16:23:53 UTC (rev 1018)
+++ code/trunk/testdata/testoutput5    2018-10-02 15:25:58 UTC (rev 1019)
@@ -4778,5 +4778,64 @@
     abc
  0: abc
 MK: ABC
+    
+# Script run tests: auto-possessification


+/^(*sr:.*)/B,utf 
+------------------------------------------------------------------
+        Bra
+        ^
+        Script run
+        Any*
+        Ket
+        Ket
+        End
+------------------------------------------------------------------
+    paypаl.com   A classic example of why script run checks are a good thing
+ 0: payp
+
+/^(*sr:\x{2e80}*)/B,utf
+------------------------------------------------------------------
+        Bra
+        ^
+        Script run
+        \x{2e80}*+
+        Ket
+        Ket
+        End
+------------------------------------------------------------------
+
+/^(*sr:\x{2e80}*)\x{2e80}/B,utf
+------------------------------------------------------------------
+        Bra
+        ^
+        Script run
+        \x{2e80}*
+        Ket
+        \x{2e80}
+        Ket
+        End
+------------------------------------------------------------------
+
+# Some script run patterns are broken in Perl 5.28.0. These can be moved into
+# test 4 when a mended version of Perl is released.
+
+/^(*sr:.{4})/utf
+    \x{0980}12\x{0993}     Bengali Common-digits Bengali
+ 0: \x{980}12\x{993}
+    \x{0780}12\x{07b1}     Thaana Common-digits Thaana
+ 0: \x{780}12\x{7b1}
+    \x{0e01}12\x{0e5b}     Thai Common-digits Thai
+ 0: \x{e01}12\x{e5b}
+    \x{1780}12\x{19ff}     Khmer Common-digits Khmer
+ 0: \x{1780}12\x{19ff}
+    \x{0904}12\x{0939}     Devanagari Common-digits Devanagari
+ 0: \x{904}12\x{939}
+    A\x{ff10}\x{ff19}B     Latin Common-notascii-digits Latin 
+ 0: A\x{ff10}\x{ff19}B
+    A\x{1d7ce}\x{1d7cf}B   Latin fancy-common-digits Latin
+ 0: A\x{1d7ce}\x{1d7cf}B
+
+# ------- 
+
 # End of testinput5