You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ja...@apache.org on 2014/02/20 09:57:53 UTC

svn commit: r1570113 [1/2] - in /lucene/dev/branches/solr4470: ./ lucene/ lucene/analysis/ lucene/analysis/common/ lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/ lucene/analysis/common/src/test/org/apache/lucene/analysis/core/ luc...

Author: janhoy
Date: Thu Feb 20 08:57:51 2014
New Revision: 1570113

URL: http://svn.apache.org/r1570113
Log:
Update to r1570109

Added:
    lucene/dev/branches/solr4470/lucene/core/src/java/org/apache/lucene/index/RandomAccessOrds.java
      - copied unchanged from r1570109, lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/RandomAccessOrds.java
    lucene/dev/branches/solr4470/lucene/sandbox/src/java/org/apache/lucene/sandbox/queries/SortedSetSortField.java
      - copied unchanged from r1570109, lucene/dev/trunk/lucene/sandbox/src/java/org/apache/lucene/sandbox/queries/SortedSetSortField.java
    lucene/dev/branches/solr4470/lucene/sandbox/src/test/org/apache/lucene/sandbox/queries/TestSortedSetSortField.java
      - copied unchanged from r1570109, lucene/dev/trunk/lucene/sandbox/src/test/org/apache/lucene/sandbox/queries/TestSortedSetSortField.java
    lucene/dev/branches/solr4470/lucene/sandbox/src/test/org/apache/lucene/sandbox/queries/TestSortedSetSortFieldDocValues.java
      - copied unchanged from r1570109, lucene/dev/trunk/lucene/sandbox/src/test/org/apache/lucene/sandbox/queries/TestSortedSetSortFieldDocValues.java
    lucene/dev/branches/solr4470/lucene/sandbox/src/test/org/apache/lucene/sandbox/queries/TestSortedSetSortFieldSelectors.java
      - copied unchanged from r1570109, lucene/dev/trunk/lucene/sandbox/src/test/org/apache/lucene/sandbox/queries/TestSortedSetSortFieldSelectors.java
    lucene/dev/branches/solr4470/solr/contrib/morphlines-core/src/java/org/apache/solr/morphlines/solr/FileUtils.java
      - copied unchanged from r1570109, lucene/dev/trunk/solr/contrib/morphlines-core/src/java/org/apache/solr/morphlines/solr/FileUtils.java
    lucene/dev/branches/solr4470/solr/licenses/Saxon-HE-9.5.1-4.jar.sha1
      - copied unchanged from r1570109, lucene/dev/trunk/solr/licenses/Saxon-HE-9.5.1-4.jar.sha1
    lucene/dev/branches/solr4470/solr/licenses/argparse4j-0.4.3.jar.sha1
      - copied unchanged from r1570109, lucene/dev/trunk/solr/licenses/argparse4j-0.4.3.jar.sha1
    lucene/dev/branches/solr4470/solr/licenses/jackson-annotations-2.3.1.jar.sha1
      - copied unchanged from r1570109, lucene/dev/trunk/solr/licenses/jackson-annotations-2.3.1.jar.sha1
    lucene/dev/branches/solr4470/solr/licenses/jackson-core-2.3.1.jar.sha1
      - copied unchanged from r1570109, lucene/dev/trunk/solr/licenses/jackson-core-2.3.1.jar.sha1
    lucene/dev/branches/solr4470/solr/licenses/jackson-databind-2.3.1.jar.sha1
      - copied unchanged from r1570109, lucene/dev/trunk/solr/licenses/jackson-databind-2.3.1.jar.sha1
    lucene/dev/branches/solr4470/solr/licenses/kite-morphlines-avro-0.11.0.jar.sha1
      - copied unchanged from r1570109, lucene/dev/trunk/solr/licenses/kite-morphlines-avro-0.11.0.jar.sha1
    lucene/dev/branches/solr4470/solr/licenses/kite-morphlines-core-0.11.0-tests.jar.sha1
      - copied unchanged from r1570109, lucene/dev/trunk/solr/licenses/kite-morphlines-core-0.11.0-tests.jar.sha1
    lucene/dev/branches/solr4470/solr/licenses/kite-morphlines-core-0.11.0.jar.sha1
      - copied unchanged from r1570109, lucene/dev/trunk/solr/licenses/kite-morphlines-core-0.11.0.jar.sha1
    lucene/dev/branches/solr4470/solr/licenses/kite-morphlines-hadoop-sequencefile-0.11.0.jar.sha1
      - copied unchanged from r1570109, lucene/dev/trunk/solr/licenses/kite-morphlines-hadoop-sequencefile-0.11.0.jar.sha1
    lucene/dev/branches/solr4470/solr/licenses/kite-morphlines-json-0.11.0.jar.sha1
      - copied unchanged from r1570109, lucene/dev/trunk/solr/licenses/kite-morphlines-json-0.11.0.jar.sha1
    lucene/dev/branches/solr4470/solr/licenses/kite-morphlines-saxon-0.11.0.jar.sha1
      - copied unchanged from r1570109, lucene/dev/trunk/solr/licenses/kite-morphlines-saxon-0.11.0.jar.sha1
    lucene/dev/branches/solr4470/solr/licenses/kite-morphlines-tika-core-0.11.0.jar.sha1
      - copied unchanged from r1570109, lucene/dev/trunk/solr/licenses/kite-morphlines-tika-core-0.11.0.jar.sha1
    lucene/dev/branches/solr4470/solr/licenses/kite-morphlines-tika-decompress-0.11.0.jar.sha1
      - copied unchanged from r1570109, lucene/dev/trunk/solr/licenses/kite-morphlines-tika-decompress-0.11.0.jar.sha1
    lucene/dev/branches/solr4470/solr/licenses/kite-morphlines-twitter-0.11.0.jar.sha1
      - copied unchanged from r1570109, lucene/dev/trunk/solr/licenses/kite-morphlines-twitter-0.11.0.jar.sha1
Removed:
    lucene/dev/branches/solr4470/solr/licenses/Saxon-HE-9.5.1-3.jar.sha1
    lucene/dev/branches/solr4470/solr/licenses/argparse4j-0.4.0.jar.sha1
    lucene/dev/branches/solr4470/solr/licenses/jackson-annotations-2.2.3.jar.sha1
    lucene/dev/branches/solr4470/solr/licenses/jackson-core-2.2.3.jar.sha1
    lucene/dev/branches/solr4470/solr/licenses/jackson-databind-2.2.3.jar.sha1
    lucene/dev/branches/solr4470/solr/licenses/kite-morphlines-avro-0.10.0.jar.sha1
    lucene/dev/branches/solr4470/solr/licenses/kite-morphlines-core-0.10.0-tests.jar.sha1
    lucene/dev/branches/solr4470/solr/licenses/kite-morphlines-core-0.10.0.jar.sha1
    lucene/dev/branches/solr4470/solr/licenses/kite-morphlines-hadoop-sequencefile-0.10.0.jar.sha1
    lucene/dev/branches/solr4470/solr/licenses/kite-morphlines-json-0.10.0.jar.sha1
    lucene/dev/branches/solr4470/solr/licenses/kite-morphlines-saxon-0.10.0.jar.sha1
    lucene/dev/branches/solr4470/solr/licenses/kite-morphlines-tika-core-0.10.0.jar.sha1
    lucene/dev/branches/solr4470/solr/licenses/kite-morphlines-tika-decompress-0.10.0.jar.sha1
    lucene/dev/branches/solr4470/solr/licenses/kite-morphlines-twitter-0.10.0.jar.sha1
Modified:
    lucene/dev/branches/solr4470/   (props changed)
    lucene/dev/branches/solr4470/lucene/   (props changed)
    lucene/dev/branches/solr4470/lucene/CHANGES.txt   (contents, props changed)
    lucene/dev/branches/solr4470/lucene/analysis/   (props changed)
    lucene/dev/branches/solr4470/lucene/analysis/common/   (props changed)
    lucene/dev/branches/solr4470/lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/StandardTokenizerImpl.java
    lucene/dev/branches/solr4470/lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/StandardTokenizerImpl.jflex
    lucene/dev/branches/solr4470/lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestStandardAnalyzer.java
    lucene/dev/branches/solr4470/lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestUAX29URLEmailTokenizer.java
    lucene/dev/branches/solr4470/lucene/codecs/   (props changed)
    lucene/dev/branches/solr4470/lucene/codecs/src/java/org/apache/lucene/codecs/memory/DirectDocValuesProducer.java
    lucene/dev/branches/solr4470/lucene/core/   (props changed)
    lucene/dev/branches/solr4470/lucene/core/src/java/org/apache/lucene/codecs/lucene45/Lucene45DocValuesProducer.java
    lucene/dev/branches/solr4470/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java
    lucene/dev/branches/solr4470/lucene/core/src/java/org/apache/lucene/index/SortedSetDocValues.java
    lucene/dev/branches/solr4470/lucene/core/src/java/org/apache/lucene/search/FieldComparator.java
    lucene/dev/branches/solr4470/lucene/core/src/java/org/apache/lucene/search/SortField.java
    lucene/dev/branches/solr4470/lucene/core/src/java/org/apache/lucene/util/SloppyMath.java
    lucene/dev/branches/solr4470/lucene/highlighter/   (props changed)
    lucene/dev/branches/solr4470/lucene/highlighter/src/java/org/apache/lucene/search/postingshighlight/PostingsHighlighter.java
    lucene/dev/branches/solr4470/lucene/ivy-versions.properties   (contents, props changed)
    lucene/dev/branches/solr4470/lucene/sandbox/   (props changed)
    lucene/dev/branches/solr4470/solr/   (props changed)
    lucene/dev/branches/solr4470/solr/CHANGES.txt   (contents, props changed)
    lucene/dev/branches/solr4470/solr/contrib/   (props changed)
    lucene/dev/branches/solr4470/solr/contrib/morphlines-cell/src/java/org/apache/solr/morphlines/cell/SolrCellBuilder.java
    lucene/dev/branches/solr4470/solr/contrib/morphlines-cell/src/test/org/apache/solr/morphlines/cell/SolrCellMorphlineTest.java
    lucene/dev/branches/solr4470/solr/contrib/morphlines-core/src/java/org/apache/solr/morphlines/solr/SolrLocator.java
    lucene/dev/branches/solr4470/solr/contrib/morphlines-core/src/java/org/apache/solr/morphlines/solr/ZooKeeperDownloader.java
    lucene/dev/branches/solr4470/solr/contrib/morphlines-core/src/test/org/apache/solr/morphlines/solr/AbstractSolrMorphlineTestBase.java
    lucene/dev/branches/solr4470/solr/contrib/morphlines-core/src/test/org/apache/solr/morphlines/solr/AbstractSolrMorphlineZkTestBase.java
    lucene/dev/branches/solr4470/solr/contrib/morphlines-core/src/test/org/apache/solr/morphlines/solr/SolrMorphlineTest.java
    lucene/dev/branches/solr4470/solr/contrib/morphlines-core/src/test/org/apache/solr/morphlines/solr/SolrMorphlineZkAliasTest.java
    lucene/dev/branches/solr4470/solr/contrib/morphlines-core/src/test/org/apache/solr/morphlines/solr/SolrMorphlineZkAvroTest.java
    lucene/dev/branches/solr4470/solr/contrib/morphlines-core/src/test/org/apache/solr/morphlines/solr/SolrMorphlineZkTest.java
    lucene/dev/branches/solr4470/solr/core/   (props changed)
    lucene/dev/branches/solr4470/solr/core/src/test/org/apache/solr/cloud/BasicDistributedZk2Test.java
    lucene/dev/branches/solr4470/solr/core/src/test/org/apache/solr/cloud/CollectionsAPIDistributedZkTest.java
    lucene/dev/branches/solr4470/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java
    lucene/dev/branches/solr4470/solr/core/src/test/org/apache/solr/cloud/SyncSliceTest.java
    lucene/dev/branches/solr4470/solr/core/src/test/org/apache/solr/cloud/UnloadDistributedZkTest.java
    lucene/dev/branches/solr4470/solr/licenses/   (props changed)
    lucene/dev/branches/solr4470/solr/solrj/   (props changed)
    lucene/dev/branches/solr4470/solr/solrj/src/test/org/apache/solr/client/solrj/impl/BasicHttpSolrServerTest.java
    lucene/dev/branches/solr4470/solr/test-framework/   (props changed)
    lucene/dev/branches/solr4470/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java

Modified: lucene/dev/branches/solr4470/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr4470/lucene/CHANGES.txt?rev=1570113&r1=1570112&r2=1570113&view=diff
==============================================================================
--- lucene/dev/branches/solr4470/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/solr4470/lucene/CHANGES.txt Thu Feb 20 08:57:51 2014
@@ -65,18 +65,29 @@ Optimizations
   on Windows if NIOFSDirectory is used, mmapped files are still locked.
   (Michael Poindexter, Robert Muir, Uwe Schindler)
 
-Test Framework
-
-* LUCENE-5449: Rename _TestUtil and _TestHelper to remove the leading _.
 
 ======================= Lucene 4.8.0 =======================
 
+New Features
+
+* LUCENE-5454: Add SortedSetSortField to lucene/sandbox, to allow sorting
+  on multi-valued field. (Robert Muir)
+
+API Changes
+
+* LUCENE-5454: Add RandomAccessOrds, an optional extension of SortedSetDocValues
+  that supports random access to the ordinals in a document. (Robert Muir)
+
 Bug fixes
 
 * LUCENE-5450: Fix getField() NPE issues with SpanOr/SpanNear when they have an 
   empty list of clauses. This can happen for example,  when a wildcard matches 
   no terms.  (Tim Allison via Robert Muir)
 
+Test Framework
+
+* LUCENE-5449: Rename _TestUtil and _TestHelper to remove the leading _.
+
 ======================= Lucene 4.7.0 =======================
 
 New Features
@@ -177,6 +188,10 @@ New Features
   representations of a shape into BinaryDocValues. It supports exact geometry
   relationship calculations. (David Smiley)
 
+* LUCENE-5457: Add SloppyMath.earthDiameter(double latitude) that returns an
+  approximate value of the diameter of the earth at the given latitude.
+  (Adrien Grand)
+
 Build
 
 * LUCENE-5217,LUCENE-5420: Maven config: get dependencies from Ant+Ivy config;

Modified: lucene/dev/branches/solr4470/lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/StandardTokenizerImpl.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr4470/lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/StandardTokenizerImpl.java?rev=1570113&r1=1570112&r2=1570113&view=diff
==============================================================================
--- lucene/dev/branches/solr4470/lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/StandardTokenizerImpl.java (original)
+++ lucene/dev/branches/solr4470/lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/StandardTokenizerImpl.java Thu Feb 20 08:57:51 2014
@@ -221,12 +221,10 @@ public final class StandardTokenizerImpl
   private static final String ZZ_ACTION_PACKED_0 =
     "\1\0\26\1\1\2\1\3\1\4\1\1\1\5\1\6"+
     "\1\7\1\2\1\10\21\0\1\2\1\0\1\2\12\0"+
