IDEA-57865 Groovy method name with a single dollar sign is treated as error
authorMaxim Medvedev <maxim.medvedev@jetbrains.com>
Mon, 13 Sep 2010 10:09:30 +0000 (14:09 +0400)
committerMaxim Medvedev <maxim.medvedev@jetbrains.com>
Mon, 13 Sep 2010 10:09:30 +0000 (14:09 +0400)
plugins/groovy/src/org/jetbrains/plugins/groovy/GroovyBundle.properties
plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator.java
plugins/groovy/src/org/jetbrains/plugins/groovy/lang/lexer/_GroovyLexer.java
plugins/groovy/src/org/jetbrains/plugins/groovy/lang/lexer/groovy.flex

index 353d85422bf03656821cc23e74ccad254cbd8a42..e66443073c3a9bdfeacc2f4e4c934fe4827633d4 100644 (file)
@@ -342,3 +342,4 @@ there.is.no.default.constructor.available.in.class.0=There is no default constru
 groovy.library.is.not.configured.for.module=Groovy SDK is not configured for module ''{0}''
 configure.groovy.library=Configure Groovy SDK...
 create.instance.of.built-in.type=Instantiation of built-in type
+incorrect.variable.name=Incorrect variable name
index 696963e66617bbeb50ab4926051d02779f07769e..47a0bc9417936871ae687e3748d6b1bddbd440be 100644 (file)
@@ -376,6 +376,7 @@ public class GroovyAnnotator extends GroovyElementVisitor implements Annotator {
 
   @Override
   public void visitVariable(GrVariable variable) {
+    checkName(variable);
     if (variable instanceof GrMember) {
       highlightMember(myHolder, ((GrMember)variable));
       checkStaticDeclarationsInInnerClass((GrMember)variable, myHolder);
@@ -408,6 +409,11 @@ public class GroovyAnnotator extends GroovyElementVisitor implements Annotator {
     }
   }
 
+  private void checkName(GrVariable variable) {
+    if (!"$".equals(variable.getName())) return;
+    myHolder.createErrorAnnotation(variable.getNameIdentifierGroovy(), GroovyBundle.message("incorrect.variable.name"));
+  }
+
   @Override
   public void visitAssignmentExpression(GrAssignmentExpression expression) {
     GrExpression lValue = expression.getLValue();
index 253404bbf5202e99bb4e6eeb8938a851ad7481ae..41918530247d3a244a17a72d2cf80e45ba0f879c 100644 (file)
@@ -1,4 +1,4 @@
-/* The following code was generated by JFlex 1.4.3 on 24.06.10 11:26 */
+/* The following code was generated by JFlex 1.4.3 on 13.09.10 13:39 */
 
 /*
  * Copyright 2000-2010 JetBrains s.r.o.
@@ -26,8 +26,8 @@ import java.util.Stack;
 /**
  * This class is a scanner generated by 
  * <a href="http://www.jflex.de/">JFlex</a> 1.4.3
- * on 24.06.10 11:26 from the specification file
- * <tt>D:/Work/IDEA/tools/lexer/../../community/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/lexer/groovy.flex</tt>
+ * on 13.09.10 13:39 from the specification file
+ * <tt>C:/Home/IDEA/tools/lexer/../../community/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/lexer/groovy.flex</tt>
  */
 public class _GroovyLexer implements FlexLexer, GroovyTokenTypes {
   /** initial size of the lookahead buffer */
@@ -76,14 +76,14 @@ public class _GroovyLexer implements FlexLexer, GroovyTokenTypes {
    */
   private static final String ZZ_CMAP_PACKED = 
     "\11\0\1\3\1\2\1\0\1\3\1\1\22\0\1\3\1\10\1\43"+
-    "\1\7\1\36\1\64\1\67\1\44\1\53\1\54\1\6\1\27\1\60"+
+    "\1\7\1\36\1\100\1\103\1\44\1\67\1\70\1\6\1\27\1\74"+
     "\1\30\1\34\1\5\1\31\2\12\1\12\1\12\2\12\1\12\2\12"+
-    "\1\57\1\70\1\61\1\52\1\62\1\51\1\71\3\11\1\24\1\26"+
-    "\1\16\1\14\1\35\1\22\2\35\1\20\13\35\1\33\2\35\1\55"+
-    "\1\4\1\56\1\65\1\35\1\0\1\73\1\42\1\74\1\23\1\25"+
-    "\1\15\1\13\1\103\1\21\1\35\1\75\1\17\1\77\1\37\1\100"+
-    "\1\72\1\35\1\40\1\76\1\41\1\45\1\101\1\105\1\32\1\102"+
-    "\1\104\1\46\1\66\1\47\1\63\43\0\4\50\4\0\1\35\12\0"+
+    "\1\73\1\104\1\75\1\66\1\76\1\65\1\105\3\11\1\24\1\26"+
+    "\1\16\1\14\1\35\1\22\2\35\1\20\13\35\1\33\2\35\1\71"+
+    "\1\4\1\72\1\101\1\35\1\0\1\52\1\42\1\53\1\23\1\25"+
+    "\1\15\1\13\1\62\1\21\1\35\1\54\1\17\1\56\1\37\1\57"+
+    "\1\51\1\35\1\40\1\55\1\41\1\45\1\60\1\64\1\32\1\61"+
+    "\1\63\1\46\1\102\1\47\1\77\43\0\4\50\4\0\1\35\12\0"+
     "\1\35\4\0\1\35\5\0\27\35\1\0\37\35\1\0\u013f\35\31\0"+
     "\162\35\4\0\14\35\16\0\5\35\11\0\1\35\213\0\1\35\13\0"+
     "\1\35\1\0\3\35\1\0\1\35\1\0\24\35\1\0\54\35\1\0"+
@@ -157,45 +157,45 @@ public class _GroovyLexer implements FlexLexer, GroovyTokenTypes {
   private static final String ZZ_ACTION_PACKED_0 =
     "\21\0\1\1\10\0\1\2\1\3\1\4\1\2\1\5"+
     "\1\6\1\2\1\7\1\10\1\11\5\10\1\12\1\13"+
-    "\1\11\1\14\1\15\4\10\1\16\1\17\1\20\1\21"+
-    "\1\22\1\23\1\24\1\25\1\26\1\27\1\30\1\31"+
-    "\1\32\1\33\1\34\1\35\1\36\1\37\1\40\1\41"+
-    "\1\42\6\10\1\43\1\44\1\45\1\46\1\47\1\50"+
-    "\1\51\1\52\1\51\1\53\1\54\1\55\1\51\1\56"+
-    "\1\51\1\43\1\46\1\57\1\60\2\61\2\62\3\63"+
-    "\1\64\1\65\2\66\3\67\1\70\1\71\1\72\1\73"+
-    "\1\74\1\73\1\75\1\1\1\76\1\77\1\100\2\1"+
-    "\1\101\1\70\2\102\1\103\1\4\2\103\2\104\2\105"+
-    "\5\0\1\4\1\106\1\107\1\110\1\111\1\112\1\113"+
-    "\1\114\1\115\1\116\1\117\1\120\1\11\1\121\2\0"+
-    "\5\10\1\122\1\123\6\10\1\124\1\125\1\126\1\127"+
-    "\1\130\1\0\1\131\1\132\11\10\2\0\1\133\1\17"+
-    "\1\0\1\17\1\134\1\135\1\136\1\137\1\140\1\0"+
-    "\1\141\1\0\1\142\1\143\1\144\1\145\1\146\1\147"+
-    "\4\10\1\150\13\10\1\0\2\51\1\151\1\152\3\0"+
-    "\1\74\1\75\1\0\1\75\1\107\1\65\2\0\1\1"+
-    "\1\101\1\70\1\153\3\0\1\107\1\154\1\155\1\115"+
-    "\1\156\1\0\1\156\3\10\1\157\1\10\1\160\2\10"+
-    "\1\161\4\10\1\11\1\162\1\163\1\164\5\10\1\165"+
-    "\5\10\1\133\1\166\2\17\1\136\1\167\1\170\1\171"+
-    "\1\172\1\0\24\10\1\51\1\173\1\174\1\0\1\75"+
-    "\1\174\1\65\2\107\1\154\1\0\1\107\2\154\1\156"+
-    "\3\10\1\175\6\10\1\176\1\10\1\177\1\11\1\200"+
-    "\2\10\1\201\1\10\1\202\3\10\1\203\3\0\1\17"+
-    "\1\0\1\204\10\10\1\205\1\10\1\206\7\10\1\207"+
-    "\1\10\1\55\1\0\1\65\2\107\2\154\1\107\1\0"+
-    "\1\154\1\210\1\211\1\212\12\10\1\213\1\214\1\10"+
-    "\2\0\1\17\1\0\6\10\1\215\1\216\3\10\1\217"+
-    "\1\10\1\220\2\10\1\221\1\75\2\154\1\0\4\10"+
-    "\1\222\1\10\1\223\1\10\1\224\1\225\1\10\1\226"+
-    "\1\10\2\0\2\10\1\227\2\10\1\230\2\10\1\231"+
-    "\1\10\1\232\1\10\1\75\1\233\3\10\1\234\1\235"+
-    "\1\10\1\236\1\17\1\237\1\10\1\240\12\10\1\241"+
-    "\1\242\1\243\1\10\1\244\1\245\2\10\1\246\1\247"+
-    "\1\10\1\250\1\251\2\10\1\252";
+    "\1\11\1\14\4\10\1\15\1\16\1\17\1\20\6\10"+
+    "\1\21\1\22\1\23\1\24\1\25\1\26\1\27\1\30"+
+    "\1\31\1\32\1\33\1\34\1\35\1\36\1\37\1\40"+
+    "\1\41\1\42\1\43\1\44\1\45\1\46\1\47\1\50"+
+    "\1\51\1\50\1\52\1\53\1\54\1\50\1\55\1\50"+
+    "\1\42\1\45\1\56\1\57\2\60\2\61\3\62\1\63"+
+    "\1\64\2\65\3\66\1\67\1\70\1\71\1\72\1\73"+
+    "\1\72\1\74\1\1\1\75\1\76\1\77\2\1\1\100"+
+    "\1\67\2\101\1\102\1\4\2\102\2\103\2\104\5\0"+
+    "\1\4\1\105\1\106\1\107\1\110\1\111\1\112\1\113"+
+    "\1\114\1\115\1\116\1\117\1\11\1\120\2\0\5\10"+
+    "\1\121\1\122\6\10\1\123\1\124\1\125\1\126\1\127"+
+    "\1\0\1\130\1\131\11\10\2\0\1\132\1\16\1\0"+
+    "\1\16\4\10\1\133\13\10\1\134\1\135\1\136\1\137"+
+    "\1\140\1\0\1\141\1\0\1\142\1\143\1\144\1\145"+
+    "\1\146\1\147\1\0\2\50\1\150\1\151\3\0\1\73"+
+    "\1\74\1\0\1\74\1\106\1\64\2\0\1\1\1\100"+
+    "\1\67\1\152\3\0\1\106\1\153\1\154\1\114\1\155"+
+    "\1\0\1\155\3\10\1\156\1\10\1\157\2\10\1\160"+
+    "\4\10\1\11\1\161\1\162\1\163\5\10\1\164\5\10"+
+    "\1\132\1\165\2\16\24\10\1\136\1\166\1\167\1\170"+
+    "\1\171\1\0\1\50\1\172\1\173\1\0\1\74\1\173"+
+    "\1\64\2\106\1\153\1\0\1\106\2\153\1\155\3\10"+
+    "\1\174\6\10\1\175\1\10\1\176\1\11\1\177\2\10"+
+    "\1\200\1\10\1\201\3\10\1\202\3\0\1\16\1\0"+
+    "\10\10\1\203\1\10\1\204\7\10\1\205\1\10\1\206"+
+    "\1\54\1\0\1\64\2\106\2\153\1\106\1\0\1\153"+
+    "\1\207\1\210\1\211\12\10\1\212\1\213\1\10\2\0"+
+    "\1\16\1\0\6\10\1\214\1\215\3\10\1\216\1\10"+
+    "\1\217\2\10\1\220\1\74\2\153\1\0\4\10\1\221"+
+    "\1\10\1\222\1\10\1\223\1\224\1\10\1\225\1\10"+
+    "\2\0\2\10\1\226\2\10\1\227\2\10\1\230\1\10"+
+    "\1\231\1\10\1\74\1\232\3\10\1\233\1\234\1\10"+
+    "\1\235\1\16\1\236\1\10\1\237\12\10\1\240\1\241"+
+    "\1\242\1\10\1\243\1\244\2\10\1\245\1\246\1\10"+
+    "\1\247\1\250\2\10\1\251";
 
   private static int [] zzUnpackAction() {
-    int [] result = new int[492];
+    int [] result = new int[491];
     int offset = 0;
     offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
     return result;
@@ -225,66 +225,66 @@ public class _GroovyLexer implements FlexLexer, GroovyTokenTypes {
     "\0\u0460\0\u04a6\0\u04ec\0\u0532\0\u0578\0\u05be\0\u0604\0\u064a"+
     "\0\u0690\0\u06d6\0\u071c\0\u0762\0\u071c\0\u07a8\0\u07ee\0\u0834"+
     "\0\u087a\0\u08c0\0\u0906\0\u094c\0\u0992\0\u09d8\0\u0a1e\0\u0a64"+
-    "\0\u0aaa\0\u0af0\0\u0b36\0\u0b7c\0\u0bc2\0\u0906\0\u0c08\0\u0c4e"+
-    "\0\u0c94\0\u0cda\0\u0d20\0\u0d66\0\u071c\0\u071c\0\u0dac\0\u0df2"+
-    "\0\u071c\0\u071c\0\u071c\0\u071c\0\u071c\0\u071c\0\u0e38\0\u0e7e"+
-    "\0\u071c\0\u0ec4\0\u0f0a\0\u0f50\0\u0f96\0\u071c\0\u071c\0\u0fdc"+
-    "\0\u1022\0\u1068\0\u10ae\0\u10f4\0\u113a\0\u071c\0\u1180\0\u071c"+
-    "\0\u071c\0\u11c6\0\u071c\0\u120c\0\u1252\0\u1298\0\u071c\0\u071c"+
-    "\0\u12de\0\u1324\0\u071c\0\u136a\0\u13b0\0\u13f6\0\u071c\0\u143c"+
-    "\0\u071c\0\u1482\0\u14c8\0\u071c\0\u071c\0\u1252\0\u150e\0\u071c"+
-    "\0\u071c\0\u071c\0\u1554\0\u071c\0\u1252\0\u159a\0\u071c\0\u071c"+
-    "\0\u071c\0\u071c\0\u071c\0\u15e0\0\u1626\0\u166c\0\u16b2\0\u16f8"+
-    "\0\u071c\0\u173e\0\u1784\0\u071c\0\u17ca\0\u071c\0\u1810\0\u071c"+
-    "\0\u1856\0\u189c\0\u18e2\0\u071c\0\u189c\0\u071c\0\u189c\0\u0690"+
-    "\0\u1928\0\u196e\0\u19b4\0\u19fa\0\u1a40\0\u1a86\0\u1acc\0\u071c"+
-    "\0\u1b12\0\u071c\0\u071c\0\u1b58\0\u1b9e\0\u071c\0\u071c\0\u071c"+
-    "\0\u071c\0\u071c\0\u1be4\0\u1c2a\0\u1c70\0\u1cb6\0\u1cfc\0\u1d42"+
-    "\0\u1d88\0\u0906\0\u1dce\0\u1e14\0\u1e5a\0\u1ea0\0\u1ee6\0\u1f2c"+
-    "\0\u1f72\0\u071c\0\u071c\0\u071c\0\u071c\0\u071c\0\u1fb8\0\u1ffe"+
-    "\0\u071c\0\u2044\0\u208a\0\u20d0\0\u2116\0\u215c\0\u21a2\0\u21e8"+
-    "\0\u222e\0\u2274\0\u22ba\0\u2300\0\u2346\0\u238c\0\u23d2\0\u2418"+
-    "\0\u071c\0\u071c\0\u245e\0\u071c\0\u24a4\0\u24ea\0\u071c\0\u2530"+
-    "\0\u071c\0\u071c\0\u071c\0\u071c\0\u071c\0\u071c\0\u2576\0\u25bc"+
-    "\0\u2602\0\u2648\0\u268e\0\u26d4\0\u271a\0\u2760\0\u27a6\0\u27ec"+
-    "\0\u2832\0\u2878\0\u28be\0\u2904\0\u294a\0\u2990\0\u29d6\0\u2a1c"+
-    "\0\u2a62\0\u2aa8\0\u2aee\0\u2b34\0\u2b7a\0\u2bc0\0\u2c06\0\u2c4c"+
-    "\0\u2c92\0\u2cd8\0\u2d1e\0\u2d64\0\u2daa\0\u2df0\0\u2e36\0\u173e"+
-    "\0\u173e\0\u2e7c\0\u189c\0\u2ec2\0\u2f08\0\u2f4e\0\u2f94\0\u071c"+
-    "\0\u071c\0\u2fda\0\u3020\0\u3066\0\u30ac\0\u30f2\0\u3138\0\u0906"+
-    "\0\u317e\0\u31c4\0\u320a\0\u3250\0\u3296\0\u32dc\0\u3322\0\u3368"+
-    "\0\u33ae\0\u33f4\0\u071c\0\u071c\0\u0906\0\u343a\0\u3480\0\u34c6"+
-    "\0\u350c\0\u3552\0\u0906\0\u3598\0\u35de\0\u3624\0\u366a\0\u36b0"+
-    "\0\u071c\0\u36f6\0\u071c\0\u373c\0\u071c\0\u071c\0\u071c\0\u071c"+
-    "\0\u071c\0\u3782\0\u37c8\0\u380e\0\u3854\0\u389a\0\u38e0\0\u3926"+
-    "\0\u396c\0\u39b2\0\u39f8\0\u3a3e\0\u3a84\0\u3aca\0\u3b10\0\u3b56"+
-    "\0\u3b9c\0\u3be2\0\u3c28\0\u3c6e\0\u3cb4\0\u3cfa\0\u3d40\0\u071c"+
-    "\0\u071c\0\u3d86\0\u3dcc\0\u2c4c\0\u2c4c\0\u3e12\0\u3e58\0\u3e9e"+
-    "\0\u071c\0\u3ee4\0\u3f2a\0\u071c\0\u071c\0\u3f70\0\u3fb6\0\u3ffc"+
-    "\0\u0906\0\u4042\0\u4088\0\u40ce\0\u4114\0\u415a\0\u41a0\0\u0906"+
-    "\0\u41e6\0\u0906\0\u422c\0\u0906\0\u4272\0\u42b8\0\u0906\0\u42fe"+
-    "\0\u0906\0\u4344\0\u438a\0\u43d0\0\u0906\0\u4416\0\u445c\0\u44a2"+
-    "\0\u44e8\0\u452e\0\u071c\0\u4574\0\u45ba\0\u4600\0\u4646\0\u468c"+
-    "\0\u46d2\0\u4718\0\u475e\0\u0906\0\u47a4\0\u0906\0\u47ea\0\u4830"+
-    "\0\u4876\0\u48bc\0\u4902\0\u4948\0\u498e\0\u0906\0\u49d4\0\u071c"+
-    "\0\u4a1a\0\u2c92\0\u4a60\0\u4aa6\0\u4aec\0\u4b32\0\u071c\0\u3ee4"+
-    "\0\u4b78\0\u0906\0\u4bbe\0\u0906\0\u4c04\0\u4c4a\0\u4c90\0\u4cd6"+
-    "\0\u4d1c\0\u4d62\0\u4da8\0\u4dee\0\u4e34\0\u4e7a\0\u4ec0\0\u0906"+
-    "\0\u4f06\0\u4f4c\0\u4f92\0\u4fd8\0\u501e\0\u5064\0\u50aa\0\u50f0"+
-    "\0\u5136\0\u517c\0\u51c2\0\u0906\0\u0906\0\u5208\0\u524e\0\u5294"+
-    "\0\u0906\0\u52da\0\u0906\0\u5320\0\u5366\0\u0906\0\u4a60\0\u53ac"+
-    "\0\u53f2\0\u4b78\0\u5438\0\u547e\0\u54c4\0\u550a\0\u0906\0\u5550"+
-    "\0\u0906\0\u5596\0\u0906\0\u0906\0\u55dc\0\u0906\0\u5622\0\u5668"+
-    "\0\u56ae\0\u56f4\0\u573a\0\u0906\0\u5780\0\u57c6\0\u0906\0\u580c"+
-    "\0\u5852\0\u0906\0\u5898\0\u0906\0\u58de\0\u53ac\0\u0906\0\u5924"+
-    "\0\u596a\0\u59b0\0\u0906\0\u0906\0\u59f6\0\u0906\0\u501e\0\u0906"+
-    "\0\u5a3c\0\u0906\0\u5a82\0\u5ac8\0\u5b0e\0\u5b54\0\u5b9a\0\u5be0"+
-    "\0\u5c26\0\u5c6c\0\u5cb2\0\u5cf8\0\u0906\0\u0906\0\u0906\0\u5d3e"+
-    "\0\u0906\0\u0906\0\u5d84\0\u5dca\0\u0906\0\u0906\0\u5e10\0\u0906"+
-    "\0\u0906\0\u5e56\0\u5e9c\0\u0906";
+    "\0\u0aaa\0\u0af0\0\u0b36\0\u0b7c\0\u0bc2\0\u0c08\0\u0c4e\0\u0c94"+
+    "\0\u0cda\0\u0d20\0\u0d66\0\u071c\0\u071c\0\u0dac\0\u0df2\0\u0e38"+
+    "\0\u0e7e\0\u0ec4\0\u0f0a\0\u0f50\0\u0f96\0\u071c\0\u071c\0\u071c"+
+    "\0\u071c\0\u071c\0\u071c\0\u0fdc\0\u1022\0\u071c\0\u1068\0\u10ae"+
+    "\0\u10f4\0\u113a\0\u071c\0\u071c\0\u071c\0\u1180\0\u071c\0\u071c"+
+    "\0\u11c6\0\u071c\0\u120c\0\u1252\0\u1298\0\u071c\0\u071c\0\u12de"+
+    "\0\u1324\0\u071c\0\u136a\0\u13b0\0\u13f6\0\u071c\0\u143c\0\u071c"+
+    "\0\u1482\0\u14c8\0\u071c\0\u071c\0\u1252\0\u150e\0\u071c\0\u071c"+
+    "\0\u071c\0\u1554\0\u071c\0\u1252\0\u159a\0\u071c\0\u071c\0\u071c"+
+    "\0\u071c\0\u071c\0\u15e0\0\u1626\0\u166c\0\u16b2\0\u16f8\0\u071c"+
+    "\0\u173e\0\u1784\0\u071c\0\u17ca\0\u071c\0\u1810\0\u071c\0\u1856"+
+    "\0\u189c\0\u18e2\0\u071c\0\u189c\0\u071c\0\u189c\0\u0690\0\u1928"+
+    "\0\u196e\0\u19b4\0\u19fa\0\u1a40\0\u1a86\0\u1acc\0\u071c\0\u1b12"+
+    "\0\u071c\0\u071c\0\u1b58\0\u1b9e\0\u071c\0\u071c\0\u071c\0\u071c"+
+    "\0\u071c\0\u1be4\0\u1c2a\0\u1c70\0\u1cb6\0\u1cfc\0\u1d42\0\u1d88"+
+    "\0\u0906\0\u1dce\0\u1e14\0\u1e5a\0\u1ea0\0\u1ee6\0\u1f2c\0\u1f72"+
+    "\0\u071c\0\u071c\0\u071c\0\u071c\0\u071c\0\u1fb8\0\u1ffe\0\u071c"+
+    "\0\u2044\0\u208a\0\u20d0\0\u2116\0\u215c\0\u21a2\0\u21e8\0\u222e"+
+    "\0\u2274\0\u22ba\0\u2300\0\u2346\0\u238c\0\u23d2\0\u2418\0\u245e"+
+    "\0\u24a4\0\u24ea\0\u2530\0\u2576\0\u25bc\0\u2602\0\u2648\0\u268e"+
+    "\0\u26d4\0\u271a\0\u2760\0\u27a6\0\u27ec\0\u2832\0\u2878\0\u071c"+
+    "\0\u071c\0\u28be\0\u071c\0\u2904\0\u294a\0\u071c\0\u2990\0\u071c"+
+    "\0\u071c\0\u071c\0\u071c\0\u071c\0\u071c\0\u29d6\0\u2a1c\0\u2a62"+
+    "\0\u2aa8\0\u2aee\0\u2b34\0\u2b7a\0\u2bc0\0\u2c06\0\u2c4c\0\u2c92"+
+    "\0\u2cd8\0\u2d1e\0\u2d64\0\u2daa\0\u2df0\0\u2e36\0\u173e\0\u173e"+
+    "\0\u2e7c\0\u189c\0\u2ec2\0\u2f08\0\u2f4e\0\u2f94\0\u071c\0\u071c"+
+    "\0\u2fda\0\u3020\0\u3066\0\u30ac\0\u30f2\0\u3138\0\u0906\0\u317e"+
+    "\0\u31c4\0\u320a\0\u3250\0\u3296\0\u32dc\0\u3322\0\u3368\0\u33ae"+
+    "\0\u33f4\0\u071c\0\u071c\0\u0906\0\u343a\0\u3480\0\u34c6\0\u350c"+
+    "\0\u3552\0\u0906\0\u3598\0\u35de\0\u3624\0\u366a\0\u36b0\0\u071c"+
+    "\0\u36f6\0\u071c\0\u373c\0\u3782\0\u37c8\0\u380e\0\u3854\0\u389a"+
+    "\0\u38e0\0\u3926\0\u396c\0\u39b2\0\u39f8\0\u3a3e\0\u3a84\0\u3aca"+
+    "\0\u3b10\0\u3b56\0\u3b9c\0\u3be2\0\u3c28\0\u3c6e\0\u3cb4\0\u071c"+
+    "\0\u071c\0\u071c\0\u071c\0\u071c\0\u3cfa\0\u3d40\0\u071c\0\u071c"+
+    "\0\u3d86\0\u3dcc\0\u2c4c\0\u2c4c\0\u3e12\0\u3e58\0\u3e9e\0\u071c"+
+    "\0\u3ee4\0\u3f2a\0\u071c\0\u071c\0\u3f70\0\u3fb6\0\u3ffc\0\u0906"+
+    "\0\u4042\0\u4088\0\u40ce\0\u4114\0\u415a\0\u41a0\0\u0906\0\u41e6"+
+    "\0\u0906\0\u422c\0\u0906\0\u4272\0\u42b8\0\u0906\0\u42fe\0\u0906"+
+    "\0\u4344\0\u438a\0\u43d0\0\u0906\0\u4416\0\u445c\0\u44a2\0\u44e8"+
+    "\0\u452e\0\u4574\0\u45ba\0\u4600\0\u4646\0\u468c\0\u46d2\0\u4718"+
+    "\0\u475e\0\u0906\0\u47a4\0\u0906\0\u47ea\0\u4830\0\u4876\0\u48bc"+
+    "\0\u4902\0\u4948\0\u498e\0\u0906\0\u49d4\0\u071c\0\u071c\0\u4a1a"+
+    "\0\u2c92\0\u4a60\0\u4aa6\0\u4aec\0\u4b32\0\u071c\0\u3ee4\0\u4b78"+
+    "\0\u0906\0\u4bbe\0\u0906\0\u4c04\0\u4c4a\0\u4c90\0\u4cd6\0\u4d1c"+
+    "\0\u4d62\0\u4da8\0\u4dee\0\u4e34\0\u4e7a\0\u4ec0\0\u0906\0\u4f06"+
+    "\0\u4f4c\0\u4f92\0\u4fd8\0\u501e\0\u5064\0\u50aa\0\u50f0\0\u5136"+
+    "\0\u517c\0\u51c2\0\u0906\0\u0906\0\u5208\0\u524e\0\u5294\0\u0906"+
+    "\0\u52da\0\u0906\0\u5320\0\u5366\0\u0906\0\u4a60\0\u53ac\0\u53f2"+
+    "\0\u4b78\0\u5438\0\u547e\0\u54c4\0\u550a\0\u0906\0\u5550\0\u0906"+
+    "\0\u5596\0\u0906\0\u0906\0\u55dc\0\u0906\0\u5622\0\u5668\0\u56ae"+
+    "\0\u56f4\0\u573a\0\u0906\0\u5780\0\u57c6\0\u0906\0\u580c\0\u5852"+
+    "\0\u0906\0\u5898\0\u0906\0\u58de\0\u53ac\0\u0906\0\u5924\0\u596a"+
+    "\0\u59b0\0\u0906\0\u0906\0\u59f6\0\u0906\0\u501e\0\u0906\0\u5a3c"+
+    "\0\u0906\0\u5a82\0\u5ac8\0\u5b0e\0\u5b54\0\u5b9a\0\u5be0\0\u5c26"+
+    "\0\u5c6c\0\u5cb2\0\u5cf8\0\u0906\0\u0906\0\u0906\0\u5d3e\0\u0906"+
+    "\0\u0906\0\u5d84\0\u5dca\0\u0906\0\u0906\0\u5e10\0\u0906\0\u0906"+
+    "\0\u5e56\0\u5e9c\0\u0906";
 
   private static int [] zzUnpackRowMap() {
-    int [] result = new int[492];
+    int [] result = new int[491];
     int offset = 0;
     offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
     return result;
@@ -310,432 +310,434 @@ public class _GroovyLexer implements FlexLexer, GroovyTokenTypes {
     "\1\33\2\34\1\35\1\36\1\37\1\40\1\41\1\42"+
     "\1\43\1\44\2\43\1\45\1\43\1\46\1\43\1\47"+
     "\1\43\1\50\1\43\1\51\1\43\1\52\1\53\1\54"+
-    "\2\43\1\55\1\43\1\56\1\57\1\60\1\61\1\62"+
-    "\1\63\1\64\1\43\1\65\1\66\1\33\1\67\1\70"+
-    "\1\71\1\72\1\73\1\74\1\75\1\76\1\77\1\100"+
-    "\1\101\1\102\1\103\1\104\1\105\1\106\1\107\1\110"+
-    "\1\111\1\112\1\43\1\113\2\43\1\114\3\43\1\115"+
-    "\11\116\1\117\1\116\14\117\3\116\2\117\1\116\1\117"+
-    "\1\116\4\117\2\116\1\117\1\120\23\116\14\117\11\121"+
-    "\1\122\1\121\14\122\3\121\2\122\1\121\1\122\1\121"+
-    "\4\122\2\121\1\122\1\123\23\121\14\122\1\124\2\125"+
-    "\1\124\1\126\31\124\1\127\4\124\1\130\42\124\4\131"+
-    "\1\132\31\131\1\133\4\131\1\134\42\131\11\116\1\117"+
-    "\1\116\14\117\3\116\2\117\1\116\1\117\1\116\4\117"+
-    "\2\116\1\117\24\116\14\117\34\116\1\135\51\116\11\121"+
-    "\1\122\1\121\14\122\3\121\2\122\1\121\1\122\1\121"+
-    "\4\122\2\121\1\122\24\121\14\122\34\121\1\136\51\121"+
-    "\1\137\2\140\103\137\1\141\2\142\6\141\1\143\1\141"+
-    "\14\143\3\141\2\143\1\141\1\143\1\141\4\143\2\141"+
-    "\1\143\1\144\23\141\14\143\1\145\1\146\1\125\1\145"+
-    "\1\147\1\150\30\145\1\151\47\145\1\152\2\153\6\152"+
-    "\1\143\1\152\14\143\3\152\2\143\1\152\1\143\1\152"+
-    "\4\143\2\152\1\143\1\144\23\152\14\143\1\154\1\155"+
-    "\1\125\1\154\1\156\1\150\30\154\1\157\47\154\1\33"+
+    "\2\43\1\55\2\43\1\56\1\57\1\60\1\61\1\62"+
+    "\1\63\1\43\1\64\1\65\1\33\1\66\1\67\1\70"+
+    "\1\43\1\71\2\43\1\72\3\43\1\73\1\74\1\75"+
+    "\1\76\1\77\1\100\1\101\1\102\1\103\1\104\1\105"+
+    "\1\106\1\107\1\110\1\111\1\112\1\113\1\114\11\115"+
+    "\1\116\1\115\14\116\3\115\2\116\1\115\1\116\1\115"+
+    "\4\116\2\115\1\116\1\117\2\115\14\116\21\115\11\120"+
+    "\1\121\1\120\14\121\3\120\2\121\1\120\1\121\1\120"+
+    "\4\121\2\120\1\121\1\122\2\120\14\121\21\120\1\123"+
+    "\2\124\1\123\1\125\31\123\1\126\4\123\1\127\42\123"+
+    "\4\130\1\131\31\130\1\132\4\130\1\133\42\130\11\115"+
+    "\1\116\1\115\14\116\3\115\2\116\1\115\1\116\1\115"+
+    "\4\116\2\115\1\116\3\115\14\116\55\115\1\134\51\115"+
+    "\11\120\1\121\1\120\14\121\3\120\2\121\1\120\1\121"+
+    "\1\120\4\121\2\120\1\121\3\120\14\121\55\120\1\135"+
+    "\51\120\1\136\2\137\103\136\1\140\2\141\6\140\1\142"+
+    "\1\140\14\142\3\140\2\142\1\140\1\142\1\140\4\142"+
+    "\2\140\1\142\1\143\2\140\14\142\21\140\1\144\1\145"+
+    "\1\124\1\144\1\146\1\147\30\144\1\150\47\144\1\151"+
+    "\2\152\6\151\1\142\1\151\14\142\3\151\2\142\1\151"+
+    "\1\142\1\151\4\142\2\151\1\142\1\143\2\151\14\142"+
+    "\21\151\1\153\1\154\1\124\1\153\1\155\1\147\30\153"+
+    "\1\156\47\153\1\33\2\34\1\35\1\36\1\37\1\40"+
+    "\1\41\1\42\1\43\1\44\2\43\1\45\1\43\1\46"+
+    "\1\43\1\47\1\43\1\50\1\43\1\51\1\43\1\52"+
+    "\1\53\1\54\2\43\1\55\2\43\1\56\1\57\1\60"+
+    "\1\61\1\62\1\63\1\43\1\157\1\160\1\33\1\66"+
+    "\1\67\1\70\1\43\1\71\2\43\1\72\3\43\1\73"+
+    "\1\74\1\75\1\76\1\77\1\100\1\101\1\102\1\103"+
+    "\1\104\1\105\1\106\1\107\1\110\1\111\1\112\1\113"+
+    "\1\114\3\161\1\162\1\163\1\164\100\161\1\165\2\166"+
+    "\6\165\1\167\1\165\14\167\3\165\2\167\1\165\1\167"+
+    "\1\165\4\167\2\165\1\167\1\170\1\165\1\0\14\167"+
+    "\21\165\1\171\2\124\1\171\1\172\1\173\30\171\1\174"+
+    "\47\171\11\175\1\167\1\175\14\167\3\175\2\167\1\175"+
+    "\1\167\1\175\4\167\2\175\1\167\3\175\14\167\55\175"+
+    "\1\176\51\175\1\177\3\200\1\201\1\202\100\177\1\203"+
+    "\3\200\1\204\101\203\1\205\3\200\1\206\101\205\1\33"+
     "\2\34\1\35\1\36\1\37\1\40\1\41\1\42\1\43"+
     "\1\44\2\43\1\45\1\43\1\46\1\43\1\47\1\43"+
     "\1\50\1\43\1\51\1\43\1\52\1\53\1\54\2\43"+
-    "\1\55\1\43\1\56\1\57\1\60\1\61\1\62\1\63"+
-    "\1\64\1\43\1\160\1\161\1\33\1\67\1\70\1\71"+
-    "\1\72\1\73\1\74\1\75\1\76\1\77\1\100\1\101"+
-    "\1\102\1\103\1\104\1\105\1\106\1\107\1\110\1\111"+
-    "\1\112\1\43\1\113\2\43\1\114\3\43\1\115\3\162"+
-    "\1\163\1\164\1\165\100\162\1\166\2\167\6\166\1\170"+
-    "\1\166\14\170\3\166\2\170\1\166\1\170\1\166\4\170"+
-    "\2\166\1\170\1\171\1\166\1\0\21\166\14\170\1\172"+
-    "\2\125\1\172\1\173\1\174\30\172\1\175\47\172\11\176"+
-    "\1\170\1\176\14\170\3\176\2\170\1\176\1\170\1\176"+
-    "\4\170\2\176\1\170\24\176\14\170\34\176\1\177\51\176"+
-    "\1\200\3\201\1\202\1\203\100\200\1\204\3\201\1\205"+
-    "\101\204\1\206\3\201\1\207\101\206\1\33\2\34\1\35"+
-    "\1\36\1\37\1\40\1\41\1\42\1\43\1\44\2\43"+
-    "\1\45\1\43\1\46\1\43\1\47\1\43\1\50\1\43"+
-    "\1\51\1\43\1\52\1\53\1\54\2\43\1\55\1\43"+
-    "\1\56\1\57\1\60\1\61\1\62\1\63\1\64\1\43"+
-    "\1\65\2\33\1\67\1\70\1\71\1\72\1\73\1\74"+
-    "\1\75\1\76\1\77\1\100\1\101\1\102\1\103\1\104"+
-    "\1\105\1\106\1\107\1\110\1\111\1\112\1\43\1\113"+
-    "\2\43\1\114\3\43\1\115\4\210\1\211\31\210\1\0"+
-    "\4\210\1\212\42\210\43\0\1\213\151\0\3\34\1\214"+
-    "\102\0\1\215\1\35\110\0\1\216\1\217\43\0\1\220"+
-    "\41\0\1\221\25\0\1\222\15\0\1\223\43\0\1\224"+
-    "\147\0\1\225\44\0\16\43\2\0\3\43\1\0\6\43"+
-    "\2\0\1\43\24\0\14\43\12\0\1\44\2\226\2\227"+
-    "\2\230\2\231\2\232\2\233\2\0\1\44\2\0\1\234"+
-    "\62\0\6\43\1\235\1\43\1\236\5\43\2\0\3\43"+
-    "\1\0\6\43\2\0\1\43\24\0\1\43\1\237\4\43"+
-    "\1\240\5\43\11\0\16\43\2\0\3\43\1\0\6\43"+
-    "\2\0\1\43\24\0\6\43\1\241\5\43\11\0\4\43"+
-    "\1\242\11\43\2\0\3\43\1\0\2\43\1\243\3\43"+
-    "\2\0\1\43\24\0\5\43\1\244\6\43\11\0\14\43"+
-    "\1\245\1\43\2\0\3\43\1\0\6\43\2\0\1\43"+
-    "\24\0\6\43\1\246\5\43\11\0\6\43\1\247\7\43"+
-    "\2\0\1\43\1\250\1\43\1\0\2\43\1\251\3\43"+
-    "\2\0\1\43\24\0\14\43\27\0\1\252\22\0\1\253"+
-    "\63\0\1\254\21\0\1\255\7\0\1\256\35\0\1\44"+
-    "\2\226\2\227\2\230\2\231\2\232\2\233\2\0\1\44"+
-    "\2\257\1\234\105\0\1\260\32\0\1\261\27\0\14\43"+
-    "\1\262\1\43\2\0\3\43\1\0\6\43\2\0\1\263"+
-    "\24\0\1\43\1\264\12\43\11\0\14\43\1\265\1\43"+
-    "\2\0\3\43\1\0\6\43\2\0\1\43\24\0\14\43"+
-    "\11\0\16\43\2\0\3\43\1\0\3\43\1\266\2\43"+
-    "\2\0\1\43\24\0\11\43\1\267\2\43\11\0\16\43"+
-    "\2\0\3\43\1\0\3\43\1\270\2\43\2\0\1\43"+
-    "\24\0\6\43\1\271\1\43\1\272\3\43\1\273\2\0"+
-    "\1\273\1\274\31\273\1\0\4\273\1\275\42\273\1\276"+
-    "\2\0\1\276\1\277\37\276\1\300\41\276\34\0\1\301"+
-    "\22\0\1\302\100\0\1\303\10\0\1\304\74\0\1\305"+
-    "\6\0\1\306\76\0\1\307\7\0\1\310\75\0\1\311"+
-    "\105\0\1\312\105\0\1\313\13\0\1\314\71\0\1\315"+
-    "\14\0\1\316\27\0\16\43\2\0\3\43\1\0\3\43"+
-    "\1\317\2\43\2\0\1\320\24\0\1\43\1\321\12\43"+
-    "\11\0\16\43\2\0\3\43\1\0\5\43\1\322\2\0"+
-    "\1\43\24\0\4\43\1\323\7\43\11\0\6\43\1\324"+
-    "\7\43\2\0\3\43\1\0\6\43\2\0\1\43\24\0"+
-    "\1\43\1\325\4\43\1\326\2\43\1\327\2\43\11\0"+
-    "\16\43\2\0\3\43\1\0\4\43\1\330\1\43\2\0"+
-    "\1\331\24\0\10\43\1\332\1\333\1\43\1\334\11\0"+
-    "\16\43\2\0\3\43\1\0\6\43\2\0\1\43\24\0"+
-    "\6\43\1\335\5\43\11\0\16\43\2\0\3\43\1\0"+
-    "\6\43\2\0\1\43\24\0\11\43\1\336\2\43\11\0"+
-    "\16\117\2\0\3\117\1\0\1\117\1\0\4\117\2\0"+
-    "\1\117\24\0\14\117\11\0\16\122\2\0\3\122\1\0"+
-    "\1\122\1\0\4\122\2\0\1\122\24\0\14\122\1\124"+
-    "\2\0\1\124\1\126\31\124\1\0\4\124\1\0\42\124"+
-    "\1\0\3\125\1\337\101\0\106\124\4\131\1\132\31\131"+
-    "\1\0\4\131\1\340\154\131\1\0\31\131\1\0\4\131"+
-    "\1\341\42\131\11\0\1\342\1\0\14\342\3\0\2\342"+
-    "\1\0\1\342\1\0\4\342\2\0\1\342\24\0\14\342"+
-    "\11\0\1\343\1\0\14\343\3\0\2\343\1\0\1\343"+
-    "\1\0\4\343\2\0\1\343\24\0\14\343\1\0\3\140"+
-    "\1\344\102\0\3\142\1\345\112\0\16\143\2\0\3\143"+
-    "\1\0\1\143\1\0\4\143\2\0\1\143\24\0\14\143"+
-    "\5\0\1\145\101\0\3\153\1\346\106\0\1\154\101\0"+
-    "\1\347\1\163\103\0\1\350\2\351\1\350\1\352\1\216"+
-    "\1\353\27\350\1\354\47\350\4\0\1\355\102\0\3\167"+
-    "\1\356\112\0\16\170\2\0\3\170\1\0\1\170\1\0"+
-    "\4\170\2\0\1\170\24\0\14\170\1\172\2\0\1\172"+
-    "\1\173\1\174\30\172\1\175\50\172\1\357\2\172\1\173"+
-    "\1\360\30\172\1\361\47\172\5\0\1\174\111\0\1\362"+
-    "\1\0\14\362\3\0\2\362\1\0\1\362\1\0\4\362"+
-    "\2\0\1\362\24\0\14\362\1\0\3\201\1\363\102\0"+
-    "\2\201\110\0\1\216\1\217\77\0\112\210\1\0\31\210"+
-    "\1\0\4\210\1\364\42\210\43\0\1\365\43\0\2\34"+
-    "\105\0\1\35\103\0\1\216\2\0\103\216\6\366\1\367"+
-    "\77\366\52\0\1\370\33\0\1\224\2\0\103\224\52\0"+
-    "\1\371\45\0\1\372\14\0\2\373\1\372\66\0\1\374"+
-    "\16\0\1\374\65\0\16\43\2\0\3\43\1\0\6\43"+
-    "\2\0\1\43\24\0\6\43\1\375\5\43\11\0\16\43"+
-    "\2\0\3\43\1\0\2\43\1\376\3\43\2\0\1\43"+
-    "\24\0\14\43\11\0\6\43\1\377\7\43\2\0\3\43"+
-    "\1\0\6\43\2\0\1\43\24\0\14\43\11\0\16\43"+
-    "\2\0\3\43\1\0\3\43\1\u0100\2\43\2\0\1\43"+
-    "\24\0\14\43\11\0\16\43\2\0\3\43\1\0\2\43"+
-    "\1\u0101\3\43\2\0\1\43\24\0\14\43\11\0\16\43"+
-    "\2\0\3\43\1\0\4\43\1\u0102\1\43\2\0\1\43"+
-    "\24\0\4\43\1\u0103\7\43\11\0\16\43\2\0\3\43"+
-    "\1\0\6\43\2\0\1\43\24\0\1\u0104\13\43\11\0"+
-    "\4\43\1\u0105\11\43\2\0\3\43\1\0\6\43\2\0"+
-    "\1\43\24\0\14\43\11\0\16\43\2\0\3\43\1\0"+
-    "\6\43\2\0\1\u0106\24\0\14\43\11\0\16\43\2\0"+
-    "\3\43\1\0\6\43\2\0\1\43\24\0\4\43\1\u0107"+
-    "\7\43\11\0\16\43\2\0\3\43\1\0\4\43\1\u0108"+
-    "\1\43\2\0\1\43\24\0\14\43\11\0\16\43\2\0"+
-    "\3\43\1\0\6\43\2\0\1\u0109\24\0\14\43\11\0"+
-    "\2\u010a\2\0\2\u010a\4\0\4\u010a\2\0\1\u010a\10\0"+
-    "\1\u010a\30\0\2\u010a\45\0\1\u010b\24\0\1\u010c\35\0"+
-    "\16\43\2\0\3\43\1\0\6\43\2\0\1\43\24\0"+
-    "\13\43\1\u010d\11\0\6\43\1\u010e\7\43\2\0\3\43"+
-    "\1\0\6\43\2\0\1\43\24\0\14\43\11\0\16\43"+
+    "\1\55\2\43\1\56\1\57\1\60\1\61\1\62\1\63"+
+    "\1\43\1\64\2\33\1\66\1\67\1\70\1\43\1\71"+
+    "\2\43\1\72\3\43\1\73\1\74\1\75\1\76\1\77"+
+    "\1\100\1\101\1\102\1\103\1\104\1\105\1\106\1\107"+
+    "\1\110\1\111\1\112\1\113\1\114\4\207\1\210\31\207"+
+    "\1\0\4\207\1\211\42\207\43\0\1\212\151\0\3\34"+
+    "\1\213\102\0\1\214\1\35\110\0\1\215\1\216\57\0"+
+    "\1\217\25\0\1\220\25\0\1\221\31\0\1\222\27\0"+
+    "\1\223\163\0\1\224\30\0\16\43\2\0\3\43\1\0"+
+    "\6\43\2\0\1\43\3\0\14\43\33\0\1\44\2\225"+
+    "\2\226\2\227\2\230\2\231\2\232\2\0\1\44\2\0"+
+    "\1\233\62\0\6\43\1\234\1\43\1\235\5\43\2\0"+
+    "\3\43\1\0\6\43\2\0\1\43\3\0\1\43\1\236"+
+    "\4\43\1\237\5\43\32\0\16\43\2\0\3\43\1\0"+
+    "\6\43\2\0\1\43\3\0\6\43\1\240\5\43\32\0"+
+    "\4\43\1\241\11\43\2\0\3\43\1\0\2\43\1\242"+
+    "\3\43\2\0\1\43\3\0\5\43\1\243\6\43\32\0"+
+    "\14\43\1\244\1\43\2\0\3\43\1\0\6\43\2\0"+
+    "\1\43\3\0\6\43\1\245\5\43\32\0\6\43\1\246"+
+    "\7\43\2\0\1\43\1\247\1\43\1\0\2\43\1\250"+
+    "\3\43\2\0\1\43\3\0\14\43\50\0\1\251\36\0"+
+    "\1\252\47\0\1\253\35\0\1\254\7\0\1\255\21\0"+
+    "\1\44\2\225\2\226\2\227\2\230\2\231\2\232\2\0"+
+    "\1\44\2\256\1\233\105\0\1\257\46\0\1\260\13\0"+
+    "\14\43\1\261\1\43\2\0\3\43\1\0\6\43\2\0"+
+    "\1\262\3\0\1\43\1\263\12\43\32\0\14\43\1\264"+
+    "\1\43\2\0\3\43\1\0\6\43\2\0\1\43\3\0"+
+    "\14\43\32\0\16\43\2\0\3\43\1\0\3\43\1\265"+
+    "\2\43\2\0\1\43\3\0\11\43\1\266\2\43\32\0"+
+    "\16\43\2\0\3\43\1\0\3\43\1\267\2\43\2\0"+
+    "\1\43\3\0\6\43\1\270\1\43\1\271\3\43\21\0"+
+    "\1\272\2\0\1\272\1\273\31\272\1\0\4\272\1\274"+
+    "\42\272\1\275\2\0\1\275\1\276\37\275\1\277\41\275"+
+    "\11\0\16\43\2\0\3\43\1\0\3\43\1\300\2\43"+
+    "\2\0\1\301\3\0\1\43\1\302\12\43\32\0\16\43"+
+    "\2\0\3\43\1\0\5\43\1\303\2\0\1\43\3\0"+
+    "\4\43\1\304\7\43\32\0\6\43\1\305\7\43\2\0"+
+    "\3\43\1\0\6\43\2\0\1\43\3\0\1\43\1\306"+
+    "\4\43\1\307\2\43\1\310\2\43\32\0\16\43\2\0"+
+    "\3\43\1\0\4\43\1\311\1\43\2\0\1\312\3\0"+
+    "\10\43\1\313\1\314\1\43\1\315\32\0\16\43\2\0"+
+    "\3\43\1\0\6\43\2\0\1\43\3\0\6\43\1\316"+
+    "\5\43\32\0\16\43\2\0\3\43\1\0\6\43\2\0"+
+    "\1\43\3\0\11\43\1\317\2\43\55\0\1\320\36\0"+
+    "\1\321\100\0\1\322\10\0\1\323\74\0\1\324\6\0"+
+    "\1\325\76\0\1\326\7\0\1\327\75\0\1\330\105\0"+
+    "\1\331\105\0\1\332\13\0\1\333\71\0\1\334\14\0"+
+    "\1\335\13\0\16\116\2\0\3\116\1\0\1\116\1\0"+
+    "\4\116\2\0\1\116\3\0\14\116\32\0\16\121\2\0"+
+    "\3\121\1\0\1\121\1\0\4\121\2\0\1\121\3\0"+
+    "\14\121\21\0\1\123\2\0\1\123\1\125\31\123\1\0"+
+    "\4\123\1\0\42\123\1\0\3\124\1\336\101\0\106\123"+
+    "\4\130\1\131\31\130\1\0\4\130\1\337\154\130\1\0"+
+    "\31\130\1\0\4\130\1\340\42\130\11\0\1\341\1\0"+
+    "\14\341\3\0\2\341\1\0\1\341\1\0\4\341\2\0"+
+    "\1\341\3\0\14\341\32\0\1\342\1\0\14\342\3\0"+
+    "\2\342\1\0\1\342\1\0\4\342\2\0\1\342\3\0"+
+    "\14\342\22\0\3\137\1\343\102\0\3\141\1\344\112\0"+
+    "\16\142\2\0\3\142\1\0\1\142\1\0\4\142\2\0"+
+    "\1\142\3\0\14\142\26\0\1\144\101\0\3\152\1\345"+
+    "\106\0\1\153\101\0\1\346\1\162\103\0\1\347\2\350"+
+    "\1\347\1\351\1\215\1\352\27\347\1\353\47\347\4\0"+
+    "\1\354\102\0\3\166\1\355\112\0\16\167\2\0\3\167"+
+    "\1\0\1\167\1\0\4\167\2\0\1\167\3\0\14\167"+
+    "\21\0\1\171\2\0\1\171\1\172\1\173\30\171\1\174"+
+    "\50\171\1\356\2\171\1\172\1\357\30\171\1\360\47\171"+
+    "\5\0\1\173\111\0\1\361\1\0\14\361\3\0\2\361"+
+    "\1\0\1\361\1\0\4\361\2\0\1\361\3\0\14\361"+
+    "\22\0\3\200\1\362\102\0\2\200\110\0\1\215\1\216"+
+    "\77\0\112\207\1\0\31\207\1\0\4\207\1\363\42\207"+
+    "\43\0\1\364\43\0\2\34\105\0\1\35\103\0\1\215"+
+    "\2\0\103\215\6\365\1\366\77\365\66\0\1\367\17\0"+
+    "\1\223\2\0\103\223\66\0\1\370\31\0\1\371\14\0"+
+    "\2\372\1\371\66\0\1\373\16\0\1\373\65\0\16\43"+
+    "\2\0\3\43\1\0\6\43\2\0\1\43\3\0\6\43"+
+    "\1\374\5\43\32\0\16\43\2\0\3\43\1\0\2\43"+
+    "\1\375\3\43\2\0\1\43\3\0\14\43\32\0\6\43"+
+    "\1\376\7\43\2\0\3\43\1\0\6\43\2\0\1\43"+
+    "\3\0\14\43\32\0\16\43\2\0\3\43\1\0\3\43"+
+    "\1\377\2\43\2\0\1\43\3\0\14\43\32\0\16\43"+
+    "\2\0\3\43\1\0\2\43\1\u0100\3\43\2\0\1\43"+
+    "\3\0\14\43\32\0\16\43\2\0\3\43\1\0\4\43"+
+    "\1\u0101\1\43\2\0\1\43\3\0\4\43\1\u0102\7\43"+
+    "\32\0\16\43\2\0\3\43\1\0\6\43\2\0\1\43"+
+    "\3\0\1\u0103\13\43\32\0\4\43\1\u0104\11\43\2\0"+
+    "\3\43\1\0\6\43\2\0\1\43\3\0\14\43\32\0"+
+    "\16\43\2\0\3\43\1\0\6\43\2\0\1\u0105\3\0"+
+    "\14\43\32\0\16\43\2\0\3\43\1\0\6\43\2\0"+
+    "\1\43\3\0\4\43\1\u0106\7\43\32\0\16\43\2\0"+
+    "\3\43\1\0\4\43\1\u0107\1\43\2\0\1\43\3\0"+
+    "\14\43\32\0\16\43\2\0\3\43\1\0\6\43\2\0"+
+    "\1\u0108\3\0\14\43\32\0\2\u0109\2\0\2\u0109\4\0"+
+    "\4\u0109\2\0\1\u0109\10\0\1\u0109\7\0\2\u0109\66\0"+
+    "\1\u010a\40\0\1\u010b\21\0\16\43\2\0\3\43\1\0"+
+    "\6\43\2\0\1\43\3\0\13\43\1\u010c\32\0\6\43"+
+    "\1\u010d\7\43\2\0\3\43\1\0\6\43\2\0\1\43"+
+    "\3\0\14\43\32\0\16\43\2\0\3\43\1\0\4\43"+
+    "\1\u010e\1\43\2\0\1\43\3\0\14\43\32\0\16\43"+
     "\2\0\3\43\1\0\4\43\1\u010f\1\43\2\0\1\43"+
-    "\24\0\14\43\11\0\16\43\2\0\3\43\1\0\4\43"+
-    "\1\u0110\1\43\2\0\1\43\24\0\14\43\11\0\16\43"+
-    "\2\0\3\43\1\0\6\43\2\0\1\u0111\24\0\1\43"+
-    "\1\u0112\6\43\1\u0113\3\43\11\0\10\43\1\u0114\5\43"+
-    "\2\0\3\43\1\0\3\43\1\u0115\2\43\2\0\1\43"+
-    "\24\0\14\43\11\0\14\43\1\u0116\1\43\2\0\3\43"+
-    "\1\0\6\43\2\0\1\43\24\0\14\43\11\0\16\43"+
-    "\2\0\3\43\1\0\6\43\2\0\1\43\24\0\6\43"+
-    "\1\u0117\5\43\11\0\16\43\2\0\3\43\1\0\4\43"+
-    "\1\u0118\1\43\2\0\1\43\24\0\14\43\1\273\2\0"+
-    "\1\273\1\274\31\273\1\0\4\273\1\u0119\150\273\43\0"+
-    "\1\u011a\42\0\1\276\2\0\1\276\1\277\37\276\1\u011b"+
-    "\147\276\44\0\1\u011c\113\0\1\u011d\10\0\1\u011e\104\0"+
-    "\1\u011f\75\0\1\u0120\105\0\1\u0121\7\0\1\u0122\34\0"+
-    "\10\43\1\u0123\5\43\2\0\3\43\1\0\6\43\2\0"+
-    "\1\43\24\0\6\43\1\u0124\5\43\11\0\16\43\2\0"+
-    "\3\43\1\0\5\43\1\u0125\2\0\1\43\24\0\14\43"+
+    "\3\0\14\43\32\0\16\43\2\0\3\43\1\0\6\43"+
+    "\2\0\1\u0110\3\0\1\43\1\u0111\6\43\1\u0112\3\43"+
+    "\32\0\10\43\1\u0113\5\43\2\0\3\43\1\0\3\43"+
+    "\1\u0114\2\43\2\0\1\43\3\0\14\43\32\0\14\43"+
+    "\1\u0115\1\43\2\0\3\43\1\0\6\43\2\0\1\43"+
+    "\3\0\14\43\32\0\16\43\2\0\3\43\1\0\6\43"+
+    "\2\0\1\43\3\0\6\43\1\u0116\5\43\32\0\16\43"+
+    "\2\0\3\43\1\0\4\43\1\u0117\1\43\2\0\1\43"+
+    "\3\0\14\43\21\0\1\272\2\0\1\272\1\273\31\272"+
+    "\1\0\4\272\1\u0118\150\272\43\0\1\u0119\42\0\1\275"+
+    "\2\0\1\275\1\276\37\275\1\u011a\147\275\44\0\1\u011b"+
+    "\52\0\10\43\1\u011c\5\43\2\0\3\43\1\0\6\43"+
+    "\2\0\1\43\3\0\6\43\1\u011d\5\43\32\0\16\43"+
+    "\2\0\3\43\1\0\5\43\1\u011e\2\0\1\43\3\0"+
+    "\14\43\32\0\16\43\2\0\3\43\1\0\6\43\2\0"+
+    "\1\43\3\0\2\43\1\u011f\11\43\32\0\16\43\2\0"+
+    "\3\43\1\0\6\43\2\0\1\43\3\0\4\43\1\u0120"+
+    "\7\43\32\0\16\43\2\0\3\43\1\0\6\43\2\0"+
+    "\1\43\3\0\4\43\1\u0121\7\43\32\0\16\43\2\0"+
+    "\3\43\1\0\6\43\2\0\1\43\3\0\1\43\1\u0122"+
+    "\12\43\32\0\16\43\2\0\3\43\1\0\4\43\1\u0123"+
+    "\1\43\2\0\1\43\3\0\4\43\1\u0124\7\43\32\0"+
+    "\16\43\2\0\3\43\1\0\2\43\1\u0125\3\43\2\0"+
+    "\1\43\3\0\14\43\32\0\16\43\2\0\3\43\1\0"+
+    "\6\43\2\0\1\43\3\0\1\43\1\u0126\12\43\32\0"+
+    "\16\43\2\0\3\43\1\0\3\43\1\u0127\2\43\2\0"+
+    "\1\43\3\0\1\43\1\u0128\12\43\32\0\16\43\2\0"+
+    "\3\43\1\0\6\43\2\0\1\43\3\0\1\u0129\13\43"+
+    "\32\0\16\43\2\0\3\43\1\0\2\43\1\u012a\3\43"+
+    "\2\0\1\43\3\0\14\43\32\0\16\43\2\0\3\43"+
+    "\1\0\6\43\2\0\1\43\3\0\6\43\1\u012b\5\43"+
+    "\32\0\10\43\1\u012c\5\43\2\0\3\43\1\0\6\43"+
+    "\2\0\1\43\3\0\14\43\32\0\6\43\1\u012d\1\43"+
+    "\1\u012e\5\43\2\0\3\43\1\0\6\43\2\0\1\43"+
+    "\3\0\14\43\32\0\10\43\1\u012f\5\43\2\0\3\43"+
+    "\1\0\6\43\2\0\1\43\3\0\14\43\107\0\1\u0130"+
+    "\10\0\1\u0131\104\0\1\u0132\75\0\1\u0133\105\0\1\u0134"+
+    "\7\0\1\u0135\10\0\2\124\103\0\4\130\1\0\31\130"+
+    "\1\0\4\130\1\u0136\46\130\1\0\31\130\1\0\4\130"+
+    "\1\u0137\42\130\11\0\16\341\2\0\3\341\1\0\1\341"+
+    "\1\0\4\341\2\0\1\341\3\0\14\341\32\0\16\342"+
+    "\2\0\3\342\1\0\1\342\1\0\4\342\2\0\1\342"+
+    "\3\0\14\342\22\0\2\137\104\0\2\141\104\0\2\152"+
+    "\105\0\1\162\103\0\1\347\2\0\1\347\1\351\1\u0138"+
+    "\30\347\1\353\47\347\1\350\2\0\1\350\1\u0139\1\0"+
+    "\30\350\1\150\47\350\1\347\1\u013a\2\347\1\351\1\u013b"+
+    "\30\347\1\u013c\47\347\1\u013d\2\365\1\u013d\1\u013e\1\365"+
+    "\1\u013f\27\u013d\1\365\47\u013d\5\0\1\u0138\100\0\106\165"+
+    "\1\0\2\166\103\0\1\171\1\0\2\171\1\172\1\173"+
+    "\30\171\1\174\47\171\11\0\16\361\2\0\3\361\1\0"+
+    "\1\361\1\0\4\361\2\0\1\361\3\0\14\361\21\0"+
+    "\4\207\1\0\31\207\1\0\4\207\1\0\42\207\43\0"+
+    "\1\u0140\42\0\6\365\1\u0141\77\365\5\u0142\1\u0143\1\366"+
+    "\77\u0142\12\0\1\371\2\u0144\2\226\4\0\2\231\4\0"+
+    "\1\371\66\0\1\371\16\0\1\371\66\0\1\373\2\u0144"+
+    "\2\226\4\0\2\231\2\232\2\0\1\373\65\0\16\43"+
+    "\2\0\3\43\1\0\6\43\2\0\1\43\3\0\1\43"+
+    "\1\u0145\12\43\32\0\16\43\2\0\3\43\1\0\6\43"+
+    "\2\0\1\43\3\0\1\43\1\u0146\12\43\32\0\16\43"+
+    "\2\0\3\43\1\0\6\43\2\0\1\43\3\0\4\43"+
+    "\1\u0147\7\43\32\0\2\43\1\u0148\13\43\2\0\3\43"+
+    "\1\0\6\43\2\0\1\43\3\0\14\43\32\0\14\43"+
+    "\1\u0149\1\43\2\0\3\43\1\0\6\43\2\0\1\43"+
+    "\3\0\14\43\32\0\16\43\2\0\3\43\1\0\4\43"+
+    "\1\u014a\1\43\2\0\1\43\3\0\14\43\32\0\6\43"+
+    "\1\u014b\7\43\2\0\3\43\1\0\6\43\2\0\1\43"+
+    "\3\0\6\43\1\u014c\5\43\32\0\16\43\2\0\3\43"+
+    "\1\0\6\43\2\0\1\43\3\0\1\43\1\u014d\12\43"+
+    "\32\0\16\43\2\0\3\43\1\0\5\43\1\u014e\2\0"+
+    "\1\43\3\0\14\43\32\0\14\43\1\u014f\1\43\2\0"+
+    "\3\43\1\0\6\43\2\0\1\43\3\0\14\43\32\0"+
+    "\14\43\1\u0150\1\43\2\0\3\43\1\0\6\43\2\0"+
+    "\1\43\3\0\14\43\32\0\16\43\2\0\3\43\1\0"+
+    "\6\43\2\0\1\43\3\0\5\43\1\u0151\6\43\32\0"+
+    "\2\u0109\2\225\2\u0109\2\227\2\230\2\u0109\2\u0152\2\0"+
+    "\1\u0109\2\0\1\233\5\0\1\u0109\7\0\2\u0109\43\0"+
+    "\6\43\1\u0153\7\43\2\0\3\43\1\0\6\43\2\0"+
+    "\1\43\3\0\14\43\32\0\10\43\1\u0154\5\43\2\0"+
+    "\3\43\1\0\6\43\2\0\1\43\3\0\14\43\32\0"+
+    "\16\43\2\0\3\43\1\0\6\43\2\0\1\u0155\3\0"+
+    "\14\43\32\0\14\43\1\u0156\1\43\2\0\3\43\1\0"+
+    "\6\43\2\0\1\43\3\0\14\43\32\0\16\43\2\0"+
+    "\3\43\1\0\2\43\1\u0157\3\43\2\0\1\43\3\0"+
+    "\14\43\32\0\16\43\2\0\3\43\1\0\6\43\2\0"+
+    "\1\43\3\0\4\43\1\u0158\7\43\32\0\16\43\2\0"+
+    "\3\43\1\0\6\43\2\0\1\43\3\0\6\43\1\u0159"+
+    "\5\43\32\0\16\43\2\0\3\43\1\0\6\43\2\0"+
+    "\1\43\3\0\1\43\1\u015a\12\43\32\0\6\43\1\u015b"+
+    "\7\43\2\0\3\43\1\0\6\43\2\0\1\43\3\0"+
+    "\14\43\32\0\14\43\1\u015c\1\43\2\0\3\43\1\0"+
+    "\6\43\2\0\1\43\3\0\14\43\21\0\4\u015d\1\u015e"+
+    "\31\u015d\1\0\4\u015d\1\u015f\42\u015d\4\u011b\1\u0160\37\u011b"+
+    "\1\u0161\41\u011b\11\0\16\43\2\0\3\43\1\0\6\43"+
+    "\2\0\1\43\3\0\7\43\1\u0162\4\43\32\0\16\43"+
+    "\2\0\3\43\1\0\4\43\1\u0163\1\43\2\0\1\43"+
+    "\3\0\14\43\32\0\6\43\1\u0164\7\43\2\0\3\43"+
+    "\1\0\6\43\2\0\1\43\3\0\14\43\32\0\16\43"+
+    "\2\0\3\43\1\0\6\43\2\0\1\43\3\0\3\43"+
+    "\1\u0165\10\43\32\0\16\43\2\0\3\43\1\0\4\43"+
+    "\1\u0166\1\43\2\0\1\43\3\0\14\43\32\0\14\43"+
+    "\1\u0167\1\43\2\0\3\43\1\0\6\43\2\0\1\43"+
+    "\3\0\14\43\32\0\16\43\2\0\3\43\1\0\6\43"+
+    "\2\0\1\43\3\0\4\43\1\u0168\7\43\32\0\16\43"+
+    "\2\0\3\43\1\0\6\43\2\0\1\43\3\0\2\43"+
+    "\1\u0169\11\43\32\0\14\43\1\u016a\1\43\2\0\3\43"+
+    "\1\0\6\43\2\0\1\43\3\0\14\43\32\0\16\43"+
+    "\2\0\3\43\1\0\4\43\1\u016b\1\43\2\0\1\43"+
+    "\3\0\14\43\32\0\16\43\2\0\3\43\1\0\3\43"+
+    "\1\u016c\2\43\2\0\1\43\3\0\14\43\32\0\10\43"+
+    "\1\u016d\5\43\2\0\3\43\1\0\6\43\2\0\1\43"+
+    "\3\0\14\43\32\0\16\43\2\0\3\43\1\0\4\43"+
+    "\1\u016e\1\43\2\0\1\43\3\0\14\43\32\0\14\43"+
+    "\1\u016f\1\43\2\0\3\43\1\0\6\43\2\0\1\43"+
+    "\3\0\14\43\32\0\16\43\2\0\3\43\1\0\6\43"+
+    "\2\0\1\43\3\0\2\43\1\u0170\11\43\32\0\16\43"+
+    "\2\0\3\43\1\0\3\43\1\u0171\2\43\2\0\1\43"+
+    "\3\0\14\43\32\0\16\43\2\0\3\43\1\0\4\43"+
+    "\1\u0172\1\43\2\0\1\43\3\0\14\43\32\0\16\43"+
+    "\2\0\3\43\1\0\6\43\2\0\1\43\3\0\1\43"+
+    "\1\u0173\12\43\32\0\12\43\1\u0174\3\43\2\0\3\43"+
+    "\1\0\6\43\2\0\1\43\3\0\14\43\32\0\6\43"+
+    "\1\u0175\7\43\2\0\3\43\1\0\6\43\2\0\1\43"+
+    "\3\0\14\43\107\0\1\u0176\17\0\4\130\1\0\31\130"+
+    "\1\0\4\130\1\u0177\42\130\1\350\1\u0178\2\350\1\u0139"+
+    "\31\350\1\u0179\47\350\1\347\1\0\2\347\1\351\1\u0138"+
+    "\30\347\1\353\47\347\1\u013d\2\365\1\u013d\1\u013e\1\365"+
+    "\1\u017a\27\u013d\1\365\50\u013d\1\u017b\2\u013d\1\u013e\1\u013d"+
+    "\1\u017a\77\u013d\1\u017c\2\u0142\1\u017c\1\u017d\1\u0143\1\u013f"+
+    "\27\u017c\1\u0142\47\u017c\5\365\1\u017e\1\u017f\77\365\6\u0142"+
+    "\1\u0180\77\u0142\11\0\16\43\2\0\3\43\1\0\4\43"+
+    "\1\u0181\1\43\2\0\1\43\3\0\14\43\32\0\6\43"+
+    "\1\u0182\7\43\2\0\3\43\1\0\6\43\2\0\1\43"+
+    "\3\0\14\43\32\0\14\43\1\u0183\1\43\2\0\3\43"+
+    "\1\0\6\43\2\0\1\43\3\0\14\43\32\0\16\43"+
+    "\2\0\3\43\1\0\3\43\1\u0184\2\43\2\0\1\43"+
+    "\3\0\14\43\32\0\16\43\2\0\3\43\1\0\6\43"+
+    "\2\0\1\43\3\0\1\43\1\u0185\12\43\32\0\14\43"+
+    "\1\u0186\1\43\2\0\3\43\1\0\6\43\2\0\1\43"+
+    "\3\0\14\43\32\0\16\43\2\0\3\43\1\0\3\43"+
+    "\1\u0187\2\43\2\0\1\43\3\0\14\43\32\0\16\43"+
+    "\2\0\3\43\1\0\6\43\2\0\1\u0188\3\0\14\43"+
+    "\32\0\6\43\1\u0189\7\43\2\0\3\43\1\0\6\43"+
+    "\2\0\1\43\3\0\14\43\32\0\16\43\2\0\3\43"+
+    "\1\0\2\43\1\u018a\3\43\2\0\1\43\3\0\14\43"+
+    "\32\0\2\u0109\2\225\2\u0109\2\227\2\230\2\u0109\2\u0152"+
+    "\2\372\1\u0109\2\0\1\233\5\0\1\u0109\7\0\2\u0109"+
+    "\43\0\16\43\2\0\3\43\1\0\6\43\2\0\1\43"+
+    "\3\0\7\43\1\u018b\4\43\32\0\16\43\2\0\3\43"+
+    "\1\0\3\43\1\u018c\2\43\2\0\1\43\3\0\14\43"+
+    "\32\0\16\43\2\0\3\43\1\0\6\43\2\0\1\43"+
+    "\3\0\4\43\1\u018d\7\43\32\0\16\43\2\0\3\43"+
+    "\1\0\6\43\2\0\1\43\3\0\13\43\1\u018e\32\0"+
+    "\16\43\2\0\3\43\1\0\6\43\2\0\1\43\3\0"+
+    "\3\43\1\u018f\10\43\32\0\14\43\1\u0190\1\43\2\0"+
+    "\3\43\1\0\6\43\2\0\1\43\3\0\14\43\21\0"+
+    "\4\u015d\1\u015e\31\u015d\1\0\4\u015d\1\u0191\154\u015d\1\0"+
+    "\31\u015d\1\0\4\u015d\1\u0192\42\u015d\4\u011b\1\u0160\37\u011b"+
+    "\1\u0193\105\u011b\1\u0194\41\u011b\11\0\16\43\2\0\3\43"+
+    "\1\0\6\43\2\0\1\43\3\0\1\43\1\u0195\12\43"+
+    "\32\0\14\43\1\u0196\1\43\2\0\3\43\1\0\6\43"+
+    "\2\0\1\43\3\0\14\43\32\0\10\43\1\u0197\5\43"+
+    "\2\0\3\43\1\0\6\43\2\0\1\43\3\0\14\43"+
+    "\32\0\16\43\2\0\3\43\1\0\6\43\2\0\1\43"+
+    "\3\0\1\43\1\u0198\12\43\32\0\16\43\2\0\3\43"+
+    "\1\0\3\43\1\u0199\2\43\2\0\1\43\3\0\14\43"+
+    "\32\0\16\43\2\0\3\43\1\0\3\43\1\u019a\2\43"+
+    "\2\0\1\43\3\0\14\43\32\0\16\43\2\0\3\43"+
+    "\1\0\6\43\2\0\1\43\3\0\4\43\1\u019b\7\43"+
+    "\32\0\16\43\2\0\3\43\1\0\6\43\2\0\1\43"+
+    "\3\0\11\43\1\u019c\2\43\32\0\10\43\1\u019d\5\43"+
+    "\2\0\3\43\1\0\6\43\2\0\1\43\3\0\14\43"+
+    "\32\0\16\43\2\0\3\43\1\0\6\43\2\0\1\43"+
+    "\3\0\2\43\1\u019e\11\43\32\0\10\43\1\u019f\5\43"+
+    "\2\0\3\43\1\0\6\43\2\0\1\43\3\0\14\43"+
+    "\32\0\16\43\2\0\3\43\1\0\3\43\1\u01a0\2\43"+
+    "\2\0\1\43\3\0\14\43\32\0\16\43\2\0\3\43"+
+    "\1\0\6\43\2\0\1\43\3\0\11\43\1\u01a1\2\43"+
+    "\32\0\16\43\2\0\3\43\1\0\4\43\1\u01a2\1\43"+
+    "\2\0\1\43\3\0\14\43\32\0\16\43\2\0\3\43"+
+    "\1\0\6\43\2\0\1\43\3\0\2\43\1\u01a3\11\43"+
+    "\32\0\16\43\2\0\3\43\1\0\4\43\1\u01a4\1\43"+
+    "\2\0\1\43\3\0\14\43\32\0\14\43\1\u01a5\1\43"+
+    "\2\0\3\43\1\0\6\43\2\0\1\43\3\0\14\43"+
+    "\21\0\1\350\1\0\2\350\1\u0139\1\0\30\350\1\150"+
+    "\47\350\1\u013d\2\365\1\u013d\1\u013e\1\u017e\1\u01a6\27\u013d"+
+    "\1\365\50\u013d\1\365\2\u013d\1\u013e\1\365\1\u017a\27\u013d"+
+    "\1\365\47\u013d\1\u017c\2\u0142\1\u017c\1\u017d\1\u0142\1\u01a7"+
+    "\27\u017c\1\u0142\50\u017c\1\u01a8\2\u017c\1\u017d\1\u017c\1\u01a7"+
+    "\77\u017c\5\u0142\1\u0143\1\u01a9\77\u0142\11\0\6\43\1\u01aa"+
+    "\7\43\2\0\3\43\1\0\6\43\2\0\1\43\3\0"+
+    "\14\43\32\0\4\43\1\u01ab\11\43\2\0\3\43\1\0"+
+    "\6\43\2\0\1\43\3\0\14\43\32\0\16\43\2\0"+
+    "\3\43\1\0\2\43\1\u01ac\3\43\2\0\1\43\3\0"+
+    "\14\43\32\0\16\43\2\0\3\43\1\0\6\43\2\0"+
+    "\1\43\3\0\5\43\1\u01ad\6\43\32\0\16\43\2\0"+
+    "\3\43\1\0\4\43\1\u01ae\1\43\2\0\1\43\3\0"+
+    "\14\43\32\0\6\43\1\u01af\7\43\2\0\3\43\1\0"+
+    "\6\43\2\0\1\43\3\0\14\43\32\0\14\43\1\u01b0"+
+    "\1\43\2\0\3\43\1\0\6\43\2\0\1\43\3\0"+
+    "\14\43\32\0\12\43\1\u01b1\3\43\2\0\3\43\1\0"+
+    "\6\43\2\0\1\43\3\0\14\43\32\0\14\43\1\u01b2"+
+    "\1\43\2\0\3\43\1\0\6\43\2\0\1\43\3\0"+
+    "\14\43\32\0\16\43\2\0\3\43\1\0\2\43\1\u01b3"+
+    "\3\43\2\0\1\43\3\0\14\43\32\0\10\43\1\u01b4"+
+    "\5\43\2\0\3\43\1\0\6\43\2\0\1\43\3\0"+
+    "\14\43\32\0\16\43\2\0\3\43\1\0\6\43\2\0"+
+    "\1\43\3\0\4\43\1\u01b5\7\43\32\0\16\43\2\0"+
+    "\3\43\1\0\6\43\2\0\1\43\3\0\1\43\1\u01b6"+
+    "\12\43\21\0\4\u015d\1\0\31\u015d\1\0\4\u015d\1\u01b7"+
+    "\46\u015d\1\0\31\u015d\1\0\4\u015d\1\0\42\u015d\4\u011b"+
+    "\1\u0160\37\u011b\1\u01b8\105\u011b\1\u011a\41\u011b\11\0\16\43"+
+    "\2\0\3\43\1\0\4\43\1\u01b9\1\43\2\0\1\43"+
+    "\3\0\14\43\32\0\16\43\2\0\3\43\1\0\6\43"+
+    "\2\0\1\43\3\0\2\43\1\u01ba\11\43\32\0\16\43"+
+    "\2\0\3\43\1\0\6\43\2\0\1\43\3\0\2\43"+
+    "\1\u01bb\11\43\32\0\2\43\1\u01bc\13\43\2\0\3\43"+
+    "\1\0\6\43\2\0\1\43\3\0\14\43\32\0\16\43"+
+    "\2\0\3\43\1\0\6\43\2\0\1\43\3\0\1\43"+
+    "\1\u01bd\12\43\32\0\16\43\2\0\3\43\1\0\4\43"+
+    "\1\u01be\1\43\2\0\1\43\3\0\14\43\32\0\16\43"+
+    "\2\0\3\43\1\0\2\43\1\u01bf\3\43\2\0\1\43"+
+    "\3\0\14\43\32\0\16\43\2\0\3\43\1\0\4\43"+
+    "\1\u01c0\1\43\2\0\1\43\3\0\14\43\32\0\16\43"+
+    "\2\0\3\43\1\0\6\43\2\0\1\43\3\0\2\43"+
+    "\1\u01c1\11\43\32\0\16\43\2\0\3\43\1\0\3\43"+
+    "\1\u01c2\2\43\2\0\1\43\3\0\14\43\32\0\16\43"+
+    "\2\0\3\43\1\0\6\43\2\0\1\43\3\0\11\43"+
+    "\1\u01c3\2\43\32\0\10\43\1\u01c4\5\43\2\0\3\43"+
+    "\1\0\6\43\2\0\1\43\3\0\14\43\21\0\1\u017c"+
+    "\2\u0142\1\u017c\1\u017d\1\u0143\1\u01c5\27\u017c\1\u0142\50\u017c"+
+    "\1\u0142\2\u017c\1\u017d\1\u0142\1\u01a7\27\u017c\1\u0142\47\u017c"+
     "\11\0\16\43\2\0\3\43\1\0\6\43\2\0\1\43"+
-    "\24\0\2\43\1\u0126\11\43\11\0\16\43\2\0\3\43"+
-    "\1\0\6\43\2\0\1\43\24\0\4\43\1\u0127\7\43"+
-    "\11\0\16\43\2\0\3\43\1\0\6\43\2\0\1\43"+
-    "\24\0\4\43\1\u0128\7\43\11\0\16\43\2\0\3\43"+
-    "\1\0\6\43\2\0\1\43\24\0\1\43\1\u0129\12\43"+
-    "\11\0\16\43\2\0\3\43\1\0\4\43\1\u012a\1\43"+
-    "\2\0\1\43\24\0\4\43\1\u012b\7\43\11\0\16\43"+
-    "\2\0\3\43\1\0\2\43\1\u012c\3\43\2\0\1\43"+
-    "\24\0\14\43\11\0\16\43\2\0\3\43\1\0\6\43"+
-    "\2\0\1\43\24\0\1\43\1\u012d\12\43\11\0\16\43"+
-    "\2\0\3\43\1\0\3\43\1\u012e\2\43\2\0\1\43"+
-    "\24\0\1\43\1\u012f\12\43\11\0\16\43\2\0\3\43"+
-    "\1\0\6\43\2\0\1\43\24\0\1\u0130\13\43\11\0"+
-    "\16\43\2\0\3\43\1\0\2\43\1\u0131\3\43\2\0"+
-    "\1\43\24\0\14\43\11\0\16\43\2\0\3\43\1\0"+
-    "\6\43\2\0\1\43\24\0\6\43\1\u0132\5\43\11\0"+
-    "\10\43\1\u0133\5\43\2\0\3\43\1\0\6\43\2\0"+
-    "\1\43\24\0\14\43\11\0\6\43\1\u0134\1\43\1\u0135"+
-    "\5\43\2\0\3\43\1\0\6\43\2\0\1\43\24\0"+
-    "\14\43\11\0\10\43\1\u0136\5\43\2\0\3\43\1\0"+
-    "\6\43\2\0\1\43\24\0\14\43\1\0\2\125\103\0"+
-    "\4\131\1\0\31\131\1\0\4\131\1\u0137\46\131\1\0"+
-    "\31\131\1\0\4\131\1\u0138\42\131\11\0\16\342\2\0"+
-    "\3\342\1\0\1\342\1\0\4\342\2\0\1\342\24\0"+
-    "\14\342\11\0\16\343\2\0\3\343\1\0\1\343\1\0"+
-    "\4\343\2\0\1\343\24\0\14\343\1\0\2\140\104\0"+
-    "\2\142\104\0\2\153\105\0\1\163\103\0\1\350\2\0"+
-    "\1\350\1\352\1\u0139\30\350\1\354\47\350\1\351\2\0"+
-    "\1\351\1\u013a\1\0\30\351\1\151\47\351\1\350\1\u013b"+
-    "\2\350\1\352\1\u013c\30\350\1\u013d\47\350\1\u013e\2\366"+
-    "\1\u013e\1\u013f\1\366\1\u0140\27\u013e\1\366\47\u013e\5\0"+
-    "\1\u0139\100\0\106\166\1\0\2\167\103\0\1\172\1\0"+
-    "\2\172\1\173\1\174\30\172\1\175\47\172\11\0\16\362"+
-    "\2\0\3\362\1\0\1\362\1\0\4\362\2\0\1\362"+
-    "\24\0\14\362\4\210\1\0\31\210\1\0\4\210\1\0"+
-    "\42\210\43\0\1\u0141\42\0\6\366\1\u0142\77\366\5\u0143"+
-    "\1\u0144\1\367\77\u0143\12\0\1\372\2\u0145\2\227\4\0"+
-    "\2\232\4\0\1\372\66\0\1\372\16\0\1\372\66\0"+
-    "\1\374\2\u0145\2\227\4\0\2\232\2\233\2\0\1\374"+
-    "\65\0\16\43\2\0\3\43\1\0\6\43\2\0\1\43"+
-    "\24\0\1\43\1\u0146\12\43\11\0\16\43\2\0\3\43"+
-    "\1\0\6\43\2\0\1\43\24\0\1\43\1\u0147\12\43"+
-    "\11\0\16\43\2\0\3\43\1\0\6\43\2\0\1\43"+
-    "\24\0\4\43\1\u0148\7\43\11\0\2\43\1\u0149\13\43"+
-    "\2\0\3\43\1\0\6\43\2\0\1\43\24\0\14\43"+
-    "\11\0\14\43\1\u014a\1\43\2\0\3\43\1\0\6\43"+
-    "\2\0\1\43\24\0\14\43\11\0\16\43\2\0\3\43"+
-    "\1\0\4\43\1\u014b\1\43\2\0\1\43\24\0\14\43"+
-    "\11\0\6\43\1\u014c\7\43\2\0\3\43\1\0\6\43"+
-    "\2\0\1\43\24\0\6\43\1\u014d\5\43\11\0\16\43"+
-    "\2\0\3\43\1\0\6\43\2\0\1\43\24\0\1\43"+
-    "\1\u014e\12\43\11\0\16\43\2\0\3\43\1\0\5\43"+
-    "\1\u014f\2\0\1\43\24\0\14\43\11\0\14\43\1\u0150"+
-    "\1\43\2\0\3\43\1\0\6\43\2\0\1\43\24\0"+
-    "\14\43\11\0\14\43\1\u0151\1\43\2\0\3\43\1\0"+
-    "\6\43\2\0\1\43\24\0\14\43\11\0\16\43\2\0"+
-    "\3\43\1\0\6\43\2\0\1\43\24\0\5\43\1\u0152"+
-    "\6\43\11\0\2\u010a\2\226\2\u010a\2\230\2\231\2\u010a"+
-    "\2\u0153\2\0\1\u010a\2\0\1\234\5\0\1\u010a\30\0"+
-    "\2\u010a\22\0\6\43\1\u0154\7\43\2\0\3\43\1\0"+
-    "\6\43\2\0\1\43\24\0\14\43\11\0\10\43\1\u0155"+
-    "\5\43\2\0\3\43\1\0\6\43\2\0\1\43\24\0"+
-    "\14\43\11\0\16\43\2\0\3\43\1\0\6\43\2\0"+
-    "\1\u0156\24\0\14\43\11\0\14\43\1\u0157\1\43\2\0"+
-    "\3\43\1\0\6\43\2\0\1\43\24\0\14\43\11\0"+
-    "\16\43\2\0\3\43\1\0\2\43\1\u0158\3\43\2\0"+
-    "\1\43\24\0\14\43\11\0\16\43\2\0\3\43\1\0"+
-    "\6\43\2\0\1\43\24\0\4\43\1\u0159\7\43\11\0"+
-    "\16\43\2\0\3\43\1\0\6\43\2\0\1\43\24\0"+
-    "\6\43\1\u015a\5\43\11\0\16\43\2\0\3\43\1\0"+
-    "\6\43\2\0\1\43\24\0\1\43\1\u015b\12\43\11\0"+
-    "\6\43\1\u015c\7\43\2\0\3\43\1\0\6\43\2\0"+
-    "\1\43\24\0\14\43\11\0\14\43\1\u015d\1\43\2\0"+
-    "\3\43\1\0\6\43\2\0\1\43\24\0\14\43\4\u015e"+
-    "\1\u015f\31\u015e\1\0\4\u015e\1\u0160\42\u015e\4\u011c\1\u0161"+
-    "\37\u011c\1\u0162\41\u011c\52\0\1\u0163\44\0\16\43\2\0"+
-    "\3\43\1\0\6\43\2\0\1\43\24\0\7\43\1\u0164"+
-    "\4\43\11\0\16\43\2\0\3\43\1\0\4\43\1\u0165"+
-    "\1\43\2\0\1\43\24\0\14\43\11\0\6\43\1\u0166"+
-    "\7\43\2\0\3\43\1\0\6\43\2\0\1\43\24\0"+
-    "\14\43\11\0\16\43\2\0\3\43\1\0\6\43\2\0"+
-    "\1\43\24\0\3\43\1\u0167\10\43\11\0\16\43\2\0"+
-    "\3\43\1\0\4\43\1\u0168\1\43\2\0\1\43\24\0"+
-    "\14\43\11\0\14\43\1\u0169\1\43\2\0\3\43\1\0"+
-    "\6\43\2\0\1\43\24\0\14\43\11\0\16\43\2\0"+
-    "\3\43\1\0\6\43\2\0\1\43\24\0\4\43\1\u016a"+
-    "\7\43\11\0\16\43\2\0\3\43\1\0\6\43\2\0"+
-    "\1\43\24\0\2\43\1\u016b\11\43\11\0\14\43\1\u016c"+
-    "\1\43\2\0\3\43\1\0\6\43\2\0\1\43\24\0"+
-    "\14\43\11\0\16\43\2\0\3\43\1\0\4\43\1\u016d"+
-    "\1\43\2\0\1\43\24\0\14\43\11\0\16\43\2\0"+
-    "\3\43\1\0\3\43\1\u016e\2\43\2\0\1\43\24\0"+
-    "\14\43\11\0\10\43\1\u016f\5\43\2\0\3\43\1\0"+
-    "\6\43\2\0\1\43\24\0\14\43\11\0\16\43\2\0"+
-    "\3\43\1\0\4\43\1\u0170\1\43\2\0\1\43\24\0"+
-    "\14\43\11\0\14\43\1\u0171\1\43\2\0\3\43\1\0"+
-    "\6\43\2\0\1\43\24\0\14\43\11\0\16\43\2\0"+
-    "\3\43\1\0\6\43\2\0\1\43\24\0\2\43\1\u0172"+
-    "\11\43\11\0\16\43\2\0\3\43\1\0\3\43\1\u0173"+
-    "\2\43\2\0\1\43\24\0\14\43\11\0\16\43\2\0"+
-    "\3\43\1\0\4\43\1\u0174\1\43\2\0\1\43\24\0"+
-    "\14\43\11\0\16\43\2\0\3\43\1\0\6\43\2\0"+
-    "\1\43\24\0\1\43\1\u0175\12\43\11\0\12\43\1\u0176"+
-    "\3\43\2\0\3\43\1\0\6\43\2\0\1\43\24\0"+
-    "\14\43\11\0\6\43\1\u0177\7\43\2\0\3\43\1\0"+
-    "\6\43\2\0\1\43\24\0\14\43\4\131\1\0\31\131"+
-    "\1\0\4\131\1\u0178\42\131\1\351\1\u0179\2\351\1\u013a"+
-    "\31\351\1\u017a\47\351\1\350\1\0\2\350\1\352\1\u0139"+
-    "\30\350\1\354\47\350\1\u013e\2\366\1\u013e\1\u013f\1\366"+
-    "\1\u017b\27\u013e\1\366\50\u013e\1\u017c\2\u013e\1\u013f\1\u013e"+
-    "\1\u017b\77\u013e\1\u017d\2\u0143\1\u017d\1\u017e\1\u0144\1\u0140"+
-    "\27\u017d\1\u0143\47\u017d\5\366\1\u017f\1\u0180\77\366\6\u0143"+
-    "\1\u0181\77\u0143\11\0\16\43\2\0\3\43\1\0\4\43"+
-    "\1\u0182\1\43\2\0\1\43\24\0\14\43\11\0\6\43"+
-    "\1\u0183\7\43\2\0\3\43\1\0\6\43\2\0\1\43"+
-    "\24\0\14\43\11\0\14\43\1\u0184\1\43\2\0\3\43"+
-    "\1\0\6\43\2\0\1\43\24\0\14\43\11\0\16\43"+
-    "\2\0\3\43\1\0\3\43\1\u0185\2\43\2\0\1\43"+
-    "\24\0\14\43\11\0\16\43\2\0\3\43\1\0\6\43"+
-    "\2\0\1\43\24\0\1\43\1\u0186\12\43\11\0\14\43"+
-    "\1\u0187\1\43\2\0\3\43\1\0\6\43\2\0\1\43"+
-    "\24\0\14\43\11\0\16\43\2\0\3\43\1\0\3\43"+
-    "\1\u0188\2\43\2\0\1\43\24\0\14\43\11\0\16\43"+
-    "\2\0\3\43\1\0\6\43\2\0\1\u0189\24\0\14\43"+
-    "\11\0\6\43\1\u018a\7\43\2\0\3\43\1\0\6\43"+
-    "\2\0\1\43\24\0\14\43\11\0\16\43\2\0\3\43"+
-    "\1\0\2\43\1\u018b\3\43\2\0\1\43\24\0\14\43"+
-    "\11\0\2\u010a\2\226\2\u010a\2\230\2\231\2\u010a\2\u0153"+
-    "\2\373\1\u010a\2\0\1\234\5\0\1\u010a\30\0\2\u010a"+
-    "\22\0\16\43\2\0\3\43\1\0\6\43\2\0\1\43"+
-    "\24\0\7\43\1\u018c\4\43\11\0\16\43\2\0\3\43"+
-    "\1\0\3\43\1\u018d\2\43\2\0\1\43\24\0\14\43"+
-    "\11\0\16\43\2\0\3\43\1\0\6\43\2\0\1\43"+
-    "\24\0\4\43\1\u018e\7\43\11\0\16\43\2\0\3\43"+
-    "\1\0\6\43\2\0\1\43\24\0\13\43\1\u018f\11\0"+
-    "\16\43\2\0\3\43\1\0\6\43\2\0\1\43\24\0"+
-    "\3\43\1\u0190\10\43\11\0\14\43\1\u0191\1\43\2\0"+
-    "\3\43\1\0\6\43\2\0\1\43\24\0\14\43\4\u015e"+
-    "\1\u015f\31\u015e\1\0\4\u015e\1\u0192\154\u015e\1\0\31\u015e"+
-    "\1\0\4\u015e\1\u0193\42\u015e\4\u011c\1\u0161\37\u011c\1\u0194"+
-    "\105\u011c\1\u0195\41\u011c\11\0\16\43\2\0\3\43\1\0"+
-    "\6\43\2\0\1\43\24\0\1\43\1\u0196\12\43\11\0"+
-    "\14\43\1\u0197\1\43\2\0\3\43\1\0\6\43\2\0"+
-    "\1\43\24\0\14\43\11\0\10\43\1\u0198\5\43\2\0"+
-    "\3\43\1\0\6\43\2\0\1\43\24\0\14\43\11\0"+
-    "\16\43\2\0\3\43\1\0\6\43\2\0\1\43\24\0"+
-    "\1\43\1\u0199\12\43\11\0\16\43\2\0\3\43\1\0"+
-    "\3\43\1\u019a\2\43\2\0\1\43\24\0\14\43\11\0"+
-    "\16\43\2\0\3\43\1\0\3\43\1\u019b\2\43\2\0"+
-    "\1\43\24\0\14\43\11\0\16\43\2\0\3\43\1\0"+
-    "\6\43\2\0\1\43\24\0\4\43\1\u019c\7\43\11\0"+
-    "\16\43\2\0\3\43\1\0\6\43\2\0\1\43\24\0"+
-    "\11\43\1\u019d\2\43\11\0\10\43\1\u019e\5\43\2\0"+
-    "\3\43\1\0\6\43\2\0\1\43\24\0\14\43\11\0"+
-    "\16\43\2\0\3\43\1\0\6\43\2\0\1\43\24\0"+
-    "\2\43\1\u019f\11\43\11\0\10\43\1\u01a0\5\43\2\0"+
-    "\3\43\1\0\6\43\2\0\1\43\24\0\14\43\11\0"+
-    "\16\43\2\0\3\43\1\0\3\43\1\u01a1\2\43\2\0"+
-    "\1\43\24\0\14\43\11\0\16\43\2\0\3\43\1\0"+
-    "\6\43\2\0\1\43\24\0\11\43\1\u01a2\2\43\11\0"+
-    "\16\43\2\0\3\43\1\0\4\43\1\u01a3\1\43\2\0"+
-    "\1\43\24\0\14\43\11\0\16\43\2\0\3\43\1\0"+
-    "\6\43\2\0\1\43\24\0\2\43\1\u01a4\11\43\11\0"+
-    "\16\43\2\0\3\43\1\0\4\43\1\u01a5\1\43\2\0"+
-    "\1\43\24\0\14\43\11\0\14\43\1\u01a6\1\43\2\0"+
-    "\3\43\1\0\6\43\2\0\1\43\24\0\14\43\1\351"+
-    "\1\0\2\351\1\u013a\1\0\30\351\1\151\47\351\1\u013e"+
-    "\2\366\1\u013e\1\u013f\1\u017f\1\u01a7\27\u013e\1\366\50\u013e"+
-    "\1\366\2\u013e\1\u013f\1\366\1\u017b\27\u013e\1\366\47\u013e"+
-    "\1\u017d\2\u0143\1\u017d\1\u017e\1\u0143\1\u01a8\27\u017d\1\u0143"+
-    "\50\u017d\1\u01a9\2\u017d\1\u017e\1\u017d\1\u01a8\77\u017d\5\u0143"+
-    "\1\u0144\1\u01aa\77\u0143\11\0\6\43\1\u01ab\7\43\2\0"+
-    "\3\43\1\0\6\43\2\0\1\43\24\0\14\43\11\0"+
-    "\4\43\1\u01ac\11\43\2\0\3\43\1\0\6\43\2\0"+
-    "\1\43\24\0\14\43\11\0\16\43\2\0\3\43\1\0"+
-    "\2\43\1\u01ad\3\43\2\0\1\43\24\0\14\43\11\0"+
-    "\16\43\2\0\3\43\1\0\6\43\2\0\1\43\24\0"+
-    "\5\43\1\u01ae\6\43\11\0\16\43\2\0\3\43\1\0"+
-    "\4\43\1\u01af\1\43\2\0\1\43\24\0\14\43\11\0"+
-    "\6\43\1\u01b0\7\43\2\0\3\43\1\0\6\43\2\0"+
-    "\1\43\24\0\14\43\11\0\14\43\1\u01b1\1\43\2\0"+
-    "\3\43\1\0\6\43\2\0\1\43\24\0\14\43\11\0"+
-    "\12\43\1\u01b2\3\43\2\0\3\43\1\0\6\43\2\0"+
-    "\1\43\24\0\14\43\11\0\14\43\1\u01b3\1\43\2\0"+
-    "\3\43\1\0\6\43\2\0\1\43\24\0\14\43\11\0"+
-    "\16\43\2\0\3\43\1\0\2\43\1\u01b4\3\43\2\0"+
-    "\1\43\24\0\14\43\11\0\10\43\1\u01b5\5\43\2\0"+
-    "\3\43\1\0\6\43\2\0\1\43\24\0\14\43\11\0"+
-    "\16\43\2\0\3\43\1\0\6\43\2\0\1\43\24\0"+
-    "\4\43\1\u01b6\7\43\11\0\16\43\2\0\3\43\1\0"+
-    "\6\43\2\0\1\43\24\0\1\43\1\u01b7\12\43\4\u015e"+
-    "\1\0\31\u015e\1\0\4\u015e\1\u01b8\46\u015e\1\0\31\u015e"+
-    "\1\0\4\u015e\1\0\42\u015e\4\u011c\1\u0161\37\u011c\1\u01b9"+
-    "\105\u011c\1\u011b\41\u011c\11\0\16\43\2\0\3\43\1\0"+
-    "\4\43\1\u01ba\1\43\2\0\1\43\24\0\14\43\11\0"+
-    "\16\43\2\0\3\43\1\0\6\43\2\0\1\43\24\0"+
-    "\2\43\1\u01bb\11\43\11\0\16\43\2\0\3\43\1\0"+
-    "\6\43\2\0\1\43\24\0\2\43\1\u01bc\11\43\11\0"+
-    "\2\43\1\u01bd\13\43\2\0\3\43\1\0\6\43\2\0"+
-    "\1\43\24\0\14\43\11\0\16\43\2\0\3\43\1\0"+
-    "\6\43\2\0\1\43\24\0\1\43\1\u01be\12\43\11\0"+
-    "\16\43\2\0\3\43\1\0\4\43\1\u01bf\1\43\2\0"+
-    "\1\43\24\0\14\43\11\0\16\43\2\0\3\43\1\0"+
-    "\2\43\1\u01c0\3\43\2\0\1\43\24\0\14\43\11\0"+
-    "\16\43\2\0\3\43\1\0\4\43\1\u01c1\1\43\2\0"+
-    "\1\43\24\0\14\43\11\0\16\43\2\0\3\43\1\0"+
-    "\6\43\2\0\1\43\24\0\2\43\1\u01c2\11\43\11\0"+
-    "\16\43\2\0\3\43\1\0\3\43\1\u01c3\2\43\2\0"+
-    "\1\43\24\0\14\43\11\0\16\43\2\0\3\43\1\0"+
-    "\6\43\2\0\1\43\24\0\11\43\1\u01c4\2\43\11\0"+
-    "\10\43\1\u01c5\5\43\2\0\3\43\1\0\6\43\2\0"+
-    "\1\43\24\0\14\43\1\u017d\2\u0143\1\u017d\1\u017e\1\u0144"+
-    "\1\u01c6\27\u017d\1\u0143\50\u017d\1\u0143\2\u017d\1\u017e\1\u0143"+
-    "\1\u01a8\27\u017d\1\u0143\47\u017d\11\0\16\43\2\0\3\43"+
-    "\1\0\6\43\2\0\1\43\24\0\10\43\1\u01c7\3\43"+
-    "\11\0\16\43\2\0\3\43\1\0\6\43\2\0\1\43"+
-    "\24\0\1\43\1\u01c8\12\43\11\0\16\43\2\0\3\43"+
-    "\1\0\6\43\2\0\1\43\24\0\2\43\1\u01c9\11\43"+
-    "\11\0\14\43\1\u01ca\1\43\2\0\3\43\1\0\6\43"+
-    "\2\0\1\43\24\0\14\43\11\0\16\43\2\0\3\43"+
-    "\1\0\4\43\1\u01cb\1\43\2\0\1\43\24\0\14\43"+
-    "\11\0\16\43\2\0\3\43\1\0\6\43\2\0\1\43"+
-    "\24\0\4\43\1\u01cc\7\43\11\0\14\43\1\u01cd\1\43"+
-    "\2\0\3\43\1\0\6\43\2\0\1\43\24\0\14\43"+
-    "\11\0\16\43\2\0\3\43\1\0\2\43\1\u01ce\3\43"+
-    "\2\0\1\43\24\0\14\43\4\u015e\1\0\31\u015e\1\0"+
-    "\4\u015e\1\u0119\42\u015e\44\u011c\1\u01cf\41\u011c\11\0\14\43"+
-    "\1\u01d0\1\43\2\0\3\43\1\0\6\43\2\0\1\43"+
-    "\24\0\14\43\11\0\16\43\2\0\3\43\1\0\4\43"+
-    "\1\u01d1\1\43\2\0\1\43\24\0\14\43\11\0\14\43"+
-    "\1\u01d2\1\43\2\0\3\43\1\0\6\43\2\0\1\43"+
-    "\24\0\14\43\11\0\16\43\2\0\3\43\1\0\6\43"+
-    "\2\0\1\43\24\0\2\43\1\u01d3\11\43\11\0\16\43"+
-    "\2\0\3\43\1\0\6\43\2\0\1\u01d4\24\0\14\43"+
-    "\11\0\4\43\1\u01d5\11\43\2\0\3\43\1\0\6\43"+
-    "\2\0\1\43\24\0\14\43\11\0\16\43\2\0\3\43"+
-    "\1\0\6\43\2\0\1\43\24\0\6\43\1\u01d6\5\43"+
-    "\11\0\6\43\1\u01d7\7\43\2\0\3\43\1\0\6\43"+
-    "\2\0\1\43\24\0\14\43\11\0\16\43\2\0\3\43"+
-    "\1\0\6\43\2\0\1\43\24\0\2\43\1\u01d8\11\43"+
-    "\11\0\14\43\1\u01d9\1\43\2\0\3\43\1\0\6\43"+
-    "\2\0\1\43\24\0\14\43\11\0\16\43\2\0\3\43"+
-    "\1\0\2\43\1\u01da\3\43\2\0\1\43\24\0\14\43"+
-    "\11\0\16\43\2\0\3\43\1\0\2\43\1\u01db\3\43"+
-    "\2\0\1\43\24\0\14\43\11\0\14\43\1\u01dc\1\43"+
-    "\2\0\3\43\1\0\6\43\2\0\1\43\24\0\14\43"+
-    "\11\0\16\43\2\0\3\43\1\0\4\43\1\u01dd\1\43"+
-    "\2\0\1\43\24\0\14\43\11\0\14\43\1\u01de\1\43"+
-    "\2\0\3\43\1\0\6\43\2\0\1\43\24\0\14\43"+
-    "\11\0\16\43\2\0\3\43\1\0\6\43\2\0\1\43"+
-    "\24\0\1\u01df\13\43\11\0\16\43\2\0\3\43\1\0"+
-    "\2\43\1\u01e0\3\43\2\0\1\43\24\0\14\43\11\0"+
-    "\14\43\1\u01e1\1\43\2\0\3\43\1\0\6\43\2\0"+
-    "\1\43\24\0\14\43\11\0\14\43\1\u01e2\1\43\2\0"+
-    "\3\43\1\0\6\43\2\0\1\43\24\0\14\43\11\0"+
-    "\16\43\2\0\3\43\1\0\6\43\2\0\1\43\24\0"+
-    "\6\43\1\u01e3\5\43\11\0\16\43\2\0\3\43\1\0"+
-    "\4\43\1\u01e4\1\43\2\0\1\43\24\0\14\43\11\0"+
-    "\16\43\2\0\3\43\1\0\4\43\1\u01e5\1\43\2\0"+
-    "\1\43\24\0\14\43\11\0\12\43\1\u01e6\3\43\2\0"+
-    "\3\43\1\0\6\43\2\0\1\43\24\0\14\43\11\0"+
-    "\10\43\1\u01e7\5\43\2\0\3\43\1\0\6\43\2\0"+
-    "\1\43\24\0\14\43\11\0\4\43\1\u01e8\11\43\2\0"+
-    "\3\43\1\0\6\43\2\0\1\43\24\0\14\43\11\0"+
-    "\16\43\2\0\3\43\1\0\6\43\2\0\1\43\24\0"+
-    "\4\43\1\u01e9\7\43\11\0\16\43\2\0\3\43\1\0"+
-    "\6\43\2\0\1\43\24\0\12\43\1\u01ea\1\43\11\0"+
-    "\14\43\1\u01eb\1\43\2\0\3\43\1\0\6\43\2\0"+
-    "\1\43\24\0\14\43\11\0\12\43\1\u01ec\3\43\2\0"+
-    "\3\43\1\0\6\43\2\0\1\43\24\0\14\43";
+    "\3\0\10\43\1\u01c6\3\43\32\0\16\43\2\0\3\43"+
+    "\1\0\6\43\2\0\1\43\3\0\1\43\1\u01c7\12\43"+
+    "\32\0\16\43\2\0\3\43\1\0\6\43\2\0\1\43"+
+    "\3\0\2\43\1\u01c8\11\43\32\0\14\43\1\u01c9\1\43"+
+    "\2\0\3\43\1\0\6\43\2\0\1\43\3\0\14\43"+
+    "\32\0\16\43\2\0\3\43\1\0\4\43\1\u01ca\1\43"+
+    "\2\0\1\43\3\0\14\43\32\0\16\43\2\0\3\43"+
+    "\1\0\6\43\2\0\1\43\3\0\4\43\1\u01cb\7\43"+
+    "\32\0\14\43\1\u01cc\1\43\2\0\3\43\1\0\6\43"+
+    "\2\0\1\43\3\0\14\43\32\0\16\43\2\0\3\43"+
+    "\1\0\2\43\1\u01cd\3\43\2\0\1\43\3\0\14\43"+
+    "\21\0\4\u015d\1\0\31\u015d\1\0\4\u015d\1\u0118\42\u015d"+
+    "\44\u011b\1\u01ce\41\u011b\11\0\14\43\1\u01cf\1\43\2\0"+
+    "\3\43\1\0\6\43\2\0\1\43\3\0\14\43\32\0"+
+    "\16\43\2\0\3\43\1\0\4\43\1\u01d0\1\43\2\0"+
+    "\1\43\3\0\14\43\32\0\14\43\1\u01d1\1\43\2\0"+
+    "\3\43\1\0\6\43\2\0\1\43\3\0\14\43\32\0"+
+    "\16\43\2\0\3\43\1\0\6\43\2\0\1\43\3\0"+
+    "\2\43\1\u01d2\11\43\32\0\16\43\2\0\3\43\1\0"+
+    "\6\43\2\0\1\u01d3\3\0\14\43\32\0\4\43\1\u01d4"+
+    "\11\43\2\0\3\43\1\0\6\43\2\0\1\43\3\0"+
+    "\14\43\32\0\16\43\2\0\3\43\1\0\6\43\2\0"+
+    "\1\43\3\0\6\43\1\u01d5\5\43\32\0\6\43\1\u01d6"+
+    "\7\43\2\0\3\43\1\0\6\43\2\0\1\43\3\0"+
+    "\14\43\32\0\16\43\2\0\3\43\1\0\6\43\2\0"+
+    "\1\43\3\0\2\43\1\u01d7\11\43\32\0\14\43\1\u01d8"+
+    "\1\43\2\0\3\43\1\0\6\43\2\0\1\43\3\0"+
+    "\14\43\32\0\16\43\2\0\3\43\1\0\2\43\1\u01d9"+
+    "\3\43\2\0\1\43\3\0\14\43\32\0\16\43\2\0"+
+    "\3\43\1\0\2\43\1\u01da\3\43\2\0\1\43\3\0"+
+    "\14\43\32\0\14\43\1\u01db\1\43\2\0\3\43\1\0"+
+    "\6\43\2\0\1\43\3\0\14\43\32\0\16\43\2\0"+
+    "\3\43\1\0\4\43\1\u01dc\1\43\2\0\1\43\3\0"+
+    "\14\43\32\0\14\43\1\u01dd\1\43\2\0\3\43\1\0"+
+    "\6\43\2\0\1\43\3\0\14\43\32\0\16\43\2\0"+
+    "\3\43\1\0\6\43\2\0\1\43\3\0\1\u01de\13\43"+
+    "\32\0\16\43\2\0\3\43\1\0\2\43\1\u01df\3\43"+
+    "\2\0\1\43\3\0\14\43\32\0\14\43\1\u01e0\1\43"+
+    "\2\0\3\43\1\0\6\43\2\0\1\43\3\0\14\43"+
+    "\32\0\14\43\1\u01e1\1\43\2\0\3\43\1\0\6\43"+
+    "\2\0\1\43\3\0\14\43\32\0\16\43\2\0\3\43"+
+    "\1\0\6\43\2\0\1\43\3\0\6\43\1\u01e2\5\43"+
+    "\32\0\16\43\2\0\3\43\1\0\4\43\1\u01e3\1\43"+
+    "\2\0\1\43\3\0\14\43\32\0\16\43\2\0\3\43"+
+    "\1\0\4\43\1\u01e4\1\43\2\0\1\43\3\0\14\43"+
+    "\32\0\12\43\1\u01e5\3\43\2\0\3\43\1\0\6\43"+
+    "\2\0\1\43\3\0\14\43\32\0\10\43\1\u01e6\5\43"+
+    "\2\0\3\43\1\0\6\43\2\0\1\43\3\0\14\43"+
+    "\32\0\4\43\1\u01e7\11\43\2\0\3\43\1\0\6\43"+
+    "\2\0\1\43\3\0\14\43\32\0\16\43\2\0\3\43"+
+    "\1\0\6\43\2\0\1\43\3\0\4\43\1\u01e8\7\43"+
+    "\32\0\16\43\2\0\3\43\1\0\6\43\2\0\1\43"+
+    "\3\0\12\43\1\u01e9\1\43\32\0\14\43\1\u01ea\1\43"+
+    "\2\0\3\43\1\0\6\43\2\0\1\43\3\0\14\43"+
+    "\32\0\12\43\1\u01eb\3\43\2\0\3\43\1\0\6\43"+
+    "\2\0\1\43\3\0\14\43\21\0";
 
   private static int [] zzUnpackTrans() {
     int [] result = new int[24290];
@@ -779,25 +781,25 @@ public class _GroovyLexer implements FlexLexer, GroovyTokenTypes {
   private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();
 
   private static final String ZZ_ATTRIBUTE_PACKED_0 =
-    "\21\0\1\1\7\0\1\1\1\11\1\1\1\11\27\1"+
-    "\2\11\2\1\6\11\2\1\1\11\4\1\2\11\6\1"+
-    "\1\11\1\1\2\11\1\1\1\11\3\1\2\11\2\1"+
-    "\1\11\3\1\1\11\1\1\1\11\2\1\2\11\2\1"+
-    "\3\11\1\1\1\11\2\1\5\11\5\1\1\11\2\1"+
-    "\1\11\1\1\1\11\1\1\1\11\3\1\1\11\1\1"+
-    "\1\11\2\1\4\0\3\1\1\11\1\1\2\11\2\1"+
-    "\5\11\2\0\15\1\5\11\1\0\1\1\1\11\11\1"+
-    "\2\0\2\1\1\0\1\1\2\11\1\1\1\11\1\1"+
-    "\1\0\1\11\1\0\6\11\20\1\1\0\4\1\3\0"+
-    "\2\1\1\0\3\1\2\0\4\1\3\0\2\1\2\11"+
-    "\1\1\1\0\17\1\2\11\14\1\1\11\1\1\1\11"+
-    "\1\1\5\11\1\0\25\1\2\11\1\0\6\1\1\11"+
-    "\2\1\2\11\30\1\3\0\1\1\1\0\1\11\24\1"+
-    "\1\11\1\0\5\1\1\11\1\0\21\1\2\0\1\1"+
-    "\1\0\24\1\1\0\15\1\2\0\63\1";
+    "\21\0\1\1\7\0\1\1\1\11\1\1\1\11\26\1"+
+    "\2\11\10\1\6\11\2\1\1\11\4\1\3\11\1\1"+
+    "\2\11\1\1\1\11\3\1\2\11\2\1\1\11\3\1"+
+    "\1\11\1\1\1\11\2\1\2\11\2\1\3\11\1\1"+
+    "\1\11\2\1\5\11\5\1\1\11\2\1\1\11\1\1"+
+    "\1\11\1\1\1\11\3\1\1\11\1\1\1\11\2\1"+
+    "\4\0\3\1\1\11\1\1\2\11\2\1\5\11\2\0"+
+    "\15\1\5\11\1\0\1\1\1\11\11\1\2\0\2\1"+
+    "\1\0\21\1\2\11\1\1\1\11\1\1\1\0\1\11"+
+    "\1\0\6\11\1\0\4\1\3\0\2\1\1\0\3\1"+
+    "\2\0\4\1\3\0\2\1\2\11\1\1\1\0\17\1"+
+    "\2\11\14\1\1\11\1\1\1\11\25\1\5\11\1\0"+
+    "\1\1\2\11\1\0\6\1\1\11\2\1\2\11\30\1"+
+    "\3\0\1\1\1\0\24\1\2\11\1\0\5\1\1\11"+
+    "\1\0\21\1\2\0\1\1\1\0\24\1\1\0\15\1"+
+    "\2\0\63\1";
 
   private static int [] zzUnpackAttribute() {
-    int [] result = new int[492];
+    int [] result = new int[491];
     int offset = 0;
     offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
     return result;
@@ -1130,69 +1132,69 @@ public class _GroovyLexer implements FlexLexer, GroovyTokenTypes {
           { yybegin(WAIT_FOR_REGEX);
                                              return(mSTAR);
           }
-        case 171: break;
-        case 77
+        case 170: break;
+        case 76
           { yybegin(WAIT_FOR_REGEX);
                                              return(mNOT_EQUAL);
           }
-        case 172: break;
-        case 57
+        case 171: break;
+        case 56
           { blockStack.push(mLCURLY);
                                              braceCount.push(mLCURLY);
                                              yybegin(NLS_AFTER_LBRACE);
                                              return(mLCURLY);
           }
-        case 173: break;
+        case 172: break;
         case 4: 
           { return mWS;
           }
-        case 174: break;
-        case 129
+        case 173: break;
+        case 128
           { return( kTRUE );
           }
-        case 175: break;
-        case 128
+        case 174: break;
+        case 127
           { return( kNULL );
           }
-        case 176: break;
-        case 25
+        case 175: break;
+        case 24
           { yybegin(WAIT_FOR_REGEX);
                                              return(mCOMMA);
           }
-        case 177: break;
-        case 127
+        case 176: break;
+        case 126
           { return( kENUM );
           }
-        case 178: break;
-        case 86
+        case 177: break;
+        case 85
           { yybegin(WAIT_FOR_REGEX);
                                              return(mDEC);
           }
-        case 179: break;
-        case 89
+        case 178: break;
+        case 88
           { yybegin(WAIT_FOR_REGEX);
                                              return(mRANGE_INCLUSIVE);
           }
-        case 180: break;
-        case 76
+        case 179: break;
+        case 75
           { return mSH_COMMENT;
           }
-        case 181: break;
-        case 61
+        case 180: break;
+        case 60
           { return mWRONG_REGEX_LITERAL;
           }
-        case 182: break;
-        case 122
+        case 181: break;
+        case 121
           { yybegin(WAIT_FOR_REGEX);
                                              return(mSR_ASSIGN);
           }
-        case 183: break;
-        case 63
+        case 182: break;
+        case 62
           { yybegin(IN_REGEX_DOT);
                                              return mIDENT;
           }
-        case 184: break;
-        case 59
+        case 183: break;
+        case 58
           { yypushback(1);
                                              if (blockStack.isEmpty()){
                                                yybegin(YYINITIAL);
@@ -1200,56 +1202,56 @@ public class _GroovyLexer implements FlexLexer, GroovyTokenTypes {
                                                yybegin(IN_INNER_BLOCK);
                                              }
           }
-        case 185: break;
+        case 184: break;
         case 8: 
           { return mIDENT;
           }
-        case 186: break;
-        case 27
+        case 185: break;
+        case 26
           { yybegin(WAIT_FOR_REGEX);
                                              return(mGT);
           }
-        case 187: break;
-        case 143
+        case 186: break;
+        case 142
           { return( kSUPER );
           }
-        case 188: break;
-        case 118
+        case 187: break;
+        case 117
           { yybegin(IN_TRIPLE_GSTRING);
                                                               gStringStack.push(mLBRACK);
                                                               return mGSTRING_BEGIN;
           }
-        case 189: break;
-        case 72
+        case 188: break;
+        case 71
           { yybegin(WAIT_FOR_REGEX);
                                              return(mDIV_ASSIGN);
           }
-        case 190: break;
-        case 168
+        case 189: break;
+        case 167
           { return( kINSTANCEOF );
           }
-        case 191: break;
+        case 190: break;
         case 94: 
           { yybegin(WAIT_FOR_REGEX);
                                              return(mEQUAL);
           }
-        case 192: break;
-        case 20
+        case 191: break;
+        case 19
           { yybegin(WAIT_FOR_REGEX);
                                              braceCount.push(mLPAREN);
                                              return(mLPAREN);
           }
-        case 193: break;
-        case 24
+        case 192: break;
+        case 23
           { yybegin(WAIT_FOR_REGEX);
                                              return(mCOLON);
           }
-        case 194: break;
-        case 153
+        case 193: break;
+        case 152
           { return( kSTATIC );
           }
-        case 195: break;
-        case 52
+        case 194: break;
+        case 51
           { if (blockStack.isEmpty()){
                                                yybegin(YYINITIAL);
                                              } else {
@@ -1257,65 +1259,65 @@ public class _GroovyLexer implements FlexLexer, GroovyTokenTypes {
                                              }
                                              return mREGEX_END;
           }
-        case 196: break;
-        case 142
+        case 195: break;
+        case 141
           { return( kCATCH );
           }
-        case 197: break;
-        case 31
+        case 196: break;
+        case 30
           { yybegin(WAIT_FOR_REGEX);
                                              return(mBOR);
           }
-        case 198: break;
-        case 55
+        case 197: break;
+        case 54
           { return mREGEX_CONTENT;
           }
-        case 199: break;
-        case 29
+        case 198: break;
+        case 28
           { yybegin(WAIT_FOR_REGEX);
                                              return(mMOD);
           }
-        case 200: break;
-        case 26
+        case 199: break;
+        case 25
           { yybegin(WAIT_FOR_REGEX);
                                              return(mLT);
           }
-        case 201: break;
-        case 167
+        case 200: break;
+        case 166
           { return( kPROTECTED );
           }
-        case 202: break;
-        case 110
+        case 201: break;
+        case 109
           { return mNUM_BIG_DECIMAL;
           }
-        case 203: break;
-        case 74
+        case 202: break;
+        case 73
           { yybegin(WAIT_FOR_REGEX);
                                              return(mSPREAD_DOT);
           }
-        case 204: break;
-        case 147
+        case 203: break;
+        case 146
           { return( kDOUBLE );
           }
-        case 205: break;
-        case 39
+        case 204: break;
+        case 38
           { yybegin(IN_TRIPLE_DOT);
                                              return mIDENT;
           }
-        case 206: break;
-        case 37
+        case 205: break;
+        case 36
           { blockStack.push(mLPAREN);
                                              braceCount.push(mLCURLY);
                                              yybegin(NLS_AFTER_LBRACE);
                                              return mLCURLY;
           }
-        case 207: break;
-        case 54
+        case 206: break;
+        case 53
           { yypushback(yytext().length());
                                              yybegin(KING_STATE_INNER_CONTENT);
           }
-        case 208: break;
-        case 123
+        case 207: break;
+        case 122
           { if (!gStringStack.isEmpty()){
                                                gStringStack.pop();
                                              }
@@ -1326,142 +1328,142 @@ public class _GroovyLexer implements FlexLexer, GroovyTokenTypes {
                                              }
                                              return mGSTRING_END;
           }
-        case 209: break;
-        case 116
+        case 208: break;
+        case 115
           { return( kNEW );
           }
-        case 210: break;
-        case 49
+        case 209: break;
+        case 48
           { yypushback(yytext().length());
                                              yybegin(KING_STATE_INNER);
           }
-        case 211: break;
-        case 148
+        case 210: break;
+        case 147
           { return( kNATIVE );
           }
-        case 212: break;
-        case 90
+        case 211: break;
+        case 89
           { yybegin(WAIT_FOR_REGEX);
                                              return(mMEMBER_POINTER);
           }
-        case 213: break;
-        case 21
+        case 212: break;
+        case 20
           { if (!braceCount.isEmpty() && mLPAREN == braceCount.peek()) {
                                                braceCount.pop();
                                              }
                                              return(mRPAREN);
           }
-        case 214: break;
-        case 68
+        case 213: break;
+        case 67
           { yypushback(1);
                                               yybegin(WAIT_FOR_REGEX);
           }
-        case 215: break;
-        case 111
+        case 214: break;
+        case 110
           { return( kFOR );
           }
-        case 216: break;
-        case 134
+        case 215: break;
+        case 132
           { return( kCHAR );
           }
-        case 217: break;
-        case 146
+        case 216: break;
+        case 145
           { return( kIMPORT );
           }
-        case 218: break;
+        case 217: break;
         case 92: 
           { yybegin(WAIT_FOR_REGEX);
                                              return(mOPTIONAL_DOT);
           }
-        case 219: break;
+        case 218: break;
         case 102: 
           { yybegin(WAIT_FOR_REGEX);
                                              return(mBAND_ASSIGN);
           }
-        case 220: break;
-        case 157
+        case 219: break;
+        case 156
           { return( kEXTENDS );
           }
-        case 221: break;
+        case 220: break;
         case 10: 
           { yybegin(WAIT_FOR_REGEX);
                                              return(mPLUS);
           }
-        case 222: break;
+        case 221: break;
         case 3: 
           { yybegin(NLS_AFTER_NLS);
                                              afterComment = WAIT_FOR_REGEX;
                                              return !braceCount.isEmpty() &&
                                                  mLPAREN == braceCount.peek() ? mWS : mNLS;
           }
-        case 223: break;
+        case 222: break;
         case 95: 
           { yybegin(WAIT_FOR_REGEX);
                                              return(mREGEX_FIND);
           }
-        case 224: break;
-        case 28
+        case 223: break;
+        case 27
           { yybegin(WAIT_FOR_REGEX);
                                              return(mBNOT);
           }
-        case 225: break;
+        case 224: break;
         case 100: 
           { yybegin(WAIT_FOR_REGEX);
                                              return(mBOR_ASSIGN);
           }
-        case 226: break;
-        case 155
+        case 225: break;
+        case 154
           { return( kFINALLY );
           }
-        case 227: break;
+        case 226: break;
         case 101: 
           { yybegin(WAIT_FOR_REGEX);
                                              return(mLOR);
           }
-        case 228: break;
-        case 75
+        case 227: break;
+        case 74
           { yybegin(WAIT_FOR_REGEX);
                                              return(mSTAR_ASSIGN);
           }
-        case 229: break;
-        case 135
+        case 228: break;
+        case 133
           { return( kVOID );
           }
-        case 230: break;
-        case 151
+        case 229: break;
+        case 150
           { return( kPUBLIC );
           }
-        case 231: break;
-        case 126
+        case 230: break;
+        case 125
           { return( kELSE );
           }
-        case 232: break;
-        case 40
+        case 231: break;
+        case 39
           { blockStack.push(mLBRACK);
                                              braceCount.push(mLCURLY);
                                              yybegin(NLS_AFTER_LBRACE);
                                              return mLCURLY;
           }
-        case 233: break;
-        case 15
+        case 232: break;
+        case 14
           { return mSTRING_LITERAL;
           }
-        case 234: break;
-        case 87
+        case 233: break;
+        case 86
           { yybegin(WAIT_FOR_REGEX);
                                              return(mMINUS_ASSIGN);
           }
-        case 235: break;
-        case 88
+        case 234: break;
+        case 87
           { yybegin(WAIT_FOR_REGEX);
                                              return(mCLOSABLE_BLOCK_OP);
           }
-        case 236: break;
-        case 169
+        case 235: break;
+        case 168
           { return( kIMPLEMENTS );
           }
-        case 237: break;
-        case 44
+        case 236: break;
+        case 43
           { if (!gStringStack.isEmpty()) {
                                                gStringStack.pop();
                                              }
@@ -1472,67 +1474,67 @@ public class _GroovyLexer implements FlexLexer, GroovyTokenTypes {
                                              }
                                              return mGSTRING_END;
           }
-        case 238: break;
+        case 237: break;
         case 98: 
           { yybegin(WAIT_FOR_REGEX);
                                              return(mMOD_ASSIGN);
           }
-        case 239: break;
-        case 18
+        case 238: break;
+        case 17
           { yybegin(WAIT_FOR_REGEX);
                                              return(mQUESTION);
           }
-        case 240: break;
+        case 239: break;
         case 9: 
           { return mNUM_INT;
           }
-        case 241: break;
-        case 165
+        case 240: break;
+        case 164
           { return( kINTERFACE );
           }
-        case 242: break;
-        case 33
+        case 241: break;
+        case 32
           { yybegin(WAIT_FOR_REGEX);
                                              return(mSEMI);
           }
-        case 243: break;
-        case 160
+        case 242: break;
+        case 159
           { return( kPACKAGE );
           }
-        case 244: break;
-        case 139
+        case 243: break;
+        case 138
           { return( kTHROW );
           }
-        case 245: break;
-        case 19
+        case 244: break;
+        case 18
           { yybegin(WAIT_FOR_REGEX);
                                              return(mASSIGN);
           }
-        case 246: break;
-        case 83
+        case 245: break;
+        case 82
           { return( kIN );
           }
-        case 247: break;
-        case 70
+        case 246: break;
+        case 69
           { return mSL_COMMENT;
           }
-        case 248: break;
-        case 14
+        case 247: break;
+        case 13
           { yybegin(IN_SINGLE_GSTRING);
                                                               gStringStack.push(mLPAREN);
                                                               return mGSTRING_BEGIN;
           }
-        case 249: break;
-        case 131
+        case 248: break;
+        case 130
           { return( kBYTE );
           }
-        case 250: break;
+        case 249: break;
         case 103: 
           { yybegin(WAIT_FOR_REGEX);
                                              return(mLAND);
           }
-        case 251: break;
-        case 124
+        case 250: break;
+        case 123
           { if (blockStack.isEmpty()){
                                                yybegin(YYINITIAL);
                                              } else {
@@ -1540,32 +1542,27 @@ public class _GroovyLexer implements FlexLexer, GroovyTokenTypes {
                                              }
                                              return(mREGEX_LITERAL);
           }
-        case 252: break;
-        case 13: 
-          { yybegin(WAIT_FOR_REGEX);
-                                             return(mDOLLAR);
-          }
-        case 253: break;
-        case 35: 
+        case 251: break;
+        case 34: 
           { yypushback(1);
                                              yybegin(IN_SINGLE_GSTRING);
           }
-        case 254: break;
-        case 30
+        case 252: break;
+        case 29
           { yybegin(WAIT_FOR_REGEX);
                                              return(mBXOR);
           }
-        case 255: break;
-        case 66
+        case 253: break;
+        case 65
           { yypushback(1);
                                              yybegin(IN_REGEX);
           }
-        case 256: break;
-        case 67
+        case 254: break;
+        case 66
           { yypushback(1);
                                               yybegin(afterComment);
           }
-        case 257: break;
+        case 255: break;
         case 5: 
           { if (zzStartRead == 0 ||
                                                  zzBuffer.subSequence(0, zzStartRead).toString().trim().length() == 0) {
@@ -1575,250 +1572,250 @@ public class _GroovyLexer implements FlexLexer, GroovyTokenTypes {
                                                return(mDIV);
                                              }
           }
-        case 258: break;
-        case 170
+        case 256: break;
+        case 169
           { return( kSYNCHRONIZED );
           }
-        case 259: break;
-        case 121
+        case 257: break;
+        case 120
           { yybegin(WAIT_FOR_REGEX);
                                              return(mSL_ASSIGN);
           }
-        case 260: break;
-        case 53
+        case 258: break;
+        case 52
           { yybegin(KING_STATE);
                                              return mREGEX_BEGIN;
           }
-        case 261: break;
-        case 38
+        case 259: break;
+        case 37
           { yypushback(1);
                                              yybegin(IN_TRIPLE_GSTRING);
           }
-        case 262: break;
-        case 117
+        case 260: break;
+        case 116
           { return( kTRY );
           }
-        case 263: break;
+        case 261: break;
         case 11: 
           { yybegin(WAIT_FOR_REGEX);
                                              return(mMINUS);
           }
-        case 264: break;
+        case 262: break;
         case 12: 
           { yybegin(WAIT_FOR_REGEX);
                                              return(mDOT);
           }
-        case 265: break;
-        case 133
+        case 263: break;
+        case 131
           { return( kCASE );
           }
-        case 266: break;
-        case 105
+        case 264: break;
+        case 104
           // lookahead expression with fixed base length
           zzMarkedPos = zzStartRead + 1;
           { yybegin(IN_SINGLE_IDENT);
                                              return mDOT;
           }
-        case 267: break;
-        case 81
+        case 265: break;
+        case 80
           { return mNUM_DOUBLE;
           }
-        case 268: break;
-        case 156
+        case 266: break;
+        case 155
           { return( kDEFAULT );
           }
-        case 269: break;
-        case 119
+        case 267: break;
+        case 118
           { yybegin(WAIT_FOR_REGEX);
                                              return(mREGEX_MATCH);
           }
-        case 270: break;
+        case 268: break;
         case 1: 
           { gStringStack.clear();
                                              yybegin(YYINITIAL);
                                              return mWRONG_REGEX_LITERAL;
           }
-        case 271: break;
-        case 166
+        case 269: break;
+        case 165
           { return( kTRANSIENT );
           }
-        case 272: break;
-        case 56
+        case 270: break;
+        case 55
           { yybegin(KING_STATE_CONTENT);
                                              return mREGEX_CONTENT;
           }
-        case 273: break;
-        case 84
+        case 271: break;
+        case 83
           { yybegin(WAIT_FOR_REGEX);
                                              return(mINC);
           }
-        case 274: break;
-        case 108
+        case 272: break;
+        case 107
           { return GROOVY_DOC_COMMENT;
           }
-        case 275: break;
-        case 62
+        case 273: break;
+        case 61
           { yybegin(NLS_AFTER_NLS);
                                              afterComment = YYINITIAL;
                                              clearStacks();
                                              return mNLS;
           }
-        case 276: break;
-        case 154
+        case 274: break;
+        case 153
           { return( kSWITCH );
           }
-        case 277: break;
-        case 17
+        case 275: break;
+        case 16
           { if (!braceCount.isEmpty() && mLCURLY == braceCount.peek()) {
                                                braceCount.pop();
                                              }
                                              return(mRCURLY);
           }
-        case 278: break;
-        case 91
+        case 276: break;
+        case 90
           { return mGSTRING_LITERAL;
           }
-        case 279: break;
-        case 22
+        case 277: break;
+        case 21
           { yybegin(WAIT_FOR_REGEX);
                                              braceCount.push(mLPAREN);
                                              return(mLBRACK);
           }
-        case 280: break;
-        case 47
+        case 278: break;
+        case 46
           { yypushback(1);
                                              yybegin(IN_TRIPLE_IDENT);
           }
-        case 281: break;
-        case 136
+        case 279: break;
+        case 135
           { return( kFLOAT );
           }
-        case 282: break;
-        case 132
+        case 280: break;
+        case 134
           { yybegin(WAIT_FOR_REGEX);
                                              return(mBSR_ASSIGN);
           }
-        case 283: break;
-        case 82
+        case 281: break;
+        case 81
           { return( kIF );
           }
-        case 284: break;
+        case 282: break;
         case 93: 
           { yybegin(WAIT_FOR_REGEX);
                                              return(mELVIS);
           }
-        case 285: break;
-        case 137
+        case 283: break;
+        case 136
           { return( kFINAL );
           }
-        case 286: break;
-        case 36
+        case 284: break;
+        case 35
           { yybegin(IN_SINGLE_DOT);
                                              return mIDENT;
           }
-        case 287: break;
+        case 285: break;
         case 97: 
           { yybegin(WAIT_FOR_REGEX);
                                              return(mGE);
           }
-        case 288: break;
-        case 150
+        case 286: break;
+        case 149
           { return( kTHROWS );
           }
-        case 289: break;
-        case 79
+        case 287: break;
+        case 78
           { return mNUM_FLOAT;
           }
-        case 290: break;
-        case 114
+        case 288: break;
+        case 113
           { yybegin(WAIT_FOR_REGEX);
                                              return(mTRIPLE_DOT);
           }
-        case 291: break;
-        case 50
+        case 289: break;
+        case 49
           { yypushback(yytext().length());
                                              gStringStack.push(mDIV);       // For regexes
                                              yybegin(IN_REGEX_DOLLAR);
           }
-        case 292: break;
-        case 112
+        case 290: break;
+        case 111
           { return( kINT );
           }
-        case 293: break;
-        case 163
+        case 291: break;
+        case 162
           { return( kSTRICTFP );
           }
-        case 294: break;
-        case 69
+        case 292: break;
+        case 68
           { yypushback(1);
                                               yybegin(NLS_AFTER_COMMENT);
           }
-        case 295: break;
-        case 161
+        case 293: break;
+        case 160
           { return( kABSTRACT );
           }
-        case 296: break;
-        case 138
+        case 294: break;
+        case 137
           { return( kFALSE );
           }
-        case 297: break;
-        case 104
+        case 295: break;
+        case 91
           { return( kAS );
           }
-        case 298: break;
-        case 48
+        case 296: break;
+        case 47
           { yybegin(NLS_AFTER_NLS);
                                              afterComment = IN_TRIPLE_IDENT;
                                              return mNLS;
           }
-        case 299: break;
-        case 115
+        case 297: break;
+        case 114
           { yybegin(WAIT_FOR_REGEX);
                                              return(mRANGE_EXCLUSIVE);
           }
-        case 300: break;
-        case 162
+        case 298: break;
+        case 161
           { return( kCONTINUE );
           }
-        case 301: break;
-        case 34
+        case 299: break;
+        case 33
           { yybegin(WAIT_FOR_REGEX);
                                              return(mAT);
           }
-        case 302: break;
-        case 125
+        case 300: break;
+        case 124
           { return( kLONG );
           }
-        case 303: break;
-        case 80
+        case 301: break;
+        case 79
           { return mNUM_LONG;
           }
-        case 304: break;
-        case 140
+        case 302: break;
+        case 139
           { return( kBREAK );
           }
-        case 305: break;
+        case 303: break;
         case 96: 
           { yybegin(WAIT_FOR_REGEX);
                                              return(mLE);
           }
-        case 306: break;
-        case 158
+        case 304: break;
+        case 157
           { return( kBOOLEAN );
           }
-        case 307: break;
-        case 152
+        case 305: break;
+        case 151
           { return( kASSERT );
           }
-        case 308: break;
-        case 107
+        case 306: break;
+        case 106
           // lookahead expression with fixed base length
           zzMarkedPos = zzStartRead + 1;
           { yybegin(IN_REGEX_IDENT);
                                              return mDOT;
           }
-        case 309: break;
-        case 58
+        case 307: break;
+        case 57
           { if (!blockStack.isEmpty()) {
                                                IElementType br = blockStack.pop();
                                                if (br.equals(mLPAREN)) yybegin(IN_SINGLE_GSTRING);
@@ -1830,63 +1827,63 @@ public class _GroovyLexer implements FlexLexer, GroovyTokenTypes {
                                              }
                                              return mRCURLY;
           }
-        case 310: break;
-        case 130
+        case 308: break;
+        case 129
           { return( kTHIS );
           }
-        case 311: break;
-        case 159
+        case 309: break;
+        case 158
           { return( kPRIVATE );
           }
-        case 312: break;
-        case 46
+        case 310: break;
+        case 45
           { yybegin(IN_TRIPLE_GSTRING_DOLLAR);
                                              return mDOLLAR;
           }
-        case 313: break;
-        case 144
+        case 311: break;
+        case 143
           { return( kSHORT );
           }
-        case 314: break;
-        case 23
+        case 312: break;
+        case 22
           { if (!braceCount.isEmpty() && mLPAREN == braceCount.peek()) {
                                                braceCount.pop();
                                              }
                                              return(mRBRACK);
           }
-        case 315: break;
-        case 16
+        case 313: break;
+        case 15
           { yybegin(NLS_AFTER_LBRACE);
                                              braceCount.push(mLCURLY);
                                              return(mLCURLY);
           }
-        case 316: break;
-        case 164
+        case 314: break;
+        case 163
           { return( kVOLATILE );
           }
-        case 317: break;
-        case 106
+        case 315: break;
+        case 105
           // lookahead expression with fixed base length
           zzMarkedPos = zzStartRead + 1;
           { yybegin(IN_TRIPLE_NLS);
                                              return mDOT;
           }
-        case 318: break;
+        case 316: break;
         case 7: 
           { yybegin(WAIT_FOR_REGEX);
                                              return(mLNOT);
           }
-        case 319: break;
-        case 73
+        case 317: break;
+        case 72
           { yybegin(WAIT_FOR_REGEX);
                                              return(mSTAR_STAR);
           }
-        case 320: break;
-        case 78
+        case 318: break;
+        case 77
           { return mNUM_BIG_INT;
           }
-        case 321: break;
-        case 65
+        case 319: break;
+        case 64
           { if (!gStringStack.isEmpty()) {
                                                gStringStack.pop();
                                              }
@@ -1897,45 +1894,45 @@ public class _GroovyLexer implements FlexLexer, GroovyTokenTypes {
                                              }
                                              return mREGEX_END;
           }
-        case 322: break;
-        case 141
+        case 320: break;
+        case 140
           { return( kCLASS );
           }
-        case 323: break;
-        case 85
+        case 321: break;
+        case 84
           { yybegin(WAIT_FOR_REGEX);
                                              return(mPLUS_ASSIGN);
           }
-        case 324: break;
-        case 32
+        case 322: break;
+        case 31
           { yybegin(WAIT_FOR_REGEX);
                                              return(mBAND);
           }
-        case 325: break;
-        case 120
+        case 323: break;
+        case 119
           { yybegin(WAIT_FOR_REGEX);
                                              return(mCOMPARE_TO);
           }
-        case 326: break;
+        case 324: break;
         case 99: 
           { yybegin(WAIT_FOR_REGEX);
                                              return(mBXOR_ASSIGN);
           }
-        case 327: break;
-        case 60
+        case 325: break;
+        case 59
           { afterComment = YYINITIAL;
                                              return(mWS);
           }
-        case 328: break;
-        case 149
+        case 326: break;
+        case 148
           { return( kRETURN );
           }
-        case 329: break;
-        case 51
+        case 327: break;
+        case 50
           { return mREGEX_BEGIN;
           }
-        case 330: break;
-        case 45
+        case 328: break;
+        case 44
           // general lookahead, find correct zzMarkedPos
           { int zzFState = 24;
             int zzFPos = zzStartRead;
@@ -1958,51 +1955,51 @@ public class _GroovyLexer implements FlexLexer, GroovyTokenTypes {
           }
           { return mGSTRING_CONTENT;
           }
-        case 331: break;
-        case 41
+        case 329: break;
+        case 40
           { return mGSTRING_CONTENT;
           }
-        case 332: break;
-        case 109
+        case 330: break;
+        case 108
           { yybegin(WAIT_FOR_REGEX);
                                              return(mSTAR_STAR_ASSIGN);
           }
-        case 333: break;
-        case 113
+        case 331: break;
+        case 112
           { return( kDEF );
           }
-        case 334: break;
-        case 43
+        case 332: break;
+        case 42
           { yybegin(IN_SINGLE_GSTRING_DOLLAR);
                                              return mDOLLAR;
           }
-        case 335: break;
-        case 42
+        case 333: break;
+        case 41
           { clearStacks();
                                              yybegin(NLS_AFTER_NLS);
                                              afterComment = YYINITIAL;
                                              return mNLS;
           }
-        case 336: break;
-        case 64
+        case 334: break;
+        case 63
           { blockStack.push(mDIV);
                                              braceCount.push(mLCURLY);
                                              yybegin(NLS_AFTER_LBRACE);
                                              return mLCURLY;
           }
-        case 337: break;
-        case 145
+        case 335: break;
+        case 144
           { return( kWHILE );
           }
-        case 338: break;
+        case 336: break;
         case 2: 
           { return mWRONG;
           }
-        case 339: break;
-        case 71
+        case 337: break;
+        case 70
           { return mML_COMMENT;
           }
-        case 340: break;
+        case 338: break;
         default:
           if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
             zzAtEOF = true;
index 24a752271131df07f64df34fd34e0f3946cafb5d..d8112d7fc37c99ab66d8b7faf368f06c7d732355 100644 (file)
@@ -578,6 +578,69 @@ mGSTRING_LITERAL = \"\"
 
 {mGSTRING_LITERAL}                                         {  return mGSTRING_LITERAL; }
 
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////// keywords /////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+"package"                                 {  return( kPACKAGE );  }
+"strictfp"                                {  return( kSTRICTFP );  }
+"import"                                  {  return( kIMPORT );  }
+"static"                                  {  return( kSTATIC );  }
+"def"                                     {  return( kDEF );  }
+"class"                                   {  return( kCLASS );  }
+"interface"                               {  return( kINTERFACE );  }
+"enum"                                    {  return( kENUM );  }
+"extends"                                 {  return( kEXTENDS );  }
+"super"                                   {  return( kSUPER );  }
+"void"                                    {  return( kVOID );  }
+"boolean"                                 {  return( kBOOLEAN );  }
+"byte"                                    {  return( kBYTE );  }
+"char"                                    {  return( kCHAR );  }
+"short"                                   {  return( kSHORT );  }
+"int"                                     {  return( kINT );  }
+"float"                                   {  return( kFLOAT );  }
+"long"                                    {  return( kLONG );  }
+"double"                                  {  return( kDOUBLE );  }
+"as"                                      {  return( kAS );  }
+"private"                                 {  return( kPRIVATE );  }
+"abstract"                                {  return( kABSTRACT );  }
+"public"                                  {  return( kPUBLIC );  }
+"protected"                               {  return( kPROTECTED );  }
+"transient"                               {  return( kTRANSIENT );  }
+"native"                                  {  return( kNATIVE );  }
+"synchronized"                            {  return( kSYNCHRONIZED );  }
+"volatile"                                {  return( kVOLATILE );  }
+"default"                                 {  return( kDEFAULT );  }
+"throws"                                  {  return( kTHROWS );  }
+"implements"                              {  return( kIMPLEMENTS );  }
+"this"                                    {  return( kTHIS );  }
+"if"                                      {  return( kIF );  }
+"else"                                    {  return( kELSE );  }
+"while"                                   {  return( kWHILE );  }
+"switch"                                  {  return( kSWITCH );  }
+"for"                                     {  return( kFOR );  }
+"in"                                      {  return( kIN );  }
+"return"                                  {  return( kRETURN );  }
+"break"                                   {  return( kBREAK );  }
+"continue"                                {  return( kCONTINUE );  }
+"throw"                                   {  return( kTHROW );  }
+"assert"                                  {  return( kASSERT );  }
+"case"                                    {  return( kCASE );  }
+"try"                                     {  return( kTRY );  }
+"finally"                                 {  return( kFINALLY );  }
+"catch"                                   {  return( kCATCH );  }
+"instanceof"                              {  return( kINSTANCEOF );  }
+"new"                                     {  return( kNEW );  }
+"true"                                    {  return( kTRUE );  }
+"false"                                   {  return( kFALSE );  }
+"null"                                    {  return( kNULL );  }
+"final"                                   {  return( kFINAL );  }
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////      identifiers      ////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+{mIDENT}                                  {   return mIDENT; }
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 ///////////////////////// Reserved shorthands //////////////////////////////////////////////////////////////////////////
@@ -711,71 +774,6 @@ mGSTRING_LITERAL = \"\"
 "@"                                       {  yybegin(WAIT_FOR_REGEX);
                                              return(mAT);  }
 
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////// keywords /////////////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-"package"                                 {  return( kPACKAGE );  }
-"strictfp"                                {  return( kSTRICTFP );  }
-"import"                                  {  return( kIMPORT );  }
-"static"                                  {  return( kSTATIC );  }
-"def"                                     {  return( kDEF );  }
-"class"                                   {  return( kCLASS );  }
-"interface"                               {  return( kINTERFACE );  }
-"enum"                                    {  return( kENUM );  }
-"extends"                                 {  return( kEXTENDS );  }
-"super"                                   {  return( kSUPER );  }
-"void"                                    {  return( kVOID );  }
-"boolean"                                 {  return( kBOOLEAN );  }
-"byte"                                    {  return( kBYTE );  }
-"char"                                    {  return( kCHAR );  }
-"short"                                   {  return( kSHORT );  }
-"int"                                     {  return( kINT );  }
-"float"                                   {  return( kFLOAT );  }
-"long"                                    {  return( kLONG );  }
-"double"                                  {  return( kDOUBLE );  }
-"as"                                      {  return( kAS );  }
-"private"                                 {  return( kPRIVATE );  }
-"abstract"                                {  return( kABSTRACT );  }
-"public"                                  {  return( kPUBLIC );  }
-"protected"                               {  return( kPROTECTED );  }
-"transient"                               {  return( kTRANSIENT );  }
-"native"                                  {  return( kNATIVE );  }
-"synchronized"                            {  return( kSYNCHRONIZED );  }
-"volatile"                                {  return( kVOLATILE );  }
-"default"                                 {  return( kDEFAULT );  }
-"throws"                                  {  return( kTHROWS );  }
-"implements"                              {  return( kIMPLEMENTS );  }
-"this"                                    {  return( kTHIS );  }
-"if"                                      {  return( kIF );  }
-"else"                                    {  return( kELSE );  }
-"while"                                   {  return( kWHILE );  }
-"switch"                                  {  return( kSWITCH );  }
-"for"                                     {  return( kFOR );  }
-"in"                                      {  return( kIN );  }
-"return"                                  {  return( kRETURN );  }
-"break"                                   {  return( kBREAK );  }
-"continue"                                {  return( kCONTINUE );  }
-"throw"                                   {  return( kTHROW );  }
-"assert"                                  {  return( kASSERT );  }
-"case"                                    {  return( kCASE );  }
-"try"                                     {  return( kTRY );  }
-"finally"                                 {  return( kFINALLY );  }
-"catch"                                   {  return( kCATCH );  }
-"instanceof"                              {  return( kINSTANCEOF );  }
-"new"                                     {  return( kNEW );  }
-"true"                                    {  return( kTRUE );  }
-"false"                                   {  return( kFALSE );  }
-"null"                                    {  return( kNULL );  }
-"final"                                   {  return( kFINAL );  }
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-/////////////////////      identifiers      ////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-{mIDENT}                                  {   return mIDENT; }
-
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 ///////////////////////// Other ////////////////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////