Author: nextgens
Date: 2007-08-13 21:21:19 +0000 (Mon, 13 Aug 2007)
New Revision: 14668

Added:
   trunk/freenet/src/freenet/clients/http/filter/CSSTokenizerFilter.java
Log:
subclipse is silly.

Added: trunk/freenet/src/freenet/clients/http/filter/CSSTokenizerFilter.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/filter/CSSTokenizerFilter.java       
                        (rev 0)
+++ trunk/freenet/src/freenet/clients/http/filter/CSSTokenizerFilter.java       
2007-08-13 21:21:19 UTC (rev 14668)
@@ -0,0 +1,1660 @@
+/* The following code was generated by JFlex 1.4.1 on 13-ao?-07 8:18:51  */
+
+/* This code is part of Freenet. It is distributed under the GNU General
+ * Public License, version 2 (or at your option any later version). See
+ * http://www.gnu.org/ for further details of the GPL. */ 
+package freenet.clients.http.filter;
+import java.io.*;
+import freenet.l10n.L10n;
+/* This class tokenizes a CSS2 Reader stream, writes it out to the output 
Writer, and filters any URLs found */
+// WARNING: this is not as thorough as the HTML parser - new versions of the 
standard could lead to anonymity risks. See comments in SaferFilter.java
+// FIXME: Rewrite this as a proper whitelist filter. It's about half way 
there, it
+// just needs somebody to go over the standard carefully and eliminate 
everything that isn't sufficiently specific (e.g. matching a '-' on its own).
+// Mostly from http://www.w3.org/TR/REC-CSS2/grammar.html
+
+
+/**
+ * This class is a scanner generated by 
+ * <a href="http://www.jflex.de/";>JFlex</a> 1.4.1
+ * on 13-ao?-07 8:18:51  from the specification file
+ * <tt>freenet/clients/http/filter/CSSTokenizerFilter.jflex</tt>
+ */
+class CSSTokenizerFilter {
+
+  /** This character denotes the end of file */
+  public static final int YYEOF = -1;
+
+  /** initial size of the lookahead buffer */
+  private static final int ZZ_BUFFERSIZE = 16384;
+
+  /** lexical states */
+  public static final int YYINITIAL = 0;
+
+  /** 
+   * Translates characters to character classes
+   */
+  private static final String ZZ_CMAP_PACKED = 
+    "\11\0\1\3\1\3\1\0\1\3\1\3\22\0\1\5\1\41\1\11"+
+    "\1\17\1\4\1\63\1\4\1\12\1\23\1\15\1\37\1\55\1\24"+
+    "\1\13\1\14\1\36\12\1\1\64\1\33\1\40\1\44\1\42\1\16"+
+    "\1\25\1\46\1\6\1\54\1\51\1\50\1\52\1\47\1\60\1\26"+
+    "\1\7\1\62\1\22\1\27\1\53\1\31\1\30\1\7\1\21\1\57"+
+    "\1\32\1\20\2\7\1\56\1\7\1\61\1\4\1\2\2\4\1\10"+
+    "\1\4\1\46\1\6\1\54\1\51\1\50\1\52\1\47\1\60\1\26"+
+    "\1\7\1\62\1\22\1\27\1\53\1\31\1\30\1\7\1\21\1\57"+
+    "\1\32\1\20\2\7\1\56\1\7\1\61\1\34\1\45\1\35\1\43"+
+    "\uff81\0";
+
+  /** 
+   * Translates characters to character classes
+   */
+  private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED);
+
+  /** 
+   * Translates DFA states to action switch labels.
+   */
+  private static final int [] ZZ_ACTION = zzUnpackAction();
+
+  private static final String ZZ_ACTION_PACKED_0 =
+    "\1\0\1\1\1\2\1\1\1\3\1\2\2\1\2\4"+
+    "\1\5\1\1\1\2\1\4\1\1\1\6\1\7\1\10"+
+    "\1\4\4\1\3\0\1\11\1\0\1\12\1\13\1\2"+
+    "\2\0\1\14\2\0\1\15\1\0\1\16\1\0\1\15"+
+    "\1\17\1\0\1\17\1\2\1\0\1\20\1\0\5\20"+
+    "\4\0\1\21\1\22\2\0\1\2\2\14\1\0\10\16"+
+    "\1\13\2\16\1\0\1\16\1\23\12\0\2\17\1\2"+
+    "\2\24\6\20\4\0\1\2\2\16\1\0\1\16\2\0"+
+    "\1\25\1\17\1\11\1\24\1\0\1\24\6\20\1\26"+
+    "\1\27\2\0\1\2\1\0\1\16\2\17\5\0\1\30"+
+    "\2\24\1\31\3\20\1\32\2\20\2\0\1\2\1\0"+
+    "\1\16\2\17\1\30\3\0\2\24\1\31\5\20\2\0"+
+    "\1\2\1\0\1\16\1\25\1\17\2\0\2\24\1\31"+
+    "\2\20\1\33\2\0\2\20\6\0\1\34\1\16\1\17"+
+    "\2\30\2\24\1\31\1\20\1\0\1\20\4\0\1\20"+
+    "\1\35\2\33\2\20\2\0\1\34\3\0\1\31\1\0"+
+    "\2\20\1\35\4\0\1\20\1\33\1\20\6\0\1\31"+
+    "\1\20\5\0\1\35\1\0\1\20\1\33\1\36\3\0"+
+    "\1\37\2\34\1\20\4\0\1\35\5\0\1\35\1\0"+
+    "\1\33\1\0\1\40\1\0\1\20\15\0\1\33\2\40"+
+    "\1\20\11\0\1\33\1\20\6\0\1\35\23\0\1\35"+
+    "\3\0\1\35\32\0";
+
+  private static int [] zzUnpackAction() {
+    int [] result = new int[357];
+    int offset = 0;
+    offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
+    return result;
+  }
+
+  private static int zzUnpackAction(String packed, int offset, int [] result) {
+    int i = 0;       /* index in packed string  */
+    int j = offset;  /* index in unpacked array */
+    int l = packed.length();
+    while (i < l) {
+      int count = packed.charAt(i++);
+      int value = packed.charAt(i++);
+      do result[j++] = value; while (--count > 0);
+    }
+    return j;
+  }
+
+
+  /** 
+   * Translates a state to a row index in the transition table
+   */
+  private static final int [] ZZ_ROWMAP = zzUnpackRowMap();
+
+  private static final String ZZ_ROWMAP_PACKED_0 =
+    "\0\0\0\65\0\152\0\237\0\324\0\u0109\0\u013e\0\u0173"+
+    "\0\u01a8\0\u01dd\0\65\0\u0212\0\u0247\0\65\0\u027c\0\65"+
+    "\0\u02b1\0\u02e6\0\u031b\0\u0350\0\u0385\0\u03ba\0\u03ef\0\237"+
+    "\0\u0424\0\u01dd\0\65\0\u0459\0\65\0\65\0\u048e\0\u013e"+
+    "\0\u04c3\0\65\0\u0173\0\u04f8\0\u052d\0\u0562\0\u0597\0\u05cc"+
+    "\0\u0601\0\u0636\0\u066b\0\u06a0\0\u06d5\0\u070a\0\u073f\0\u0774"+
+    "\0\u07a9\0\u07de\0\u0813\0\u0848\0\u087d\0\u08b2\0\u08e7\0\u0385"+
+    "\0\u091c\0\65\0\65\0\u0951\0\u0986\0\u09bb\0\u013e\0\u0173"+
+    "\0\u09f0\0\u0a25\0\u0a5a\0\u0a8f\0\u0ac4\0\u0af9\0\u0b2e\0\u0b63"+
+    "\0\u0b98\0\u0597\0\u0bcd\0\u0c02\0\u0c37\0\u0c6c\0\65\0\u0ca1"+
+    "\0\u0cd6\0\u0d0b\0\u0d40\0\u0d75\0\u0daa\0\u0ddf\0\u0e14\0\u0e49"+
+    "\0\u0e7e\0\u0eb3\0\u0ee8\0\u0f1d\0\u0f52\0\u0f87\0\u0fbc\0\u0ff1"+
+    "\0\u1026\0\u105b\0\u1090\0\u10c5\0\u10fa\0\u112f\0\u1164\0\u1199"+
+    "\0\u11ce\0\u1203\0\u1238\0\u126d\0\u12a2\0\u12d7\0\u130c\0\u1341"+
+    "\0\u1376\0\u13ab\0\u13e0\0\u1415\0\u144a\0\u147f\0\u14b4\0\u14e9"+
+    "\0\u151e\0\u1553\0\u1588\0\65\0\65\0\u15bd\0\u15f2\0\u1627"+
+    "\0\u165c\0\u1691\0\u16c6\0\u16fb\0\u1730\0\u1765\0\u13ab\0\u179a"+
+    "\0\u17cf\0\65\0\u1804\0\u1839\0\u186e\0\u18a3\0\u18d8\0\u190d"+
+    "\0\u073f\0\u1942\0\u1977\0\u19ac\0\u19e1\0\u1a16\0\u1a4b\0\u1a80"+
+    "\0\u1ab5\0\u1aea\0\u1730\0\u1b1f\0\u1b54\0\u1b89\0\u1bbe\0\u1bf3"+
+    "\0\u1c28\0\u1c5d\0\u1c92\0\u1cc7\0\u1cfc\0\u1d31\0\u1d66\0\u1d9b"+
+    "\0\u1dd0\0\u1e05\0\u1e3a\0\u06a0\0\u1e6f\0\u1ea4\0\u1ed9\0\u1f0e"+
+    "\0\u1f43\0\u1f78\0\u1fad\0\u1fe2\0\u2017\0\u204c\0\u2081\0\u20b6"+
+    "\0\u20eb\0\u2120\0\u2155\0\u218a\0\u21bf\0\u21f4\0\u2229\0\65"+
+    "\0\u225e\0\u2293\0\u179a\0\u17cf\0\u22c8\0\65\0\u22fd\0\u2332"+
+    "\0\u2367\0\u239c\0\u23d1\0\u2406\0\u243b\0\u2470\0\u24a5\0\u2367"+
+    "\0\u24da\0\u250f\0\u2544\0\u2579\0\u25ae\0\u25e3\0\u218a\0\u2618"+
+    "\0\u264d\0\u2682\0\u26b7\0\u26ec\0\u2721\0\u2756\0\u239c\0\u278b"+
+    "\0\u27c0\0\u27f5\0\u282a\0\u285f\0\u2894\0\u28c9\0\u28fe\0\u2933"+
+    "\0\u2968\0\u299d\0\u29d2\0\u2a07\0\65\0\u2a3c\0\u2a71\0\u2aa6"+
+    "\0\u2adb\0\u2b10\0\u2b45\0\65\0\u2b7a\0\u2baf\0\u2be4\0\u073f"+
+    "\0\u2c19\0\u2c4e\0\u2c83\0\65\0\u21f4\0\u2229\0\u2cb8\0\u2ced"+
+    "\0\u2d22\0\u2d57\0\u2d8c\0\u243b\0\u2dc1\0\u2df6\0\u2e2b\0\u2e60"+
+    "\0\u2e95\0\u2470\0\u2eca\0\u2eff\0\u2f34\0\65\0\u2f69\0\u2f9e"+
+    "\0\u2fd3\0\u3008\0\u303d\0\u3072\0\u30a7\0\u30dc\0\u3111\0\u3146"+
+    "\0\u317b\0\u31b0\0\u31e5\0\u321a\0\u324f\0\u3284\0\u2933\0\u2968"+
+    "\0\u32b9\0\u32ee\0\u3323\0\u3358\0\u338d\0\u33c2\0\u33f7\0\u342c"+
+    "\0\u3461\0\u3496\0\u34cb\0\u3500\0\u3535\0\u356a\0\u359f\0\u35d4"+
+    "\0\u3609\0\u363e\0\u31b0\0\u3673\0\u36a8\0\u36dd\0\u3712\0\u3747"+
+    "\0\u377c\0\u37b1\0\u37e6\0\u381b\0\u3850\0\u3885\0\u38ba\0\u38ef"+
+    "\0\u3924\0\u3959\0\u398e\0\u39c3\0\u39f8\0\u3a2d\0\u321a\0\u3a62"+
+    "\0\u3a97\0\u3acc\0\u324f\0\u3b01\0\u3b36\0\u3b6b\0\u3ba0\0\u3bd5"+
+    "\0\u3c0a\0\u3c3f\0\u3c74\0\u3ca9\0\u3cde\0\u3d13\0\u3d48\0\u3d7d"+
+    "\0\u3db2\0\u3de7\0\u3e1c\0\u3e51\0\u3e86\0\u3ebb\0\u3ef0\0\u3f25"+
+    "\0\u3f5a\0\u3f8f\0\u3fc4\0\u3ff9\0\u402e";
+
+  private static int [] zzUnpackRowMap() {
+    int [] result = new int[357];
+    int offset = 0;
+    offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
+    return result;
+  }
+
+  private static int zzUnpackRowMap(String packed, int offset, int [] result) {
+    int i = 0;  /* index in packed string  */
+    int j = offset;  /* index in unpacked array */
+    int l = packed.length();
+    while (i < l) {
+      int high = packed.charAt(i++) << 16;
+      result[j++] = high | packed.charAt(i++);
+    }
+    return j;
+  }
+
+  /** 
+   * The transition table of the DFA
+   */
+  private static final int [] ZZ_TRANS = zzUnpackTrans();
+
+  private static final String ZZ_TRANS_PACKED_0 =
+    "\1\2\1\3\1\4\1\5\1\2\1\5\2\6\1\2"+
+    "\1\7\1\10\1\11\1\12\1\13\1\2\1\14\1\15"+
+    "\2\6\1\2\1\16\1\17\5\6\1\20\1\21\1\22"+
+    "\1\23\1\16\1\24\1\25\1\16\1\26\1\2\1\27"+
+    "\7\6\1\16\5\6\1\2\1\16\66\0\1\3\1\30"+
+    "\1\31\1\0\1\31\3\6\2\0\1\6\1\32\3\0"+
+    "\3\6\1\33\1\34\1\0\5\6\1\35\12\0\7\6"+
+    "\1\0\5\6\1\36\2\0\1\37\1\6\1\0\2\6"+
+    "\1\37\37\6\1\37\1\6\3\37\1\6\1\37\10\6"+
+    "\3\0\1\5\1\0\1\5\26\0\1\21\1\22\30\0"+
+    "\1\6\1\30\1\31\1\0\1\31\3\6\2\0\1\6"+
+    "\4\0\3\6\1\33\1\34\1\0\5\6\1\35\12\0"+
+    "\7\6\1\0\5\6\2\0\2\40\1\41\6\40\1\42"+
+    "\53\40\2\43\1\44\7\43\1\42\52\43\1\0\1\45"+
+    "\1\46\3\0\2\47\3\0\1\50\1\32\3\0\3\47"+
+    "\3\0\5\47\13\0\7\47\1\0\5\47\3\0\1\51"+
+    "\64\0\1\52\1\53\3\0\1\52\2\54\2\0\1\54"+
+    "\4\0\3\54\3\0\5\54\13\0\1\52\1\54\3\52"+
+    "\1\54\1\52\1\0\5\54\3\0\1\6\1\30\1\31"+
+    "\1\0\1\31\3\6\2\0\1\6\4\0\1\6\1\55"+
+    "\1\6\1\33\1\34\1\0\5\6\1\35\12\0\7\6"+
+    "\1\56\5\6\3\0\1\57\1\60\3\0\2\57\10\0"+
+    "\3\57\3\0\1\61\1\62\1\63\2\57\13\0\4\57"+
+    "\1\64\1\57\1\65\1\0\5\57\5\0\1\21\1\0"+
+    "\1\21\62\0\1\22\1\0\1\22\116\0\1\66\66\0"+
+    "\1\67\26\0\1\70\1\0\1\70\20\0\1\71\102\0"+
+    "\1\72\64\0\1\73\23\0\1\31\1\0\1\31\16\0"+
+    "\1\34\6\0\1\35\32\0\1\74\1\75\1\34\1\0"+
+    "\1\34\2\74\10\0\3\74\3\0\5\74\13\0\7\74"+
+    "\1\0\5\74\3\0\1\76\1\30\1\6\1\0\1\6"+
+    "\1\76\2\6\2\0\1\6\4\0\3\6\1\33\1\34"+
+    "\1\0\5\6\1\35\12\0\1\76\1\6\3\76\1\6"+
+    "\1\76\1\0\5\6\2\0\2\40\1\41\6\40\1\77"+
+    "\53\40\2\43\1\44\7\43\1\100\52\43\1\0\1\45"+
+    "\1\46\1\101\1\0\1\101\3\47\2\0\1\47\1\32"+
+    "\3\0\1\47\1\102\1\47\3\0\1\103\1\104\1\105"+
+    "\2\47\13\0\1\47\1\106\1\107\1\110\2\47\1\111"+
+    "\1\0\1\47\1\112\1\113\1\47\1\114\1\36\1\115"+
+    "\1\0\1\116\1\47\1\0\2\47\1\116\37\47\1\116"+
+    "\1\47\3\116\1\47\1\116\10\47\1\0\1\47\1\46"+
+    "\1\101\1\0\1\101\3\47\2\0\1\47\4\0\3\47"+
+    "\3\0\5\47\13\0\7\47\1\0\5\47\1\0\1\115"+
+    "\42\0\1\117\23\0\1\51\17\0\1\120\4\0\1\121"+
+    "\1\122\1\123\16\0\1\124\1\125\1\126\2\0\1\127"+
+    "\2\0\1\36\1\130\1\0\1\131\1\36\2\0\1\132"+
+    "\1\53\3\0\1\132\2\54\2\0\1\54\4\0\3\54"+
+    "\3\0\5\54\13\0\1\132\1\54\3\132\1\54\1\132"+
+    "\1\0\5\54\3\0\1\133\1\54\1\0\2\54\1\133"+
+    "\37\54\1\133\1\54\3\133\1\54\1\133\10\54\1\0"+
+    "\1\54\1\53\3\0\3\54\2\0\1\54\4\0\3\54"+
+    "\3\0\5\54\13\0\7\54\1\0\5\54\3\0\1\6"+
+    "\1\30\1\31\1\0\1\31\3\6\2\0\1\6\4\0"+
+    "\2\6\1\134\1\33\1\34\1\0\5\6\1\35\12\0"+
+    "\7\6\1\0\5\6\3\0\1\135\4\0\1\135\7\0"+
+    "\1\136\27\0\1\135\1\0\3\135\1\0\1\135\11\0"+
+    "\1\57\1\60\3\0\3\57\2\0\1\57\4\0\3\57"+
+    "\3\0\5\57\13\0\7\57\1\0\5\57\3\0\1\137"+
+    "\1\57\1\0\2\57\1\137\37\57\1\137\1\57\3\137"+
+    "\1\57\1\137\10\57\1\0\1\57\1\60\3\0\3\57"+
+    "\2\0\1\57\4\0\3\57\3\0\1\57\1\140\3\57"+
+    "\13\0\7\57\1\0\5\57\3\0\1\57\1\60\3\0"+
+    "\3\57\2\0\1\57\4\0\3\57\3\0\5\57\13\0"+
+    "\2\57\1\141\4\57\1\0\5\57\3\0\1\57\1\60"+
+    "\3\0\3\57\2\0\1\57\4\0\3\57\3\0\5\57"+
+    "\13\0\1\142\6\57\1\0\5\57\3\0\1\57\1\60"+
+    "\3\0\3\57\2\0\1\57\4\0\3\57\3\0\3\57"+
+    "\1\143\1\57\13\0\7\57\1\0\5\57\3\0\1\57"+
+    "\1\60\3\0\3\57\2\0\1\57\4\0\3\57\3\0"+
+    "\5\57\13\0\7\57\1\0\2\57\1\144\2\57\2\0"+
+    "\37\66\1\145\25\66\13\0\1\146\100\0\1\147\36\0"+
+    "\1\74\1\75\1\31\1\0\1\31\3\74\2\0\1\74"+
+    "\4\0\3\74\1\0\1\34\1\0\5\74\1\35\12\0"+
+    "\7\74\1\0\5\74\3\0\1\150\1\74\1\0\2\74"+
+    "\1\150\37\74\1\150\1\74\3\150\1\74\1\150\10\74"+
+    "\1\0\1\151\1\30\1\6\1\0\1\6\1\151\2\6"+
+    "\2\0\1\6\4\0\3\6\1\33\1\34\1\0\5\6"+
+    "\1\35\12\0\1\151\1\6\3\151\1\6\1\151\1\0"+
+    "\5\6\5\0\1\101\1\0\1\101\56\0\1\115\1\0"+
+    "\1\47\1\46\1\101\1\0\1\101\3\47\2\0\1\47"+
+    "\4\0\3\47\3\0\5\47\13\0\1\152\6\47\1\0"+
+    "\5\47\1\0\1\115\1\0\1\47\1\46\1\101\1\0"+
+    "\1\101\3\47\2\0\1\47\4\0\3\47\3\0\5\47"+
+    "\13\0\5\47\1\112\1\47\1\0\5\47\1\0\1\115"+
+    "\1\0\1\47\1\46\1\101\1\0\1\101\3\47\2\0"+
+    "\1\47\4\0\3\47\3\0\1\47\1\112\3\47\13\0"+
+    "\7\47\1\0\1\47\1\112\3\47\1\0\1\115\1\0"+
+    "\1\47\1\46\1\101\1\0\1\101\3\47\2\0\1\47"+
+    "\4\0\3\47\3\0\5\47\13\0\6\47\1\112\1\0"+
+    "\1\112\4\47\1\0\1\115\1\0\1\47\1\46\1\101"+
+    "\1\0\1\101\3\47\2\0\1\47\4\0\1\47\1\102"+
+    "\1\47\3\0\5\47\13\0\7\47\1\0\5\47\1\0"+
+    "\1\115\1\0\1\47\1\46\1\101\1\0\1\101\3\47"+
+    "\2\0\1\47\4\0\3\47\3\0\1\47\1\112\3\47"+
+    "\13\0\7\47\1\0\1\112\4\47\1\0\1\115\1\0"+
+    "\1\47\1\46\1\101\1\0\1\101\3\47\2\0\1\47"+
+    "\4\0\3\47\3\0\5\47\13\0\2\47\1\153\4\47"+
+    "\1\0\5\47\1\0\1\115\1\0\1\47\1\46\1\101"+
+    "\1\0\1\101\3\47\2\0\1\47\4\0\3\47\3\0"+
+    "\1\47\1\112\3\47\13\0\7\47\1\0\5\47\1\0"+
+    "\1\115\1\0\1\47\1\46\1\101\1\0\1\101\3\47"+
+    "\2\0\1\47\4\0\3\47\3\0\5\47\13\0\7\47"+
+    "\1\0\3\47\1\112\1\47\1\0\1\115\1\0\1\47"+
+    "\1\46\1\101\1\0\1\101\3\47\2\0\1\47\4\0"+
+    "\3\47\3\0\5\47\13\0\7\47\1\0\2\47\1\113"+
+    "\2\47\1\0\1\115\3\0\1\115\1\0\1\115\12\0"+
+    "\1\154\45\0\1\155\1\46\1\47\1\0\1\47\1\155"+
+    "\2\47\2\0\1\47\4\0\3\47\3\0\5\47\13\0"+
+    "\1\155\1\47\3\155\1\47\1\155\1\0\5\47\1\0"+
+    "\1\115\46\0\1\156\71\0\1\36\40\0\1\36\27\0"+
+    "\1\36\61\0\1\36\1\0\1\36\27\0\1\120\72\0"+
+    "\1\36\26\0\1\36\56\0\1\157\43\0\1\36\116\0"+
+    "\1\36\63\0\1\130\5\0\1\160\1\53\3\0\1\160"+
+    "\2\54\2\0\1\54\4\0\3\54\3\0\5\54\13\0"+
+    "\1\160\1\54\3\160\1\54\1\160\1\0\5\54\3\0"+
+    "\1\161\1\53\1\54\1\0\1\54\1\161\2\54\2\0"+
+    "\1\54\4\0\3\54\3\0\5\54\13\0\1\161\1\54"+
+    "\3\161\1\54\1\161\1\0\5\54\3\0\1\6\1\30"+
+    "\1\31\1\0\1\31\3\6\2\0\1\6\4\0\3\6"+
+    "\1\162\1\34\1\0\5\6\1\35\12\0\7\6\1\0"+
+    "\5\6\3\0\1\163\4\0\1\163\4\0\1\164\2\0"+
+    "\1\165\27\0\1\163\1\0\3\163\1\0\1\163\26\0"+
+    "\1\165\47\0\1\166\1\60\1\57\1\0\1\57\1\166"+
+    "\2\57\2\0\1\57\4\0\3\57\3\0\5\57\13\0"+
+    "\1\166\1\57\3\166\1\57\1\166\1\0\5\57\3\0"+
+    "\1\57\1\60\3\0\3\57\2\0\1\57\4\0\3\57"+
+    "\3\0\2\57\1\167\2\57\13\0\7\57\1\0\5\57"+
+    "\3\0\1\57\1\60\3\0\3\57\2\0\1\57\4\0"+
+    "\3\57\3\0\5\57\13\0\3\57\1\170\3\57\1\0"+
+    "\5\57\3\0\1\57\1\60\3\0\3\57\2\0\1\57"+
+    "\4\0\3\57\3\0\5\57\13\0\1\57\1\171\5\57"+
+    "\1\0\5\57\3\0\1\57\1\60\3\0\3\57\2\0"+
+    "\1\57\4\0\3\57\3\0\5\57\13\0\5\57\1\172"+
+    "\1\57\1\0\5\57\3\0\1\57\1\60\3\0\3\57"+
+    "\2\0\1\57\4\0\3\57\3\0\5\57\13\0\1\173"+
+    "\6\57\1\0\5\57\2\0\36\66\1\174\1\145\25\66"+
+    "\13\0\1\175\101\0\1\176\35\0\1\177\1\75\1\74"+
+    "\1\0\1\74\1\177\2\74\2\0\1\74\4\0\3\74"+
+    "\1\0\1\34\1\0\5\74\1\35\12\0\1\177\1\74"+
+    "\3\177\1\74\1\177\1\0\5\74\3\0\1\200\1\30"+
+    "\1\6\1\0\1\6\1\200\2\6\2\0\1\6\4\0"+
+    "\3\6\1\33\1\34\1\0\5\6\1\35\12\0\1\200"+
+    "\1\6\3\200\1\6\1\200\1\0\5\6\3\0\1\47"+
+    "\1\46\1\101\1\0\1\101\3\47\2\0\1\47\4\0"+
+    "\3\47\3\0\5\47\13\0\3\47\1\112\3\47\1\0"+
+    "\5\47\1\0\1\115\1\0\1\47\1\46\1\101\1\0"+
+    "\1\101\3\47\2\0\1\47\4\0\3\47\3\0\5\47"+
+    "\13\0\1\47\1\112\5\47\1\0\5\47\1\0\1\115"+
+    "\21\0\1\201\44\0\1\202\1\46\1\47\1\0\1\47"+
+    "\1\202\2\47\2\0\1\47\4\0\3\47\3\0\5\47"+
+    "\13\0\1\202\1\47\3\202\1\47\1\202\1\0\5\47"+
+    "\1\0\1\115\51\0\1\36\62\0\1\36\16\0\1\203"+
+    "\1\53\3\0\1\203\2\54\2\0\1\54\4\0\3\54"+
+    "\3\0\5\54\13\0\1\203\1\54\3\203\1\54\1\203"+
+    "\1\0\5\54\3\0\1\204\1\53\1\54\1\0\1\54"+
+    "\1\204\2\54\2\0\1\54\4\0\3\54\3\0\5\54"+
+    "\13\0\1\204\1\54\3\204\1\54\1\204\1\0\5\54"+
+    "\2\0\2\205\1\206\1\207\1\205\1\207\3\205\1\210"+
+    "\1\211\2\205\1\212\5\205\1\0\41\205\1\0\1\213"+
+    "\4\0\1\213\4\0\1\164\2\0\1\214\27\0\1\213"+
+    "\1\0\3\213\1\0\1\213\11\0\1\215\4\0\1\215"+
+    "\37\0\1\215\1\0\3\215\1\0\1\215\26\0\1\214"+
+    "\47\0\1\216\1\60\1\57\1\0\1\57\1\216\2\57"+
+    "\2\0\1\57\4\0\3\57\3\0\5\57\13\0\1\216"+
+    "\1\57\3\216\1\57\1\216\1\0\5\57\3\0\1\57"+
+    "\1\60\3\0\3\57\2\0\1\57\4\0\3\57\3\0"+
+    "\3\57\1\217\1\57\13\0\7\57\1\0\5\57\3\0"+
+    "\1\57\1\60\3\0\3\57\2\0\1\57\4\0\3\57"+
+    "\3\0\1\220\4\57\13\0\7\57\1\0\5\57\3\0"+
+    "\1\57\1\60\3\0\3\57\2\0\1\57\4\0\3\57"+
+    "\3\0\5\57\13\0\2\57\1\221\4\57\1\0\5\57"+
+    "\3\0\1\57\1\60\3\0\3\57\2\0\1\57\4\0"+
+    "\3\57\3\0\4\57\1\222\13\0\7\57\1\0\5\57"+
+    "\3\0\1\57\1\60\3\0\3\57\2\0\1\57\4\0"+
+    "\1\57\1\223\1\57\3\0\5\57\13\0\7\57\1\0"+
+    "\5\57\33\0\1\224\34\0\1\225\1\75\1\74\1\0"+
+    "\1\74\1\225\2\74\2\0\1\74\4\0\3\74\1\0"+
+    "\1\34\1\0\5\74\1\35\12\0\1\225\1\74\3\225"+
+    "\1\74\1\225\1\0\5\74\3\0\1\226\1\30\1\6"+
+    "\1\0\1\6\1\226\2\6\2\0\1\6\4\0\3\6"+
+    "\1\33\1\34\1\0\5\6\1\35\12\0\1\226\1\6"+
+    "\3\226\1\6\1\226\1\0\5\6\24\0\1\227\43\0"+
+    "\1\230\1\46\1\47\1\0\1\47\1\230\2\47\2\0"+
+    "\1\47\4\0\3\47\3\0\5\47\13\0\1\230\1\47"+
+    "\3\230\1\47\1\230\1\0\5\47\1\0\1\115\1\0"+
+    "\1\231\1\53\3\0\1\231\2\54\2\0\1\54\4\0"+
+    "\3\54\3\0\5\54\13\0\1\231\1\54\3\231\1\54"+
+    "\1\231\1\0\5\54\3\0\1\232\1\53\1\54\1\0"+
+    "\1\54\1\232\2\54\2\0\1\54\4\0\3\54\3\0"+
+    "\5\54\13\0\1\232\1\54\3\232\1\54\1\232\1\0"+
+    "\5\54\2\0\2\205\1\206\6\205\2\0\2\205\1\212"+
+    "\5\205\1\0\43\205\1\206\12\205\1\233\47\205\2\210"+
+    "\1\234\6\210\1\235\53\210\2\211\1\236\7\211\1\235"+
+    "\52\211\1\0\1\237\4\0\1\237\4\0\1\164\2\0"+
+    "\1\240\27\0\1\237\1\0\3\237\1\0\1\237\26\0"+
+    "\1\240\47\0\1\241\4\0\1\241\37\0\1\241\1\0"+
+    "\3\241\1\0\1\241\11\0\1\242\1\60\1\57\1\0"+
+    "\1\57\1\242\2\57\2\0\1\57\4\0\3\57\3\0"+
+    "\5\57\13\0\1\242\1\57\3\242\1\57\1\242\1\0"+
+    "\5\57\3\0\1\57\1\60\3\0\3\57\2\0\1\57"+
+    "\4\0\1\57\1\243\1\57\3\0\5\57\13\0\7\57"+
+    "\1\0\5\57\3\0\1\57\1\60\3\0\3\57\2\0"+
+    "\1\57\4\0\3\57\3\0\5\57\13\0\1\244\6\57"+
+    "\1\0\5\57\3\0\1\57\1\60\3\0\3\57\2\0"+
+    "\1\245\4\0\3\57\3\0\5\57\13\0\7\57\1\0"+
+    "\5\57\3\0\1\57\1\60\3\0\3\57\2\0\1\57"+
+    "\4\0\3\57\3\0\5\57\13\0\7\57\1\0\1\57"+
+    "\1\246\3\57\23\0\1\247\44\0\1\250\1\75\1\74"+
+    "\1\0\1\74\1\250\2\74\2\0\1\74\4\0\3\74"+
+    "\1\0\1\34\1\0\5\74\1\35\12\0\1\250\1\74"+
+    "\3\250\1\74\1\250\1\0\5\74\3\0\1\251\1\30"+
+    "\1\6\1\0\1\6\1\251\2\6\2\0\1\6\4\0"+
+    "\3\6\1\33\1\34\1\0\5\6\1\35\12\0\1\251"+
+    "\1\6\3\251\1\6\1\251\1\0\5\6\25\0\1\252"+
+    "\42\0\1\253\1\46\1\47\1\0\1\47\1\253\2\47"+
+    "\2\0\1\47\4\0\3\47\3\0\5\47\13\0\1\253"+
+    "\1\47\3\253\1\47\1\253\1\0\5\47\1\0\1\115"+
+    "\1\0\1\254\1\53\3\0\1\254\2\54\2\0\1\54"+
+    "\4\0\3\54\3\0\5\54\13\0\1\254\1\54\3\254"+
+    "\1\54\1\254\1\0\5\54\3\0\1\255\1\53\1\54"+
+    "\1\0\1\54\1\255\2\54\2\0\1\54\4\0\3\54"+
+    "\3\0\5\54\13\0\1\255\1\54\3\255\1\54\1\255"+
+    "\1\0\5\54\2\0\2\210\1\234\6\210\1\256\53\210"+
+    "\3\0\1\235\1\0\1\235\7\0\1\212\47\0\2\211"+
+    "\1\236\7\211\1\257\52\211\1\0\1\260\4\0\1\260"+
+    "\4\0\1\164\2\0\1\261\27\0\1\260\1\0\3\260"+
+    "\1\0\1\260\26\0\1\261\47\0\1\262\4\0\1\262"+
+    "\37\0\1\262\1\0\3\262\1\0\1\262\11\0\1\263"+
+    "\1\60\1\57\1\0\1\57\1\263\2\57\2\0\1\57"+
+    "\4\0\3\57\3\0\5\57\13\0\1\263\1\57\3\263"+
+    "\1\57\1\263\1\0\5\57\3\0\1\57\1\60\3\0"+
+    "\3\57\2\0\1\57\4\0\3\57\3\0\4\57\1\264"+
+    "\13\0\7\57\1\0\5\57\3\0\1\265\1\266\1\267"+
+    "\1\0\1\267\2\265\1\57\2\0\1\57\4\0\3\265"+
+    "\3\0\5\265\13\0\7\265\1\0\5\265\3\0\1\57"+
+    "\1\60\3\0\3\57\2\0\1\57\4\0\3\57\3\0"+
+    "\5\57\13\0\4\57\1\270\2\57\1\0\5\57\3\0"+
+    "\1\57\1\60\3\0\3\57\2\0\1\57\4\0\3\57"+
+    "\3\0\5\57\13\0\2\57\1\271\4\57\1\0\5\57"+
+    "\34\0\1\272\33\0\1\273\1\75\1\74\1\0\1\74"+
+    "\1\273\2\74\2\0\1\74\4\0\3\74\1\0\1\34"+
+    "\1\0\5\74\1\35\12\0\1\273\1\74\3\273\1\74"+
+    "\1\273\1\0\5\74\3\0\1\6\1\30\1\6\1\0"+
+    "\4\6\2\0\1\6\4\0\3\6\1\33\1\34\1\0"+
+    "\5\6\1\35\12\0\7\6\1\0\5\6\2\0\2\274"+
+    "\1\275\1\252\1\274\1\252\3\274\1\276\1\277\2\274"+
+    "\1\300\5\274\1\0\41\274\1\0\1\301\1\46\1\47"+
+    "\1\0\1\47\1\301\2\47\2\0\1\47\4\0\3\47"+
+    "\3\0\5\47\13\0\1\301\1\47\3\301\1\47\1\301"+
+    "\1\0\5\47\1\0\1\115\1\0\1\302\1\53\1\54"+
+    "\1\0\1\54\1\302\2\54\2\0\1\54\4\0\3\54"+
+    "\3\0\5\54\13\0\1\302\1\54\3\302\1\54\1\302"+
+    "\1\0\5\54\2\0\2\210\1\234\1\256\1\210\1\256"+
+    "\3\210\1\235\3\210\1\303\47\210\2\211\1\236\1\257"+
+    "\1\211\1\257\4\211\1\235\2\211\1\304\47\211\1\0"+
+    "\1\305\4\0\1\305\4\0\1\164\2\0\1\306\27\0"+
+    "\1\305\1\0\3\305\1\0\1\305\26\0\1\306\47\0"+
+    "\1\307\4\0\1\307\37\0\1\307\1\0\3\307\1\0"+
+    "\1\307\11\0\1\310\1\60\1\57\1\0\1\57\1\310"+
+    "\2\57\2\0\1\57\4\0\3\57\3\0\5\57\13\0"+
+    "\1\310\1\57\3\310\1\57\1\310\1\0\5\57\2\0"+
+    "\1\311\1\312\1\313\1\314\1\311\1\314\3\312\1\315"+
+    "\1\316\1\312\1\311\1\0\2\311\1\317\2\312\1\0"+
+    "\2\311\5\312\1\320\12\311\7\312\1\311\5\312\2\311"+
+    "\1\0\1\265\1\266\1\321\1\0\1\321\3\265\2\0"+
+    "\1\265\4\0\3\265\1\0\1\267\1\0\5\265\13\0"+
+    "\7\265\1\0\5\265\3\0\1\322\1\265\1\0\2\265"+
+    "\1\322\37\265\1\322\1\265\3\322\1\265\1\322\10\265"+
+    "\1\0\1\265\1\266\1\267\1\0\1\267\2\265\10\0"+
+    "\3\265\3\0\5\265\13\0\7\265\1\0\5\265\3\0"+
+    "\1\57\1\60\3\0\3\57\2\0\1\57\4\0\3\57"+
+    "\3\0\5\57\13\0\1\323\6\57\1\0\5\57\3\0"+
+    "\1\57\1\60\3\0\3\57\2\0\1\57\4\0\3\57"+
+    "\3\0\4\57\1\324\13\0\7\57\1\0\5\57\50\0"+
+    "\1\325\17\0\1\326\1\75\1\74\1\0\1\74\1\326"+
+    "\2\74\2\0\1\74\4\0\3\74\1\0\1\34\1\0"+
+    "\5\74\1\35\12\0\1\326\1\74\3\326\1\74\1\326"+
+    "\1\0\5\74\2\0\2\274\1\275\6\274\2\0\2\274"+
+    "\1\300\5\274\1\0\43\274\1\275\12\274\1\327\47\274"+
+    "\2\276\1\330\6\276\1\331\53\276\2\277\1\332\7\277"+
+    "\1\331\52\277\1\0\1\47\1\46\1\47\1\0\4\47"+
+    "\2\0\1\47\4\0\3\47\3\0\5\47\13\0\7\47"+
+    "\1\0\5\47\1\0\1\115\1\0\1\54\1\53\1\54"+
+    "\1\0\4\54\2\0\1\54\4\0\3\54\3\0\5\54"+
+    "\13\0\7\54\1\0\5\54\15\0\1\164\52\0\1\333"+
+    "\4\0\1\333\37\0\1\333\1\0\3\333\1\0\1\333"+
+    "\11\0\1\57\1\60\1\57\1\0\4\57\2\0\1\57"+
+    "\4\0\3\57\3\0\5\57\13\0\7\57\1\0\5\57"+
+    "\2\0\2\311\1\334\6\311\2\0\2\311\1\0\5\311"+
+    "\1\0\7\311\1\320\32\311\1\312\1\313\3\311\3\312"+
+    "\2\0\1\312\1\311\1\0\2\311\3\312\1\0\2\311"+
+    "\5\312\1\320\12\311\7\312\1\311\5\312\3\311\1\335"+
+    "\1\336\1\311\2\312\1\335\24\312\1\337\12\312\1\335"+
+    "\1\312\3\335\1\312\1\335\10\312\2\311\1\334\1\314"+
+    "\1\311\1\314\3\311\1\315\1\316\2\311\1\0\2\311"+
+    "\1\340\2\311\1\0\7\311\1\320\31\311\2\315\1\341"+
+    "\6\315\1\342\53\315\2\316\1\343\7\316\1\342\52\316"+
+    "\1\311\1\312\1\313\3\311\3\312\2\0\1\312\1\311"+
+    "\1\0\2\311\1\312\1\344\1\312\1\0\2\311\5\312"+
+    "\1\320\12\311\7\312\1\311\5\312\2\311\3\0\1\321"+
+    "\1\0\1\321\16\0\1\267\41\0\1\345\1\266\1\265"+
+    "\1\0\1\265\1\345\2\265\2\0\1\265\4\0\3\265"+
+    "\1\0\1\267\1\0\5\265\13\0\1\345\1\265\3\345"+
+    "\1\265\1\345\1\0\5\265\3\0\1\57\1\60\3\0"+
+    "\3\57\2\0\1\57\4\0\3\57\3\0\5\57\13\0"+
+    "\6\57\1\346\1\0\5\57\3\0\1\57\1\60\1\347"+
+    "\1\0\1\347\3\57\1\350\1\351\1\57\4\0\3\57"+
+    "\3\0\5\57\13\0\7\57\1\0\5\57\55\0\1\352"+
+    "\12\0\1\74\1\75\1\74\1\0\4\74\2\0\1\74"+
+    "\4\0\3\74\1\0\1\34\1\0\5\74\1\35\12\0"+
+    "\7\74\1\0\5\74\2\0\2\276\1\330\6\276\1\353"+
+    "\53\276\3\0\1\331\1\0\1\331\7\0\1\300\47\0"+
+    "\2\277\1\332\7\277\1\354\52\277\1\0\1\355\4\0"+
+    "\1\355\37\0\1\355\1\0\3\355\1\0\1\355\10\0"+
+    "\2\311\1\334\30\311\1\320\32\311\1\356\1\313\1\312"+
+    "\1\311\1\312\1\356\2\312\2\0\1\312\1\311\1\0"+
+    "\2\311\3\312\1\0\2\311\5\312\1\320\12\311\1\356"+
+    "\1\312\3\356\1\312\1\356\1\311\5\312\3\311\1\312"+
+    "\1\313\3\311\3\312\2\311\1\312\4\311\3\312\3\311"+
+    "\5\312\1\320\12\311\7\312\1\311\5\312\4\311\1\334"+
+    "\6\311\2\0\2\311\1\0\3\311\1\357\1\311\1\0"+
+    "\7\311\1\320\31\311\2\315\1\341\6\315\1\360\53\315"+
+    "\1\0\1\361\1\362\1\363\1\0\1\363\2\361\10\0"+
+    "\3\361\3\0\5\361\1\364\12\0\7\361\1\0\5\361"+
+    "\2\0\2\316\1\343\7\316\1\365\52\316\1\311\1\312"+
+    "\1\313\3\311\3\312\2\0\1\312\1\311\1\0\2\311"+
+    "\2\312\1\366\1\0\2\311\5\312\1\320\12\311\7\312"+
+    "\1\311\5\312\2\311\1\0\1\367\1\266\1\265\1\0"+
+    "\1\265\1\367\2\265\2\0\1\265\4\0\3\265\1\0"+
+    "\1\267\1\0\5\265\13\0\1\367\1\265\3\367\1\265"+
+    "\1\367\1\0\5\265\3\0\1\57\1\60\3\0\3\57"+
+    "\2\0\1\57\4\0\3\57\3\0\5\57\13\0\2\57"+
+    "\1\370\4\57\1\0\5\57\5\0\1\347\1\0\1\347"+
+    "\3\0\1\350\1\351\52\0\2\350\1\371\6\350\1\372"+
+    "\53\350\2\351\1\373\7\351\1\372\52\351\32\0\1\374"+
+    "\32\0\2\276\1\330\1\353\1\276\1\353\3\276\1\331"+
+    "\3\276\1\375\47\276\2\277\1\332\1\354\1\277\1\354"+
+    "\4\277\1\331\2\277\1\376\47\277\1\311\1\377\1\313"+
+    "\1\312\1\311\1\312\1\377\2\312\2\0\1\312\1\311"+
+    "\1\0\2\311\3\312\1\0\2\311\5\312\1\320\12\311"+
+    "\1\377\1\312\3\377\1\312\1\377\1\311\5\312\4\311"+
+    "\1\334\6\311\2\0\2\311\1\0\4\311\1\u0100\1\0"+
+    "\7\311\1\320\31\311\1\315\1\u0101\1\u0102\1\u0103\1\315"+
+    "\1\u0103\2\u0101\1\315\1\342\6\315\3\u0101\3\315\5\u0101"+
+    "\1\u0104\12\315\7\u0101\1\315\5\u0101\2\315\1\0\1\361"+
+    "\1\362\1\u0105\1\0\1\u0105\3\361\2\0\1\361\4\0"+
+    "\3\361\1\0\1\363\1\0\5\361\1\364\12\0\7\361"+
+    "\1\0\5\361\3\0\1\u0106\1\361\1\0\2\361\1\u0106"+
+    "\37\361\1\u0106\1\361\3\u0106\1\361\1\u0106\10\361\1\0"+
+    "\1\361\1\362\1\363\1\0\1\363\2\361\10\0\3\361"+
+    "\3\0\5\361\13\0\7\361\1\0\5\361\2\0\1\316"+
+    "\1\u0107\1\u0108\1\u0109\1\316\1\u0109\2\u0107\2\316\1\342"+
+    "\5\316\3\u0107\3\316\5\u0107\1\u010a\12\316\7\u0107\1\316"+
+    "\5\u0107\2\316\1\311\1\312\1\313\3\311\3\312\2\0"+
+    "\1\312\1\311\1\0\2\311\3\312\1\u010b\2\311\5\312"+
+    "\1\320\12\311\7\312\1\311\5\312\2\311\1\0\1\u010c"+
+    "\1\266\1\265\1\0\1\265\1\u010c\2\265\2\0\1\265"+
+    "\4\0\3\265\1\0\1\267\1\0\5\265\13\0\1\u010c"+
+    "\1\265\3\u010c\1\265\1\u010c\1\0\5\265\2\0\2\350"+
+    "\1\371\6\350\1\u010d\53\350\3\0\1\372\1\0\1\372"+
+    "\25\0\1\u010e\31\0\2\351\1\373\7\351\1\u010f\52\351"+
+    "\1\311\1\u0110\1\313\1\312\1\311\1\312\1\u0110\2\312"+
+    "\2\0\1\312\1\311\1\0\2\311\3\312\1\0\2\311"+
+    "\5\312\1\320\12\311\1\u0110\1\312\3\u0110\1\312\1\u0110"+
+    "\1\311\5\312\4\311\1\334\6\311\2\0\2\311\1\0"+
+    "\5\311\1\u010b\7\311\1\320\31\311\1\315\1\u0101\1\u0102"+
+    "\1\u0111\1\315\1\u0111\3\u0101\1\342\1\315\1\u0101\4\315"+
+    "\3\u0101\1\315\1\u0103\1\315\5\u0101\1\u0104\12\315\7\u0101"+
+    "\1\315\5\u0101\3\315\1\u0112\1\u0113\1\315\2\u0101\1\u0112"+
+    "\2\u0101\1\u0114\34\u0101\1\u0112\1\u0101\3\u0112\1\u0101\1\u0112"+
+    "\10\u0101\1\315\1\u0101\1\u0102\1\u0103\1\315\1\u0103\2\u0101"+
+    "\1\315\1\342\6\315\3\u0101\3\315\5\u0101\13\315\7\u0101"+
+    "\1\315\5\u0101\2\315\3\0\1\u0105\1\0\1\u0105\16\0"+
+    "\1\363\6\0\1\364\32\0\1\u0115\1\362\1\361\1\0"+
+    "\1\361\1\u0115\2\361\2\0\1\361\4\0\3\361\1\0"+
+    "\1\363\1\0\5\361\1\364\12\0\1\u0115\1\361\3\u0115"+
+    "\1\361\1\u0115\1\0\5\361\2\0\1\316\1\u0107\1\u0108"+
+    "\1\u0116\1\316\1\u0116\3\u0107\1\316\1\342\1\u0107\4\316"+
+    "\3\u0107\1\316\1\u0109\1\316\5\u0107\1\u010a\12\316\7\u0107"+
+    "\1\316\5\u0107\3\316\1\u0117\1\u0118\1\316\2\u0107\1\u0117"+
+    "\3\u0107\1\u0119\33\u0107\1\u0117\1\u0107\3\u0117\1\u0107\1\u0117"+
+    "\10\u0107\1\316\1\u0107\1\u0108\1\u0109\1\316\1\u0109\2\u0107"+
+    "\2\316\1\342\5\316\3\u0107\3\316\5\u0107\13\316\7\u0107"+
+    "\1\316\5\u0107\2\316\2\u011a\1\u011b\1\u010b\1\u011a\1\u010b"+
+    "\3\u011a\1\u011c\1\u011d\2\u011a\1\342\5\u011a\1\0\41\u011a"+
+    "\1\0\1\u011e\1\266\1\265\1\0\1\265\1\u011e\2\265"+
+    "\2\0\1\265\4\0\3\265\1\0\1\267\1\0\5\265"+
+    "\13\0\1\u011e\1\265\3\u011e\1\265\1\u011e\1\0\5\265"+
+    "\2\0\2\350\1\371\1\u010d\1\350\1\u010d\3\350\1\372"+
+    "\21\350\1\u011f\31\350\2\351\1\373\1\u010f\1\351\1\u010f"+
+    "\4\351\1\372\20\351\1\u0120\31\351\1\311\1\u0121\1\313"+
+    "\1\312\1\311\1\312\1\u0121\2\312\2\0\1\312\1\311"+
+    "\1\0\2\311\3\312\1\0\2\311\5\312\1\320\12\311"+
+    "\1\u0121\1\312\3\u0121\1\312\1\u0121\1\311\5\312\2\311"+
+    "\2\315\1\341\1\u0111\1\315\1\u0111\3\315\1\342\12\315"+
+    "\1\u0103\6\315\1\u0104\32\315\1\u0122\1\u0102\1\u0101\1\315"+
+    "\1\u0101\1\u0122\2\u0101\1\342\1\315\1\u0101\4\315\3\u0101"+
+    "\1\315\1\u0103\1\315\5\u0101\1\u0104\12\315\1\u0122\1\u0101"+
+    "\3\u0122\1\u0101\1\u0122\1\315\5\u0101\3\315\1\u0101\1\u0102"+
+    "\1\u0111\1\315\1\u0111\3\u0101\1\360\1\315\1\u0101\4\315"+
+    "\3\u0101\1\315\1\u0103\1\315\5\u0101\1\u0104\12\315\7\u0101"+
+    "\1\315\5\u0101\3\315\1\u0101\1\u0102\1\u0123\1\315\1\u0123"+
+    "\3\u0101\1\342\1\315\1\u0101\4\315\3\u0101\1\315\1\u0103"+
+    "\1\315\5\u0101\1\u0104\12\315\7\u0101\1\315\5\u0101\2\315"+
+    "\1\0\1\u0124\1\362\1\361\1\0\1\361\1\u0124\2\361"+
+    "\2\0\1\361\4\0\3\361\1\0\1\363\1\0\5\361"+
+    "\1\364\12\0\1\u0124\1\361\3\u0124\1\361\1\u0124\1\0"+
+    "\5\361\2\0\2\316\1\343\1\u0116\1\316\1\u0116\4\316"+
+    "\1\342\11\316\1\u0109\6\316\1\u010a\32\316\1\u0125\1\u0108"+
+    "\1\u0107\1\316\1\u0107\1\u0125\2\u0107\1\316\1\342\1\u0107"+
+    "\4\316\3\u0107\1\316\1\u0109\1\316\5\u0107\1\u010a\12\316"+
+    "\1\u0125\1\u0107\3\u0125\1\u0107\1\u0125\1\316\5\u0107\3\316"+
+    "\1\u0107\1\u0108\1\u0116\1\316\1\u0116\3\u0107\1\316\1\365"+
+    "\1\u0107\4\316\3\u0107\1\316\1\u0109\1\316\5\u0107\1\u010a"+
+    "\12\316\7\u0107\1\316\5\u0107\3\316\1\u0107\1\u0108\1\u0126"+
+    "\1\316\1\u0126\3\u0107\1\316\1\342\1\u0107\4\316\3\u0107"+
+    "\1\316\1\u0109\1\316\5\u0107\1\u010a\12\316\7\u0107\1\316"+
+    "\5\u0107\2\316\2\u011a\1\u011b\6\u011a\2\0\2\u011a\1\342"+
+    "\5\u011a\1\0\43\u011a\1\u011b\12\u011a\1\u0127\47\u011a\2\u011c"+
+    "\1\u0128\6\u011c\1\u0129\53\u011c\2\u011d\1\u012a\7\u011d\1\u0129"+
+    "\52\u011d\1\0\1\u012b\1\266\1\265\1\0\1\265\1\u012b"+
+    "\2\265\2\0\1\265\4\0\3\265\1\0\1\267\1\0"+
+    "\5\265\13\0\1\u012b\1\265\3\u012b\1\265\1\u012b\1\0"+
+    "\5\265\2\0\1\311\1\u012c\1\313\1\312\1\311\1\312"+
+    "\1\u012c\2\312\2\0\1\312\1\311\1\0\2\311\3\312"+
+    "\1\0\2\311\5\312\1\320\12\311\1\u012c\1\312\3\u012c"+
+    "\1\312\1\u012c\1\311\5\312\2\311\1\315\1\u012d\1\u0102"+
+    "\1\u0101\1\315\1\u0101\1\u012d\2\u0101\1\342\1\315\1\u0101"+
+    "\4\315\3\u0101\1\315\1\u0103\1\315\5\u0101\1\u0104\12\315"+
+    "\1\u012d\1\u0101\3\u012d\1\u0101\1\u012d\1\315\5\u0101\3\315"+
+    "\1\u0101\1\u0102\1\u0123\1\315\1\u0123\2\u0101\1\315\1\342"+
+    "\6\315\3\u0101\1\315\1\u0103\1\315\5\u0101\1\u0104\12\315"+
+    "\7\u0101\1\315\5\u0101\2\315\1\0\1\u012e\1\362\1\361"+
+    "\1\0\1\361\1\u012e\2\361\2\0\1\361\4\0\3\361"+
+    "\1\0\1\363\1\0\5\361\1\364\12\0\1\u012e\1\361"+
+    "\3\u012e\1\361\1\u012e\1\0\5\361\2\0\1\316\1\u012f"+
+    "\1\u0108\1\u0107\1\316\1\u0107\1\u012f\2\u0107\1\316\1\342"+
+    "\1\u0107\4\316\3\u0107\1\316\1\u0109\1\316\5\u0107\1\u010a"+
+    "\12\316\1\u012f\1\u0107\3\u012f\1\u0107\1\u012f\1\316\5\u0107"+
+    "\3\316\1\u0107\1\u0108\1\u0126\1\316\1\u0126\2\u0107\2\316"+
+    "\1\342\5\316\3\u0107\1\316\1\u0109\1\316\5\u0107\1\u010a"+
+    "\12\316\7\u0107\1\316\5\u0107\2\316\1\u011a\1\u0130\1\u0131"+
+    "\1\u0132\1\u011a\1\u0132\2\u0130\1\u011a\2\0\2\u011a\1\342"+
+    "\2\u011a\3\u0130\1\0\2\u011a\5\u0130\1\u0133\12\u011a\7\u0130"+
+    "\1\u011a\5\u0130\2\u011a\2\u011c\1\u0128\6\u011c\1\u0134\53\u011c"+
+    "\3\0\1\u0129\1\0\1\u0129\7\0\1\342\47\0\2\u011d"+
+    "\1\u012a\7\u011d\1\u0135\52\u011d\1\0\1\265\1\266\1\265"+
+    "\1\0\4\265\2\0\1\265\4\0\3\265\1\0\1\267"+
+    "\1\0\5\265\13\0\7\265\1\0\5\265\2\0\1\311"+
+    "\1\312\1\313\1\312\1\311\4\312\2\0\1\312\1\311"+
+    "\1\0\2\311\3\312\1\0\2\311\5\312\1\320\12\311"+
+    "\7\312\1\311\5\312\2\311\1\315\1\u0136\1\u0102\1\u0101"+
+    "\1\315\1\u0101\1\u0136\2\u0101\1\342\1\315\1\u0101\4\315"+
+    "\3\u0101\1\315\1\u0103\1\315\5\u0101\1\u0104\12\315\1\u0136"+
+    "\1\u0101\3\u0136\1\u0101\1\u0136\1\315\5\u0101\2\315\1\0"+
+    "\1\u0137\1\362\1\361\1\0\1\361\1\u0137\2\361\2\0"+
+    "\1\361\4\0\3\361\1\0\1\363\1\0\5\361\1\364"+
+    "\12\0\1\u0137\1\361\3\u0137\1\361\1\u0137\1\0\5\361"+
+    "\2\0\1\316\1\u0138\1\u0108\1\u0107\1\316\1\u0107\1\u0138"+
+    "\2\u0107\1\316\1\342\1\u0107\4\316\3\u0107\1\316\1\u0109"+
+    "\1\316\5\u0107\1\u010a\12\316\1\u0138\1\u0107\3\u0138\1\u0107"+
+    "\1\u0138\1\316\5\u0107\2\316\1\u011a\1\u0130\1\u0131\1\u0139"+
+    "\1\u011a\1\u0139\3\u0130\2\0\1\u0130\1\u011a\1\342\2\u011a"+
+    "\3\u0130\1\0\1\u0132\1\u011a\5\u0130\1\u0133\12\u011a\7\u0130"+
+    "\1\u011a\5\u0130\3\u011a\1\u013a\1\u013b\1\u011a\2\u0130\1\u013a"+
+    "\6\u0130\1\u013c\30\u0130\1\u013a\1\u0130\3\u013a\1\u0130\1\u013a"+
+    "\10\u0130\1\u011a\1\u0130\1\u0131\1\u0132\1\u011a\1\u0132\2\u0130"+
+    "\1\u011a\2\0\2\u011a\1\342\2\u011a\3\u0130\1\0\2\u011a"+
+    "\5\u0130\13\u011a\7\u0130\1\u011a\5\u0130\2\u011a\2\u011c\1\u0128"+
+    "\1\u0134\1\u011c\1\u0134\3\u011c\1\u0129\3\u011c\1\u013d\47\u011c"+
+    "\2\u011d\1\u012a\1\u0135\1\u011d\1\u0135\4\u011d\1\u0129\2\u011d"+
+    "\1\u013e\47\u011d\1\315\1\u013f\1\u0102\1\u0101\1\315\1\u0101"+
+    "\1\u013f\2\u0101\1\342\1\315\1\u0101\4\315\3\u0101\1\315"+
+    "\1\u0103\1\315\5\u0101\1\u0104\12\315\1\u013f\1\u0101\3\u013f"+
+    "\1\u0101\1\u013f\1\315\5\u0101\2\315\1\0\1\u0140\1\362"+
+    "\1\361\1\0\1\361\1\u0140\2\361\2\0\1\361\4\0"+
+    "\3\361\1\0\1\363\1\0\5\361\1\364\12\0\1\u0140"+
+    "\1\361\3\u0140\1\361\1\u0140\1\0\5\361\2\0\1\316"+
+    "\1\u0141\1\u0108\1\u0107\1\316\1\u0107\1\u0141\2\u0107\1\316"+
+    "\1\342\1\u0107\4\316\3\u0107\1\316\1\u0109\1\316\5\u0107"+
+    "\1\u010a\12\316\1\u0141\1\u0107\3\u0141\1\u0107\1\u0141\1\316"+
+    "\5\u0107\2\316\2\u011a\1\u011b\1\u0139\1\u011a\1\u0139\3\u011a"+
+    "\2\0\2\u011a\1\342\5\u011a\1\0\1\u0132\6\u011a\1\u0133"+
+    "\32\u011a\1\u0142\1\u0131\1\u0130\1\u011a\1\u0130\1\u0142\2\u0130"+
+    "\2\0\1\u0130\1\u011a\1\342\2\u011a\3\u0130\1\0\1\u0132"+
+    "\1\u011a\5\u0130\1\u0133\12\u011a\1\u0142\1\u0130\3\u0142\1\u0130"+
+    "\1\u0142\1\u011a\5\u0130\3\u011a\1\u0130\1\u0131\1\u0139\1\u011a"+
+    "\1\u0139\3\u0130\2\u011a\1\u0130\1\u011a\1\u0127\2\u011a\3\u0130"+
+    "\1\u011a\1\u0132\1\u011a\5\u0130\1\u0133\12\u011a\7\u0130\1\u011a"+
+    "\5\u0130\3\u011a\1\u0130\1\u0131\1\u0143\1\u011a\1\u0143\3\u0130"+
+    "\2\0\1\u0130\1\u011a\1\342\2\u011a\3\u0130\1\0\1\u0132"+
+    "\1\u011a\5\u0130\1\u0133\12\u011a\7\u0130\1\u011a\5\u0130\2\u011a"+
+    "\1\u011c\1\u0144\1\u0145\1\u0146\1\u011c\1\u0146\2\u0144\1\u011c"+
+    "\1\u0129\6\u011c\3\u0144\3\u011c\5\u0144\1\u0147\12\u011c\7\u0144"+
+    "\1\u011c\5\u0144\2\u011c\1\u011d\1\u0148\1\u0149\1\u014a\1\u011d"+
+    "\1\u014a\2\u0148\2\u011d\1\u0129\5\u011d\3\u0148\3\u011d\5\u0148"+
+    "\1\u014b\12\u011d\7\u0148\1\u011d\5\u0148\2\u011d\1\315\1\u014c"+
+    "\1\u0102\1\u0101\1\315\1\u0101\1\u014c\2\u0101\1\342\1\315"+
+    "\1\u0101\4\315\3\u0101\1\315\1\u0103\1\315\5\u0101\1\u0104"+
+    "\12\315\1\u014c\1\u0101\3\u014c\1\u0101\1\u014c\1\315\5\u0101"+
+    "\2\315\1\0\1\361\1\362\1\361\1\0\4\361\2\0"+
+    "\1\361\4\0\3\361\1\0\1\363\1\0\5\361\1\364"+
+    "\12\0\7\361\1\0\5\361\2\0\1\316\1\u014d\1\u0108"+
+    "\1\u0107\1\316\1\u0107\1\u014d\2\u0107\1\316\1\342\1\u0107"+
+    "\4\316\3\u0107\1\316\1\u0109\1\316\5\u0107\1\u010a\12\316"+
+    "\1\u014d\1\u0107\3\u014d\1\u0107\1\u014d\1\316\5\u0107\2\316"+
+    "\1\u011a\1\u014e\1\u0131\1\u0130\1\u011a\1\u0130\1\u014e\2\u0130"+
+    "\2\0\1\u0130\1\u011a\1\342\2\u011a\3\u0130\1\0\1\u0132"+
+    "\1\u011a\5\u0130\1\u0133\12\u011a\1\u014e\1\u0130\3\u014e\1\u0130"+
+    "\1\u014e\1\u011a\5\u0130\3\u011a\1\u0130\1\u0131\1\u0143\1\u011a"+
+    "\1\u0143\2\u0130\1\u011a\2\0\2\u011a\1\342\2\u011a\3\u0130"+
+    "\1\0\1\u0132\1\u011a\5\u0130\1\u0133\12\u011a\7\u0130\1\u011a"+
+    "\5\u0130\2\u011a\1\u011c\1\u0144\1\u0145\1\u014f\1\u011c\1\u014f"+
+    "\3\u0144\1\u0129\1\u011c\1\u0144\4\u011c\3\u0144\1\u011c\1\u0146"+
+    "\1\u011c\5\u0144\1\u0147\12\u011c\7\u0144\1\u011c\5\u0144\3\u011c"+
+    "\1\u0150\1\u0151\1\u011c\2\u0144\1\u0150\2\u0144\1\u0152\34\u0144"+
+    "\1\u0150\1\u0144\3\u0150\1\u0144\1\u0150\10\u0144\1\u011c\1\u0144"+
+    "\1\u0145\1\u0146\1\u011c\1\u0146\2\u0144\1\u011c\1\u0129\6\u011c"+
+    "\3\u0144\3\u011c\5\u0144\13\u011c\7\u0144\1\u011c\5\u0144\2\u011c"+
+    "\1\u011d\1\u0148\1\u0149\1\u0153\1\u011d\1\u0153\3\u0148\1\u011d"+
+    "\1\u0129\1\u0148\4\u011d\3\u0148\1\u011d\1\u014a\1\u011d\5\u0148"+
+    "\1\u014b\12\u011d\7\u0148\1\u011d\5\u0148\3\u011d\1\u0154\1\u0155"+
+    "\1\u011d\2\u0148\1\u0154\3\u0148\1\u0156\33\u0148\1\u0154\1\u0148"+
+    "\3\u0154\1\u0148\1\u0154\10\u0148\1\u011d\1\u0148\1\u0149\1\u014a"+
+    "\1\u011d\1\u014a\2\u0148\2\u011d\1\u0129\5\u011d\3\u0148\3\u011d"+
+    "\5\u0148\13\u011d\7\u0148\1\u011d\5\u0148\2\u011d\1\315\1\u0101"+
+    "\1\u0102\1\u0101\1\315\4\u0101\1\342\1\315\1\u0101\4\315"+
+    "\3\u0101\1\315\1\u0103\1\315\5\u0101\1\u0104\12\315\7\u0101"+
+    "\1\315\5\u0101\2\315\1\316\1\u0107\1\u0108\1\u0107\1\316"+
+    "\4\u0107\1\316\1\342\1\u0107\4\316\3\u0107\1\316\1\u0109"+
+    "\1\316\5\u0107\1\u010a\12\316\7\u0107\1\316\5\u0107\2\316"+
+    "\1\u011a\1\u0157\1\u0131\1\u0130\1\u011a\1\u0130\1\u0157\2\u0130"+
+    "\2\0\1\u0130\1\u011a\1\342\2\u011a\3\u0130\1\0\1\u0132"+
+    "\1\u011a\5\u0130\1\u0133\12\u011a\1\u0157\1\u0130\3\u0157\1\u0130"+
+    "\1\u0157\1\u011a\5\u0130\2\u011a\2\u011c\1\u0128\1\u014f\1\u011c"+
+    "\1\u014f\3\u011c\1\u0129\12\u011c\1\u0146\6\u011c\1\u0147\32\u011c"+
+    "\1\u0158\1\u0145\1\u0144\1\u011c\1\u0144\1\u0158\2\u0144\1\u0129"+
+    "\1\u011c\1\u0144\4\u011c\3\u0144\1\u011c\1\u0146\1\u011c\5\u0144"+
+    "\1\u0147\12\u011c\1\u0158\1\u0144\3\u0158\1\u0144\1\u0158\1\u011c"+
+    "\5\u0144\3\u011c\1\u0144\1\u0145\1\u014f\1\u011c\1\u014f\3\u0144"+
+    "\1\u0134\1\u011c\1\u0144\4\u011c\3\u0144\1\u011c\1\u0146\1\u011c"+
+    "\5\u0144\1\u0147\12\u011c\7\u0144\1\u011c\5\u0144\3\u011c\1\u0144"+
+    "\1\u0145\1\u0159\1\u011c\1\u0159\3\u0144\1\u0129\1\u011c\1\u0144"+
+    "\1\u011c\1\u013d\2\u011c\3\u0144\1\u011c\1\u0146\1\u011c\5\u0144"+
+    "\1\u0147\12\u011c\7\u0144\1\u011c\5\u0144\2\u011c\2\u011d\1\u012a"+
+    "\1\u0153\1\u011d\1\u0153\4\u011d\1\u0129\11\u011d\1\u014a\6\u011d"+
+    "\1\u014b\32\u011d\1\u015a\1\u0149\1\u0148\1\u011d\1\u0148\1\u015a"+
+    "\2\u0148\1\u011d\1\u0129\1\u0148\4\u011d\3\u0148\1\u011d\1\u014a"+
+    "\1\u011d\5\u0148\1\u014b\12\u011d\1\u015a\1\u0148\3\u015a\1\u0148"+
+    "\1\u015a\1\u011d\5\u0148\3\u011d\1\u0148\1\u0149\1\u0153\1\u011d"+
+    "\1\u0153\3\u0148\1\u011d\1\u0135\1\u0148\4\u011d\3\u0148\1\u011d"+
+    "\1\u014a\1\u011d\5\u0148\1\u014b\12\u011d\7\u0148\1\u011d\5\u0148"+
+    "\3\u011d\1\u0148\1\u0149\1\u015b\1\u011d\1\u015b\3\u0148\1\u011d"+
+    "\1\u0129\1\u0148\1\u011d\1\u013e\2\u011d\3\u0148\1\u011d\1\u014a"+
+    "\1\u011d\5\u0148\1\u014b\12\u011d\7\u0148\1\u011d\5\u0148\2\u011d"+
+    "\1\u011a\1\u015c\1\u0131\1\u0130\1\u011a\1\u0130\1\u015c\2\u0130"+
+    "\2\0\1\u0130\1\u011a\1\342\2\u011a\3\u0130\1\0\1\u0132"+
+    "\1\u011a\5\u0130\1\u0133\12\u011a\1\u015c\1\u0130\3\u015c\1\u0130"+
+    "\1\u015c\1\u011a\5\u0130\2\u011a\1\u011c\1\u015d\1\u0145\1\u0144"+
+    "\1\u011c\1\u0144\1\u015d\2\u0144\1\u0129\1\u011c\1\u0144\4\u011c"+
+    "\3\u0144\1\u011c\1\u0146\1\u011c\5\u0144\1\u0147\12\u011c\1\u015d"+
+    "\1\u0144\3\u015d\1\u0144\1\u015d\1\u011c\5\u0144\4\u011c\1\u0128"+
+    "\1\u0159\1\u011c\1\u0159\3\u011c\1\u0129\3\u011c\1\u013d\6\u011c"+
+    "\1\u0146\6\u011c\1\u0147\31\u011c\1\u011d\1\u015e\1\u0149\1\u0148"+
+    "\1\u011d\1\u0148\1\u015e\2\u0148\1\u011d\1\u0129\1\u0148\4\u011d"+
+    "\3\u0148\1\u011d\1\u014a\1\u011d\5\u0148\1\u014b\12\u011d\1\u015e"+
+    "\1\u0148\3\u015e\1\u0148\1\u015e\1\u011d\5\u0148\4\u011d\1\u012a"+
+    "\1\u015b\1\u011d\1\u015b\4\u011d\1\u0129\2\u011d\1\u013e\6\u011d"+
+    "\1\u014a\6\u011d\1\u014b\31\u011d\1\u011a\1\u015f\1\u0131\1\u0130"+
+    "\1\u011a\1\u0130\1\u015f\2\u0130\2\0\1\u0130\1\u011a\1\342"+
+    "\2\u011a\3\u0130\1\0\1\u0132\1\u011a\5\u0130\1\u0133\12\u011a"+
+    "\1\u015f\1\u0130\3\u015f\1\u0130\1\u015f\1\u011a\5\u0130\2\u011a"+
+    "\1\u011c\1\u0160\1\u0145\1\u0144\1\u011c\1\u0144\1\u0160\2\u0144"+
+    "\1\u0129\1\u011c\1\u0144\4\u011c\3\u0144\1\u011c\1\u0146\1\u011c"+
+    "\5\u0144\1\u0147\12\u011c\1\u0160\1\u0144\3\u0160\1\u0144\1\u0160"+
+    "\1\u011c\5\u0144\2\u011c\1\u011d\1\u0161\1\u0149\1\u0148\1\u011d"+
+    "\1\u0148\1\u0161\2\u0148\1\u011d\1\u0129\1\u0148\4\u011d\3\u0148"+
+    "\1\u011d\1\u014a\1\u011d\5\u0148\1\u014b\12\u011d\1\u0161\1\u0148"+
+    "\3\u0161\1\u0148\1\u0161\1\u011d\5\u0148\2\u011d\1\u011a\1\u0130"+
+    "\1\u0131\1\u0130\1\u011a\4\u0130\2\0\1\u0130\1\u011a\1\342"+
+    "\2\u011a\3\u0130\1\0\1\u0132\1\u011a\5\u0130\1\u0133\12\u011a"+
+    "\7\u0130\1\u011a\5\u0130\2\u011a\1\u011c\1\u0162\1\u0145\1\u0144"+
+    "\1\u011c\1\u0144\1\u0162\2\u0144\1\u0129\1\u011c\1\u0144\4\u011c"+
+    "\3\u0144\1\u011c\1\u0146\1\u011c\5\u0144\1\u0147\12\u011c\1\u0162"+
+    "\1\u0144\3\u0162\1\u0144\1\u0162\1\u011c\5\u0144\2\u011c\1\u011d"+
+    "\1\u0163\1\u0149\1\u0148\1\u011d\1\u0148\1\u0163\2\u0148\1\u011d"+
+    "\1\u0129\1\u0148\4\u011d\3\u0148\1\u011d\1\u014a\1\u011d\5\u0148"+
+    "\1\u014b\12\u011d\1\u0163\1\u0148\3\u0163\1\u0148\1\u0163\1\u011d"+
+    "\5\u0148\2\u011d\1\u011c\1\u0164\1\u0145\1\u0144\1\u011c\1\u0144"+
+    "\1\u0164\2\u0144\1\u0129\1\u011c\1\u0144\4\u011c\3\u0144\1\u011c"+
+    "\1\u0146\1\u011c\5\u0144\1\u0147\12\u011c\1\u0164\1\u0144\3\u0164"+
+    "\1\u0144\1\u0164\1\u011c\5\u0144\2\u011c\1\u011d\1\u0165\1\u0149"+
+    "\1\u0148\1\u011d\1\u0148\1\u0165\2\u0148\1\u011d\1\u0129\1\u0148"+
+    "\4\u011d\3\u0148\1\u011d\1\u014a\1\u011d\5\u0148\1\u014b\12\u011d"+
+    "\1\u0165\1\u0148\3\u0165\1\u0148\1\u0165\1\u011d\5\u0148\2\u011d"+
+    "\1\u011c\1\u0144\1\u0145\1\u0144\1\u011c\4\u0144\1\u0129\1\u011c"+
+    "\1\u0144\4\u011c\3\u0144\1\u011c\1\u0146\1\u011c\5\u0144\1\u0147"+
+    "\12\u011c\7\u0144\1\u011c\5\u0144\2\u011c\1\u011d\1\u0148\1\u0149"+
+    "\1\u0148\1\u011d\4\u0148\1\u011d\1\u0129\1\u0148\4\u011d\3\u0148"+
+    "\1\u011d\1\u014a\1\u011d\5\u0148\1\u014b\12\u011d\7\u0148\1\u011d"+
+    "\5\u0148\2\u011d";
+
+  private static int [] zzUnpackTrans() {
+    int [] result = new int[16483];
+    int offset = 0;
+    offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
+    return result;
+  }
+
+  private static int zzUnpackTrans(String packed, int offset, int [] result) {
+    int i = 0;       /* index in packed string  */
+    int j = offset;  /* index in unpacked array */
+    int l = packed.length();
+    while (i < l) {
+      int count = packed.charAt(i++);
+      int value = packed.charAt(i++);
+      value--;
+      do result[j++] = value; while (--count > 0);
+    }
+    return j;
+  }
+
+
+  /* error codes */
+  private static final int ZZ_UNKNOWN_ERROR = 0;
+  private static final int ZZ_NO_MATCH = 1;
+  private static final int ZZ_PUSHBACK_2BIG = 2;
+
+  /* error messages for the codes above */
+  private static final String ZZ_ERROR_MSG[] = {
+    "Unkown internal scanner error",
+    "Error: could not match input",
+    "Error: pushback value was too large"
+  };
+
+  /**
+   * ZZ_ATTRIBUTE[aState] contains the attributes of state <code>aState</code>
+   */
+  private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();
+
+  private static final String ZZ_ATTRIBUTE_PACKED_0 =
+    "\1\0\1\11\10\1\1\11\2\1\1\11\1\1\1\11"+
+    "\7\1\3\0\1\11\1\0\2\11\1\1\2\0\1\11"+
+    "\2\0\1\1\1\0\1\1\1\0\2\1\1\0\2\1"+
+    "\1\0\1\1\1\0\5\1\4\0\2\11\2\0\3\1"+
+    "\1\0\13\1\1\0\1\1\1\11\12\0\13\1\4\0"+
+    "\3\1\1\0\1\1\2\0\4\1\1\0\7\1\2\11"+
+    "\2\0\1\1\1\0\3\1\5\0\1\11\11\1\2\0"+
+    "\1\1\1\0\4\1\3\0\10\1\2\0\1\1\1\0"+
+    "\3\1\2\0\6\1\2\0\2\1\6\0\1\11\5\1"+
+    "\1\11\2\1\1\0\1\1\4\0\6\1\2\0\1\1"+
+    "\3\0\1\1\1\0\3\1\4\0\3\1\6\0\1\11"+
+    "\1\1\5\0\1\11\1\0\3\1\3\0\1\11\3\1"+
+    "\4\0\1\1\5\0\1\1\1\0\1\1\1\0\1\11"+
+    "\1\0\1\1\15\0\4\1\11\0\2\1\6\0\1\1"+
+    "\23\0\1\1\3\0\1\1\32\0";
+
+  private static int [] zzUnpackAttribute() {
+    int [] result = new int[357];
+    int offset = 0;
+    offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
+    return result;
+  }
+
+  private static int zzUnpackAttribute(String packed, int offset, int [] 
result) {
+    int i = 0;       /* index in packed string  */
+    int j = offset;  /* index in unpacked array */
+    int l = packed.length();
+    while (i < l) {
+      int count = packed.charAt(i++);
+      int value = packed.charAt(i++);
+      do result[j++] = value; while (--count > 0);
+    }
+    return j;
+  }
+
+  /** the input device */
+  private java.io.Reader zzReader;
+
+  /** the current state of the DFA */
+  private int zzState;
+
+  /** the current lexical state */
+  private int zzLexicalState = YYINITIAL;
+
+  /** this buffer contains the current text to be matched and is
+      the source of the yytext() string */
+  private char zzBuffer[] = new char[ZZ_BUFFERSIZE];
+
+  /** the textposition at the last accepting state */
+  private int zzMarkedPos;
+
+  /** the textposition at the last state to be included in yytext */
+  private int zzPushbackPos;
+
+  /** the current text position in the buffer */
+  private int zzCurrentPos;
+
+  /** startRead marks the beginning of the yytext() string in the buffer */
+  private int zzStartRead;
+
+  /** endRead marks the last character in the buffer, that has been read
+      from input */
+  private int zzEndRead;
+
+  /** zzAtEOF == true <=> the scanner is at the EOF */
+  private boolean zzAtEOF;
+
+  /* user code: */
+       // Put stuff to include in the class here
+       String detectedCharset;
+
+       // External flag
+       boolean paranoidStringCheck = false;
+       boolean deleteErrors = true;
+       boolean debug = true;
+       
+       // Internal flags
+       boolean postBadImportFlag = false; // both URLs and @import's
+       boolean importFlag = false;
+       boolean urlFlag = false;
+
+       // Writer
+       Writer w = null; // Will NPE if not initialized properly
+
+       public void parse () throws IOException {
+               while (yylex() != null);
+       }
+       
+       CSSTokenizerFilter(Reader r, Writer w, boolean paranoidStringCheck) {
+               this(r);
+               this.w = w;
+               this.paranoidStringCheck = paranoidStringCheck;
+       }
+
+       void throwError(String s) throws IOException {
+               throw new IllegalStateException("You MUST override 
throwError!");
+       }
+
+       String processImportURL(String s) throws CommentException {
+               throw new IllegalStateException("You MUST override 
processImportURL!");
+       }
+
+       String processURL(String s) throws CommentException {
+               throw new IllegalStateException("You MUST override 
processURL!");
+       }
+       
+       void log(String s) {
+               System.err.println("CSSTokenizerFilter: "+s);
+       }
+
+       void logError(String s) {
+               System.err.println("CSSTokenizerFilter ERROR: "+s);
+       }
+       
+       static String unquote(String s, char c) {
+               if(s.length() > 1) {
+                       if(s.charAt(s.length()-1) == c) {
+                               s = s.substring(1, s.length()-1);
+                               return s;
+                       } else return "";
+               } else return "";
+       }
+       
+       // This is not very efficient. The parser below knows the quoting rules 
too.
+       
+       static boolean isHexDigit(char c) {
+               return ('a' <= c && c <= 'f' ||
+                       'A' <= c && c <= 'F' ||
+                       '0' <= c && c <= '9');
+       }
+       
+       static String l10n(String key) {
+               return L10n.getString("CSSTokenizerFilter."+key);
+       }
+       
+       class DecodedStringThingy {
+               char quote; // " " means not quoted
+               boolean url; // in a url() ?
+               String data;
+               public String suffix; // includes any whitespace
+               public DecodedStringThingy(String s) {
+                       if(s.startsWith("url(")) {
+                               s = s.substring("url(".length());
+                               url = true;
+                       }
+                       char q = s.charAt(0);
+                       if(q == '\'' || q == '\"') {
+                               quote = q;
+                               s = s.substring(1);
+                       } else quote = ' ';
+                       StringBuffer buffer = new StringBuffer();
+                       int x = 0;
+                       boolean justEscaping = false;
+                       boolean stillEscaping = false;
+                       StringBuffer hexEscape = new StringBuffer();
+                       while(x < s.length()) {
+                               char c = s.charAt(x);
+                               x++;
+                               if(justEscaping) {
+                                       if(c == '\n') {
+                                               buffer.append(c);
+                                               justEscaping = false;
+                                       } else if(isHexDigit(c)) {
+                                               hexEscape.append(c);
+                                               justEscaping = false;
+                                               stillEscaping = true;
+                                       } else {
+                                               buffer.append(c);
+                                               // Will need to be reencoded if 
quote or \n
+                                               justEscaping = false;
+                                       }
+                               } else if(stillEscaping) {
+                                       if(isHexDigit(c) && hexEscape.length() 
< 6) {
+                                               hexEscape.append(c);
+                                       } else if(Character.isWhitespace(c)) {
+                                               // Ignore one whitespace char 
after an escape
+                                               int d = 
Integer.parseInt(hexEscape.toString(),
+                                                                        16);
+                                               // FIXME once we can use 1.5, 
use Characters.toChars(int).
+                                               if(d > 0xFFFF) {
+                                                       String error = 
+                                                               
l10n("supplementalCharsNotSupported");
+                                                       logError(error);
+                                                       try {
+                                                               w.write("/* 
"+error+"*/");
+                                                       } catch (IOException e) 
{};
+                                               } else {
+                                                       c = (char)d;
+                                                       buffer.append(c);
+                                               }
+                                               stillEscaping = false;
+                                               hexEscape = new StringBuffer();
+                                       } else {
+                                               int d = 
Integer.parseInt(hexEscape.toString(),
+                                                                        16);
+                                               // FIXME once we can use 1.5, 
use Characters.toChars(int).
+                                               if(d > 0xFFFF) {
+                                                       String error = 
+                                                               
l10n("supplementalCharsNotSupported");
+                                                       logError(error);
+                                                       try {
+                                                               w.write("/* 
"+error+"*/");
+                                                       } catch (IOException e) 
{};
+                                               } else {
+                                                       char o = (char)d;
+                                                       buffer.append(o);
+                                               }
+                                               buffer.append(c);
+                                               stillEscaping = false;
+                                               hexEscape = new StringBuffer();
+                                       }
+                               } else {
+                                       if(quote != ' ' && c == quote) {
+                                               break;
+                                       } else if (quote == ' ' && c == ')') {
+                                               break;
+                                       } else if (c == '\\') {
+                                               justEscaping = true;
+                                       } else {
+                                               buffer.append(c);
+                                       }
+                               }
+                       }
+                       data = buffer.toString();
+                       if(url && s.length() > x && s.charAt(x) == ')')
+                               x++;
+                       if(x < (s.length()))
+                               suffix = s.substring(x);
+                       else
+                               suffix = "";
+               }
+               
+               public String toString() {
+                       StringBuffer out = new StringBuffer();
+                       if(url) out.append("url(");
+                       if(quote != ' ') out.append(quote);
+                       out.append(unescapeData());
+                       if(quote != ' ') out.append(quote);
+                       if(url) out.append(")");
+                       out.append(suffix);
+                       return out.toString();
+               }
+               
+               public String unescapeData() {
+                       StringBuffer sb = new StringBuffer();
+                       for(int i=0;i<data.length();i++) {
+                               char c = data.charAt(i);
+                               if(c == quote || c == '\n') {
+                                       sb.append('\\');
+                               }
+                               sb.append(c);
+                       }
+                       return sb.toString();
+               }
+       }
+       
+       String commentEncode(String s) {
+               StringBuffer sb = new StringBuffer(s.length());
+               for(int i=0;i<s.length();i++) {
+                       char c = s.charAt(i);
+                       if(c == '/')
+                               sb.append("\\/");
+                       else
+                               sb.append(c);
+               }
+               return sb.toString();
+       }
+
+
+  /**
+   * Creates a new scanner
+   * There is also a java.io.InputStream version of this constructor.
+   *
+   * @param   in  the java.io.Reader to read input from.
+   */
+  CSSTokenizerFilter(java.io.Reader in) {
+    this.zzReader = in;
+  }
+
+  /**
+   * Creates a new scanner.
+   * There is also java.io.Reader version of this constructor.
+   *
+   * @param   in  the java.io.Inputstream to read input from.
+   */
+  CSSTokenizerFilter(java.io.InputStream in) {
+    this(new java.io.InputStreamReader(in));
+  }
+
+  /** 
+   * Unpacks the compressed character translation table.
+   *
+   * @param packed   the packed character translation table
+   * @return         the unpacked character translation table
+   */
+  private static char [] zzUnpackCMap(String packed) {
+    char [] map = new char[0x10000];
+    int i = 0;  /* index in packed string  */
+    int j = 0;  /* index in unpacked array */
+    while (i < 182) {
+      int  count = packed.charAt(i++);
+      char value = packed.charAt(i++);
+      do map[j++] = value; while (--count > 0);
+    }
+    return map;
+  }
+
+
+  /**
+   * Refills the input buffer.
+   *
+   * @return      <code>false</code>, iff there was new input.
+   * 
+   * @exception   java.io.IOException  if any I/O-Error occurs
+   */
+  private boolean zzRefill() throws java.io.IOException {
+
+    /* first: make room (if you can) */
+    if (zzStartRead > 0) {
+      System.arraycopy(zzBuffer, zzStartRead,
+                       zzBuffer, 0,
+                       zzEndRead-zzStartRead);
+
+      /* translate stored positions */
+      zzEndRead-= zzStartRead;
+      zzCurrentPos-= zzStartRead;
+      zzMarkedPos-= zzStartRead;
+      zzPushbackPos-= zzStartRead;
+      zzStartRead = 0;
+    }
+
+    /* is the buffer big enough? */
+    if (zzCurrentPos >= zzBuffer.length) {
+      /* if not: blow it up */
+      char newBuffer[] = new char[zzCurrentPos*2];
+      System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length);
+      zzBuffer = newBuffer;
+    }
+
+    /* finally: fill the buffer with new input */
+    int numRead = zzReader.read(zzBuffer, zzEndRead,
+                                            zzBuffer.length-zzEndRead);
+
+    if (numRead < 0) {
+      return true;
+    }
+    else {
+      zzEndRead+= numRead;
+      return false;
+    }
+  }
+
+    
+  /**
+   * Closes the input stream.
+   */
+  public final void yyclose() throws java.io.IOException {
+    zzAtEOF = true;            /* indicate end of file */
+    zzEndRead = zzStartRead;  /* invalidate buffer    */
+
+    if (zzReader != null)
+      zzReader.close();
+  }
+
+
+  /**
+   * Resets the scanner to read from a new input stream.
+   * Does not close the old reader.
+   *
+   * All internal variables are reset, the old input stream 
+   * <b>cannot</b> be reused (internal buffer is discarded and lost).
+   * Lexical state is set to <tt>ZZ_INITIAL</tt>.
+   *
+   * @param reader   the new input stream 
+   */
+  public final void yyreset(java.io.Reader reader) {
+    zzReader = reader;
+    zzAtEOF  = false;
+    zzEndRead = zzStartRead = 0;
+    zzCurrentPos = zzMarkedPos = zzPushbackPos = 0;
+    zzLexicalState = YYINITIAL;
+  }
+
+
+  /**
+   * Returns the current lexical state.
+   */
+  public final int yystate() {
+    return zzLexicalState;
+  }
+
+
+  /**
+   * Enters a new lexical state
+   *
+   * @param newState the new lexical state
+   */
+  public final void yybegin(int newState) {
+    zzLexicalState = newState;
+  }
+
+
+  /**
+   * Returns the text matched by the current regular expression.
+   */
+  public final String yytext() {
+    return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead );
+  }
+
+
+  /**
+   * Returns the character at position <tt>pos</tt> from the 
+   * matched text. 
+   * 
+   * It is equivalent to yytext().charAt(pos), but faster
+   *
+   * @param pos the position of the character to fetch. 
+   *            A value from 0 to yylength()-1.
+   *
+   * @return the character at position pos
+   */
+  public final char yycharat(int pos) {
+    return zzBuffer[zzStartRead+pos];
+  }
+
+
+  /**
+   * Returns the length of the matched text region.
+   */
+  public final int yylength() {
+    return zzMarkedPos-zzStartRead;
+  }
+
+
+  /**
+   * Reports an error that occured while scanning.
+   *
+   * In a wellformed scanner (no or only correct usage of 
+   * yypushback(int) and a match-all fallback rule) this method 
+   * will only be called with things that "Can't Possibly Happen".
+   * If this method is called, something is seriously wrong
+   * (e.g. a JFlex bug producing a faulty scanner etc.).
+   *
+   * Usual syntax/scanner level error handling should be done
+   * in error fallback rules.
+   *
+   * @param   errorCode  the code of the errormessage to display
+   */
+  private void zzScanError(int errorCode) {
+    String message;
+    try {
+      message = ZZ_ERROR_MSG[errorCode];
+    }
+    catch (ArrayIndexOutOfBoundsException e) {
+      message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR];
+    }
+
+    throw new Error(message);
+  } 
+
+
+  /**
+   * Pushes the specified amount of characters back into the input stream.
+   *
+   * They will be read again by then next call of the scanning method
+   *
+   * @param number  the number of characters to be read again.
+   *                This number must not be greater than yylength()!
+   */
+  public void yypushback(int number)  {
+    if ( number > yylength() )
+      zzScanError(ZZ_PUSHBACK_2BIG);
+
+    zzMarkedPos -= number;
+  }
+
+
+  /**
+   * Resumes scanning until the next regular expression is matched,
+   * the end of input is encountered or an I/O-Error occurs.
+   *
+   * @return      the next token
+   * @exception   java.io.IOException  if any I/O-Error occurs
+   */
+  public Yytoken yylex() throws java.io.IOException {
+    int zzInput;
+    int zzAction;
+
+    // cached fields:
+    int zzCurrentPosL;
+    int zzMarkedPosL;
+    int zzEndReadL = zzEndRead;
+    char [] zzBufferL = zzBuffer;
+    char [] zzCMapL = ZZ_CMAP;
+
+    int [] zzTransL = ZZ_TRANS;
+    int [] zzRowMapL = ZZ_ROWMAP;
+    int [] zzAttrL = ZZ_ATTRIBUTE;
+
+    while (true) {
+      zzMarkedPosL = zzMarkedPos;
+
+      zzAction = -1;
+
+      zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;
+  
+      zzState = zzLexicalState;
+
+
+      zzForAction: {
+        while (true) {
+    
+          if (zzCurrentPosL < zzEndReadL)
+            zzInput = zzBufferL[zzCurrentPosL++];
+          else if (zzAtEOF) {
+            zzInput = YYEOF;
+            break zzForAction;
+          }
+          else {
+            // store back cached positions
+            zzCurrentPos  = zzCurrentPosL;
+            zzMarkedPos   = zzMarkedPosL;
+            boolean eof = zzRefill();
+            // get translated positions and possibly new buffer
+            zzCurrentPosL  = zzCurrentPos;
+            zzMarkedPosL   = zzMarkedPos;
+            zzBufferL      = zzBuffer;
+            zzEndReadL     = zzEndRead;
+            if (eof) {
+              zzInput = YYEOF;
+              break zzForAction;
+            }
+            else {
+              zzInput = zzBufferL[zzCurrentPosL++];
+            }
+          }
+          int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];
+          if (zzNext == -1) break zzForAction;
+          zzState = zzNext;
+
+          int zzAttributes = zzAttrL[zzState];
+          if ( (zzAttributes & 1) == 1 ) {
+            zzAction = zzState;
+            zzMarkedPosL = zzCurrentPosL;
+            if ( (zzAttributes & 8) == 8 ) break zzForAction;
+          }
+
+        }
+      }
+
+      // store back cached position
+      zzMarkedPos = zzMarkedPosL;
+
+      switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
+        case 14: 
+          { if(debug) log("Deleted unofficial ident: "+yytext());
+       w.write("/* " + l10n("deletedUnofficialIdent") + " */");
+          }
+        case 33: break;
+        case 20: 
+          { String s = yytext();
+       w.write(s);
+       if(debug) log("Matched unicode: "+s);
+          }
+        case 34: break;
+        case 2: 
+          { String s = yytext();
+       w.write(s);
+       if(debug) log("Matched ident: "+s);
+          }
+        case 35: break;
+        case 27: 
+          { String s = yytext();
+       s = s.substring("@media".length()).trim();
+       w.write("@media "+s+" ");
+       if(debug) log("Matched @media: "+s);
+          }
+        case 36: break;
+        case 12: 
+          { String s = yytext();
+       if(debug) log("Matched string: "+s);
+       if(paranoidStringCheck && s.indexOf(':') != -1) {
+               w.write("/* "+l10n("deletedDisallowedString")+" */");
+               log("Deleted disallowed string: "+s);
+       } else {
+               w.write(s);
+       }
+          }
+        case 37: break;
+        case 21: 
+          { String s = yytext();
+       if(debug) log("Got hexcolor: "+s);
+       w.write(s);
+          }
+        case 38: break;
+        case 7: 
+          { String s = yytext();
+       w.write(s);
+       if(debug) log("Matched open braces: "+s);
+          }
+        case 39: break;
+        case 6: 
+          { String s = yytext();
+       w.write(s);
+       if(debug) log("Matched semicolon: "+s);
+          }
+        case 40: break;
+        case 13: 
+          { String s = yytext();
+       w.write(s);
+       if(debug) log("Matched number: "+s);
+          }
+        case 41: break;
+        case 26: 
+          { String s = yytext();
+       w.write(s);
+       if(debug) log("Matched @page: "+s);
+          }
+        case 42: break;
+        case 17: 
+          { String s = yytext();
+       w.write(s); 
+       if(debug) log("Matched ~=: "+s);
+          }
+        case 43: break;
+        case 23: 
+          { String s = yytext();
+       w.write(s);
+       if(debug) log("Matched HTML comment: "+s);
+          }
+        case 44: break;
+        case 28: 
+          { if(debug) log("Deleted unofficial ident with url: "+yytext());
+       w.write("/* " + l10n("deletedUnofficialIdentWithURL") + " */");
+          }
+        case 45: break;
+        case 8: 
+          { String s = yytext();
+       w.write(s);
+       if(debug) log("Matched close braces: "+s);
+          }
+        case 46: break;
+        case 25: 
+          { String s = yytext();
+       w.write(s);
+       if(debug) log("Matched unicode range: "+s);
+          }
+        case 47: break;
+        case 24: 
+          { // This is horrible. However it seems that there is no other way 
to do it with either jflex or CUP, as {URL} cannot be an unambiguous token :(
+       String s = yytext();
+       if(debug) log("Recognized URL: "+s);
+       
+       DecodedStringThingy dst = new DecodedStringThingy(s);
+       
+       if(!dst.url) {
+               throw new IllegalStateException("parsing url().. isn't a 
url()");
+       }
+       if(dst.suffix.length() > 0) {
+               yypushback(dst.suffix.length());
+               dst.suffix = "";
+       }
+       
+       s = dst.data;
+       if(debug) log("URL now: "+s);
+       try {
+               s = processURL(s);
+               dst.data = s;
+               if(s == null || s.equals("")) {
+                       if(debug) log("URL invalid");
+                       w.write("url()");
+               } else {
+                       s = dst.toString();
+                       if(debug) log("Writing: "+s);
+                       w.write(s);
+               }
+       } catch (CommentException e) {
+               w.write("/* "+commentEncode(e.getMessage())+" */");
+       }
+          }
+        case 48: break;
+        case 30: 
+          { String s = yytext();
+       w.write(s);
+       if(debug) log("Matched @font-face: "+s);
+          }
+        case 49: break;
+        case 5: 
+          { String s = yytext();
+       w.write(s);
+       if(debug) log("Matched function end: "+s);
+          }
+        case 50: break;
+        case 29: 
+          { String s = yytext();
+       if(debug) log("Found @import: "+s);
+       s = s.substring("@import".length());
+       s = s.trim();
+       DecodedStringThingy dst = new DecodedStringThingy(s);
+       s = dst.data;
+       if(debug) log("URL: "+s);
+       try {
+               s = processImportURL(s);
+               dst.data = s;
+               if(debug) log("Processed URL: "+s);
+               if(dst.quote == ' ') dst.quote = '\"';
+               if (!(s == null || s.equals(""))) {
+                       if(debug) log("URL now: "+s);
+                       s = "@import "+dst.toString();
+                       if(debug) log("Writing: "+s);
+                       w.write(s);
+               } else
+                       if(debug) log("Dropped @import");
+       } catch (CommentException e) {
+               w.write("/* " + commentEncode(e.getMessage()) + " */");
+       }
+          }
+        case 51: break;
+        case 4: 
+          { String s = yytext();
+       w.write(s);
+       if(debug) log("Matched single char: "+s);
+          }
+        case 52: break;
+        case 15: 
+          { String s = yytext();
+       w.write(s);
+       if(debug) log("Matched #name: "+s);
+          }
+        case 53: break;
+        case 10: 
+          { if(postBadImportFlag) {
+               // Ignore
+               postBadImportFlag = false;
+               if(debug) log("Ignoring mediums list because after bad import: 
"+
+                       yytext());
+       } else {
+               String s = yytext();
+               w.write(s);
+               if(debug) log("Matched and passing on mediums list: "+s);
+       }
+          }
+        case 54: break;
+        case 18: 
+          { String s = yytext();
+       w.write(s);
+       if(debug) log("Matched |=: "+s);
+          }
+        case 55: break;
+        case 22: 
+          { String s = yytext();
+       StringBuffer sb = new StringBuffer(s.length());
+       sb.append("/* ");
+       boolean inPrefix = true;
+       for(int i=2;i<s.length()-2;i++) {
+               char c = s.charAt(i);
+               if(inPrefix && Character.isWhitespace(c)) {
+                       continue;
+               }
+               inPrefix = false;
+               if(Character.isDigit(c) || Character.isWhitespace(c) ||
+                       Character.isLetter(c) || c == '.' || c == '_' || c == 
'-') {
+                       // No @, no !, etc; IE has been known to do things with 
comments
+                       // in CSS, and other browsers may too
+                       sb.append(c);
+               }
+       }
+       while(Character.isWhitespace(sb.charAt(sb.length()-1)))
+               sb.deleteCharAt(sb.length()-1);
+       sb.append(" */");
+       w.write(sb.toString());
+       if(debug) log("Matched comment: "+s+" -> "+sb.toString());
+          }
+        case 56: break;
+        case 16: 
+          { if(!deleteErrors) {
+               throwError(l10n("unknownAtIdentifierLabel")+" "+yytext());
+       } else {
+               String s = yytext();
+               if(debug) log("Discarded identifier: "+s);
+               // Ignore
+       }
+          }
+        case 57: break;
+        case 31: 
+          { String s = yytext();
+       w.write(s);
+       if(debug) log("Matched important: "+s);
+          }
+        case 58: break;
+        case 11: 
+          { String s = yytext();
+       w.write(s);
+       if(debug) log("Matched measurement: "+s);
+          }
+        case 59: break;
+        case 32: 
+          { String s = yytext();
+       detectedCharset = s;
+       if(debug) log("Matched and ignoring charset: "+s);
+       // Ignore
+          }
+        case 60: break;
+        case 9: 
+          { String s = yytext();
+       if(s.startsWith("url")) throwError(l10n("invalidURLContents"));
+       w.write(s);
+       if(debug) log("Matched function start: "+s);
+          }
+        case 61: break;
+        case 1: 
+          { String s = yytext();
+       char c = s.charAt(0);
+       log("Matched anything: "+yytext()+" - ignoring");
+       w.write("/* "+l10n("deletedUnmatchedChar")+" "+c+" */"); // single char 
cannot break out of comment
+          }
+        case 62: break;
+        case 3: 
+          { String s = yytext();
+       w.write(s);
+       if(debug) log("Matched whitespace: "+s);
+          }
+        case 63: break;
+        case 19: 
+          { String s = yytext();
+       w.write(s); 
+       if(debug) log("Matched HTML comment: "+s);
+          }
+        case 64: break;
+        default: 
+          if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
+            zzAtEOF = true;
+            return null;
+          } 
+          else {
+            zzScanError(ZZ_NO_MATCH);
+          }
+      }
+    }
+  }
+
+
+}


Reply via email to