Add Ragel-generated files to git
authorBehdad Esfahbod <behdad@behdad.org>
Tue, 20 Feb 2018 22:34:16 +0000 (14:34 -0800)
committerBehdad Esfahbod <behdad@behdad.org>
Tue, 20 Feb 2018 22:36:14 +0000 (14:36 -0800)
I know it's bad form; I know I've said no to this multiple times...
But this is part of an experiment to see if we can make rolling HarfBuzz
into Chrome much faster. That will give us a lot more testing exposure
that currently Chrome does.

Doing this while those files are still considered ignored by our
gitignore rules; will see how that flies.

autogen.sh
src/Makefile.am
src/hb-ot-shape-complex-indic-machine.hh [new file with mode: 0644]
src/hb-ot-shape-complex-khmer-machine.hh [new file with mode: 0644]
src/hb-ot-shape-complex-myanmar-machine.hh [new file with mode: 0644]
src/hb-ot-shape-complex-use-machine.hh [new file with mode: 0644]

index cbc8627..fd5c198 100755 (executable)
@@ -7,11 +7,11 @@ test -n "$srcdir" || srcdir=.
 olddir=`pwd`
 cd $srcdir
 
-echo -n "checking for ragel... "
-which ragel || {
-       echo "You need to install ragel... See http://www.complang.org/ragel/"
-       exit 1
-}
+#echo -n "checking for ragel... "
+#which ragel || {
+#      echo "You need to install ragel... See http://www.complang.org/ragel/"
+#      exit 1
+#}
 
 echo -n "checking for pkg-config... "
 which pkg-config || {
index 161bdcb..aba6803 100644 (file)
@@ -300,7 +300,8 @@ EXTRA_DIST += \
        $(HB_BASE_RAGEL_sources) \
        $(HB_OT_RAGEL_sources) \
        $(NULL)
-MAINTAINERCLEANFILES += $(RAGEL_GENERATED)
+# We decided to add ragel-generated files to git...
+#MAINTAINERCLEANFILES += $(RAGEL_GENERATED)
 $(srcdir)/%.hh: $(srcdir)/%.rl
        $(AM_V_GEN)(cd $(srcdir) && $(RAGEL) -e -F1 -o "$*.hh" "$*.rl") \
        || ($(RM) "$@"; false)
diff --git a/src/hb-ot-shape-complex-indic-machine.hh b/src/hb-ot-shape-complex-indic-machine.hh
new file mode 100644 (file)
index 0000000..f3cea22
--- /dev/null
@@ -0,0 +1,1319 @@
+
+#line 1 "hb-ot-shape-complex-indic-machine.rl"
+/*
+ * Copyright © 2011,2012  Google, Inc.
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OT_SHAPE_COMPLEX_INDIC_MACHINE_HH
+#define HB_OT_SHAPE_COMPLEX_INDIC_MACHINE_HH
+
+#include "hb-private.hh"
+
+
+#line 36 "hb-ot-shape-complex-indic-machine.hh"
+static const unsigned char _indic_syllable_machine_trans_keys[] = {
+       8u, 8u, 5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u, 
+       5u, 7u, 7u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 4u, 8u, 6u, 6u, 16u, 16u, 
+       4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 
+       16u, 16u, 4u, 8u, 4u, 13u, 4u, 8u, 4u, 13u, 4u, 8u, 4u, 13u, 4u, 8u, 
+       4u, 13u, 4u, 8u, 4u, 13u, 8u, 8u, 5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u, 
+       5u, 7u, 7u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 
+       4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 
+       16u, 16u, 4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 4u, 13u, 4u, 8u, 4u, 13u, 
+       4u, 8u, 4u, 13u, 4u, 8u, 4u, 13u, 4u, 8u, 4u, 13u, 8u, 8u, 5u, 8u, 
+       5u, 7u, 7u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 
+       5u, 8u, 5u, 7u, 7u, 7u, 4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 
+       16u, 16u, 4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 
+       4u, 13u, 4u, 8u, 4u, 13u, 4u, 8u, 4u, 13u, 4u, 8u, 4u, 13u, 4u, 8u, 
+       8u, 8u, 5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u, 
+       5u, 7u, 7u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 4u, 8u, 6u, 6u, 16u, 16u, 
+       4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 
+       16u, 16u, 4u, 8u, 4u, 13u, 4u, 8u, 4u, 13u, 4u, 8u, 4u, 13u, 4u, 8u, 
+       4u, 13u, 4u, 8u, 4u, 13u, 4u, 13u, 5u, 8u, 5u, 8u, 5u, 7u, 5u, 8u, 
+       5u, 7u, 7u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 
+       8u, 8u, 4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 
+       6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 16u, 16u, 8u, 8u, 1u, 19u, 3u, 17u, 
+       3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, 
+       3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, 
+       3u, 17u, 4u, 17u, 5u, 10u, 5u, 10u, 5u, 10u, 10u, 10u, 10u, 10u, 10u, 10u, 
+       5u, 10u, 3u, 10u, 3u, 10u, 4u, 10u, 5u, 10u, 3u, 10u, 4u, 10u, 5u, 10u, 
+       3u, 10u, 4u, 10u, 5u, 10u, 3u, 10u, 4u, 10u, 5u, 10u, 3u, 10u, 4u, 10u, 
+       3u, 17u, 3u, 17u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 17u, 3u, 17u, 
+       1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 17u, 3u, 17u, 1u, 16u, 1u, 16u, 
+       1u, 16u, 1u, 16u, 3u, 17u, 3u, 17u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 
+       3u, 17u, 3u, 17u, 3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, 3u, 17u, 
+       4u, 17u, 1u, 16u, 3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, 3u, 17u, 
+       4u, 17u, 1u, 16u, 3u, 17u, 3u, 17u, 4u, 17u, 5u, 10u, 5u, 10u, 5u, 10u, 
+       10u, 10u, 10u, 10u, 10u, 10u, 5u, 10u, 3u, 10u, 3u, 10u, 4u, 10u, 5u, 10u, 
+       3u, 10u, 4u, 10u, 5u, 10u, 3u, 10u, 4u, 10u, 5u, 10u, 3u, 10u, 4u, 10u, 
+       5u, 10u, 3u, 10u, 4u, 10u, 3u, 17u, 3u, 17u, 1u, 16u, 1u, 16u, 1u, 16u, 
+       1u, 16u, 3u, 17u, 3u, 17u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 17u, 
+       3u, 17u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 17u, 3u, 17u, 1u, 16u, 
+       1u, 16u, 1u, 16u, 1u, 16u, 4u, 8u, 3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 
+       3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 
+       3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, 3u, 17u, 4u, 17u, 5u, 10u, 
+       5u, 10u, 5u, 10u, 10u, 10u, 10u, 10u, 10u, 10u, 5u, 10u, 3u, 10u, 3u, 10u, 
+       4u, 10u, 5u, 10u, 3u, 10u, 4u, 10u, 5u, 10u, 3u, 10u, 4u, 10u, 5u, 10u, 
+       3u, 10u, 4u, 10u, 5u, 10u, 3u, 10u, 4u, 10u, 3u, 17u, 3u, 17u, 1u, 16u, 
+       1u, 16u, 1u, 16u, 1u, 16u, 3u, 17u, 3u, 17u, 1u, 16u, 1u, 16u, 1u, 16u, 
+       1u, 16u, 3u, 17u, 3u, 17u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 17u, 
+       3u, 17u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 4u, 13u, 3u, 17u, 4u, 8u, 
+       3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 
+       3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 
+       3u, 17u, 3u, 17u, 4u, 17u, 5u, 10u, 5u, 10u, 5u, 10u, 10u, 10u, 10u, 10u, 
+       10u, 10u, 5u, 10u, 3u, 10u, 3u, 10u, 4u, 10u, 5u, 10u, 3u, 10u, 4u, 10u, 
+       5u, 10u, 3u, 10u, 4u, 10u, 5u, 10u, 3u, 10u, 4u, 10u, 5u, 10u, 3u, 10u, 
+       4u, 10u, 3u, 17u, 3u, 17u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 17u, 
+       3u, 17u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 17u, 3u, 17u, 1u, 16u, 
+       1u, 16u, 1u, 16u, 1u, 16u, 3u, 17u, 3u, 17u, 1u, 16u, 1u, 16u, 1u, 16u, 
+       1u, 16u, 3u, 17u, 1u, 17u, 3u, 17u, 1u, 17u, 4u, 13u, 5u, 10u, 10u, 10u, 
+       10u, 10u, 10u, 10u, 5u, 10u, 1u, 16u, 3u, 10u, 4u, 10u, 5u, 10u, 3u, 10u, 
+       4u, 10u, 5u, 10u, 3u, 10u, 4u, 10u, 5u, 10u, 3u, 10u, 4u, 10u, 5u, 10u, 
+       3u, 10u, 5u, 10u, 5u, 10u, 10u, 10u, 10u, 10u, 10u, 10u, 5u, 10u, 1u, 16u, 
+       0
+};
+
+static const char _indic_syllable_machine_key_spans[] = {
+       1, 4, 3, 1, 4, 3, 1, 4, 
+       3, 1, 4, 3, 1, 5, 1, 1, 
+       5, 1, 1, 5, 1, 1, 5, 1, 
+       1, 5, 10, 5, 10, 5, 10, 5, 
+       10, 5, 10, 1, 4, 3, 1, 4, 
+       3, 1, 4, 3, 1, 4, 3, 1, 
+       5, 1, 1, 5, 1, 1, 5, 1, 
+       1, 5, 1, 1, 5, 10, 5, 10, 
+       5, 10, 5, 10, 5, 10, 1, 4, 
+       3, 1, 4, 3, 1, 4, 3, 1, 
+       4, 3, 1, 5, 1, 1, 5, 1, 
+       1, 5, 1, 1, 5, 1, 1, 5, 
+       10, 5, 10, 5, 10, 5, 10, 5, 
+       1, 4, 3, 1, 4, 3, 1, 4, 
+       3, 1, 4, 3, 1, 5, 1, 1, 
+       5, 1, 1, 5, 1, 1, 5, 1, 
+       1, 5, 10, 5, 10, 5, 10, 5, 
+       10, 5, 10, 10, 4, 4, 3, 4, 
+       3, 1, 4, 3, 1, 4, 3, 1, 
+       1, 5, 1, 1, 5, 1, 1, 5, 
+       1, 1, 5, 1, 1, 1, 19, 15, 
+       15, 14, 16, 15, 15, 14, 16, 15, 
+       15, 14, 16, 15, 15, 14, 16, 15, 
+       15, 14, 6, 6, 6, 1, 1, 1, 
+       6, 8, 8, 7, 6, 8, 7, 6, 
+       8, 7, 6, 8, 7, 6, 8, 7, 
+       15, 15, 16, 16, 16, 16, 15, 15, 
+       16, 16, 16, 16, 15, 15, 16, 16, 
+       16, 16, 15, 15, 16, 16, 16, 16, 
+       15, 15, 15, 15, 14, 16, 15, 15, 
+       14, 16, 15, 15, 14, 16, 15, 15, 
+       14, 16, 15, 15, 14, 6, 6, 6, 
+       1, 1, 1, 6, 8, 8, 7, 6, 
+       8, 7, 6, 8, 7, 6, 8, 7, 
+       6, 8, 7, 15, 15, 16, 16, 16, 
+       16, 15, 15, 16, 16, 16, 16, 15, 
+       15, 16, 16, 16, 16, 15, 15, 16, 
+       16, 16, 16, 5, 15, 15, 14, 16, 
+       15, 15, 14, 16, 15, 15, 14, 16, 
+       15, 15, 14, 16, 15, 15, 14, 6, 
+       6, 6, 1, 1, 1, 6, 8, 8, 
+       7, 6, 8, 7, 6, 8, 7, 6, 
+       8, 7, 6, 8, 7, 15, 15, 16, 
+       16, 16, 16, 15, 15, 16, 16, 16, 
+       16, 15, 15, 16, 16, 16, 16, 15, 
+       15, 16, 16, 16, 16, 10, 15, 5, 
+       15, 15, 14, 16, 15, 15, 14, 16, 
+       15, 15, 14, 16, 15, 15, 14, 16, 
+       15, 15, 14, 6, 6, 6, 1, 1, 
+       1, 6, 8, 8, 7, 6, 8, 7, 
+       6, 8, 7, 6, 8, 7, 6, 8, 
+       7, 15, 15, 16, 16, 16, 16, 15, 
+       15, 16, 16, 16, 16, 15, 15, 16, 
+       16, 16, 16, 15, 15, 16, 16, 16, 
+       16, 15, 17, 15, 17, 10, 6, 1, 
+       1, 1, 6, 16, 8, 7, 6, 8, 
+       7, 6, 8, 7, 6, 8, 7, 6, 
+       8, 6, 6, 1, 1, 1, 6, 16
+};
+
+static const short _indic_syllable_machine_index_offsets[] = {
+       0, 2, 7, 11, 13, 18, 22, 24, 
+       29, 33, 35, 40, 44, 46, 52, 54, 
+       56, 62, 64, 66, 72, 74, 76, 82, 
+       84, 86, 92, 103, 109, 120, 126, 137, 
+       143, 154, 160, 171, 173, 178, 182, 184, 
+       189, 193, 195, 200, 204, 206, 211, 215, 
+       217, 223, 225, 227, 233, 235, 237, 243, 
+       245, 247, 253, 255, 257, 263, 274, 280, 
+       291, 297, 308, 314, 325, 331, 342, 344, 
+       349, 353, 355, 360, 364, 366, 371, 375, 
+       377, 382, 386, 388, 394, 396, 398, 404, 
+       406, 408, 414, 416, 418, 424, 426, 428, 
+       434, 445, 451, 462, 468, 479, 485, 496, 
+       502, 504, 509, 513, 515, 520, 524, 526, 
+       531, 535, 537, 542, 546, 548, 554, 556, 
+       558, 564, 566, 568, 574, 576, 578, 584, 
+       586, 588, 594, 605, 611, 622, 628, 639, 
+       645, 656, 662, 673, 684, 689, 694, 698, 
+       703, 707, 709, 714, 718, 720, 725, 729, 
+       731, 733, 739, 741, 743, 749, 751, 753, 
+       759, 761, 763, 769, 771, 773, 775, 795, 
+       811, 827, 842, 859, 875, 891, 906, 923, 
+       939, 955, 970, 987, 1003, 1019, 1034, 1051, 
+       1067, 1083, 1098, 1105, 1112, 1119, 1121, 1123, 
+       1125, 1132, 1141, 1150, 1158, 1165, 1174, 1182, 
+       1189, 1198, 1206, 1213, 1222, 1230, 1237, 1246, 
+       1254, 1270, 1286, 1303, 1320, 1337, 1354, 1370, 
+       1386, 1403, 1420, 1437, 1454, 1470, 1486, 1503, 
+       1520, 1537, 1554, 1570, 1586, 1603, 1620, 1637, 
+       1654, 1670, 1686, 1702, 1718, 1733, 1750, 1766, 
+       1782, 1797, 1814, 1830, 1846, 1861, 1878, 1894, 
+       1910, 1925, 1942, 1958, 1974, 1989, 1996, 2003, 
+       2010, 2012, 2014, 2016, 2023, 2032, 2041, 2049, 
+       2056, 2065, 2073, 2080, 2089, 2097, 2104, 2113, 
+       2121, 2128, 2137, 2145, 2161, 2177, 2194, 2211, 
+       2228, 2245, 2261, 2277, 2294, 2311, 2328, 2345, 
+       2361, 2377, 2394, 2411, 2428, 2445, 2461, 2477, 
+       2494, 2511, 2528, 2545, 2551, 2567, 2583, 2598, 
+       2615, 2631, 2647, 2662, 2679, 2695, 2711, 2726, 
+       2743, 2759, 2775, 2790, 2807, 2823, 2839, 2854, 
+       2861, 2868, 2875, 2877, 2879, 2881, 2888, 2897, 
+       2906, 2914, 2921, 2930, 2938, 2945, 2954, 2962, 
+       2969, 2978, 2986, 2993, 3002, 3010, 3026, 3042, 
+       3059, 3076, 3093, 3110, 3126, 3142, 3159, 3176, 
+       3193, 3210, 3226, 3242, 3259, 3276, 3293, 3310, 
+       3326, 3342, 3359, 3376, 3393, 3410, 3421, 3437, 
+       3443, 3459, 3475, 3490, 3507, 3523, 3539, 3554, 
+       3571, 3587, 3603, 3618, 3635, 3651, 3667, 3682, 
+       3699, 3715, 3731, 3746, 3753, 3760, 3767, 3769, 
+       3771, 3773, 3780, 3789, 3798, 3806, 3813, 3822, 
+       3830, 3837, 3846, 3854, 3861, 3870, 3878, 3885, 
+       3894, 3902, 3918, 3934, 3951, 3968, 3985, 4002, 
+       4018, 4034, 4051, 4068, 4085, 4102, 4118, 4134, 
+       4151, 4168, 4185, 4202, 4218, 4234, 4251, 4268, 
+       4285, 4302, 4318, 4336, 4352, 4370, 4381, 4388, 
+       4390, 4392, 4394, 4401, 4418, 4427, 4435, 4442, 
+       4451, 4459, 4466, 4475, 4483, 4490, 4499, 4507, 
+       4514, 4523, 4530, 4537, 4539, 4541, 4543, 4550
+};
+
+static const short _indic_syllable_machine_indicies[] = {
+       1, 0, 2, 2, 3, 1, 0, 4, 
+       4, 3, 0, 3, 0, 5, 5, 6, 
+       1, 0, 7, 7, 6, 0, 6, 0, 
+       8, 8, 9, 1, 0, 10, 10, 9, 
+       0, 9, 0, 11, 11, 12, 1, 0, 
+       13, 13, 12, 0, 12, 0, 14, 0, 
+       0, 0, 1, 0, 15, 0, 16, 0, 
+       17, 11, 11, 12, 1, 0, 18, 0, 
+       19, 0, 20, 8, 8, 9, 1, 0, 
+       21, 0, 22, 0, 23, 5, 5, 6, 
+       1, 0, 24, 0, 25, 0, 26, 2, 
+       2, 3, 1, 0, 26, 2, 2, 3, 
+       1, 0, 0, 0, 0, 27, 0, 28, 
+       2, 2, 3, 1, 0, 28, 2, 2, 
+       3, 1, 0, 0, 0, 0, 29, 0, 
+       30, 2, 2, 3, 1, 0, 30, 2, 
+       2, 3, 1, 0, 0, 0, 0, 31, 
+       0, 32, 2, 2, 3, 1, 0, 32, 
+       2, 2, 3, 1, 0, 0, 0, 0, 
+       33, 0, 34, 2, 2, 3, 1, 0, 
+       34, 2, 2, 3, 1, 0, 0, 0, 
+       0, 35, 0, 37, 36, 38, 38, 39, 
+       37, 36, 40, 40, 39, 36, 39, 36, 
+       41, 41, 42, 37, 36, 43, 43, 42, 
+       36, 42, 36, 44, 44, 45, 37, 36, 
+       46, 46, 45, 36, 45, 36, 47, 47, 
+       48, 37, 36, 49, 49, 48, 36, 48, 
+       36, 50, 36, 36, 36, 37, 36, 51, 
+       36, 52, 36, 53, 47, 47, 48, 37, 
+       36, 54, 36, 55, 36, 56, 44, 44, 
+       45, 37, 36, 57, 36, 58, 36, 59, 
+       41, 41, 42, 37, 36, 60, 36, 61, 
+       36, 62, 38, 38, 39, 37, 36, 62, 
+       38, 38, 39, 37, 36, 36, 36, 36, 
+       63, 36, 64, 38, 38, 39, 37, 36, 
+       64, 38, 38, 39, 37, 36, 36, 36, 
+       36, 65, 36, 66, 38, 38, 39, 37, 
+       36, 66, 38, 38, 39, 37, 36, 36, 
+       36, 36, 67, 36, 68, 38, 38, 39, 
+       37, 36, 68, 38, 38, 39, 37, 36, 
+       36, 36, 36, 69, 36, 70, 38, 38, 
+       39, 37, 36, 70, 38, 38, 39, 37, 
+       36, 36, 36, 36, 71, 36, 73, 72, 
+       74, 74, 75, 73, 72, 77, 77, 75, 
+       76, 75, 76, 78, 78, 79, 73, 72, 
+       80, 80, 79, 72, 79, 72, 81, 81, 
+       82, 73, 72, 83, 83, 82, 72, 82, 
+       72, 84, 84, 85, 73, 72, 86, 86, 
+       85, 72, 85, 72, 87, 72, 72, 72, 
+       73, 72, 88, 72, 89, 72, 90, 84, 
+       84, 85, 73, 72, 91, 72, 92, 72, 
+       93, 81, 81, 82, 73, 72, 94, 72, 
+       95, 72, 96, 78, 78, 79, 73, 72, 
+       97, 72, 98, 72, 99, 74, 74, 75, 
+       73, 72, 99, 74, 74, 75, 73, 72, 
+       72, 72, 72, 100, 72, 101, 74, 74, 
+       75, 73, 72, 101, 74, 74, 75, 73, 
+       72, 72, 72, 72, 102, 72, 103, 74, 
+       74, 75, 73, 72, 103, 74, 74, 75, 
+       73, 72, 72, 72, 72, 104, 72, 105, 
+       74, 74, 75, 73, 72, 105, 74, 74, 
+       75, 73, 72, 72, 72, 72, 106, 72, 
+       107, 74, 74, 75, 73, 72, 109, 108, 
+       110, 110, 111, 109, 108, 112, 112, 111, 
+       108, 111, 108, 113, 113, 114, 109, 108, 
+       115, 115, 114, 108, 114, 108, 116, 116, 
+       117, 109, 108, 118, 118, 117, 108, 117, 
+       108, 119, 119, 120, 109, 108, 121, 121, 
+       120, 108, 120, 108, 122, 108, 108, 108, 
+       109, 108, 123, 108, 124, 108, 125, 119, 
+       119, 120, 109, 108, 126, 108, 127, 108, 
+       128, 116, 116, 117, 109, 108, 129, 108, 
+       130, 108, 131, 113, 113, 114, 109, 108, 
+       132, 108, 133, 108, 134, 110, 110, 111, 
+       109, 108, 134, 110, 110, 111, 109, 108, 
+       108, 108, 108, 135, 108, 136, 110, 110, 
+       111, 109, 108, 136, 110, 110, 111, 109, 
+       108, 108, 108, 108, 137, 108, 138, 110, 
+       110, 111, 109, 108, 138, 110, 110, 111, 
+       109, 108, 108, 108, 108, 139, 108, 140, 
+       110, 110, 111, 109, 108, 140, 110, 110, 
+       111, 109, 108, 108, 108, 108, 141, 108, 
+       142, 110, 110, 111, 109, 108, 142, 110, 
+       110, 111, 109, 108, 108, 108, 108, 143, 
+       108, 107, 74, 74, 75, 73, 72, 72, 
+       72, 72, 144, 72, 77, 77, 75, 1, 
+       0, 145, 145, 146, 1, 0, 4, 4, 
+       146, 0, 147, 147, 148, 149, 0, 150, 
+       150, 148, 0, 148, 0, 151, 151, 152, 
+       149, 0, 153, 153, 152, 0, 152, 0, 
+       154, 154, 155, 149, 0, 156, 156, 155, 
+       0, 155, 0, 149, 0, 157, 0, 0, 
+       0, 149, 0, 158, 0, 159, 0, 160, 
+       154, 154, 155, 149, 0, 161, 0, 162, 
+       0, 163, 151, 151, 152, 149, 0, 164, 
+       0, 165, 0, 166, 147, 147, 148, 149, 
+       0, 167, 0, 168, 0, 170, 169, 172, 
+       173, 174, 175, 176, 177, 75, 73, 171, 
+       178, 179, 179, 144, 171, 180, 181, 182, 
+       183, 184, 171, 186, 187, 188, 189, 3, 
+       1, 185, 190, 185, 185, 35, 185, 185, 
+       185, 191, 185, 192, 187, 193, 193, 3, 
+       1, 185, 190, 185, 185, 185, 185, 185, 
+       185, 191, 185, 187, 193, 193, 3, 1, 
+       185, 190, 185, 185, 185, 185, 185, 185, 
+       191, 185, 194, 185, 185, 185, 16, 195, 
+       185, 1, 185, 190, 185, 185, 185, 185, 
+       185, 194, 185, 196, 197, 198, 199, 3, 
+       1, 185, 190, 185, 185, 33, 185, 185, 
+       185, 191, 185, 200, 197, 201, 201, 3, 
+       1, 185, 190, 185, 185, 185, 185, 185, 
+       185, 191, 185, 197, 201, 201, 3, 1, 
+       185, 190, 185, 185, 185, 185, 185, 185, 
+       191, 185, 202, 185, 185, 185, 16, 203, 
+       185, 1, 185, 190, 185, 185, 185, 185, 
+       185, 202, 185, 204, 205, 206, 207, 3, 
+       1, 185, 190, 185, 185, 31, 185, 185, 
+       185, 191, 185, 208, 205, 209, 209, 3, 
+       1, 185, 190, 185, 185, 185, 185, 185, 
+       185, 191, 185, 205, 209, 209, 3, 1, 
+       185, 190, 185, 185, 185, 185, 185, 185, 
+       191, 185, 210, 185, 185, 185, 16, 211, 
+       185, 1, 185, 190, 185, 185, 185, 185, 
+       185, 210, 185, 212, 213, 214, 215, 3, 
+       1, 185, 190, 185, 185, 29, 185, 185, 
+       185, 191, 185, 216, 213, 217, 217, 3, 
+       1, 185, 190, 185, 185, 185, 185, 185, 
+       185, 191, 185, 213, 217, 217, 3, 1, 
+       185, 190, 185, 185, 185, 185, 185, 185, 
+       191, 185, 218, 185, 185, 185, 16, 219, 
+       185, 1, 185, 190, 185, 185, 185, 185, 
+       185, 218, 185, 220, 221, 222, 223, 3, 
+       1, 185, 190, 185, 185, 27, 185, 185, 
+       185, 191, 185, 224, 221, 225, 225, 3, 
+       1, 185, 190, 185, 185, 185, 185, 185, 
+       185, 191, 185, 221, 225, 225, 3, 1, 
+       185, 190, 185, 185, 185, 185, 185, 185, 
+       191, 185, 16, 226, 185, 1, 185, 190, 
+       185, 227, 227, 185, 1, 185, 190, 185, 
+       228, 185, 185, 229, 185, 190, 185, 190, 
+       185, 230, 185, 231, 185, 228, 185, 185, 
+       185, 185, 190, 185, 16, 185, 232, 232, 
+       3, 1, 185, 190, 185, 233, 25, 234, 
+       235, 6, 1, 185, 190, 185, 25, 234, 
+       235, 6, 1, 185, 190, 185, 234, 234, 
+       6, 1, 185, 190, 185, 236, 22, 237, 
+       238, 9, 1, 185, 190, 185, 22, 237, 
+       238, 9, 1, 185, 190, 185, 237, 237, 
+       9, 1, 185, 190, 185, 239, 19, 240, 
+       241, 12, 1, 185, 190, 185, 19, 240, 
+       241, 12, 1, 185, 190, 185, 240, 240, 
+       12, 1, 185, 190, 185, 242, 16, 227, 
+       243, 185, 1, 185, 190, 185, 16, 227, 
+       243, 185, 1, 185, 190, 185, 227, 244, 
+       185, 1, 185, 190, 185, 16, 185, 227, 
+       227, 185, 1, 185, 190, 185, 221, 225, 
+       225, 3, 1, 185, 190, 185, 220, 221, 
+       225, 225, 3, 1, 185, 190, 185, 185, 
+       185, 185, 185, 185, 191, 185, 220, 221, 
+       222, 225, 3, 1, 185, 190, 185, 185, 
+       27, 185, 185, 185, 191, 185, 218, 185, 
+       245, 185, 232, 232, 3, 1, 185, 190, 
+       185, 185, 185, 185, 185, 218, 185, 218, 
+       185, 185, 185, 227, 227, 185, 1, 185, 
+       190, 185, 185, 185, 185, 185, 218, 185, 
+       218, 185, 185, 185, 227, 246, 185, 1, 
+       185, 190, 185, 185, 185, 185, 185, 218, 
+       185, 218, 185, 245, 185, 227, 227, 185, 
+       1, 185, 190, 185, 185, 185, 185, 185, 
+       218, 185, 212, 213, 217, 217, 3, 1, 
+       185, 190, 185, 185, 185, 185, 185, 185, 
+       191, 185, 212, 213, 214, 217, 3, 1, 
+       185, 190, 185, 185, 29, 185, 185, 185, 
+       191, 185, 210, 185, 247, 185, 232, 232, 
+       3, 1, 185, 190, 185, 185, 185, 185, 
+       185, 210, 185, 210, 185, 185, 185, 227, 
+       227, 185, 1, 185, 190, 185, 185, 185, 
+       185, 185, 210, 185, 210, 185, 185, 185, 
+       227, 248, 185, 1, 185, 190, 185, 185, 
+       185, 185, 185, 210, 185, 210, 185, 247, 
+       185, 227, 227, 185, 1, 185, 190, 185, 
+       185, 185, 185, 185, 210, 185, 204, 205, 
+       209, 209, 3, 1, 185, 190, 185, 185, 
+       185, 185, 185, 185, 191, 185, 204, 205, 
+       206, 209, 3, 1, 185, 190, 185, 185, 
+       31, 185, 185, 185, 191, 185, 202, 185, 
+       249, 185, 232, 232, 3, 1, 185, 190, 
+       185, 185, 185, 185, 185, 202, 185, 202, 
+       185, 185, 185, 227, 227, 185, 1, 185, 
+       190, 185, 185, 185, 185, 185, 202, 185, 
+       202, 185, 185, 185, 227, 250, 185, 1, 
+       185, 190, 185, 185, 185, 185, 185, 202, 
+       185, 202, 185, 249, 185, 227, 227, 185, 
+       1, 185, 190, 185, 185, 185, 185, 185, 
+       202, 185, 196, 197, 201, 201, 3, 1, 
+       185, 190, 185, 185, 185, 185, 185, 185, 
+       191, 185, 196, 197, 198, 201, 3, 1, 
+       185, 190, 185, 185, 33, 185, 185, 185, 
+       191, 185, 194, 185, 251, 185, 232, 232, 
+       3, 1, 185, 190, 185, 185, 185, 185, 
+       185, 194, 185, 194, 185, 185, 185, 227, 
+       227, 185, 1, 185, 190, 185, 185, 185, 
+       185, 185, 194, 185, 194, 185, 185, 185, 
+       227, 252, 185, 1, 185, 190, 185, 185, 
+       185, 185, 185, 194, 185, 194, 185, 251, 
+       185, 227, 227, 185, 1, 185, 190, 185, 
+       185, 185, 185, 185, 194, 185, 186, 187, 
+       193, 193, 3, 1, 185, 190, 185, 185, 
+       185, 185, 185, 185, 191, 185, 186, 187, 
+       188, 193, 3, 1, 185, 190, 185, 185, 
+       35, 185, 185, 185, 191, 185, 254, 255, 
+       256, 257, 39, 37, 253, 258, 253, 253, 
+       71, 253, 253, 253, 259, 253, 260, 255, 
+       261, 257, 39, 37, 253, 258, 253, 253, 
+       253, 253, 253, 253, 259, 253, 255, 261, 
+       257, 39, 37, 253, 258, 253, 253, 253, 
+       253, 253, 253, 259, 253, 262, 253, 253, 
+       253, 52, 263, 253, 37, 253, 258, 253, 
+       253, 253, 253, 253, 262, 253, 264, 265, 
+       266, 267, 39, 37, 253, 258, 253, 253, 
+       69, 253, 253, 253, 259, 253, 268, 265, 
+       269, 269, 39, 37, 253, 258, 253, 253, 
+       253, 253, 253, 253, 259, 253, 265, 269, 
+       269, 39, 37, 253, 258, 253, 253, 253, 
+       253, 253, 253, 259, 253, 270, 253, 253, 
+       253, 52, 271, 253, 37, 253, 258, 253, 
+       253, 253, 253, 253, 270, 253, 272, 273, 
+       274, 275, 39, 37, 253, 258, 253, 253, 
+       67, 253, 253, 253, 259, 253, 276, 273, 
+       277, 277, 39, 37, 253, 258, 253, 253, 
+       253, 253, 253, 253, 259, 253, 273, 277, 
+       277, 39, 37, 253, 258, 253, 253, 253, 
+       253, 253, 253, 259, 253, 278, 253, 253, 
+       253, 52, 279, 253, 37, 253, 258, 253, 
+       253, 253, 253, 253, 278, 253, 280, 281, 
+       282, 283, 39, 37, 253, 258, 253, 253, 
+       65, 253, 253, 253, 259, 253, 284, 281, 
+       285, 285, 39, 37, 253, 258, 253, 253, 
+       253, 253, 253, 253, 259, 253, 281, 285, 
+       285, 39, 37, 253, 258, 253, 253, 253, 
+       253, 253, 253, 259, 253, 286, 253, 253, 
+       253, 52, 287, 253, 37, 253, 258, 253, 
+       253, 253, 253, 253, 286, 253, 288, 289, 
+       290, 291, 39, 37, 253, 258, 253, 253, 
+       63, 253, 253, 253, 259, 253, 292, 289, 
+       293, 293, 39, 37, 253, 258, 253, 253, 
+       253, 253, 253, 253, 259, 253, 289, 293, 
+       293, 39, 37, 253, 258, 253, 253, 253, 
+       253, 253, 253, 259, 253, 52, 294, 253, 
+       37, 253, 258, 253, 295, 295, 253, 37, 
+       253, 258, 253, 296, 253, 253, 297, 253, 
+       258, 253, 258, 253, 298, 253, 299, 253, 
+       296, 253, 253, 253, 253, 258, 253, 52, 
+       253, 300, 300, 39, 37, 253, 258, 253, 
+       301, 61, 302, 303, 42, 37, 253, 258, 
+       253, 61, 302, 303, 42, 37, 253, 258, 
+       253, 302, 302, 42, 37, 253, 258, 253, 
+       304, 58, 305, 306, 45, 37, 253, 258, 
+       253, 58, 305, 306, 45, 37, 253, 258, 
+       253, 305, 305, 45, 37, 253, 258, 253, 
+       307, 55, 308, 309, 48, 37, 253, 258, 
+       253, 55, 308, 309, 48, 37, 253, 258, 
+       253, 308, 308, 48, 37, 253, 258, 253, 
+       310, 52, 295, 311, 253, 37, 253, 258, 
+       253, 52, 295, 311, 253, 37, 253, 258, 
+       253, 295, 312, 253, 37, 253, 258, 253, 
+       52, 253, 295, 295, 253, 37, 253, 258, 
+       253, 289, 293, 293, 39, 37, 253, 258, 
+       253, 288, 289, 293, 293, 39, 37, 253, 
+       258, 253, 253, 253, 253, 253, 253, 259, 
+       253, 288, 289, 290, 293, 39, 37, 253, 
+       258, 253, 253, 63, 253, 253, 253, 259, 
+       253, 286, 253, 313, 253, 300, 300, 39, 
+       37, 253, 258, 253, 253, 253, 253, 253, 
+       286, 253, 286, 253, 253, 253, 295, 295, 
+       253, 37, 253, 258, 253, 253, 253, 253, 
+       253, 286, 253, 286, 253, 253, 253, 295, 
+       314, 253, 37, 253, 258, 253, 253, 253, 
+       253, 253, 286, 253, 286, 253, 313, 253, 
+       295, 295, 253, 37, 253, 258, 253, 253, 
+       253, 253, 253, 286, 253, 280, 281, 285, 
+       285, 39, 37, 253, 258, 253, 253, 253, 
+       253, 253, 253, 259, 253, 280, 281, 282, 
+       285, 39, 37, 253, 258, 253, 253, 65, 
+       253, 253, 253, 259, 253, 278, 253, 315, 
+       253, 300, 300, 39, 37, 253, 258, 253, 
+       253, 253, 253, 253, 278, 253, 278, 253, 
+       253, 253, 295, 295, 253, 37, 253, 258, 
+       253, 253, 253, 253, 253, 278, 253, 278, 
+       253, 253, 253, 295, 316, 253, 37, 253, 
+       258, 253, 253, 253, 253, 253, 278, 253, 
+       278, 253, 315, 253, 295, 295, 253, 37, 
+       253, 258, 253, 253, 253, 253, 253, 278, 
+       253, 272, 273, 277, 277, 39, 37, 253, 
+       258, 253, 253, 253, 253, 253, 253, 259, 
+       253, 272, 273, 274, 277, 39, 37, 253, 
+       258, 253, 253, 67, 253, 253, 253, 259, 
+       253, 270, 253, 317, 253, 300, 300, 39, 
+       37, 253, 258, 253, 253, 253, 253, 253, 
+       270, 253, 270, 253, 253, 253, 295, 295, 
+       253, 37, 253, 258, 253, 253, 253, 253, 
+       253, 270, 253, 270, 253, 253, 253, 295, 
+       318, 253, 37, 253, 258, 253, 253, 253, 
+       253, 253, 270, 253, 270, 253, 317, 253, 
+       295, 295, 253, 37, 253, 258, 253, 253, 
+       253, 253, 253, 270, 253, 264, 265, 269, 
+       269, 39, 37, 253, 258, 253, 253, 253, 
+       253, 253, 253, 259, 253, 264, 265, 266, 
+       269, 39, 37, 253, 258, 253, 253, 69, 
+       253, 253, 253, 259, 253, 262, 253, 319, 
+       253, 300, 300, 39, 37, 253, 258, 253, 
+       253, 253, 253, 253, 262, 253, 262, 253, 
+       253, 253, 295, 295, 253, 37, 253, 258, 
+       253, 253, 253, 253, 253, 262, 253, 262, 
+       253, 253, 253, 295, 320, 253, 37, 253, 
+       258, 253, 253, 253, 253, 253, 262, 253, 
+       262, 253, 319, 253, 295, 295, 253, 37, 
+       253, 258, 253, 253, 253, 253, 253, 262, 
+       253, 70, 38, 38, 39, 37, 253, 254, 
+       255, 261, 257, 39, 37, 253, 258, 253, 
+       253, 253, 253, 253, 253, 259, 253, 322, 
+       175, 323, 323, 75, 73, 321, 178, 321, 
+       321, 321, 321, 321, 321, 182, 321, 175, 
+       323, 323, 75, 73, 321, 178, 321, 321, 
+       321, 321, 321, 321, 182, 321, 324, 321, 
+       321, 321, 89, 325, 321, 73, 321, 178, 
+       321, 321, 321, 321, 321, 324, 321, 326, 
+       327, 328, 329, 75, 73, 321, 178, 321, 
+       321, 106, 321, 321, 321, 182, 321, 330, 
+       327, 331, 331, 75, 73, 321, 178, 321, 
+       321, 321, 321, 321, 321, 182, 321, 327, 
+       331, 331, 75, 73, 321, 178, 321, 321, 
+       321, 321, 321, 321, 182, 321, 332, 321, 
+       321, 321, 89, 333, 321, 73, 321, 178, 
+       321, 321, 321, 321, 321, 332, 321, 334, 
+       335, 336, 337, 75, 73, 321, 178, 321, 
+       321, 104, 321, 321, 321, 182, 321, 338, 
+       335, 339, 339, 75, 73, 321, 178, 321, 
+       321, 321, 321, 321, 321, 182, 321, 335, 
+       339, 339, 75, 73, 321, 178, 321, 321, 
+       321, 321, 321, 321, 182, 321, 340, 321, 
+       321, 321, 89, 341, 321, 73, 321, 178, 
+       321, 321, 321, 321, 321, 340, 321, 342, 
+       343, 344, 345, 75, 73, 321, 178, 321, 
+       321, 102, 321, 321, 321, 182, 321, 346, 
+       343, 347, 347, 75, 73, 321, 178, 321, 
+       321, 321, 321, 321, 321, 182, 321, 343, 
+       347, 347, 75, 73, 321, 178, 321, 321, 
+       321, 321, 321, 321, 182, 321, 348, 321, 
+       321, 321, 89, 349, 321, 73, 321, 178, 
+       321, 321, 321, 321, 321, 348, 321, 350, 
+       351, 352, 353, 75, 73, 321, 178, 321, 
+       321, 100, 321, 321, 321, 182, 321, 354, 
+       351, 355, 355, 75, 73, 321, 178, 321, 
+       321, 321, 321, 321, 321, 182, 321, 351, 
+       355, 355, 75, 73, 321, 178, 321, 321, 
+       321, 321, 321, 321, 182, 321, 89, 356, 
+       321, 73, 321, 178, 321, 357, 357, 321, 
+       73, 321, 178, 321, 358, 321, 321, 359, 
+       321, 178, 321, 178, 321, 360, 321, 361, 
+       321, 358, 321, 321, 321, 321, 178, 321, 
+       89, 321, 362, 362, 75, 73, 321, 178, 
+       321, 363, 98, 364, 365, 79, 73, 321, 
+       178, 321, 98, 364, 365, 79, 73, 321, 
+       178, 321, 364, 364, 79, 73, 321, 178, 
+       321, 366, 95, 367, 368, 82, 73, 321, 
+       178, 321, 95, 367, 368, 82, 73, 321, 
+       178, 321, 367, 367, 82, 73, 321, 178, 
+       321, 369, 92, 370, 371, 85, 73, 321, 
+       178, 321, 92, 370, 371, 85, 73, 321, 
+       178, 321, 370, 370, 85, 73, 321, 178, 
+       321, 372, 89, 357, 373, 321, 73, 321, 
+       178, 321, 89, 357, 373, 321, 73, 321, 
+       178, 321, 357, 374, 321, 73, 321, 178, 
+       321, 89, 321, 357, 357, 321, 73, 321, 
+       178, 321, 351, 355, 355, 75, 73, 321, 
+       178, 321, 350, 351, 355, 355, 75, 73, 
+       321, 178, 321, 321, 321, 321, 321, 321, 
+       182, 321, 350, 351, 352, 355, 75, 73, 
+       321, 178, 321, 321, 100, 321, 321, 321, 
+       182, 321, 348, 321, 375, 321, 362, 362, 
+       75, 73, 321, 178, 321, 321, 321, 321, 
+       321, 348, 321, 348, 321, 321, 321, 357, 
+       357, 321, 73, 321, 178, 321, 321, 321, 
+       321, 321, 348, 321, 348, 321, 321, 321, 
+       357, 376, 321, 73, 321, 178, 321, 321, 
+       321, 321, 321, 348, 321, 348, 321, 375, 
+       321, 357, 357, 321, 73, 321, 178, 321, 
+       321, 321, 321, 321, 348, 321, 342, 343, 
+       347, 347, 75, 73, 321, 178, 321, 321, 
+       321, 321, 321, 321, 182, 321, 342, 343, 
+       344, 347, 75, 73, 321, 178, 321, 321, 
+       102, 321, 321, 321, 182, 321, 340, 321, 
+       377, 321, 362, 362, 75, 73, 321, 178, 
+       321, 321, 321, 321, 321, 340, 321, 340, 
+       321, 321, 321, 357, 357, 321, 73, 321, 
+       178, 321, 321, 321, 321, 321, 340, 321, 
+       340, 321, 321, 321, 357, 378, 321, 73, 
+       321, 178, 321, 321, 321, 321, 321, 340, 
+       321, 340, 321, 377, 321, 357, 357, 321, 
+       73, 321, 178, 321, 321, 321, 321, 321, 
+       340, 321, 334, 335, 339, 339, 75, 73, 
+       321, 178, 321, 321, 321, 321, 321, 321, 
+       182, 321, 334, 335, 336, 339, 75, 73, 
+       321, 178, 321, 321, 104, 321, 321, 321, 
+       182, 321, 332, 321, 379, 321, 362, 362, 
+       75, 73, 321, 178, 321, 321, 321, 321, 
+       321, 332, 321, 332, 321, 321, 321, 357, 
+       357, 321, 73, 321, 178, 321, 321, 321, 
+       321, 321, 332, 321, 332, 321, 321, 321, 
+       357, 380, 321, 73, 321, 178, 321, 321, 
+       321, 321, 321, 332, 321, 332, 321, 379, 
+       321, 357, 357, 321, 73, 321, 178, 321, 
+       321, 321, 321, 321, 332, 321, 326, 327, 
+       331, 331, 75, 73, 321, 178, 321, 321, 
+       321, 321, 321, 321, 182, 321, 326, 327, 
+       328, 331, 75, 73, 321, 178, 321, 321, 
+       106, 321, 321, 321, 182, 321, 324, 321, 
+       381, 321, 362, 362, 75, 73, 321, 178, 
+       321, 321, 321, 321, 321, 324, 321, 324, 
+       321, 321, 321, 357, 357, 321, 73, 321, 
+       178, 321, 321, 321, 321, 321, 324, 321, 
+       324, 321, 321, 321, 357, 382, 321, 73, 
+       321, 178, 321, 321, 321, 321, 321, 324, 
+       321, 324, 321, 381, 321, 357, 357, 321, 
+       73, 321, 178, 321, 321, 321, 321, 321, 
+       324, 321, 107, 74, 74, 75, 73, 383, 
+       383, 383, 383, 144, 383, 174, 175, 323, 
+       323, 75, 73, 321, 178, 321, 321, 321, 
+       321, 321, 321, 182, 321, 107, 74, 74, 
+       75, 73, 383, 385, 386, 387, 388, 111, 
+       109, 384, 389, 384, 384, 143, 384, 384, 
+       384, 390, 384, 391, 386, 388, 388, 111, 
+       109, 384, 389, 384, 384, 384, 384, 384, 
+       384, 390, 384, 386, 388, 388, 111, 109, 
+       384, 389, 384, 384, 384, 384, 384, 384, 
+       390, 384, 392, 384, 384, 384, 124, 393, 
+       384, 109, 384, 389, 384, 384, 384, 384, 
+       384, 392, 384, 394, 395, 396, 397, 111, 
+       109, 384, 389, 384, 384, 141, 384, 384, 
+       384, 390, 384, 398, 395, 399, 399, 111, 
+       109, 384, 389, 384, 384, 384, 384, 384, 
+       384, 390, 384, 395, 399, 399, 111, 109, 
+       384, 389, 384, 384, 384, 384, 384, 384, 
+       390, 384, 400, 384, 384, 384, 124, 401, 
+       384, 109, 384, 389, 384, 384, 384, 384, 
+       384, 400, 384, 402, 403, 404, 405, 111, 
+       109, 384, 389, 384, 384, 139, 384, 384, 
+       384, 390, 384, 406, 403, 407, 407, 111, 
+       109, 384, 389, 384, 384, 384, 384, 384, 
+       384, 390, 384, 403, 407, 407, 111, 109, 
+       384, 389, 384, 384, 384, 384, 384, 384, 
+       390, 384, 408, 384, 384, 384, 124, 409, 
+       384, 109, 384, 389, 384, 384, 384, 384, 
+       384, 408, 384, 410, 411, 412, 413, 111, 
+       109, 384, 389, 384, 384, 137, 384, 384, 
+       384, 390, 384, 414, 411, 415, 415, 111, 
+       109, 384, 389, 384, 384, 384, 384, 384, 
+       384, 390, 384, 411, 415, 415, 111, 109, 
+       384, 389, 384, 384, 384, 384, 384, 384, 
+       390, 384, 416, 384, 384, 384, 124, 417, 
+       384, 109, 384, 389, 384, 384, 384, 384, 
+       384, 416, 384, 418, 419, 420, 421, 111, 
+       109, 384, 389, 384, 384, 135, 384, 384, 
+       384, 390, 384, 422, 419, 423, 423, 111, 
+       109, 384, 389, 384, 384, 384, 384, 384, 
+       384, 390, 384, 419, 423, 423, 111, 109, 
+       384, 389, 384, 384, 384, 384, 384, 384, 
+       390, 384, 124, 424, 384, 109, 384, 389, 
+       384, 425, 425, 384, 109, 384, 389, 384, 
+       426, 384, 384, 427, 384, 389, 384, 389, 
+       384, 428, 384, 429, 384, 426, 384, 384, 
+       384, 384, 389, 384, 124, 384, 430, 430, 
+       111, 109, 384, 389, 384, 431, 133, 432, 
+       433, 114, 109, 384, 389, 384, 133, 432, 
+       433, 114, 109, 384, 389, 384, 432, 432, 
+       114, 109, 384, 389, 384, 434, 130, 435, 
+       436, 117, 109, 384, 389, 384, 130, 435, 
+       436, 117, 109, 384, 389, 384, 435, 435, 
+       117, 109, 384, 389, 384, 437, 127, 438, 
+       439, 120, 109, 384, 389, 384, 127, 438, 
+       439, 120, 109, 384, 389, 384, 438, 438, 
+       120, 109, 384, 389, 384, 440, 124, 425, 
+       441, 384, 109, 384, 389, 384, 124, 425, 
+       441, 384, 109, 384, 389, 384, 425, 442, 
+       384, 109, 384, 389, 384, 124, 384, 425, 
+       425, 384, 109, 384, 389, 384, 419, 423, 
+       423, 111, 109, 384, 389, 384, 418, 419, 
+       423, 423, 111, 109, 384, 389, 384, 384, 
+       384, 384, 384, 384, 390, 384, 418, 419, 
+       420, 423, 111, 109, 384, 389, 384, 384, 
+       135, 384, 384, 384, 390, 384, 416, 384, 
+       443, 384, 430, 430, 111, 109, 384, 389, 
+       384, 384, 384, 384, 384, 416, 384, 416, 
+       384, 384, 384, 425, 425, 384, 109, 384, 
+       389, 384, 384, 384, 384, 384, 416, 384, 
+       416, 384, 384, 384, 425, 444, 384, 109, 
+       384, 389, 384, 384, 384, 384, 384, 416, 
+       384, 416, 384, 443, 384, 425, 425, 384, 
+       109, 384, 389, 384, 384, 384, 384, 384, 
+       416, 384, 410, 411, 415, 415, 111, 109, 
+       384, 389, 384, 384, 384, 384, 384, 384, 
+       390, 384, 410, 411, 412, 415, 111, 109, 
+       384, 389, 384, 384, 137, 384, 384, 384, 
+       390, 384, 408, 384, 445, 384, 430, 430, 
+       111, 109, 384, 389, 384, 384, 384, 384, 
+       384, 408, 384, 408, 384, 384, 384, 425, 
+       425, 384, 109, 384, 389, 384, 384, 384, 
+       384, 384, 408, 384, 408, 384, 384, 384, 
+       425, 446, 384, 109, 384, 389, 384, 384, 
+       384, 384, 384, 408, 384, 408, 384, 445, 
+       384, 425, 425, 384, 109, 384, 389, 384, 
+       384, 384, 384, 384, 408, 384, 402, 403, 
+       407, 407, 111, 109, 384, 389, 384, 384, 
+       384, 384, 384, 384, 390, 384, 402, 403, 
+       404, 407, 111, 109, 384, 389, 384, 384, 
+       139, 384, 384, 384, 390, 384, 400, 384, 
+       447, 384, 430, 430, 111, 109, 384, 389, 
+       384, 384, 384, 384, 384, 400, 384, 400, 
+       384, 384, 384, 425, 425, 384, 109, 384, 
+       389, 384, 384, 384, 384, 384, 400, 384, 
+       400, 384, 384, 384, 425, 448, 384, 109, 
+       384, 389, 384, 384, 384, 384, 384, 400, 
+       384, 400, 384, 447, 384, 425, 425, 384, 
+       109, 384, 389, 384, 384, 384, 384, 384, 
+       400, 384, 394, 395, 399, 399, 111, 109, 
+       384, 389, 384, 384, 384, 384, 384, 384, 
+       390, 384, 394, 395, 396, 399, 111, 109, 
+       384, 389, 384, 384, 141, 384, 384, 384, 
+       390, 384, 392, 384, 449, 384, 430, 430, 
+       111, 109, 384, 389, 384, 384, 384, 384, 
+       384, 392, 384, 392, 384, 384, 384, 425, 
+       425, 384, 109, 384, 389, 384, 384, 384, 
+       384, 384, 392, 384, 392, 384, 384, 384, 
+       425, 450, 384, 109, 384, 389, 384, 384, 
+       384, 384, 384, 392, 384, 392, 384, 449, 
+       384, 425, 425, 384, 109, 384, 389, 384, 
+       384, 384, 384, 384, 392, 384, 385, 386, 
+       388, 388, 111, 109, 384, 389, 384, 384, 
+       384, 384, 384, 384, 390, 384, 172, 173, 
+       174, 175, 451, 323, 75, 73, 321, 178, 
+       179, 179, 144, 321, 321, 172, 182, 321, 
+       186, 452, 188, 189, 3, 1, 185, 190, 
+       185, 185, 35, 185, 185, 185, 191, 185, 
+       194, 173, 174, 175, 453, 454, 75, 149, 
+       185, 455, 185, 179, 144, 185, 185, 194, 
+       182, 185, 107, 456, 456, 75, 149, 185, 
+       190, 185, 185, 144, 185, 457, 185, 185, 
+       458, 185, 455, 185, 455, 185, 459, 185, 
+       231, 185, 457, 185, 185, 185, 185, 455, 
+       185, 194, 185, 251, 107, 460, 460, 146, 
+       149, 185, 190, 185, 185, 185, 185, 185, 
+       194, 185, 461, 168, 462, 463, 148, 149, 
+       185, 455, 185, 168, 462, 463, 148, 149, 
+       185, 455, 185, 462, 462, 148, 149, 185, 
+       455, 185, 464, 165, 465, 466, 152, 149, 
+       185, 455, 185, 165, 465, 466, 152, 149, 
+       185, 455, 185, 465, 465, 152, 149, 185, 
+       455, 185, 467, 162, 468, 469, 155, 149, 
+       185, 455, 185, 162, 468, 469, 155, 149, 
+       185, 455, 185, 468, 468, 155, 149, 185, 
+       455, 185, 470, 159, 471, 472, 185, 149, 
+       185, 455, 185, 159, 471, 472, 185, 149, 
+       185, 455, 185, 471, 471, 185, 149, 185, 
+       455, 185, 474, 473, 475, 475, 473, 170, 
+       473, 476, 473, 475, 475, 473, 170, 473, 
+       476, 473, 477, 473, 473, 478, 473, 476, 
+       473, 476, 473, 479, 473, 480, 473, 477, 
+       473, 473, 473, 473, 476, 473, 172, 383, 
+       383, 383, 383, 383, 383, 383, 383, 383, 
+       179, 383, 383, 383, 383, 172, 383, 0
+};
+
+static const short _indic_syllable_machine_trans_targs[] = {
+       166, 188, 2, 194, 3, 5, 197, 6, 
+       8, 200, 9, 11, 203, 12, 14, 15, 
+       187, 17, 18, 202, 20, 21, 199, 23, 
+       24, 196, 205, 208, 212, 214, 218, 220, 
+       224, 226, 230, 232, 166, 255, 37, 261, 
+       38, 40, 264, 41, 43, 267, 44, 46, 
+       270, 47, 49, 50, 254, 52, 53, 269, 
+       55, 56, 266, 58, 59, 263, 272, 275, 
+       279, 281, 285, 287, 291, 293, 297, 300, 
+       166, 321, 72, 327, 166, 73, 75, 330, 
+       76, 78, 333, 79, 81, 336, 82, 84, 
+       85, 320, 87, 88, 335, 90, 91, 332, 
+       93, 94, 329, 338, 341, 345, 347, 351, 
+       353, 357, 359, 363, 166, 389, 106, 395, 
+       107, 109, 398, 110, 112, 401, 113, 115, 
+       404, 116, 118, 119, 388, 121, 122, 403, 
+       124, 125, 400, 127, 128, 397, 406, 409, 
+       413, 415, 419, 421, 425, 427, 431, 433, 
+       366, 142, 444, 144, 447, 438, 145, 147, 
+       450, 148, 150, 453, 151, 154, 155, 455, 
+       157, 158, 452, 160, 161, 449, 163, 164, 
+       446, 166, 458, 166, 167, 234, 301, 303, 
+       365, 367, 323, 368, 434, 435, 340, 456, 
+       463, 166, 168, 170, 34, 233, 190, 207, 
+       169, 33, 171, 228, 172, 174, 32, 227, 
+       173, 31, 175, 222, 176, 178, 30, 221, 
+       177, 29, 179, 216, 180, 182, 28, 215, 
+       181, 27, 183, 210, 184, 186, 26, 209, 
+       185, 25, 193, 0, 189, 192, 191, 166, 
+       1, 195, 4, 22, 198, 7, 19, 201, 
+       10, 16, 204, 13, 206, 211, 213, 217, 
+       219, 223, 225, 229, 231, 166, 235, 237, 
+       69, 299, 257, 274, 236, 68, 238, 295, 
+       239, 241, 67, 294, 240, 66, 242, 289, 
+       243, 245, 65, 288, 244, 64, 246, 283, 
+       247, 249, 63, 282, 248, 62, 250, 277, 
+       251, 253, 61, 276, 252, 60, 260, 35, 
+       256, 259, 258, 166, 36, 262, 39, 57, 
+       265, 42, 54, 268, 45, 51, 271, 48, 
+       273, 278, 280, 284, 286, 290, 292, 296, 
+       298, 166, 302, 103, 304, 361, 305, 307, 
+       102, 360, 306, 101, 308, 355, 309, 311, 
+       100, 354, 310, 99, 312, 349, 313, 315, 
+       98, 348, 314, 97, 316, 343, 317, 319, 
+       96, 342, 318, 95, 326, 70, 322, 325, 
+       324, 166, 71, 328, 74, 92, 331, 77, 
+       89, 334, 80, 86, 337, 83, 339, 344, 
+       346, 350, 352, 356, 358, 362, 364, 166, 
+       166, 369, 371, 138, 137, 391, 408, 370, 
+       372, 429, 373, 375, 136, 428, 374, 135, 
+       376, 423, 377, 379, 134, 422, 378, 133, 
+       380, 417, 381, 383, 132, 416, 382, 131, 
+       384, 411, 385, 387, 130, 410, 386, 129, 
+       394, 104, 390, 393, 392, 166, 105, 396, 
+       108, 126, 399, 111, 123, 402, 114, 120, 
+       405, 117, 407, 412, 414, 418, 420, 424, 
+       426, 430, 432, 139, 436, 437, 443, 440, 
+       140, 439, 442, 441, 141, 445, 143, 162, 
+       448, 146, 159, 451, 149, 156, 454, 152, 
+       153, 166, 457, 165, 460, 459, 462, 461, 
+       166
+};
+
+static const char _indic_syllable_machine_trans_actions[] = {
+       1, 0, 0, 2, 0, 0, 2, 0, 
+       0, 2, 0, 0, 2, 0, 0, 0, 
+       2, 0, 0, 2, 0, 0, 2, 0, 
+       0, 2, 2, 2, 2, 2, 2, 2, 
+       2, 2, 2, 2, 3, 0, 0, 2, 
+       0, 0, 2, 0, 0, 2, 0, 0, 
+       2, 0, 0, 0, 2, 0, 0, 2, 
+       0, 0, 2, 0, 0, 2, 2, 2, 
+       2, 2, 2, 2, 2, 2, 2, 2, 
+       4, 0, 0, 2, 5, 0, 0, 2, 
+       0, 0, 2, 0, 0, 2, 0, 0, 
+       0, 2, 0, 0, 2, 0, 0, 2, 
+       0, 0, 2, 2, 6, 2, 6, 2, 
+       6, 2, 6, 2, 7, 0, 0, 2, 
+       0, 0, 2, 0, 0, 2, 0, 0, 
+       2, 0, 0, 0, 2, 0, 0, 2, 
+       0, 0, 2, 0, 0, 2, 2, 2, 
+       2, 2, 2, 2, 2, 2, 2, 2, 
+       6, 0, 2, 0, 2, 0, 0, 0, 
+       2, 0, 0, 2, 0, 0, 0, 2, 
+       0, 0, 2, 0, 0, 2, 0, 0, 
+       2, 8, 0, 11, 2, 2, 6, 0, 
+       12, 12, 0, 2, 6, 2, 6, 2, 
+       0, 13, 2, 0, 0, 2, 0, 2, 
+       2, 0, 2, 2, 2, 0, 0, 2, 
+       2, 0, 2, 2, 2, 0, 0, 2, 
+       2, 0, 2, 2, 2, 0, 0, 2, 
+       2, 0, 2, 2, 2, 0, 0, 2, 
+       2, 0, 2, 0, 0, 0, 0, 14, 
+       0, 2, 0, 0, 2, 0, 0, 2, 
+       0, 0, 2, 0, 2, 2, 2, 2, 
+       2, 2, 2, 2, 2, 15, 2, 0, 
+       0, 2, 0, 2, 2, 0, 2, 2, 
+       2, 0, 0, 2, 2, 0, 2, 2, 
+       2, 0, 0, 2, 2, 0, 2, 2, 
+       2, 0, 0, 2, 2, 0, 2, 2, 
+       2, 0, 0, 2, 2, 0, 2, 0, 
+       0, 0, 0, 16, 0, 2, 0, 0, 
+       2, 0, 0, 2, 0, 0, 2, 0, 
+       2, 2, 2, 2, 2, 2, 2, 2, 
+       2, 17, 6, 0, 6, 6, 6, 0, 
+       0, 6, 6, 0, 6, 6, 6, 0, 
+       0, 6, 6, 0, 6, 6, 6, 0, 
+       0, 6, 6, 0, 6, 6, 6, 0, 
+       0, 6, 6, 0, 6, 0, 0, 0, 
+       0, 18, 0, 2, 0, 0, 2, 0, 
+       0, 2, 0, 0, 2, 0, 2, 2, 
+       2, 2, 2, 2, 2, 2, 2, 19, 
+       20, 2, 0, 0, 0, 0, 2, 2, 
+       2, 2, 2, 0, 0, 2, 2, 0, 
+       2, 2, 2, 0, 0, 2, 2, 0, 
+       2, 2, 2, 0, 0, 2, 2, 0, 
+       2, 2, 2, 0, 0, 2, 2, 0, 
+       2, 0, 0, 0, 0, 21, 0, 2, 
+       0, 0, 2, 0, 0, 2, 0, 0, 
+       2, 0, 2, 2, 2, 2, 2, 2, 
+       2, 2, 2, 0, 0, 22, 2, 0, 
+       0, 0, 0, 0, 0, 2, 0, 0, 
+       2, 0, 0, 2, 0, 0, 2, 0, 
+       0, 23, 2, 0, 0, 0, 0, 0, 
+       24
+};
+
+static const char _indic_syllable_machine_to_state_actions[] = {
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 9, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static const char _indic_syllable_machine_from_state_actions[] = {
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 10, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static const short _indic_syllable_machine_eof_trans[] = {
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 37, 37, 37, 37, 37, 
+       37, 37, 37, 37, 37, 37, 37, 37, 
+       37, 37, 37, 37, 37, 37, 37, 37, 
+       37, 37, 37, 37, 37, 37, 37, 37, 
+       37, 37, 37, 37, 37, 37, 73, 73, 
+       77, 77, 73, 73, 73, 73, 73, 73, 
+       73, 73, 73, 73, 73, 73, 73, 73, 
+       73, 73, 73, 73, 73, 73, 73, 73, 
+       73, 73, 73, 73, 73, 73, 73, 73, 
+       109, 109, 109, 109, 109, 109, 109, 109, 
+       109, 109, 109, 109, 109, 109, 109, 109, 
+       109, 109, 109, 109, 109, 109, 109, 109, 
+       109, 109, 109, 109, 109, 109, 109, 109, 
+       109, 109, 109, 73, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 170, 0, 186, 
+       186, 186, 186, 186, 186, 186, 186, 186, 
+       186, 186, 186, 186, 186, 186, 186, 186, 
+       186, 186, 186, 186, 186, 186, 186, 186, 
+       186, 186, 186, 186, 186, 186, 186, 186, 
+       186, 186, 186, 186, 186, 186, 186, 186, 
+       186, 186, 186, 186, 186, 186, 186, 186, 
+       186, 186, 186, 186, 186, 186, 186, 186, 
+       186, 186, 186, 186, 186, 186, 186, 186, 
+       186, 186, 254, 254, 254, 254, 254, 254, 
+       254, 254, 254, 254, 254, 254, 254, 254, 
+       254, 254, 254, 254, 254, 254, 254, 254, 
+       254, 254, 254, 254, 254, 254, 254, 254, 
+       254, 254, 254, 254, 254, 254, 254, 254, 
+       254, 254, 254, 254, 254, 254, 254, 254, 
+       254, 254, 254, 254, 254, 254, 254, 254, 
+       254, 254, 254, 254, 254, 254, 254, 254, 
+       254, 254, 254, 254, 254, 322, 322, 322, 
+       322, 322, 322, 322, 322, 322, 322, 322, 
+       322, 322, 322, 322, 322, 322, 322, 322, 
+       322, 322, 322, 322, 322, 322, 322, 322, 
+       322, 322, 322, 322, 322, 322, 322, 322, 
+       322, 322, 322, 322, 322, 322, 322, 322, 
+       322, 322, 322, 322, 322, 322, 322, 322, 
+       322, 322, 322, 322, 322, 322, 322, 322, 
+       322, 322, 322, 322, 322, 384, 322, 384, 
+       385, 385, 385, 385, 385, 385, 385, 385, 
+       385, 385, 385, 385, 385, 385, 385, 385, 
+       385, 385, 385, 385, 385, 385, 385, 385, 
+       385, 385, 385, 385, 385, 385, 385, 385, 
+       385, 385, 385, 385, 385, 385, 385, 385, 
+       385, 385, 385, 385, 385, 385, 385, 385, 
+       385, 385, 385, 385, 385, 385, 385, 385, 
+       385, 385, 385, 385, 385, 385, 385, 385, 
+       385, 385, 322, 186, 186, 186, 186, 186, 
+       186, 186, 186, 186, 186, 186, 186, 186, 
+       186, 186, 186, 186, 186, 186, 186, 186, 
+       474, 474, 474, 474, 474, 474, 474, 384
+};
+
+static const int indic_syllable_machine_start = 166;
+static const int indic_syllable_machine_first_final = 166;
+static const int indic_syllable_machine_error = -1;
+
+static const int indic_syllable_machine_en_main = 166;
+
+
+#line 36 "hb-ot-shape-complex-indic-machine.rl"
+
+
+
+#line 92 "hb-ot-shape-complex-indic-machine.rl"
+
+
+#define found_syllable(syllable_type) \
+  HB_STMT_START { \
+    if (0) fprintf (stderr, "syllable %d..%d %s\n", last, p+1, #syllable_type); \
+    for (unsigned int i = last; i < p+1; i++) \
+      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
+    last = p+1; \
+    syllable_serial++; \
+    if (unlikely (syllable_serial == 16)) syllable_serial = 1; \
+  } HB_STMT_END
+
+static void
+find_syllables (hb_buffer_t *buffer)
+{
+  unsigned int p, pe, eof, ts HB_UNUSED, te HB_UNUSED, act HB_UNUSED;
+  int cs;
+  hb_glyph_info_t *info = buffer->info;
+  
+#line 1137 "hb-ot-shape-complex-indic-machine.hh"
+       {
+       cs = indic_syllable_machine_start;
+       ts = 0;
+       te = 0;
+       act = 0;
+       }
+
+#line 113 "hb-ot-shape-complex-indic-machine.rl"
+
+
+  p = 0;
+  pe = eof = buffer->len;
+
+  unsigned int last = 0;
+  unsigned int syllable_serial = 1;
+  
+#line 1154 "hb-ot-shape-complex-indic-machine.hh"
+       {
+       int _slen;
+       int _trans;
+       const unsigned char *_keys;
+       const short *_inds;
+       if ( p == pe )
+               goto _test_eof;
+_resume:
+       switch ( _indic_syllable_machine_from_state_actions[cs] ) {
+       case 10:
+#line 1 "NONE"
+       {ts = p;}
+       break;
+#line 1168 "hb-ot-shape-complex-indic-machine.hh"
+       }
+
+       _keys = _indic_syllable_machine_trans_keys + (cs<<1);
+       _inds = _indic_syllable_machine_indicies + _indic_syllable_machine_index_offsets[cs];
+
+       _slen = _indic_syllable_machine_key_spans[cs];
+       _trans = _inds[ _slen > 0 && _keys[0] <=( info[p].indic_category()) &&
+               ( info[p].indic_category()) <= _keys[1] ?
+               ( info[p].indic_category()) - _keys[0] : _slen ];
+
+_eof_trans:
+       cs = _indic_syllable_machine_trans_targs[_trans];
+
+       if ( _indic_syllable_machine_trans_actions[_trans] == 0 )
+               goto _again;
+
+       switch ( _indic_syllable_machine_trans_actions[_trans] ) {
+       case 2:
+#line 1 "NONE"
+       {te = p+1;}
+       break;
+       case 14:
+#line 83 "hb-ot-shape-complex-indic-machine.rl"
+       {te = p+1;{ found_syllable (consonant_syllable); }}
+       break;
+       case 16:
+#line 84 "hb-ot-shape-complex-indic-machine.rl"
+       {te = p+1;{ found_syllable (vowel_syllable); }}
+       break;
+       case 21:
+#line 85 "hb-ot-shape-complex-indic-machine.rl"
+       {te = p+1;{ found_syllable (standalone_cluster); }}
+       break;
+       case 24:
+#line 86 "hb-ot-shape-complex-indic-machine.rl"
+       {te = p+1;{ found_syllable (symbol_cluster); }}
+       break;
+       case 18:
+#line 87 "hb-ot-shape-complex-indic-machine.rl"
+       {te = p+1;{ found_syllable (broken_cluster); }}
+       break;
+       case 11:
+#line 88 "hb-ot-shape-complex-indic-machine.rl"
+       {te = p+1;{ found_syllable (non_indic_cluster); }}
+       break;
+       case 13:
+#line 83 "hb-ot-shape-complex-indic-machine.rl"
+       {te = p;p--;{ found_syllable (consonant_syllable); }}
+       break;
+       case 15:
+#line 84 "hb-ot-shape-complex-indic-machine.rl"
+       {te = p;p--;{ found_syllable (vowel_syllable); }}
+       break;
+       case 20:
+#line 85 "hb-ot-shape-complex-indic-machine.rl"
+       {te = p;p--;{ found_syllable (standalone_cluster); }}
+       break;
+       case 23:
+#line 86 "hb-ot-shape-complex-indic-machine.rl"
+       {te = p;p--;{ found_syllable (symbol_cluster); }}
+       break;
+       case 17:
+#line 87 "hb-ot-shape-complex-indic-machine.rl"
+       {te = p;p--;{ found_syllable (broken_cluster); }}
+       break;
+       case 19:
+#line 88 "hb-ot-shape-complex-indic-machine.rl"
+       {te = p;p--;{ found_syllable (non_indic_cluster); }}
+       break;
+       case 1:
+#line 83 "hb-ot-shape-complex-indic-machine.rl"
+       {{p = ((te))-1;}{ found_syllable (consonant_syllable); }}
+       break;
+       case 3:
+#line 84 "hb-ot-shape-complex-indic-machine.rl"
+       {{p = ((te))-1;}{ found_syllable (vowel_syllable); }}
+       break;
+       case 7:
+#line 85 "hb-ot-shape-complex-indic-machine.rl"
+       {{p = ((te))-1;}{ found_syllable (standalone_cluster); }}
+       break;
+       case 8:
+#line 86 "hb-ot-shape-complex-indic-machine.rl"
+       {{p = ((te))-1;}{ found_syllable (symbol_cluster); }}
+       break;
+       case 4:
+#line 87 "hb-ot-shape-complex-indic-machine.rl"
+       {{p = ((te))-1;}{ found_syllable (broken_cluster); }}
+       break;
+       case 5:
+#line 1 "NONE"
+       {       switch( act ) {
+       case 1:
+       {{p = ((te))-1;} found_syllable (consonant_syllable); }
+       break;
+       case 5:
+       {{p = ((te))-1;} found_syllable (broken_cluster); }
+       break;
+       case 6:
+       {{p = ((te))-1;} found_syllable (non_indic_cluster); }
+       break;
+       }
+       }
+       break;
+       case 22:
+#line 1 "NONE"
+       {te = p+1;}
+#line 83 "hb-ot-shape-complex-indic-machine.rl"
+       {act = 1;}
+       break;
+       case 6:
+#line 1 "NONE"
+       {te = p+1;}
+#line 87 "hb-ot-shape-complex-indic-machine.rl"
+       {act = 5;}
+       break;
+       case 12:
+#line 1 "NONE"
+       {te = p+1;}
+#line 88 "hb-ot-shape-complex-indic-machine.rl"
+       {act = 6;}
+       break;
+#line 1291 "hb-ot-shape-complex-indic-machine.hh"
+       }
+
+_again:
+       switch ( _indic_syllable_machine_to_state_actions[cs] ) {
+       case 9:
+#line 1 "NONE"
+       {ts = 0;}
+       break;
+#line 1300 "hb-ot-shape-complex-indic-machine.hh"
+       }
+
+       if ( ++p != pe )
+               goto _resume;
+       _test_eof: {}
+       if ( p == eof )
+       {
+       if ( _indic_syllable_machine_eof_trans[cs] > 0 ) {
+               _trans = _indic_syllable_machine_eof_trans[cs] - 1;
+               goto _eof_trans;
+       }
+       }
+
+       }
+
+#line 122 "hb-ot-shape-complex-indic-machine.rl"
+
+}
+
+#endif /* HB_OT_SHAPE_COMPLEX_INDIC_MACHINE_HH */
diff --git a/src/hb-ot-shape-complex-khmer-machine.hh b/src/hb-ot-shape-complex-khmer-machine.hh
new file mode 100644 (file)
index 0000000..380705a
--- /dev/null
@@ -0,0 +1,294 @@
+
+#line 1 "hb-ot-shape-complex-khmer-machine.rl"
+/*
+ * Copyright © 2011,2012  Google, Inc.
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OT_SHAPE_COMPLEX_KHMER_MACHINE_HH
+#define HB_OT_SHAPE_COMPLEX_KHMER_MACHINE_HH
+
+#include "hb-private.hh"
+
+
+#line 36 "hb-ot-shape-complex-khmer-machine.hh"
+static const unsigned char _khmer_syllable_machine_trans_keys[] = {
+       7u, 7u, 1u, 16u, 13u, 13u, 1u, 16u, 7u, 13u, 7u, 7u, 1u, 16u, 13u, 13u, 
+       1u, 16u, 7u, 13u, 1u, 16u, 3u, 14u, 3u, 14u, 5u, 14u, 3u, 14u, 5u, 14u, 
+       8u, 8u, 3u, 13u, 3u, 8u, 8u, 8u, 3u, 8u, 3u, 14u, 3u, 14u, 5u, 14u, 
+       3u, 14u, 5u, 14u, 8u, 8u, 3u, 13u, 3u, 8u, 8u, 8u, 3u, 8u, 3u, 14u, 
+       3u, 14u, 7u, 13u, 7u, 7u, 1u, 16u, 0
+};
+
+static const char _khmer_syllable_machine_key_spans[] = {
+       1, 16, 1, 16, 7, 1, 16, 1, 
+       16, 7, 16, 12, 12, 10, 12, 10, 
+       1, 11, 6, 1, 6, 12, 12, 10, 
+       12, 10, 1, 11, 6, 1, 6, 12, 
+       12, 7, 1, 16
+};
+
+static const short _khmer_syllable_machine_index_offsets[] = {
+       0, 2, 19, 21, 38, 46, 48, 65, 
+       67, 84, 92, 109, 122, 135, 146, 159, 
+       170, 172, 184, 191, 193, 200, 213, 226, 
+       237, 250, 261, 263, 275, 282, 284, 291, 
+       304, 317, 325, 327
+};
+
+static const char _khmer_syllable_machine_indicies[] = {
+       1, 0, 2, 2, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 2, 0, 3, 0, 4, 4, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 4, 0, 1, 0, 
+       0, 0, 0, 0, 5, 0, 7, 6, 
+       8, 8, 6, 6, 6, 6, 6, 6, 
+       6, 6, 6, 6, 6, 6, 6, 8, 
+       6, 9, 6, 10, 10, 6, 6, 6, 
+       6, 6, 6, 6, 6, 6, 6, 6, 
+       6, 6, 10, 6, 7, 6, 6, 6, 
+       6, 6, 11, 6, 4, 4, 13, 12, 
+       14, 15, 7, 16, 12, 12, 4, 4, 
+       11, 17, 12, 4, 12, 19, 18, 20, 
+       21, 1, 22, 18, 18, 18, 18, 5, 
+       23, 18, 24, 18, 21, 21, 1, 22, 
+       18, 18, 18, 18, 18, 23, 18, 21, 
+       21, 1, 22, 18, 18, 18, 18, 18, 
+       23, 18, 25, 18, 21, 21, 1, 22, 
+       18, 18, 18, 18, 18, 26, 18, 21, 
+       21, 1, 22, 18, 18, 18, 18, 18, 
+       26, 18, 27, 18, 28, 18, 29, 18, 
+       18, 22, 18, 18, 18, 18, 3, 18, 
+       30, 18, 18, 18, 18, 22, 18, 22, 
+       18, 28, 18, 18, 18, 18, 22, 18, 
+       19, 18, 21, 21, 1, 22, 18, 18, 
+       18, 18, 18, 23, 18, 32, 31, 33, 
+       33, 7, 16, 31, 31, 31, 31, 31, 
+       34, 31, 33, 33, 7, 16, 31, 31, 
+       31, 31, 31, 34, 31, 35, 31, 33, 
+       33, 7, 16, 31, 31, 31, 31, 31, 
+       36, 31, 33, 33, 7, 16, 31, 31, 
+       31, 31, 31, 36, 31, 37, 31, 38, 
+       31, 39, 31, 31, 16, 31, 31, 31, 
+       31, 9, 31, 40, 31, 31, 31, 31, 
+       16, 31, 16, 31, 38, 31, 31, 31, 
+       31, 16, 31, 13, 31, 41, 33, 7, 
+       16, 31, 31, 31, 31, 11, 34, 31, 
+       13, 31, 33, 33, 7, 16, 31, 31, 
+       31, 31, 31, 34, 31, 7, 42, 42, 
+       42, 42, 42, 11, 42, 7, 42, 10, 
+       10, 42, 42, 42, 42, 42, 42, 42, 
+       42, 42, 42, 42, 42, 42, 10, 42, 
+       0
+};
+
+static const char _khmer_syllable_machine_trans_targs[] = {
+       10, 14, 17, 20, 11, 21, 10, 24, 
+       27, 30, 31, 32, 10, 22, 33, 34, 
+       26, 35, 10, 12, 4, 0, 16, 3, 
+       13, 15, 1, 10, 18, 2, 19, 10, 
+       23, 5, 8, 25, 6, 10, 28, 7, 
+       29, 9, 10
+};
+
+static const char _khmer_syllable_machine_trans_actions[] = {
+       1, 2, 2, 0, 2, 2, 3, 2, 
+       2, 0, 2, 2, 6, 2, 0, 0, 
+       0, 0, 7, 2, 0, 0, 0, 0, 
+       2, 2, 0, 8, 0, 0, 0, 9, 
+       2, 0, 0, 2, 0, 10, 0, 0, 
+       0, 0, 11
+};
+
+static const char _khmer_syllable_machine_to_state_actions[] = {
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 4, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0
+};
+
+static const char _khmer_syllable_machine_from_state_actions[] = {
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 5, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0
+};
+
+static const unsigned char _khmer_syllable_machine_eof_trans[] = {
+       1, 1, 1, 1, 1, 7, 7, 7, 
+       7, 7, 0, 19, 19, 19, 19, 19, 
+       19, 19, 19, 19, 19, 19, 32, 32, 
+       32, 32, 32, 32, 32, 32, 32, 32, 
+       32, 43, 43, 43
+};
+
+static const int khmer_syllable_machine_start = 10;
+static const int khmer_syllable_machine_first_final = 10;
+static const int khmer_syllable_machine_error = -1;
+
+static const int khmer_syllable_machine_en_main = 10;
+
+
+#line 36 "hb-ot-shape-complex-khmer-machine.rl"
+
+
+
+#line 74 "hb-ot-shape-complex-khmer-machine.rl"
+
+
+#define found_syllable(syllable_type) \
+  HB_STMT_START { \
+    if (0) fprintf (stderr, "syllable %d..%d %s\n", last, p+1, #syllable_type); \
+    for (unsigned int i = last; i < p+1; i++) \
+      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
+    last = p+1; \
+    syllable_serial++; \
+    if (unlikely (syllable_serial == 16)) syllable_serial = 1; \
+  } HB_STMT_END
+
+static void
+find_syllables (hb_buffer_t *buffer)
+{
+  unsigned int p, pe, eof, ts HB_UNUSED, te HB_UNUSED, act HB_UNUSED;
+  int cs;
+  hb_glyph_info_t *info = buffer->info;
+  
+#line 181 "hb-ot-shape-complex-khmer-machine.hh"
+       {
+       cs = khmer_syllable_machine_start;
+       ts = 0;
+       te = 0;
+       act = 0;
+       }
+
+#line 95 "hb-ot-shape-complex-khmer-machine.rl"
+
+
+  p = 0;
+  pe = eof = buffer->len;
+
+  unsigned int last = 0;
+  unsigned int syllable_serial = 1;
+  
+#line 198 "hb-ot-shape-complex-khmer-machine.hh"
+       {
+       int _slen;
+       int _trans;
+       const unsigned char *_keys;
+       const char *_inds;
+       if ( p == pe )
+               goto _test_eof;
+_resume:
+       switch ( _khmer_syllable_machine_from_state_actions[cs] ) {
+       case 5:
+#line 1 "NONE"
+       {ts = p;}
+       break;
+#line 212 "hb-ot-shape-complex-khmer-machine.hh"
+       }
+
+       _keys = _khmer_syllable_machine_trans_keys + (cs<<1);
+       _inds = _khmer_syllable_machine_indicies + _khmer_syllable_machine_index_offsets[cs];
+
+       _slen = _khmer_syllable_machine_key_spans[cs];
+       _trans = _inds[ _slen > 0 && _keys[0] <=( info[p].khmer_category()) &&
+               ( info[p].khmer_category()) <= _keys[1] ?
+               ( info[p].khmer_category()) - _keys[0] : _slen ];
+
+_eof_trans:
+       cs = _khmer_syllable_machine_trans_targs[_trans];
+
+       if ( _khmer_syllable_machine_trans_actions[_trans] == 0 )
+               goto _again;
+
+       switch ( _khmer_syllable_machine_trans_actions[_trans] ) {
+       case 2:
+#line 1 "NONE"
+       {te = p+1;}
+       break;
+       case 8:
+#line 68 "hb-ot-shape-complex-khmer-machine.rl"
+       {te = p+1;{ found_syllable (consonant_syllable); }}
+       break;
+       case 10:
+#line 69 "hb-ot-shape-complex-khmer-machine.rl"
+       {te = p+1;{ found_syllable (broken_cluster); }}
+       break;
+       case 6:
+#line 70 "hb-ot-shape-complex-khmer-machine.rl"
+       {te = p+1;{ found_syllable (non_khmer_cluster); }}
+       break;
+       case 7:
+#line 68 "hb-ot-shape-complex-khmer-machine.rl"
+       {te = p;p--;{ found_syllable (consonant_syllable); }}
+       break;
+       case 9:
+#line 69 "hb-ot-shape-complex-khmer-machine.rl"
+       {te = p;p--;{ found_syllable (broken_cluster); }}
+       break;
+       case 11:
+#line 70 "hb-ot-shape-complex-khmer-machine.rl"
+       {te = p;p--;{ found_syllable (non_khmer_cluster); }}
+       break;
+       case 1:
+#line 68 "hb-ot-shape-complex-khmer-machine.rl"
+       {{p = ((te))-1;}{ found_syllable (consonant_syllable); }}
+       break;
+       case 3:
+#line 69 "hb-ot-shape-complex-khmer-machine.rl"
+       {{p = ((te))-1;}{ found_syllable (broken_cluster); }}
+       break;
+#line 266 "hb-ot-shape-complex-khmer-machine.hh"
+       }
+
+_again:
+       switch ( _khmer_syllable_machine_to_state_actions[cs] ) {
+       case 4:
+#line 1 "NONE"
+       {ts = 0;}
+       break;
+#line 275 "hb-ot-shape-complex-khmer-machine.hh"
+       }
+
+       if ( ++p != pe )
+               goto _resume;
+       _test_eof: {}
+       if ( p == eof )
+       {
+       if ( _khmer_syllable_machine_eof_trans[cs] > 0 ) {
+               _trans = _khmer_syllable_machine_eof_trans[cs] - 1;
+               goto _eof_trans;
+       }
+       }
+
+       }
+
+#line 104 "hb-ot-shape-complex-khmer-machine.rl"
+
+}
+
+#endif /* HB_OT_SHAPE_COMPLEX_KHMER_MACHINE_HH */
diff --git a/src/hb-ot-shape-complex-myanmar-machine.hh b/src/hb-ot-shape-complex-myanmar-machine.hh
new file mode 100644 (file)
index 0000000..fb67dd4
--- /dev/null
@@ -0,0 +1,413 @@
+
+#line 1 "hb-ot-shape-complex-myanmar-machine.rl"
+/*
+ * Copyright © 2011,2012  Google, Inc.
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OT_SHAPE_COMPLEX_MYANMAR_MACHINE_HH
+#define HB_OT_SHAPE_COMPLEX_MYANMAR_MACHINE_HH
+
+#include "hb-private.hh"
+
+
+#line 36 "hb-ot-shape-complex-myanmar-machine.hh"
+static const unsigned char _myanmar_syllable_machine_trans_keys[] = {
+       1u, 32u, 3u, 30u, 5u, 29u, 5u, 8u, 5u, 29u, 3u, 25u, 5u, 25u, 5u, 25u, 
+       3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 1u, 16u, 3u, 29u, 3u, 29u, 3u, 29u, 
+       3u, 29u, 3u, 29u, 3u, 30u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 5u, 29u, 
+       5u, 8u, 5u, 29u, 3u, 25u, 5u, 25u, 5u, 25u, 3u, 29u, 3u, 29u, 3u, 29u, 
+       3u, 29u, 3u, 30u, 3u, 29u, 1u, 32u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 
+       3u, 29u, 3u, 30u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 1u, 32u, 8u, 8u, 
+       0
+};
+
+static const char _myanmar_syllable_machine_key_spans[] = {
+       32, 28, 25, 4, 25, 23, 21, 21, 
+       27, 27, 27, 27, 16, 27, 27, 27, 
+       27, 27, 28, 27, 27, 27, 27, 25, 
+       4, 25, 23, 21, 21, 27, 27, 27, 
+       27, 28, 27, 32, 27, 27, 27, 27, 
+       27, 28, 27, 27, 27, 27, 32, 1
+};
+
+static const short _myanmar_syllable_machine_index_offsets[] = {
+       0, 33, 62, 88, 93, 119, 143, 165, 
+       187, 215, 243, 271, 299, 316, 344, 372, 
+       400, 428, 456, 485, 513, 541, 569, 597, 
+       623, 628, 654, 678, 700, 722, 750, 778, 
+       806, 834, 863, 891, 924, 952, 980, 1008, 
+       1036, 1064, 1093, 1121, 1149, 1177, 1205, 1238
+};
+
+static const char _myanmar_syllable_machine_indicies[] = {
+       1, 1, 2, 3, 4, 4, 0, 5, 
+       0, 6, 1, 0, 0, 0, 0, 7, 
+       0, 8, 9, 0, 10, 11, 12, 13, 
+       14, 15, 16, 17, 18, 19, 20, 1, 
+       0, 22, 23, 24, 24, 21, 25, 21, 
+       26, 21, 21, 21, 21, 21, 21, 21, 
+       27, 21, 21, 28, 29, 30, 31, 32, 
+       33, 34, 35, 36, 37, 21, 24, 24, 
+       21, 25, 21, 21, 21, 21, 21, 21, 
+       21, 21, 21, 38, 21, 21, 21, 21, 
+       21, 21, 32, 21, 21, 21, 36, 21, 
+       24, 24, 21, 25, 21, 24, 24, 21, 
+       25, 21, 21, 21, 21, 21, 21, 21, 
+       21, 21, 21, 21, 21, 21, 21, 21, 
+       21, 32, 21, 21, 21, 36, 21, 39, 
+       21, 24, 24, 21, 25, 21, 32, 21, 
+       21, 21, 21, 21, 21, 21, 40, 21, 
+       21, 21, 21, 21, 21, 32, 21, 24, 
+       24, 21, 25, 21, 21, 21, 21, 21, 
+       21, 21, 21, 21, 40, 21, 21, 21, 
+       21, 21, 21, 32, 21, 24, 24, 21, 
+       25, 21, 21, 21, 21, 21, 21, 21, 
+       21, 21, 21, 21, 21, 21, 21, 21, 
+       21, 32, 21, 22, 21, 24, 24, 21, 
+       25, 21, 26, 21, 21, 21, 21, 21, 
+       21, 21, 41, 21, 21, 41, 21, 21, 
+       21, 32, 42, 21, 21, 36, 21, 22, 
+       21, 24, 24, 21, 25, 21, 26, 21, 
+       21, 21, 21, 21, 21, 21, 21, 21, 
+       21, 21, 21, 21, 21, 32, 21, 21, 
+       21, 36, 21, 22, 21, 24, 24, 21, 
+       25, 21, 26, 21, 21, 21, 21, 21, 
+       21, 21, 41, 21, 21, 21, 21, 21, 
+       21, 32, 42, 21, 21, 36, 21, 22, 
+       21, 24, 24, 21, 25, 21, 26, 21, 
+       21, 21, 21, 21, 21, 21, 21, 21, 
+       21, 21, 21, 21, 21, 32, 42, 21, 
+       21, 36, 21, 1, 1, 21, 21, 21, 
+       21, 21, 21, 21, 21, 21, 21, 21, 
+       21, 21, 1, 21, 22, 21, 24, 24, 
+       21, 25, 21, 26, 21, 21, 21, 21, 
+       21, 21, 21, 27, 21, 21, 28, 29, 
+       30, 31, 32, 33, 34, 35, 36, 21, 
+       22, 21, 24, 24, 21, 25, 21, 26, 
+       21, 21, 21, 21, 21, 21, 21, 43, 
+       21, 21, 21, 21, 21, 21, 32, 33, 
+       34, 35, 36, 21, 22, 21, 24, 24, 
+       21, 25, 21, 26, 21, 21, 21, 21, 
+       21, 21, 21, 21, 21, 21, 21, 21, 
+       21, 21, 32, 33, 34, 35, 36, 21, 
+       22, 21, 24, 24, 21, 25, 21, 26, 
+       21, 21, 21, 21, 21, 21, 21, 21, 
+       21, 21, 21, 21, 21, 21, 32, 33, 
+       34, 21, 36, 21, 22, 21, 24, 24, 
+       21, 25, 21, 26, 21, 21, 21, 21, 
+       21, 21, 21, 21, 21, 21, 21, 21, 
+       21, 21, 32, 21, 34, 21, 36, 21, 
+       22, 21, 24, 24, 21, 25, 21, 26, 
+       21, 21, 21, 21, 21, 21, 21, 21, 
+       21, 21, 21, 21, 21, 21, 32, 33, 
+       34, 35, 36, 43, 21, 22, 21, 24, 
+       24, 21, 25, 21, 26, 21, 21, 21, 
+       21, 21, 21, 21, 43, 21, 21, 28, 
+       21, 30, 21, 32, 33, 34, 35, 36, 
+       21, 22, 21, 24, 24, 21, 25, 21, 
+       26, 21, 21, 21, 21, 21, 21, 21, 
+       43, 21, 21, 28, 21, 21, 21, 32, 
+       33, 34, 35, 36, 21, 22, 21, 24, 
+       24, 21, 25, 21, 26, 21, 21, 21, 
+       21, 21, 21, 21, 43, 21, 21, 28, 
+       29, 30, 21, 32, 33, 34, 35, 36, 
+       21, 22, 23, 24, 24, 21, 25, 21, 
+       26, 21, 21, 21, 21, 21, 21, 21, 
+       27, 21, 21, 28, 29, 30, 31, 32, 
+       33, 34, 35, 36, 21, 3, 3, 44, 
+       5, 44, 44, 44, 44, 44, 44, 44, 
+       44, 44, 45, 44, 44, 44, 44, 44, 
+       44, 14, 44, 44, 44, 18, 44, 3, 
+       3, 44, 5, 44, 3, 3, 44, 5, 
+       44, 44, 44, 44, 44, 44, 44, 44, 
+       44, 44, 44, 44, 44, 44, 44, 44, 
+       14, 44, 44, 44, 18, 44, 46, 44, 
+       3, 3, 44, 5, 44, 14, 44, 44, 
+       44, 44, 44, 44, 44, 47, 44, 44, 
+       44, 44, 44, 44, 14, 44, 3, 3, 
+       44, 5, 44, 44, 44, 44, 44, 44, 
+       44, 44, 44, 47, 44, 44, 44, 44, 
+       44, 44, 14, 44, 3, 3, 44, 5, 
+       44, 44, 44, 44, 44, 44, 44, 44, 
+       44, 44, 44, 44, 44, 44, 44, 44, 
+       14, 44, 2, 44, 3, 3, 44, 5, 
+       44, 6, 44, 44, 44, 44, 44, 44, 
+       44, 48, 44, 44, 48, 44, 44, 44, 
+       14, 49, 44, 44, 18, 44, 2, 44, 
+       3, 3, 44, 5, 44, 6, 44, 44, 
+       44, 44, 44, 44, 44, 44, 44, 44, 
+       44, 44, 44, 44, 14, 44, 44, 44, 
+       18, 44, 2, 44, 3, 3, 44, 5, 
+       44, 6, 44, 44, 44, 44, 44, 44, 
+       44, 48, 44, 44, 44, 44, 44, 44, 
+       14, 49, 44, 44, 18, 44, 2, 44, 
+       3, 3, 44, 5, 44, 6, 44, 44, 
+       44, 44, 44, 44, 44, 44, 44, 44, 
+       44, 44, 44, 44, 14, 49, 44, 44, 
+       18, 44, 22, 23, 24, 24, 21, 25, 
+       21, 26, 21, 21, 21, 21, 21, 21, 
+       21, 50, 21, 21, 28, 29, 30, 31, 
+       32, 33, 34, 35, 36, 37, 21, 22, 
+       51, 24, 24, 21, 25, 21, 26, 21, 
+       21, 21, 21, 21, 21, 21, 27, 21, 
+       21, 28, 29, 30, 31, 32, 33, 34, 
+       35, 36, 21, 1, 1, 2, 3, 3, 
+       3, 44, 5, 44, 6, 1, 44, 44, 
+       44, 44, 1, 44, 8, 44, 44, 10, 
+       11, 12, 13, 14, 15, 16, 17, 18, 
+       19, 44, 1, 44, 2, 44, 3, 3, 
+       44, 5, 44, 6, 44, 44, 44, 44, 
+       44, 44, 44, 8, 44, 44, 10, 11, 
+       12, 13, 14, 15, 16, 17, 18, 44, 
+       2, 44, 3, 3, 44, 5, 44, 6, 
+       44, 44, 44, 44, 44, 44, 44, 52, 
+       44, 44, 44, 44, 44, 44, 14, 15, 
+       16, 17, 18, 44, 2, 44, 3, 3, 
+       44, 5, 44, 6, 44, 44, 44, 44, 
+       44, 44, 44, 44, 44, 44, 44, 44, 
+       44, 44, 14, 15, 16, 17, 18, 44, 
+       2, 44, 3, 3, 44, 5, 44, 6, 
+       44, 44, 44, 44, 44, 44, 44, 44, 
+       44, 44, 44, 44, 44, 44, 14, 15, 
+       16, 44, 18, 44, 2, 44, 3, 3, 
+       44, 5, 44, 6, 44, 44, 44, 44, 
+       44, 44, 44, 44, 44, 44, 44, 44, 
+       44, 44, 14, 44, 16, 44, 18, 44, 
+       2, 44, 3, 3, 44, 5, 44, 6, 
+       44, 44, 44, 44, 44, 44, 44, 44, 
+       44, 44, 44, 44, 44, 44, 14, 15, 
+       16, 17, 18, 52, 44, 2, 44, 3, 
+       3, 44, 5, 44, 6, 44, 44, 44, 
+       44, 44, 44, 44, 52, 44, 44, 10, 
+       44, 12, 44, 14, 15, 16, 17, 18, 
+       44, 2, 44, 3, 3, 44, 5, 44, 
+       6, 44, 44, 44, 44, 44, 44, 44, 
+       52, 44, 44, 10, 44, 44, 44, 14, 
+       15, 16, 17, 18, 44, 2, 44, 3, 
+       3, 44, 5, 44, 6, 44, 44, 44, 
+       44, 44, 44, 44, 52, 44, 44, 10, 
+       11, 12, 44, 14, 15, 16, 17, 18, 
+       44, 2, 3, 3, 3, 44, 5, 44, 
+       6, 44, 44, 44, 44, 44, 44, 44, 
+       8, 44, 44, 10, 11, 12, 13, 14, 
+       15, 16, 17, 18, 44, 1, 1, 53, 
+       53, 53, 53, 53, 53, 53, 53, 1, 
+       53, 53, 53, 53, 1, 53, 53, 53, 
+       53, 53, 53, 53, 53, 53, 53, 53, 
+       53, 53, 53, 53, 1, 53, 54, 53, 
+       0
+};
+
+static const char _myanmar_syllable_machine_trans_targs[] = {
+       0, 1, 23, 0, 0, 24, 30, 33, 
+       36, 46, 37, 42, 43, 44, 26, 39, 
+       40, 41, 29, 45, 47, 0, 2, 12, 
+       0, 3, 9, 13, 14, 19, 20, 21, 
+       5, 16, 17, 18, 8, 22, 4, 6, 
+       7, 10, 11, 15, 0, 25, 27, 28, 
+       31, 32, 34, 35, 38, 0, 0
+};
+
+static const char _myanmar_syllable_machine_trans_actions[] = {
+       3, 0, 0, 4, 5, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 6, 0, 0, 
+       7, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 8, 0, 0, 0, 
+       0, 0, 0, 0, 0, 9, 10
+};
+
+static const char _myanmar_syllable_machine_to_state_actions[] = {
+       1, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static const char _myanmar_syllable_machine_from_state_actions[] = {
+       2, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static const short _myanmar_syllable_machine_eof_trans[] = {
+       0, 22, 22, 22, 22, 22, 22, 22, 
+       22, 22, 22, 22, 22, 22, 22, 22, 
+       22, 22, 22, 22, 22, 22, 22, 45, 
+       45, 45, 45, 45, 45, 45, 45, 45, 
+       45, 22, 22, 45, 45, 45, 45, 45, 
+       45, 45, 45, 45, 45, 45, 54, 54
+};
+
+static const int myanmar_syllable_machine_start = 0;
+static const int myanmar_syllable_machine_first_final = 0;
+static const int myanmar_syllable_machine_error = -1;
+
+static const int myanmar_syllable_machine_en_main = 0;
+
+
+#line 36 "hb-ot-shape-complex-myanmar-machine.rl"
+
+
+
+#line 94 "hb-ot-shape-complex-myanmar-machine.rl"
+
+
+#define found_syllable(syllable_type) \
+  HB_STMT_START { \
+    if (0) fprintf (stderr, "syllable %d..%d %s\n", last, p+1, #syllable_type); \
+    for (unsigned int i = last; i < p+1; i++) \
+      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
+    last = p+1; \
+    syllable_serial++; \
+    if (unlikely (syllable_serial == 16)) syllable_serial = 1; \
+  } HB_STMT_END
+
+static void
+find_syllables (hb_buffer_t *buffer)
+{
+  unsigned int p, pe, eof, ts HB_UNUSED, te HB_UNUSED, act HB_UNUSED;
+  int cs;
+  hb_glyph_info_t *info = buffer->info;
+  
+#line 302 "hb-ot-shape-complex-myanmar-machine.hh"
+       {
+       cs = myanmar_syllable_machine_start;
+       ts = 0;
+       te = 0;
+       act = 0;
+       }
+
+#line 115 "hb-ot-shape-complex-myanmar-machine.rl"
+
+
+  p = 0;
+  pe = eof = buffer->len;
+
+  unsigned int last = 0;
+  unsigned int syllable_serial = 1;
+  
+#line 319 "hb-ot-shape-complex-myanmar-machine.hh"
+       {
+       int _slen;
+       int _trans;
+       const unsigned char *_keys;
+       const char *_inds;
+       if ( p == pe )
+               goto _test_eof;
+_resume:
+       switch ( _myanmar_syllable_machine_from_state_actions[cs] ) {
+       case 2:
+#line 1 "NONE"
+       {ts = p;}
+       break;
+#line 333 "hb-ot-shape-complex-myanmar-machine.hh"
+       }
+
+       _keys = _myanmar_syllable_machine_trans_keys + (cs<<1);
+       _inds = _myanmar_syllable_machine_indicies + _myanmar_syllable_machine_index_offsets[cs];
+
+       _slen = _myanmar_syllable_machine_key_spans[cs];
+       _trans = _inds[ _slen > 0 && _keys[0] <=( info[p].myanmar_category()) &&
+               ( info[p].myanmar_category()) <= _keys[1] ?
+               ( info[p].myanmar_category()) - _keys[0] : _slen ];
+
+_eof_trans:
+       cs = _myanmar_syllable_machine_trans_targs[_trans];
+
+       if ( _myanmar_syllable_machine_trans_actions[_trans] == 0 )
+               goto _again;
+
+       switch ( _myanmar_syllable_machine_trans_actions[_trans] ) {
+       case 7:
+#line 86 "hb-ot-shape-complex-myanmar-machine.rl"
+       {te = p+1;{ found_syllable (consonant_syllable); }}
+       break;
+       case 5:
+#line 87 "hb-ot-shape-complex-myanmar-machine.rl"
+       {te = p+1;{ found_syllable (non_myanmar_cluster); }}
+       break;
+       case 10:
+#line 88 "hb-ot-shape-complex-myanmar-machine.rl"
+       {te = p+1;{ found_syllable (punctuation_cluster); }}
+       break;
+       case 4:
+#line 89 "hb-ot-shape-complex-myanmar-machine.rl"
+       {te = p+1;{ found_syllable (broken_cluster); }}
+       break;
+       case 3:
+#line 90 "hb-ot-shape-complex-myanmar-machine.rl"
+       {te = p+1;{ found_syllable (non_myanmar_cluster); }}
+       break;
+       case 6:
+#line 86 "hb-ot-shape-complex-myanmar-machine.rl"
+       {te = p;p--;{ found_syllable (consonant_syllable); }}
+       break;
+       case 8:
+#line 89 "hb-ot-shape-complex-myanmar-machine.rl"
+       {te = p;p--;{ found_syllable (broken_cluster); }}
+       break;
+       case 9:
+#line 90 "hb-ot-shape-complex-myanmar-machine.rl"
+       {te = p;p--;{ found_syllable (non_myanmar_cluster); }}
+       break;
+#line 383 "hb-ot-shape-complex-myanmar-machine.hh"
+       }
+
+_again:
+       switch ( _myanmar_syllable_machine_to_state_actions[cs] ) {
+       case 1:
+#line 1 "NONE"
+       {ts = 0;}
+       break;
+#line 392 "hb-ot-shape-complex-myanmar-machine.hh"
+       }
+
+       if ( ++p != pe )
+               goto _resume;
+       _test_eof: {}
+       if ( p == eof )
+       {
+       if ( _myanmar_syllable_machine_eof_trans[cs] > 0 ) {
+               _trans = _myanmar_syllable_machine_eof_trans[cs] - 1;
+               goto _eof_trans;
+       }
+       }
+
+       }
+
+#line 124 "hb-ot-shape-complex-myanmar-machine.rl"
+
+}
+
+#undef found_syllable
+
+#endif /* HB_OT_SHAPE_COMPLEX_MYANMAR_MACHINE_HH */
diff --git a/src/hb-ot-shape-complex-use-machine.hh b/src/hb-ot-shape-complex-use-machine.hh
new file mode 100644 (file)
index 0000000..0bf3ad3
--- /dev/null
@@ -0,0 +1,502 @@
+
+#line 1 "hb-ot-shape-complex-use-machine.rl"
+/*
+ * Copyright © 2015  Mozilla Foundation.
+ * Copyright © 2015  Google, Inc.
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Mozilla Author(s): Jonathan Kew
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OT_SHAPE_COMPLEX_USE_MACHINE_HH
+#define HB_OT_SHAPE_COMPLEX_USE_MACHINE_HH
+
+#include "hb-private.hh"
+
+
+#line 38 "hb-ot-shape-complex-use-machine.hh"
+static const unsigned char _use_syllable_machine_trans_keys[] = {
+       12u, 12u, 1u, 15u, 1u, 1u, 12u, 12u, 0u, 43u, 21u, 21u, 8u, 39u, 8u, 39u, 
+       1u, 15u, 1u, 1u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 26u, 8u, 26u, 8u, 26u, 
+       8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 
+       8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 13u, 21u, 4u, 4u, 13u, 13u, 8u, 39u, 
+       8u, 39u, 8u, 39u, 8u, 39u, 8u, 26u, 8u, 26u, 8u, 26u, 8u, 39u, 8u, 39u, 
+       8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 
+       8u, 39u, 1u, 15u, 12u, 12u, 1u, 39u, 8u, 39u, 21u, 42u, 41u, 42u, 42u, 42u, 
+       1u, 5u, 0
+};
+
+static const char _use_syllable_machine_key_spans[] = {
+       1, 15, 1, 1, 44, 1, 32, 32, 
+       15, 1, 32, 32, 32, 19, 19, 19, 
+       32, 32, 32, 32, 32, 32, 32, 32, 
+       32, 32, 32, 32, 9, 1, 1, 32, 
+       32, 32, 32, 19, 19, 19, 32, 32, 
+       32, 32, 32, 32, 32, 32, 32, 32, 
+       32, 15, 1, 39, 32, 22, 2, 1, 
+       5
+};
+
+static const short _use_syllable_machine_index_offsets[] = {
+       0, 2, 18, 20, 22, 67, 69, 102, 
+       135, 151, 153, 186, 219, 252, 272, 292, 
+       312, 345, 378, 411, 444, 477, 510, 543, 
+       576, 609, 642, 675, 708, 718, 720, 722, 
+       755, 788, 821, 854, 874, 894, 914, 947, 
+       980, 1013, 1046, 1079, 1112, 1145, 1178, 1211, 
+       1244, 1277, 1293, 1295, 1335, 1368, 1391, 1394, 
+       1396
+};
+
+static const char _use_syllable_machine_indicies[] = {
+       1, 0, 3, 2, 2, 2, 2, 2, 
+       2, 2, 2, 2, 2, 2, 2, 2, 
+       4, 2, 3, 2, 6, 5, 7, 8, 
+       9, 7, 10, 8, 9, 9, 11, 9, 
+       9, 3, 12, 9, 9, 13, 7, 7, 
+       14, 15, 9, 9, 16, 17, 18, 19, 
+       20, 21, 22, 16, 23, 24, 25, 26, 
+       27, 28, 9, 29, 30, 31, 9, 9, 
+       9, 32, 9, 34, 33, 36, 35, 35, 
+       37, 1, 35, 35, 38, 35, 35, 35, 
+       35, 35, 39, 40, 41, 42, 43, 44, 
+       45, 46, 40, 47, 39, 48, 49, 50, 
+       51, 35, 52, 53, 54, 35, 36, 35, 
+       35, 37, 1, 35, 35, 38, 35, 35, 
+       35, 35, 35, 55, 40, 41, 42, 43, 
+       44, 45, 46, 40, 47, 48, 48, 49, 
+       50, 51, 35, 52, 53, 54, 35, 37, 
+       56, 56, 56, 56, 56, 56, 56, 56, 
+       56, 56, 56, 56, 56, 57, 56, 37, 
+       56, 36, 35, 35, 37, 1, 35, 35, 
+       38, 35, 35, 35, 35, 35, 35, 40, 
+       41, 42, 43, 44, 45, 46, 40, 47, 
+       48, 48, 49, 50, 51, 35, 52, 53, 
+       54, 35, 36, 35, 35, 35, 35, 35, 
+       35, 35, 35, 35, 35, 35, 35, 35, 
+       40, 41, 42, 43, 44, 35, 35, 35, 
+       35, 35, 35, 49, 50, 51, 35, 52, 
+       53, 54, 35, 36, 35, 35, 35, 35, 
+       35, 35, 35, 35, 35, 35, 35, 35, 
+       35, 35, 41, 42, 43, 44, 35, 35, 
+       35, 35, 35, 35, 35, 35, 35, 35, 
+       52, 53, 54, 35, 36, 35, 35, 35, 
+       35, 35, 35, 35, 35, 35, 35, 35, 
+       35, 35, 35, 35, 42, 43, 44, 35, 
+       36, 35, 35, 35, 35, 35, 35, 35, 
+       35, 35, 35, 35, 35, 35, 35, 35, 
+       35, 43, 44, 35, 36, 35, 35, 35, 
+       35, 35, 35, 35, 35, 35, 35, 35, 
+       35, 35, 35, 35, 35, 35, 44, 35, 
+       36, 35, 35, 35, 35, 35, 35, 35, 
+       35, 35, 35, 35, 35, 35, 35, 35, 
+       42, 43, 44, 35, 35, 35, 35, 35, 
+       35, 35, 35, 35, 35, 52, 53, 54, 
+       35, 36, 35, 35, 35, 35, 35, 35, 
+       35, 35, 35, 35, 35, 35, 35, 35, 
+       35, 42, 43, 44, 35, 35, 35, 35, 
+       35, 35, 35, 35, 35, 35, 35, 53, 
+       54, 35, 36, 35, 35, 35, 35, 35, 
+       35, 35, 35, 35, 35, 35, 35, 35, 
+       35, 35, 42, 43, 44, 35, 35, 35, 
+       35, 35, 35, 35, 35, 35, 35, 35, 
+       35, 54, 35, 36, 35, 35, 35, 35, 
+       35, 35, 35, 35, 35, 35, 35, 35, 
+       35, 35, 41, 42, 43, 44, 35, 35, 
+       35, 35, 35, 35, 49, 50, 51, 35, 
+       52, 53, 54, 35, 36, 35, 35, 35, 
+       35, 35, 35, 35, 35, 35, 35, 35, 
+       35, 35, 35, 41, 42, 43, 44, 35, 
+       35, 35, 35, 35, 35, 35, 50, 51, 
+       35, 52, 53, 54, 35, 36, 35, 35, 
+       35, 35, 35, 35, 35, 35, 35, 35, 
+       35, 35, 35, 35, 41, 42, 43, 44, 
+       35, 35, 35, 35, 35, 35, 35, 35, 
+       51, 35, 52, 53, 54, 35, 36, 35, 
+       35, 35, 35, 35, 35, 35, 35, 35, 
+       35, 35, 35, 35, 40, 41, 42, 43, 
+       44, 35, 46, 40, 35, 35, 35, 49, 
+       50, 51, 35, 52, 53, 54, 35, 36, 
+       35, 35, 35, 35, 35, 35, 35, 35, 
+       35, 35, 35, 35, 35, 40, 41, 42, 
+       43, 44, 35, 58, 40, 35, 35, 35, 
+       49, 50, 51, 35, 52, 53, 54, 35, 
+       36, 35, 35, 35, 35, 35, 35, 35, 
+       35, 35, 35, 35, 35, 35, 40, 41, 
+       42, 43, 44, 35, 35, 40, 35, 35, 
+       35, 49, 50, 51, 35, 52, 53, 54, 
+       35, 36, 35, 35, 35, 35, 35, 35, 
+       35, 35, 35, 35, 35, 35, 35, 40, 
+       41, 42, 43, 44, 45, 46, 40, 35, 
+       35, 35, 49, 50, 51, 35, 52, 53, 
+       54, 35, 36, 35, 35, 37, 1, 35, 
+       35, 38, 35, 35, 35, 35, 35, 35, 
+       40, 41, 42, 43, 44, 45, 46, 40, 
+       47, 35, 48, 49, 50, 51, 35, 52, 
+       53, 54, 35, 36, 35, 35, 37, 1, 
+       35, 35, 38, 35, 35, 35, 35, 35, 
+       35, 40, 41, 42, 43, 44, 45, 46, 
+       40, 47, 39, 48, 49, 50, 51, 35, 
+       52, 53, 54, 35, 60, 59, 59, 59, 
+       59, 59, 59, 59, 61, 59, 10, 62, 
+       60, 59, 11, 63, 63, 3, 6, 63, 
+       63, 64, 63, 63, 63, 63, 63, 65, 
+       16, 17, 18, 19, 20, 21, 22, 16, 
+       23, 25, 25, 26, 27, 28, 63, 29, 
+       30, 31, 63, 11, 63, 63, 3, 6, 
+       63, 63, 64, 63, 63, 63, 63, 63, 
+       63, 16, 17, 18, 19, 20, 21, 22, 
+       16, 23, 25, 25, 26, 27, 28, 63, 
+       29, 30, 31, 63, 11, 63, 63, 63, 
+       63, 63, 63, 63, 63, 63, 63, 63, 
+       63, 63, 16, 17, 18, 19, 20, 63, 
+       63, 63, 63, 63, 63, 26, 27, 28, 
+       63, 29, 30, 31, 63, 11, 63, 63, 
+       63, 63, 63, 63, 63, 63, 63, 63, 
+       63, 63, 63, 63, 17, 18, 19, 20, 
+       63, 63, 63, 63, 63, 63, 63, 63, 
+       63, 63, 29, 30, 31, 63, 11, 63, 
+       63, 63, 63, 63, 63, 63, 63, 63, 
+       63, 63, 63, 63, 63, 63, 18, 19, 
+       20, 63, 11, 63, 63, 63, 63, 63, 
+       63, 63, 63, 63, 63, 63, 63, 63, 
+       63, 63, 63, 19, 20, 63, 11, 63, 
+       63, 63, 63, 63, 63, 63, 63, 63, 
+       63, 63, 63, 63, 63, 63, 63, 63, 
+       20, 63, 11, 63, 63, 63, 63, 63, 
+       63, 63, 63, 63, 63, 63, 63, 63, 
+       63, 63, 18, 19, 20, 63, 63, 63, 
+       63, 63, 63, 63, 63, 63, 63, 29, 
+       30, 31, 63, 11, 63, 63, 63, 63, 
+       63, 63, 63, 63, 63, 63, 63, 63, 
+       63, 63, 63, 18, 19, 20, 63, 63, 
+       63, 63, 63, 63, 63, 63, 63, 63, 
+       63, 30, 31, 63, 11, 63, 63, 63, 
+       63, 63, 63, 63, 63, 63, 63, 63, 
+       63, 63, 63, 63, 18, 19, 20, 63, 
+       63, 63, 63, 63, 63, 63, 63, 63, 
+       63, 63, 63, 31, 63, 11, 63, 63, 
+       63, 63, 63, 63, 63, 63, 63, 63, 
+       63, 63, 63, 63, 17, 18, 19, 20, 
+       63, 63, 63, 63, 63, 63, 26, 27, 
+       28, 63, 29, 30, 31, 63, 11, 63, 
+       63, 63, 63, 63, 63, 63, 63, 63, 
+       63, 63, 63, 63, 63, 17, 18, 19, 
+       20, 63, 63, 63, 63, 63, 63, 63, 
+       27, 28, 63, 29, 30, 31, 63, 11, 
+       63, 63, 63, 63, 63, 63, 63, 63, 
+       63, 63, 63, 63, 63, 63, 17, 18, 
+       19, 20, 63, 63, 63, 63, 63, 63, 
+       63, 63, 28, 63, 29, 30, 31, 63, 
+       11, 63, 63, 63, 63, 63, 63, 63, 
+       63, 63, 63, 63, 63, 63, 16, 17, 
+       18, 19, 20, 63, 22, 16, 63, 63, 
+       63, 26, 27, 28, 63, 29, 30, 31, 
+       63, 11, 63, 63, 63, 63, 63, 63, 
+       63, 63, 63, 63, 63, 63, 63, 16, 
+       17, 18, 19, 20, 63, 66, 16, 63, 
+       63, 63, 26, 27, 28, 63, 29, 30, 
+       31, 63, 11, 63, 63, 63, 63, 63, 
+       63, 63, 63, 63, 63, 63, 63, 63, 
+       16, 17, 18, 19, 20, 63, 63, 16, 
+       63, 63, 63, 26, 27, 28, 63, 29, 
+       30, 31, 63, 11, 63, 63, 63, 63, 
+       63, 63, 63, 63, 63, 63, 63, 63, 
+       63, 16, 17, 18, 19, 20, 21, 22, 
+       16, 63, 63, 63, 26, 27, 28, 63, 
+       29, 30, 31, 63, 11, 63, 63, 3, 
+       6, 63, 63, 64, 63, 63, 63, 63, 
+       63, 63, 16, 17, 18, 19, 20, 21, 
+       22, 16, 23, 63, 25, 26, 27, 28, 
+       63, 29, 30, 31, 63, 3, 67, 67, 
+       67, 67, 67, 67, 67, 67, 67, 67, 
+       67, 67, 67, 4, 67, 6, 67, 8, 
+       63, 63, 63, 8, 63, 63, 11, 63, 
+       63, 3, 6, 63, 63, 64, 63, 63, 
+       63, 63, 63, 63, 16, 17, 18, 19, 
+       20, 21, 22, 16, 23, 24, 25, 26, 
+       27, 28, 63, 29, 30, 31, 63, 11, 
+       63, 63, 3, 6, 63, 63, 64, 63, 
+       63, 63, 63, 63, 63, 16, 17, 18, 
+       19, 20, 21, 22, 16, 23, 24, 25, 
+       26, 27, 28, 63, 29, 30, 31, 63, 
+       69, 68, 68, 68, 68, 68, 68, 68, 
+       68, 68, 68, 68, 68, 68, 68, 68, 
+       68, 68, 68, 68, 69, 70, 68, 69, 
+       70, 68, 70, 68, 8, 67, 67, 67, 
+       8, 67, 0
+};
+
+static const char _use_syllable_machine_trans_targs[] = {
+       4, 8, 4, 31, 2, 4, 1, 5, 
+       6, 4, 28, 4, 49, 50, 51, 53, 
+       33, 34, 35, 36, 37, 44, 45, 47, 
+       52, 48, 41, 42, 43, 38, 39, 40, 
+       56, 4, 4, 4, 4, 7, 0, 27, 
+       11, 12, 13, 14, 15, 22, 23, 25, 
+       26, 19, 20, 21, 16, 17, 18, 10, 
+       4, 9, 24, 4, 29, 30, 4, 4, 
+       3, 32, 46, 4, 4, 54, 55
+};
+
+static const char _use_syllable_machine_trans_actions[] = {
+       1, 0, 2, 3, 0, 4, 0, 0, 
+       7, 8, 0, 9, 10, 10, 3, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       3, 3, 0, 0, 0, 0, 0, 0, 
+       0, 11, 12, 13, 14, 7, 0, 7, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       7, 0, 0, 0, 0, 0, 0, 7, 
+       15, 0, 0, 16, 0, 0, 17, 18, 
+       0, 3, 0, 19, 20, 0, 0
+};
+
+static const char _use_syllable_machine_to_state_actions[] = {
+       0, 0, 0, 0, 5, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0
+};
+
+static const char _use_syllable_machine_from_state_actions[] = {
+       0, 0, 0, 0, 6, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0
+};
+
+static const short _use_syllable_machine_eof_trans[] = {
+       1, 3, 3, 6, 0, 34, 36, 36, 
+       57, 57, 36, 36, 36, 36, 36, 36, 
+       36, 36, 36, 36, 36, 36, 36, 36, 
+       36, 36, 36, 36, 60, 63, 60, 64, 
+       64, 64, 64, 64, 64, 64, 64, 64, 
+       64, 64, 64, 64, 64, 64, 64, 64, 
+       64, 68, 68, 64, 64, 69, 69, 69, 
+       68
+};
+
+static const int use_syllable_machine_start = 4;
+static const int use_syllable_machine_first_final = 4;
+static const int use_syllable_machine_error = -1;
+
+static const int use_syllable_machine_en_main = 4;
+
+
+#line 38 "hb-ot-shape-complex-use-machine.rl"
+
+
+
+#line 141 "hb-ot-shape-complex-use-machine.rl"
+
+
+#define found_syllable(syllable_type) \
+  HB_STMT_START { \
+    if (0) fprintf (stderr, "syllable %d..%d %s\n", last, p+1, #syllable_type); \
+    for (unsigned int i = last; i < p+1; i++) \
+      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
+    last = p+1; \
+    syllable_serial++; \
+    if (unlikely (syllable_serial == 16)) syllable_serial = 1; \
+  } HB_STMT_END
+
+static void
+find_syllables (hb_buffer_t *buffer)
+{
+  unsigned int p, pe, eof, ts HB_UNUSED, te HB_UNUSED, act HB_UNUSED;
+  int cs;
+  hb_glyph_info_t *info = buffer->info;
+  
+#line 339 "hb-ot-shape-complex-use-machine.hh"
+       {
+       cs = use_syllable_machine_start;
+       ts = 0;
+       te = 0;
+       act = 0;
+       }
+
+#line 162 "hb-ot-shape-complex-use-machine.rl"
+
+
+  p = 0;
+  pe = eof = buffer->len;
+
+  unsigned int last = 0;
+  unsigned int syllable_serial = 1;
+  
+#line 356 "hb-ot-shape-complex-use-machine.hh"
+       {
+       int _slen;
+       int _trans;
+       const unsigned char *_keys;
+       const char *_inds;
+       if ( p == pe )
+               goto _test_eof;
+_resume:
+       switch ( _use_syllable_machine_from_state_actions[cs] ) {
+       case 6:
+#line 1 "NONE"
+       {ts = p;}
+       break;
+#line 370 "hb-ot-shape-complex-use-machine.hh"
+       }
+
+       _keys = _use_syllable_machine_trans_keys + (cs<<1);
+       _inds = _use_syllable_machine_indicies + _use_syllable_machine_index_offsets[cs];
+
+       _slen = _use_syllable_machine_key_spans[cs];
+       _trans = _inds[ _slen > 0 && _keys[0] <=( info[p].use_category()) &&
+               ( info[p].use_category()) <= _keys[1] ?
+               ( info[p].use_category()) - _keys[0] : _slen ];
+
+_eof_trans:
+       cs = _use_syllable_machine_trans_targs[_trans];
+
+       if ( _use_syllable_machine_trans_actions[_trans] == 0 )
+               goto _again;
+
+       switch ( _use_syllable_machine_trans_actions[_trans] ) {
+       case 7:
+#line 1 "NONE"
+       {te = p+1;}
+       break;
+       case 12:
+#line 130 "hb-ot-shape-complex-use-machine.rl"
+       {te = p+1;{ found_syllable (independent_cluster); }}
+       break;
+       case 14:
+#line 132 "hb-ot-shape-complex-use-machine.rl"
+       {te = p+1;{ found_syllable (standard_cluster); }}
+       break;
+       case 9:
+#line 136 "hb-ot-shape-complex-use-machine.rl"
+       {te = p+1;{ found_syllable (broken_cluster); }}
+       break;
+       case 8:
+#line 137 "hb-ot-shape-complex-use-machine.rl"
+       {te = p+1;{ found_syllable (non_cluster); }}
+       break;
+       case 11:
+#line 130 "hb-ot-shape-complex-use-machine.rl"
+       {te = p;p--;{ found_syllable (independent_cluster); }}
+       break;
+       case 15:
+#line 131 "hb-ot-shape-complex-use-machine.rl"
+       {te = p;p--;{ found_syllable (virama_terminated_cluster); }}
+       break;
+       case 13:
+#line 132 "hb-ot-shape-complex-use-machine.rl"
+       {te = p;p--;{ found_syllable (standard_cluster); }}
+       break;
+       case 17:
+#line 133 "hb-ot-shape-complex-use-machine.rl"
+       {te = p;p--;{ found_syllable (number_joiner_terminated_cluster); }}
+       break;
+       case 16:
+#line 134 "hb-ot-shape-complex-use-machine.rl"
+       {te = p;p--;{ found_syllable (numeral_cluster); }}
+       break;
+       case 20:
+#line 135 "hb-ot-shape-complex-use-machine.rl"
+       {te = p;p--;{ found_syllable (symbol_cluster); }}
+       break;
+       case 18:
+#line 136 "hb-ot-shape-complex-use-machine.rl"
+       {te = p;p--;{ found_syllable (broken_cluster); }}
+       break;
+       case 19:
+#line 137 "hb-ot-shape-complex-use-machine.rl"
+       {te = p;p--;{ found_syllable (non_cluster); }}
+       break;
+       case 1:
+#line 132 "hb-ot-shape-complex-use-machine.rl"
+       {{p = ((te))-1;}{ found_syllable (standard_cluster); }}
+       break;
+       case 4:
+#line 136 "hb-ot-shape-complex-use-machine.rl"
+       {{p = ((te))-1;}{ found_syllable (broken_cluster); }}
+       break;
+       case 2:
+#line 1 "NONE"
+       {       switch( act ) {
+       case 7:
+       {{p = ((te))-1;} found_syllable (broken_cluster); }
+       break;
+       case 8:
+       {{p = ((te))-1;} found_syllable (non_cluster); }
+       break;
+       }
+       }
+       break;
+       case 3:
+#line 1 "NONE"
+       {te = p+1;}
+#line 136 "hb-ot-shape-complex-use-machine.rl"
+       {act = 7;}
+       break;
+       case 10:
+#line 1 "NONE"
+       {te = p+1;}
+#line 137 "hb-ot-shape-complex-use-machine.rl"
+       {act = 8;}
+       break;
+#line 472 "hb-ot-shape-complex-use-machine.hh"
+       }
+
+_again:
+       switch ( _use_syllable_machine_to_state_actions[cs] ) {
+       case 5:
+#line 1 "NONE"
+       {ts = 0;}
+       break;
+#line 481 "hb-ot-shape-complex-use-machine.hh"
+       }
+
+       if ( ++p != pe )
+               goto _resume;
+       _test_eof: {}
+       if ( p == eof )
+       {
+       if ( _use_syllable_machine_eof_trans[cs] > 0 ) {
+               _trans = _use_syllable_machine_eof_trans[cs] - 1;
+               goto _eof_trans;
+       }
+       }
+
+       }
+
+#line 171 "hb-ot-shape-complex-use-machine.rl"
+
+}
+
+#undef found_syllable
+
+#endif /* HB_OT_SHAPE_COMPLEX_USE_MACHINE_HH */