-    "\1\3\21\0\1\2\25\0\1\2\61\0\3\2\22\0"+
-    "\1\3\25\0\1\1\21\0\1\2\10\0\1\2\20\0"+
-    "\1\3\56\0\1\2\27\0";
+    "\1\3\21\0\1\2\25\0\1\2\115\0\1\1\20\0";
 
   private static int [] zzUnpackAction() {
-    int [] result = new int[310];
+    int [] result = new int[197];
     int offset = 0;
     offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
     return result;
@@ -275,24 +273,10 @@ public final class StandardTokenizerImpl
     "\0\u57a4\0\u5832\0\u58c0\0\u594e\0\u59dc\0\u5a6a\0\u5af8\0\u5b86"+
     "\0\u5c14\0\u5ca2\0\u5d30\0\u5dbe\0\u5e4c\0\u5eda\0\u5f68\0\u5ff6"+
     "\0\u6084\0\u6112\0\u61a0\0\u622e\0\u62bc\0\u634a\0\u63d8\0\u6466"+
-    "\0\u64f4\0\u6582\0\u6610\0\u669e\0\u672c\0\u67ba\0\u6848\0\u68d6"+
-    "\0\u6964\0\u69f2\0\u6a80\0\u6b0e\0\u6b9c\0\u6c2a\0\u6cb8\0\u6d46"+
-    "\0\u6dd4\0\u6e62\0\u6ef0\0\u6f7e\0\u700c\0\u709a\0\u7128\0\u71b6"+
-    "\0\u7244\0\u72d2\0\u7360\0\u73ee\0\u747c\0\u750a\0\u7598\0\u7626"+
-    "\0\u76b4\0\u7742\0\u77d0\0\u785e\0\u78ec\0\u797a\0\u7a08\0\u7a96"+
-    "\0\u7b24\0\u7bb2\0\u7c40\0\u7cce\0\u7d5c\0\u7dea\0\u7e78\0\u7f06"+
-    "\0\u7f94\0\u8022\0\u80b0\0\u813e\0\u81cc\0\u825a\0\u82e8\0\u8376"+
-    "\0\u8404\0\u8492\0\u8520\0\u85ae\0\u863c\0\u86ca\0\u8758\0\u87e6"+
-    "\0\u8874\0\u8902\0\u8990\0\u8a1e\0\u8aac\0\u8b3a\0\u8bc8\0\u8c56"+
-    "\0\u8ce4\0\u8d72\0\u8e00\0\u8e8e\0\u8f1c\0\u8faa\0\u9038\0\u90c6"+
-    "\0\u9154\0\u91e2\0\u9270\0\u92fe\0\u938c\0\u941a\0\u94a8\0\u9536"+
-    "\0\u95c4\0\u9652\0\u96e0\0\u976e\0\u97fc\0\u988a\0\u9918\0\u99a6"+
-    "\0\u9a34\0\u9ac2\0\u9b50\0\u9bde\0\u9c6c\0\u9cfa\0\u9d88\0\u9e16"+
-    "\0\u9ea4\0\u9f32\0\u9fc0\0\ua04e\0\ua0dc\0\ua16a\0\ua1f8\0\ua286"+
-    "\0\ua314\0\ua3a2\0\ua430\0\ua4be\0\ua54c\0\ua5da";
+    "\0\u64f4\0\u6582\0\u6610\0\u669e\0\u672c";
 
   private static int [] zzUnpackRowMap() {
-    int [] result = new int[310];
+    int [] result = new int[197];
     int offset = 0;
     offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
     return result;
@@ -488,12 +472,12 @@ public final class StandardTokenizerImpl
     "\3\0\1\202\2\0\1\203\4\0\1\204\3\0\1\205"+
     "\17\0\1\56\2\0\1\206\21\0\1\207\2\0\1\210"+
     "\61\0\1\30\1\63\7\0\1\63\4\0\2\30\1\0"+
-    "\1\211\1\0\1\212\2\0\1\213\1\0\1\214\4\0"+
-    "\1\215\1\0\1\216\1\0\1\217\2\0\1\220\3\0"+
-    "\1\221\2\0\1\222\4\0\1\223\3\0\1\224\17\0"+
-    "\1\225\2\0\1\226\21\0\1\227\2\0\1\230\41\0"+
-    "\1\117\17\0\1\231\1\64\1\232\1\121\3\0\1\64"+
-    "\1\0\1\64\4\0\1\233\1\231\7\0\1\30\4\0"+
+    "\1\42\1\0\1\43\2\0\1\211\1\0\1\45\4\0"+
+    "\1\46\1\0\1\47\1\0\1\50\2\0\1\51\3\0"+
+    "\1\212\2\0\1\213\4\0\1\54\3\0\1\214\17\0"+
+    "\1\56\2\0\1\215\21\0\1\216\2\0\1\217\41\0"+
+    "\1\117\17\0\1\30\1\64\1\62\1\121\3\0\1\64"+
+    "\1\0\1\64\4\0\1\37\1\30\7\0\1\30\4\0"+
     "\1\30\11\0\1\30\22\0\1\30\3\0\1\30\13\0"+
     "\1\31\2\0\1\31\10\0\1\30\22\0\4\31\35\0"+
     "\1\30\26\0\1\30\26\0\2\30\23\0\1\31\1\30"+
@@ -517,16 +501,16 @@ public final class StandardTokenizerImpl
     "\11\0\1\31\11\0\2\31\6\0\1\31\2\0\4\31"+
     "\3\0\1\31\2\0\2\31\1\0\3\31\1\0\2\31"+
     "\1\0\1\31\10\0\1\31\1\0\2\31\2\0\2\31"+
-    "\1\0\4\31\23\0\1\31\26\0\1\234\1\0\1\235"+
-    "\17\0\1\236\2\0\1\237\4\0\1\240\3\0\1\241"+
-    "\22\0\1\242\21\0\1\243\2\0\1\244\62\0\1\76"+
-    "\1\31\6\0\1\76\7\0\1\211\1\0\1\212\2\0"+
-    "\1\245\1\0\1\246\4\0\1\215\1\0\1\216\1\0"+
-    "\1\217\2\0\1\220\3\0\1\247\2\0\1\250\4\0"+
-    "\1\251\3\0\1\252\17\0\1\225\2\0\1\253\21\0"+
-    "\1\254\2\0\1\255\41\0\1\117\17\0\1\231\1\77"+
-    "\1\256\1\121\3\0\1\77\1\0\1\77\4\0\1\233"+
-    "\1\231\71\0\1\32\2\0\1\32\33\0\4\32\216\0"+
+    "\1\0\4\31\23\0\1\31\26\0\1\220\1\0\1\221"+
+    "\17\0\1\222\2\0\1\223\4\0\1\224\3\0\1\225"+
+    "\22\0\1\226\21\0\1\227\2\0\1\230\62\0\1\76"+
+    "\1\31\6\0\1\76\7\0\1\42\1\0\1\43\2\0"+
+    "\1\231\1\0\1\66\4\0\1\46\1\0\1\47\1\0"+
+    "\1\50\2\0\1\51\3\0\1\232\2\0\1\233\4\0"+
+    "\1\71\3\0\1\234\17\0\1\56\2\0\1\235\21\0"+
+    "\1\236\2\0\1\237\41\0\1\117\17\0\1\30\1\77"+
+    "\1\31\1\121\3\0\1\77\1\0\1\77\4\0\1\37"+
+    "\1\30\71\0\1\32\2\0\1\32\33\0\4\32\216\0"+
     "\1\32\77\0\1\32\44\0\1\32\1\0\2\32\21\0"+
     "\1\32\4\0\1\32\17\0\4\32\3\0\1\32\12\0"+
     "\1\32\203\0\1\32\222\0\4\32\152\0\2\32\25\0"+
@@ -559,8 +543,8 @@ public final class StandardTokenizerImpl
     "\6\0\1\120\2\0\4\120\3\0\1\120\2\0\2\120"+
     "\1\0\3\120\1\0\2\120\1\0\1\120\10\0\1\120"+
     "\1\0\2\120\2\0\2\120\1\0\4\120\23\0\1\120"+
-    "\177\0\1\121\44\0\1\257\21\0\1\260\2\0\1\261"+
-    "\10\0\1\262\22\0\1\263\21\0\1\264\2\0\1\265"+
+    "\177\0\1\121\44\0\1\240\21\0\1\241\2\0\1\242"+
+    "\10\0\1\243\22\0\1\244\21\0\1\245\2\0\1\246"+
     "\41\0\1\117\20\0\1\121\1\0\1\121\3\0\1\64"+
     "\1\0\1\121\77\0\1\35\2\0\1\35\33\0\4\35"+
     "\216\0\1\35\77\0\1\35\44\0\1\35\1\0\2\35"+
@@ -604,13 +588,13 @@ public final class StandardTokenizerImpl
     "\4\37\3\0\1\37\2\0\2\37\1\0\3\37\1\0"+
     "\2\37\1\0\1\37\10\0\1\37\1\0\2\37\2\0"+
     "\2\37\1\0\4\37\23\0\1\37\21\0\1\42\1\0"+
-    "\1\43\2\0\1\266\1\0\1\45\4\0\1\46\1\0"+
-    "\1\47\1\0\1\50\2\0\1\51\3\0\1\267\2\0"+
-    "\1\270\4\0\1\54\3\0\1\271\17\0\1\56\2\0"+
-    "\1\272\21\0\1\273\2\0\1\274\61\0\1\30\1\147"+
+    "\1\43\2\0\1\247\1\0\1\45\4\0\1\46\1\0"+
+    "\1\47\1\0\1\50\2\0\1\51\3\0\1\250\2\0"+
+    "\1\251\4\0\1\54\3\0\1\252\17\0\1\56\2\0"+
+    "\1\253\21\0\1\254\2\0\1\255\61\0\1\30\1\147"+
     "\1\62\4\0\1\64\1\0\1\147\4\0\1\37\1\30"+
-    "\6\0\1\275\21\0\1\276\2\0\1\277\10\0\1\300"+
-    "\22\0\1\301\21\0\1\302\2\0\1\303\62\0\1\150"+
+    "\6\0\1\256\21\0\1\257\2\0\1\260\10\0\1\261"+
+    "\22\0\1\262\21\0\1\263\2\0\1\264\62\0\1\150"+
     "\7\0\1\150\4\0\1\147\10\0\1\30\4\0\1\30"+
     "\11\0\1\30\22\0\1\30\3\0\1\30\13\0\1\40"+
     "\2\0\1\40\10\0\1\30\22\0\4\40\35\0\1\30"+
@@ -644,7 +628,7 @@ public final class StandardTokenizerImpl
     "\2\41\6\0\1\41\2\0\4\41\3\0\1\41\2\0"+
     "\2\41\1\0\3\41\1\0\2\41\1\0\1\41\10\0"+
     "\1\41\1\0\2\41\2\0\2\41\1\0\4\41\23\0"+
-    "\1\41\165\0\1\304\26\0\2\304\27\0\1\30\4\0"+
+    "\1\41\165\0\1\265\26\0\2\265\27\0\1\30\4\0"+
     "\1\30\11\0\1\30\22\0\1\30\3\0\1\30\13\0"+
     "\1\62\2\0\1\62\10\0\1\30\22\0\4\62\35\0"+
     "\1\30\26\0\1\30\26\0\2\30\23\0\1\62\1\30"+
@@ -668,9 +652,9 @@ public final class StandardTokenizerImpl
     "\11\0\1\62\11\0\2\62\6\0\1\62\2\0\4\62"+
     "\3\0\1\62\2\0\2\62\1\0\3\62\1\0\2\62"+
     "\1\0\1\62\10\0\1\62\1\0\2\62\2\0\2\62"+
-    "\1\0\4\62\23\0\1\62\26\0\1\305\1\0\1\306"+
-    "\17\0\1\307\2\0\1\310\4\0\1\311\3\0\1\312"+
-    "\22\0\1\313\21\0\1\314\2\0\1\315\62\0\1\177"+
+    "\1\0\4\62\23\0\1\62\26\0\1\266\1\0\1\267"+
+    "\17\0\1\270\2\0\1\271\4\0\1\272\3\0\1\273"+
+    "\22\0\1\274\21\0\1\275\2\0\1\276\62\0\1\177"+
     "\1\62\6\0\1\177\15\0\1\30\4\0\1\30\11\0"+
     "\1\30\22\0\1\30\3\0\1\30\13\0\1\63\2\0"+
     "\1\63\10\0\1\30\22\0\4\63\35\0\1\30\31\0"+
@@ -704,499 +688,132 @@ public final class StandardTokenizerImpl
     "\1\63\1\0\1\63\11\0\1\63\11\0\2\63\6\0"+
     "\1\63\2\0\4\63\3\0\1\63\2\0\2\63\1\0"+
     "\3\63\1\0\2\63\1\0\1\63\10\0\1\63\1\0"+
-    "\2\63\2\0\2\63\1\0\4\63\23\0\1\63\22\0"+
-    "\1\231\2\0\1\231\4\0\1\231\16\0\1\231\15\0"+
-    "\1\231\20\0\1\231\1\0\1\231\41\0\1\231\4\0"+
-    "\1\231\10\0\2\231\5\0\2\231\10\0\1\231\26\0"+
-    "\2\231\5\0\1\231\2\0\1\231\3\0\2\231\10\0"+
-    "\4\231\1\0\3\231\1\0\1\231\2\0\1\231\2\0"+
-    "\1\231\4\0\4\231\1\0\2\231\1\0\1\231\2\0"+
-    "\1\231\1\0\1\231\2\0\4\231\2\0\3\231\1\0"+
-    "\2\231\1\0\3\231\1\0\4\231\1\0\2\231\5\0"+
-    "\4\231\2\0\10\231\1\0\1\231\2\0\1\231\1\0"+
-    "\2\231\4\0\1\231\3\0\3\231\27\0\1\231\4\0"+
-    "\1\231\11\0\1\231\22\0\1\231\3\0\1\231\13\0"+
-    "\1\64\2\0\1\64\10\0\1\231\22\0\4\64\35\0"+
-    "\1\231\31\0\1\231\3\0\4\231\1\0\1\231\1\0"+
-    "\1\232\2\0\1\231\1\0\2\231\2\0\2\231\2\0"+
-    "\3\231\1\0\1\231\1\0\1\231\2\0\4\231\1\0"+
-    "\3\231\1\0\1\231\1\0\3\231\1\0\2\231\1\0"+
-    "\4\231\1\0\2\231\2\0\10\231\1\0\2\231\1\0"+
-    "\10\231\1\232\1\0\7\231\1\0\10\231\1\0\6\231"+
-    "\1\0\1\231\1\0\2\231\2\0\1\231\1\0\1\231"+
-    "\3\0\3\231\36\0\1\231\17\0\1\231\23\0\1\231"+
-    "\23\0\1\231\6\0\3\231\37\0\1\231\7\0\1\231"+
-    "\30\0\1\231\1\0\2\231\1\0\1\231\1\0\4\231"+
-    "\1\0\1\231\1\0\1\231\1\0\2\231\1\0\3\231"+
-    "\1\0\2\231\1\0\4\231\1\0\3\231\1\0\17\231"+
-    "\1\0\2\231\1\0\21\231\1\0\2\231\1\0\41\231"+
-    "\1\0\1\231\1\0\2\231\2\0\1\231\1\0\1\231"+
-    "\1\0\1\231\1\0\3\231\36\0\1\231\3\0\2\231"+
-    "\12\0\2\231\13\0\1\231\6\0\1\231\2\0\2\231"+
-    "\6\0\1\231\4\0\2\231\2\0\2\231\5\0\3\231"+
-    "\20\0\1\231\16\0\1\231\7\0\1\231\30\0\1\231"+
-    "\1\0\2\231\1\0\1\231\2\0\2\231\2\0\1\231"+
-    "\3\0\2\231\1\0\3\231\1\0\2\231\1\0\4\231"+
-    "\1\0\3\231\1\0\1\231\1\0\2\231\2\0\11\231"+
-    "\1\0\2\231\1\0\1\231\1\0\2\231\1\0\14\231"+
-    "\1\0\2\231\1\0\10\231\1\0\2\231\1\0\1\231"+
-    "\1\0\23\231\1\0\1\231\1\0\2\231\2\0\1\231"+
-    "\1\0\1\231\1\0\1\231\1\0\3\231\22\0\1\231"+
-    "\26\0\2\231\23\0\1\232\1\231\40\0\1\232\13\0"+
-    "\1\64\65\0\1\232\11\0\1\64\15\0\4\231\2\0"+
-    "\2\231\14\0\3\231\1\64\1\0\2\64\11\0\3\231"+
-    "\3\0\1\231\1\0\1\64\4\0\1\64\2\231\1\0"+
-    "\4\232\1\0\2\231\5\0\4\64\2\0\1\231\1\64"+
-    "\12\0\1\64\7\0\1\231\44\0\1\231\3\0\2\231"+
-    "\12\0\2\231\1\0\3\231\7\0\1\231\6\0\2\231"+
-    "\1\0\2\231\6\0\1\231\4\0\2\231\2\0\2\231"+
-    "\5\0\3\231\2\0\1\231\3\0\2\232\10\0\1\231"+
-    "\16\0\1\231\7\0\1\231\30\0\1\231\4\0\1\231"+
-    "\6\0\1\231\3\0\1\231\6\0\1\231\5\0\1\231"+
-    "\2\0\2\231\1\0\17\231\2\0\1\231\13\0\7\231"+
-    "\2\0\1\231\1\0\1\231\1\0\2\231\2\0\1\231"+
-    "\1\0\3\231\2\0\1\231\1\0\1\231\1\0\1\231"+
-    "\1\0\1\231\4\0\1\64\1\0\2\231\6\0\1\231"+
-    "\7\0\1\231\1\0\1\231\42\0\1\231\17\0\2\231"+
-    "\22\0\1\231\2\0\2\231\13\0\1\231\3\0\2\231"+
-    "\5\0\3\231\20\0\1\231\16\0\1\231\7\0\1\231"+
-    "\35\0\1\231\6\0\1\231\3\0\1\231\3\0\1\231"+
-    "\7\0\1\231\31\0\20\231\5\0\3\231\4\0\1\231"+
-    "\6\0\1\231\3\0\2\231\2\0\2\231\4\0\1\231"+
-    "\4\64\1\0\1\231\2\0\1\231\4\0\1\231\1\0"+
-    "\1\231\1\0\1\231\134\0\2\64\25\0\4\64\55\0"+
-    "\1\64\15\0\2\64\10\0\2\64\1\0\1\64\1\0"+
-    "\1\64\11\0\1\64\11\0\2\64\6\0\1\64\2\0"+
-    "\4\64\3\0\1\64\2\0\2\64\1\0\3\64\1\0"+
-    "\2\64\1\0\1\64\10\0\1\64\1\0\2\64\2\0"+
-    "\2\64\1\0\4\64\23\0\1\64\21\0\1\211\1\0"+
-    "\1\212\2\0\1\316\1\0\1\214\4\0\1\215\1\0"+
-    "\1\216\1\0\1\217\2\0\1\220\3\0\1\317\2\0"+
-    "\1\320\4\0\1\223\3\0\1\321\17\0\1\225\2\0"+
-    "\1\322\21\0\1\323\2\0\1\324\61\0\2\231\1\232"+
-    "\1\0\1\325\1\0\1\325\1\326\1\0\1\231\2\0"+
-    "\1\325\1\0\1\233\1\231\1\0\1\211\1\0\1\212"+
-    "\2\0\1\327\1\0\1\214\4\0\1\215\1\0\1\216"+
-    "\1\0\1\217\2\0\1\220\3\0\1\330\2\0\1\331"+
-    "\4\0\1\223\3\0\1\332\17\0\1\225\2\0\1\333"+
-    "\21\0\1\334\2\0\1\335\61\0\1\231\2\232\2\0"+
-    "\2\336\1\337\1\0\1\232\2\0\1\336\1\0\1\233"+
-    "\1\231\1\0\1\211\1\0\1\212\2\0\1\340\1\0"+
-    "\1\214\4\0\1\215\1\0\1\216\1\0\1\217\2\0"+
-    "\1\220\3\0\1\341\2\0\1\342\4\0\1\223\3\0"+
-    "\1\343\17\0\1\225\2\0\1\344\21\0\1\345\2\0"+
-    "\1\346\61\0\1\231\1\233\1\232\1\0\1\325\1\0"+
-    "\1\325\1\326\1\0\1\233\2\0\1\231\1\347\1\233"+
-    "\1\231\71\0\1\76\2\0\1\76\33\0\4\76\102\0"+
-    "\1\31\104\0\1\31\146\0\1\31\41\0\1\31\13\0"+
-    "\1\76\65\0\1\31\11\0\1\76\44\0\1\76\1\0"+
-    "\2\76\21\0\1\76\4\0\1\76\3\0\4\31\10\0"+
-    "\4\76\3\0\1\76\12\0\1\76\164\0\2\31\233\0"+
-    "\1\76\222\0\4\76\152\0\2\76\25\0\4\76\55\0"+
-    "\1\76\15\0\2\76\10\0\2\76\1\0\1\76\1\0"+
-    "\1\76\11\0\1\76\11\0\2\76\6\0\1\76\2\0"+
-    "\4\76\3\0\1\76\2\0\2\76\1\0\3\76\1\0"+
-    "\2\76\1\0\1\76\10\0\1\76\1\0\2\76\2\0"+
-    "\2\76\1\0\4\76\23\0\1\76\27\0\1\231\4\0"+
-    "\1\231\11\0\1\231\22\0\1\231\3\0\1\231\13\0"+
-    "\1\77\2\0\1\77\10\0\1\231\22\0\4\77\35\0"+
-    "\1\231\31\0\1\231\3\0\4\231\1\0\1\231\1\0"+
-    "\1\256\2\0\1\231\1\0\2\231\2\0\2\231\2\0"+
-    "\3\231\1\0\1\231\1\0\1\231\2\0\4\231\1\0"+
-    "\3\231\1\0\1\231\1\0\3\231\1\0\2\231\1\0"+
-    "\4\231\1\0\2\231\2\0\10\231\1\0\2\231\1\0"+
-    "\10\231\1\256\1\0\7\231\1\0\10\231\1\0\6\231"+
-    "\1\0\1\231\1\0\2\231\2\0\1\231\1\0\1\231"+
-    "\3\0\3\231\22\0\1\231\26\0\2\231\23\0\1\256"+
-    "\1\231\40\0\1\256\13\0\1\77\65\0\1\256\11\0"+
-    "\1\77\15\0\4\231\2\0\2\231\14\0\3\231\1\77"+
-    "\1\0\2\77\11\0\3\231\3\0\1\231\1\0\1\77"+
-    "\4\0\1\77\2\231\1\0\4\256\1\0\2\231\5\0"+
-    "\4\77\2\0\1\231\1\77\12\0\1\77\7\0\1\231"+
-    "\44\0\1\231\3\0\2\231\12\0\2\231\1\0\3\231"+
-    "\7\0\1\231\6\0\2\231\1\0\2\231\6\0\1\231"+
-    "\4\0\2\231\2\0\2\231\5\0\3\231\2\0\1\231"+
-    "\3\0\2\256\10\0\1\231\16\0\1\231\7\0\1\231"+
-    "\30\0\1\231\4\0\1\231\6\0\1\231\3\0\1\231"+
-    "\6\0\1\231\5\0\1\231\2\0\2\231\1\0\17\231"+
-    "\2\0\1\231\13\0\7\231\2\0\1\231\1\0\1\231"+
-    "\1\0\2\231\2\0\1\231\1\0\3\231\2\0\1\231"+
-    "\1\0\1\231\1\0\1\231\1\0\1\231\4\0\1\77"+
-    "\1\0\2\231\6\0\1\231\7\0\1\231\1\0\1\231"+
-    "\33\0\1\231\6\0\1\231\3\0\1\231\3\0\1\231"+
-    "\7\0\1\231\31\0\20\231\5\0\3\231\4\0\1\231"+
-    "\6\0\1\231\3\0\2\231\2\0\2\231\4\0\1\231"+
-    "\4\77\1\0\1\231\2\0\1\231\4\0\1\231\1\0"+
-    "\1\231\1\0\1\231\134\0\2\77\25\0\4\77\55\0"+
-    "\1\77\15\0\2\77\10\0\2\77\1\0\1\77\1\0"+
-    "\1\77\11\0\1\77\11\0\2\77\6\0\1\77\2\0"+
-    "\4\77\3\0\1\77\2\0\2\77\1\0\3\77\1\0"+
-    "\2\77\1\0\1\77\10\0\1\77\1\0\2\77\2\0"+
-    "\2\77\1\0\4\77\23\0\1\77\21\0\1\211\1\0"+
-    "\1\212\2\0\1\350\1\0\1\246\4\0\1\215\1\0"+
-    "\1\216\1\0\1\217\2\0\1\220\3\0\1\351\2\0"+
-    "\1\352\4\0\1\251\3\0\1\353\17\0\1\225\2\0"+
-    "\1\354\21\0\1\355\2\0\1\356\61\0\1\231\2\256"+
-    "\2\0\2\357\1\360\1\0\1\256\2\0\1\357\1\0"+
-    "\1\233\1\231\71\0\1\121\2\0\1\121\33\0\4\121"+
-    "\216\0\1\121\77\0\1\121\44\0\1\121\1\0\2\121"+
-    "\21\0\1\121\4\0\1\121\17\0\4\121\3\0\1\121"+
-    "\12\0\1\121\203\0\1\121\222\0\4\121\152\0\2\121"+
-    "\25\0\4\121\55\0\1\121\15\0\2\121\10\0\2\121"+
-    "\1\0\1\121\1\0\1\121\11\0\1\121\11\0\2\121"+
-    "\6\0\1\121\2\0\4\121\3\0\1\121\2\0\2\121"+
-    "\1\0\3\121\1\0\2\121\1\0\1\121\10\0\1\121"+
-    "\1\0\2\121\2\0\2\121\1\0\4\121\23\0\1\121"+
-    "\27\0\1\30\4\0\1\30\11\0\1\30\22\0\1\30"+
-    "\3\0\1\30\13\0\1\147\2\0\1\147\10\0\1\30"+
-    "\22\0\4\147\35\0\1\30\26\0\1\30\26\0\2\30"+
-    "\23\0\1\62\1\30\40\0\1\62\13\0\1\147\65\0"+
-    "\1\62\11\0\1\147\15\0\4\30\2\0\2\30\14\0"+
-    "\3\30\1\147\1\0\2\147\11\0\3\30\3\0\1\30"+
-    "\1\0\1\147\4\0\1\147\2\30\1\0\4\62\1\0"+
-    "\2\30\5\0\4\147\2\0\1\30\1\147\12\0\1\147"+
-    "\7\0\1\30\30\0\1\30\4\0\1\30\6\0\1\30"+
-    "\3\0\1\30\6\0\1\30\5\0\1\30\2\0\2\30"+
-    "\1\0\17\30\2\0\1\30\13\0\7\30\2\0\1\30"+
-    "\1\0\1\30\1\0\2\30\2\0\1\30\1\0\3\30"+
-    "\2\0\1\30\1\0\1\30\1\0\1\30\1\0\1\30"+
-    "\4\0\1\147\1\0\2\30\6\0\1\30\7\0\1\30"+
-    "\1\0\1\30\33\0\1\30\6\0\1\30\3\0\1\30"+
-    "\3\0\1\30\7\0\1\30\31\0\20\30\5\0\3\30"+
-    "\4\0\1\30\6\0\1\30\3\0\2\30\2\0\2\30"+
-    "\4\0\1\30\4\147\1\0\1\30\2\0\1\30\4\0"+
-    "\1\30\1\0\1\30\1\0\1\30\134\0\2\147\25\0"+
-    "\4\147\55\0\1\147\15\0\2\147\10\0\2\147\1\0"+
-    "\1\147\1\0\1\147\11\0\1\147\11\0\2\147\6\0"+
-    "\1\147\2\0\4\147\3\0\1\147\2\0\2\147\1\0"+
-    "\3\147\1\0\2\147\1\0\1\147\10\0\1\147\1\0"+
-    "\2\147\2\0\2\147\1\0\4\147\23\0\1\147\111\0"+
-    "\1\150\2\0\1\150\33\0\4\150\216\0\1\150\77\0"+
-    "\1\150\44\0\1\150\1\0\2\150\21\0\1\150\4\0"+
-    "\1\150\17\0\4\150\3\0\1\150\12\0\1\150\203\0"+
-    "\1\150\222\0\4\150\152\0\2\150\25\0\4\150\55\0"+
-    "\1\150\15\0\2\150\10\0\2\150\1\0\1\150\1\0"+
-    "\1\150\11\0\1\150\11\0\2\150\6\0\1\150\2\0"+
-    "\4\150\3\0\1\150\2\0\2\150\1\0\3\150\1\0"+
-    "\2\150\1\0\1\150\10\0\1\150\1\0\2\150\2\0"+
-    "\2\150\1\0\4\150\23\0\1\150\26\0\1\361\21\0"+
-    "\1\362\2\0\1\363\10\0\1\364\22\0\1\365\21\0"+
-    "\1\366\2\0\1\367\55\0\1\167\4\0\1\304\7\0"+
-    "\1\304\77\0\1\177\2\0\1\177\33\0\4\177\102\0"+
-    "\1\62\104\0\1\62\146\0\1\62\41\0\1\62\13\0"+
-    "\1\177\65\0\1\62\11\0\1\177\44\0\1\177\1\0"+
-    "\2\177\21\0\1\177\4\0\1\177\3\0\4\62\10\0"+
-    "\4\177\3\0\1\177\12\0\1\177\164\0\2\62\233\0"+
-    "\1\177\222\0\4\177\152\0\2\177\25\0\4\177\55\0"+
-    "\1\177\15\0\2\177\10\0\2\177\1\0\1\177\1\0"+
-    "\1\177\11\0\1\177\11\0\2\177\6\0\1\177\2\0"+
-    "\4\177\3\0\1\177\2\0\2\177\1\0\3\177\1\0"+
-    "\2\177\1\0\1\177\10\0\1\177\1\0\2\177\2\0"+
-    "\2\177\1\0\4\177\23\0\1\177\27\0\1\231\4\0"+
-    "\1\231\11\0\1\231\22\0\1\231\3\0\1\231\13\0"+
-    "\1\231\2\0\1\231\10\0\1\231\22\0\4\231\35\0"+
-    "\1\231\26\0\1\231\26\0\2\231\23\0\1\232\1\231"+
-    "\40\0\1\232\13\0\1\231\65\0\1\232\11\0\1\231"+
-    "\15\0\4\231\2\0\2\231\14\0\4\231\1\0\2\231"+
-    "\11\0\3\231\3\0\1\231\1\0\1\231\4\0\3\231"+
-    "\1\0\4\232\1\0\2\231\5\0\4\231\2\0\2\231"+
-    "\12\0\1\231\7\0\1\231\30\0\1\231\4\0\1\231"+
-    "\6\0\1\231\3\0\1\231\6\0\1\231\5\0\1\231"+
-    "\2\0\2\231\1\0\17\231\2\0\1\231\13\0\7\231"+
-    "\2\0\1\231\1\0\1\231\1\0\2\231\2\0\1\231"+
-    "\1\0\3\231\2\0\1\231\1\0\1\231\1\0\1\231"+
-    "\1\0\1\231\4\0\1\231\1\0\2\231\6\0\1\231"+
-    "\7\0\1\231\1\0\1\231\33\0\1\231\6\0\1\231"+
-    "\3\0\1\231\3\0\1\231\7\0\1\231\31\0\20\231"+
-    "\5\0\3\231\4\0\1\231\6\0\1\231\3\0\2\231"+
-    "\2\0\2\231\4\0\5\231\1\0\1\231\2\0\1\231"+
-    "\4\0\1\231\1\0\1\231\1\0\1\231\134\0\2\231"+
-    "\25\0\4\231\55\0\1\231\15\0\2\231\10\0\2\231"+
-    "\1\0\1\231\1\0\1\231\11\0\1\231\11\0\2\231"+
-    "\6\0\1\231\2\0\4\231\3\0\1\231\2\0\2\231"+
-    "\1\0\3\231\1\0\2\231\1\0\1\231\10\0\1\231"+
-    "\1\0\2\231\2\0\2\231\1\0\4\231\23\0\1\231"+
-    "\21\0\1\211\1\0\1\212\2\0\1\370\1\0\1\371"+
-    "\4\0\1\215\1\0\1\216\1\0\1\217\2\0\1\220"+
-    "\3\0\1\372\2\0\1\373\4\0\1\374\3\0\1\375"+
-    "\17\0\1\225\2\0\1\376\21\0\1\377\2\0\1\u0100"+
-    "\61\0\1\231\1\325\2\0\1\325\1\0\2\325\1\0"+
-    "\1\325\2\0\1\325\1\0\2\231\1\0\1\211\1\0"+
-    "\1\212\2\0\1\u0101\1\0\1\214\4\0\1\215\1\0"+
-    "\1\216\1\0\1\217\2\0\1\220\3\0\1\u0102\2\0"+
-    "\1\u0103\4\0\1\223\3\0\1\u0104\17\0\1\225\2\0"+
-    "\1\u0105\21\0\1\u0106\2\0\1\u0107\41\0\1\117\17\0"+
-    "\1\231\1\326\1\232\1\121\1\325\1\0\1\325\1\326"+
-    "\1\0\1\326\2\0\1\325\1\0\1\233\1\231\7\0"+
-    "\1\231\4\0\1\231\11\0\1\231\22\0\1\231\3\0"+
-    "\1\231\13\0\1\232\2\0\1\232\10\0\1\231\22\0"+
-    "\4\232\35\0\1\231\26\0\1\231\26\0\2\231\23\0"+
-    "\1\232\1\231\40\0\1\232\13\0\1\232\65\0\1\232"+
-    "\11\0\1\232\15\0\4\231\2\0\2\231\14\0\3\231"+
-    "\1\232\1\0\2\232\11\0\3\231\3\0\1\231\1\0"+
-    "\1\232\4\0\1\232\2\231\1\0\4\232\1\0\2\231"+
-    "\5\0\4\232\2\0\1\231\1\232\12\0\1\232\7\0"+
-    "\1\231\30\0\1\231\4\0\1\231\6\0\1\231\3\0"+
-    "\1\231\6\0\1\231\5\0\1\231\2\0\2\231\1\0"+
-    "\17\231\2\0\1\231\13\0\7\231\2\0\1\231\1\0"+
-    "\1\231\1\0\2\231\2\0\1\231\1\0\3\231\2\0"+
-    "\1\231\1\0\1\231\1\0\1\231\1\0\1\231\4\0"+
-    "\1\232\1\0\2\231\6\0\1\231\7\0\1\231\1\0"+
-    "\1\231\33\0\1\231\6\0\1\231\3\0\1\231\3\0"+
-    "\1\231\7\0\1\231\31\0\20\231\5\0\3\231\4\0"+
-    "\1\231\6\0\1\231\3\0\2\231\2\0\2\231\4\0"+
-    "\1\231\4\232\1\0\1\231\2\0\1\231\4\0\1\231"+
-    "\1\0\1\231\1\0\1\231\134\0\2\232\25\0\4\232"+
-    "\55\0\1\232\15\0\2\232\10\0\2\232\1\0\1\232"+
-    "\1\0\1\232\11\0\1\232\11\0\2\232\6\0\1\232"+
-    "\2\0\4\232\3\0\1\232\2\0\2\232\1\0\3\232"+
-    "\1\0\2\232\1\0\1\232\10\0\1\232\1\0\2\232"+
-    "\2\0\2\232\1\0\4\232\23\0\1\232\26\0\1\u0108"+
-    "\1\0\1\u0109\17\0\1\u010a\2\0\1\u010b\4\0\1\u010c"+
-    "\3\0\1\u010d\22\0\1\u010e\21\0\1\u010f\2\0\1\u0110"+
-    "\62\0\1\336\1\232\2\0\3\336\1\0\1\336\2\0"+
-    "\1\336\4\0\1\211\1\0\1\212\2\0\1\u0111\1\0"+
-    "\1\214\4\0\1\215\1\0\1\216\1\0\1\217\2\0"+
-    "\1\220\3\0\1\u0112\2\0\1\u0113\4\0\1\223\3\0"+
-    "\1\u0114\17\0\1\225\2\0\1\u0115\21\0\1\u0116\2\0"+
-    "\1\u0117\41\0\1\117\17\0\1\231\1\337\1\232\1\121"+
-    "\1\0\2\336\1\337\1\0\1\337\2\0\1\336\1\0"+
-    "\1\233\1\231\7\0\1\231\4\0\1\231\11\0\1\231"+
-    "\22\0\1\231\3\0\1\231\13\0\1\233\2\0\1\233"+
-    "\10\0\1\231\22\0\4\233\35\0\1\231\26\0\1\231"+
-    "\26\0\2\231\23\0\1\232\1\231\40\0\1\232\13\0"+
-    "\1\233\65\0\1\232\11\0\1\233\15\0\4\231\2\0"+
-    "\2\231\14\0\3\231\1\233\1\0\2\233\11\0\3\231"+
-    "\3\0\1\231\1\0\1\233\4\0\1\233\2\231\1\0"+
-    "\4\232\1\0\2\231\5\0\4\233\2\0\1\231\1\233"+
-    "\12\0\1\233\7\0\1\231\30\0\1\231\4\0\1\231"+
-    "\6\0\1\231\3\0\1\231\6\0\1\231\5\0\1\231"+
-    "\2\0\2\231\1\0\17\231\2\0\1\231\13\0\7\231"+
-    "\2\0\1\231\1\0\1\231\1\0\2\231\2\0\1\231"+
-    "\1\0\3\231\2\0\1\231\1\0\1\231\1\0\1\231"+
-    "\1\0\1\231\4\0\1\233\1\0\2\231\6\0\1\231"+
-    "\7\0\1\231\1\0\1\231\33\0\1\231\6\0\1\231"+
-    "\3\0\1\231\3\0\1\231\7\0\1\231\31\0\20\231"+
-    "\5\0\3\231\4\0\1\231\6\0\1\231\3\0\2\231"+
-    "\2\0\2\231\4\0\1\231\4\233\1\0\1\231\2\0"+
-    "\1\231\4\0\1\231\1\0\1\231\1\0\1\231\134\0"+
-    "\2\233\25\0\4\233\55\0\1\233\15\0\2\233\10\0"+
-    "\2\233\1\0\1\233\1\0\1\233\11\0\1\233\11\0"+
-    "\2\233\6\0\1\233\2\0\4\233\3\0\1\233\2\0"+
-    "\2\233\1\0\3\233\1\0\2\233\1\0\1\233\10\0"+
-    "\1\233\1\0\2\233\2\0\2\233\1\0\4\233\23\0"+
-    "\1\233\26\0\1\u0118\21\0\1\u0119\2\0\1\u011a\10\0"+
-    "\1\u011b\22\0\1\u011c\21\0\1\u011d\2\0\1\u011e\62\0"+
-    "\1\347\7\0\1\347\4\0\1\u011f\10\0\1\231\4\0"+
-    "\1\231\11\0\1\231\22\0\1\231\3\0\1\231\13\0"+
-    "\1\256\2\0\1\256\10\0\1\231\22\0\4\256\35\0"+
-    "\1\231\26\0\1\231\26\0\2\231\23\0\1\256\1\231"+
-    "\40\0\1\256\13\0\1\256\65\0\1\256\11\0\1\256"+
-    "\15\0\4\231\2\0\2\231\14\0\3\231\1\256\1\0"+
-    "\2\256\11\0\3\231\3\0\1\231\1\0\1\256\4\0"+
-    "\1\256\2\231\1\0\4\256\1\0\2\231\5\0\4\256"+
-    "\2\0\1\231\1\256\12\0\1\256\7\0\1\231\30\0"+
-    "\1\231\4\0\1\231\6\0\1\231\3\0\1\231\6\0"+
-    "\1\231\5\0\1\231\2\0\2\231\1\0\17\231\2\0"+
-    "\1\231\13\0\7\231\2\0\1\231\1\0\1\231\1\0"+
-    "\2\231\2\0\1\231\1\0\3\231\2\0\1\231\1\0"+
-    "\1\231\1\0\1\231\1\0\1\231\4\0\1\256\1\0"+
-    "\2\231\6\0\1\231\7\0\1\231\1\0\1\231\33\0"+
-    "\1\231\6\0\1\231\3\0\1\231\3\0\1\231\7\0"+
-    "\1\231\31\0\20\231\5\0\3\231\4\0\1\231\6\0"+
-    "\1\231\3\0\2\231\2\0\2\231\4\0\1\231\4\256"+
-    "\1\0\1\231\2\0\1\231\4\0\1\231\1\0\1\231"+
-    "\1\0\1\231\134\0\2\256\25\0\4\256\55\0\1\256"+
-    "\15\0\2\256\10\0\2\256\1\0\1\256\1\0\1\256"+
-    "\11\0\1\256\11\0\2\256\6\0\1\256\2\0\4\256"+
-    "\3\0\1\256\2\0\2\256\1\0\3\256\1\0\2\256"+
-    "\1\0\1\256\10\0\1\256\1\0\2\256\2\0\2\256"+
-    "\1\0\4\256\23\0\1\256\26\0\1\u0120\1\0\1\u0121"+
-    "\17\0\1\u0122\2\0\1\u0123\4\0\1\u0124\3\0\1\u0125"+
-    "\22\0\1\u0126\21\0\1\u0127\2\0\1\u0128\62\0\1\357"+
-    "\1\256\2\0\3\336\1\0\1\357\2\0\1\336\4\0"+
-    "\1\211\1\0\1\212\2\0\1\u0129\1\0\1\246\4\0"+
-    "\1\215\1\0\1\216\1\0\1\217\2\0\1\220\3\0"+
-    "\1\u012a\2\0\1\u012b\4\0\1\251\3\0\1\u012c\17\0"+
-    "\1\225\2\0\1\u012d\21\0\1\u012e\2\0\1\u012f\41\0"+
-    "\1\117\17\0\1\231\1\360\1\256\1\121\1\0\2\336"+
-    "\1\360\1\0\1\360\2\0\1\336\1\0\1\233\1\231"+
-    "\71\0\1\304\2\0\1\304\33\0\4\304\216\0\1\304"+
-    "\77\0\1\304\44\0\1\304\1\0\2\304\21\0\1\304"+
-    "\4\0\1\304\17\0\4\304\3\0\1\304\12\0\1\304"+
-    "\203\0\1\304\222\0\4\304\152\0\2\304\25\0\4\304"+
-    "\55\0\1\304\15\0\2\304\10\0\2\304\1\0\1\304"+
-    "\1\0\1\304\11\0\1\304\11\0\2\304\6\0\1\304"+
-    "\2\0\4\304\3\0\1\304\2\0\2\304\1\0\3\304"+
-    "\1\0\2\304\1\0\1\304\10\0\1\304\1\0\2\304"+
-    "\2\0\2\304\1\0\4\304\23\0\1\304\27\0\1\231"+
-    "\4\0\1\231\11\0\1\231\22\0\1\231\3\0\1\231"+
-    "\13\0\1\325\2\0\1\325\10\0\1\231\22\0\4\325"+
-    "\35\0\1\231\31\0\1\231\3\0\4\231\1\0\1\231"+
-    "\4\0\1\231\1\0\2\231\2\0\2\231\2\0\3\231"+
-    "\1\0\1\231\1\0\1\231\2\0\4\231\1\0\3\231"+
-    "\1\0\1\231\1\0\3\231\1\0\2\231\1\0\4\231"+
-    "\1\0\2\231\2\0\10\231\1\0\2\231\1\0\10\231"+
-    "\2\0\7\231\1\0\10\231\1\0\6\231\1\0\1\231"+
-    "\1\0\2\231\2\0\1\231\1\0\1\231\3\0\3\231"+
-    "\22\0\1\231\26\0\2\231\24\0\1\231\54\0\1\325"+
-    "\77\0\1\325\15\0\4\231\2\0\2\231\14\0\3\231"+
-    "\1\325\1\0\2\325\11\0\3\231\3\0\1\231\1\0"+
-    "\1\325\4\0\1\325\2\231\6\0\2\231\5\0\4\325"+
-    "\2\0\1\231\1\325\12\0\1\325\7\0\1\231\44\0"+
-    "\1\231\3\0\2\231\12\0\2\231\1\0\3\231\7\0"+
-    "\1\231\6\0\2\231\1\0\2\231\6\0\1\231\4\0"+
-    "\2\231\2\0\2\231\5\0\3\231\2\0\1\231\15\0"+
-    "\1\231\16\0\1\231\7\0\1\231\30\0\1\231\4\0"+
-    "\1\231\6\0\1\231\3\0\1\231\6\0\1\231\5\0"+
-    "\1\231\2\0\2\231\1\0\17\231\2\0\1\231\13\0"+
-    "\7\231\2\0\1\231\1\0\1\231\1\0\2\231\2\0"+
-    "\1\231\1\0\3\231\2\0\1\231\1\0\1\231\1\0"+
-    "\1\231\1\0\1\231\4\0\1\325\1\0\2\231\6\0"+
-    "\1\231\7\0\1\231\1\0\1\231\33\0\1\231\6\0"+
-    "\1\231\3\0\1\231\3\0\1\231\7\0\1\231\31\0"+
-    "\20\231\5\0\3\231\4\0\1\231\6\0\1\231\3\0"+
-    "\2\231\2\0\2\231\4\0\1\231\4\325\1\0\1\231"+
-    "\2\0\1\231\4\0\1\231\1\0\1\231\1\0\1\231"+
-    "\134\0\2\325\25\0\4\325\55\0\1\325\15\0\2\325"+
-    "\10\0\2\325\1\0\1\325\1\0\1\325\11\0\1\325"+
-    "\11\0\2\325\6\0\1\325\2\0\4\325\3\0\1\325"+
-    "\2\0\2\325\1\0\3\325\1\0\2\325\1\0\1\325"+
-    "\10\0\1\325\1\0\2\325\2\0\2\325\1\0\4\325"+
-    "\23\0\1\325\27\0\1\231\4\0\1\231\11\0\1\231"+
-    "\22\0\1\231\3\0\1\231\13\0\1\326\2\0\1\326"+
-    "\10\0\1\231\22\0\4\326\35\0\1\231\26\0\1\231"+
-    "\26\0\2\231\23\0\1\232\1\231\40\0\1\232\13\0"+
-    "\1\326\65\0\1\232\11\0\1\326\15\0\4\231\2\0"+
-    "\2\231\14\0\3\231\1\326\1\0\2\326\11\0\3\231"+
-    "\3\0\1\231\1\0\1\326\4\0\1\326\2\231\1\0"+
-    "\4\232\1\0\2\231\5\0\4\326\2\0\1\231\1\326"+
-    "\12\0\1\326\7\0\1\231\30\0\1\231\4\0\1\231"+
-    "\6\0\1\231\3\0\1\231\6\0\1\231\5\0\1\231"+
-    "\2\0\2\231\1\0\17\231\2\0\1\231\13\0\7\231"+
-    "\2\0\1\231\1\0\1\231\1\0\2\231\2\0\1\231"+
-    "\1\0\3\231\2\0\1\231\1\0\1\231\1\0\1\231"+
-    "\1\0\1\231\4\0\1\326\1\0\2\231\6\0\1\231"+
-    "\7\0\1\231\1\0\1\231\33\0\1\231\6\0\1\231"+
-    "\3\0\1\231\3\0\1\231\7\0\1\231\31\0\20\231"+
-    "\5\0\3\231\4\0\1\231\6\0\1\231\3\0\2\231"+
-    "\2\0\2\231\4\0\1\231\4\326\1\0\1\231\2\0"+
-    "\1\231\4\0\1\231\1\0\1\231\1\0\1\231\134\0"+
-    "\2\326\25\0\4\326\55\0\1\326\15\0\2\326\10\0"+
-    "\2\326\1\0\1\326\1\0\1\326\11\0\1\326\11\0"+
-    "\2\326\6\0\1\326\2\0\4\326\3\0\1\326\2\0"+
-    "\2\326\1\0\3\326\1\0\2\326\1\0\1\326\10\0"+
-    "\1\326\1\0\2\326\2\0\2\326\1\0\4\326\23\0"+
-    "\1\326\111\0\1\336\2\0\1\336\33\0\4\336\102\0"+
-    "\1\232\104\0\1\232\146\0\1\232\41\0\1\232\13\0"+
-    "\1\336\65\0\1\232\11\0\1\336\44\0\1\336\1\0"+
-    "\2\336\21\0\1\336\4\0\1\336\3\0\4\232\10\0"+
-    "\4\336\3\0\1\336\12\0\1\336\164\0\2\232\233\0"+
-    "\1\336\222\0\4\336\152\0\2\336\25\0\4\336\55\0"+
-    "\1\336\15\0\2\336\10\0\2\336\1\0\1\336\1\0"+
-    "\1\336\11\0\1\336\11\0\2\336\6\0\1\336\2\0"+
-    "\4\336\3\0\1\336\2\0\2\336\1\0\3\336\1\0"+
-    "\2\336\1\0\1\336\10\0\1\336\1\0\2\336\2\0"+
-    "\2\336\1\0\4\336\23\0\1\336\27\0\1\231\4\0"+
-    "\1\231\11\0\1\231\22\0\1\231\3\0\1\231\13\0"+
-    "\1\337\2\0\1\337\10\0\1\231\22\0\4\337\35\0"+
-    "\1\231\26\0\1\231\26\0\2\231\23\0\1\232\1\231"+
-    "\40\0\1\232\13\0\1\337\65\0\1\232\11\0\1\337"+
-    "\15\0\4\231\2\0\2\231\14\0\3\231\1\337\1\0"+
-    "\2\337\11\0\3\231\3\0\1\231\1\0\1\337\4\0"+
-    "\1\337\2\231\1\0\4\232\1\0\2\231\5\0\4\337"+
-    "\2\0\1\231\1\337\12\0\1\337\7\0\1\231\30\0"+
-    "\1\231\4\0\1\231\6\0\1\231\3\0\1\231\6\0"+
-    "\1\231\5\0\1\231\2\0\2\231\1\0\17\231\2\0"+
-    "\1\231\13\0\7\231\2\0\1\231\1\0\1\231\1\0"+
-    "\2\231\2\0\1\231\1\0\3\231\2\0\1\231\1\0"+
-    "\1\231\1\0\1\231\1\0\1\231\4\0\1\337\1\0"+
-    "\2\231\6\0\1\231\7\0\1\231\1\0\1\231\33\0"+
-    "\1\231\6\0\1\231\3\0\1\231\3\0\1\231\7\0"+
-    "\1\231\31\0\20\231\5\0\3\231\4\0\1\231\6\0"+
-    "\1\231\3\0\2\231\2\0\2\231\4\0\1\231\4\337"+
-    "\1\0\1\231\2\0\1\231\4\0\1\231\1\0\1\231"+
-    "\1\0\1\231\134\0\2\337\25\0\4\337\55\0\1\337"+
-    "\15\0\2\337\10\0\2\337\1\0\1\337\1\0\1\337"+
-    "\11\0\1\337\11\0\2\337\6\0\1\337\2\0\4\337"+
-    "\3\0\1\337\2\0\2\337\1\0\3\337\1\0\2\337"+
-    "\1\0\1\337\10\0\1\337\1\0\2\337\2\0\2\337"+
-    "\1\0\4\337\23\0\1\337\111\0\1\347\2\0\1\347"+
-    "\33\0\4\347\216\0\1\347\77\0\1\347\44\0\1\347"+
-    "\1\0\2\347\21\0\1\347\4\0\1\347\17\0\4\347"+
-    "\3\0\1\347\12\0\1\347\203\0\1\347\222\0\4\347"+
-    "\152\0\2\347\25\0\4\347\55\0\1\347\15\0\2\347"+
-    "\10\0\2\347\1\0\1\347\1\0\1\347\11\0\1\347"+
-    "\11\0\2\347\6\0\1\347\2\0\4\347\3\0\1\347"+
-    "\2\0\2\347\1\0\3\347\1\0\2\347\1\0\1\347"+
-    "\10\0\1\347\1\0\2\347\2\0\2\347\1\0\4\347"+
-    "\23\0\1\347\21\0\1\211\1\0\1\212\2\0\1\u0130"+
-    "\1\0\1\214\4\0\1\215\1\0\1\216\1\0\1\217"+
-    "\2\0\1\220\3\0\1\u0131\2\0\1\u0132\4\0\1\223"+
-    "\3\0\1\u0133\17\0\1\225\2\0\1\u0134\21\0\1\u0135"+
-    "\2\0\1\u0136\61\0\1\231\1\u011f\1\232\4\0\1\64"+
-    "\1\0\1\u011f\4\0\1\233\1\231\71\0\1\357\2\0"+
-    "\1\357\33\0\4\357\102\0\1\256\104\0\1\256\146\0"+
-    "\1\256\41\0\1\256\13\0\1\357\65\0\1\256\11\0"+
-    "\1\357\44\0\1\357\1\0\2\357\21\0\1\357\4\0"+
-    "\1\357\3\0\4\256\10\0\4\357\3\0\1\357\12\0"+
-    "\1\357\164\0\2\256\233\0\1\357\222\0\4\357\152\0"+
-    "\2\357\25\0\4\357\55\0\1\357\15\0\2\357\10\0"+
-    "\2\357\1\0\1\357\1\0\1\357\11\0\1\357\11\0"+
-    "\2\357\6\0\1\357\2\0\4\357\3\0\1\357\2\0"+
-    "\2\357\1\0\3\357\1\0\2\357\1\0\1\357\10\0"+
-    "\1\357\1\0\2\357\2\0\2\357\1\0\4\357\23\0"+
-    "\1\357\27\0\1\231\4\0\1\231\11\0\1\231\22\0"+
-    "\1\231\3\0\1\231\13\0\1\360\2\0\1\360\10\0"+
-    "\1\231\22\0\4\360\35\0\1\231\26\0\1\231\26\0"+
-    "\2\231\23\0\1\256\1\231\40\0\1\256\13\0\1\360"+
-    "\65\0\1\256\11\0\1\360\15\0\4\231\2\0\2\231"+
-    "\14\0\3\231\1\360\1\0\2\360\11\0\3\231\3\0"+
-    "\1\231\1\0\1\360\4\0\1\360\2\231\1\0\4\256"+
-    "\1\0\2\231\5\0\4\360\2\0\1\231\1\360\12\0"+
-    "\1\360\7\0\1\231\30\0\1\231\4\0\1\231\6\0"+
-    "\1\231\3\0\1\231\6\0\1\231\5\0\1\231\2\0"+
-    "\2\231\1\0\17\231\2\0\1\231\13\0\7\231\2\0"+
-    "\1\231\1\0\1\231\1\0\2\231\2\0\1\231\1\0"+
-    "\3\231\2\0\1\231\1\0\1\231\1\0\1\231\1\0"+
-    "\1\231\4\0\1\360\1\0\2\231\6\0\1\231\7\0"+
-    "\1\231\1\0\1\231\33\0\1\231\6\0\1\231\3\0"+
-    "\1\231\3\0\1\231\7\0\1\231\31\0\20\231\5\0"+
-    "\3\231\4\0\1\231\6\0\1\231\3\0\2\231\2\0"+
-    "\2\231\4\0\1\231\4\360\1\0\1\231\2\0\1\231"+
-    "\4\0\1\231\1\0\1\231\1\0\1\231\134\0\2\360"+
-    "\25\0\4\360\55\0\1\360\15\0\2\360\10\0\2\360"+
-    "\1\0\1\360\1\0\1\360\11\0\1\360\11\0\2\360"+
-    "\6\0\1\360\2\0\4\360\3\0\1\360\2\0\2\360"+
-    "\1\0\3\360\1\0\2\360\1\0\1\360\10\0\1\360"+
-    "\1\0\2\360\2\0\2\360\1\0\4\360\23\0\1\360"+
-    "\27\0\1\231\4\0\1\231\11\0\1\231\22\0\1\231"+
-    "\3\0\1\231\13\0\1\u011f\2\0\1\u011f\10\0\1\231"+
-    "\22\0\4\u011f\35\0\1\231\26\0\1\231\26\0\2\231"+
-    "\23\0\1\232\1\231\40\0\1\232\13\0\1\u011f\65\0"+
-    "\1\232\11\0\1\u011f\15\0\4\231\2\0\2\231\14\0"+
-    "\3\231\1\u011f\1\0\2\u011f\11\0\3\231\3\0\1\231"+
-    "\1\0\1\u011f\4\0\1\u011f\2\231\1\0\4\232\1\0"+
-    "\2\231\5\0\4\u011f\2\0\1\231\1\u011f\12\0\1\u011f"+
-    "\7\0\1\231\30\0\1\231\4\0\1\231\6\0\1\231"+
-    "\3\0\1\231\6\0\1\231\5\0\1\231\2\0\2\231"+
-    "\1\0\17\231\2\0\1\231\13\0\7\231\2\0\1\231"+
-    "\1\0\1\231\1\0\2\231\2\0\1\231\1\0\3\231"+
-    "\2\0\1\231\1\0\1\231\1\0\1\231\1\0\1\231"+
-    "\4\0\1\u011f\1\0\2\231\6\0\1\231\7\0\1\231"+
-    "\1\0\1\231\33\0\1\231\6\0\1\231\3\0\1\231"+
-    "\3\0\1\231\7\0\1\231\31\0\20\231\5\0\3\231"+
-    "\4\0\1\231\6\0\1\231\3\0\2\231\2\0\2\231"+
-    "\4\0\1\231\4\u011f\1\0\1\231\2\0\1\231\4\0"+
-    "\1\231\1\0\1\231\1\0\1\231\134\0\2\u011f\25\0"+
-    "\4\u011f\55\0\1\u011f\15\0\2\u011f\10\0\2\u011f\1\0"+
-    "\1\u011f\1\0\1\u011f\11\0\1\u011f\11\0\2\u011f\6\0"+
-    "\1\u011f\2\0\4\u011f\3\0\1\u011f\2\0\2\u011f\1\0"+
-    "\3\u011f\1\0\2\u011f\1\0\1\u011f\10\0\1\u011f\1\0"+
-    "\2\u011f\2\0\2\u011f\1\0\4\u011f\23\0\1\u011f\20\0";
+    "\2\63\2\0\2\63\1\0\4\63\23\0\1\63\27\0"+
+    "\1\30\4\0\1\30\11\0\1\30\22\0\1\30\3\0"+
+    "\1\30\13\0\1\64\2\0\1\64\10\0\1\30\22\0"+
+    "\4\64\35\0\1\30\26\0\1\30\26\0\2\30\23\0"+
+    "\1\62\1\30\40\0\1\62\13\0\1\64\65\0\1\62"+
+    "\11\0\1\64\15\0\4\30\2\0\2\30\14\0\3\30"+
+    "\1\64\1\0\2\64\11\0\3\30\3\0\1\30\1\0"+
+    "\1\64\4\0\1\64\2\30\1\0\4\62\1\0\2\30"+
+    "\5\0\4\64\2\0\1\30\1\64\12\0\1\64\7\0"+
+    "\1\30\30\0\1\30\4\0\1\30\6\0\1\30\3\0"+
+    "\1\30\6\0\1\30\5\0\1\30\2\0\2\30\1\0"+
+    "\17\30\2\0\1\30\13\0\7\30\2\0\1\30\1\0"+
+    "\1\30\1\0\2\30\2\0\1\30\1\0\3\30\2\0"+
+    "\1\30\1\0\1\30\1\0\1\30\1\0\1\30\4\0"+
+    "\1\64\1\0\2\30\6\0\1\30\7\0\1\30\1\0"+
+    "\1\30\33\0\1\30\6\0\1\30\3\0\1\30\3\0"+
+    "\1\30\7\0\1\30\31\0\20\30\5\0\3\30\4\0"+
+    "\1\30\6\0\1\30\3\0\2\30\2\0\2\30\4\0"+
+    "\1\30\4\64\1\0\1\30\2\0\1\30\4\0\1\30"+
+    "\1\0\1\30\1\0\1\30\134\0\2\64\25\0\4\64"+
+    "\55\0\1\64\15\0\2\64\10\0\2\64\1\0\1\64"+
+    "\1\0\1\64\11\0\1\64\11\0\2\64\6\0\1\64"+
+    "\2\0\4\64\3\0\1\64\2\0\2\64\1\0\3\64"+
+    "\1\0\2\64\1\0\1\64\10\0\1\64\1\0\2\64"+
+    "\2\0\2\64\1\0\4\64\23\0\1\64\111\0\1\76"+
+    "\2\0\1\76\33\0\4\76\102\0\1\31\104\0\1\31"+
+    "\146\0\1\31\41\0\1\31\13\0\1\76\65\0\1\31"+
+    "\11\0\1\76\44\0\1\76\1\0\2\76\21\0\1\76"+
+    "\4\0\1\76\3\0\4\31\10\0\4\76\3\0\1\76"+
+    "\12\0\1\76\164\0\2\31\233\0\1\76\222\0\4\76"+
+    "\152\0\2\76\25\0\4\76\55\0\1\76\15\0\2\76"+
+    "\10\0\2\76\1\0\1\76\1\0\1\76\11\0\1\76"+
+    "\11\0\2\76\6\0\1\76\2\0\4\76\3\0\1\76"+
+    "\2\0\2\76\1\0\3\76\1\0\2\76\1\0\1\76"+
+    "\10\0\1\76\1\0\2\76\2\0\2\76\1\0\4\76"+
+    "\23\0\1\76\27\0\1\30\4\0\1\30\11\0\1\30"+
+    "\22\0\1\30\3\0\1\30\13\0\1\77\2\0\1\77"+
+    "\10\0\1\30\22\0\4\77\35\0\1\30\26\0\1\30"+
+    "\26\0\2\30\23\0\1\31\1\30\40\0\1\31\13\0"+
+    "\1\77\65\0\1\31\11\0\1\77\15\0\4\30\2\0"+
+    "\2\30\14\0\3\30\1\77\1\0\2\77\11\0\3\30"+
+    "\3\0\1\30\1\0\1\77\4\0\1\77\2\30\1\0"+
+    "\4\31\1\0\2\30\5\0\4\77\2\0\1\30\1\77"+
+    "\12\0\1\77\7\0\1\30\30\0\1\30\4\0\1\30"+
+    "\6\0\1\30\3\0\1\30\6\0\1\30\5\0\1\30"+
+    "\2\0\2\30\1\0\17\30\2\0\1\30\13\0\7\30"+
+    "\2\0\1\30\1\0\1\30\1\0\2\30\2\0\1\30"+
+    "\1\0\3\30\2\0\1\30\1\0\1\30\1\0\1\30"+
+    "\1\0\1\30\4\0\1\77\1\0\2\30\6\0\1\30"+
+    "\7\0\1\30\1\0\1\30\33\0\1\30\6\0\1\30"+
+    "\3\0\1\30\3\0\1\30\7\0\1\30\31\0\20\30"+
+    "\5\0\3\30\4\0\1\30\6\0\1\30\3\0\2\30"+
+    "\2\0\2\30\4\0\1\30\4\77\1\0\1\30\2\0"+
+    "\1\30\4\0\1\30\1\0\1\30\1\0\1\30\134\0"+
+    "\2\77\25\0\4\77\55\0\1\77\15\0\2\77\10\0"+
+    "\2\77\1\0\1\77\1\0\1\77\11\0\1\77\11\0"+
+    "\2\77\6\0\1\77\2\0\4\77\3\0\1\77\2\0"+
+    "\2\77\1\0\3\77\1\0\2\77\1\0\1\77\10\0"+
+    "\1\77\1\0\2\77\2\0\2\77\1\0\4\77\23\0"+
+    "\1\77\111\0\1\121\2\0\1\121\33\0\4\121\216\0"+
+    "\1\121\77\0\1\121\44\0\1\121\1\0\2\121\21\0"+
+    "\1\121\4\0\1\121\17\0\4\121\3\0\1\121\12\0"+
+    "\1\121\203\0\1\121\222\0\4\121\152\0\2\121\25\0"+
+    "\4\121\55\0\1\121\15\0\2\121\10\0\2\121\1\0"+
+    "\1\121\1\0\1\121\11\0\1\121\11\0\2\121\6\0"+
+    "\1\121\2\0\4\121\3\0\1\121\2\0\2\121\1\0"+
+    "\3\121\1\0\2\121\1\0\1\121\10\0\1\121\1\0"+
+    "\2\121\2\0\2\121\1\0\4\121\23\0\1\121\27\0"+
+    "\1\30\4\0\1\30\11\0\1\30\22\0\1\30\3\0"+
+    "\1\30\13\0\1\147\2\0\1\147\10\0\1\30\22\0"+
+    "\4\147\35\0\1\30\26\0\1\30\26\0\2\30\23\0"+
+    "\1\62\1\30\40\0\1\62\13\0\1\147\65\0\1\62"+
+    "\11\0\1\147\15\0\4\30\2\0\2\30\14\0\3\30"+
+    "\1\147\1\0\2\147\11\0\3\30\3\0\1\30\1\0"+
+    "\1\147\4\0\1\147\2\30\1\0\4\62\1\0\2\30"+
+    "\5\0\4\147\2\0\1\30\1\147\12\0\1\147\7\0"+
+    "\1\30\30\0\1\30\4\0\1\30\6\0\1\30\3\0"+
+    "\1\30\6\0\1\30\5\0\1\30\2\0\2\30\1\0"+
+    "\17\30\2\0\1\30\13\0\7\30\2\0\1\30\1\0"+
+    "\1\30\1\0\2\30\2\0\1\30\1\0\3\30\2\0"+
+    "\1\30\1\0\1\30\1\0\1\30\1\0\1\30\4\0"+
+    "\1\147\1\0\2\30\6\0\1\30\7\0\1\30\1\0"+
+    "\1\30\33\0\1\30\6\0\1\30\3\0\1\30\3\0"+
+    "\1\30\7\0\1\30\31\0\20\30\5\0\3\30\4\0"+
+    "\1\30\6\0\1\30\3\0\2\30\2\0\2\30\4\0"+
+    "\1\30\4\147\1\0\1\30\2\0\1\30\4\0\1\30"+
+    "\1\0\1\30\1\0\1\30\134\0\2\147\25\0\4\147"+
+    "\55\0\1\147\15\0\2\147\10\0\2\147\1\0\1\147"+
+    "\1\0\1\147\11\0\1\147\11\0\2\147\6\0\1\147"+
+    "\2\0\4\147\3\0\1\147\2\0\2\147\1\0\3\147"+
+    "\1\0\2\147\1\0\1\147\10\0\1\147\1\0\2\147"+
+    "\2\0\2\147\1\0\4\147\23\0\1\147\111\0\1\150"+
+    "\2\0\1\150\33\0\4\150\216\0\1\150\77\0\1\150"+
+    "\44\0\1\150\1\0\2\150\21\0\1\150\4\0\1\150"+
+    "\17\0\4\150\3\0\1\150\12\0\1\150\203\0\1\150"+
+    "\222\0\4\150\152\0\2\150\25\0\4\150\55\0\1\150"+
+    "\15\0\2\150\10\0\2\150\1\0\1\150\1\0\1\150"+
+    "\11\0\1\150\11\0\2\150\6\0\1\150\2\0\4\150"+
+    "\3\0\1\150\2\0\2\150\1\0\3\150\1\0\2\150"+
+    "\1\0\1\150\10\0\1\150\1\0\2\150\2\0\2\150"+
+    "\1\0\4\150\23\0\1\150\26\0\1\277\21\0\1\300"+
+    "\2\0\1\301\10\0\1\302\22\0\1\303\21\0\1\304"+
+    "\2\0\1\305\55\0\1\167\4\0\1\265\7\0\1\265"+
+    "\77\0\1\177\2\0\1\177\33\0\4\177\102\0\1\62"+
+    "\104\0\1\62\146\0\1\62\41\0\1\62\13\0\1\177"+
+    "\65\0\1\62\11\0\1\177\44\0\1\177\1\0\2\177"+
+    "\21\0\1\177\4\0\1\177\3\0\4\62\10\0\4\177"+
+    "\3\0\1\177\12\0\1\177\164\0\2\62\233\0\1\177"+
+    "\222\0\4\177\152\0\2\177\25\0\4\177\55\0\1\177"+
+    "\15\0\2\177\10\0\2\177\1\0\1\177\1\0\1\177"+
+    "\11\0\1\177\11\0\2\177\6\0\1\177\2\0\4\177"+
+    "\3\0\1\177\2\0\2\177\1\0\3\177\1\0\2\177"+
+    "\1\0\1\177\10\0\1\177\1\0\2\177\2\0\2\177"+
+    "\1\0\4\177\23\0\1\177\111\0\1\265\2\0\1\265"+
+    "\33\0\4\265\216\0\1\265\77\0\1\265\44\0\1\265"+
+    "\1\0\2\265\21\0\1\265\4\0\1\265\17\0\4\265"+
+    "\3\0\1\265\12\0\1\265\203\0\1\265\222\0\4\265"+
+    "\152\0\2\265\25\0\4\265\55\0\1\265\15\0\2\265"+
+    "\10\0\2\265\1\0\1\265\1\0\1\265\11\0\1\265"+
+    "\11\0\2\265\6\0\1\265\2\0\4\265\3\0\1\265"+
+    "\2\0\2\265\1\0\3\265\1\0\2\265\1\0\1\265"+
+    "\10\0\1\265\1\0\2\265\2\0\2\265\1\0\4\265"+
+    "\23\0\1\265\20\0";
 
   private static int [] zzUnpackTrans() {
-    int [] result = new int[42600];
+    int [] result = new int[26554];
     int offset = 0;
     offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
     return result;
@@ -1235,12 +852,10 @@ public final class StandardTokenizerImpl
 
   private static final String ZZ_ATTRIBUTE_PACKED_0 =
     "\1\0\1\11\36\1\21\0\1\1\1\0\1\1\12\0"+
-    "\1\1\21\0\1\1\25\0\1\1\61\0\3\1\22\0"+
-    "\1\1\25\0\1\1\21\0\1\1\10\0\1\1\20\0"+
-    "\1\1\56\0\1\1\27\0";
+    "\1\1\21\0\1\1\25\0\1\1\115\0\1\1\20\0";
 
   private static int [] zzUnpackAttribute() {
-    int [] result = new int[310];
+    int [] result = new int[197];
     int offset = 0;
     offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
     return result;

Modified: lucene/dev/branches/solr4470/lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/StandardTokenizerImpl.jflex
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr4470/lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/StandardTokenizerImpl.jflex?rev=1570113&r1=1570112&r2=1570113&view=diff
==============================================================================
--- lucene/dev/branches/solr4470/lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/StandardTokenizerImpl.jflex (original)
+++ lucene/dev/branches/solr4470/lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/StandardTokenizerImpl.jflex Thu Feb 20 08:57:51 2014
@@ -163,10 +163,10 @@ RegionalIndicatorEx = {RegionalIndicator
                      | {HebrewOrALetterEx} ( ( {ExtendNumLetEx}* | {MidLetterEx}  ) {HebrewOrALetterEx} )*
                      )+
                    )
-({ExtendNumLetEx}+ ( {KatakanaEx}          ( {ExtendNumLetEx}*   {KatakanaEx}                            )*
-                   | ( {HebrewLetterEx}    ( {SingleQuoteEx}     | {DoubleQuoteEx}   {HebrewLetterEx}    )
-                     | {NumericEx}         ( ( {ExtendNumLetEx}* | {MidNumericEx} )* {NumericEx}         )*
-                     | {HebrewOrALetterEx} ( ( {ExtendNumLetEx}* | {MidLetterEx}  )* {HebrewOrALetterEx} )*
+({ExtendNumLetEx}+ ( {KatakanaEx}          ( {ExtendNumLetEx}*   {KatakanaEx}                           )*
+                   | ( {HebrewLetterEx}    ( {SingleQuoteEx}     | {DoubleQuoteEx}  {HebrewLetterEx}    )
+                     | {NumericEx}         ( ( {ExtendNumLetEx}* | {MidNumericEx} ) {NumericEx}         )*
+                     | {HebrewOrALetterEx} ( ( {ExtendNumLetEx}* | {MidLetterEx}  ) {HebrewOrALetterEx} )*
                      )+
                    )
 )*

Modified: lucene/dev/branches/solr4470/lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestStandardAnalyzer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr4470/lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestStandardAnalyzer.java?rev=1570113&r1=1570112&r2=1570113&view=diff
==============================================================================
--- lucene/dev/branches/solr4470/lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestStandardAnalyzer.java (original)
+++ lucene/dev/branches/solr4470/lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestStandardAnalyzer.java Thu Feb 20 08:57:51 2014
@@ -257,6 +257,25 @@ public class TestStandardAnalyzer extend
     // Mixed consecutive \p{WB:MidNum} and \p{WB:MidNumLet} should trigger a split
     BaseTokenStreamTestCase.assertAnalyzesTo(a, "1,.2", new String[] { "1", "2" });
     BaseTokenStreamTestCase.assertAnalyzesTo(a, "1.,2", new String[] { "1", "2" });
+
+    // '_' is in \p{WB:ExtendNumLet}
+
+    BaseTokenStreamTestCase.assertAnalyzesTo(a, "A:B_A:B", new String[] { "A:B_A:B" });
+    BaseTokenStreamTestCase.assertAnalyzesTo(a, "A:B_A::B", new String[] { "A:B_A", "B" });
+
+    BaseTokenStreamTestCase.assertAnalyzesTo(a, "1.2_1.2", new String[] { "1.2_1.2" });
+    BaseTokenStreamTestCase.assertAnalyzesTo(a, "A.B_A.B", new String[] { "A.B_A.B" });
+    BaseTokenStreamTestCase.assertAnalyzesTo(a, "1.2_1..2", new String[] { "1.2_1", "2" });
+    BaseTokenStreamTestCase.assertAnalyzesTo(a, "A.B_A..B", new String[] { "A.B_A", "B" });
+
+    BaseTokenStreamTestCase.assertAnalyzesTo(a, "1,2_1,2", new String[] { "1,2_1,2" });
+    BaseTokenStreamTestCase.assertAnalyzesTo(a, "1,2_1,,2", new String[] { "1,2_1", "2" });
+
+    BaseTokenStreamTestCase.assertAnalyzesTo(a, "C_A.:B", new String[] { "C_A", "B" });
+    BaseTokenStreamTestCase.assertAnalyzesTo(a, "C_A:.B", new String[] { "C_A", "B" });
+
+    BaseTokenStreamTestCase.assertAnalyzesTo(a, "3_1,.2", new String[] { "3_1", "2" });
+    BaseTokenStreamTestCase.assertAnalyzesTo(a, "3_1.,2", new String[] { "3_1", "2" });
   }
 
 

Modified: lucene/dev/branches/solr4470/lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestUAX29URLEmailTokenizer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr4470/lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestUAX29URLEmailTokenizer.java?rev=1570113&r1=1570112&r2=1570113&view=diff
==============================================================================
--- lucene/dev/branches/solr4470/lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestUAX29URLEmailTokenizer.java (original)
+++ lucene/dev/branches/solr4470/lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestUAX29URLEmailTokenizer.java Thu Feb 20 08:57:51 2014
@@ -480,6 +480,25 @@ public class TestUAX29URLEmailTokenizer 
     // Mixed consecutive \p{WB:MidNum} and \p{WB:MidNumLet} should trigger a split
     BaseTokenStreamTestCase.assertAnalyzesTo(a, "1,.2", new String[] { "1", "2" });
     BaseTokenStreamTestCase.assertAnalyzesTo(a, "1.,2", new String[] { "1", "2" });
+
+    // '_' is in \p{WB:ExtendNumLet}
+
+    BaseTokenStreamTestCase.assertAnalyzesTo(a, "A:B_A:B", new String[] { "A:B_A:B" });
+    BaseTokenStreamTestCase.assertAnalyzesTo(a, "A:B_A::B", new String[] { "A:B_A", "B" });
+
+    BaseTokenStreamTestCase.assertAnalyzesTo(a, "1.2_1.2", new String[] { "1.2_1.2" });
+    BaseTokenStreamTestCase.assertAnalyzesTo(a, "A.B_A.B", new String[] { "A.B_A.B" });
+    BaseTokenStreamTestCase.assertAnalyzesTo(a, "1.2_1..2", new String[] { "1.2_1", "2" });
+    BaseTokenStreamTestCase.assertAnalyzesTo(a, "A.B_A..B", new String[] { "A.B_A", "B" });
+
+    BaseTokenStreamTestCase.assertAnalyzesTo(a, "1,2_1,2", new String[] { "1,2_1,2" });
+    BaseTokenStreamTestCase.assertAnalyzesTo(a, "1,2_1,,2", new String[] { "1,2_1", "2" });
+
+    BaseTokenStreamTestCase.assertAnalyzesTo(a, "C_A.:B", new String[] { "C_A", "B" });
+    BaseTokenStreamTestCase.assertAnalyzesTo(a, "C_A:.B", new String[] { "C_A", "B" });
+
+    BaseTokenStreamTestCase.assertAnalyzesTo(a, "3_1,.2", new String[] { "3_1", "2" });
+    BaseTokenStreamTestCase.assertAnalyzesTo(a, "3_1.,2", new String[] { "3_1", "2" });
   }
 
 

Modified: lucene/dev/branches/solr4470/lucene/codecs/src/java/org/apache/lucene/codecs/memory/DirectDocValuesProducer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr4470/lucene/codecs/src/java/org/apache/lucene/codecs/memory/DirectDocValuesProducer.java?rev=1570113&r1=1570112&r2=1570113&view=diff
==============================================================================
--- lucene/dev/branches/solr4470/lucene/codecs/src/java/org/apache/lucene/codecs/memory/DirectDocValuesProducer.java (original)
+++ lucene/dev/branches/solr4470/lucene/codecs/src/java/org/apache/lucene/codecs/memory/DirectDocValuesProducer.java Thu Feb 20 08:57:51 2014
@@ -29,6 +29,7 @@ import org.apache.lucene.index.CorruptIn
 import org.apache.lucene.index.FieldInfo;
 import org.apache.lucene.index.IndexFileNames;
 import org.apache.lucene.index.NumericDocValues;
+import org.apache.lucene.index.RandomAccessOrds;
 import org.apache.lucene.index.SegmentReadState;
 import org.apache.lucene.index.SortedDocValues;
 import org.apache.lucene.index.SortedSetDocValues;
@@ -350,7 +351,8 @@ class DirectDocValuesProducer extends Do
     final BinaryDocValues values = instance.values;
 
     // Must make a new instance since the iterator has state:
-    return new SortedSetDocValues() {
+    return new RandomAccessOrds() {
+      int ordStart;
       int ordUpto;
       int ordLimit;
 
@@ -365,7 +367,7 @@ class DirectDocValuesProducer extends Do
       
       @Override
       public void setDocument(int docID) {
-        ordUpto = (int) docToOrdAddress.get(docID);
+        ordStart = ordUpto = (int) docToOrdAddress.get(docID);
         ordLimit = (int) docToOrdAddress.get(docID+1);
       }
 
@@ -379,6 +381,16 @@ class DirectDocValuesProducer extends Do
         return entry.values.count;
       }
 
+      @Override
+      public long ordAt(int index) {
+        return ords.get(ordStart + index);
+      }
+
+      @Override
+      public int cardinality() {
+        return ordLimit - ordStart;
+      }
+
       // Leave lookupTerm to super's binary search
 
       // Leave termsEnum to super

Modified: lucene/dev/branches/solr4470/lucene/core/src/java/org/apache/lucene/codecs/lucene45/Lucene45DocValuesProducer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr4470/lucene/core/src/java/org/apache/lucene/codecs/lucene45/Lucene45DocValuesProducer.java?rev=1570113&r1=1570112&r2=1570113&view=diff
==============================================================================
--- lucene/dev/branches/solr4470/lucene/core/src/java/org/apache/lucene/codecs/lucene45/Lucene45DocValuesProducer.java (original)
+++ lucene/dev/branches/solr4470/lucene/core/src/java/org/apache/lucene/codecs/lucene45/Lucene45DocValuesProducer.java Thu Feb 20 08:57:51 2014
@@ -43,6 +43,7 @@ import org.apache.lucene.index.FieldInfo
 import org.apache.lucene.index.FieldInfos;
 import org.apache.lucene.index.IndexFileNames;
 import org.apache.lucene.index.NumericDocValues;
+import org.apache.lucene.index.RandomAccessOrds;
 import org.apache.lucene.index.SegmentReadState;
 import org.apache.lucene.index.SingletonSortedSetDocValues;
 import org.apache.lucene.index.SortedDocValues;
@@ -523,7 +524,8 @@ public class Lucene45DocValuesProducer e
     // but the addresses to the ord stream are in RAM
     final MonotonicBlockPackedReader ordIndex = getOrdIndexInstance(data, field, ordIndexes.get(field.number));
     
-    return new SortedSetDocValues() {
+    return new RandomAccessOrds() {
+      long startOffset;
       long offset;
       long endOffset;
       
@@ -540,7 +542,7 @@ public class Lucene45DocValuesProducer e
 
       @Override
       public void setDocument(int docID) {
-        offset = (docID == 0 ? 0 : ordIndex.get(docID-1));
+        startOffset = offset = (docID == 0 ? 0 : ordIndex.get(docID-1));
         endOffset = ordIndex.get(docID);
       }
 
@@ -571,6 +573,16 @@ public class Lucene45DocValuesProducer e
           return super.termsEnum();
         }
       }
+
+      @Override
+      public long ordAt(int index) {
+        return ordinals.get(startOffset + index);
+      }
+
+      @Override
+      public int cardinality() {
+        return (int) (endOffset - startOffset);
+      }
     };
   }
   

Modified: lucene/dev/branches/solr4470/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr4470/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java?rev=1570113&r1=1570112&r2=1570113&view=diff
==============================================================================
--- lucene/dev/branches/solr4470/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java (original)
+++ lucene/dev/branches/solr4470/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java Thu Feb 20 08:57:51 2014
@@ -1401,25 +1401,43 @@ public class CheckIndex {
       if (docsWithField.get(i)) {
         int ordCount = 0;
         while ((ord = dv.nextOrd()) != SortedSetDocValues.NO_MORE_ORDS) {
-          ordCount++;
           if (ord <= lastOrd) {
             throw new RuntimeException("ords out of order: " + ord + " <= " + lastOrd + " for doc: " + i);
           }
           if (ord < 0 || ord > maxOrd) {
             throw new RuntimeException("ord out of bounds: " + ord);
           }
+          if (dv instanceof RandomAccessOrds) {
+            long ord2 = ((RandomAccessOrds)dv).ordAt(ordCount);
+            if (ord != ord2) {
+              throw new RuntimeException("ordAt(" + ordCount + ") inconsistent, expected=" + ord + ",got=" + ord2 + " for doc: " + i);
+            }
+          }
           lastOrd = ord;
           maxOrd2 = Math.max(maxOrd2, ord);
           seenOrds.set(ord);
+          ordCount++;
         }
         if (ordCount == 0) {
           throw new RuntimeException("dv for field: " + fieldName + " has no ordinals but is not marked missing for doc: " + i);
         }
+        if (dv instanceof RandomAccessOrds) {
+          long ordCount2 = ((RandomAccessOrds)dv).cardinality();
+          if (ordCount != ordCount2) {
+            throw new RuntimeException("cardinality inconsistent, expected=" + ordCount + ",got=" + ordCount2 + " for doc: " + i);
+          }
+        }
       } else {
         long o = dv.nextOrd();
         if (o != SortedSetDocValues.NO_MORE_ORDS) {
           throw new RuntimeException("dv for field: " + fieldName + " is marked missing but has ord=" + o + " for doc: " + i);
         }
+        if (dv instanceof RandomAccessOrds) {
+          long ordCount2 = ((RandomAccessOrds)dv).cardinality();
+          if (ordCount2 != 0) {
+            throw new RuntimeException("dv for field: " + fieldName + " is marked missing but has cardinality " + ordCount2 + " for doc: " + i);
+          }
+        }
       }
     }
     if (maxOrd != maxOrd2) {

Modified: lucene/dev/branches/solr4470/lucene/core/src/java/org/apache/lucene/index/SortedSetDocValues.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr4470/lucene/core/src/java/org/apache/lucene/index/SortedSetDocValues.java?rev=1570113&r1=1570112&r2=1570113&view=diff
==============================================================================
--- lucene/dev/branches/solr4470/lucene/core/src/java/org/apache/lucene/index/SortedSetDocValues.java (original)
+++ lucene/dev/branches/solr4470/lucene/core/src/java/org/apache/lucene/index/SortedSetDocValues.java Thu Feb 20 08:57:51 2014
@@ -69,7 +69,7 @@ public abstract class SortedSetDocValues
 
 
   /** An empty SortedDocValues which returns {@link #NO_MORE_ORDS} for every document */
-  public static final SortedSetDocValues EMPTY = new SortedSetDocValues() {
+  public static final SortedSetDocValues EMPTY = new RandomAccessOrds() {
 
     @Override
     public long nextOrd() {
@@ -88,6 +88,16 @@ public abstract class SortedSetDocValues
     public long getValueCount() {
       return 0;
     }
+
+    @Override
+    public long ordAt(int index) {
+      throw new IndexOutOfBoundsException();
+    }
+
+    @Override
+    public int cardinality() {
+      return 0;
+    }
   };
 
   /** If {@code key} exists, returns its ordinal, else

Modified: lucene/dev/branches/solr4470/lucene/core/src/java/org/apache/lucene/search/FieldComparator.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr4470/lucene/core/src/java/org/apache/lucene/search/FieldComparator.java?rev=1570113&r1=1570112&r2=1570113&view=diff
==============================================================================
--- lucene/dev/branches/solr4470/lucene/core/src/java/org/apache/lucene/search/FieldComparator.java (original)
+++ lucene/dev/branches/solr4470/lucene/core/src/java/org/apache/lucene/search/FieldComparator.java Thu Feb 20 08:57:51 2014
@@ -717,7 +717,7 @@ public abstract class FieldComparator<T>
    *  to large results, this comparator will be much faster
    *  than {@link org.apache.lucene.search.FieldComparator.TermValComparator}.  For very small
    *  result sets it may be slower. */
-  public static final class TermOrdValComparator extends FieldComparator<BytesRef> {
+  public static class TermOrdValComparator extends FieldComparator<BytesRef> {
     /* Ords for each slot.
        @lucene.internal */
     final int[] ords;
@@ -767,8 +767,6 @@ public abstract class FieldComparator<T>
     boolean topSameReader;
     int topOrd;
 
-    private int docBase;
-
     final BytesRef tempBR = new BytesRef();
 
     /** -1 if missing values are sorted first, 1 if they are
@@ -856,10 +854,14 @@ public abstract class FieldComparator<T>
       readerGen[slot] = currentReaderGen;
     }
     
+    /** Retrieves the SortedDocValues for the field in this segment */
+    protected SortedDocValues getSortedDocValues(AtomicReaderContext context, String field) throws IOException {
+      return FieldCache.DEFAULT.getTermsIndex(context.reader(), field);
+    }
+    
     @Override
     public FieldComparator<BytesRef> setNextReader(AtomicReaderContext context) throws IOException {
-      docBase = context.docBase;
-      termsIndex = FieldCache.DEFAULT.getTermsIndex(context.reader(), field);
+      termsIndex = getSortedDocValues(context, field);
       currentReaderGen++;
 
       if (topValue != null) {

Modified: lucene/dev/branches/solr4470/lucene/core/src/java/org/apache/lucene/search/SortField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr4470/lucene/core/src/java/org/apache/lucene/search/SortField.java?rev=1570113&r1=1570112&r2=1570113&view=diff
==============================================================================
--- lucene/dev/branches/solr4470/lucene/core/src/java/org/apache/lucene/search/SortField.java (original)
+++ lucene/dev/branches/solr4470/lucene/core/src/java/org/apache/lucene/search/SortField.java Thu Feb 20 08:57:51 2014
@@ -23,10 +23,6 @@ import java.util.Comparator;
 import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.StringHelper;
 
-// TODO(simonw) -- for cleaner transition, maybe we should make
-// a new SortField that subclasses this one and always uses
-// index values?
-
 /**
  * Stores information about how to sort documents by terms in an individual
  * field.  Fields must be indexed in order to sort by them.
@@ -106,9 +102,6 @@ public class SortField {
   // Used for 'sortMissingFirst/Last'
   public Object missingValue = null;
 
-  // Only used with type=STRING
-  public boolean sortMissingLast;
-
   /** Creates a sort by terms in the given field with the type of term
    * values explicitly given.
    * @param field  Name of field to sort by.  Can be <code>null</code> if

Modified: lucene/dev/branches/solr4470/lucene/core/src/java/org/apache/lucene/util/SloppyMath.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr4470/lucene/core/src/java/org/apache/lucene/util/SloppyMath.java?rev=1570113&r1=1570112&r2=1570113&view=diff
==============================================================================
--- lucene/dev/branches/solr4470/lucene/core/src/java/org/apache/lucene/util/SloppyMath.java (original)
+++ lucene/dev/branches/solr4470/lucene/core/src/java/org/apache/lucene/util/SloppyMath.java Thu Feb 20 08:57:51 2014
@@ -48,11 +48,10 @@ public class SloppyMath {
     double h2 = 1 - cos((lon1 - lon2) * TO_RADIANS);
     double h = (h1 + cos(x1) * cos(x2) * h2) / 2;
 
-    double avgLat = Math.abs((x1 + x2) / 2d);
-    int index = (int)(avgLat * RADIUS_INDEXER + 0.5) % earthDiameterPerLatitude.length;
-    double radius = earthDiameterPerLatitude[index];
+    double avgLat = (x1 + x2) / 2d;
+    double diameter = earthDiameter(avgLat);
 
-    return radius * asin(Math.min(1, Math.sqrt(h)));
+    return diameter * asin(Math.min(1, Math.sqrt(h)));
     
   }
 
@@ -137,7 +136,13 @@ public class SloppyMath {
       }
     }
   }
-  
+
+  /** Return an approximate value of the diameter of the earth at the given latitude, in kilometers. */
+  public static double earthDiameter(double latitude) {
+    final int index = (int)(Math.abs(latitude) * RADIUS_INDEXER + 0.5) % earthDiameterPerLatitude.length;
+    return earthDiameterPerLatitude[index];
+  }
+
   // haversin
   private static final double TO_RADIANS = Math.PI / 180D;
   

Modified: lucene/dev/branches/solr4470/lucene/highlighter/src/java/org/apache/lucene/search/postingshighlight/PostingsHighlighter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr4470/lucene/highlighter/src/java/org/apache/lucene/search/postingshighlight/PostingsHighlighter.java?rev=1570113&r1=1570112&r2=1570113&view=diff
==============================================================================
--- lucene/dev/branches/solr4470/lucene/highlighter/src/java/org/apache/lucene/search/postingshighlight/PostingsHighlighter.java (original)
+++ lucene/dev/branches/solr4470/lucene/highlighter/src/java/org/apache/lucene/search/postingshighlight/PostingsHighlighter.java Thu Feb 20 08:57:51 2014
@@ -456,31 +456,31 @@ public class PostingsHighlighter {
   private Map<Integer,Object> highlightField(String field, String contents[], BreakIterator bi, BytesRef terms[], int[] docids, List<AtomicReaderContext> leaves, int maxPassages, Query query) throws IOException {  
     Map<Integer,Object> highlights = new HashMap<Integer,Object>();
     
-    // reuse in the real sense... for docs in same segment we just advance our old enum
-    DocsAndPositionsEnum postings[] = null;
-    TermsEnum termsEnum = null;
-    int lastLeaf = -1;
-
     PassageFormatter fieldFormatter = getFormatter(field);
     if (fieldFormatter == null) {
       throw new NullPointerException("PassageFormatter cannot be null");
     }
     
-    // check if we should do any multitermprocessing
+    // check if we should do any multiterm processing
     Analyzer analyzer = getIndexAnalyzer(field);
     CharacterRunAutomaton automata[] = new CharacterRunAutomaton[0];
     if (analyzer != null) {
       automata = MultiTermHighlighting.extractAutomata(query, field);
     }
     
-    final BytesRef allTerms[];
+    // resize 'terms', where the last term is the multiterm matcher
     if (automata.length > 0) {
-      allTerms = new BytesRef[terms.length + 1];
-      System.arraycopy(terms, 0, allTerms, 0, terms.length);
-    } else {
-      allTerms = terms;
+      BytesRef newTerms[] = new BytesRef[terms.length + 1];
+      System.arraycopy(terms, 0, newTerms, 0, terms.length);
+      terms = newTerms;
     }
 
+    // we are processing in increasing docid order, so we only need to reinitialize stuff on segment changes
+    // otherwise, we will just advance() existing enums to the new document in the same segment.
+    DocsAndPositionsEnum postings[] = null;
+    TermsEnum termsEnum = null;
+    int lastLeaf = -1;
+    
     for (int i = 0; i < docids.length; i++) {
       String content = contents[i];
       if (content.length() == 0) {
@@ -491,28 +491,39 @@ public class PostingsHighlighter {
       int leaf = ReaderUtil.subIndex(doc, leaves);
       AtomicReaderContext subContext = leaves.get(leaf);
       AtomicReader r = subContext.reader();
-      Terms t = r.terms(field);
-      if (t == null) {
-        continue; // nothing to do
-      }
+      
+      assert leaf >= lastLeaf; // increasing order
+      
+      // if the segment has changed, we must initialize new enums.
       if (leaf != lastLeaf) {
-        termsEnum = t.iterator(null);
-        postings = new DocsAndPositionsEnum[allTerms.length];
+        Terms t = r.terms(field);
+        if (t != null) {
+          termsEnum = t.iterator(null);
+          postings = new DocsAndPositionsEnum[terms.length];
+        }
+      }
+      if (termsEnum == null) {
+        continue; // no terms for this field, nothing to do
       }
+      
+      // if there are multi-term matches, we have to initialize the "fake" enum for each document
       if (automata.length > 0) {
         DocsAndPositionsEnum dp = MultiTermHighlighting.getDocsEnum(analyzer.tokenStream(field, content), automata);
         dp.advance(doc - subContext.docBase);
-        postings[terms.length] = dp;
+        postings[terms.length-1] = dp; // last term is the multiterm matcher
       }
-      Passage passages[] = highlightDoc(field, allTerms, content.length(), bi, doc - subContext.docBase, termsEnum, postings, maxPassages);
+      
+      Passage passages[] = highlightDoc(field, terms, content.length(), bi, doc - subContext.docBase, termsEnum, postings, maxPassages);
+      
       if (passages.length == 0) {
+        // no passages were returned, so ask for a default summary
         passages = getEmptyHighlight(field, bi, maxPassages);
       }
+
       if (passages.length > 0) {
-        // otherwise a null snippet (eg if field is missing
-        // entirely from the doc)
         highlights.put(doc, fieldFormatter.format(passages, content));
       }
+      
       lastLeaf = leaf;
     }
     

Modified: lucene/dev/branches/solr4470/lucene/ivy-versions.properties
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr4470/lucene/ivy-versions.properties?rev=1570113&r1=1570112&r2=1570113&view=diff
==============================================================================
--- lucene/dev/branches/solr4470/lucene/ivy-versions.properties (original)
+++ lucene/dev/branches/solr4470/lucene/ivy-versions.properties Thu Feb 20 08:57:51 2014
@@ -21,7 +21,7 @@ com.codahale.metrics.version = 3.0.1
 /com.cybozu.labs/langdetect = 1.1-20120112
 /com.drewnoakes/metadata-extractor = 2.6.2
 
-com.fasterxml.jackson.core.version = 2.2.3
+com.fasterxml.jackson.core.version = 2.3.1
 /com.fasterxml.jackson.core/jackson-annotations = ${com.fasterxml.jackson.core.version}
 /com.fasterxml.jackson.core/jackson-core = ${com.fasterxml.jackson.core.version}
 /com.fasterxml.jackson.core/jackson-databind = ${com.fasterxml.jackson.core.version}
@@ -77,8 +77,8 @@ com.sun.jersey.version = 1.8
 /mecab/mecab-ipadic = 2.7.0-20070801
 /mecab/mecab-naist-jdic = 0.6.3b-20111013
 /net.arnx/jsonic = 1.2.7
-/net.sf.saxon/Saxon-HE = 9.5.1-3
-/net.sourceforge.argparse4j/argparse4j = 0.4.0
+/net.sf.saxon/Saxon-HE = 9.5.1-4
+/net.sourceforge.argparse4j/argparse4j = 0.4.3
 /net.sourceforge.nekohtml/nekohtml = 1.9.17
 /org.antlr/antlr-runtime = 3.5
 /org.apache.ant/ant = 1.8.2
@@ -191,7 +191,7 @@ org.gagravarr.vorbis.java.version = 0.1
 /org.gagravarr/vorbis-java-core = ${org.gagravarr.vorbis.java.version}
 /org.gagravarr/vorbis-java-tika = ${org.gagravarr.vorbis.java.version}
 
-org.kitesdk.kite-morphlines.version = 0.10.0
+org.kitesdk.kite-morphlines.version = 0.11.0
 /org.kitesdk/kite-morphlines-avro = ${org.kitesdk.kite-morphlines.version}
 /org.kitesdk/kite-morphlines-core = ${org.kitesdk.kite-morphlines.version}
 /org.kitesdk/kite-morphlines-hadoop-sequencefile = ${org.kitesdk.kite-morphlines.version}

Modified: lucene/dev/branches/solr4470/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr4470/solr/CHANGES.txt?rev=1570113&r1=1570112&r2=1570113&view=diff
==============================================================================
--- lucene/dev/branches/solr4470/solr/CHANGES.txt (original)
+++ lucene/dev/branches/solr4470/solr/CHANGES.txt Thu Feb 20 08:57:51 2014
@@ -56,6 +56,27 @@ Other Changes
 
 * SOLR-4792: Stop shipping a .war. (Robert Muir)
 
+==================  4.8.0 ==================
+
+Versions of Major Components
+---------------------
+Apache Tika 1.4
+Carrot2 3.8.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.5
+
+                      
+Detailed Change List
+----------------------
+
+New Features
+----------------------
+
+Bug Fixes
+----------------------
+
+
 ==================  4.7.0 ==================
 
 Versions of Major Components

Modified: lucene/dev/branches/solr4470/solr/contrib/morphlines-cell/src/java/org/apache/solr/morphlines/cell/SolrCellBuilder.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr4470/solr/contrib/morphlines-cell/src/java/org/apache/solr/morphlines/cell/SolrCellBuilder.java?rev=1570113&r1=1570112&r2=1570113&view=diff
==============================================================================
--- lucene/dev/branches/solr4470/solr/contrib/morphlines-cell/src/java/org/apache/solr/morphlines/cell/SolrCellBuilder.java (original)
+++ lucene/dev/branches/solr4470/solr/contrib/morphlines-cell/src/java/org/apache/solr/morphlines/cell/SolrCellBuilder.java Thu Feb 20 08:57:51 2014
@@ -18,7 +18,6 @@ package org.apache.solr.morphlines.cell;
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.StringWriter;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -45,15 +44,12 @@ import org.apache.tika.metadata.Metadata
 import org.apache.tika.mime.MediaType;
 import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.Parser;
-import org.apache.tika.sax.TeeContentHandler;
 import org.apache.tika.sax.XHTMLContentHandler;
 import org.apache.tika.sax.xpath.Matcher;
 import org.apache.tika.sax.xpath.MatchingContentHandler;
 import org.apache.tika.sax.xpath.XPathParser;
 import org.apache.xml.serialize.OutputFormat;
 import org.apache.xml.serialize.XMLSerializer;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.SAXException;
 
 import org.kitesdk.morphline.api.Command;
 import org.kitesdk.morphline.api.CommandBuilder;
@@ -64,6 +60,9 @@ import org.kitesdk.morphline.api.Record;
 import org.kitesdk.morphline.base.Configs;
 import org.kitesdk.morphline.base.Fields;
 import org.kitesdk.morphline.stdio.AbstractParser;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.SAXException;
+
 import com.google.common.base.Joiner;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ArrayListMultimap;
@@ -102,6 +101,7 @@ public final class SolrCellBuilder imple
     private final String xpathExpr;
     private final List<Parser> parsers = new ArrayList();
     private final SolrContentHandlerFactory solrContentHandlerFactory;
+    private final Locale locale;
     
     private final SolrParams solrParams;
     private final Map<MediaType, Parser> mediaTypeToParserMap;
@@ -163,6 +163,8 @@ public final class SolrCellBuilder imple
       }
       this.solrContentHandlerFactory = getSolrContentHandlerFactory(factoryClass, dateFormats, config);
 
+      this.locale = getLocale(getConfigs().getString(config, "locale", ""));
+      
       this.mediaTypeToParserMap = new HashMap<MediaType, Parser>();
       //MimeTypes mimeTypes = MimeTypes.getDefaultMimeTypes(); // FIXME getMediaTypeRegistry.normalize() 
 
@@ -222,6 +224,7 @@ public final class SolrCellBuilder imple
       }
       
       ParseContext parseContext = new ParseContext();
+      parseContext.set(Locale.class, locale);
       
       Metadata metadata = new Metadata();
       for (Entry<String, Object> entry : record.getFields().entries()) {
@@ -233,12 +236,6 @@ public final class SolrCellBuilder imple
         inputStream = TikaInputStream.get(inputStream);
 
         ContentHandler parsingHandler = handler;
-        StringWriter debugWriter = null;
-        if (LOG.isTraceEnabled()) {
-          debugWriter = new StringWriter();
-          ContentHandler serializer = new XMLSerializer(debugWriter, new OutputFormat("XML", "UTF-8", true));
-          parsingHandler = new TeeContentHandler(parsingHandler, serializer);
-        }
 
         // String xpathExpr = "/xhtml:html/xhtml:body/xhtml:div/descendant:node()";
         if (xpathExpr != null) {
@@ -255,8 +252,6 @@ public final class SolrCellBuilder imple
         } catch (TikaException e) {
           throw new MorphlineRuntimeException("Cannot parse", e);
         }
-        
-        LOG.trace("debug XML doc: {}", debugWriter);
       } finally {
         if (inputStream != null) {
           Closeables.closeQuietly(inputStream);
@@ -336,6 +331,18 @@ public final class SolrCellBuilder imple
       return record;
     }
     
+    private Locale getLocale(String name) {
+      for (Locale locale : Locale.getAvailableLocales()) {
+        if (locale.toString().equals(name)) {
+          return locale;
+        }
+      }
+      assert Locale.ROOT.toString().equals("");
+      if (name.equals(Locale.ROOT.toString())) {
+        return Locale.ROOT;
+      }
+      throw new MorphlineCompilationException("Unknown locale: " + name, getConfig());
+    }
   }
 
 }