JENA-1899: FIND query syntax; concrete triple terms in VALUES
diff --git a/.travis.yml b/.travis.yml
index 753ab49..068d887 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -6,4 +6,4 @@
   - openjdk8
   - openjdk11
 env:
-  - JAVA_OPTS="-Xmx3072M -Xms512M -XX:+UseG1GC"
+  - JAVA_OPTS="-Xmx3072M -Xms512M"
diff --git a/jena-arq/Grammar/arq.jj b/jena-arq/Grammar/arq.jj
index c6c0252..11080aa 100644
--- a/jena-arq/Grammar/arq.jj
+++ b/jena-arq/Grammar/arq.jj
@@ -625,6 +625,8 @@
  |
    el = InlineData()
  |
+   el = Find()
+ |
    el = Assignment()
  |
    el = ExistsElt()
@@ -662,6 +664,16 @@
   <RPAREN>
   { return new ElementBind(v, expr) ; }
 }
+Element Find() : { Var v ; Node n; }
+{
+  <FIND>
+  <LPAREN>
+  n = TripleTerm()
+  <AS>
+  v = Var()
+  <RPAREN>
+  { return new ElementFind(v, n) ; }
+}
 Element InlineData() : { ElementData el ; Token t ; }
 {
   t = <VALUES>
@@ -676,16 +688,17 @@
 {
   ( InlineDataOneVar() | InlineDataFull() )
 }
-void InlineDataOneVar() : { Var v ; Node n ; Token t ; }
+void InlineDataOneVar() : { Var v ; Node n ; Token t ; ; int beginLine; int beginColumn; }
 {
   v = Var()
   { emitDataBlockVariable(v) ; }
   t = <LBRACE>
+  { beginLine = t.beginLine; beginColumn = t.beginColumn; t = null; }
   (
     n = DataBlockValue()
-    { startDataBlockValueRow(-1, -1) ;
-      emitDataBlockValue(n, -1, -1) ;
-      finishDataBlockValueRow(-1, -1) ;
+    { startDataBlockValueRow(beginLine, beginColumn) ;
+      emitDataBlockValue(n, beginLine, beginColumn) ;
+      finishDataBlockValueRow(beginLine, beginColumn) ;
     }
   )*
   t = <RBRACE>
@@ -724,7 +737,7 @@
 | n = RDFLiteral() { return n ; }
 | n = NumericLiteral() { return n ; }
 | n = BooleanLiteral() { return n ; }
-| n = BlankNode() { return n ; }
+| n = TripleTerm() { return n ; }
 | <UNDEF> { return null ; }
 }
 Element Assignment() : { Var v ; Expr expr ; }
@@ -1158,20 +1171,24 @@
  |
   n = TriplesNodePath(acc) { return n ; }
 }
-Node VarOrTerm() : { Node n = null ; Token t = null; Node s , p , o ; }
+Node VarOrTerm() : { Node n = null ; }
 {
-  (
-    t = <LT2>
-    s = VarOrTerm()
-    p = Verb()
-    o = VarOrTerm()
-    { n = createTripleTerm(s,p,o); }
-    <GT2>
+  ( n = TripleTerm()
   | n = Var()
   | n = GraphTerm()
   )
   { return n ; }
 }
+Node TripleTerm() : { Node n = null ; Token t ; Node s , p , o ; }
+{
+  t = <LT2>
+  s = VarOrTerm()
+  p = Verb()
+  o = VarOrTerm()
+  { n = createTripleTerm(s, p, o, t.beginLine, t.beginColumn); }
+  <GT2>
+  { return n; }
+}
 Node VarOrIri() : {Node n = null ; String iri ; }
 {
   ( n = Var() | iri = iri() { n = createNode(iri) ; } )
@@ -1686,6 +1703,7 @@
 | < BIND: "bind" >
 | < SERVICE: "service" >
 | < LET: "let" >
+| < FIND: "find" >
 | < EXISTS: "exists" >
 | < NOT: "not" >
 | < AS: "as" >
diff --git a/jena-arq/Grammar/master.jj b/jena-arq/Grammar/master.jj
index edf80df..5fdd7bd 100644
--- a/jena-arq/Grammar/master.jj
+++ b/jena-arq/Grammar/master.jj
@@ -894,6 +894,9 @@
    el = InlineData()
 #ifdef ARQ
  |
+   //el = BindOrFind()
+   el = Find()
+ |
    el = Assignment()
  |
    el = ExistsElt()
@@ -940,6 +943,32 @@
   { return new ElementBind(v, expr) ; }
 }
 
+#ifdef ARQ
+// To follow RDF* paper using the overloaded "BIND" syntax.
+// Also make Bind() above in GraphPatternNotTriples SPARQL 1.1 only.
+// Element BindOrFind() : {  Var v ; Expr expr = null ; Node n = null ; }
+// {
+//   <BIND>
+//   <LPAREN>
+//   ( expr = Expression() |  n = TripleTerm() )
+//    <AS>
+//   v = Var()
+//   <RPAREN>
+//   { return expr != null ? new ElementBind(v, expr) : new ElementFind(v, n); }
+// }
+
+Element Find() : { Var v ; Node n; }
+{
+  <FIND>
+  <LPAREN>
+  n = TripleTerm()
+  <AS>
+  v = Var()
+  <RPAREN>
+  { return new ElementFind(v, n) ; }
+}
+#endif
+
 Element InlineData() : { ElementData el ; Token t ; }
 {
   t = <VALUES>
@@ -956,16 +985,17 @@
   ( InlineDataOneVar() |  InlineDataFull() )
 }
 
-void InlineDataOneVar() : { Var v ; Node n ; Token t ; }
+void InlineDataOneVar() : { Var v ; Node n ; Token t ; ; int beginLine; int beginColumn; }
 {
   v = Var()
   { emitDataBlockVariable(v) ; }
   t = <LBRACE>
+  { beginLine = t.beginLine; beginColumn = t.beginColumn; t = null; }
   ( 
-    n = DataBlockValue() 
-    { startDataBlockValueRow(-1, -1) ;
-      emitDataBlockValue(n, -1, -1) ;
-      finishDataBlockValueRow(-1, -1) ;
+    n = DataBlockValue()
+    { startDataBlockValueRow(beginLine, beginColumn) ;
+      emitDataBlockValue(n, beginLine, beginColumn) ;
+      finishDataBlockValueRow(beginLine, beginColumn) ;
     }
   )*
   t = <RBRACE>
@@ -1007,7 +1037,7 @@
 | n = NumericLiteral()  { return n ; }
 | n = BooleanLiteral()  { return n ; }
 #ifdef ARQ
-| n = BlankNode()       { return n ; }
+| n = TripleTerm()      { return n ; }
 #endif
 | <UNDEF>               { return null ; }
 }
@@ -1624,23 +1654,27 @@
 #endif
 #ifdef ARQ
 // RDF* Triple as term.
-Node VarOrTerm() : { Node n = null ; Token t = null; Node s , p , o ; }
+Node VarOrTerm() : { Node n = null ; }
 {
-  (
-    t = <LT2>
-    s = VarOrTerm()
-    p = Verb()
-    o = VarOrTerm()
-    { n = createTripleTerm(s,p,o); }
-    <GT2>
+  ( n = TripleTerm()
   | n = Var()
   | n = GraphTerm()
   )
   { return n ; }
 }
 
-#endif
+Node TripleTerm() :  { Node n = null ; Token t ; Node s , p , o ; }
+{
+  t = <LT2>
+  s = VarOrTerm()
+  p = Verb()
+  o = VarOrTerm()
+  { n = createTripleTerm(s, p, o, t.beginLine, t.beginColumn); }
+  <GT2>
+  { return n; }
+}
 
+#endif
 
 // e.g. Property (if no bNodes) + DESCRIBE
 Node VarOrIri() : {Node n = null ; String iri ; }
@@ -2372,6 +2406,7 @@
 
 #ifdef ARQ
 |  < LET:         "let" >
+|  < FIND:        "find" >
 #endif
 |  < EXISTS:      "exists" >
 |  < NOT:         "not" >
diff --git a/jena-arq/Grammar/sparql_11.jj b/jena-arq/Grammar/sparql_11.jj
index 0da06d9..49cce0f 100644
--- a/jena-arq/Grammar/sparql_11.jj
+++ b/jena-arq/Grammar/sparql_11.jj
@@ -595,16 +595,17 @@
 {
   ( InlineDataOneVar() | InlineDataFull() )
 }
-void InlineDataOneVar() : { Var v ; Node n ; Token t ; }
+void InlineDataOneVar() : { Var v ; Node n ; Token t ; ; int beginLine; int beginColumn; }
 {
   v = Var()
   { emitDataBlockVariable(v) ; }
   t = <LBRACE>
+  { beginLine = t.beginLine; beginColumn = t.beginColumn; t = null; }
   (
     n = DataBlockValue()
-    { startDataBlockValueRow(-1, -1) ;
-      emitDataBlockValue(n, -1, -1) ;
-      finishDataBlockValueRow(-1, -1) ;
+    { startDataBlockValueRow(beginLine, beginColumn) ;
+      emitDataBlockValue(n, beginLine, beginColumn) ;
+      finishDataBlockValueRow(beginLine, beginColumn) ;
     }
   )*
   t = <RBRACE>
diff --git a/jena-arq/Grammar/sse/sse.jj b/jena-arq/Grammar/sse/sse.jj
index 92ce812..c913151 100644
--- a/jena-arq/Grammar/sse/sse.jj
+++ b/jena-arq/Grammar/sse/sse.jj
@@ -195,7 +195,7 @@
 
 void TripleTerm() :     { Token t1 = null ; Token t2 = null ; }
 {
-    t1 = <LBRACE> // "{"
+    t1 = <LT2>
     (<WS>)*
     { tripleTermStart(t1.beginLine, t1.beginColumn); }
     RDFTerm()
@@ -204,7 +204,7 @@
     (<WS>)*
     RDFTerm()
     (<WS>)*
-    t2 = <RBRACE>
+    t2 = <GT2>
     { tripleTermFinish(t2.beginLine, t2.beginColumn); }
 }
 
diff --git a/jena-arq/Grammar/sse/tokens.inc b/jena-arq/Grammar/sse/tokens.inc
index 87b21e0..0480cdb 100644
--- a/jena-arq/Grammar/sse/tokens.inc
+++ b/jena-arq/Grammar/sse/tokens.inc
@@ -98,6 +98,9 @@
 
 | < LBRACKET:  "[" >
 | < RBRACKET:  "]" >
+
+| < LT2 : "<<" >
+| < GT2 : ">>" >
 }
 
 // Specials for literals trailing parts
@@ -149,13 +152,15 @@
   // Excludes:
   //   LPAREN and RPAREN / LBRACKET/RBRACKET / LBRACE/RBRACE
   //   Quotes, Whitespace
-  <#SYM:  (~["(", ")", "[", "]", "{", "}", "'", "\"", " ", "\t","\n","\r","\f" ])>
+  <#SYM:  (~["<", ">", "(", ")", "[", "]", "{", "}", "'", "\"", " ", "\t","\n","\r","\f" ])>
 |
   <#SYM1: (~["^", "@",
              "(", ")", "[", "]", "{", "}", "'", "\"", " ", "\t","\n","\r","\f" ])>
 | <#SYM_ESC: "\\" ( " " | "'" | "\"" ) >
 |
-  <SYMBOL: <SYM1> (<SYM>)*>
+  <SYMBOL: ( "<" | ">" 
+           | (<SYM1> (<SYM>)*)
+           ) >
 }
 
 // Catch-all tokens.  Must be last.  
diff --git a/jena-arq/src/main/java/org/apache/jena/query/Syntax.java b/jena-arq/src/main/java/org/apache/jena/query/Syntax.java
index 7a68a6d..ffda9a5 100644
--- a/jena-arq/src/main/java/org/apache/jena/query/Syntax.java
+++ b/jena-arq/src/main/java/org/apache/jena/query/Syntax.java
@@ -51,32 +51,32 @@
                 = new Syntax("http://jena.hpl.hp.com/2003/07/query/SPARQL_Algebra") ;
     
     /** The system default syntax */ 
-    public static Syntax defaultSyntax = syntaxSPARQL_11 ;
+    public static Syntax defaultSyntax = syntaxARQ;
     
     /** The name of the default query language for query parsing.
      *  The default query language syntax must be capable of accepting
      *  any SPARQL query but may also accept extensions. 
      */
-    public static Syntax defaultQuerySyntax = syntaxSPARQL_11 ;
+    public static Syntax defaultQuerySyntax = defaultSyntax;
     
     /** The name of the default update language for update parsing.
      *  The default update language syntax must be capable of accepting
      *  any SPARQL query but may also accept extensions. 
      */
-    public static Syntax defaultUpdateSyntax = syntaxSPARQL_11 ;
+    public static Syntax defaultUpdateSyntax = defaultSyntax;
     
-    /** The query syntax currently that is standardized, published, SPARQL - the "default SPARQL Query" */ 
+    /** The query syntax currently that is standardized, published, SPARQL Query */ 
     public static final Syntax syntaxSPARQL = syntaxSPARQL_11 ;
 
-//    /** The update syntax currently that is standardized, published, SPARQL - the "default SPARQL Update" */ 
+//    /** The update syntax currently that is standardized, published, SPARQL Update */ 
 //    private static final Syntax syntaxSPARQL_Update = syntaxSPARQL_11_Update ;
 
     public static TranslationTable<Syntax> querySyntaxNames = new TranslationTable<>(true) ;
     static {
         querySyntaxNames.put("sparql",      syntaxSPARQL) ;
-        querySyntaxNames.put("sparql10",   syntaxSPARQL_10) ;
+        querySyntaxNames.put("sparql10",    syntaxSPARQL_10) ;
         querySyntaxNames.put("sparql_10",   syntaxSPARQL_10) ;
-        querySyntaxNames.put("sparql11",   syntaxSPARQL_11) ;
+        querySyntaxNames.put("sparql11",    syntaxSPARQL_11) ;
         querySyntaxNames.put("sparql_11",   syntaxSPARQL_11) ;
         querySyntaxNames.put("arq",         syntaxARQ) ;
         querySyntaxNames.put("alg",         syntaxAlgebra) ;
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/AlgebraGenerator.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/AlgebraGenerator.java
index 41fbef3..c993242 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/AlgebraGenerator.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/AlgebraGenerator.java
@@ -18,7 +18,10 @@
 
 package org.apache.jena.sparql.algebra;
 
-import java.util.* ;
+import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.Deque;
+import java.util.List;
 
 import org.apache.jena.atlas.lib.Lib ;
 import org.apache.jena.atlas.lib.Pair ;
@@ -140,6 +143,9 @@
         if ( elt instanceof ElementTriplesBlock )
             return compileBasicPattern(((ElementTriplesBlock)elt).getPattern()) ;
         
+        if ( elt instanceof ElementFind )
+            return compileFind((ElementFind)elt) ;
+        
         // Ditto.
         if ( elt instanceof ElementPathBlock )
             return compilePathBlock(((ElementPathBlock)elt).getPattern()) ;
@@ -293,86 +299,58 @@
         return Pair.create(filters, groupElts) ;
     }
     
-    protected Op compileOneInGroup(Element elt, Op current, Deque<Op> acc)
-    {
-        // Elements that operate over their left hand size (query syntax). 
-        
-        if ( elt instanceof ElementAssign )
-        {
-            ElementAssign assign = (ElementAssign)elt ;
-            return OpAssign.assign(current, assign.getVar(), assign.getExpr()) ;
+    protected Op compileOneInGroup(Element elt, Op current, Deque<Op> acc) {
+        // Elements that operate over their left hand size (query syntax).
+
+        if ( elt instanceof ElementAssign ) {
+            ElementAssign assign = (ElementAssign)elt;
+            return OpAssign.assign(current, assign.getVar(), assign.getExpr());
         }
 
-        if ( elt instanceof ElementBind )
-        {
-            ElementBind bind = (ElementBind)elt ;
-            return OpExtend.create(current, bind.getVar(), bind.getExpr()) ;
+        if ( elt instanceof ElementBind ) {
+            ElementBind bind = (ElementBind)elt;
+            return OpExtend.create(current, bind.getVar(), bind.getExpr());
         }
 
-        if ( elt instanceof ElementOptional )
-        {
-            ElementOptional eltOpt = (ElementOptional)elt ;
-            return compileElementOptional(eltOpt, current) ;
+        if ( elt instanceof ElementOptional ) {
+            ElementOptional eltOpt = (ElementOptional)elt;
+            return compileElementOptional(eltOpt, current);
         }
-        
-        if ( elt instanceof ElementMinus )
-        {
-            ElementMinus elt2 = (ElementMinus)elt ;
-            Op op = compileElementMinus(current, elt2) ;
-            return op ;
+
+        if ( elt instanceof ElementMinus ) {
+            ElementMinus elt2 = (ElementMinus)elt;
+            Op op = compileElementMinus(current, elt2);
+            return op;
         }
 
         // All elements that simply "join" into the algebra.
-        if ( elt instanceof ElementGroup        || 
-             elt instanceof ElementNamedGraph   ||
-             elt instanceof ElementService      ||
-             elt instanceof ElementUnion        || 
-             elt instanceof ElementSubQuery     ||
-             elt instanceof ElementData         ||
-             elt instanceof ElementTriplesBlock ||
-             elt instanceof ElementPathBlock
-            )
-        {
-            Op op = compileElement(elt) ;
-            return join(current, op) ;
+        if ( elt instanceof ElementGroup || elt instanceof ElementNamedGraph || elt instanceof ElementService || elt instanceof ElementUnion
+             || elt instanceof ElementSubQuery || elt instanceof ElementData || elt instanceof ElementTriplesBlock
+             || elt instanceof ElementPathBlock || elt instanceof ElementFind ) {
+            Op op = compileElement(elt);
+            return join(current, op);
         }
-        
+
         // Specials.
-        
-        if ( elt instanceof ElementExists )
-        {
-            ElementExists elt2 = (ElementExists)elt ;
-            Op op = compileElementExists(current, elt2) ;
-            return op ;
+
+        if ( elt instanceof ElementExists ) {
+            ElementExists elt2 = (ElementExists)elt;
+            Op op = compileElementExists(current, elt2);
+            return op;
         }
-        
-        if ( elt instanceof ElementNotExists )
-        {
-            ElementNotExists elt2 = (ElementNotExists)elt ;
-            Op op = compileElementNotExists(current, elt2) ;
-            return op ;
+
+        if ( elt instanceof ElementNotExists ) {
+            ElementNotExists elt2 = (ElementNotExists)elt;
+            Op op = compileElementNotExists(current, elt2);
+            return op;
         }
-        
+
         // Filters were collected together by prepareGroup
-        // This only handles filters left in place by some magic. 
-        if ( elt instanceof ElementFilter )
-        {
-            ElementFilter f = (ElementFilter)elt ;
-            return OpFilter.filter(f.getExpr(), current) ;
+        // This only handles filters left in place by some magic.
+        if ( elt instanceof ElementFilter ) {
+            ElementFilter f = (ElementFilter)elt;
+            return OpFilter.filter(f.getExpr(), current);
         }
-    
-//        // SPARQL 1.1 UNION -- did not make it into SPARQL 
-//        if ( elt instanceof ElementUnion )
-//        {
-//            ElementUnion elt2 = (ElementUnion)elt ;
-//            if ( elt2.getElements().size() == 1 )
-//            {
-//                Op op = compileElementUnion(current, elt2) ;
-//                return op ;
-//            }
-//        }
-        
-        
         return compileUnknownElement(elt, "compile/Element not recognized: "+Lib.className(elt));
     }
 
@@ -458,6 +436,12 @@
         return PathLib.pathToTriples(pathBlock) ;
     }
 
+    protected Op compileFind(ElementFind elFind) {
+        Var var = elFind.getVar();
+        Triple triple = elFind.getTriple();
+        return new OpFind(triple, var);
+    }
+    
     protected Op compileElementGraph(ElementNamedGraph eltGraph)
     {
         Node graphNode = eltGraph.getGraphNameNode() ;
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpAsQuery.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpAsQuery.java
index 7889260..c34f0c8 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpAsQuery.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpAsQuery.java
@@ -418,6 +418,12 @@
         }
 
         @Override
+        public void visit(OpFind opFind) {
+            Element elt = new ElementFind(opFind.getVar(), opFind.getTriple());
+            currentGroup().addElement(elt) ;
+        }
+
+        @Override
         public void visit(OpProcedure opProcedure) {
             throw new ARQNotImplemented("OpProcedure") ;
         }
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpVisitor.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpVisitor.java
index ef3e952..b8b71ba 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpVisitor.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpVisitor.java
@@ -29,6 +29,7 @@
     public void visit(OpTriple opTriple) ;
     public void visit(OpQuad opQuad) ;
     public void visit(OpPath opPath) ;
+    public void visit(OpFind opFind) ;
     public void visit(OpTable opTable) ;
     public void visit(OpNull opNull) ;
     
@@ -49,7 +50,6 @@
     public void visit(OpUnion opUnion) ;
     public void visit(OpDiff opDiff) ;
     public void visit(OpMinus opMinus) ;
-    
     public void visit(OpConditional opCondition) ;
     
     // OpN
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpVisitorBase.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpVisitorBase.java
index 14fe7c0..a2b78f5 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpVisitorBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpVisitorBase.java
@@ -77,6 +77,8 @@
     @Override public void visit(OpAssign opAssign)              {}
 
     @Override public void visit(OpExtend opExtend)              {}
+    
+    @Override public void visit(OpFind opFind)                  {}
 
     @Override public void visit(OpList opList)                  {}
 
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpVisitorByType.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpVisitorByType.java
index 01863bb..cf05898 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpVisitorByType.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpVisitorByType.java
@@ -68,6 +68,10 @@
     { visit0(opPath) ; }
     
     @Override
+    public void visit(OpFind opFind)
+    { visit0(opFind) ; }
+    
+    @Override
     public void visit(OpProcedure opProcedure)
     { visit1(opProcedure) ; }
 
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/Transform.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/Transform.java
index 4d18e47..86b5a40 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/Transform.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/Transform.java
@@ -30,6 +30,7 @@
     public Op transform(OpTriple opTriple) ;
     public Op transform(OpQuad opQuad) ;
     public Op transform(OpPath opPath) ;
+    public Op transform(OpFind opFind) ;
     public Op transform(OpDatasetNames dsNames) ;
     public Op transform(OpQuadPattern quadPattern) ;
     public Op transform(OpQuadBlock quadBlock) ;
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/TransformBase.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/TransformBase.java
index 761eb77..8f758bd 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/TransformBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/TransformBase.java
@@ -22,7 +22,8 @@
 
 import org.apache.jena.sparql.algebra.op.* ;
 
-/** When writing {@link Transform}s to be applied to a tree,
+/**
+ * When writing {@link Transform}s to be applied to a tree,
  * extend {@link TransformCopy}, not this class. 
  */
 public class TransformBase implements Transform
@@ -37,6 +38,8 @@
     public Op transform(OpQuad opQuad)                      { return opQuad ; }
     @Override
     public Op transform(OpPath opPath)                      { return opPath ; } 
+    @Override
+    public Op transform(OpFind opFind)                      { return opFind ; } 
 
     @Override
     public Op transform(OpProcedure opProc, Op subOp)       { return opProc ; }
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/TransformCopy.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/TransformCopy.java
index da75ecc..a722c89 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/TransformCopy.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/TransformCopy.java
@@ -48,6 +48,8 @@
     public Op transform(OpQuad opQuad)                              { return xform(opQuad) ; }
     @Override
     public Op transform(OpPath opPath)                              { return xform(opPath) ; }
+    @Override
+    public Op transform(OpFind opFind)                              { return xform(opFind) ; }
 
     @Override
     public Op transform(OpProcedure opProc, Op subOp)               { return xform(opProc, subOp) ; }
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/TransformWrapper.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/TransformWrapper.java
index afa9b82..c92ec4e 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/TransformWrapper.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/TransformWrapper.java
@@ -42,6 +42,8 @@
     public Op transform(OpQuad opQuad)                      { return transform.transform(opQuad) ; }
     @Override
     public Op transform(OpPath opPath)                      { return transform.transform(opPath) ; } 
+    @Override
+    public Op transform(OpFind opFind)                      { return transform.transform(opFind) ; } 
 
     @Override
     public Op transform(OpProcedure opProc, Op subOp)       { return transform.transform(opProc, subOp) ; }
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/op/OpBase.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/op/OpBase.java
index b7fb90e..1dc5180 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/op/OpBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/op/OpBase.java
@@ -35,6 +35,7 @@
     @Override
     final public boolean equals(Object other)
     { 
+        if ( other == null ) return false;
         if ( this == other ) return true ;
 
         if ( ! ( other instanceof Op ) )
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/op/OpFind.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/op/OpFind.java
new file mode 100644
index 0000000..272e692
--- /dev/null
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/op/OpFind.java
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.sparql.algebra.op;
+
+import java.util.Objects;
+
+import org.apache.jena.graph.Triple;
+import org.apache.jena.sparql.algebra.Op;
+import org.apache.jena.sparql.algebra.OpVisitor;
+import org.apache.jena.sparql.algebra.Transform;
+import org.apache.jena.sparql.core.Var;
+import org.apache.jena.sparql.sse.Tags;
+import org.apache.jena.sparql.util.Iso;
+import org.apache.jena.sparql.util.NodeIsomorphismMap;
+
+public class OpFind extends Op0 {
+
+    private final Triple triple;
+    private final Var    var;
+
+    public OpFind(Triple triple, Var var) {
+        super();
+        this.triple = triple;
+        this.var = var;
+    }
+
+    @Override
+    public String getName() {
+        return Tags.tagFind;
+    }
+
+    @Override
+    public Op apply(Transform transform) {
+        return transform.transform(this);
+    }
+
+    @Override
+    public Op0 copy() {
+        OpFind op = new OpFind(triple, var);
+        return op;
+    }
+
+    @Override
+    public void visit(OpVisitor opVisitor) {
+        opVisitor.visit(this) ;
+    }
+
+    public Triple getTriple() {
+        return triple; 
+    }
+    
+    public Var getVar() {
+        return var; 
+    }
+    
+    @Override
+    public boolean equalTo(Op other, NodeIsomorphismMap labelMap) {
+        if ( other == null )
+            return false;
+        if ( this == other )
+            return true;
+        if ( ! (other instanceof OpFind) ) 
+            return false ;
+        OpFind opFind = (OpFind)other;
+        if ( ! Objects.equals(getVar(), opFind.getVar()) ) 
+            return false;
+        return Iso.tripleIso(getTriple(), opFind.getTriple(), labelMap) ;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(triple, var);
+    }
+}
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/op/OpProcedure.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/op/OpProcedure.java
index bab14c5..aa324b9 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/op/OpProcedure.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/op/OpProcedure.java
@@ -32,7 +32,8 @@
  *  
  *  See also the similar algebra form for property functions.  The difference is in argument handling.
  *  A property function has a URI and two argument lists, one for subject, one for objects.
- *  A procedure is a URI and a list of arguments. */
+ *  A procedure is a URI and a list of arguments.
+ */
 public class OpProcedure extends Op1
 {
     private Node procId ;
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/ElementWalker_New.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/ElementWalker_New.java
deleted file mode 100644
index f41b51f..0000000
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/ElementWalker_New.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.sparql.algebra.walker;
-
-import org.apache.jena.sparql.expr.* ;
-import org.apache.jena.sparql.syntax.* ;
-
-/** An element visitor that walks the graph pattern tree for one query level. 
- *  applying a visitor at each Element traversed.<br/>
- *  Does not process subqueries.<br/>      
- *  Does not process (NOT)EXISTS in filters.<br/>
- *  These will need to call down themselves if it is meaningful for the visitor.
- *  Bottom-up walk - apply to subelements before applying to current element.
- */
-
-public class ElementWalker_New {
-    public static void walk(Element el, ElementVisitor visitor) {
-        walk(el, visitor, null) ;
-    }
-
-    public static void walk(Element el, ElementVisitor elVisitor, ExprVisitor exprVisitor) {
-        EltWalker w = new EltWalker(elVisitor, exprVisitor) ;
-        el.visit(w) ;
-    }
-
-//    protected static void walk$(Element el, Walker walker) {
-//        el.visit(walker) ;
-//    }
-
-    static public class EltWalker implements ElementVisitor, ExprVisitorFunction {
-        protected final ElementVisitor elementVisitor ;
-        protected final ExprVisitor exprVisitor ;
-
-        protected EltWalker(ElementVisitor visitor, ExprVisitor exprVisitor) {
-            this.elementVisitor = visitor ;
-            this.exprVisitor = exprVisitor ;
-        }
-
-        @Override
-        public void visit(ElementTriplesBlock el) {
-            elementVisitor.visit(el) ;
-        }
-
-        @Override
-        public void visit(ElementFilter el) {
-            el.getExpr().visit(this);
-            elementVisitor.visit(el) ;
-        }
-
-        @Override
-        public void visit(ElementAssign el) {
-            elementVisitor.visit(el) ;
-        }
-
-        @Override
-        public void visit(ElementBind el) {
-            elementVisitor.visit(el) ;
-        }
-
-        @Override
-        public void visit(ElementData el) {
-            elementVisitor.visit(el) ;
-        }
-
-        @Override
-        public void visit(ElementUnion el) {
-            for ( Element e : el.getElements() )
-                e.visit(this) ;
-            elementVisitor.visit(el) ;
-        }
-
-        @Override
-        public void visit(ElementGroup el) {
-            for ( Element e : el.getElements() )
-                e.visit(this) ;
-            elementVisitor.visit(el) ;
-        }
-
-        @Override
-        public void visit(ElementOptional el) {
-            if ( el.getOptionalElement() != null )
-                el.getOptionalElement().visit(this) ;
-            elementVisitor.visit(el) ;
-        }
-
-        @Override
-        public void visit(ElementDataset el) {
-            if ( el.getElement() != null )
-                el.getElement().visit(this) ;
-            elementVisitor.visit(el) ;
-        }
-
-        @Override
-        public void visit(ElementNamedGraph el) {
-            if ( el.getElement() != null )
-                el.getElement().visit(this) ;
-            elementVisitor.visit(el) ;
-        }
-
-        @Override
-        public void visit(ElementService el) {
-            if ( el.getElement() != null )
-                el.getElement().visit(this) ;
-            elementVisitor.visit(el) ;
-        }
-
-        // EXISTs, NOT EXISTs also occur in FILTERs via expressions.
-
-        @Override
-        public void visit(ElementExists el) {
-            elementVisitor.visit(el) ;
-        }
-
-        @Override
-        public void visit(ElementNotExists el) {
-            elementVisitor.visit(el) ;
-        }
-
-        @Override
-        public void visit(ElementMinus el) {
-            if ( el.getMinusElement() != null )
-                el.getMinusElement().visit(this) ;
-            elementVisitor.visit(el) ;
-        }
-
-        @Override
-        public void visit(ElementSubQuery el) {
-            // This does not automatically walk into the subquery.
-            elementVisitor.visit(el) ;
-        }
-
-        @Override
-        public void visit(ElementPathBlock el) {
-            elementVisitor.visit(el) ;
-        }
-        
-        @Override
-        public void visit(ExprFunction0 func) { visitExprFunction(func) ; }
-        @Override
-        public void visit(ExprFunction1 func) { visitExprFunction(func) ; }
-        @Override
-        public void visit(ExprFunction2 func) { visitExprFunction(func) ; }
-        @Override
-        public void visit(ExprFunction3 func) { visitExprFunction(func) ; }
-        @Override
-        public void visit(ExprFunctionN func) { visitExprFunction(func) ; }
-        
-        @Override
-        public void visitExprFunction(ExprFunction func) {
-            for ( int i = 1 ; i <= func.numArgs() ; i++ )
-            {
-                Expr expr = func.getArg(i) ;
-                if ( expr == null )
-                    // Put a dummy in, e.g. to keep the transform stack aligned.
-                    Expr.NONE.visit(this) ;
-                else
-                    expr.visit(this) ;
-            }
-            func.visit(exprVisitor) ;
-        }
-        
-        @Override
-        public void visit(ExprFunctionOp funcOp) {
-            // Walk the op
-            funcOp.getElement().visit(this);
-            funcOp.visit(exprVisitor) ;
-        }
-        
-        @Override
-        public void visit(NodeValue nv)         { nv.visit(exprVisitor) ; }
-        @Override
-        public void visit(ExprVar v)            { v.visit(exprVisitor) ; }
-        @Override
-        public void visit(ExprNone v)            { v.visit(exprVisitor) ; }
-        @Override
-        public void visit(ExprAggregator eAgg)  {
-            //eAgg.getAggVar().visit(visitorExpr);
-            // XXX XXX Hack for varsMentioned
-            eAgg.visit(exprVisitor) ; 
-        }
-    }
-}
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/OpVisitorByTypeAndExpr.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/OpVisitorByTypeAndExpr.java
index c78e724..dff3de0 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/OpVisitorByTypeAndExpr.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/OpVisitorByTypeAndExpr.java
@@ -88,6 +88,11 @@
     }
 
     @Override
+    public default void visit(OpFind opFind) {
+        visit0(opFind);
+    }
+
+    @Override
     public default void visit(OpProcedure opProcedure) {
         visit1(opProcedure);
     }
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/WalkerVisitor.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/WalkerVisitor.java
index f3d7e27..d4dc1e0 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/WalkerVisitor.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/WalkerVisitor.java
@@ -214,13 +214,11 @@
         visit1$(opExtend) ;
         after(opExtend) ;
     }
-
     
     // Transforming to quads needs the graph node handled before doing the sub-algebra ops
     // so it has to be done as before/after by the Walker. By the time visit(OpGraph) is called,
     // the sub-tree has already been visited. 
     
-    
 //    @Override
 //    public void visit(OpGraph op) {
 //        pushGraph(op.getNode()) ;
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterAddTripleTerm.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterAddTripleTerm.java
index d253248..0b36285 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterAddTripleTerm.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterAddTripleTerm.java
@@ -37,7 +37,7 @@
  * with terms from the current binding. It is an error not to have substitutions for
  * all variables and results in the original binding unchanged.
  */
-class QueryIterAddTripleTerm extends QueryIterTriplePattern {
+public class QueryIterAddTripleTerm extends QueryIterTriplePattern {
     private final Triple triple;
     private final Var    var;
 
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterBlockTriplesStar.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterBlockTriplesStar.java
index 59036f9..22e4b24 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterBlockTriplesStar.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterBlockTriplesStar.java
@@ -18,15 +18,9 @@
 
 package org.apache.jena.sparql.engine.iterator;
 
-import static org.apache.jena.graph.Node_Triple.triple;
-
 import org.apache.jena.atlas.io.IndentedWriter;
-import org.apache.jena.atlas.lib.Pair;
-import org.apache.jena.graph.Node;
 import org.apache.jena.graph.Triple;
 import org.apache.jena.sparql.core.BasicPattern;
-import org.apache.jena.sparql.core.Var;
-import org.apache.jena.sparql.core.VarAlloc;
 import org.apache.jena.sparql.engine.ExecutionContext;
 import org.apache.jena.sparql.engine.QueryIterator;
 import org.apache.jena.sparql.engine.binding.Binding;
@@ -50,7 +44,7 @@
         this.pattern = pattern;
         QueryIterator chain = getInput();
         for (Triple triple : pattern) {
-            chain = rdfStarTriple(chain, triple);
+            chain = RX.rdfStarTriple(chain, triple, execContext);
         }
         output = chain;
     }
@@ -78,103 +72,6 @@
             output.cancel();
     }
 
-    static String allocTripleTerms = "*";
-    static VarAlloc varAlloc = new VarAlloc(allocTripleTerms) ;
-
-    /** Top level function */
-    private QueryIterator rdfStarTriple(QueryIterator chain, Triple triple) {
-        // Should all work without this trap for plain RDF but for now,
-        // fast track the non-RDF* case.
-        if ( ! tripleHasNodeTriple(triple) )
-            // No RDF* : direct to data. Behaviour the same as QueryIterBlockTriples.
-            return matchData(chain, triple, getExecContext());
-        return rdfStarTripleSub(chain, triple, getExecContext());
-    }
-
-    /**
-     * Insert the stages necessary for a triple with triple pattern term inside it.
-     * If the triple pattern has a triple term, possibly with variables, introduce
-     * an iterator to solve for that, assign the matching triple term to a hidden
-     * variable, and put allocated variable in to main triple pattern. Do for subject
-     * and object positions, and also any nested triple pattern terms.
-     */
-    private static QueryIterator rdfStarTripleSub(QueryIterator chain, Triple triple, ExecutionContext execContext) {
-        Pair<QueryIterator, Triple> pair = preprocess(chain, triple, execContext);
-        QueryIterator chain2 = matchData(pair.getLeft(), pair.getRight(), execContext);
-        return chain2;
-    }
-
-    // If we assume the data is correct (in PG mode), no need to test for the triple
-    // of a concrete Node_Triple because we able to test for it in the triple
-    // pattern itself.
-    // This should be "false".
-    private static final boolean TEST_FOR_CONCRETE_TRIPLE_TERM = false;
-
-    private static Pair<QueryIterator, Triple> preprocess(QueryIterator chain, Triple triple, ExecutionContext execContext) {
-        Triple triple2 = triple;
-        Node s = triple.getSubject();
-        Node p = triple.getPredicate();
-        Node o = triple.getObject();
-        Node s1 = null;
-        Node o1 = null;
-
-        // Recurse.
-        if ( s.isNodeTriple() ) {
-            if ( TEST_FOR_CONCRETE_TRIPLE_TERM || ! s.isConcrete() ) {
-                Triple t2 = triple(s);
-                Var var = varAlloc.allocVar();
-                Triple tripleTerm = Triple.create(t2.getSubject(), t2.getPredicate(), t2.getObject());
-                chain = matchTripleStar(chain, var, tripleTerm, execContext);
-                s1 = var;
-            }
-        }
-        if ( o.isNodeTriple() ) {
-            if ( TEST_FOR_CONCRETE_TRIPLE_TERM || ! o.isConcrete() ) {
-                Triple t2 = triple(o);
-                Var var = varAlloc.allocVar();
-                Triple tripleTerm = Triple.create(t2.getSubject(), t2.getPredicate(), t2.getObject());
-                chain = matchTripleStar(chain, var, tripleTerm, execContext);
-                o1 = var;
-            }
-        }
-
-        // No triple term in this triple.
-        if ( s1 == null && o1 == null )
-            return Pair.create(chain, triple);
-
-        // Change. Replace original.
-        if ( s1 == null )
-            s1 = s ;
-        if ( o1 == null )
-            o1 = o ;
-        Triple triple1 = Triple.create(s1, p, o1);
-        return Pair.create(chain, triple1);
-    }
-
-    /** Match the graph with a triple pattern, after any triple terms have been dealt with. */
-    private static QueryIterator matchData(QueryIterator chain, Triple triple, ExecutionContext execContext) {
-        QueryIterator qIter = new QueryIterTriplePattern(chain, triple, execContext);
-        return qIter;
-    }
-
-    /** Match a triple term pattern; add matches using the supplied variable. */
-    private static QueryIterator matchTripleStar(QueryIterator chain, Var var, Triple triple, ExecutionContext execContext) {
-        if ( tripleHasNodeTriple(triple) ) {
-            Pair<QueryIterator, Triple> pair = preprocess(chain, triple, execContext);
-            chain = pair.getLeft();
-            triple = pair.getRight();
-        }
-        // Assign to var in each binding, based on the triple pattern grounded by the match.
-        QueryIterator qIter = new QueryIterAddTripleTerm(chain, var, triple, execContext);
-        return qIter;
-    }
-
-    private static boolean tripleHasNodeTriple(Triple triple) {
-        return triple.getSubject().isNodeTriple()
-               /*|| triple.getPredicate().isNodeTriple()*/
-               || triple.getObject().isNodeTriple();
-    }
-
     @Override
     protected void details(IndentedWriter out, SerializationContext sCxt) {
         out.print(this.getClass().getSimpleName()+": " + pattern);
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterTriplePattern.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterTriplePattern.java
index df272dc..b82753d 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterTriplePattern.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterTriplePattern.java
@@ -33,6 +33,7 @@
 import org.apache.jena.util.iterator.ClosableIterator ;
 import org.apache.jena.util.iterator.NiceIterator ;
 
+/** Match a single triple pattern */
 public class QueryIterTriplePattern extends QueryIterRepeatApply
 {
     private final Triple pattern ;
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/RX.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/RX.java
new file mode 100644
index 0000000..e00ea78
--- /dev/null
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/RX.java
@@ -0,0 +1,201 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.sparql.engine.iterator;
+
+import static org.apache.jena.graph.Node_Triple.triple;
+
+import org.apache.jena.atlas.lib.Pair;
+import org.apache.jena.graph.Node;
+import org.apache.jena.graph.Triple;
+import org.apache.jena.sparql.core.Var;
+import org.apache.jena.sparql.core.VarAlloc;
+import org.apache.jena.sparql.engine.ExecutionContext;
+import org.apache.jena.sparql.engine.QueryIterator;
+
+/**
+ * Solver library for RDF*.
+ * <p>
+ * There are two entry points.
+ * <p>
+ * Function {@link #rdfStarTriple} for matching a single triple pattern in a basic
+ * graph pattern that may involve RDF* terms.
+ * <p>
+ * Function {@link #matchTripleStar} for matches a triple term and assigning the
+ * triple matched to a variable. It is used within {@link #rdfStarTriple} for nested
+ * triple term and a temporary allocated variable as well can for
+ * {@code FIND(<<...>> AS ?t)}.
+ */
+public class RX {
+    // From context?
+    static String allocTripleTerms = "*";
+    static VarAlloc varAlloc = new VarAlloc(allocTripleTerms) ;
+
+    // QueryIterator - acceptable as API as universal.
+    //    Internal TDB is a delayed binding iterator.
+    // <Triple, Node> vs <Tuple, NodeId>
+    // TDB: Iterator<BindingNodeId>
+
+    // TDB: StageMatchTuple ~~ QueryIterTriplePattern
+
+    // TDB: SolverLib.solve
+    //   The two solver libs are identical except for imports.
+    /*
+    public static Iterator<BindingNodeId> solve(NodeTupleTable nodeTupleTable,
+                                                Tuple<Node> tuple,
+                                                boolean anyGraph,
+                                                Iterator<BindingNodeId> chain, Predicate<Tuple<NodeId>> filter,
+                                                ExecutionContext execCxt)
+    {
+        return new StageMatchTuple(nodeTupleTable, chain, tuple, anyGraph, filter, execCxt) ;
+    }
+     */
+
+
+    /**
+     * Match a single triple pattern that may involve RDF* terms.
+     * This is the top level function for matching triples.
+     *
+     * The function {@link #matchTripleStar} matches a triple term and assigns the triple matched to a variable.
+     * It is used within {@link #rdfStarTriple} for nested triple term and a temporary allocated variable
+     * as well can for {@code FIND(<<...>> AS ?t)}.
+     *
+     * @implNote
+     * Without RDF*, this would be a plain call of {@link #matchData} which is simply:
+     * <pre>
+     * new QueryIterTriplePattern(chain, triple, execContext)}
+     * </pre>
+     *
+     */
+    public static QueryIterator rdfStarTriple(QueryIterator chain, Triple triple, ExecutionContext execCxt) {
+        // Should all work without this trap for plain RDF but for now,
+        // fast track the non-RDF* case.
+        if ( ! tripleHasNodeTriple(triple) )
+            // No RDF* : direct to data.
+            return matchData(chain, triple, execCxt);
+        return rdfStarTripleSub(chain, triple, execCxt);
+    }
+
+    /**
+     * Insert the stages necessary for a triple with triple pattern term inside it.
+     * If the triple pattern has a triple term, possibly with variables, introduce
+     * an iterator to solve for that, assign the matching triple term to a hidden
+     * variable, and put allocated variable in to main triple pattern. Do for subject
+     * and object positions, and also any nested triple pattern terms.
+     */
+    private static QueryIterator rdfStarTripleSub(QueryIterator chain, Triple triple, ExecutionContext execContext) {
+        Pair<QueryIterator, Triple> pair = preprocess(chain, triple, execContext);
+        QueryIterator chain2 = matchData(pair.getLeft(), pair.getRight(), execContext);
+        return chain2;
+    }
+
+    /**
+     * Match a triple pattern (which may have nested triple terms in it).
+     * Any matched triples are added as triple terms bound to the supplied variable.
+     */
+    public static QueryIterator matchTripleStar(QueryIterator chain, Var var, Triple triple, ExecutionContext execContext) {
+        if ( tripleHasNodeTriple(triple) ) {
+            Pair<QueryIterator, Triple> pair = preprocess(chain, triple, execContext);
+            chain = pair.getLeft();
+            triple = pair.getRight();
+        }
+        // Assign to var in each binding, based on the triple pattern grounded by the match.
+        QueryIterator qIter = bindTripleTerm(chain, var, triple, execContext);
+        return qIter;
+    }
+
+    // If we assume the data is correct (in PG mode), no need to test for the triple
+    // of a concrete Node_Triple because we are able to test for it in the triple
+    // pattern itself. This should be "false".
+    // XXX To be removed.
+    private static final boolean TEST_FOR_CONCRETE_TRIPLE_TERM = false;
+
+    /**
+     * Process a triple for triple terms.
+     * <p>
+     * This creates additional matchers for triple terms in the pattern triple recursively.
+     */
+    private static Pair<QueryIterator, Triple> preprocess(QueryIterator chain, Triple patternTriple, ExecutionContext execContext) {
+        Triple triple2 = patternTriple;
+        Node s = patternTriple.getSubject();
+        Node p = patternTriple.getPredicate();
+        Node o = patternTriple.getObject();
+        Node s1 = null;
+        Node o1 = null;
+
+        // Recurse.
+        if ( s.isNodeTriple() ) {
+            if ( TEST_FOR_CONCRETE_TRIPLE_TERM || ! s.isConcrete() ) {
+                Triple t2 = triple(s);
+                Var var = varAlloc.allocVar();
+                Triple tripleTerm = Triple.create(t2.getSubject(), t2.getPredicate(), t2.getObject());
+                chain = matchTripleStar(chain, var, tripleTerm, execContext);
+                s1 = var;
+            }
+        }
+        if ( o.isNodeTriple() ) {
+            if ( TEST_FOR_CONCRETE_TRIPLE_TERM || ! o.isConcrete() ) {
+                Triple t2 = triple(o);
+                Var var = varAlloc.allocVar();
+                Triple tripleTerm = Triple.create(t2.getSubject(), t2.getPredicate(), t2.getObject());
+                chain = matchTripleStar(chain, var, tripleTerm, execContext);
+                o1 = var;
+            }
+        }
+
+        // No triple term in this triple.
+        if ( s1 == null && o1 == null )
+            return Pair.create(chain, patternTriple);
+
+        // Change. Replace original.
+        if ( s1 == null )
+            s1 = s ;
+        if ( o1 == null )
+            o1 = o ;
+        Triple triple1 = Triple.create(s1, p, o1);
+        return Pair.create(chain, triple1);
+    }
+
+    /**
+     * Match the graph with a triple pattern.
+     * This is the accessor the graph.
+     * It assumes any triple terms have been dealt with.
+     */
+    private static QueryIterator matchData(QueryIterator chain, Triple triple, ExecutionContext execContext) {
+        QueryIterator qIter = new QueryIterTriplePattern(chain, triple, execContext);
+        return qIter;
+    }
+
+    /**
+     * Add a binding to each row with triple grounded by the current row.
+     * If the triple isn't concrete, then just return the row as-is.
+     */
+    private static QueryIterator bindTripleTerm(QueryIterator chain, Var var, Triple triple, ExecutionContext execContext) {
+        return new QueryIterAddTripleTerm(chain, var, triple, execContext);
+    }
+
+    /**
+     * Test whether a triple has an triple term as one of its components.
+     */
+    private static boolean tripleHasNodeTriple(Triple triple) {
+        return triple.getSubject().isNodeTriple()
+               /*|| triple.getPredicate().isNodeTriple()*/
+               || triple.getObject().isNodeTriple();
+    }
+}
+
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/ExecutionDispatch.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/ExecutionDispatch.java
index cdd5547..38b04e3 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/ExecutionDispatch.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/ExecutionDispatch.java
@@ -100,6 +100,14 @@
     }
 
     @Override
+    public void visit(OpFind opFind)
+    {
+        QueryIterator input = pop() ;
+        QueryIterator qIter = opExecutor.execute(opFind, input) ;
+        push(qIter) ;
+    }
+
+    @Override
     public void visit(OpProcedure opProc)
     {
         QueryIterator input = pop() ;
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/OpExecutor.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/OpExecutor.java
index e303263..7e3b18b 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/OpExecutor.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/OpExecutor.java
@@ -136,6 +136,10 @@
         return execute(opTriple.asBGP(), input) ;
     }
 
+    protected QueryIterator execute(OpFind opFind, QueryIterator input) {
+        return RX.matchTripleStar(input, opFind.getVar(), opFind.getTriple(), execCxt);
+    }
+
     protected QueryIterator execute(OpGraph opGraph, QueryIterator input) {
         QueryIterator qIter = specialcase(opGraph.getNode(), opGraph.getSubOp(), input) ;
         if (qIter != null)
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/VarFinder.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/VarFinder.java
index 54533e0..5fbea97 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/VarFinder.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/VarFinder.java
@@ -165,6 +165,12 @@
         }
 
         @Override
+        public void visit(OpFind opFind) {
+            defines.add(opFind.getVar());
+            addVarsFromTriple(defines, opFind.getTriple());
+        }
+
+        @Override
         public void visit(OpExt opExt) {
             opExt.effectiveOp().visit(this);
         }
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/ref/Evaluator.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/ref/Evaluator.java
index a11795c..ba094e3 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/ref/Evaluator.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/ref/Evaluator.java
@@ -21,6 +21,7 @@
 import java.util.List ;
 
 import org.apache.jena.graph.Node ;
+import org.apache.jena.graph.Triple;
 import org.apache.jena.query.SortCondition ;
 import org.apache.jena.sparql.algebra.Table ;
 import org.apache.jena.sparql.core.BasicPattern ;
@@ -37,8 +38,8 @@
     public ExecutionContext getExecContext() ;
     
     public Table basicPattern(BasicPattern pattern) ;
-    
     public Table pathPattern(TriplePath triplePath) ;
+    public Table find(Var var, Triple tripleterm) ;
 
     // Two forms that provide custom code evaluation
     public Table procedure(Table table, Node procId, ExprList args) ;
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/ref/EvaluatorDispatch.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/ref/EvaluatorDispatch.java
index bdd9fbc..b43611c 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/ref/EvaluatorDispatch.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/ref/EvaluatorDispatch.java
@@ -97,6 +97,11 @@
         Table table = evaluator.pathPattern(opPath.getTriplePath()) ;
         push(table) ;
     }
+    
+    @Override
+    public void visit(OpFind opFind) {
+        Table table = evaluator.find(opFind.getVar(), opFind.getTriple());
+    }
 
     @Override
     public void visit(OpProcedure opProc)
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/ref/EvaluatorSimple.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/ref/EvaluatorSimple.java
index f2fc9b4..b0baf78 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/ref/EvaluatorSimple.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/ref/EvaluatorSimple.java
@@ -23,10 +23,14 @@
 
 import org.apache.jena.atlas.lib.Lib ;
 import org.apache.jena.graph.Node ;
+import org.apache.jena.graph.Triple;
 import org.apache.jena.query.ResultSet ;
 import org.apache.jena.query.ResultSetFormatter ;
 import org.apache.jena.query.SortCondition ;
-import org.apache.jena.sparql.algebra.* ;
+import org.apache.jena.sparql.algebra.Algebra;
+import org.apache.jena.sparql.algebra.JoinType;
+import org.apache.jena.sparql.algebra.Table;
+import org.apache.jena.sparql.algebra.TableFactory;
 import org.apache.jena.sparql.algebra.table.TableN ;
 import org.apache.jena.sparql.core.BasicPattern ;
 import org.apache.jena.sparql.core.TriplePath ;
@@ -78,6 +82,12 @@
     }
 
     @Override
+    public Table find(Var var, Triple tripleTerm) {
+        QueryIterator qIter = RX.matchTripleStar(QueryIterRoot.create(execCxt), var, tripleTerm, execCxt);
+        return TableFactory.create(qIter) ;
+    }
+
+    @Override
     public Table procedure(Table table, Node procId, ExprList args)
     {
         Procedure proc = ProcEval.build(procId, args, execCxt) ;
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserBase.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserBase.java
index 5d9186f..33764ce 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserBase.java
@@ -331,6 +331,11 @@
 
     // --------
 
+    protected void checkConcrete(Node n, int line, int column) {
+        if ( ! n.isConcrete() )
+            throwParseException("Term is not concrete: "+n, line, column) ;
+    }
+    
     // BNode from a list
 //    protected Node createListNode()
 //    { return listLabelMap.allocNode() ; }
@@ -355,7 +360,7 @@
         return activeLabelMap.asNode(label) ;
     }
 
-    protected Node createTripleTerm(Node s, Node p, Node o) {
+    protected Node createTripleTerm(Node s, Node p, Node o, int line, int column) {
         return NodeFactory.createTripleNode(s, p, o);
     }
 
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/SPARQLParserBase.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/SPARQLParserBase.java
index d3fcd7b..47ef0ad 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/SPARQLParserBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/SPARQLParserBase.java
@@ -286,9 +286,12 @@
             return ;
         
         Var v = variables.get(currentColumn) ;
+        if ( n != null && ! n.isConcrete() ) {
+            String msg = QueryParseException.formatMessage("Term is not concrete: "+n, line, col) ;
+            throw new QueryParseException(msg, line, col) ;
+        }
         if ( n != null )
             currentValueRow().add(v, n) ;
-        
     }
 
     protected void finishDataBlockValueRow(int line, int col)      
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParser.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParser.java
index f251923..8f274b8 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParser.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParser.java
@@ -2378,6 +2378,7 @@
       case BIND:
       case SERVICE:
       case LET:
+      case FIND:
       case EXISTS:
       case NOT:
       case FILTER:
@@ -2528,6 +2529,10 @@
       el = InlineData();
       break;
       }
+    case FIND:{
+      el = Find();
+      break;
+      }
     case LET:{
       el = Assignment();
       break;
@@ -2593,6 +2598,17 @@
     throw new Error("Missing return statement in function");
   }
 
+  final public Element Find() throws ParseException {Var v ; Node n;
+    jj_consume_token(FIND);
+    jj_consume_token(LPAREN);
+    n = TripleTerm();
+    jj_consume_token(AS);
+    v = Var();
+    jj_consume_token(RPAREN);
+{if ("" != null) return new ElementFind(v, n) ;}
+    throw new Error("Missing return statement in function");
+  }
+
   final public Element InlineData() throws ParseException {ElementData el ; Token t ;
     t = jj_consume_token(VALUES);
 int beginLine = t.beginLine; int beginColumn = t.beginColumn; t = null;
@@ -2623,17 +2639,17 @@
     }
   }
 
-  final public void InlineDataOneVar() throws ParseException {Var v ; Node n ; Token t ;
+  final public void InlineDataOneVar() throws ParseException {Var v ; Node n ; Token t ; ; int beginLine; int beginColumn;
     v = Var();
 emitDataBlockVariable(v) ;
     t = jj_consume_token(LBRACE);
+beginLine = t.beginLine; beginColumn = t.beginColumn; t = null;
     label_20:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
       case IRIref:
       case PNAME_NS:
       case PNAME_LN:
-      case BLANK_NODE_LABEL:
       case UNDEF:
       case TRUE:
       case FALSE:
@@ -2650,7 +2666,7 @@
       case STRING_LITERAL2:
       case STRING_LITERAL_LONG1:
       case STRING_LITERAL_LONG2:
-      case ANON:{
+      case LT2:{
         ;
         break;
         }
@@ -2659,9 +2675,9 @@
         break label_20;
       }
       n = DataBlockValue();
-startDataBlockValueRow(-1, -1) ;
-      emitDataBlockValue(n, -1, -1) ;
-      finishDataBlockValueRow(-1, -1) ;
+startDataBlockValueRow(beginLine, beginColumn) ;
+      emitDataBlockValue(n, beginLine, beginColumn) ;
+      finishDataBlockValueRow(beginLine, beginColumn) ;
     }
     t = jj_consume_token(RBRACE);
   }
@@ -2721,7 +2737,6 @@
           case IRIref:
           case PNAME_NS:
           case PNAME_LN:
-          case BLANK_NODE_LABEL:
           case UNDEF:
           case TRUE:
           case FALSE:
@@ -2738,7 +2753,7 @@
           case STRING_LITERAL2:
           case STRING_LITERAL_LONG1:
           case STRING_LITERAL_LONG2:
-          case ANON:{
+          case LT2:{
             ;
             break;
             }
@@ -2806,9 +2821,8 @@
 {if ("" != null) return n ;}
       break;
       }
-    case BLANK_NODE_LABEL:
-    case ANON:{
-      n = BlankNode();
+    case LT2:{
+      n = TripleTerm();
 {if ("" != null) return n ;}
       break;
       }
@@ -4086,15 +4100,10 @@
     throw new Error("Missing return statement in function");
   }
 
-  final public Node VarOrTerm() throws ParseException {Node n = null ; Token t = null; Node s , p , o ;
+  final public Node VarOrTerm() throws ParseException {Node n = null ;
     switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
     case LT2:{
-      t = jj_consume_token(LT2);
-      s = VarOrTerm();
-      p = Verb();
-      o = VarOrTerm();
-n = createTripleTerm(s,p,o);
-      jj_consume_token(GT2);
+      n = TripleTerm();
       break;
       }
     case VAR1:
@@ -4135,6 +4144,17 @@
     throw new Error("Missing return statement in function");
   }
 
+  final public Node TripleTerm() throws ParseException {Node n = null ; Token t ; Node s , p , o ;
+    t = jj_consume_token(LT2);
+    s = VarOrTerm();
+    p = Verb();
+    o = VarOrTerm();
+n = createTripleTerm(s, p, o, t.beginLine, t.beginColumn);
+    jj_consume_token(GT2);
+{if ("" != null) return n;}
+    throw new Error("Missing return statement in function");
+  }
+
   final public Node VarOrIri() throws ParseException {Node n = null ; String iri ;
     switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
     case VAR1:
@@ -6159,48 +6179,6 @@
     finally { jj_save(4, xla); }
   }
 
-  private boolean jj_3R_134()
- {
-    if (jj_scan_token(AGG)) return true;
-    if (jj_3R_144()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_133()
- {
-    if (jj_scan_token(VAR_POP)) return true;
-    if (jj_scan_token(LPAREN)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_132()
- {
-    if (jj_scan_token(VAR_SAMP)) return true;
-    if (jj_scan_token(LPAREN)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_131()
- {
-    if (jj_scan_token(VARIANCE)) return true;
-    if (jj_scan_token(LPAREN)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_130()
- {
-    if (jj_scan_token(STDEV_POP)) return true;
-    if (jj_scan_token(LPAREN)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_129()
- {
-    if (jj_scan_token(STDEV_SAMP)) return true;
-    if (jj_scan_token(LPAREN)) return true;
-    return false;
-  }
-
   private boolean jj_3R_128()
  {
     if (jj_scan_token(STDEV)) return true;
@@ -6215,55 +6193,6 @@
     return false;
   }
 
-  private boolean jj_3_2()
- {
-    if (jj_scan_token(SEMICOLON)) return true;
-    if (jj_3R_44()) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_scan_token(138)) {
-    jj_scanpos = xsp;
-    if (jj_scan_token(139)) {
-    jj_scanpos = xsp;
-    if (jj_scan_token(146)) {
-    jj_scanpos = xsp;
-    if (jj_scan_token(141)) {
-    jj_scanpos = xsp;
-    if (jj_scan_token(142)) {
-    jj_scanpos = xsp;
-    if (jj_scan_token(143)) {
-    jj_scanpos = xsp;
-    if (jj_scan_token(140)) {
-    jj_scanpos = xsp;
-    if (jj_scan_token(151)) {
-    jj_scanpos = xsp;
-    if (jj_scan_token(134)) {
-    jj_scanpos = xsp;
-    if (jj_scan_token(133)) {
-    jj_scanpos = xsp;
-    if (jj_scan_token(152)) {
-    jj_scanpos = xsp;
-    if (jj_scan_token(135)) {
-    jj_scanpos = xsp;
-    if (jj_scan_token(136)) {
-    jj_scanpos = xsp;
-    if (jj_scan_token(137)) return true;
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    return false;
-  }
-
   private boolean jj_3R_127()
  {
     if (jj_scan_token(GROUP_CONCAT)) return true;
@@ -6306,12 +6235,6 @@
     return false;
   }
 
-  private boolean jj_3R_148()
- {
-    if (jj_scan_token(LPAREN)) return true;
-    return false;
-  }
-
   private boolean jj_3R_121()
  {
     if (jj_scan_token(MIN)) return true;
@@ -6326,6 +6249,61 @@
     return false;
   }
 
+  private boolean jj_3R_149()
+ {
+    if (jj_scan_token(LPAREN)) return true;
+    return false;
+  }
+
+  private boolean jj_3_2()
+ {
+    if (jj_scan_token(SEMICOLON)) return true;
+    if (jj_3R_44()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(139)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(140)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(147)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(142)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(143)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(144)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(141)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(152)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(135)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(134)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(153)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(136)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(137)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(138)) return true;
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    return false;
+  }
+
   private boolean jj_3R_119()
  {
     if (jj_scan_token(COUNT)) return true;
@@ -6393,18 +6371,12 @@
     return false;
   }
 
-  private boolean jj_3R_149()
+  private boolean jj_3R_150()
  {
     if (jj_scan_token(LBRACKET)) return true;
     return false;
   }
 
-  private boolean jj_3R_143()
- {
-    if (jj_3R_149()) return true;
-    return false;
-  }
-
   private boolean jj_3R_113()
  {
     if (jj_scan_token(EXISTS)) return true;
@@ -6412,6 +6384,12 @@
     return false;
   }
 
+  private boolean jj_3R_143()
+ {
+    if (jj_3R_150()) return true;
+    return false;
+  }
+
   private boolean jj_3R_118()
  {
     Token xsp;
@@ -6425,7 +6403,7 @@
 
   private boolean jj_3R_142()
  {
-    if (jj_3R_148()) return true;
+    if (jj_3R_149()) return true;
     return false;
   }
 
@@ -6854,12 +6832,6 @@
     return false;
   }
 
-  private boolean jj_3R_136()
- {
-    if (jj_scan_token(LBRACE)) return true;
-    return false;
-  }
-
   private boolean jj_3R_46()
  {
     if (jj_3R_106()) return true;
@@ -7042,6 +7014,12 @@
     return false;
   }
 
+  private boolean jj_3R_136()
+ {
+    if (jj_scan_token(LBRACE)) return true;
+    return false;
+  }
+
   private boolean jj_3_3()
  {
     if (jj_scan_token(DOT)) return true;
@@ -7049,50 +7027,67 @@
     return false;
   }
 
-  private boolean jj_3_1()
- {
-    if (jj_3R_43()) return true;
-    return false;
-  }
-
   private boolean jj_3R_145()
  {
     if (jj_scan_token(IRIref)) return true;
     return false;
   }
 
-  private boolean jj_3R_172()
+  private boolean jj_3_1()
+ {
+    if (jj_3R_43()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_173()
  {
     if (jj_scan_token(ANON)) return true;
     return false;
   }
 
-  private boolean jj_3R_162()
+  private boolean jj_3R_163()
  {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_171()) {
+    if (jj_3R_172()) {
     jj_scanpos = xsp;
-    if (jj_3R_172()) return true;
+    if (jj_3R_173()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_171()
+  private boolean jj_3R_172()
  {
     if (jj_scan_token(BLANK_NODE_LABEL)) return true;
     return false;
   }
 
+  private boolean jj_3R_165()
+ {
+    if (jj_scan_token(PNAME_NS)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_164()
+ {
+    if (jj_scan_token(PNAME_LN)) return true;
+    return false;
+  }
+
   private boolean jj_3R_105()
  {
     if (jj_3R_118()) return true;
     return false;
   }
 
-  private boolean jj_3R_164()
+  private boolean jj_3R_159()
  {
-    if (jj_scan_token(PNAME_NS)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_164()) {
+    jj_scanpos = xsp;
+    if (jj_3R_165()) return true;
+    }
     return false;
   }
 
@@ -7113,9 +7108,51 @@
     return false;
   }
 
-  private boolean jj_3R_163()
+  private boolean jj_3_4()
  {
-    if (jj_scan_token(PNAME_LN)) return true;
+    if (jj_scan_token(DOT)) return true;
+    if (jj_3R_45()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_152()
+ {
+    if (jj_3R_159()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_144()
+ {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_151()) {
+    jj_scanpos = xsp;
+    if (jj_3R_152()) return true;
+    }
+    return false;
+  }
+
+  private boolean jj_3R_151()
+ {
+    if (jj_3R_145()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_177()
+ {
+    if (jj_scan_token(STRING_LITERAL_LONG2)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_176()
+ {
+    if (jj_scan_token(STRING_LITERAL_LONG1)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_175()
+ {
+    if (jj_scan_token(STRING_LITERAL2)) return true;
     return false;
   }
 
@@ -7125,20 +7162,25 @@
     return false;
   }
 
-  private boolean jj_3_4()
+  private boolean jj_3R_174()
  {
-    if (jj_scan_token(DOT)) return true;
-    if (jj_3R_45()) return true;
+    if (jj_scan_token(STRING_LITERAL1)) return true;
     return false;
   }
 
-  private boolean jj_3R_158()
+  private boolean jj_3R_166()
  {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_163()) {
+    if (jj_3R_174()) {
     jj_scanpos = xsp;
-    if (jj_3R_164()) return true;
+    if (jj_3R_175()) {
+    jj_scanpos = xsp;
+    if (jj_3R_176()) {
+    jj_scanpos = xsp;
+    if (jj_3R_177()) return true;
+    }
+    }
     }
     return false;
   }
@@ -7151,26 +7193,32 @@
     return false;
   }
 
-  private boolean jj_3R_151()
+  private boolean jj_3R_171()
  {
-    if (jj_3R_158()) return true;
+    if (jj_scan_token(FALSE)) return true;
     return false;
   }
 
-  private boolean jj_3R_144()
+  private boolean jj_3R_162()
  {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_150()) {
+    if (jj_3R_170()) {
     jj_scanpos = xsp;
-    if (jj_3R_151()) return true;
+    if (jj_3R_171()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_150()
+  private boolean jj_3R_170()
  {
-    if (jj_3R_145()) return true;
+    if (jj_scan_token(TRUE)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_135()
+ {
+    if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
@@ -7181,6 +7229,18 @@
     return false;
   }
 
+  private boolean jj_3R_189()
+ {
+    if (jj_scan_token(DOUBLE_NEGATIVE)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_188()
+ {
+    if (jj_scan_token(DECIMAL_NEGATIVE)) return true;
+    return false;
+  }
+
   private boolean jj_3R_103()
  {
     Token xsp;
@@ -7198,9 +7258,34 @@
     return false;
   }
 
-  private boolean jj_3R_176()
+  private boolean jj_3R_187()
  {
-    if (jj_scan_token(STRING_LITERAL_LONG2)) return true;
+    if (jj_scan_token(INTEGER_NEGATIVE)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_109()
+ {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(174)) {
+    jj_scanpos = xsp;
+    if (jj_3R_135()) return true;
+    }
+    return false;
+  }
+
+  private boolean jj_3R_180()
+ {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_187()) {
+    jj_scanpos = xsp;
+    if (jj_3R_188()) {
+    jj_scanpos = xsp;
+    if (jj_3R_189()) return true;
+    }
+    }
     return false;
   }
 
@@ -7214,96 +7299,27 @@
     return false;
   }
 
-  private boolean jj_3R_175()
- {
-    if (jj_scan_token(STRING_LITERAL_LONG1)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_174()
- {
-    if (jj_scan_token(STRING_LITERAL2)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_173()
- {
-    if (jj_scan_token(STRING_LITERAL1)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_165()
- {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_173()) {
-    jj_scanpos = xsp;
-    if (jj_3R_174()) {
-    jj_scanpos = xsp;
-    if (jj_3R_175()) {
-    jj_scanpos = xsp;
-    if (jj_3R_176()) return true;
-    }
-    }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_135()
- {
-    if (jj_scan_token(LPAREN)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_170()
- {
-    if (jj_scan_token(FALSE)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_161()
- {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_169()) {
-    jj_scanpos = xsp;
-    if (jj_3R_170()) return true;
-    }
-    return false;
-  }
-
-  private boolean jj_3R_169()
- {
-    if (jj_scan_token(TRUE)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_109()
- {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_scan_token(173)) {
-    jj_scanpos = xsp;
-    if (jj_3R_135()) return true;
-    }
-    return false;
-  }
-
-  private boolean jj_3R_188()
- {
-    if (jj_scan_token(DOUBLE_NEGATIVE)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_187()
- {
-    if (jj_scan_token(DECIMAL_NEGATIVE)) return true;
-    return false;
-  }
-
   private boolean jj_3R_186()
  {
-    if (jj_scan_token(INTEGER_NEGATIVE)) return true;
+    if (jj_scan_token(DOUBLE_POSITIVE)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_185()
+ {
+    if (jj_scan_token(DECIMAL_POSITIVE)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_184()
+ {
+    if (jj_scan_token(INTEGER_POSITIVE)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_158()
+ {
+    if (jj_scan_token(NIL)) return true;
     return false;
   }
 
@@ -7311,51 +7327,19 @@
  {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_186()) {
+    if (jj_3R_184()) {
     jj_scanpos = xsp;
-    if (jj_3R_187()) {
+    if (jj_3R_185()) {
     jj_scanpos = xsp;
-    if (jj_3R_188()) return true;
+    if (jj_3R_186()) return true;
     }
     }
     return false;
   }
 
-  private boolean jj_3R_185()
- {
-    if (jj_scan_token(DOUBLE_POSITIVE)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_184()
- {
-    if (jj_scan_token(DECIMAL_POSITIVE)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_183()
- {
-    if (jj_scan_token(INTEGER_POSITIVE)) return true;
-    return false;
-  }
-
   private boolean jj_3R_157()
  {
-    if (jj_scan_token(NIL)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_178()
- {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_183()) {
-    jj_scanpos = xsp;
-    if (jj_3R_184()) {
-    jj_scanpos = xsp;
-    if (jj_3R_185()) return true;
-    }
-    }
+    if (jj_3R_163()) return true;
     return false;
   }
 
@@ -7371,6 +7355,12 @@
     return false;
   }
 
+  private boolean jj_3R_183()
+ {
+    if (jj_scan_token(DOUBLE)) return true;
+    return false;
+  }
+
   private boolean jj_3R_154()
  {
     if (jj_3R_160()) return true;
@@ -7379,28 +7369,14 @@
 
   private boolean jj_3R_182()
  {
-    if (jj_scan_token(DOUBLE)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_153()
- {
-    if (jj_3R_159()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_181()
- {
     if (jj_scan_token(DECIMAL)) return true;
     return false;
   }
 
-  private boolean jj_3R_147()
+  private boolean jj_3R_148()
  {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_152()) {
-    jj_scanpos = xsp;
     if (jj_3R_153()) {
     jj_scanpos = xsp;
     if (jj_3R_154()) {
@@ -7409,7 +7385,9 @@
     jj_scanpos = xsp;
     if (jj_3R_156()) {
     jj_scanpos = xsp;
-    if (jj_3R_157()) return true;
+    if (jj_3R_157()) {
+    jj_scanpos = xsp;
+    if (jj_3R_158()) return true;
     }
     }
     }
@@ -7418,33 +7396,33 @@
     return false;
   }
 
-  private boolean jj_3R_152()
+  private boolean jj_3R_153()
  {
     if (jj_3R_144()) return true;
     return false;
   }
 
-  private boolean jj_3R_177()
- {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_180()) {
-    jj_scanpos = xsp;
-    if (jj_3R_181()) {
-    jj_scanpos = xsp;
-    if (jj_3R_182()) return true;
-    }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_180()
+  private boolean jj_3R_181()
  {
     if (jj_scan_token(INTEGER)) return true;
     return false;
   }
 
-  private boolean jj_3R_146()
+  private boolean jj_3R_178()
+ {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_181()) {
+    jj_scanpos = xsp;
+    if (jj_3R_182()) {
+    jj_scanpos = xsp;
+    if (jj_3R_183()) return true;
+    }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_147()
  {
     Token xsp;
     xsp = jj_scanpos;
@@ -7455,6 +7433,12 @@
     return false;
   }
 
+  private boolean jj_3R_169()
+ {
+    if (jj_3R_180()) return true;
+    return false;
+  }
+
   private boolean jj_3R_168()
  {
     if (jj_3R_179()) return true;
@@ -7467,47 +7451,47 @@
     return false;
   }
 
-  private boolean jj_3R_166()
+  private boolean jj_3R_161()
  {
-    if (jj_3R_177()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_167()) {
+    jj_scanpos = xsp;
+    if (jj_3R_168()) {
+    jj_scanpos = xsp;
+    if (jj_3R_169()) return true;
+    }
+    }
     return false;
   }
 
   private boolean jj_3R_160()
  {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_166()) {
-    jj_scanpos = xsp;
-    if (jj_3R_167()) {
-    jj_scanpos = xsp;
-    if (jj_3R_168()) return true;
-    }
-    }
+    if (jj_3R_166()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_146()
+ {
+    if (jj_scan_token(LT2)) return true;
     return false;
   }
 
   private boolean jj_3R_141()
  {
-    if (jj_3R_147()) return true;
+    if (jj_3R_148()) return true;
     return false;
   }
 
   private boolean jj_3R_140()
  {
-    if (jj_3R_146()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_159()
- {
-    if (jj_3R_165()) return true;
+    if (jj_3R_147()) return true;
     return false;
   }
 
   private boolean jj_3R_139()
  {
-    if (jj_scan_token(LT2)) return true;
+    if (jj_3R_146()) return true;
     return false;
   }
 
@@ -7525,6 +7509,48 @@
     return false;
   }
 
+  private boolean jj_3R_134()
+ {
+    if (jj_scan_token(AGG)) return true;
+    if (jj_3R_144()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_133()
+ {
+    if (jj_scan_token(VAR_POP)) return true;
+    if (jj_scan_token(LPAREN)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_132()
+ {
+    if (jj_scan_token(VAR_SAMP)) return true;
+    if (jj_scan_token(LPAREN)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_131()
+ {
+    if (jj_scan_token(VARIANCE)) return true;
+    if (jj_scan_token(LPAREN)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_130()
+ {
+    if (jj_scan_token(STDEV_POP)) return true;
+    if (jj_scan_token(LPAREN)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_129()
+ {
+    if (jj_scan_token(STDEV_SAMP)) return true;
+    if (jj_scan_token(LPAREN)) return true;
+    return false;
+  }
+
   /** Generated Token Manager. */
   public ARQParserTokenManager token_source;
   JavaCharStream jj_input_stream;
@@ -7554,25 +7580,25 @@
       jj_la1_init_6();
    }
    private static void jj_la1_init_0() {
-      jj_la1_0 = new int[] {0x1e400000,0x200,0x300000,0x300000,0x0,0x1800000,0x1800000,0x1c00,0x0,0xdc00,0xdc00,0xdc00,0x0,0x0,0x0,0xdc00,0xdc00,0x0,0x0,0x0,0x0,0x0,0xc000,0x1c00,0x0,0x0,0x0,0x80000000,0x60000000,0xdc00,0x0,0xdc00,0x1c00,0xdc00,0x0,0xdc00,0xdc00,0x40000000,0x20000000,0x60000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c00,0x0,0x1c00,0x0,0xfc00,0x0,0x0,0xfc00,0xfc00,0xfc00,0x0,0x0,0xfc00,0x0,0xfc00,0x0,0x400000,0xfc00,0x0,0x0,0xfc00,0xfc00,0x0,0x0,0x0,0xc000,0x3c00,0xc000,0x0,0x0,0x3c00,0x0,0x3c00,0x0,0x1c00,0x800000,0x0,0x0,0x0,0x0,0x0,0xfc00,0x8dc00,0x0,0x8dc00,0x8dc00,0x0,0xfc00,0x88dc00,0x88dc00,0x0,0x88dc00,0x88dc00,0x0,0x0,0x0,0x0,0x0,0x881c00,0x0,0x0,0x0,0x0,0x881c00,0x0,0x81c00,0x81c00,0x81c00,0x81c00,0x0,0x0,0xfc00,0xfc00,0xfc00,0xfc00,0xfc00,0xdc00,0xfc00,0xc000,0x3c00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xdc00,0xdc00,0x0,0x0,0x0,0x0,0x0,0x0,0x800000,0xdc00,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x0,0x0,0x0,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x0,0x0,0x10000,0x10000,0x0,0x0,0x0,0x0,0x0,0x0,0x1c00,0x1800,0x2000,};
+      jj_la1_0 = new int[] {0x1e400000,0x200,0x300000,0x300000,0x0,0x1800000,0x1800000,0x1c00,0x0,0xdc00,0xdc00,0xdc00,0x0,0x0,0x0,0xdc00,0xdc00,0x0,0x0,0x0,0x0,0x0,0xc000,0x1c00,0x0,0x0,0x0,0x80000000,0x60000000,0xdc00,0x0,0xdc00,0x1c00,0xdc00,0x0,0xdc00,0xdc00,0x40000000,0x20000000,0x60000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c00,0x0,0x1c00,0x0,0xfc00,0x0,0x0,0xfc00,0xfc00,0xfc00,0x0,0x0,0xfc00,0x0,0xfc00,0x0,0x400000,0xfc00,0x0,0x0,0xfc00,0xfc00,0x0,0x0,0x0,0xc000,0x1c00,0xc000,0x0,0x0,0x1c00,0x0,0x1c00,0x0,0x1c00,0x800000,0x0,0x0,0x0,0x0,0x0,0xfc00,0x8dc00,0x0,0x8dc00,0x8dc00,0x0,0xfc00,0x88dc00,0x88dc00,0x0,0x88dc00,0x88dc00,0x0,0x0,0x0,0x0,0x0,0x881c00,0x0,0x0,0x0,0x0,0x881c00,0x0,0x81c00,0x81c00,0x81c00,0x81c00,0x0,0x0,0xfc00,0xfc00,0xfc00,0xfc00,0xfc00,0xdc00,0xfc00,0xc000,0x3c00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xdc00,0xdc00,0x0,0x0,0x0,0x0,0x0,0x0,0x800000,0xdc00,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x0,0x0,0x0,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x0,0x0,0x10000,0x10000,0x0,0x0,0x0,0x0,0x0,0x0,0x1c00,0x1800,0x2000,};
    }
    private static void jj_la1_init_1() {
-      jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x40000,0xffc30000,0xffc30000,0xffc30000,0x40,0x40,0xc0,0x0,0x0,0x40,0x80,0x40,0x40,0x0,0x0,0x20,0x80,0x80000,0x100000,0x0,0x0,0xffc30000,0x40000,0xffc30000,0xffc30000,0xffc30018,0x18,0xffc30000,0xffc30018,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x200,0x200,0x220,0x0,0x200,0x0,0x0,0x0,0x0,0x200,0x0,0x0,0x200,0x0,0x0,0x0,0x0,0x3f602,0x0,0x0,0x0,0x0,0x3f602,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x4,0x800,0xffc30000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000,0x20000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffc30000,0xffc30000,0x0,0x0,0xffc30000,0x0,0x0,0x0,0x0,0xffc30000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffc00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+      jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x80000,0xff860000,0xff860000,0xff860000,0x40,0x40,0xc0,0x0,0x0,0x40,0x80,0x40,0x40,0x0,0x0,0x20,0x80,0x100000,0x200000,0x0,0x0,0xff860000,0x80000,0xff860000,0xff860000,0xff860018,0x18,0xff860000,0xff860018,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x200,0x200,0x220,0x0,0x200,0x0,0x0,0x0,0x0,0x200,0x0,0x0,0x200,0x0,0x0,0x0,0x0,0x7f602,0x0,0x0,0x0,0x0,0x7f602,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x4,0x800,0xff860000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff860000,0xff860000,0x0,0x0,0xff860000,0x0,0x0,0x0,0x0,0xff860000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff800000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
    }
    private static void jj_la1_init_2() {
-      jj_la1_2 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfffcbdbf,0xfffcbdbf,0xfffcbdbf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfffcbdbf,0x0,0xfffcbdbf,0xfffcbdbf,0xfffcbdbf,0x0,0xfffcbdbf,0xfffcbdbf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfffcbdbf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30000,0x30000,0x0,0x30000,0x30000,0x0,0x0,0x0,0x0,0x0,0x30000,0x0,0x0,0x0,0x0,0x30000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x200,0x200,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfffcbdbf,0xfffcbdbf,0x0,0x0,0xfffcbdbf,0x0,0x0,0x0,0x0,0xfffcbdbf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+      jj_la1_2 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfff97b7f,0xfff97b7f,0xfff97b7f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfff97b7f,0x0,0xfff97b7f,0xfff97b7f,0xfff97b7f,0x0,0xfff97b7f,0xfff97b7f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfff97b7f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x60000,0x60000,0x0,0x60000,0x60000,0x0,0x0,0x0,0x0,0x0,0x60000,0x0,0x0,0x0,0x0,0x60000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x400,0x400,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfff97b7f,0xfff97b7f,0x0,0x0,0xfff97b7f,0x0,0x0,0x0,0x0,0xfff97b7f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
    }
    private static void jj_la1_init_3() {
-      jj_la1_3 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xbfffffff,0xbfffffff,0xbfffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xbfffffff,0x0,0xbfffffff,0xbfffffff,0xbfffffff,0x0,0xbfffffff,0xbfffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xbfffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xbfffffff,0xbfffffff,0x0,0x0,0xbfffffff,0x0,0x0,0x0,0x0,0xbfffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+      jj_la1_3 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7fffffff,0x7fffffff,0x7fffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7fffffff,0x0,0x7fffffff,0x7fffffff,0x7fffffff,0x0,0x7fffffff,0x7fffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7fffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7fffffff,0x7fffffff,0x0,0x0,0x7fffffff,0x0,0x0,0x0,0x0,0x7fffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
    }
    private static void jj_la1_init_4() {
-      jj_la1_4 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfc00000c,0x0,0xfc00000f,0xfc00000f,0xfc00000f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfc00000c,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x0,0x3,0x3,0x3,0x0,0x3,0x3,0x0,0x0,0x0,0x0,0x0,0x84ffe0,0x84ffe0,0x20000,0x80000,0x20000,0x20000,0x20000,0x20000,0x20000,0x20000,0x800000,0x20,0x60,0x1000000,0x0,0x0,0x200000,0x600000,0xfc00000c,0x0,0x0,0xfc00000c,0xfc00000c,0xfc00000c,0x0,0x0,0xfc00000c,0x0,0xfc00000c,0x0,0x0,0xfc00000c,0x0,0x0,0xfc00000c,0xfc00000c,0x0,0x0,0x20000,0x0,0xfc00000c,0x0,0x0,0x0,0xfc00000c,0x0,0xfc00000c,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0xfc00000c,0x0,0x0,0x0,0x0,0x0,0xfc00000c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4000000,0x0,0x4000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfc00000c,0xfc00000c,0xfc00000c,0xfc00000c,0xfc00000c,0x0,0x0,0x0,0xfc00000c,0x0,0x0,0x0,0x0,0xe0000000,0xe0000000,0x0,0x0,0xe0000000,0x0,0x0,0xfc00000f,0xfc00000f,0x0,0x0,0x3,0x0,0x0,0x0,0x0,0xfc00000f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfc000000,0x1c000000,0xe0000000,0x0,0xc,0x0,0x0,0x0,0x0,};
+      jj_la1_4 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf8000018,0x0,0xf800001f,0xf800001f,0xf800001f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf8000018,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x0,0x7,0x7,0x7,0x0,0x7,0x7,0x0,0x0,0x0,0x0,0x0,0x109ffc0,0x109ffc0,0x40000,0x100000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x1000000,0x40,0xc0,0x2000000,0x0,0x0,0x400000,0xc00000,0xf8000018,0x0,0x0,0xf8000018,0xf8000018,0xf8000018,0x0,0x0,0xf8000018,0x0,0xf8000018,0x0,0x0,0xf8000018,0x0,0x0,0xf8000018,0xf8000018,0x0,0x0,0x40000,0x0,0xf8000018,0x0,0x0,0x0,0xf8000018,0x0,0xf8000018,0x0,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0xf8000018,0x0,0x0,0x0,0x0,0x0,0xf8000018,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8000000,0x0,0x8000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf8000018,0xf8000018,0xf8000018,0xf8000018,0xf8000018,0x0,0x0,0x0,0xf8000018,0x0,0x0,0x0,0x0,0xc0000000,0xc0000000,0x0,0x0,0xc0000000,0x0,0x0,0xf800001f,0xf800001f,0x0,0x0,0x7,0x0,0x0,0x0,0x0,0xf800001f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf8000000,0x38000000,0xc0000000,0x0,0x18,0x0,0x0,0x0,0x0,};
    }
    private static void jj_la1_init_5() {
-      jj_la1_5 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x787,0x0,0xf87,0xf87,0xf87,0x0,0x0,0x4000,0x0,0x0,0x0,0x4000,0x0,0x0,0x100000,0x787,0x0,0x0,0x0,0x0,0x0,0x0,0x800,0x0,0x800,0x800,0x800,0x0,0x800,0x800,0x0,0x0,0x0,0x0,0x80000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20052f87,0x0,0x200000,0x20052f87,0x20052f87,0x20052f87,0x4000,0x200000,0x20052f87,0x0,0x20052f87,0x200000,0x0,0x20052f87,0x4000,0x200000,0x20052f87,0x20052f87,0x200000,0x4000,0x0,0x2800,0x40787,0x0,0x2800,0x2800,0x40787,0x2800,0x40787,0x0,0x800,0x0,0x100000,0x2800,0x100000,0x2800,0x200000,0x20052f87,0x0,0x80000,0x0,0x0,0x100000,0x20052f87,0x40000800,0x40000800,0x80000,0x40000800,0x40000800,0x100000,0x0,0x0,0x0,0x4000,0x40000800,0x8000,0x108000,0x100000,0x4000,0x40000800,0x0,0x0,0x800,0x0,0x0,0x10800,0x10800,0x20052f87,0x20052f87,0x20052f87,0x20052f87,0x20042787,0x0,0x40000,0x0,0x42787,0x0,0x0,0xfc00000,0xfc00000,0x7,0x7,0x0,0x0,0x7,0x0,0x0,0x40000f87,0xf87,0x2800,0x100000,0x0,0x100000,0x100000,0x100000,0x0,0x40000f87,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80000,0x80000,0x80000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2800,0x0,0x0,0x7,0x0,0x0,0x7,0x0,0x780,0x0,0x0,0x40000,};
+      jj_la1_5 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0f,0x0,0x1f0f,0x1f0f,0x1f0f,0x0,0x0,0x8000,0x0,0x0,0x0,0x8000,0x0,0x0,0x200000,0xf0f,0x0,0x0,0x0,0x0,0x0,0x0,0x1000,0x0,0x1000,0x1000,0x1000,0x0,0x1000,0x1000,0x0,0x0,0x0,0x0,0x100000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x400a5f0f,0x0,0x400000,0x400a5f0f,0x400a5f0f,0x400a5f0f,0x8000,0x400000,0x400a5f0f,0x0,0x400a5f0f,0x400000,0x0,0x400a5f0f,0x8000,0x400000,0x400a5f0f,0x400a5f0f,0x400000,0x8000,0x0,0x5000,0x40000f0f,0x0,0x5000,0x5000,0x40000f0f,0x5000,0x40000f0f,0x0,0x1000,0x0,0x200000,0x5000,0x200000,0x5000,0x400000,0x400a5f0f,0x0,0x100000,0x0,0x0,0x200000,0x400a5f0f,0x80001000,0x80001000,0x100000,0x80001000,0x80001000,0x200000,0x0,0x0,0x0,0x8000,0x80001000,0x10000,0x210000,0x200000,0x8000,0x80001000,0x0,0x0,0x1000,0x0,0x0,0x21000,0x21000,0x400a5f0f,0x400a5f0f,0x400a5f0f,0x400a5f0f,0x40084f0f,0x0,0x80000,0x0,0x84f0f,0x0,0x0,0x1f800000,0x1f800000,0xf,0xf,0x0,0x0,0xf,0x0,0x0,0x80001f0f,0x1f0f,0x5000,0x200000,0x0,0x200000,0x200000,0x200000,0x0,0x80001f0f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x100000,0x100000,0x100000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x5000,0x0,0x0,0xf,0x0,0x1,0xe,0x0,0xf00,0x0,0x0,0x80000,};
    }
    private static void jj_la1_init_6() {
-      jj_la1_6 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x800,0x800,0x0,0x800,0x800,0x0,0x400,0x840,0x840,0x4028,0x800,0x0,0x0,0x28,0x4028,0x0,0x400,0x800,0x800,0x0,0x800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x4,0x0,0x0,0x18,0x0,0x60,0x60,0x18,0x60,0x60,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x38,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+      jj_la1_6 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000,0x1000,0x0,0x1000,0x1000,0x0,0x800,0x1080,0x1080,0x8050,0x1000,0x0,0x0,0x50,0x8050,0x0,0x800,0x1000,0x1000,0x0,0x1000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x8,0x0,0x0,0x30,0x0,0xc0,0xc0,0x30,0xc0,0xc0,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x70,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x100,0x100,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
    }
   final private JJCalls[] jj_2_rtns = new JJCalls[5];
   private boolean jj_rescan = false;
@@ -7759,7 +7785,7 @@
   /** Generate ParseException. */
   public ParseException generateParseException() {
     jj_expentries.clear();
-    boolean[] la1tokens = new boolean[218];
+    boolean[] la1tokens = new boolean[219];
     if (jj_kind >= 0) {
       la1tokens[jj_kind] = true;
       jj_kind = -1;
@@ -7791,7 +7817,7 @@
         }
       }
     }
-    for (int i = 0; i < 218; i++) {
+    for (int i = 0; i < 219; i++) {
       if (la1tokens[i]) {
         jj_expentry = new int[1];
         jj_expentry[0] = i;
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserConstants.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserConstants.java
index 35f2688..f031b72 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserConstants.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserConstants.java
@@ -95,345 +95,347 @@
   /** RegularExpression Id. */
   int LET = 47;
   /** RegularExpression Id. */
-  int EXISTS = 48;
+  int FIND = 48;
   /** RegularExpression Id. */
-  int NOT = 49;
+  int EXISTS = 49;
   /** RegularExpression Id. */
-  int AS = 50;
+  int NOT = 50;
   /** RegularExpression Id. */
-  int GROUP = 51;
+  int AS = 51;
   /** RegularExpression Id. */
-  int HAVING = 52;
+  int GROUP = 52;
   /** RegularExpression Id. */
-  int SEPARATOR = 53;
+  int HAVING = 53;
   /** RegularExpression Id. */
-  int AGG = 54;
+  int SEPARATOR = 54;
   /** RegularExpression Id. */
-  int COUNT = 55;
+  int AGG = 55;
   /** RegularExpression Id. */
-  int MIN = 56;
+  int COUNT = 56;
   /** RegularExpression Id. */
-  int MAX = 57;
+  int MIN = 57;
   /** RegularExpression Id. */
-  int SUM = 58;
+  int MAX = 58;
   /** RegularExpression Id. */
-  int AVG = 59;
+  int SUM = 59;
   /** RegularExpression Id. */
-  int MEDIAN = 60;
+  int AVG = 60;
   /** RegularExpression Id. */
-  int MODE = 61;
+  int MEDIAN = 61;
   /** RegularExpression Id. */
-  int STDEV = 62;
+  int MODE = 62;
   /** RegularExpression Id. */
-  int STDEV_SAMP = 63;
+  int STDEV = 63;
   /** RegularExpression Id. */
-  int STDEV_POP = 64;
+  int STDEV_SAMP = 64;
   /** RegularExpression Id. */
-  int VARIANCE = 65;
+  int STDEV_POP = 65;
   /** RegularExpression Id. */
-  int VAR_SAMP = 66;
+  int VARIANCE = 66;
   /** RegularExpression Id. */
-  int VAR_POP = 67;
+  int VAR_SAMP = 67;
   /** RegularExpression Id. */
-  int SAMPLE = 68;
+  int VAR_POP = 68;
   /** RegularExpression Id. */
-  int GROUP_CONCAT = 69;
+  int SAMPLE = 69;
   /** RegularExpression Id. */
-  int FILTER = 70;
+  int GROUP_CONCAT = 70;
   /** RegularExpression Id. */
-  int BOUND = 71;
+  int FILTER = 71;
   /** RegularExpression Id. */
-  int COALESCE = 72;
+  int BOUND = 72;
   /** RegularExpression Id. */
-  int IN = 73;
+  int COALESCE = 73;
   /** RegularExpression Id. */
-  int IF = 74;
+  int IN = 74;
   /** RegularExpression Id. */
-  int BNODE = 75;
+  int IF = 75;
   /** RegularExpression Id. */
-  int IRI = 76;
+  int BNODE = 76;
   /** RegularExpression Id. */
-  int URI = 77;
+  int IRI = 77;
   /** RegularExpression Id. */
-  int CAST = 78;
+  int URI = 78;
   /** RegularExpression Id. */
-  int CALL = 79;
+  int CAST = 79;
   /** RegularExpression Id. */
-  int MULTI = 80;
+  int CALL = 80;
   /** RegularExpression Id. */
-  int SHORTEST = 81;
+  int MULTI = 81;
   /** RegularExpression Id. */
-  int STR = 82;
+  int SHORTEST = 82;
   /** RegularExpression Id. */
-  int STRLANG = 83;
+  int STR = 83;
   /** RegularExpression Id. */
-  int STRDT = 84;
+  int STRLANG = 84;
   /** RegularExpression Id. */
-  int DTYPE = 85;
+  int STRDT = 85;
   /** RegularExpression Id. */
-  int LANG = 86;
+  int DTYPE = 86;
   /** RegularExpression Id. */
-  int LANGMATCHES = 87;
+  int LANG = 87;
   /** RegularExpression Id. */
-  int IS_URI = 88;
+  int LANGMATCHES = 88;
   /** RegularExpression Id. */
-  int IS_IRI = 89;
+  int IS_URI = 89;
   /** RegularExpression Id. */
-  int IS_BLANK = 90;
+  int IS_IRI = 90;
   /** RegularExpression Id. */
-  int IS_LITERAL = 91;
+  int IS_BLANK = 91;
   /** RegularExpression Id. */
-  int IS_NUMERIC = 92;
+  int IS_LITERAL = 92;
   /** RegularExpression Id. */
-  int REGEX = 93;
+  int IS_NUMERIC = 93;
   /** RegularExpression Id. */
-  int SAME_TERM = 94;
+  int REGEX = 94;
   /** RegularExpression Id. */
-  int RAND = 95;
+  int SAME_TERM = 95;
   /** RegularExpression Id. */
-  int ABS = 96;
+  int RAND = 96;
   /** RegularExpression Id. */
-  int CEIL = 97;
+  int ABS = 97;
   /** RegularExpression Id. */
-  int FLOOR = 98;
+  int CEIL = 98;
   /** RegularExpression Id. */
-  int ROUND = 99;
+  int FLOOR = 99;
   /** RegularExpression Id. */
-  int CONCAT = 100;
+  int ROUND = 100;
   /** RegularExpression Id. */
-  int SUBSTR = 101;
+  int CONCAT = 101;
   /** RegularExpression Id. */
-  int STRLEN = 102;
+  int SUBSTR = 102;
   /** RegularExpression Id. */
-  int REPLACE = 103;
+  int STRLEN = 103;
   /** RegularExpression Id. */
-  int UCASE = 104;
+  int REPLACE = 104;
   /** RegularExpression Id. */
-  int LCASE = 105;
+  int UCASE = 105;
   /** RegularExpression Id. */
-  int ENCODE_FOR_URI = 106;
+  int LCASE = 106;
   /** RegularExpression Id. */
-  int CONTAINS = 107;
+  int ENCODE_FOR_URI = 107;
   /** RegularExpression Id. */
-  int STRSTARTS = 108;
+  int CONTAINS = 108;
   /** RegularExpression Id. */
-  int STRENDS = 109;
+  int STRSTARTS = 109;
   /** RegularExpression Id. */
-  int STRBEFORE = 110;
+  int STRENDS = 110;
   /** RegularExpression Id. */
-  int STRAFTER = 111;
+  int STRBEFORE = 111;
   /** RegularExpression Id. */
-  int YEAR = 112;
+  int STRAFTER = 112;
   /** RegularExpression Id. */
-  int MONTH = 113;
+  int YEAR = 113;
   /** RegularExpression Id. */
-  int DAY = 114;
+  int MONTH = 114;
   /** RegularExpression Id. */
-  int HOURS = 115;
+  int DAY = 115;
   /** RegularExpression Id. */
-  int MINUTES = 116;
+  int HOURS = 116;
   /** RegularExpression Id. */
-  int SECONDS = 117;
+  int MINUTES = 117;
   /** RegularExpression Id. */
-  int TIMEZONE = 118;
+  int SECONDS = 118;
   /** RegularExpression Id. */
-  int TZ = 119;
+  int TIMEZONE = 119;
   /** RegularExpression Id. */
-  int NOW = 120;
+  int TZ = 120;
   /** RegularExpression Id. */
-  int UUID = 121;
+  int NOW = 121;
   /** RegularExpression Id. */
-  int STRUUID = 122;
+  int UUID = 122;
   /** RegularExpression Id. */
-  int VERSION = 123;
+  int STRUUID = 123;
   /** RegularExpression Id. */
-  int MD5 = 124;
+  int VERSION = 124;
   /** RegularExpression Id. */
-  int SHA1 = 125;
+  int MD5 = 125;
   /** RegularExpression Id. */
-  int SHA224 = 126;
+  int SHA1 = 126;
   /** RegularExpression Id. */
-  int SHA256 = 127;
+  int SHA224 = 127;
   /** RegularExpression Id. */
-  int SHA384 = 128;
+  int SHA256 = 128;
   /** RegularExpression Id. */
-  int SHA512 = 129;
+  int SHA384 = 129;
   /** RegularExpression Id. */
-  int TRUE = 130;
+  int SHA512 = 130;
   /** RegularExpression Id. */
-  int FALSE = 131;
+  int TRUE = 131;
   /** RegularExpression Id. */
-  int DATA = 132;
+  int FALSE = 132;
+  /** RegularExpression Id. */
+  int DATA = 133;
   /** RegularExpression Id. */
-  int INSERT = 133;
+  int INSERT = 134;
   /** RegularExpression Id. */
-  int DELETE = 134;
+  int DELETE = 135;
   /** RegularExpression Id. */
-  int INSERT_DATA = 135;
+  int INSERT_DATA = 136;
   /** RegularExpression Id. */
-  int DELETE_DATA = 136;
+  int DELETE_DATA = 137;
   /** RegularExpression Id. */
-  int DELETE_WHERE = 137;
+  int DELETE_WHERE = 138;
   /** RegularExpression Id. */
-  int LOAD = 138;
+  int LOAD = 139;
   /** RegularExpression Id. */
-  int CLEAR = 139;
+  int CLEAR = 140;
   /** RegularExpression Id. */
-  int CREATE = 140;
+  int CREATE = 141;
   /** RegularExpression Id. */
-  int ADD = 141;
+  int ADD = 142;
   /** RegularExpression Id. */
-  int MOVE = 142;
+  int MOVE = 143;
   /** RegularExpression Id. */
-  int COPY = 143;
+  int COPY = 144;
   /** RegularExpression Id. */
-  int META = 144;
+  int META = 145;
   /** RegularExpression Id. */
-  int SILENT = 145;
+  int SILENT = 146;
   /** RegularExpression Id. */
-  int DROP = 146;
+  int DROP = 147;
   /** RegularExpression Id. */
-  int INTO = 147;
+  int INTO = 148;
   /** RegularExpression Id. */
-  int TO = 148;
+  int TO = 149;
   /** RegularExpression Id. */
-  int DFT = 149;
+  int DFT = 150;
   /** RegularExpression Id. */
-  int ALL = 150;
+  int ALL = 151;
   /** RegularExpression Id. */
-  int WITH = 151;
+  int WITH = 152;
   /** RegularExpression Id. */
-  int USING = 152;
+  int USING = 153;
   /** RegularExpression Id. */
-  int DIGITS = 153;
+  int DIGITS = 154;
   /** RegularExpression Id. */
-  int INTEGER = 154;
+  int INTEGER = 155;
   /** RegularExpression Id. */
-  int DECIMAL = 155;
+  int DECIMAL = 156;
   /** RegularExpression Id. */
-  int DOUBLE = 156;
+  int DOUBLE = 157;
   /** RegularExpression Id. */
-  int INTEGER_POSITIVE = 157;
+  int INTEGER_POSITIVE = 158;
   /** RegularExpression Id. */
-  int DECIMAL_POSITIVE = 158;
+  int DECIMAL_POSITIVE = 159;
   /** RegularExpression Id. */
-  int DOUBLE_POSITIVE = 159;
+  int DOUBLE_POSITIVE = 160;
   /** RegularExpression Id. */
-  int INTEGER_NEGATIVE = 160;
+  int INTEGER_NEGATIVE = 161;
   /** RegularExpression Id. */
-  int DECIMAL_NEGATIVE = 161;
+  int DECIMAL_NEGATIVE = 162;
   /** RegularExpression Id. */
-  int DOUBLE_NEGATIVE = 162;
+  int DOUBLE_NEGATIVE = 163;
   /** RegularExpression Id. */
-  int EXPONENT = 163;
+  int EXPONENT = 164;
   /** RegularExpression Id. */
-  int QUOTE_3D = 164;
+  int QUOTE_3D = 165;
   /** RegularExpression Id. */
-  int QUOTE_3S = 165;
+  int QUOTE_3S = 166;
   /** RegularExpression Id. */
-  int ECHAR = 166;
+  int ECHAR = 167;
   /** RegularExpression Id. */
-  int STRING_LITERAL1 = 167;
+  int STRING_LITERAL1 = 168;
   /** RegularExpression Id. */
-  int STRING_LITERAL2 = 168;
+  int STRING_LITERAL2 = 169;
   /** RegularExpression Id. */
-  int STRING_LITERAL_LONG1 = 169;
+  int STRING_LITERAL_LONG1 = 170;
   /** RegularExpression Id. */
-  int STRING_LITERAL_LONG2 = 170;
+  int STRING_LITERAL_LONG2 = 171;
   /** RegularExpression Id. */
-  int LPAREN = 171;
+  int LPAREN = 172;
   /** RegularExpression Id. */
-  int RPAREN = 172;
+  int RPAREN = 173;
   /** RegularExpression Id. */
-  int NIL = 173;
+  int NIL = 174;
   /** RegularExpression Id. */
-  int LBRACE = 174;
+  int LBRACE = 175;
   /** RegularExpression Id. */
-  int RBRACE = 175;
+  int RBRACE = 176;
   /** RegularExpression Id. */
-  int LBRACKET = 176;
+  int LBRACKET = 177;
   /** RegularExpression Id. */
-  int RBRACKET = 177;
+  int RBRACKET = 178;
   /** RegularExpression Id. */
-  int ANON = 178;
+  int ANON = 179;
   /** RegularExpression Id. */
-  int SEMICOLON = 179;
+  int SEMICOLON = 180;
   /** RegularExpression Id. */
-  int COMMA = 180;
+  int COMMA = 181;
   /** RegularExpression Id. */
-  int DOT = 181;
+  int DOT = 182;
   /** RegularExpression Id. */
-  int EQ = 182;
+  int EQ = 183;
   /** RegularExpression Id. */
-  int NE = 183;
+  int NE = 184;
   /** RegularExpression Id. */
-  int GT = 184;
+  int GT = 185;
   /** RegularExpression Id. */
-  int LT = 185;
+  int LT = 186;
   /** RegularExpression Id. */
-  int LE = 186;
+  int LE = 187;
   /** RegularExpression Id. */
-  int GE = 187;
+  int GE = 188;
   /** RegularExpression Id. */
-  int GT2 = 188;
+  int GT2 = 189;
   /** RegularExpression Id. */
-  int LT2 = 189;
+  int LT2 = 190;
   /** RegularExpression Id. */
-  int BANG = 190;
+  int BANG = 191;
   /** RegularExpression Id. */
-  int TILDE = 191;
+  int TILDE = 192;
   /** RegularExpression Id. */
-  int COLON = 192;
+  int COLON = 193;
   /** RegularExpression Id. */
-  int SC_OR = 193;
+  int SC_OR = 194;
   /** RegularExpression Id. */
-  int SC_AND = 194;
+  int SC_AND = 195;
   /** RegularExpression Id. */
-  int PLUS = 195;
+  int PLUS = 196;
   /** RegularExpression Id. */
-  int MINUS = 196;
+  int MINUS = 197;
   /** RegularExpression Id. */
-  int STAR = 197;
+  int STAR = 198;
   /** RegularExpression Id. */
-  int SLASH = 198;
+  int SLASH = 199;
   /** RegularExpression Id. */
-  int DATATYPE = 199;
+  int DATATYPE = 200;
   /** RegularExpression Id. */
-  int AT = 200;
+  int AT = 201;
   /** RegularExpression Id. */
-  int ASSIGN = 201;
+  int ASSIGN = 202;
   /** RegularExpression Id. */
-  int VBAR = 202;
+  int VBAR = 203;
   /** RegularExpression Id. */
-  int CARAT = 203;
+  int CARAT = 204;
   /** RegularExpression Id. */
-  int FPATH = 204;
+  int FPATH = 205;
   /** RegularExpression Id. */
-  int RPATH = 205;
+  int RPATH = 206;
   /** RegularExpression Id. */
-  int QMARK = 206;
+  int QMARK = 207;
   /** RegularExpression Id. */
-  int PN_CHARS_BASE = 207;
+  int PN_CHARS_BASE = 208;
   /** RegularExpression Id. */
-  int PN_CHARS_U = 208;
+  int PN_CHARS_U = 209;
   /** RegularExpression Id. */
-  int PN_CHARS = 209;
+  int PN_CHARS = 210;
   /** RegularExpression Id. */
-  int PN_PREFIX = 210;
+  int PN_PREFIX = 211;
   /** RegularExpression Id. */
-  int PN_LOCAL = 211;
+  int PN_LOCAL = 212;
   /** RegularExpression Id. */
-  int VARNAME = 212;
+  int VARNAME = 213;
   /** RegularExpression Id. */
-  int PN_LOCAL_ESC = 213;
+  int PN_LOCAL_ESC = 214;
   /** RegularExpression Id. */
-  int PLX = 214;
+  int PLX = 215;
   /** RegularExpression Id. */
-  int HEX = 215;
+  int HEX = 216;
   /** RegularExpression Id. */
-  int PERCENT = 216;
+  int PERCENT = 217;
   /** RegularExpression Id. */
-  int UNKNOWN = 217;
+  int UNKNOWN = 218;
 
   /** Lexical state. */
   int DEFAULT = 0;
@@ -488,6 +490,7 @@
     "\"bind\"",
     "\"service\"",
     "\"let\"",
+    "\"find\"",
     "\"exists\"",
     "\"not\"",
     "\"as\"",
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserTokenManager.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserTokenManager.java
index 17c29ab..a9fd774 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserTokenManager.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserTokenManager.java
@@ -45,164 +45,164 @@
          jjmatchedKind = 1;
          return jjMoveNfa_0(0, 0);
       case 33:
-         jjmatchedKind = 190;
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x80000000000000L, 0x0L);
+         jjmatchedKind = 191;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x100000000000000L, 0x0L);
       case 38:
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x4L);
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x8L);
       case 40:
-         jjmatchedKind = 171;
-         return jjMoveNfa_0(0, 0);
-      case 41:
          jjmatchedKind = 172;
          return jjMoveNfa_0(0, 0);
+      case 41:
+         jjmatchedKind = 173;
+         return jjMoveNfa_0(0, 0);
       case 42:
-         jjmatchedKind = 197;
-         return jjMoveNfa_0(0, 0);
-      case 43:
-         jjmatchedKind = 195;
-         return jjMoveNfa_0(0, 0);
-      case 44:
-         jjmatchedKind = 180;
-         return jjMoveNfa_0(0, 0);
-      case 45:
-         jjmatchedKind = 196;
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x1000L);
-      case 46:
-         jjmatchedKind = 181;
-         return jjMoveNfa_0(0, 0);
-      case 47:
          jjmatchedKind = 198;
          return jjMoveNfa_0(0, 0);
-      case 58:
-         jjmatchedKind = 192;
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x200L);
-      case 59:
-         jjmatchedKind = 179;
+      case 43:
+         jjmatchedKind = 196;
          return jjMoveNfa_0(0, 0);
-      case 60:
-         jjmatchedKind = 185;
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x2400000000000000L, 0x2000L);
-      case 61:
+      case 44:
+         jjmatchedKind = 181;
+         return jjMoveNfa_0(0, 0);
+      case 45:
+         jjmatchedKind = 197;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x2000L);
+      case 46:
          jjmatchedKind = 182;
          return jjMoveNfa_0(0, 0);
+      case 47:
+         jjmatchedKind = 199;
+         return jjMoveNfa_0(0, 0);
+      case 58:
+         jjmatchedKind = 193;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x400L);
+      case 59:
+         jjmatchedKind = 180;
+         return jjMoveNfa_0(0, 0);
+      case 60:
+         jjmatchedKind = 186;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x4800000000000000L, 0x4000L);
+      case 61:
+         jjmatchedKind = 183;
+         return jjMoveNfa_0(0, 0);
       case 62:
-         jjmatchedKind = 184;
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x1800000000000000L, 0x0L);
+         jjmatchedKind = 185;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x3000000000000000L, 0x0L);
       case 63:
-         jjmatchedKind = 206;
+         jjmatchedKind = 207;
          return jjMoveNfa_0(0, 0);
       case 64:
-         jjmatchedKind = 200;
+         jjmatchedKind = 201;
          return jjMoveNfa_0(0, 0);
       case 65:
-         return jjMoveStringLiteralDfa1_0(0x844010810000000L, 0x100000000L, 0x402000L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x1088010810000000L, 0x200000000L, 0x804000L, 0x0L);
       case 66:
-         return jjMoveStringLiteralDfa1_0(0x200100100000L, 0x880L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x200100100000L, 0x1100L, 0x0L, 0x0L);
       case 67:
-         return jjMoveStringLiteralDfa1_0(0x80000008000000L, 0x8120000c100L, 0x9800L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x100000008000000L, 0x102400018200L, 0x13000L, 0x0L);
       case 68:
-         return jjMoveStringLiteralDfa1_0(0x1004800000L, 0x4000000200000L, 0x240050L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x1004800000L, 0x8000000400000L, 0x4800a0L, 0x0L);
       case 69:
-         return jjMoveStringLiteralDfa1_0(0x1000000000000L, 0x40000000000L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x2000000000000L, 0x80000000000L, 0x0L, 0x0L);
       case 70:
-         return jjMoveStringLiteralDfa1_0(0x4000000000L, 0x400000040L, 0x8L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x1004000000000L, 0x800000080L, 0x10L, 0x0L);
       case 71:
-         return jjMoveStringLiteralDfa1_0(0x8020000000000L, 0x20L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x10020000000000L, 0x40L, 0x0L, 0x0L);
       case 72:
-         return jjMoveStringLiteralDfa1_0(0x10000000000000L, 0x8000000000000L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x20000000000000L, 0x10000000000000L, 0x0L, 0x0L);
       case 73:
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x1f001600L, 0x80020L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x3e002c00L, 0x100040L, 0x0L);
       case 74:
          return jjMoveStringLiteralDfa1_0(0x2000000L, 0x0L, 0x0L, 0x0L);
       case 76:
-         return jjMoveStringLiteralDfa1_0(0x800020000000L, 0x20000c00000L, 0x400L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x800020000000L, 0x40001800000L, 0x800L, 0x0L);
       case 77:
-         return jjMoveStringLiteralDfa1_0(0x3300100000000000L, 0x1012000000010000L, 0x14000L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x6600100000000000L, 0x2024000000020000L, 0x28000L, 0x0L);
       case 78:
-         return jjMoveStringLiteralDfa1_0(0x2002000000000L, 0x100000000000000L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x4002000000000L, 0x200000000000000L, 0x0L, 0x0L);
       case 79:
          return jjMoveStringLiteralDfa1_0(0x400c0000000L, 0x0L, 0x0L, 0x0L);
       case 80:
          return jjMoveStringLiteralDfa1_0(0x200000L, 0x0L, 0x0L, 0x0L);
       case 82:
-         return jjMoveStringLiteralDfa1_0(0x1000000L, 0x88a0000000L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x1000000L, 0x11140000000L, 0x0L, 0x0L);
       case 83:
-         return jjMoveStringLiteralDfa1_0(0xc420400000400000L, 0xe420f060401e0011L, 0x20003L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x8840400000400000L, 0xc841e0c0803c0023L, 0x40007L, 0x0L);
       case 84:
-         return jjMoveStringLiteralDfa1_0(0x0L, 0xc0000000000000L, 0x100004L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x180000000000000L, 0x200008L, 0x0L);
       case 85:
-         return jjMoveStringLiteralDfa1_0(0x80400000000L, 0x200010000002000L, 0x1000000L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x80400000000L, 0x400020000004000L, 0x2000000L, 0x0L);
       case 86:
-         return jjMoveStringLiteralDfa1_0(0x200000000L, 0x80000000000000eL, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x200000000L, 0x100000000000001cL, 0x0L, 0x0L);
       case 87:
-         return jjMoveStringLiteralDfa1_0(0x8000000000L, 0x0L, 0x800000L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x8000000000L, 0x0L, 0x1000000L, 0x0L);
       case 89:
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x1000000000000L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x2000000000000L, 0x0L, 0x0L);
       case 91:
-         jjmatchedKind = 176;
-         return jjMoveNfa_0(0, 0);
-      case 93:
          jjmatchedKind = 177;
          return jjMoveNfa_0(0, 0);
+      case 93:
+         jjmatchedKind = 178;
+         return jjMoveNfa_0(0, 0);
       case 94:
-         jjmatchedKind = 203;
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x80L);
+         jjmatchedKind = 204;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x100L);
       case 97:
          jjmatchedKind = 19;
-         return jjMoveStringLiteralDfa1_0(0x844010810000000L, 0x100000000L, 0x402000L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x1088010810000000L, 0x200000000L, 0x804000L, 0x0L);
       case 98:
-         return jjMoveStringLiteralDfa1_0(0x200100100000L, 0x880L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x200100100000L, 0x1100L, 0x0L, 0x0L);
       case 99:
-         return jjMoveStringLiteralDfa1_0(0x80000008000000L, 0x8120000c100L, 0x9800L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x100000008000000L, 0x102400018200L, 0x13000L, 0x0L);
       case 100:
-         return jjMoveStringLiteralDfa1_0(0x1004800000L, 0x4000000200000L, 0x240050L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x1004800000L, 0x8000000400000L, 0x4800a0L, 0x0L);
       case 101:
-         return jjMoveStringLiteralDfa1_0(0x1000000000000L, 0x40000000000L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x2000000000000L, 0x80000000000L, 0x0L, 0x0L);
       case 102:
-         return jjMoveStringLiteralDfa1_0(0x4000000000L, 0x400000040L, 0x8L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x1004000000000L, 0x800000080L, 0x10L, 0x0L);
       case 103:
-         return jjMoveStringLiteralDfa1_0(0x8020000000000L, 0x20L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x10020000000000L, 0x40L, 0x0L, 0x0L);
       case 104:
-         return jjMoveStringLiteralDfa1_0(0x10000000000000L, 0x8000000000000L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x20000000000000L, 0x10000000000000L, 0x0L, 0x0L);
       case 105:
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x1f001600L, 0x80020L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x3e002c00L, 0x100040L, 0x0L);
       case 106:
          return jjMoveStringLiteralDfa1_0(0x2000000L, 0x0L, 0x0L, 0x0L);
       case 108:
-         return jjMoveStringLiteralDfa1_0(0x800020000000L, 0x20000c00000L, 0x400L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x800020000000L, 0x40001800000L, 0x800L, 0x0L);
       case 109:
-         return jjMoveStringLiteralDfa1_0(0x3300100000000000L, 0x1012000000010000L, 0x14000L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x6600100000000000L, 0x2024000000020000L, 0x28000L, 0x0L);
       case 110:
-         return jjMoveStringLiteralDfa1_0(0x2002000000000L, 0x100000000000000L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x4002000000000L, 0x200000000000000L, 0x0L, 0x0L);
       case 111:
          return jjMoveStringLiteralDfa1_0(0x400c0000000L, 0x0L, 0x0L, 0x0L);
       case 112:
          return jjMoveStringLiteralDfa1_0(0x200000L, 0x0L, 0x0L, 0x0L);
       case 114:
-         return jjMoveStringLiteralDfa1_0(0x1000000L, 0x88a0000000L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x1000000L, 0x11140000000L, 0x0L, 0x0L);
       case 115:
-         return jjMoveStringLiteralDfa1_0(0xc420400000400000L, 0xe420f060401e0011L, 0x20003L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x8840400000400000L, 0xc841e0c0803c0023L, 0x40007L, 0x0L);
       case 116:
-         return jjMoveStringLiteralDfa1_0(0x0L, 0xc0000000000000L, 0x100004L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x180000000000000L, 0x200008L, 0x0L);
       case 117:
-         return jjMoveStringLiteralDfa1_0(0x80400000000L, 0x200010000002000L, 0x1000000L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x80400000000L, 0x400020000004000L, 0x2000000L, 0x0L);
       case 118:
-         return jjMoveStringLiteralDfa1_0(0x200000000L, 0x80000000000000eL, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x200000000L, 0x100000000000001cL, 0x0L, 0x0L);
       case 119:
-         return jjMoveStringLiteralDfa1_0(0x8000000000L, 0x0L, 0x800000L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x8000000000L, 0x0L, 0x1000000L, 0x0L);
       case 121:
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x1000000000000L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x2000000000000L, 0x0L, 0x0L);
       case 123:
-         jjmatchedKind = 174;
-         return jjMoveNfa_0(0, 0);
-      case 124:
-         jjmatchedKind = 202;
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x2L);
-      case 125:
          jjmatchedKind = 175;
          return jjMoveNfa_0(0, 0);
+      case 124:
+         jjmatchedKind = 203;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x4L);
+      case 125:
+         jjmatchedKind = 176;
+         return jjMoveNfa_0(0, 0);
       case 126:
-         jjmatchedKind = 191;
+         jjmatchedKind = 192;
          return jjMoveNfa_0(0, 0);
       case 65279:
          jjmatchedKind = 9;
@@ -219,35 +219,30 @@
    switch(curChar)
    {
       case 38:
-         if ((active3 & 0x4L) != 0L)
+         if ((active3 & 0x8L) != 0L)
          {
-            jjmatchedKind = 194;
+            jjmatchedKind = 195;
             jjmatchedPos = 1;
          }
          break;
       case 45:
-         if ((active3 & 0x2000L) != 0L)
+         if ((active3 & 0x4000L) != 0L)
          {
-            jjmatchedKind = 205;
+            jjmatchedKind = 206;
             jjmatchedPos = 1;
          }
          break;
       case 60:
-         if ((active2 & 0x2000000000000000L) != 0L)
+         if ((active2 & 0x4000000000000000L) != 0L)
          {
-            jjmatchedKind = 189;
+            jjmatchedKind = 190;
             jjmatchedPos = 1;
          }
          break;
       case 61:
-         if ((active2 & 0x80000000000000L) != 0L)
+         if ((active2 & 0x100000000000000L) != 0L)
          {
-            jjmatchedKind = 183;
-            jjmatchedPos = 1;
-         }
-         else if ((active2 & 0x400000000000000L) != 0L)
-         {
-            jjmatchedKind = 186;
+            jjmatchedKind = 184;
             jjmatchedPos = 1;
          }
          else if ((active2 & 0x800000000000000L) != 0L)
@@ -255,82 +250,87 @@
             jjmatchedKind = 187;
             jjmatchedPos = 1;
          }
-         else if ((active3 & 0x200L) != 0L)
-         {
-            jjmatchedKind = 201;
-            jjmatchedPos = 1;
-         }
-         break;
-      case 62:
-         if ((active2 & 0x1000000000000000L) != 0L)
+         else if ((active2 & 0x1000000000000000L) != 0L)
          {
             jjmatchedKind = 188;
             jjmatchedPos = 1;
          }
-         else if ((active3 & 0x1000L) != 0L)
+         else if ((active3 & 0x400L) != 0L)
          {
-            jjmatchedKind = 204;
+            jjmatchedKind = 202;
+            jjmatchedPos = 1;
+         }
+         break;
+      case 62:
+         if ((active2 & 0x2000000000000000L) != 0L)
+         {
+            jjmatchedKind = 189;
+            jjmatchedPos = 1;
+         }
+         else if ((active3 & 0x2000L) != 0L)
+         {
+            jjmatchedKind = 205;
             jjmatchedPos = 1;
          }
          break;
       case 65:
-         return jjMoveStringLiteralDfa2_0(active0, 0x210002200100000L, active1, 0x40000c0e0c01eL, active2, 0x18L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x420002200100000L, active1, 0x8000181c1803cL, active2, 0x30L, active3, 0L);
       case 66:
-         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x100000000L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x200000000L, active2, 0L, active3, 0L);
       case 67:
-         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x30000000000L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x60000000000L, active2, 0L, active3, 0L);
       case 68:
-         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x1000000000000000L, active2, 0x2000L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x2000000000000000L, active2, 0x4000L, active3, 0L);
       case 69:
-         return jjMoveStringLiteralDfa2_0(active0, 0x1020c01005400000L, active1, 0x821008220000000L, active2, 0x210040L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x2040c01005400000L, active1, 0x1042010440000000L, active2, 0x420080L, active3, 0L);
       case 70:
+         if ((active1 & 0x800L) != 0L)
+         {
+            jjmatchedKind = 75;
+            jjmatchedPos = 1;
+         }
+         return jjMoveStringLiteralDfa2_0(active0, 0x40000000L, active1, 0L, active2, 0L, active3, 0L);
+      case 71:
+         return jjMoveStringLiteralDfa2_0(active0, 0x80000000000000L, active1, 0L, active2, 0L, active3, 0L);
+      case 72:
+         return jjMoveStringLiteralDfa2_0(active0, 0x8000000000L, active1, 0xc000000000040000L, active2, 0x7L, active3, 0L);
+      case 73:
+         return jjMoveStringLiteralDfa2_0(active0, 0x201300020800000L, active1, 0xa0000000000080L, active2, 0x1040000L, active3, 0L);
+      case 76:
+         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x800000000L, active2, 0x801000L, active3, 0L);
+      case 78:
          if ((active1 & 0x400L) != 0L)
          {
             jjmatchedKind = 74;
             jjmatchedPos = 1;
          }
-         return jjMoveStringLiteralDfa2_0(active0, 0x40000000L, active1, 0L, active2, 0L, active3, 0L);
-      case 71:
-         return jjMoveStringLiteralDfa2_0(active0, 0x40000000000000L, active1, 0L, active2, 0L, active3, 0L);
-      case 72:
-         return jjMoveStringLiteralDfa2_0(active0, 0x8000000000L, active1, 0xe000000000020000L, active2, 0x3L, active3, 0L);
-      case 73:
-         return jjMoveStringLiteralDfa2_0(active0, 0x100300020800000L, active1, 0x50000000000040L, active2, 0x820000L, active3, 0L);
-      case 76:
-         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x400000000L, active2, 0x400800L, active3, 0L);
-      case 78:
-         if ((active1 & 0x200L) != 0L)
-         {
-            jjmatchedKind = 73;
-            jjmatchedPos = 1;
-         }
-         return jjMoveStringLiteralDfa2_0(active0, 0x90400000000L, active1, 0x40000000800L, active2, 0x80020L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x90400000000L, active1, 0x80000001000L, active2, 0x100040L, active3, 0L);
       case 79:
-         if ((active2 & 0x100000L) != 0L)
+         if ((active2 & 0x200000L) != 0L)
          {
-            jjmatchedKind = 148;
+            jjmatchedKind = 149;
             jjmatchedPos = 1;
          }
-         return jjMoveStringLiteralDfa2_0(active0, 0x2082000008000000L, active1, 0x10a081800000180L, active2, 0xc400L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x4104000008000000L, active1, 0x214103000000300L, active2, 0x18800L, active3, 0L);
       case 80:
          return jjMoveStringLiteralDfa2_0(active0, 0x40000000000L, active1, 0L, active2, 0L, active3, 0L);
       case 82:
-         return jjMoveStringLiteralDfa2_0(active0, 0x8024080200000L, active1, 0x3020L, active2, 0x41004L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x10024080200000L, active1, 0x6040L, active2, 0x82008L, active3, 0L);
       case 83:
-         if ((active0 & 0x4000000000000L) != 0L)
+         if ((active0 & 0x8000000000000L) != 0L)
          {
-            jjmatchedKind = 50;
+            jjmatchedKind = 51;
             jjmatchedPos = 1;
          }
-         return jjMoveStringLiteralDfa2_0(active0, 0x812000000L, active1, 0x1f000000L, active2, 0x1000000L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x812000000L, active1, 0x3e000000L, active2, 0x2000000L, active3, 0L);
       case 84:
-         return jjMoveStringLiteralDfa2_0(active0, 0xc000000000000000L, active1, 0x400f040001c0001L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x8000000000000000L, active1, 0x801e08000380003L, active2, 0L, active3, 0L);
       case 85:
-         return jjMoveStringLiteralDfa2_0(active0, 0x400000000000000L, active1, 0x200002000010000L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x800000000000000L, active1, 0x400004000020000L, active2, 0L, active3, 0L);
       case 86:
-         return jjMoveStringLiteralDfa2_0(active0, 0x800000000000000L, active1, 0L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x1000000000000000L, active1, 0L, active2, 0L, active3, 0L);
       case 88:
-         return jjMoveStringLiteralDfa2_0(active0, 0x1000000000000L, active1, 0L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x2000000000000L, active1, 0L, active2, 0L, active3, 0L);
       case 89:
          if ((active0 & 0x100000000L) != 0L)
          {
@@ -339,77 +339,77 @@
          }
          break;
       case 90:
-         if ((active1 & 0x80000000000000L) != 0L)
+         if ((active1 & 0x100000000000000L) != 0L)
          {
-            jjmatchedKind = 119;
+            jjmatchedKind = 120;
             jjmatchedPos = 1;
          }
          break;
       case 94:
-         if ((active3 & 0x80L) != 0L)
+         if ((active3 & 0x100L) != 0L)
          {
-            jjmatchedKind = 199;
+            jjmatchedKind = 200;
             jjmatchedPos = 1;
          }
          break;
       case 97:
-         return jjMoveStringLiteralDfa2_0(active0, 0x210002200100000L, active1, 0x40000c0e0c01eL, active2, 0x18L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x420002200100000L, active1, 0x8000181c1803cL, active2, 0x30L, active3, 0L);
       case 98:
-         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x100000000L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x200000000L, active2, 0L, active3, 0L);
       case 99:
-         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x30000000000L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x60000000000L, active2, 0L, active3, 0L);
       case 100:
-         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x1000000000000000L, active2, 0x2000L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x2000000000000000L, active2, 0x4000L, active3, 0L);
       case 101:
-         return jjMoveStringLiteralDfa2_0(active0, 0x1020c01005400000L, active1, 0x821008220000000L, active2, 0x210040L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x2040c01005400000L, active1, 0x1042010440000000L, active2, 0x420080L, active3, 0L);
       case 102:
+         if ((active1 & 0x800L) != 0L)
+         {
+            jjmatchedKind = 75;
+            jjmatchedPos = 1;
+         }
+         return jjMoveStringLiteralDfa2_0(active0, 0x40000000L, active1, 0L, active2, 0L, active3, 0L);
+      case 103:
+         return jjMoveStringLiteralDfa2_0(active0, 0x80000000000000L, active1, 0L, active2, 0L, active3, 0L);
+      case 104:
+         return jjMoveStringLiteralDfa2_0(active0, 0x8000000000L, active1, 0xc000000000040000L, active2, 0x7L, active3, 0L);
+      case 105:
+         return jjMoveStringLiteralDfa2_0(active0, 0x201300020800000L, active1, 0xa0000000000080L, active2, 0x1040000L, active3, 0L);
+      case 108:
+         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x800000000L, active2, 0x801000L, active3, 0L);
+      case 110:
          if ((active1 & 0x400L) != 0L)
          {
             jjmatchedKind = 74;
             jjmatchedPos = 1;
          }
-         return jjMoveStringLiteralDfa2_0(active0, 0x40000000L, active1, 0L, active2, 0L, active3, 0L);
-      case 103:
-         return jjMoveStringLiteralDfa2_0(active0, 0x40000000000000L, active1, 0L, active2, 0L, active3, 0L);
-      case 104:
-         return jjMoveStringLiteralDfa2_0(active0, 0x8000000000L, active1, 0xe000000000020000L, active2, 0x3L, active3, 0L);
-      case 105:
-         return jjMoveStringLiteralDfa2_0(active0, 0x100300020800000L, active1, 0x50000000000040L, active2, 0x820000L, active3, 0L);
-      case 108:
-         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x400000000L, active2, 0x400800L, active3, 0L);
-      case 110:
-         if ((active1 & 0x200L) != 0L)
-         {
-            jjmatchedKind = 73;
-            jjmatchedPos = 1;
-         }
-         return jjMoveStringLiteralDfa2_0(active0, 0x90400000000L, active1, 0x40000000800L, active2, 0x80020L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x90400000000L, active1, 0x80000001000L, active2, 0x100040L, active3, 0L);
       case 111:
-         if ((active2 & 0x100000L) != 0L)
+         if ((active2 & 0x200000L) != 0L)
          {
-            jjmatchedKind = 148;
+            jjmatchedKind = 149;
             jjmatchedPos = 1;
          }
-         return jjMoveStringLiteralDfa2_0(active0, 0x2082000008000000L, active1, 0x10a081800000180L, active2, 0xc400L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x4104000008000000L, active1, 0x214103000000300L, active2, 0x18800L, active3, 0L);
       case 112:
          return jjMoveStringLiteralDfa2_0(active0, 0x40000000000L, active1, 0L, active2, 0L, active3, 0L);
       case 114:
-         return jjMoveStringLiteralDfa2_0(active0, 0x8024080200000L, active1, 0x3020L, active2, 0x41004L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x10024080200000L, active1, 0x6040L, active2, 0x82008L, active3, 0L);
       case 115:
-         if ((active0 & 0x4000000000000L) != 0L)
+         if ((active0 & 0x8000000000000L) != 0L)
          {
-            jjmatchedKind = 50;
+            jjmatchedKind = 51;
             jjmatchedPos = 1;
          }
-         return jjMoveStringLiteralDfa2_0(active0, 0x812000000L, active1, 0x1f000000L, active2, 0x1000000L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x812000000L, active1, 0x3e000000L, active2, 0x2000000L, active3, 0L);
       case 116:
-         return jjMoveStringLiteralDfa2_0(active0, 0xc000000000000000L, active1, 0x400f040001c0001L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x8000000000000000L, active1, 0x801e08000380003L, active2, 0L, active3, 0L);
       case 117:
-         return jjMoveStringLiteralDfa2_0(active0, 0x400000000000000L, active1, 0x200002000010000L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x800000000000000L, active1, 0x400004000020000L, active2, 0L, active3, 0L);
       case 118:
-         return jjMoveStringLiteralDfa2_0(active0, 0x800000000000000L, active1, 0L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x1000000000000000L, active1, 0L, active2, 0L, active3, 0L);
       case 120:
-         return jjMoveStringLiteralDfa2_0(active0, 0x1000000000000L, active1, 0L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x2000000000000L, active1, 0L, active2, 0L, active3, 0L);
       case 121:
          if ((active0 & 0x100000000L) != 0L)
          {
@@ -418,16 +418,16 @@
          }
          break;
       case 122:
-         if ((active1 & 0x80000000000000L) != 0L)
+         if ((active1 & 0x100000000000000L) != 0L)
          {
-            jjmatchedKind = 119;
+            jjmatchedKind = 120;
             jjmatchedPos = 1;
          }
          break;
       case 124:
-         if ((active3 & 0x2L) != 0L)
+         if ((active3 & 0x4L) != 0L)
          {
-            jjmatchedKind = 193;
+            jjmatchedKind = 194;
             jjmatchedPos = 1;
          }
          break;
@@ -446,63 +446,63 @@
    switch(curChar)
    {
       case 53:
-         if ((active1 & 0x1000000000000000L) != 0L)
+         if ((active1 & 0x2000000000000000L) != 0L)
          {
-            jjmatchedKind = 124;
+            jjmatchedKind = 125;
             jjmatchedPos = 2;
          }
          break;
       case 65:
-         return jjMoveStringLiteralDfa3_0(active0, 0x20000000000L, active1, 0xe001030000000100L, active2, 0x403L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x20000000000L, active1, 0xc002060000000200L, active2, 0x807L);
       case 66:
-         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x2004000000L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x4008000000L, active2, 0L);
       case 67:
          if ((active0 & 0x800000000L) != 0L)
          {
             jjmatchedKind = 35;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x20040000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x40080000000000L, active2, 0L);
       case 68:
          if ((active0 & 0x10000000000L) != 0L)
          {
             jjmatchedKind = 40;
             jjmatchedPos = 2;
          }
-         else if ((active2 & 0x2000L) != 0L)
+         else if ((active2 & 0x4000L) != 0L)
          {
-            jjmatchedKind = 141;
+            jjmatchedKind = 142;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0xf000000481000000L, active1, 0x1L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0xe000000481000000L, active1, 0x3L, active2, 0L);
       case 69:
-         return jjMoveStringLiteralDfa3_0(active0, 0x8000200000L, active1, 0L, active2, 0x1800L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x8000200000L, active1, 0L, active2, 0x3000L);
       case 70:
-         return jjMoveStringLiteralDfa3_0(active0, 0x40000000L, active1, 0L, active2, 0x200000L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x40000000L, active1, 0L, active2, 0x400000L);
       case 71:
-         if ((active0 & 0x40000000000000L) != 0L)
+         if ((active0 & 0x80000000000000L) != 0L)
          {
-            jjmatchedKind = 54;
+            jjmatchedKind = 55;
             jjmatchedPos = 2;
          }
-         else if ((active0 & 0x800000000000000L) != 0L)
+         else if ((active0 & 0x1000000000000000L) != 0L)
          {
-            jjmatchedKind = 59;
+            jjmatchedKind = 60;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x20000000L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x40000000L, active2, 0L);
       case 73:
-         if ((active1 & 0x1000L) != 0L)
-         {
-            jjmatchedKind = 76;
-            jjmatchedPos = 2;
-         }
-         else if ((active1 & 0x2000L) != 0L)
+         if ((active1 & 0x2000L) != 0L)
          {
             jjmatchedKind = 77;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x1080000000000L, active1, 0x200000202000000L, active2, 0x1000000L);
+         else if ((active1 & 0x4000L) != 0L)
+         {
+            jjmatchedKind = 78;
+            jjmatchedPos = 2;
+         }
+         return jjMoveStringLiteralDfa3_0(active0, 0x2080000000000L, active1, 0x400000404000000L, active2, 0x2000000L);
       case 75:
          if ((active0 & 0x10000000L) != 0L)
          {
@@ -511,132 +511,132 @@
          }
          break;
       case 76:
-         if ((active2 & 0x400000L) != 0L)
+         if ((active2 & 0x800000L) != 0L)
          {
-            jjmatchedKind = 150;
+            jjmatchedKind = 151;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x200400000L, active1, 0x8018040L, active2, 0x20048L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x200400000L, active1, 0x10030080L, active2, 0x40090L);
       case 77:
-         if ((active0 & 0x400000000000000L) != 0L)
+         if ((active0 & 0x800000000000000L) != 0L)
          {
-            jjmatchedKind = 58;
+            jjmatchedKind = 59;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x2020000000L, active1, 0x40000040000010L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x2020000000L, active1, 0x80000080000020L, active2, 0L);
       case 78:
-         if ((active0 & 0x100000000000000L) != 0L)
+         if ((active0 & 0x200000000000000L) != 0L)
          {
-            jjmatchedKind = 56;
+            jjmatchedKind = 57;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x300008000000L, active1, 0x12081090c00000L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x1300008000000L, active1, 0x24102121800000L, active2, 0L);
       case 79:
-         return jjMoveStringLiteralDfa3_0(active0, 0x8004002000000L, active1, 0x400020820L, active2, 0x40000L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x10004002000000L, active1, 0x800041040L, active2, 0x80000L);
       case 80:
-         return jjMoveStringLiteralDfa3_0(active0, 0x20000000000000L, active1, 0x8000000000L, active2, 0x8000L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x40000000000000L, active1, 0x10000000000L, active2, 0x10000L);
       case 82:
-         if ((active1 & 0x40000L) != 0L)
+         if ((active1 & 0x80000L) != 0L)
          {
-            jjmatchedKind = 82;
+            jjmatchedKind = 83;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x400000000000L, active1, 0xc00f0400018000eL, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x400000000000L, active1, 0x1801e0800030001cL, active2, 0L);
       case 83:
-         if ((active1 & 0x100000000L) != 0L)
+         if ((active1 & 0x200000000L) != 0L)
          {
-            jjmatchedKind = 96;
+            jjmatchedKind = 97;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x1004900000L, active1, 0x4000L, active2, 0x20L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x1004900000L, active1, 0x8000L, active2, 0x40L);
       case 84:
          if ((active0 & 0x800000000000L) != 0L)
          {
             jjmatchedKind = 47;
             jjmatchedPos = 2;
          }
-         else if ((active0 & 0x2000000000000L) != 0L)
+         else if ((active0 & 0x4000000000000L) != 0L)
          {
-            jjmatchedKind = 49;
+            jjmatchedKind = 50;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x40000000000L, active1, 0x200000L, active2, 0x890010L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x40000000000L, active1, 0x400000L, active2, 0x1120020L);
       case 85:
-         return jjMoveStringLiteralDfa3_0(active0, 0x80000000000000L, active1, 0x8000801000080L, active2, 0x4L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x100000000000000L, active1, 0x10001002000100L, active2, 0x8L);
       case 86:
-         return jjMoveStringLiteralDfa3_0(active0, 0x10000000000000L, active1, 0L, active2, 0x4000L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x20000000000000L, active1, 0L, active2, 0x8000L);
       case 87:
-         if ((active1 & 0x100000000000000L) != 0L)
+         if ((active1 & 0x200000000000000L) != 0L)
          {
-            jjmatchedKind = 120;
+            jjmatchedKind = 121;
             jjmatchedPos = 2;
          }
          break;
       case 88:
-         if ((active0 & 0x200000000000000L) != 0L)
+         if ((active0 & 0x400000000000000L) != 0L)
          {
-            jjmatchedKind = 57;
+            jjmatchedKind = 58;
             jjmatchedPos = 2;
          }
          break;
       case 89:
-         if ((active1 & 0x4000000000000L) != 0L)
+         if ((active1 & 0x8000000000000L) != 0L)
          {
-            jjmatchedKind = 114;
+            jjmatchedKind = 115;
             jjmatchedPos = 2;
          }
          break;
       case 97:
-         return jjMoveStringLiteralDfa3_0(active0, 0x20000000000L, active1, 0xe001030000000100L, active2, 0x403L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x20000000000L, active1, 0xc002060000000200L, active2, 0x807L);
       case 98:
-         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x2004000000L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x4008000000L, active2, 0L);
       case 99:
          if ((active0 & 0x800000000L) != 0L)
          {
             jjmatchedKind = 35;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x20040000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x40080000000000L, active2, 0L);
       case 100:
          if ((active0 & 0x10000000000L) != 0L)
          {
             jjmatchedKind = 40;
             jjmatchedPos = 2;
          }
-         else if ((active2 & 0x2000L) != 0L)
+         else if ((active2 & 0x4000L) != 0L)
          {
-            jjmatchedKind = 141;
+            jjmatchedKind = 142;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0xf000000481000000L, active1, 0x1L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0xe000000481000000L, active1, 0x3L, active2, 0L);
       case 101:
-         return jjMoveStringLiteralDfa3_0(active0, 0x8000200000L, active1, 0L, active2, 0x1800L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x8000200000L, active1, 0L, active2, 0x3000L);
       case 102:
-         return jjMoveStringLiteralDfa3_0(active0, 0x40000000L, active1, 0L, active2, 0x200000L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x40000000L, active1, 0L, active2, 0x400000L);
       case 103:
-         if ((active0 & 0x40000000000000L) != 0L)
+         if ((active0 & 0x80000000000000L) != 0L)
          {
-            jjmatchedKind = 54;
+            jjmatchedKind = 55;
             jjmatchedPos = 2;
          }
-         else if ((active0 & 0x800000000000000L) != 0L)
+         else if ((active0 & 0x1000000000000000L) != 0L)
          {
-            jjmatchedKind = 59;
+            jjmatchedKind = 60;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x20000000L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x40000000L, active2, 0L);
       case 105:
-         if ((active1 & 0x1000L) != 0L)
-         {
-            jjmatchedKind = 76;
-            jjmatchedPos = 2;
-         }
-         else if ((active1 & 0x2000L) != 0L)
+         if ((active1 & 0x2000L) != 0L)
          {
             jjmatchedKind = 77;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x1080000000000L, active1, 0x200000202000000L, active2, 0x1000000L);
+         else if ((active1 & 0x4000L) != 0L)
+         {
+            jjmatchedKind = 78;
+            jjmatchedPos = 2;
+         }
+         return jjMoveStringLiteralDfa3_0(active0, 0x2080000000000L, active1, 0x400000404000000L, active2, 0x2000000L);
       case 107:
          if ((active0 & 0x10000000L) != 0L)
          {
@@ -645,78 +645,78 @@
          }
          break;
       case 108:
-         if ((active2 & 0x400000L) != 0L)
+         if ((active2 & 0x800000L) != 0L)
          {
-            jjmatchedKind = 150;
+            jjmatchedKind = 151;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x200400000L, active1, 0x8018040L, active2, 0x20048L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x200400000L, active1, 0x10030080L, active2, 0x40090L);
       case 109:
-         if ((active0 & 0x400000000000000L) != 0L)
+         if ((active0 & 0x800000000000000L) != 0L)
          {
-            jjmatchedKind = 58;
+            jjmatchedKind = 59;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x2020000000L, active1, 0x40000040000010L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x2020000000L, active1, 0x80000080000020L, active2, 0L);
       case 110:
-         if ((active0 & 0x100000000000000L) != 0L)
+         if ((active0 & 0x200000000000000L) != 0L)
          {
-            jjmatchedKind = 56;
+            jjmatchedKind = 57;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x300008000000L, active1, 0x12081090c00000L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x1300008000000L, active1, 0x24102121800000L, active2, 0L);
       case 111:
-         return jjMoveStringLiteralDfa3_0(active0, 0x8004002000000L, active1, 0x400020820L, active2, 0x40000L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x10004002000000L, active1, 0x800041040L, active2, 0x80000L);
       case 112:
-         return jjMoveStringLiteralDfa3_0(active0, 0x20000000000000L, active1, 0x8000000000L, active2, 0x8000L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x40000000000000L, active1, 0x10000000000L, active2, 0x10000L);
       case 114:
-         if ((active1 & 0x40000L) != 0L)
+         if ((active1 & 0x80000L) != 0L)
          {
-            jjmatchedKind = 82;
+            jjmatchedKind = 83;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x400000000000L, active1, 0xc00f0400018000eL, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x400000000000L, active1, 0x1801e0800030001cL, active2, 0L);
       case 115:
-         if ((active1 & 0x100000000L) != 0L)
+         if ((active1 & 0x200000000L) != 0L)
          {
-            jjmatchedKind = 96;
+            jjmatchedKind = 97;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x1004900000L, active1, 0x4000L, active2, 0x20L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x1004900000L, active1, 0x8000L, active2, 0x40L);
       case 116:
          if ((active0 & 0x800000000000L) != 0L)
          {
             jjmatchedKind = 47;
             jjmatchedPos = 2;
          }
-         else if ((active0 & 0x2000000000000L) != 0L)
+         else if ((active0 & 0x4000000000000L) != 0L)
          {
-            jjmatchedKind = 49;
+            jjmatchedKind = 50;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x40000000000L, active1, 0x200000L, active2, 0x890010L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x40000000000L, active1, 0x400000L, active2, 0x1120020L);
       case 117:
-         return jjMoveStringLiteralDfa3_0(active0, 0x80000000000000L, active1, 0x8000801000080L, active2, 0x4L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x100000000000000L, active1, 0x10001002000100L, active2, 0x8L);
       case 118:
-         return jjMoveStringLiteralDfa3_0(active0, 0x10000000000000L, active1, 0L, active2, 0x4000L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x20000000000000L, active1, 0L, active2, 0x8000L);
       case 119:
-         if ((active1 & 0x100000000000000L) != 0L)
+         if ((active1 & 0x200000000000000L) != 0L)
          {
-            jjmatchedKind = 120;
+            jjmatchedKind = 121;
             jjmatchedPos = 2;
          }
          break;
       case 120:
-         if ((active0 & 0x200000000000000L) != 0L)
+         if ((active0 & 0x400000000000000L) != 0L)
          {
-            jjmatchedKind = 57;
+            jjmatchedKind = 58;
             jjmatchedPos = 2;
          }
          break;
       case 121:
-         if ((active1 & 0x4000000000000L) != 0L)
+         if ((active1 & 0x8000000000000L) != 0L)
          {
-            jjmatchedKind = 114;
+            jjmatchedKind = 115;
             jjmatchedPos = 2;
          }
          break;
@@ -735,113 +735,118 @@
    switch(curChar)
    {
       case 49:
-         if ((active1 & 0x2000000000000000L) != 0L)
+         if ((active1 & 0x4000000000000000L) != 0L)
          {
-            jjmatchedKind = 125;
+            jjmatchedKind = 126;
             jjmatchedPos = 3;
          }
          break;
       case 50:
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0xc000000000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x8000000000000000L, active2, 0x1L);
       case 51:
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0x1L);
-      case 53:
          return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0x2L);
+      case 53:
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0x4L);
       case 65:
-         if ((active2 & 0x10L) != 0L)
+         if ((active2 & 0x20L) != 0L)
          {
-            jjmatchedKind = 132;
+            jjmatchedKind = 133;
             jjmatchedPos = 3;
          }
-         else if ((active2 & 0x10000L) != 0L)
+         else if ((active2 & 0x20000L) != 0L)
          {
-            jjmatchedKind = 144;
+            jjmatchedKind = 145;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x20000000000000L, active1, 0x800000200000L, active2, 0x201800L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x40000000000000L, active1, 0x1000000400000L, active2, 0x403000L);
       case 66:
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x400000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x800000000000L, active2, 0L);
       case 67:
          if ((active0 & 0x1000000000L) != 0L)
          {
             jjmatchedKind = 36;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x4000000L, active1, 0x1000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x4000000L, active1, 0x2000000000L, active2, 0L);
       case 68:
          if ((active0 & 0x200000000000L) != 0L)
          {
             jjmatchedKind = 45;
             jjmatchedPos = 3;
          }
-         else if ((active1 & 0x80000000L) != 0L)
+         else if ((active0 & 0x1000000000000L) != 0L)
          {
-            jjmatchedKind = 95;
+            jjmatchedKind = 48;
             jjmatchedPos = 3;
          }
-         else if ((active1 & 0x200000000000000L) != 0L)
+         else if ((active1 & 0x100000000L) != 0L)
          {
-            jjmatchedKind = 121;
+            jjmatchedKind = 96;
             jjmatchedPos = 3;
          }
-         else if ((active2 & 0x400L) != 0L)
+         else if ((active1 & 0x400000000000000L) != 0L)
          {
-            jjmatchedKind = 138;
+            jjmatchedKind = 122;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x100800L, active2, 0L);
+         else if ((active2 & 0x800L) != 0L)
+         {
+            jjmatchedKind = 139;
+            jjmatchedPos = 3;
+         }
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x201000L, active2, 0L);
       case 69:
          if ((active0 & 0x100000L) != 0L)
          {
             jjmatchedKind = 20;
             jjmatchedPos = 3;
          }
-         else if ((active0 & 0x2000000000000000L) != 0L)
+         else if ((active0 & 0x4000000000000000L) != 0L)
          {
-            jjmatchedKind = 61;
+            jjmatchedKind = 62;
             jjmatchedPos = 3;
          }
-         else if ((active2 & 0x4L) != 0L)
+         else if ((active2 & 0x8L) != 0L)
          {
-            jjmatchedKind = 130;
+            jjmatchedKind = 131;
             jjmatchedPos = 3;
          }
-         else if ((active2 & 0x4000L) != 0L)
+         else if ((active2 & 0x8000L) != 0L)
          {
-            jjmatchedKind = 142;
+            jjmatchedKind = 143;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0xc000002480400000L, active1, 0x40200060000001L, active2, 0x20060L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x8000002480400000L, active1, 0x804000c0000003L, active2, 0x400c0L);
       case 70:
          return jjMoveStringLiteralDfa4_0(active0, 0x200000L, active1, 0L, active2, 0L);
       case 71:
-         if ((active1 & 0x400000L) != 0L)
+         if ((active1 & 0x800000L) != 0L)
          {
-            jjmatchedKind = 86;
+            jjmatchedKind = 87;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x800000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x1000000L, active2, 0L);
       case 72:
-         if ((active2 & 0x800000L) != 0L)
+         if ((active2 & 0x1000000L) != 0L)
          {
-            jjmatchedKind = 151;
+            jjmatchedKind = 152;
             jjmatchedPos = 3;
          }
          break;
       case 73:
-         return jjMoveStringLiteralDfa4_0(active0, 0x1010040020000000L, active1, 0x8000002L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x2020040020000000L, active1, 0x10000004L, active2, 0L);
       case 76:
-         if ((active1 & 0x8000L) != 0L)
+         if ((active1 & 0x10000L) != 0L)
          {
-            jjmatchedKind = 79;
+            jjmatchedKind = 80;
             jjmatchedPos = 3;
          }
-         else if ((active1 & 0x200000000L) != 0L)
+         else if ((active1 & 0x400000000L) != 0L)
          {
-            jjmatchedKind = 97;
+            jjmatchedKind = 98;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0xc004080100L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x18008100200L, active2, 0L);
       case 77:
          if ((active0 & 0x4000000000L) != 0L)
          {
@@ -855,145 +860,150 @@
             jjmatchedKind = 25;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x80000000000000L, active1, 0x800000080L, active2, 0x1000000L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x100000000000000L, active1, 0x1000000100L, active2, 0x2000000L);
       case 79:
+         if ((active2 & 0x100000L) != 0L)
+         {
+            jjmatchedKind = 148;
+            jjmatchedPos = 3;
+         }
+         return jjMoveStringLiteralDfa4_0(active0, 0x80000000000L, active1, 0x40080800000000L, active2, 0L);
+      case 80:
          if ((active2 & 0x80000L) != 0L)
          {
             jjmatchedKind = 147;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x80000000000L, active1, 0x20040400000000L, active2, 0L);
-      case 80:
-         if ((active2 & 0x40000L) != 0L)
-         {
-            jjmatchedKind = 146;
-            jjmatchedPos = 3;
-         }
-         return jjMoveStringLiteralDfa4_0(active0, 0x20000000000L, active1, 0x10L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x20000000000L, active1, 0x20L, active2, 0L);
       case 82:
-         if ((active1 & 0x1000000000000L) != 0L)
+         if ((active1 & 0x2000000000000L) != 0L)
          {
-            jjmatchedKind = 112;
+            jjmatchedKind = 113;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x8000000000L, active1, 0x8000003020000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x8000000000L, active1, 0x10000006040000L, active2, 0L);
       case 83:
-         return jjMoveStringLiteralDfa4_0(active0, 0x1000048000000L, active1, 0x800132000000000L, active2, 0x8L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x2000048000000L, active1, 0x1000264000000000L, active2, 0x10L);
       case 84:
-         if ((active1 & 0x4000L) != 0L)
+         if ((active1 & 0x8000L) != 0L)
          {
-            jjmatchedKind = 78;
+            jjmatchedKind = 79;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x800000L, active1, 0x2080000010040L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x800000L, active1, 0x4100000020080L, active2, 0L);
       case 85:
-         return jjMoveStringLiteralDfa4_0(active0, 0x8100201000000L, active1, 0x410000010000020L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x10100201000000L, active1, 0x820000020000040L, active2, 0L);
       case 86:
          return jjMoveStringLiteralDfa4_0(active0, 0x400000000000L, active1, 0L, active2, 0L);
       case 89:
-         if ((active2 & 0x8000L) != 0L)
-         {
-            jjmatchedKind = 143;
-            jjmatchedPos = 3;
-         }
-         break;
-      case 95:
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0xcL, active2, 0L);
-      case 97:
-         if ((active2 & 0x10L) != 0L)
-         {
-            jjmatchedKind = 132;
-            jjmatchedPos = 3;
-         }
-         else if ((active2 & 0x10000L) != 0L)
+         if ((active2 & 0x10000L) != 0L)
          {
             jjmatchedKind = 144;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x20000000000000L, active1, 0x800000200000L, active2, 0x201800L);
+         break;
+      case 95:
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x18L, active2, 0L);
+      case 97:
+         if ((active2 & 0x20L) != 0L)
+         {
+            jjmatchedKind = 133;
+            jjmatchedPos = 3;
+         }
+         else if ((active2 & 0x20000L) != 0L)
+         {
+            jjmatchedKind = 145;
+            jjmatchedPos = 3;
+         }
+         return jjMoveStringLiteralDfa4_0(active0, 0x40000000000000L, active1, 0x1000000400000L, active2, 0x403000L);
       case 98:
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x400000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x800000000000L, active2, 0L);
       case 99:
          if ((active0 & 0x1000000000L) != 0L)
          {
             jjmatchedKind = 36;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x4000000L, active1, 0x1000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x4000000L, active1, 0x2000000000L, active2, 0L);
       case 100:
          if ((active0 & 0x200000000000L) != 0L)
          {
             jjmatchedKind = 45;
             jjmatchedPos = 3;
          }
-         else if ((active1 & 0x80000000L) != 0L)
+         else if ((active0 & 0x1000000000000L) != 0L)
          {
-            jjmatchedKind = 95;
+            jjmatchedKind = 48;
             jjmatchedPos = 3;
          }
-         else if ((active1 & 0x200000000000000L) != 0L)
+         else if ((active1 & 0x100000000L) != 0L)
          {
-            jjmatchedKind = 121;
+            jjmatchedKind = 96;
             jjmatchedPos = 3;
          }
-         else if ((active2 & 0x400L) != 0L)
+         else if ((active1 & 0x400000000000000L) != 0L)
          {
-            jjmatchedKind = 138;
+            jjmatchedKind = 122;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x100800L, active2, 0L);
+         else if ((active2 & 0x800L) != 0L)
+         {
+            jjmatchedKind = 139;
+            jjmatchedPos = 3;
+         }
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x201000L, active2, 0L);
       case 101:
          if ((active0 & 0x100000L) != 0L)
          {
             jjmatchedKind = 20;
             jjmatchedPos = 3;
          }
-         else if ((active0 & 0x2000000000000000L) != 0L)
+         else if ((active0 & 0x4000000000000000L) != 0L)
          {
-            jjmatchedKind = 61;
+            jjmatchedKind = 62;
             jjmatchedPos = 3;
          }
-         else if ((active2 & 0x4L) != 0L)
+         else if ((active2 & 0x8L) != 0L)
          {
-            jjmatchedKind = 130;
+            jjmatchedKind = 131;
             jjmatchedPos = 3;
          }
-         else if ((active2 & 0x4000L) != 0L)
+         else if ((active2 & 0x8000L) != 0L)
          {
-            jjmatchedKind = 142;
+            jjmatchedKind = 143;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0xc000002480400000L, active1, 0x40200060000001L, active2, 0x20060L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x8000002480400000L, active1, 0x804000c0000003L, active2, 0x400c0L);
       case 102:
          return jjMoveStringLiteralDfa4_0(active0, 0x200000L, active1, 0L, active2, 0L);
       case 103:
-         if ((active1 & 0x400000L) != 0L)
+         if ((active1 & 0x800000L) != 0L)
          {
-            jjmatchedKind = 86;
+            jjmatchedKind = 87;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x800000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x1000000L, active2, 0L);
       case 104:
-         if ((active2 & 0x800000L) != 0L)
+         if ((active2 & 0x1000000L) != 0L)
          {
-            jjmatchedKind = 151;
+            jjmatchedKind = 152;
             jjmatchedPos = 3;
          }
          break;
       case 105:
-         return jjMoveStringLiteralDfa4_0(active0, 0x1010040020000000L, active1, 0x8000002L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x2020040020000000L, active1, 0x10000004L, active2, 0L);
       case 108:
-         if ((active1 & 0x8000L) != 0L)
+         if ((active1 & 0x10000L) != 0L)
          {
-            jjmatchedKind = 79;
+            jjmatchedKind = 80;
             jjmatchedPos = 3;
          }
-         else if ((active1 & 0x200000000L) != 0L)
+         else if ((active1 & 0x400000000L) != 0L)
          {
-            jjmatchedKind = 97;
+            jjmatchedKind = 98;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0xc004080100L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x18008100200L, active2, 0L);
       case 109:
          if ((active0 & 0x4000000000L) != 0L)
          {
@@ -1007,45 +1017,45 @@
             jjmatchedKind = 25;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x80000000000000L, active1, 0x800000080L, active2, 0x1000000L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x100000000000000L, active1, 0x1000000100L, active2, 0x2000000L);
       case 111:
+         if ((active2 & 0x100000L) != 0L)
+         {
+            jjmatchedKind = 148;
+            jjmatchedPos = 3;
+         }
+         return jjMoveStringLiteralDfa4_0(active0, 0x80000000000L, active1, 0x40080800000000L, active2, 0L);
+      case 112:
          if ((active2 & 0x80000L) != 0L)
          {
             jjmatchedKind = 147;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x80000000000L, active1, 0x20040400000000L, active2, 0L);
-      case 112:
-         if ((active2 & 0x40000L) != 0L)
-         {
-            jjmatchedKind = 146;
-            jjmatchedPos = 3;
-         }
-         return jjMoveStringLiteralDfa4_0(active0, 0x20000000000L, active1, 0x10L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x20000000000L, active1, 0x20L, active2, 0L);
       case 114:
-         if ((active1 & 0x1000000000000L) != 0L)
+         if ((active1 & 0x2000000000000L) != 0L)
          {
-            jjmatchedKind = 112;
+            jjmatchedKind = 113;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x8000000000L, active1, 0x8000003020000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x8000000000L, active1, 0x10000006040000L, active2, 0L);
       case 115:
-         return jjMoveStringLiteralDfa4_0(active0, 0x1000048000000L, active1, 0x800132000000000L, active2, 0x8L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x2000048000000L, active1, 0x1000264000000000L, active2, 0x10L);
       case 116:
-         if ((active1 & 0x4000L) != 0L)
+         if ((active1 & 0x8000L) != 0L)
          {
-            jjmatchedKind = 78;
+            jjmatchedKind = 79;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x800000L, active1, 0x2080000010040L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x800000L, active1, 0x4100000020080L, active2, 0L);
       case 117:
-         return jjMoveStringLiteralDfa4_0(active0, 0x8100201000000L, active1, 0x410000010000020L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x10100201000000L, active1, 0x820000020000040L, active2, 0L);
       case 118:
          return jjMoveStringLiteralDfa4_0(active0, 0x400000000000L, active1, 0L, active2, 0L);
       case 121:
-         if ((active2 & 0x8000L) != 0L)
+         if ((active2 & 0x10000L) != 0L)
          {
-            jjmatchedKind = 143;
+            jjmatchedKind = 144;
             jjmatchedPos = 3;
          }
          break;
@@ -1064,15 +1074,15 @@
    switch(curChar)
    {
       case 49:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0L, active2, 0x2L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0L, active2, 0x4L);
       case 50:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x4000000000000000L, active2, 0L);
-      case 53:
          return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x8000000000000000L, active2, 0L);
-      case 56:
+      case 53:
          return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0L, active2, 0x1L);
+      case 56:
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0L, active2, 0x2L);
       case 65:
-         return jjMoveStringLiteralDfa5_0(active0, 0x1000000000000000L, active1, 0x89004080002L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x2000000000000000L, active1, 0x112008100004L, active2, 0L);
       case 67:
          return jjMoveStringLiteralDfa5_0(active0, 0x1400000L, active1, 0L, active2, 0L);
       case 68:
@@ -1081,31 +1091,26 @@
             jjmatchedKind = 37;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x80L) != 0L)
+         else if ((active1 & 0x100L) != 0L)
          {
-            jjmatchedKind = 71;
+            jjmatchedKind = 72;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x800000000L) != 0L)
+         else if ((active1 & 0x1000000000L) != 0L)
          {
-            jjmatchedKind = 99;
+            jjmatchedKind = 100;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x40000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x80000000000L, active2, 0L);
       case 69:
          if ((active0 & 0x8000000000L) != 0L)
          {
             jjmatchedKind = 39;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x800L) != 0L)
+         else if ((active1 & 0x1000L) != 0L)
          {
-            jjmatchedKind = 75;
-            jjmatchedPos = 4;
-         }
-         else if ((active1 & 0x10000000000L) != 0L)
-         {
-            jjmatchedKind = 104;
+            jjmatchedKind = 76;
             jjmatchedPos = 4;
          }
          else if ((active1 & 0x20000000000L) != 0L)
@@ -1113,23 +1118,28 @@
             jjmatchedKind = 105;
             jjmatchedPos = 4;
          }
-         else if ((active2 & 0x8L) != 0L)
+         else if ((active1 & 0x40000000000L) != 0L)
          {
-            jjmatchedKind = 131;
+            jjmatchedKind = 106;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x240000000L, active1, 0x404000000140L, active2, 0L);
+         else if ((active2 & 0x10L) != 0L)
+         {
+            jjmatchedKind = 132;
+            jjmatchedPos = 4;
+         }
+         return jjMoveStringLiteralDfa5_0(active0, 0x240000000L, active1, 0x808000000280L, active2, 0L);
       case 70:
          if ((active0 & 0x400000000L) != 0L)
          {
             jjmatchedKind = 34;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x800000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x1000000000000L, active2, 0L);
       case 71:
-         if ((active2 & 0x1000000L) != 0L)
+         if ((active2 & 0x2000000L) != 0L)
          {
-            jjmatchedKind = 152;
+            jjmatchedKind = 153;
             jjmatchedPos = 4;
          }
          break;
@@ -1139,21 +1149,16 @@
             jjmatchedKind = 41;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x2000000000000L) != 0L)
+         else if ((active1 & 0x4000000000000L) != 0L)
          {
-            jjmatchedKind = 113;
+            jjmatchedKind = 114;
             jjmatchedPos = 4;
          }
          break;
       case 73:
-         if ((active1 & 0x10000L) != 0L)
+         if ((active1 & 0x20000L) != 0L)
          {
-            jjmatchedKind = 80;
-            jjmatchedPos = 4;
-         }
-         else if ((active1 & 0x1000000L) != 0L)
-         {
-            jjmatchedKind = 88;
+            jjmatchedKind = 81;
             jjmatchedPos = 4;
          }
          else if ((active1 & 0x2000000L) != 0L)
@@ -1161,93 +1166,98 @@
             jjmatchedKind = 89;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x400000a00000L, active1, 0x800000000000000L, active2, 0L);
+         else if ((active1 & 0x4000000L) != 0L)
+         {
+            jjmatchedKind = 90;
+            jjmatchedPos = 4;
+         }
+         return jjMoveStringLiteralDfa5_0(active0, 0x400000a00000L, active1, 0x1000000000000000L, active2, 0L);
       case 76:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x10L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x20L, active2, 0L);
       case 77:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x10800000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x21000000L, active2, 0L);
       case 78:
          if ((active0 & 0x80000000000L) != 0L)
          {
             jjmatchedKind = 43;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x10000000000000L, active1, 0x20200000000000L, active2, 0x20000L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x20000000000000L, active1, 0x40400000000000L, active2, 0x40000L);
       case 79:
          return jjMoveStringLiteralDfa5_0(active0, 0x40000000000L, active1, 0L, active2, 0L);
       case 80:
-         if ((active0 & 0x8000000000000L) != 0L)
+         if ((active0 & 0x10000000000000L) != 0L)
          {
-            jjmatchedKind = 51;
+            jjmatchedKind = 52;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x28L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x50L, active2, 0L);
       case 82:
          if ((active0 & 0x80000000L) != 0L)
          {
             jjmatchedKind = 31;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x400000000L) != 0L)
+         else if ((active1 & 0x800000000L) != 0L)
          {
-            jjmatchedKind = 98;
+            jjmatchedKind = 99;
             jjmatchedPos = 4;
          }
-         else if ((active2 & 0x800L) != 0L)
+         else if ((active2 & 0x1000L) != 0L)
          {
-            jjmatchedKind = 139;
+            jjmatchedKind = 140;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x20000004000000L, active1, 0L, active2, 0x20L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x40000004000000L, active1, 0L, active2, 0x40L);
       case 83:
          if ((active0 & 0x100000000000L) != 0L)
          {
             jjmatchedKind = 44;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x8000000000000L) != 0L)
+         else if ((active1 & 0x10000000000000L) != 0L)
          {
-            jjmatchedKind = 115;
+            jjmatchedKind = 116;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x4L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x8L, active2, 0L);
       case 84:
          if ((active0 & 0x20000000L) != 0L)
          {
             jjmatchedKind = 29;
             jjmatchedPos = 4;
          }
-         else if ((active0 & 0x80000000000000L) != 0L)
+         else if ((active0 & 0x100000000000000L) != 0L)
          {
-            jjmatchedKind = 55;
+            jjmatchedKind = 56;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x100000L) != 0L)
+         else if ((active1 & 0x200000L) != 0L)
          {
-            jjmatchedKind = 84;
+            jjmatchedKind = 85;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x1000008000000L, active1, 0x10102048220000L, active2, 0x1040L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x2000008000000L, active1, 0x20204090440000L, active2, 0x2080L);
       case 85:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x400000000000000L, active2, 0x200000L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x800000000000000L, active2, 0x400000L);
       case 86:
-         if ((active0 & 0x4000000000000000L) != 0L)
+         if ((active0 & 0x8000000000000000L) != 0L)
          {
-            jjmatchedKind = 62;
+            jjmatchedKind = 63;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x8000000000000000L, active1, 0x1L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x3L, active2, 0L);
       case 88:
-         if ((active1 & 0x20000000L) != 0L)
+         if ((active1 & 0x40000000L) != 0L)
          {
-            jjmatchedKind = 93;
+            jjmatchedKind = 94;
             jjmatchedPos = 4;
          }
          break;
       case 90:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x40000000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x80000000000000L, active2, 0L);
       case 97:
-         return jjMoveStringLiteralDfa5_0(active0, 0x1000000000000000L, active1, 0x89004080002L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x2000000000000000L, active1, 0x112008100004L, active2, 0L);
       case 99:
          return jjMoveStringLiteralDfa5_0(active0, 0x1400000L, active1, 0L, active2, 0L);
       case 100:
@@ -1256,31 +1266,26 @@
             jjmatchedKind = 37;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x80L) != 0L)
+         else if ((active1 & 0x100L) != 0L)
          {
-            jjmatchedKind = 71;
+            jjmatchedKind = 72;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x800000000L) != 0L)
+         else if ((active1 & 0x1000000000L) != 0L)
          {
-            jjmatchedKind = 99;
+            jjmatchedKind = 100;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x40000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x80000000000L, active2, 0L);
       case 101:
          if ((active0 & 0x8000000000L) != 0L)
          {
             jjmatchedKind = 39;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x800L) != 0L)
+         else if ((active1 & 0x1000L) != 0L)
          {
-            jjmatchedKind = 75;
-            jjmatchedPos = 4;
-         }
-         else if ((active1 & 0x10000000000L) != 0L)
-         {
-            jjmatchedKind = 104;
+            jjmatchedKind = 76;
             jjmatchedPos = 4;
          }
          else if ((active1 & 0x20000000000L) != 0L)
@@ -1288,23 +1293,28 @@
             jjmatchedKind = 105;
             jjmatchedPos = 4;
          }
-         else if ((active2 & 0x8L) != 0L)
+         else if ((active1 & 0x40000000000L) != 0L)
          {
-            jjmatchedKind = 131;
+            jjmatchedKind = 106;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x240000000L, active1, 0x404000000140L, active2, 0L);
+         else if ((active2 & 0x10L) != 0L)
+         {
+            jjmatchedKind = 132;
+            jjmatchedPos = 4;
+         }
+         return jjMoveStringLiteralDfa5_0(active0, 0x240000000L, active1, 0x808000000280L, active2, 0L);
       case 102:
          if ((active0 & 0x400000000L) != 0L)
          {
             jjmatchedKind = 34;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x800000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x1000000000000L, active2, 0L);
       case 103:
-         if ((active2 & 0x1000000L) != 0L)
+         if ((active2 & 0x2000000L) != 0L)
          {
-            jjmatchedKind = 152;
+            jjmatchedKind = 153;
             jjmatchedPos = 4;
          }
          break;
@@ -1314,21 +1324,16 @@
             jjmatchedKind = 41;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x2000000000000L) != 0L)
+         else if ((active1 & 0x4000000000000L) != 0L)
          {
-            jjmatchedKind = 113;
+            jjmatchedKind = 114;
             jjmatchedPos = 4;
          }
          break;
       case 105:
-         if ((active1 & 0x10000L) != 0L)
+         if ((active1 & 0x20000L) != 0L)
          {
-            jjmatchedKind = 80;
-            jjmatchedPos = 4;
-         }
-         else if ((active1 & 0x1000000L) != 0L)
-         {
-            jjmatchedKind = 88;
+            jjmatchedKind = 81;
             jjmatchedPos = 4;
          }
          else if ((active1 & 0x2000000L) != 0L)
@@ -1336,91 +1341,96 @@
             jjmatchedKind = 89;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x400000a00000L, active1, 0x800000000000000L, active2, 0L);
+         else if ((active1 & 0x4000000L) != 0L)
+         {
+            jjmatchedKind = 90;
+            jjmatchedPos = 4;
+         }
+         return jjMoveStringLiteralDfa5_0(active0, 0x400000a00000L, active1, 0x1000000000000000L, active2, 0L);
       case 108:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x10L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x20L, active2, 0L);
       case 109:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x10800000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x21000000L, active2, 0L);
       case 110:
          if ((active0 & 0x80000000000L) != 0L)
          {
             jjmatchedKind = 43;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x10000000000000L, active1, 0x20200000000000L, active2, 0x20000L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x20000000000000L, active1, 0x40400000000000L, active2, 0x40000L);
       case 111:
          return jjMoveStringLiteralDfa5_0(active0, 0x40000000000L, active1, 0L, active2, 0L);
       case 112:
-         if ((active0 & 0x8000000000000L) != 0L)
+         if ((active0 & 0x10000000000000L) != 0L)
          {
-            jjmatchedKind = 51;
+            jjmatchedKind = 52;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x28L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x50L, active2, 0L);
       case 114:
          if ((active0 & 0x80000000L) != 0L)
          {
             jjmatchedKind = 31;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x400000000L) != 0L)
+         else if ((active1 & 0x800000000L) != 0L)
          {
-            jjmatchedKind = 98;
+            jjmatchedKind = 99;
             jjmatchedPos = 4;
          }
-         else if ((active2 & 0x800L) != 0L)
+         else if ((active2 & 0x1000L) != 0L)
          {
-            jjmatchedKind = 139;
+            jjmatchedKind = 140;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x20000004000000L, active1, 0L, active2, 0x20L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x40000004000000L, active1, 0L, active2, 0x40L);
       case 115:
          if ((active0 & 0x100000000000L) != 0L)
          {
             jjmatchedKind = 44;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x8000000000000L) != 0L)
+         else if ((active1 & 0x10000000000000L) != 0L)
          {
-            jjmatchedKind = 115;
+            jjmatchedKind = 116;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x4L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x8L, active2, 0L);
       case 116:
          if ((active0 & 0x20000000L) != 0L)
          {
             jjmatchedKind = 29;
             jjmatchedPos = 4;
          }
-         else if ((active0 & 0x80000000000000L) != 0L)
+         else if ((active0 & 0x100000000000000L) != 0L)
          {
-            jjmatchedKind = 55;
+            jjmatchedKind = 56;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x100000L) != 0L)
+         else if ((active1 & 0x200000L) != 0L)
          {
-            jjmatchedKind = 84;
+            jjmatchedKind = 85;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x1000008000000L, active1, 0x10102048220000L, active2, 0x1040L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x2000008000000L, active1, 0x20204090440000L, active2, 0x2080L);
       case 117:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x400000000000000L, active2, 0x200000L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x800000000000000L, active2, 0x400000L);
       case 118:
-         if ((active0 & 0x4000000000000000L) != 0L)
+         if ((active0 & 0x8000000000000000L) != 0L)
          {
-            jjmatchedKind = 62;
+            jjmatchedKind = 63;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x8000000000000000L, active1, 0x1L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x3L, active2, 0L);
       case 120:
-         if ((active1 & 0x20000000L) != 0L)
+         if ((active1 & 0x40000000L) != 0L)
          {
-            jjmatchedKind = 93;
+            jjmatchedKind = 94;
             jjmatchedPos = 4;
          }
          break;
       case 122:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x40000000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x80000000000000L, active2, 0L);
       default :
          break;
    }
@@ -1436,71 +1446,85 @@
    switch(curChar)
    {
       case 50:
-         if ((active2 & 0x2L) != 0L)
+         if ((active2 & 0x4L) != 0L)
          {
-            jjmatchedKind = 129;
+            jjmatchedKind = 130;
             jjmatchedPos = 5;
          }
          break;
       case 52:
-         if ((active1 & 0x4000000000000000L) != 0L)
-         {
-            jjmatchedKind = 126;
-            jjmatchedPos = 5;
-         }
-         else if ((active2 & 0x1L) != 0L)
-         {
-            jjmatchedKind = 128;
-            jjmatchedPos = 5;
-         }
-         break;
-      case 54:
          if ((active1 & 0x8000000000000000L) != 0L)
          {
             jjmatchedKind = 127;
             jjmatchedPos = 5;
          }
+         else if ((active2 & 0x2L) != 0L)
+         {
+            jjmatchedKind = 129;
+            jjmatchedPos = 5;
+         }
+         break;
+      case 54:
+         if ((active2 & 0x1L) != 0L)
+         {
+            jjmatchedKind = 128;
+            jjmatchedPos = 5;
+         }
          break;
       case 65:
-         return jjMoveStringLiteralDfa6_0(active0, 0x20000000000000L, active1, 0x100000800004L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0x40000000000000L, active1, 0x200001000008L, active2, 0L);
       case 67:
-         return jjMoveStringLiteralDfa6_0(active0, 0x400000000000L, active1, 0x8000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0x400000000000L, active1, 0x10000000000L, active2, 0L);
       case 68:
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x20200000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x40400000000000L, active2, 0L);
       case 69:
-         if ((active1 & 0x10L) != 0L)
+         if ((active1 & 0x20L) != 0L)
          {
-            jjmatchedKind = 68;
+            jjmatchedKind = 69;
             jjmatchedPos = 5;
          }
-         else if ((active2 & 0x40L) != 0L)
+         else if ((active2 & 0x80L) != 0L)
          {
-            jjmatchedKind = 134;
+            jjmatchedKind = 135;
             jjmatchedPos = 5;
          }
-         else if ((active2 & 0x1000L) != 0L)
+         else if ((active2 & 0x2000L) != 0L)
          {
-            jjmatchedKind = 140;
+            jjmatchedKind = 141;
             jjmatchedPos = 5;
          }
-         return jjMoveStringLiteralDfa6_0(active0, 0x1000000L, active1, 0x10040058020000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0x1000000L, active1, 0x200800b0040000L, active2, 0L);
       case 70:
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x400000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x800000000000L, active2, 0L);
       case 71:
-         if ((active0 & 0x10000000000000L) != 0L)
+         if ((active0 & 0x20000000000000L) != 0L)
          {
-            jjmatchedKind = 52;
+            jjmatchedKind = 53;
             jjmatchedPos = 5;
          }
          break;
       case 73:
-         return jjMoveStringLiteralDfa6_0(active0, 0x4000000L, active1, 0x400080000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0x4000000L, active1, 0x800100000000000L, active2, 0L);
       case 76:
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x200000L);
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x400000L);
       case 78:
-         if ((active0 & 0x1000000000000000L) != 0L)
+         if ((active0 & 0x2000000000000000L) != 0L)
          {
-            jjmatchedKind = 60;
+            jjmatchedKind = 61;
+            jjmatchedPos = 5;
+         }
+         else if ((active1 & 0x8000000000L) != 0L)
+         {
+            jjmatchedKind = 103;
+            jjmatchedPos = 5;
+         }
+         return jjMoveStringLiteralDfa6_0(active0, 0x40000800000L, active1, 0x8100004L, active2, 0L);
+      case 79:
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x1080000000000010L, active2, 0L);
+      case 82:
+         if ((active1 & 0x80L) != 0L)
+         {
+            jjmatchedKind = 71;
             jjmatchedPos = 5;
          }
          else if ((active1 & 0x4000000000L) != 0L)
@@ -1508,20 +1532,6 @@
             jjmatchedKind = 102;
             jjmatchedPos = 5;
          }
-         return jjMoveStringLiteralDfa6_0(active0, 0x40000800000L, active1, 0x4080002L, active2, 0L);
-      case 79:
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x840000000000008L, active2, 0L);
-      case 82:
-         if ((active1 & 0x40L) != 0L)
-         {
-            jjmatchedKind = 70;
-            jjmatchedPos = 5;
-         }
-         else if ((active1 & 0x2000000000L) != 0L)
-         {
-            jjmatchedKind = 101;
-            jjmatchedPos = 5;
-         }
          return jjMoveStringLiteralDfa6_0(active0, 0x8000000L, active1, 0L, active2, 0L);
       case 83:
          if ((active0 & 0x200000000L) != 0L)
@@ -1529,12 +1539,12 @@
             jjmatchedKind = 33;
             jjmatchedPos = 5;
          }
-         else if ((active0 & 0x1000000000000L) != 0L)
+         else if ((active0 & 0x2000000000000L) != 0L)
          {
-            jjmatchedKind = 48;
+            jjmatchedKind = 49;
             jjmatchedPos = 5;
          }
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x100L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x200L, active2, 0L);
       case 84:
          if ((active0 & 0x400000L) != 0L)
          {
@@ -1546,22 +1556,22 @@
             jjmatchedKind = 30;
             jjmatchedPos = 5;
          }
-         else if ((active1 & 0x1000000000L) != 0L)
+         else if ((active1 & 0x2000000000L) != 0L)
          {
-            jjmatchedKind = 100;
+            jjmatchedKind = 101;
             jjmatchedPos = 5;
          }
-         else if ((active2 & 0x20L) != 0L)
+         else if ((active2 & 0x40L) != 0L)
          {
-            jjmatchedKind = 133;
+            jjmatchedKind = 134;
             jjmatchedPos = 5;
          }
-         else if ((active2 & 0x20000L) != 0L)
+         else if ((active2 & 0x40000L) != 0L)
          {
-            jjmatchedKind = 145;
+            jjmatchedKind = 146;
             jjmatchedPos = 5;
          }
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x800000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x1000000000000L, active2, 0L);
       case 88:
          if ((active0 & 0x200000L) != 0L)
          {
@@ -1570,49 +1580,63 @@
          }
          break;
       case 89:
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x200000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x400000L, active2, 0L);
       case 95:
-         return jjMoveStringLiteralDfa6_0(active0, 0x8000000000000000L, active1, 0x21L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x43L, active2, 0L);
       case 97:
-         return jjMoveStringLiteralDfa6_0(active0, 0x20000000000000L, active1, 0x100000800004L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0x40000000000000L, active1, 0x200001000008L, active2, 0L);
       case 99:
-         return jjMoveStringLiteralDfa6_0(active0, 0x400000000000L, active1, 0x8000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0x400000000000L, active1, 0x10000000000L, active2, 0L);
       case 100:
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x20200000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x40400000000000L, active2, 0L);
       case 101:
-         if ((active1 & 0x10L) != 0L)
+         if ((active1 & 0x20L) != 0L)
          {
-            jjmatchedKind = 68;
+            jjmatchedKind = 69;
             jjmatchedPos = 5;
          }
-         else if ((active2 & 0x40L) != 0L)
+         else if ((active2 & 0x80L) != 0L)
          {
-            jjmatchedKind = 134;
+            jjmatchedKind = 135;
             jjmatchedPos = 5;
          }
-         else if ((active2 & 0x1000L) != 0L)
+         else if ((active2 & 0x2000L) != 0L)
          {
-            jjmatchedKind = 140;
+            jjmatchedKind = 141;
             jjmatchedPos = 5;
          }
-         return jjMoveStringLiteralDfa6_0(active0, 0x1000000L, active1, 0x10040058020000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0x1000000L, active1, 0x200800b0040000L, active2, 0L);
       case 102:
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x400000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x800000000000L, active2, 0L);
       case 103:
-         if ((active0 & 0x10000000000000L) != 0L)
+         if ((active0 & 0x20000000000000L) != 0L)
          {
-            jjmatchedKind = 52;
+            jjmatchedKind = 53;
             jjmatchedPos = 5;
          }
          break;
       case 105:
-         return jjMoveStringLiteralDfa6_0(active0, 0x4000000L, active1, 0x400080000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0x4000000L, active1, 0x800100000000000L, active2, 0L);
       case 108:
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x200000L);
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x400000L);
       case 110:
-         if ((active0 & 0x1000000000000000L) != 0L)
+         if ((active0 & 0x2000000000000000L) != 0L)
          {
-            jjmatchedKind = 60;
+            jjmatchedKind = 61;
+            jjmatchedPos = 5;
+         }
+         else if ((active1 & 0x8000000000L) != 0L)
+         {
+            jjmatchedKind = 103;
+            jjmatchedPos = 5;
+         }
+         return jjMoveStringLiteralDfa6_0(active0, 0x40000800000L, active1, 0x8100004L, active2, 0L);
+      case 111:
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x1080000000000010L, active2, 0L);
+      case 114:
+         if ((active1 & 0x80L) != 0L)
+         {
+            jjmatchedKind = 71;
             jjmatchedPos = 5;
          }
          else if ((active1 & 0x4000000000L) != 0L)
@@ -1620,20 +1644,6 @@
             jjmatchedKind = 102;
             jjmatchedPos = 5;
          }
-         return jjMoveStringLiteralDfa6_0(active0, 0x40000800000L, active1, 0x4080002L, active2, 0L);
-      case 111:
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x840000000000008L, active2, 0L);
-      case 114:
-         if ((active1 & 0x40L) != 0L)
-         {
-            jjmatchedKind = 70;
-            jjmatchedPos = 5;
-         }
-         else if ((active1 & 0x2000000000L) != 0L)
-         {
-            jjmatchedKind = 101;
-            jjmatchedPos = 5;
-         }
          return jjMoveStringLiteralDfa6_0(active0, 0x8000000L, active1, 0L, active2, 0L);
       case 115:
          if ((active0 & 0x200000000L) != 0L)
@@ -1641,12 +1651,12 @@
             jjmatchedKind = 33;
             jjmatchedPos = 5;
          }
-         else if ((active0 & 0x1000000000000L) != 0L)
+         else if ((active0 & 0x2000000000000L) != 0L)
          {
-            jjmatchedKind = 48;
+            jjmatchedKind = 49;
             jjmatchedPos = 5;
          }
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x100L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x200L, active2, 0L);
       case 116:
          if ((active0 & 0x400000L) != 0L)
          {
@@ -1658,22 +1668,22 @@
             jjmatchedKind = 30;
             jjmatchedPos = 5;
          }
-         else if ((active1 & 0x1000000000L) != 0L)
+         else if ((active1 & 0x2000000000L) != 0L)
          {
-            jjmatchedKind = 100;
+            jjmatchedKind = 101;
             jjmatchedPos = 5;
          }
-         else if ((active2 & 0x20L) != 0L)
+         else if ((active2 & 0x40L) != 0L)
          {
-            jjmatchedKind = 133;
+            jjmatchedKind = 134;
             jjmatchedPos = 5;
          }
-         else if ((active2 & 0x20000L) != 0L)
+         else if ((active2 & 0x40000L) != 0L)
          {
-            jjmatchedKind = 145;
+            jjmatchedKind = 146;
             jjmatchedPos = 5;
          }
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x800000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x1000000000000L, active2, 0L);
       case 120:
          if ((active0 & 0x200000L) != 0L)
          {
@@ -1682,7 +1692,7 @@
          }
          break;
       case 121:
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x200000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x400000L, active2, 0L);
       default :
          break;
    }
@@ -1702,16 +1712,16 @@
       case 66:
          return jjMoveStringLiteralDfa7_0(active0, 0x4000000L, active1, 0L, active2, 0L);
       case 67:
-         return jjMoveStringLiteralDfa7_0(active0, 0x800000L, active1, 0x122L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0x800000L, active1, 0x244L, active2, 0L);
       case 68:
          if ((active0 & 0x1000000L) != 0L)
          {
             jjmatchedKind = 24;
             jjmatchedPos = 6;
          }
-         else if ((active1 & 0x400000000000000L) != 0L)
+         else if ((active1 & 0x800000000000000L) != 0L)
          {
-            jjmatchedKind = 122;
+            jjmatchedKind = 123;
             jjmatchedPos = 6;
          }
          break;
@@ -1721,55 +1731,50 @@
             jjmatchedKind = 46;
             jjmatchedPos = 6;
          }
-         else if ((active1 & 0x8000000000L) != 0L)
+         else if ((active1 & 0x10000000000L) != 0L)
          {
-            jjmatchedKind = 103;
+            jjmatchedKind = 104;
             jjmatchedPos = 6;
          }
-         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x800000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x1000000000000L, active2, 0L);
       case 71:
-         if ((active1 & 0x80000L) != 0L)
+         if ((active1 & 0x100000L) != 0L)
          {
-            jjmatchedKind = 83;
+            jjmatchedKind = 84;
             jjmatchedPos = 6;
          }
          break;
       case 75:
-         if ((active1 & 0x4000000L) != 0L)
+         if ((active1 & 0x8000000L) != 0L)
          {
-            jjmatchedKind = 90;
+            jjmatchedKind = 91;
             jjmatchedPos = 6;
          }
          break;
       case 77:
-         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x4L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x8L, active2, 0L);
       case 78:
-         if ((active1 & 0x800000000000000L) != 0L)
+         if ((active1 & 0x1000000000000000L) != 0L)
          {
-            jjmatchedKind = 123;
+            jjmatchedKind = 124;
             jjmatchedPos = 6;
          }
-         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x40080000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x80100000000000L, active2, 0L);
       case 79:
-         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x400000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x800000000000L, active2, 0L);
       case 80:
-         if ((active1 & 0x8L) != 0L)
+         if ((active1 & 0x10L) != 0L)
          {
-            jjmatchedKind = 67;
+            jjmatchedKind = 68;
             jjmatchedPos = 6;
          }
-         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x200001L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x400002L, active2, 0L);
       case 82:
-         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x100058000000L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x2000b0000000L, active2, 0L);
       case 83:
-         if ((active1 & 0x200000000000L) != 0L)
+         if ((active1 & 0x400000000000L) != 0L)
          {
-            jjmatchedKind = 109;
-            jjmatchedPos = 6;
-         }
-         else if ((active1 & 0x10000000000000L) != 0L)
-         {
-            jjmatchedKind = 116;
+            jjmatchedKind = 110;
             jjmatchedPos = 6;
          }
          else if ((active1 & 0x20000000000000L) != 0L)
@@ -1777,33 +1782,38 @@
             jjmatchedKind = 117;
             jjmatchedPos = 6;
          }
-         return jjMoveStringLiteralDfa7_0(active0, 0x8000000000000000L, active1, 0x20000L, active2, 0L);
-      case 84:
-         if ((active2 & 0x200000L) != 0L)
+         else if ((active1 & 0x40000000000000L) != 0L)
          {
-            jjmatchedKind = 149;
+            jjmatchedKind = 118;
             jjmatchedPos = 6;
          }
-         return jjMoveStringLiteralDfa7_0(active0, 0x20000000000000L, active1, 0x800000L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x40001L, active2, 0L);
+      case 84:
+         if ((active2 & 0x400000L) != 0L)
+         {
+            jjmatchedKind = 150;
+            jjmatchedPos = 6;
+         }
+         return jjMoveStringLiteralDfa7_0(active0, 0x40000000000000L, active1, 0x1000000L, active2, 0L);
       case 85:
          return jjMoveStringLiteralDfa7_0(active0, 0x8000000L, active1, 0L, active2, 0L);
       case 95:
-         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x40000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x80000000000L, active2, 0L);
       case 97:
          return jjMoveStringLiteralDfa7_0(active0, 0x40000000000L, active1, 0L, active2, 0L);
       case 98:
          return jjMoveStringLiteralDfa7_0(active0, 0x4000000L, active1, 0L, active2, 0L);
       case 99:
-         return jjMoveStringLiteralDfa7_0(active0, 0x800000L, active1, 0x122L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0x800000L, active1, 0x244L, active2, 0L);
       case 100:
          if ((active0 & 0x1000000L) != 0L)
          {
             jjmatchedKind = 24;
             jjmatchedPos = 6;
          }
-         else if ((active1 & 0x400000000000000L) != 0L)
+         else if ((active1 & 0x800000000000000L) != 0L)
          {
-            jjmatchedKind = 122;
+            jjmatchedKind = 123;
             jjmatchedPos = 6;
          }
          break;
@@ -1813,55 +1823,50 @@
             jjmatchedKind = 46;
             jjmatchedPos = 6;
          }
-         else if ((active1 & 0x8000000000L) != 0L)
+         else if ((active1 & 0x10000000000L) != 0L)
          {
-            jjmatchedKind = 103;
+            jjmatchedKind = 104;
             jjmatchedPos = 6;
          }
-         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x800000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x1000000000000L, active2, 0L);
       case 103:
-         if ((active1 & 0x80000L) != 0L)
+         if ((active1 & 0x100000L) != 0L)
          {
-            jjmatchedKind = 83;
+            jjmatchedKind = 84;
             jjmatchedPos = 6;
          }
          break;
       case 107:
-         if ((active1 & 0x4000000L) != 0L)
+         if ((active1 & 0x8000000L) != 0L)
          {
-            jjmatchedKind = 90;
+            jjmatchedKind = 91;
             jjmatchedPos = 6;
          }
          break;
       case 109:
-         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x4L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x8L, active2, 0L);
       case 110:
-         if ((active1 & 0x800000000000000L) != 0L)
+         if ((active1 & 0x1000000000000000L) != 0L)
          {
-            jjmatchedKind = 123;
+            jjmatchedKind = 124;
             jjmatchedPos = 6;
          }
-         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x40080000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x80100000000000L, active2, 0L);
       case 111:
-         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x400000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x800000000000L, active2, 0L);
       case 112:
-         if ((active1 & 0x8L) != 0L)
+         if ((active1 & 0x10L) != 0L)
          {
-            jjmatchedKind = 67;
+            jjmatchedKind = 68;
             jjmatchedPos = 6;
          }
-         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x200001L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x400002L, active2, 0L);
       case 114:
-         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x100058000000L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x2000b0000000L, active2, 0L);
       case 115:
-         if ((active1 & 0x200000000000L) != 0L)
+         if ((active1 & 0x400000000000L) != 0L)
          {
-            jjmatchedKind = 109;
-            jjmatchedPos = 6;
-         }
-         else if ((active1 & 0x10000000000000L) != 0L)
-         {
-            jjmatchedKind = 116;
+            jjmatchedKind = 110;
             jjmatchedPos = 6;
          }
          else if ((active1 & 0x20000000000000L) != 0L)
@@ -1869,14 +1874,19 @@
             jjmatchedKind = 117;
             jjmatchedPos = 6;
          }
-         return jjMoveStringLiteralDfa7_0(active0, 0x8000000000000000L, active1, 0x20000L, active2, 0L);
-      case 116:
-         if ((active2 & 0x200000L) != 0L)
+         else if ((active1 & 0x40000000000000L) != 0L)
          {
-            jjmatchedKind = 149;
+            jjmatchedKind = 118;
             jjmatchedPos = 6;
          }
-         return jjMoveStringLiteralDfa7_0(active0, 0x20000000000000L, active1, 0x800000L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x40001L, active2, 0L);
+      case 116:
+         if ((active2 & 0x400000L) != 0L)
+         {
+            jjmatchedKind = 150;
+            jjmatchedPos = 6;
+         }
+         return jjMoveStringLiteralDfa7_0(active0, 0x40000000000000L, active1, 0x1000000L, active2, 0L);
       case 117:
          return jjMoveStringLiteralDfa7_0(active0, 0x8000000L, active1, 0L, active2, 0L);
       default :
@@ -1894,40 +1904,40 @@
    switch(curChar)
    {
       case 65:
-         return jjMoveStringLiteralDfa8_0(active0, 0x8000000000000000L, active1, 0x8000000L);
+         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x10000001L);
       case 67:
-         return jjMoveStringLiteralDfa8_0(active0, 0x8000000L, active1, 0x800000L);
+         return jjMoveStringLiteralDfa8_0(active0, 0x8000000L, active1, 0x1000000L);
       case 69:
          if ((active0 & 0x4000000L) != 0L)
          {
             jjmatchedKind = 26;
             jjmatchedPos = 7;
          }
-         else if ((active1 & 0x2L) != 0L)
+         else if ((active1 & 0x4L) != 0L)
          {
-            jjmatchedKind = 65;
+            jjmatchedKind = 66;
             jjmatchedPos = 7;
          }
-         else if ((active1 & 0x100L) != 0L)
+         else if ((active1 & 0x200L) != 0L)
          {
-            jjmatchedKind = 72;
+            jjmatchedKind = 73;
             jjmatchedPos = 7;
          }
-         else if ((active1 & 0x200000L) != 0L)
+         else if ((active1 & 0x400000L) != 0L)
          {
-            jjmatchedKind = 85;
+            jjmatchedKind = 86;
             jjmatchedPos = 7;
          }
-         else if ((active1 & 0x40000000000000L) != 0L)
+         else if ((active1 & 0x80000000000000L) != 0L)
          {
-            jjmatchedKind = 118;
+            jjmatchedKind = 119;
             jjmatchedPos = 7;
          }
          break;
       case 70:
-         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x40000000000L);
+         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x80000000000L);
       case 73:
-         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x10000000L);
+         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x20000000L);
       case 76:
          if ((active0 & 0x40000000000L) != 0L)
          {
@@ -1936,32 +1946,32 @@
          }
          break;
       case 77:
-         if ((active1 & 0x40000000L) != 0L)
+         if ((active1 & 0x80000000L) != 0L)
          {
-            jjmatchedKind = 94;
+            jjmatchedKind = 95;
             jjmatchedPos = 7;
          }
          break;
       case 79:
-         return jjMoveStringLiteralDfa8_0(active0, 0x20000000000000L, active1, 0x21L);
+         return jjMoveStringLiteralDfa8_0(active0, 0x40000000000000L, active1, 0x42L);
       case 80:
-         if ((active1 & 0x4L) != 0L)
+         if ((active1 & 0x8L) != 0L)
          {
-            jjmatchedKind = 66;
+            jjmatchedKind = 67;
             jjmatchedPos = 7;
          }
          break;
       case 82:
-         if ((active1 & 0x800000000000L) != 0L)
+         if ((active1 & 0x1000000000000L) != 0L)
          {
-            jjmatchedKind = 111;
+            jjmatchedKind = 112;
             jjmatchedPos = 7;
          }
-         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x400000000000L);
+         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x800000000000L);
       case 83:
-         if ((active1 & 0x80000000000L) != 0L)
+         if ((active1 & 0x100000000000L) != 0L)
          {
-            jjmatchedKind = 107;
+            jjmatchedKind = 108;
             jjmatchedPos = 7;
          }
          break;
@@ -1971,47 +1981,47 @@
             jjmatchedKind = 23;
             jjmatchedPos = 7;
          }
-         else if ((active1 & 0x20000L) != 0L)
+         else if ((active1 & 0x40000L) != 0L)
          {
-            jjmatchedKind = 81;
+            jjmatchedKind = 82;
             jjmatchedPos = 7;
          }
-         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x100000000000L);
+         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x200000000000L);
       case 97:
-         return jjMoveStringLiteralDfa8_0(active0, 0x8000000000000000L, active1, 0x8000000L);
+         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x10000001L);
       case 99:
-         return jjMoveStringLiteralDfa8_0(active0, 0x8000000L, active1, 0x800000L);
+         return jjMoveStringLiteralDfa8_0(active0, 0x8000000L, active1, 0x1000000L);
       case 101:
          if ((active0 & 0x4000000L) != 0L)
          {
             jjmatchedKind = 26;
             jjmatchedPos = 7;
          }
-         else if ((active1 & 0x2L) != 0L)
+         else if ((active1 & 0x4L) != 0L)
          {
-            jjmatchedKind = 65;
+            jjmatchedKind = 66;
             jjmatchedPos = 7;
          }
-         else if ((active1 & 0x100L) != 0L)
+         else if ((active1 & 0x200L) != 0L)
          {
-            jjmatchedKind = 72;
+            jjmatchedKind = 73;
             jjmatchedPos = 7;
          }
-         else if ((active1 & 0x200000L) != 0L)
+         else if ((active1 & 0x400000L) != 0L)
          {
-            jjmatchedKind = 85;
+            jjmatchedKind = 86;
             jjmatchedPos = 7;
          }
-         else if ((active1 & 0x40000000000000L) != 0L)
+         else if ((active1 & 0x80000000000000L) != 0L)
          {
-            jjmatchedKind = 118;
+            jjmatchedKind = 119;
             jjmatchedPos = 7;
          }
          break;
       case 102:
-         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x40000000000L);
+         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x80000000000L);
       case 105:
-         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x10000000L);
+         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x20000000L);
       case 108:
          if ((active0 & 0x40000000000L) != 0L)
          {
@@ -2020,32 +2030,32 @@
          }
          break;
       case 109:
-         if ((active1 & 0x40000000L) != 0L)
+         if ((active1 & 0x80000000L) != 0L)
          {
-            jjmatchedKind = 94;
+            jjmatchedKind = 95;
             jjmatchedPos = 7;
          }
          break;
       case 111:
-         return jjMoveStringLiteralDfa8_0(active0, 0x20000000000000L, active1, 0x21L);
+         return jjMoveStringLiteralDfa8_0(active0, 0x40000000000000L, active1, 0x42L);
       case 112:
-         if ((active1 & 0x4L) != 0L)
+         if ((active1 & 0x8L) != 0L)
          {
-            jjmatchedKind = 66;
+            jjmatchedKind = 67;
             jjmatchedPos = 7;
          }
          break;
       case 114:
-         if ((active1 & 0x800000000000L) != 0L)
+         if ((active1 & 0x1000000000000L) != 0L)
          {
-            jjmatchedKind = 111;
+            jjmatchedKind = 112;
             jjmatchedPos = 7;
          }
-         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x400000000000L);
+         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x800000000000L);
       case 115:
-         if ((active1 & 0x80000000000L) != 0L)
+         if ((active1 & 0x100000000000L) != 0L)
          {
-            jjmatchedKind = 107;
+            jjmatchedKind = 108;
             jjmatchedPos = 7;
          }
          break;
@@ -2055,12 +2065,12 @@
             jjmatchedKind = 23;
             jjmatchedPos = 7;
          }
-         else if ((active1 & 0x20000L) != 0L)
+         else if ((active1 & 0x40000L) != 0L)
          {
-            jjmatchedKind = 81;
+            jjmatchedKind = 82;
             jjmatchedPos = 7;
          }
-         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x100000000000L);
+         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x200000000000L);
       default :
          break;
    }
@@ -2076,52 +2086,52 @@
    switch(curChar)
    {
       case 67:
+         if ((active1 & 0x20000000L) != 0L)
+         {
+            jjmatchedKind = 93;
+            jjmatchedPos = 8;
+         }
+         break;
+      case 69:
+         if ((active1 & 0x800000000000L) != 0L)
+         {
+            jjmatchedKind = 111;
+            jjmatchedPos = 8;
+         }
+         break;
+      case 72:
+         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x1000000L);
+      case 76:
          if ((active1 & 0x10000000L) != 0L)
          {
             jjmatchedKind = 92;
             jjmatchedPos = 8;
          }
          break;
-      case 69:
-         if ((active1 & 0x400000000000L) != 0L)
-         {
-            jjmatchedKind = 110;
-            jjmatchedPos = 8;
-         }
-         break;
-      case 72:
-         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x800000L);
-      case 76:
-         if ((active1 & 0x8000000L) != 0L)
-         {
-            jjmatchedKind = 91;
-            jjmatchedPos = 8;
-         }
-         break;
       case 77:
-         return jjMoveStringLiteralDfa9_0(active0, 0x8000000000000000L, active1, 0L);
+         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x1L);
       case 78:
-         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x20L);
+         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x40L);
       case 79:
-         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x40000000000L);
+         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x80000000000L);
       case 80:
-         if ((active1 & 0x1L) != 0L)
+         if ((active1 & 0x2L) != 0L)
          {
-            jjmatchedKind = 64;
+            jjmatchedKind = 65;
             jjmatchedPos = 8;
          }
          break;
       case 82:
-         if ((active0 & 0x20000000000000L) != 0L)
+         if ((active0 & 0x40000000000000L) != 0L)
          {
-            jjmatchedKind = 53;
+            jjmatchedKind = 54;
             jjmatchedPos = 8;
          }
          break;
       case 83:
-         if ((active1 & 0x100000000000L) != 0L)
+         if ((active1 & 0x200000000000L) != 0L)
          {
-            jjmatchedKind = 108;
+            jjmatchedKind = 109;
             jjmatchedPos = 8;
          }
          break;
@@ -2133,52 +2143,52 @@
          }
          break;
       case 99:
+         if ((active1 & 0x20000000L) != 0L)
+         {
+            jjmatchedKind = 93;
+            jjmatchedPos = 8;
+         }
+         break;
+      case 101:
+         if ((active1 & 0x800000000000L) != 0L)
+         {
+            jjmatchedKind = 111;
+            jjmatchedPos = 8;
+         }
+         break;
+      case 104:
+         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x1000000L);
+      case 108:
          if ((active1 & 0x10000000L) != 0L)
          {
             jjmatchedKind = 92;
             jjmatchedPos = 8;
          }
          break;
-      case 101:
-         if ((active1 & 0x400000000000L) != 0L)
-         {
-            jjmatchedKind = 110;
-            jjmatchedPos = 8;
-         }
-         break;
-      case 104:
-         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x800000L);
-      case 108:
-         if ((active1 & 0x8000000L) != 0L)
-         {
-            jjmatchedKind = 91;
-            jjmatchedPos = 8;
-         }
-         break;
       case 109:
-         return jjMoveStringLiteralDfa9_0(active0, 0x8000000000000000L, active1, 0L);
+         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x1L);
       case 110:
-         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x20L);
+         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x40L);
       case 111:
-         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x40000000000L);
+         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x80000000000L);
       case 112:
-         if ((active1 & 0x1L) != 0L)
+         if ((active1 & 0x2L) != 0L)
          {
-            jjmatchedKind = 64;
+            jjmatchedKind = 65;
             jjmatchedPos = 8;
          }
          break;
       case 114:
-         if ((active0 & 0x20000000000000L) != 0L)
+         if ((active0 & 0x40000000000000L) != 0L)
          {
-            jjmatchedKind = 53;
+            jjmatchedKind = 54;
             jjmatchedPos = 8;
          }
          break;
       case 115:
-         if ((active1 & 0x100000000000L) != 0L)
+         if ((active1 & 0x200000000000L) != 0L)
          {
-            jjmatchedKind = 108;
+            jjmatchedKind = 109;
             jjmatchedPos = 8;
          }
          break;
@@ -2204,38 +2214,38 @@
    switch(curChar)
    {
       case 67:
-         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0x20L);
+         return jjMoveStringLiteralDfa10_0(active1, 0x40L);
       case 69:
-         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0x800000L);
+         return jjMoveStringLiteralDfa10_0(active1, 0x1000000L);
       case 80:
-         if ((active0 & 0x8000000000000000L) != 0L)
+         if ((active1 & 0x1L) != 0L)
          {
-            jjmatchedKind = 63;
+            jjmatchedKind = 64;
             jjmatchedPos = 9;
          }
          break;
       case 82:
-         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0x40000000000L);
+         return jjMoveStringLiteralDfa10_0(active1, 0x80000000000L);
       case 99:
-         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0x20L);
+         return jjMoveStringLiteralDfa10_0(active1, 0x40L);
       case 101:
-         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0x800000L);
+         return jjMoveStringLiteralDfa10_0(active1, 0x1000000L);
       case 112:
-         if ((active0 & 0x8000000000000000L) != 0L)
+         if ((active1 & 0x1L) != 0L)
          {
-            jjmatchedKind = 63;
+            jjmatchedKind = 64;
             jjmatchedPos = 9;
          }
          break;
       case 114:
-         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0x40000000000L);
+         return jjMoveStringLiteralDfa10_0(active1, 0x80000000000L);
       default :
          break;
    }
    return jjMoveNfa_0(0, 9);
 }
-private int jjMoveStringLiteralDfa10_0(long old0, long active0, long old1, long active1){
-   if (((active0 &= old0) | (active1 &= old1)) == 0L)
+private int jjMoveStringLiteralDfa10_0(long old1, long active1){
+   if (((active1 &= old1)) == 0L)
       return jjMoveNfa_0(0, 9);
    try { curChar = input_stream.readChar(); }
    catch(java.io.IOException e) {
@@ -2244,22 +2254,22 @@
    switch(curChar)
    {
       case 65:
-         return jjMoveStringLiteralDfa11_0(active1, 0x20L);
+         return jjMoveStringLiteralDfa11_0(active1, 0x40L);
       case 83:
-         if ((active1 & 0x800000L) != 0L)
+         if ((active1 & 0x1000000L) != 0L)
          {
-            jjmatchedKind = 87;
+            jjmatchedKind = 88;
             jjmatchedPos = 10;
          }
          break;
       case 95:
-         return jjMoveStringLiteralDfa11_0(active1, 0x40000000000L);
+         return jjMoveStringLiteralDfa11_0(active1, 0x80000000000L);
       case 97:
-         return jjMoveStringLiteralDfa11_0(active1, 0x20L);
+         return jjMoveStringLiteralDfa11_0(active1, 0x40L);
       case 115:
-         if ((active1 & 0x800000L) != 0L)
+         if ((active1 & 0x1000000L) != 0L)
          {
-            jjmatchedKind = 87;
+            jjmatchedKind = 88;
             jjmatchedPos = 10;
          }
          break;
@@ -2278,23 +2288,23 @@
    switch(curChar)
    {
       case 84:
-         if ((active1 & 0x20L) != 0L)
+         if ((active1 & 0x40L) != 0L)
          {
-            jjmatchedKind = 69;
+            jjmatchedKind = 70;
             jjmatchedPos = 11;
          }
          break;
       case 85:
-         return jjMoveStringLiteralDfa12_0(active1, 0x40000000000L);
+         return jjMoveStringLiteralDfa12_0(active1, 0x80000000000L);
       case 116:
-         if ((active1 & 0x20L) != 0L)
+         if ((active1 & 0x40L) != 0L)
          {
-            jjmatchedKind = 69;
+            jjmatchedKind = 70;
             jjmatchedPos = 11;
          }
          break;
       case 117:
-         return jjMoveStringLiteralDfa12_0(active1, 0x40000000000L);
+         return jjMoveStringLiteralDfa12_0(active1, 0x80000000000L);
       default :
          break;
    }
@@ -2310,9 +2320,9 @@
    switch(curChar)
    {
       case 82:
-         return jjMoveStringLiteralDfa13_0(active1, 0x40000000000L);
+         return jjMoveStringLiteralDfa13_0(active1, 0x80000000000L);
       case 114:
-         return jjMoveStringLiteralDfa13_0(active1, 0x40000000000L);
+         return jjMoveStringLiteralDfa13_0(active1, 0x80000000000L);
       default :
          break;
    }
@@ -2328,16 +2338,16 @@
    switch(curChar)
    {
       case 73:
-         if ((active1 & 0x40000000000L) != 0L)
+         if ((active1 & 0x80000000000L) != 0L)
          {
-            jjmatchedKind = 106;
+            jjmatchedKind = 107;
             jjmatchedPos = 13;
          }
          break;
       case 105:
-         if ((active1 & 0x40000000000L) != 0L)
+         if ((active1 & 0x80000000000L) != 0L)
          {
-            jjmatchedKind = 106;
+            jjmatchedKind = 107;
             jjmatchedPos = 13;
          }
          break;
@@ -2410,8 +2420,8 @@
                case 0:
                   if ((0x3ff000000000000L & l) != 0L)
                   {
-                     if (kind > 154)
-                        kind = 154;
+                     if (kind > 155)
+                        kind = 155;
                      { jjCheckNAddStates(0, 6); }
                   }
                   else if (curChar == 45)
@@ -2559,8 +2569,8 @@
                      jjstateSet[jjnewStateCnt++] = 32;
                   break;
                case 40:
-                  if ((0x8400000000L & l) != 0L && kind > 166)
-                     kind = 166;
+                  if ((0x8400000000L & l) != 0L && kind > 167)
+                     kind = 167;
                   break;
                case 41:
                   if (curChar == 39)
@@ -2575,8 +2585,8 @@
                      { jjCheckNAddStates(29, 31); }
                   break;
                case 45:
-                  if (curChar == 39 && kind > 167)
-                     kind = 167;
+                  if (curChar == 39 && kind > 168)
+                     kind = 168;
                   break;
                case 46:
                   if (curChar == 34)
@@ -2591,8 +2601,8 @@
                      { jjCheckNAddStates(26, 28); }
                   break;
                case 50:
-                  if (curChar == 34 && kind > 168)
-                     kind = 168;
+                  if (curChar == 34 && kind > 169)
+                     kind = 169;
                   break;
                case 51:
                   if (curChar == 39)
@@ -2616,8 +2626,8 @@
                      { jjAddStates(45, 46); }
                   break;
                case 58:
-                  if (curChar == 39 && kind > 169)
-                     kind = 169;
+                  if (curChar == 39 && kind > 170)
+                     kind = 170;
                   break;
                case 59:
                   if (curChar == 39)
@@ -2653,8 +2663,8 @@
                      { jjAddStates(51, 52); }
                   break;
                case 69:
-                  if (curChar == 34 && kind > 170)
-                     kind = 170;
+                  if (curChar == 34 && kind > 171)
+                     kind = 171;
                   break;
                case 70:
                   if (curChar == 34)
@@ -2689,8 +2699,8 @@
                      { jjCheckNAddStates(20, 22); }
                   break;
                case 78:
-                  if (curChar == 41 && kind > 173)
-                     kind = 173;
+                  if (curChar == 41 && kind > 174)
+                     kind = 174;
                   break;
                case 79:
                   if (curChar == 10)
@@ -2871,15 +2881,15 @@
                case 145:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 154)
-                     kind = 154;
+                  if (kind > 155)
+                     kind = 155;
                   { jjCheckNAddStates(0, 6); }
                   break;
                case 146:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 154)
-                     kind = 154;
+                  if (kind > 155)
+                     kind = 155;
                   { jjCheckNAdd(146); }
                   break;
                case 147:
@@ -2893,8 +2903,8 @@
                case 149:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 155)
-                     kind = 155;
+                  if (kind > 156)
+                     kind = 156;
                   { jjCheckNAdd(149); }
                   break;
                case 150:
@@ -2916,8 +2926,8 @@
                case 155:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 156)
-                     kind = 156;
+                  if (kind > 157)
+                     kind = 157;
                   { jjCheckNAdd(155); }
                   break;
                case 156:
@@ -2931,8 +2941,8 @@
                case 159:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 156)
-                     kind = 156;
+                  if (kind > 157)
+                     kind = 157;
                   { jjCheckNAdd(159); }
                   break;
                case 160:
@@ -2950,8 +2960,8 @@
                case 164:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 156)
-                     kind = 156;
+                  if (kind > 157)
+                     kind = 157;
                   { jjCheckNAdd(164); }
                   break;
                case 165:
@@ -2961,8 +2971,8 @@
                case 166:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 157)
-                     kind = 157;
+                  if (kind > 158)
+                     kind = 158;
                   { jjCheckNAdd(166); }
                   break;
                case 167:
@@ -2976,8 +2986,8 @@
                case 169:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 158)
-                     kind = 158;
+                  if (kind > 159)
+                     kind = 159;
                   { jjCheckNAdd(169); }
                   break;
                case 170:
@@ -2995,8 +3005,8 @@
                case 174:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 159)
-                     kind = 159;
+                  if (kind > 160)
+                     kind = 160;
                   { jjCheckNAdd(174); }
                   break;
                case 175:
@@ -3022,8 +3032,8 @@
                case 181:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 159)
-                     kind = 159;
+                  if (kind > 160)
+                     kind = 160;
                   { jjCheckNAdd(181); }
                   break;
                case 182:
@@ -3037,8 +3047,8 @@
                case 185:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 159)
-                     kind = 159;
+                  if (kind > 160)
+                     kind = 160;
                   { jjCheckNAdd(185); }
                   break;
                case 186:
@@ -3048,8 +3058,8 @@
                case 187:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 160)
-                     kind = 160;
+                  if (kind > 161)
+                     kind = 161;
                   { jjCheckNAdd(187); }
                   break;
                case 188:
@@ -3063,8 +3073,8 @@
                case 190:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 161)
-                     kind = 161;
+                  if (kind > 162)
+                     kind = 162;
                   { jjCheckNAdd(190); }
                   break;
                case 191:
@@ -3082,8 +3092,8 @@
                case 195:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 162)
-                     kind = 162;
+                  if (kind > 163)
+                     kind = 163;
                   { jjCheckNAdd(195); }
                   break;
                case 196:
@@ -3109,8 +3119,8 @@
                case 202:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 162)
-                     kind = 162;
+                  if (kind > 163)
+                     kind = 163;
                   { jjCheckNAdd(202); }
                   break;
                case 203:
@@ -3124,8 +3134,8 @@
                case 206:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 162)
-                     kind = 162;
+                  if (kind > 163)
+                     kind = 163;
                   { jjCheckNAdd(206); }
                   break;
                default : break;
@@ -3225,8 +3235,8 @@
                   { jjCheckNAddStates(32, 37); }
                   break;
                case 28:
-                  if ((0x200000002L & l) != 0L && kind > 135)
-                     kind = 135;
+                  if ((0x200000002L & l) != 0L && kind > 136)
+                     kind = 136;
                   break;
                case 29:
                   if ((0x10000000100000L & l) != 0L)
@@ -3265,8 +3275,8 @@
                      jjstateSet[jjnewStateCnt++] = 40;
                   break;
                case 40:
-                  if ((0x14404410000000L & l) != 0L && kind > 166)
-                     kind = 166;
+                  if ((0x14404410000000L & l) != 0L && kind > 167)
+                     kind = 167;
                   break;
                case 42:
                   if ((0xffffffffefffffffL & l) != 0L)
@@ -3327,8 +3337,8 @@
                   { jjCheckNAddStates(59, 64); }
                   break;
                case 86:
-                  if (curChar == 93 && kind > 178)
-                     kind = 178;
+                  if (curChar == 93 && kind > 179)
+                     kind = 179;
                   break;
                case 89:
                   if ((0x7fffffe07fffffeL & l) != 0L)
@@ -3427,8 +3437,8 @@
                   { jjCheckNAddStates(78, 83); }
                   break;
                case 119:
-                  if ((0x200000002L & l) != 0L && kind > 136)
-                     kind = 136;
+                  if ((0x200000002L & l) != 0L && kind > 137)
+                     kind = 137;
                   break;
                case 120:
                   if ((0x10000000100000L & l) != 0L)
@@ -3466,8 +3476,8 @@
                   { jjCheckNAddStates(87, 92); }
                   break;
                case 134:
-                  if ((0x2000000020L & l) != 0L && kind > 137)
-                     kind = 137;
+                  if ((0x2000000020L & l) != 0L && kind > 138)
+                     kind = 138;
                   break;
                case 135:
                   if ((0x4000000040000L & l) != 0L)
@@ -3799,11 +3809,11 @@
 null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
 null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
 null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
-null, null, null, null, "\50", "\51", null, "\173", "\175", "\133", "\135", null, 
-"\73", "\54", "\56", "\75", "\41\75", "\76", "\74", "\74\75", "\76\75", "\76\76", 
-"\74\74", "\41", "\176", "\72", "\174\174", "\46\46", "\53", "\55", "\52", "\57", 
-"\136\136", "\100", "\72\75", "\174", "\136", "\55\76", "\74\55", "\77", null, null, null, 
-null, null, null, null, null, null, null, null, };
+null, null, null, null, null, "\50", "\51", null, "\173", "\175", "\133", "\135", 
+null, "\73", "\54", "\56", "\75", "\41\75", "\76", "\74", "\74\75", "\76\75", 
+"\76\76", "\74\74", "\41", "\176", "\72", "\174\174", "\46\46", "\53", "\55", "\52", 
+"\57", "\136\136", "\100", "\72\75", "\174", "\136", "\55\76", "\74\55", "\77", null, 
+null, null, null, null, null, null, null, null, null, null, };
 protected Token jjFillToken()
 {
    final Token t;
@@ -3990,7 +4000,7 @@
    "DEFAULT",
 };
 static final long[] jjtoToken = {
-   0xfffffffffff9fe01L, 0xffffffffffffffffL, 0xffffffc7fdffffffL, 0x7fffL, 
+   0xfffffffffff9fe01L, 0xffffffffffffffffL, 0xffffff8ffbffffffL, 0xffffL, 
 };
 static final long[] jjtoSkip = {
    0x7eL, 0x0L, 0x0L, 0x0L, 
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/sparql_11/SPARQLParser11.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/sparql_11/SPARQLParser11.java
index 3258ff1..1924a19 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/sparql_11/SPARQLParser11.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/sparql_11/SPARQLParser11.java
@@ -2019,10 +2019,11 @@
     }
   }
 
-  final public void InlineDataOneVar() throws ParseException {Var v ; Node n ; Token t ;
+  final public void InlineDataOneVar() throws ParseException {Var v ; Node n ; Token t ; ; int beginLine; int beginColumn;
     v = Var();
 emitDataBlockVariable(v) ;
     t = jj_consume_token(LBRACE);
+beginLine = t.beginLine; beginColumn = t.beginColumn; t = null;
     label_15:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
@@ -2053,9 +2054,9 @@
         break label_15;
       }
       n = DataBlockValue();
-startDataBlockValueRow(-1, -1) ;
-      emitDataBlockValue(n, -1, -1) ;
-      finishDataBlockValueRow(-1, -1) ;
+startDataBlockValueRow(beginLine, beginColumn) ;
+      emitDataBlockValue(n, beginLine, beginColumn) ;
+      finishDataBlockValueRow(beginLine, beginColumn) ;
     }
     t = jj_consume_token(RBRACE);
   }
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/resultset/ResultSetCompare.java b/jena-arq/src/main/java/org/apache/jena/sparql/resultset/ResultSetCompare.java
index 57516eb..7a1b518 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/resultset/ResultSetCompare.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/resultset/ResultSetCompare.java
@@ -22,12 +22,17 @@
 
 import org.apache.jena.atlas.iterator.Iter ;
 import org.apache.jena.graph.Node ;
-import org.apache.jena.query.* ;
+import org.apache.jena.graph.Node_Triple;
+import org.apache.jena.graph.Triple;
+import org.apache.jena.query.ResultSet;
+import org.apache.jena.query.ResultSetFactory;
+import org.apache.jena.query.ResultSetRewindable;
 import org.apache.jena.rdf.model.Model ;
 import org.apache.jena.sparql.core.Var ;
 import org.apache.jena.sparql.engine.binding.Binding ;
 import org.apache.jena.sparql.engine.binding.BindingUtils ;
 import org.apache.jena.sparql.util.EqualityTest;
+import org.apache.jena.sparql.util.Iso;
 import org.apache.jena.sparql.util.NodeIsomorphismMap ;
 import org.apache.jena.sparql.util.NodeUtils ;
 
@@ -323,10 +328,16 @@
                 return literalTest.equal(n1, n2) ;
             
             if ( n1.isBlank() && n2.isBlank() )
-                return mapping.makeIsomorphic(n1, n2) ;
+                return Iso.nodeIso(n1, n2, mapping);
             
             if ( n1.isVariable() && n2.isVariable() )
                 return mapping.makeIsomorphic(n1, n2) ;
+
+            if ( n1.isNodeTriple() && n2.isNodeTriple() ) {
+                Triple t1 = Node_Triple.triple(n1);
+                Triple t2 = Node_Triple.triple(n2);
+                return  Iso.tripleIso(t1, t2, mapping);
+            }
             
             return false ;
         }
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FormatterElement.java b/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FormatterElement.java
index e3a6aa6..ac68e43 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FormatterElement.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FormatterElement.java
@@ -237,6 +237,17 @@
     }
 
     @Override
+    public void visit(ElementFind el) {
+        out.print("FIND(");
+        out.print("<< ");
+        formatTriple(el.getTriple());
+        out.print(" >>");
+        out.print(" AS ");
+        out.print("?" + el.getVar().getVarName());
+        out.print(")");
+    }
+
+    @Override
     public void visit(ElementData el) {
         QuerySerializer.outputDataBlock(out, el.getVars(), el.getRows(), context);
     }
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/sse/Tags.java b/jena-arq/src/main/java/org/apache/jena/sparql/sse/Tags.java
index 5b90326..071d2df 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/sse/Tags.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/sse/Tags.java
@@ -83,6 +83,7 @@
     public static final String tagDistinct        = "distinct" ;
     public static final String tagReduced         = "reduced" ;
     public static final String tagAssign          = "assign" ;
+    public static final String tagFind            = "find" ;
     public static final String tagExtend          = "extend" ;
     public static final String symAssign          = ":=" ;
     public static final String tagSlice           = "slice" ;
@@ -114,7 +115,6 @@
     public static final String tagExt             = "ext" ;
 
     // Expressions
-    // NB RDF* triple terms use { }. , not << or >>
     // sym => swiggly thing, tag => word-ish thing
 
     public static final String tagExpr            = "expr" ;
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/sse/builders/BuilderOp.java b/jena-arq/src/main/java/org/apache/jena/sparql/sse/builders/BuilderOp.java
index 2382a88..fc1ff41 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/sse/builders/BuilderOp.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/sse/builders/BuilderOp.java
@@ -94,6 +94,7 @@
         addBuild(Tags.tagAssign,        buildAssign) ;
         addBuild(Tags.tagExtend,        buildExtend) ;
         addBuild(Tags.symAssign,        buildAssign) ;
+        addBuild(Tags.tagFind,          buildFind) ;
         addBuild(Tags.tagSlice,         buildSlice) ;
 
         addBuild(Tags.tagTable,         buildTable) ;
@@ -728,25 +729,34 @@
             return OpExtend.create(sub, x) ;
         }
     } ;
+    
+    final protected Build buildFind = list -> {
+        BuilderLib.checkLength(3, list, "find") ;
+        // Var
+        Item item1 = list.get(1); // var
+        Var var = BuilderNode.buildVar(item1);
+        // Triple
+        Item tItem = list.get(2);
+        BuilderLib.checkList(tItem);
+        Triple triple = BuilderGraph.buildTriple(tItem.getList()) ;
+        
+        return new OpFind(triple, var);
+    };
 
-    final protected Build buildSlice = new Build()
-    {
-        @Override
-        public Op make(ItemList list)
-        {
-            BuilderLib.checkLength(4, list, "slice") ;
-            long start = BuilderNode.buildLong(list, 1, -1) ;
-            long length = BuilderNode.buildLong(list, 2, -1) ;
+    final protected Build buildSlice = list -> {
+        BuilderLib.checkLength(4, list, "slice") ;
+        long start = BuilderNode.buildLong(list, 1, -1) ;
+        long length = BuilderNode.buildLong(list, 2, -1) ;
 
-            if ( start == -1 )
-                start = Query.NOLIMIT ;
-            if ( length == -1 )
-                length = Query.NOLIMIT ;
+        if ( start == -1 )
+            start = Query.NOLIMIT ;
+        if ( length == -1 )
+            length = Query.NOLIMIT ;
 
-            Op sub = build(list, 3) ;
-            return new OpSlice(sub, start, length) ;
-        }
-    } ;
+        Op sub = build(list, 3) ;
+        return new OpSlice(sub, start, length) ;
+    };
+
 
     final protected Build buildNull = new Build()
     {
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/sse/lang/parser/SSE_ParserCore.java b/jena-arq/src/main/java/org/apache/jena/sparql/sse/lang/parser/SSE_ParserCore.java
index e99eb96..6b447d6 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/sse/lang/parser/SSE_ParserCore.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/sse/lang/parser/SSE_ParserCore.java
@@ -68,7 +68,7 @@
     case STRING_LITERAL2:
     case STRING_LITERAL_LONG1:
     case STRING_LITERAL_LONG2:
-    case LBRACE:
+    case LT2:
     case SYMBOL:{
       Term();
       label_2:
@@ -192,8 +192,8 @@
       case STRING_LITERAL_LONG1:
       case STRING_LITERAL_LONG2:
       case LPAREN:
-      case LBRACE:
       case LBRACKET:
+      case LT2:
       case SYMBOL:{
         ;
         break;
@@ -224,7 +224,7 @@
     case STRING_LITERAL2:
     case STRING_LITERAL_LONG1:
     case STRING_LITERAL_LONG2:
-    case LBRACE:{
+    case LT2:{
       RDFTerm();
       break;
       }
@@ -264,7 +264,7 @@
       BlankNode();
       break;
       }
-    case LBRACE:{
+    case LT2:{
       TripleTerm();
       break;
       }
@@ -339,7 +339,7 @@
   }
 
   final public void TripleTerm() throws ParseException {Token t1 = null ; Token t2 = null ;
-    t1 = jj_consume_token(LBRACE);
+    t1 = jj_consume_token(LT2);
     label_8:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
@@ -396,7 +396,7 @@
       }
       jj_consume_token(WS);
     }
-    t2 = jj_consume_token(RBRACE);
+    t2 = jj_consume_token(GT2);
 tripleTermFinish(t2.beginLine, t2.beginColumn);
   }
 
@@ -515,10 +515,10 @@
       jj_la1_init_1();
    }
    private static void jj_la1_init_0() {
-      jj_la1_0 = new int[] {0x2,0x2,0x2be1df0,0x2,0x2,0x2,0x2,0x2200000,0x2be1df0,0x9e1df0,0x9e1df0,0x180,0x1e1c00,0x2,0x2,0x2,0x2,0x1e0000,0x30,0x18000000,0x18000000,0x1c00,};
+      jj_la1_0 = new int[] {0x2,0x2,0xa3e1df0,0x2,0x2,0x2,0x2,0x2200000,0xa3e1df0,0x81e1df0,0x81e1df0,0x180,0x1e1c00,0x2,0x2,0x2,0x2,0x1e0000,0x30,0x60000000,0x60000000,0x1c00,};
    }
    private static void jj_la1_init_1() {
-      jj_la1_1 = new int[] {0x0,0x0,0x200,0x0,0x0,0x0,0x0,0x0,0x200,0x200,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+      jj_la1_1 = new int[] {0x0,0x0,0x800,0x0,0x0,0x0,0x0,0x0,0x800,0x800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
    }
 
   /** Constructor with InputStream. */
@@ -635,7 +635,7 @@
   /** Generate ParseException. */
   public ParseException generateParseException() {
     jj_expentries.clear();
-    boolean[] la1tokens = new boolean[43];
+    boolean[] la1tokens = new boolean[45];
     if (jj_kind >= 0) {
       la1tokens[jj_kind] = true;
       jj_kind = -1;
@@ -652,7 +652,7 @@
         }
       }
     }
-    for (int i = 0; i < 43; i++) {
+    for (int i = 0; i < 45; i++) {
       if (la1tokens[i]) {
         jj_expentry = new int[1];
         jj_expentry[0] = i;
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/sse/lang/parser/SSE_ParserCoreConstants.java b/jena-arq/src/main/java/org/apache/jena/sparql/sse/lang/parser/SSE_ParserCoreConstants.java
index 596ef29..5a82a1f 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/sse/lang/parser/SSE_ParserCoreConstants.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/sse/lang/parser/SSE_ParserCoreConstants.java
@@ -80,37 +80,41 @@
   /** RegularExpression Id. */
   int RBRACKET = 26;
   /** RegularExpression Id. */
-  int DATATYPE = 27;
+  int LT2 = 27;
   /** RegularExpression Id. */
-  int LANGTAG = 28;
+  int GT2 = 28;
   /** RegularExpression Id. */
-  int AT = 29;
+  int DATATYPE = 29;
   /** RegularExpression Id. */
-  int A2Z = 30;
+  int LANGTAG = 30;
   /** RegularExpression Id. */
-  int A2ZN = 31;
+  int AT = 31;
   /** RegularExpression Id. */
-  int PN_CHARS_BASE = 32;
+  int A2Z = 32;
   /** RegularExpression Id. */
-  int PN_CHARS_U = 33;
+  int A2ZN = 33;
   /** RegularExpression Id. */
-  int PN_CHARS = 34;
+  int PN_CHARS_BASE = 34;
   /** RegularExpression Id. */
-  int PN_PREFIX = 35;
+  int PN_CHARS_U = 35;
   /** RegularExpression Id. */
-  int PN_LOCAL = 36;
+  int PN_CHARS = 36;
   /** RegularExpression Id. */
-  int VARNAME = 37;
+  int PN_PREFIX = 37;
   /** RegularExpression Id. */
-  int SYM = 38;
+  int PN_LOCAL = 38;
   /** RegularExpression Id. */
-  int SYM1 = 39;
+  int VARNAME = 39;
   /** RegularExpression Id. */
-  int SYM_ESC = 40;
+  int SYM = 40;
   /** RegularExpression Id. */
-  int SYMBOL = 41;
+  int SYM1 = 41;
   /** RegularExpression Id. */
-  int UNKNOWN = 42;
+  int SYM_ESC = 42;
+  /** RegularExpression Id. */
+  int SYMBOL = 43;
+  /** RegularExpression Id. */
+  int UNKNOWN = 44;
 
   /** Lexical state. */
   int DEFAULT = 0;
@@ -144,6 +148,8 @@
     "\"}\"",
     "\"[\"",
     "\"]\"",
+    "\"<<\"",
+    "\">>\"",
     "\"^^\"",
     "<LANGTAG>",
     "\"@\"",
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/sse/lang/parser/SSE_ParserCoreTokenManager.java b/jena-arq/src/main/java/org/apache/jena/sparql/sse/lang/parser/SSE_ParserCoreTokenManager.java
index 86705f4..249bb45 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/sse/lang/parser/SSE_ParserCoreTokenManager.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/sse/lang/parser/SSE_ParserCoreTokenManager.java
@@ -30,6 +30,18 @@
 private final int jjStopStringLiteralDfa_0(int pos, long active0){
    switch (pos)
    {
+      case 0:
+         if ((active0 & 0x8000000L) != 0L)
+         {
+            jjmatchedKind = 43;
+            return 94;
+         }
+         if ((active0 & 0x10000000L) != 0L)
+         {
+            jjmatchedKind = 43;
+            return 66;
+         }
+         return -1;
       default :
          return -1;
    }
@@ -50,12 +62,16 @@
          return jjStopAtPos(0, 21);
       case 41:
          return jjStopAtPos(0, 22);
+      case 60:
+         return jjMoveStringLiteralDfa1_0(0x8000000L);
+      case 62:
+         return jjMoveStringLiteralDfa1_0(0x10000000L);
       case 91:
          return jjStopAtPos(0, 25);
       case 93:
          return jjStopAtPos(0, 26);
       case 94:
-         return jjMoveStringLiteralDfa1_0(0x8000000L);
+         return jjMoveStringLiteralDfa1_0(0x20000000L);
       case 123:
          return jjStopAtPos(0, 23);
       case 125:
@@ -72,10 +88,18 @@
    }
    switch(curChar)
    {
-      case 94:
+      case 60:
          if ((active0 & 0x8000000L) != 0L)
             return jjStopAtPos(1, 27);
          break;
+      case 62:
+         if ((active0 & 0x10000000L) != 0L)
+            return jjStopAtPos(1, 28);
+         break;
+      case 94:
+         if ((active0 & 0x20000000L) != 0L)
+            return jjStopAtPos(1, 29);
+         break;
       default :
          break;
    }
@@ -120,7 +144,7 @@
 private int jjMoveNfa_0(int startState, int curPos)
 {
    int startsAt = 0;
-   jjnewStateCnt = 93;
+   jjnewStateCnt = 94;
    int i = 1;
    jjstateSet[0] = startState;
    int kind = 0x7fffffff;
@@ -135,12 +159,27 @@
          {
             switch(jjstateSet[--i])
             {
+               case 94:
+                  if ((0xaffffc7affffc9ffL & l) != 0L)
+                  {
+                     if (kind > 43)
+                        kind = 43;
+                     { jjCheckNAdd(66); }
+                  }
+                  else if (curChar == 62)
+                  {
+                     if (kind > 4)
+                        kind = 4;
+                  }
+                  if ((0xaffffffe00000000L & l) != 0L)
+                     { jjCheckNAddTwoStates(12, 13); }
+                  break;
                case 0:
                   if ((0xfffffc7affffc9ffL & l) != 0L)
                   {
-                     if (kind > 41)
-                        kind = 41;
-                     { jjCheckNAdd(65); }
+                     if (kind > 43)
+                        kind = 43;
+                     { jjCheckNAdd(66); }
                   }
                   else if ((0x100003600L & l) != 0L)
                   {
@@ -159,8 +198,13 @@
                   }
                   else if ((0x280000000000L & l) != 0L)
                      { jjCheckNAddStates(7, 10); }
+                  else if ((0x5000000000000000L & l) != 0L)
+                  {
+                     if (kind > 43)
+                        kind = 43;
+                  }
                   else if (curChar == 46)
-                     { jjCheckNAddTwoStates(76, 89); }
+                     { jjCheckNAddTwoStates(77, 90); }
                   else if (curChar == 34)
                      { jjCheckNAddStates(11, 13); }
                   else if (curChar == 39)
@@ -171,8 +215,6 @@
                         kind = 5;
                      jjstateSet[jjnewStateCnt++] = 18;
                   }
-                  else if (curChar == 60)
-                     { jjCheckNAddTwoStates(12, 13); }
                   else if (curChar == 59)
                   {
                      if (kind > 3)
@@ -189,8 +231,10 @@
                   {
                      if (kind > 7)
                         kind = 7;
-                     { jjCheckNAddTwoStates(67, 69); }
+                     { jjCheckNAddTwoStates(68, 70); }
                   }
+                  if (curChar == 60)
+                     { jjCheckNAddTwoStates(12, 13); }
                   break;
                case 1:
                   if (curChar != 35)
@@ -425,143 +469,153 @@
                case 63:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 28)
-                     kind = 28;
+                  if (kind > 30)
+                     kind = 30;
                   { jjCheckNAddTwoStates(62, 63); }
                   break;
                case 64:
+                  if ((0x5000000000000000L & l) != 0L && kind > 43)
+                     kind = 43;
+                  break;
                case 65:
                   if ((0xfffffc7affffc9ffL & l) == 0L)
                      break;
-                  if (kind > 41)
-                     kind = 41;
-                  { jjCheckNAdd(65); }
+                  if (kind > 43)
+                     kind = 43;
+                  { jjCheckNAdd(66); }
                   break;
                case 66:
+                  if ((0xaffffc7affffc9ffL & l) == 0L)
+                     break;
+                  if (kind > 43)
+                     kind = 43;
+                  { jjCheckNAdd(66); }
+                  break;
+               case 67:
                   if (curChar != 63)
                      break;
                   if (kind > 7)
                      kind = 7;
-                  { jjCheckNAddTwoStates(67, 69); }
+                  { jjCheckNAddTwoStates(68, 70); }
                   break;
-               case 67:
                case 68:
+               case 69:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
                   if (kind > 7)
                      kind = 7;
-                  { jjCheckNAdd(68); }
-                  break;
-               case 69:
-                  if ((0xfffffc7affffc9ffL & l) == 0L)
-                     break;
-                  if (kind > 8)
-                     kind = 8;
                   { jjCheckNAdd(69); }
                   break;
                case 70:
+                  if ((0xaffffc7affffc9ffL & l) == 0L)
+                     break;
+                  if (kind > 8)
+                     kind = 8;
+                  { jjCheckNAdd(70); }
+                  break;
+               case 71:
                   if ((0x280000000000L & l) != 0L)
                      { jjCheckNAddStates(7, 10); }
                   break;
-               case 71:
+               case 72:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
                   if (kind > 10)
                      kind = 10;
-                  { jjCheckNAdd(71); }
-                  break;
-               case 72:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     { jjCheckNAddTwoStates(72, 73); }
+                  { jjCheckNAdd(72); }
                   break;
                case 73:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     { jjCheckNAddTwoStates(73, 74); }
+                  break;
+               case 74:
                   if (curChar != 46)
                      break;
                   if (kind > 11)
                      kind = 11;
-                  { jjCheckNAdd(74); }
-                  break;
-               case 74:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 11)
-                     kind = 11;
-                  { jjCheckNAdd(74); }
+                  { jjCheckNAdd(75); }
                   break;
                case 75:
-                  if (curChar == 46)
-                     { jjCheckNAdd(76); }
-                  break;
-               case 76:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
                   if (kind > 11)
                      kind = 11;
-                  { jjCheckNAdd(76); }
+                  { jjCheckNAdd(75); }
+                  break;
+               case 76:
+                  if (curChar == 46)
+                     { jjCheckNAdd(77); }
                   break;
                case 77:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     { jjCheckNAddTwoStates(77, 78); }
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 11)
+                     kind = 11;
+                  { jjCheckNAdd(77); }
                   break;
                case 78:
-                  if (curChar == 46)
-                     { jjCheckNAddTwoStates(79, 80); }
+                  if ((0x3ff000000000000L & l) != 0L)
+                     { jjCheckNAddTwoStates(78, 79); }
                   break;
                case 79:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     { jjCheckNAddTwoStates(79, 80); }
+                  if (curChar == 46)
+                     { jjCheckNAddTwoStates(80, 81); }
                   break;
-               case 81:
-                  if ((0x280000000000L & l) != 0L)
-                     { jjCheckNAdd(82); }
+               case 80:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     { jjCheckNAddTwoStates(80, 81); }
                   break;
                case 82:
+                  if ((0x280000000000L & l) != 0L)
+                     { jjCheckNAdd(83); }
+                  break;
+               case 83:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
                   if (kind > 12)
                      kind = 12;
-                  { jjCheckNAdd(82); }
+                  { jjCheckNAdd(83); }
                   break;
-               case 83:
+               case 84:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
                   if (kind > 10)
                      kind = 10;
                   { jjCheckNAddStates(0, 6); }
                   break;
-               case 84:
+               case 85:
                   if ((0x3ff000000000000L & l) != 0L)
-                     { jjCheckNAddTwoStates(84, 85); }
-                  break;
-               case 86:
-                  if ((0x280000000000L & l) != 0L)
-                     { jjCheckNAdd(87); }
+                     { jjCheckNAddTwoStates(85, 86); }
                   break;
                case 87:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 12)
-                     kind = 12;
-                  { jjCheckNAdd(87); }
+                  if ((0x280000000000L & l) != 0L)
+                     { jjCheckNAdd(88); }
                   break;
                case 88:
-                  if (curChar == 46)
-                     { jjCheckNAddTwoStates(76, 89); }
-                  break;
-               case 89:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     { jjCheckNAddTwoStates(89, 90); }
-                  break;
-               case 91:
-                  if ((0x280000000000L & l) != 0L)
-                     { jjCheckNAdd(92); }
-                  break;
-               case 92:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
                   if (kind > 12)
                      kind = 12;
-                  { jjCheckNAdd(92); }
+                  { jjCheckNAdd(88); }
+                  break;
+               case 89:
+                  if (curChar == 46)
+                     { jjCheckNAddTwoStates(77, 90); }
+                  break;
+               case 90:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     { jjCheckNAddTwoStates(90, 91); }
+                  break;
+               case 92:
+                  if ((0x280000000000L & l) != 0L)
+                     { jjCheckNAdd(93); }
+                  break;
+               case 93:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 12)
+                     kind = 12;
+                  { jjCheckNAdd(93); }
                   break;
                default : break;
             }
@@ -574,12 +628,21 @@
          {
             switch(jjstateSet[--i])
             {
+               case 94:
+                  { jjCheckNAddTwoStates(12, 13); }
+                  if ((0xd7ffffffd7ffffffL & l) != 0L)
+                  {
+                     if (kind > 43)
+                        kind = 43;
+                     { jjCheckNAdd(66); }
+                  }
+                  break;
                case 0:
                   if ((0xd7ffffff97fffffeL & l) != 0L)
                   {
-                     if (kind > 41)
-                        kind = 41;
-                     { jjCheckNAdd(65); }
+                     if (kind > 43)
+                        kind = 43;
+                     { jjCheckNAdd(66); }
                   }
                   else if (curChar == 64)
                      { jjCheckNAdd(61); }
@@ -601,7 +664,7 @@
                   { jjAddStates(17, 19); }
                   break;
                case 12:
-                  { jjAddStates(40, 41); }
+                  { jjCheckNAddTwoStates(12, 13); }
                   break;
                case 14:
                   if ((0x7fffffe07fffffeL & l) != 0L)
@@ -712,58 +775,58 @@
                case 61:
                   if ((0x7fffffe07fffffeL & l) == 0L)
                      break;
-                  if (kind > 28)
-                     kind = 28;
+                  if (kind > 30)
+                     kind = 30;
                   { jjCheckNAddTwoStates(61, 62); }
                   break;
                case 63:
                   if ((0x7fffffe07fffffeL & l) == 0L)
                      break;
-                  if (kind > 28)
-                     kind = 28;
+                  if (kind > 30)
+                     kind = 30;
                   { jjCheckNAddTwoStates(62, 63); }
                   break;
-               case 64:
+               case 65:
                   if ((0xd7ffffff97fffffeL & l) == 0L)
                      break;
-                  if (kind > 41)
-                     kind = 41;
-                  { jjCheckNAdd(65); }
+                  if (kind > 43)
+                     kind = 43;
+                  { jjCheckNAdd(66); }
                   break;
-               case 65:
+               case 66:
                   if ((0xd7ffffffd7ffffffL & l) == 0L)
                      break;
-                  if (kind > 41)
-                     kind = 41;
-                  { jjCheckNAdd(65); }
+                  if (kind > 43)
+                     kind = 43;
+                  { jjCheckNAdd(66); }
                   break;
-               case 67:
                case 68:
+               case 69:
                   if ((0x7fffffe87fffffeL & l) == 0L)
                      break;
                   if (kind > 7)
                      kind = 7;
-                  { jjCheckNAdd(68); }
+                  { jjCheckNAdd(69); }
                   break;
-               case 69:
+               case 70:
                   if ((0xd7ffffffd7ffffffL & l) == 0L)
                      break;
                   if (kind > 8)
                      kind = 8;
-                  jjstateSet[jjnewStateCnt++] = 69;
+                  jjstateSet[jjnewStateCnt++] = 70;
                   break;
-               case 80:
+               case 81:
+                  if ((0x2000000020L & l) != 0L)
+                     { jjAddStates(40, 41); }
+                  break;
+               case 86:
                   if ((0x2000000020L & l) != 0L)
                      { jjAddStates(42, 43); }
                   break;
-               case 85:
+               case 91:
                   if ((0x2000000020L & l) != 0L)
                      { jjAddStates(44, 45); }
                   break;
-               case 90:
-                  if ((0x2000000020L & l) != 0L)
-                     { jjAddStates(46, 47); }
-                  break;
                default : break;
             }
          } while(i != startsAt);
@@ -779,14 +842,24 @@
          {
             switch(jjstateSet[--i])
             {
+               case 94:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     { jjCheckNAddTwoStates(12, 13); }
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                  {
+                     if (kind > 43)
+                        kind = 43;
+                     { jjCheckNAdd(66); }
+                  }
+                  break;
                case 0:
                   if (jjCanMove_1(hiByte, i1, i2, l1, l2))
                      { jjCheckNAddStates(37, 39); }
                   if (jjCanMove_0(hiByte, i1, i2, l1, l2))
                   {
-                     if (kind > 41)
-                        kind = 41;
-                     { jjCheckNAdd(65); }
+                     if (kind > 43)
+                        kind = 43;
+                     { jjCheckNAdd(66); }
                   }
                   break;
                case 2:
@@ -805,7 +878,7 @@
                   break;
                case 12:
                   if (jjCanMove_0(hiByte, i1, i2, l1, l2))
-                     { jjAddStates(40, 41); }
+                     { jjCheckNAddTwoStates(12, 13); }
                   break;
                case 14:
                   if (jjCanMove_1(hiByte, i1, i2, l1, l2))
@@ -865,34 +938,40 @@
                   if (jjCanMove_0(hiByte, i1, i2, l1, l2))
                      { jjAddStates(31, 34); }
                   break;
-               case 64:
                case 65:
                   if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
                      break;
-                  if (kind > 41)
-                     kind = 41;
-                  { jjCheckNAdd(65); }
+                  if (kind > 43)
+                     kind = 43;
+                  { jjCheckNAdd(66); }
                   break;
-               case 67:
+               case 66:
+                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 43)
+                     kind = 43;
+                  { jjCheckNAdd(66); }
+                  break;
+               case 68:
                   if (!jjCanMove_1(hiByte, i1, i2, l1, l2))
                      break;
                   if (kind > 7)
                      kind = 7;
-                  { jjCheckNAdd(68); }
+                  { jjCheckNAdd(69); }
                   break;
-               case 68:
+               case 69:
                   if (!jjCanMove_2(hiByte, i1, i2, l1, l2))
                      break;
                   if (kind > 7)
                      kind = 7;
-                  { jjCheckNAdd(68); }
+                  { jjCheckNAdd(69); }
                   break;
-               case 69:
+               case 70:
                   if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
                      break;
                   if (kind > 8)
                      kind = 8;
-                  jjstateSet[jjnewStateCnt++] = 69;
+                  jjstateSet[jjnewStateCnt++] = 70;
                   break;
                default : if (i1 == 0 || l1 == 0 || i2 == 0 ||  l2 == 0) break; else break;
             }
@@ -905,16 +984,16 @@
          kind = 0x7fffffff;
       }
       ++curPos;
-      if ((i = jjnewStateCnt) == (startsAt = 93 - (jjnewStateCnt = startsAt)))
+      if ((i = jjnewStateCnt) == (startsAt = 94 - (jjnewStateCnt = startsAt)))
          return curPos;
       try { curChar = input_stream.readChar(); }
       catch(java.io.IOException e) { return curPos; }
    }
 }
 static final int[] jjnextStates = {
-   71, 72, 73, 77, 78, 84, 85, 71, 72, 75, 77, 34, 35, 37, 29, 30, 
+   72, 73, 74, 78, 79, 85, 86, 72, 73, 76, 78, 34, 35, 37, 29, 30, 
    32, 7, 8, 10, 2, 3, 5, 15, 16, 39, 40, 41, 43, 44, 46, 50, 
-   51, 52, 54, 55, 57, 15, 16, 17, 12, 13, 81, 82, 86, 87, 91, 92, 
+   51, 52, 54, 55, 57, 15, 16, 17, 82, 83, 87, 88, 92, 93, 
 };
 private static final boolean jjCanMove_0(int hiByte, int i1, int i2, long l1, long l2)
 {
@@ -981,8 +1060,8 @@
 public static final String[] jjstrLiteralImages = {
 "", null, null, null, null, null, null, null, null, null, null, null, null, 
 null, null, null, null, null, null, null, null, "\50", "\51", "\173", "\175", 
-"\133", "\135", "\136\136", null, null, null, null, null, null, null, null, null, null, 
-null, null, null, null, null, };
+"\133", "\135", "\74\74", "\76\76", "\136\136", null, null, null, null, null, null, 
+null, null, null, null, null, null, null, null, null, };
 protected Token jjFillToken()
 {
    final Token t;
@@ -1144,7 +1223,7 @@
   {
     int i;
     jjround = 0x80000001;
-    for (i = 93; i-- > 0;)
+    for (i = 94; i-- > 0;)
       jjrounds[i] = 0x80000000;
   }
 
@@ -1169,7 +1248,7 @@
    "DEFAULT",
 };
 static final long[] jjtoToken = {
-   0x2001fff1df3L, 
+   0x8007fff1df3L, 
 };
 static final long[] jjtoSkip = {
    0xcL, 
@@ -1179,8 +1258,8 @@
 };
     protected JavaCharStream  input_stream;
 
-    private final int[] jjrounds = new int[93];
-    private final int[] jjstateSet = new int[2 * 93];
+    private final int[] jjrounds = new int[94];
+    private final int[] jjstateSet = new int[2 * 94];
 
     
     protected char curChar;
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/sse/writers/WriterNode.java b/jena-arq/src/main/java/org/apache/jena/sparql/sse/writers/WriterNode.java
index 21582e3..8332e9f 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/sse/writers/WriterNode.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/sse/writers/WriterNode.java
@@ -91,14 +91,13 @@
     {
         if ( node.isNodeTriple() ) {
             Triple t = Node_Triple.triple(node);
-            // special syntax.
-            out.print("{ ");
+            out.print("<< ");
             output(out, t.getSubject(), naming);
             out.print(" ");
             output(out, t.getPredicate(), naming);
             out.print(" ");
             output(out, t.getObject(), naming);
-            out.print(" }");
+            out.print(" >>");
         } else
             out.print(FmtUtils.stringForNode(node, naming)) ;
     }
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/sse/writers/WriterOp.java b/jena-arq/src/main/java/org/apache/jena/sparql/sse/writers/WriterOp.java
index c8ff308..9c9f873 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/sse/writers/WriterOp.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/sse/writers/WriterOp.java
@@ -235,6 +235,16 @@
         }
 
         @Override
+        public void visit(OpFind opFind) {
+            start(opFind, NoNL) ;
+            out.print(opFind.getVar());
+            out.print(" ");
+            formatTriple(opFind.getTriple()) ;
+            out.println() ;
+            finish(opFind) ;
+        }
+
+        @Override
         public void visit(OpProcedure opProc) {
             start(opProc, NoNL) ;
             WriterNode.output(out, opProc.getProcId(), sContext) ;
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/ElementFind.java b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/ElementFind.java
new file mode 100644
index 0000000..b82b302
--- /dev/null
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/ElementFind.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.sparql.syntax;
+
+import java.util.Objects;
+
+import org.apache.jena.graph.Node;
+import org.apache.jena.graph.Node_Triple;
+import org.apache.jena.graph.Triple;
+import org.apache.jena.sparql.ARQException;
+import org.apache.jena.sparql.core.Var;
+import org.apache.jena.sparql.util.NodeIsomorphismMap;
+
+public class ElementFind extends Element {
+    private final Var  var;
+    private final Triple triple;
+
+    public ElementFind(Var v, Node node) {
+        Objects.requireNonNull(node);
+        if ( ! node.isNodeTriple() ) {
+            throw new ARQException("Not a triple term: "+node); 
+        }
+        this.var = v;
+        this.triple = Node_Triple.triple(node);
+    }
+
+    public ElementFind(Var v, Triple triple) {
+        this.var = Objects.requireNonNull(v);
+        this.triple = Objects.requireNonNull(triple);
+    }
+
+    public Var getVar() {
+        return var;
+    }
+
+    public Triple getTriple() {
+        return triple;
+    }
+
+    @Override
+    public boolean equalTo(Element el2, NodeIsomorphismMap isoMap) {
+        if ( !(el2 instanceof ElementFind) )
+            return false;
+        ElementFind f2 = (ElementFind)el2;
+        if ( !this.getVar().equals(f2.getVar()) )
+            return false;
+        if ( !this.getTriple().equals(f2.getTriple()) )
+            return false;
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        return var.hashCode() ^ triple.hashCode();
+    }
+
+    @Override
+    public void visit(ElementVisitor v) {
+        v.visit(this);
+    }
+}
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/ElementVisitor.java b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/ElementVisitor.java
index c1e7cf1..fa7929d 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/ElementVisitor.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/ElementVisitor.java
@@ -25,6 +25,7 @@
     public void visit(ElementFilter el) ;
     public void visit(ElementAssign el) ;
     public void visit(ElementBind el) ;
+    public void visit(ElementFind el) ;
     public void visit(ElementData el) ;
     public void visit(ElementUnion el) ;
     public void visit(ElementOptional el) ;
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/ElementVisitorBase.java b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/ElementVisitorBase.java
index 0e3e445..93bd298 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/ElementVisitorBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/ElementVisitorBase.java
@@ -37,6 +37,9 @@
     public void visit(ElementBind el)           { }
 
     @Override
+    public void visit(ElementFind el)           { }
+
+    @Override
     public void visit(ElementData el)           { }
 
     @Override
@@ -56,16 +59,16 @@
 
     @Override
     public void visit(ElementExists el)         { }
-    
+
     @Override
     public void visit(ElementNotExists el)      { }
-    
+
     @Override
     public void visit(ElementMinus el)          { }
 
     @Override
     public void visit(ElementService el)        { }
-    
+
     @Override
     public void visit(ElementSubQuery el)       { }
 
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/ElementWalker.java b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/ElementWalker.java
index 36c0434..74bd54c 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/ElementWalker.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/ElementWalker.java
@@ -50,26 +50,26 @@
         protected final ElementVisitor proc ;
         protected final ElementVisitor beforeVisitor ;
         protected final ElementVisitor afterVisitor ;
-        
+
         protected EltWalker(ElementVisitor visitor, ElementVisitor beforeVisitor, ElementVisitor afterVisitor)
         { 
             proc = visitor ;
             this.beforeVisitor= beforeVisitor ; 
             this.afterVisitor = afterVisitor ;
         }
-        
+
         private void before(Element elt)
         {
             if ( beforeVisitor != null )
                 elt.visit(beforeVisitor) ;
         }
-        
+
         private void after(Element elt)
         {
             if ( afterVisitor != null )
                 elt.visit(afterVisitor) ;
         }
-        
+
         @Override
         public void visit(ElementTriplesBlock el)
         {
@@ -77,7 +77,7 @@
             proc.visit(el) ;
             after(el) ;
         }
-        
+
         @Override
         public void visit(ElementFilter el)
         {
@@ -93,7 +93,7 @@
             proc.visit(el) ;
             after(el) ;
         }
-        
+
         @Override
         public void visit(ElementBind el)
         {
@@ -101,7 +101,16 @@
             proc.visit(el) ;
             after(el) ;
         }
+
+        @Override
+        public void visit(ElementFind el)
+        {
+            before(el) ;
+            proc.visit(el) ;
+            after(el) ;
+        }
         
+
         @Override
         public void visit(ElementData el)
         {
@@ -109,7 +118,7 @@
             proc.visit(el) ;
             after(el) ;
         }
-        
+
         @Override
         public void visit(ElementUnion el)
         {
@@ -119,7 +128,7 @@
             proc.visit(el) ;
             after(el) ;
         }
-        
+
         @Override
         public void visit(ElementGroup el)
         {
@@ -129,7 +138,7 @@
             proc.visit(el) ;
             after(el) ;
         }
-    
+
         @Override
         public void visit(ElementOptional el)
         {
@@ -139,7 +148,7 @@
             proc.visit(el) ;
             after(el) ;
         }
-        
+
         @Override
         public void visit(ElementDataset el)
         {
@@ -159,7 +168,7 @@
             proc.visit(el) ;
             after(el) ;
         }
-    
+
         @Override
         public void visit(ElementService el)
         {
@@ -197,7 +206,7 @@
             proc.visit(el) ;
             after(el) ;
         }
-        
+
         @Override
         public void visit(ElementSubQuery el)
         {
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/PatternVars.java b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/PatternVars.java
index 247c933..a7e8c7e 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/PatternVars.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/PatternVars.java
@@ -25,7 +25,7 @@
 
 /** Get the variables potentially bound by an element.
  *  All mentioned variables except those in MINUS and FILTER (and hence NOT EXISTS)
- *  The work is done by PatternVarsVisitor.  
+ *  The work is done by PatternVarsVisitor.
  */
 public class PatternVars
 {
@@ -37,13 +37,13 @@
         vars(element, v) ;
         return s ;
     }
-    
+
     public static void vars(Element element, PatternVarsVisitor visitor)
     {
         ElementWalker.EltWalker walker = new WalkerSkipMinus(visitor) ;
         ElementWalker.walk$(element, walker) ;
     }
-    
+
     public static class WalkerSkipMinus extends ElementWalker.EltWalker
     {
         protected WalkerSkipMinus(ElementVisitor visitor)
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/PatternVarsVisitor.java b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/PatternVarsVisitor.java
index 0270b5f..b89d256 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/PatternVarsVisitor.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/PatternVarsVisitor.java
@@ -18,44 +18,42 @@
 
 package org.apache.jena.sparql.syntax;
 
-import java.util.Collection ;
-import java.util.Iterator ;
+import java.util.Collection;
+import java.util.Iterator;
 
-import org.apache.jena.graph.Triple ;
-import org.apache.jena.sparql.core.TriplePath ;
-import org.apache.jena.sparql.core.Var ;
-import org.apache.jena.sparql.core.VarExprList ;
-import org.apache.jena.sparql.util.VarUtils ;
+import org.apache.jena.graph.Triple;
+import org.apache.jena.sparql.core.TriplePath;
+import org.apache.jena.sparql.core.Var;
+import org.apache.jena.sparql.core.VarExprList;
+import org.apache.jena.sparql.util.VarUtils;
 
 public class PatternVarsVisitor extends ElementVisitorBase
 {
-    public Collection<Var> acc ;
-    public PatternVarsVisitor(Collection<Var> s) { acc = s ; } 
-    
+    public Collection<Var> acc;
+    public PatternVarsVisitor(Collection<Var> s) {
+        acc = s;
+    }
+
     @Override
-    public void visit(ElementTriplesBlock el)
-    {
-        for (Iterator<Triple> iter = el.patternElts() ; iter.hasNext() ; )
-        {
-            Triple t = iter.next() ;
-            VarUtils.addVarsFromTriple(acc, t) ;
+    public void visit(ElementTriplesBlock el) {
+        for ( Iterator<Triple> iter = el.patternElts() ; iter.hasNext() ; ) {
+            Triple t = iter.next();
+            VarUtils.addVarsFromTriple(acc, t);
         }
     }
 
     @Override
-    public void visit(ElementPathBlock el) 
-    {
-        for (Iterator<TriplePath> iter = el.patternElts() ; iter.hasNext() ; )
-        {
-            TriplePath tp = iter.next() ;
-            // If it's triple-izable, then use the triple. 
+    public void visit(ElementPathBlock el) {
+        for ( Iterator<TriplePath> iter = el.patternElts() ; iter.hasNext() ; ) {
+            TriplePath tp = iter.next();
+            // If it's triple-izable, then use the triple.
             if ( tp.isTriple() )
-                VarUtils.addVarsFromTriple(acc, tp.asTriple()) ;
+                VarUtils.addVarsFromTriple(acc, tp.asTriple());
             else
-                VarUtils.addVarsFromTriplePath(acc, tp) ;
+                VarUtils.addVarsFromTriplePath(acc, tp);
         }
     }
-        
+
     // Variables here are non-binding.
     @Override public void visit(ElementExists el)       { }
     @Override public void visit(ElementNotExists el)    { }
@@ -63,43 +61,41 @@
     @Override public void visit(ElementFilter el)       { }
 
     @Override
-    public void visit(ElementNamedGraph el)
-    {
-        VarUtils.addVar(acc, el.getGraphNameNode()) ;
+    public void visit(ElementNamedGraph el) {
+        VarUtils.addVar(acc, el.getGraphNameNode());
     }
 
     @Override
-    public void visit(ElementSubQuery el)
-    {
-        el.getQuery().setResultVars() ;
-        VarExprList x = el.getQuery().getProject() ;
-        acc.addAll(x.getVars()) ;
+    public void visit(ElementSubQuery el) {
+        el.getQuery().setResultVars();
+        VarExprList x = el.getQuery().getProject();
+        acc.addAll(x.getVars());
     }
 
     @Override
-    public void visit(ElementAssign el)
-    {
-        acc.add(el.getVar()) ;
+    public void visit(ElementAssign el) {
+        acc.add(el.getVar());
     }
 
     @Override
-    public void visit(ElementBind el)
-    {
-        acc.add(el.getVar()) ;
+    public void visit(ElementBind el) {
+        acc.add(el.getVar());
     }
 
     @Override
-    public void visit(ElementData el)
-    {
-        acc.addAll(el.getVars()) ;
+    public void visit(ElementFind el) {
+        acc.add(el.getVar());
+        VarUtils.addVarsFromTriple(acc, el.getTriple());
     }
 
-    
+    @Override
+    public void visit(ElementData el) {
+        acc.addAll(el.getVars());
+    }
+
 //    @Override
-//    public void visit(ElementService el)
-//    {
+//    public void visit(ElementService el) {
 //        // Although if this isn't defined elsewhere the query won't work.
-//        VarUtils.addVar(acc, el.getServiceNode()) ;
+//        VarUtils.addVar(acc, el.getServiceNode());
 //    }
-    
 }
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/RecursiveElementVisitor.java b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/RecursiveElementVisitor.java
index ebdccd8..42e6d08 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/RecursiveElementVisitor.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/RecursiveElementVisitor.java
@@ -41,27 +41,30 @@
 
 public class RecursiveElementVisitor implements ElementVisitor
 {
-    
+
     // ---- Call points.
     // Not abstract, because subclasses don't have to implement them.
-    
+
     public void startElement(ElementTriplesBlock el) {}
     public void endElement  (ElementTriplesBlock el) {}
 
     public void startElement(ElementDataset el) {}
     public void endElement  (ElementDataset el) {}
 
-    public void startElement(ElementFilter el) {} 
-    public void endElement  (ElementFilter el) {} 
+    public void startElement(ElementFilter el) {}
+    public void endElement  (ElementFilter el) {}
 
-    public void startElement(ElementAssign el) {} 
-    public void endElement  (ElementAssign el) {} 
+    public void startElement(ElementAssign el) {}
+    public void endElement  (ElementAssign el) {}
 
-    public void startElement(ElementBind el) {} 
-    public void endElement  (ElementBind el) {} 
+    public void startElement(ElementBind el) {}
+    public void endElement  (ElementBind el) {}
 
-    public void startElement(ElementData el) {} 
-    public void endElement  (ElementData el) {} 
+    public void startElement(ElementFind el) {}
+    public void endElement  (ElementFind el) {}
+
+    public void startElement(ElementData el) {}
+    public void endElement  (ElementData el) {}
 
     public void startElement(ElementUnion el) {}
     public void endElement  (ElementUnion el) {}
@@ -98,22 +101,22 @@
     public void startElement(ElementPathBlock el)   {}
 
     protected ElementVisitor visitor = null ;
-    
+
     // ---- 
-    
+
     private RecursiveElementVisitor() { this.visitor = new ElementVisitorBase() ; }
     
     public RecursiveElementVisitor(ElementVisitor visitor) { this.visitor = visitor ; }
-    
+
     // Visitor pattern on Elements
-    
+
     @Override
     public final void visit(ElementTriplesBlock el)
     {
         startElement(el) ;
         endElement(el) ;
     }
-    
+
     @Override
     public final void visit(ElementDataset el)
     {
@@ -142,14 +145,21 @@
         startElement(el) ;
         endElement(el) ;
     }
-    
+
+    @Override
+    public void visit(ElementFind el)
+    {
+        startElement(el) ;
+        endElement(el) ;
+    }
+
     @Override
     public void visit(ElementData el)
     {
         startElement(el) ;
         endElement(el) ;
     }
-    
+
     @Override
     public final void visit(ElementUnion el)
     {
@@ -162,7 +172,7 @@
         }
         endElement(el) ;
     }
-    
+
     @Override
     public final void visit(ElementGroup el)
     {
@@ -184,7 +194,6 @@
         endElement(el) ;
     }
 
-
     @Override
     public final void visit(ElementNamedGraph el)
     {
@@ -200,7 +209,7 @@
         el.getElement().visit(this) ;
         endElement(el) ;
     }
-    
+
     @Override
     public final void visit(ElementExists el)
     {
@@ -225,14 +234,13 @@
         endElement(el) ;
     }
 
-
-    
     @Override
     public void visit(ElementSubQuery el)
     { 
         startElement(el) ;
         endElement(el) ;
     }
+
     @Override
     public void visit(ElementPathBlock el)
     {
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/ApplyElementTransformVisitor.java b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/ApplyElementTransformVisitor.java
index 2ebd8fd..8db3f4f 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/ApplyElementTransformVisitor.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/ApplyElementTransformVisitor.java
@@ -24,6 +24,7 @@
 
 import org.apache.jena.atlas.logging.Log;
 import org.apache.jena.graph.Node;
+import org.apache.jena.graph.Triple;
 import org.apache.jena.query.Query;
 import org.apache.jena.sparql.core.Var;
 import org.apache.jena.sparql.expr.Expr;
@@ -95,7 +96,16 @@
         Var v1 = TransformElementLib.applyVar(v, exprTransform) ;
         Expr expr = el.getExpr() ;
         Expr expr1 = ExprTransformer.transform(exprTransform, expr) ;
-        Element el2 = transform.transform(el, v1, expr1 ) ;
+        Element el2 = transform.transform(el, v1, expr1) ;
+        push(el2) ;
+    }
+
+    @Override
+    public void visit(ElementFind el) {
+        Var v = el.getVar() ;
+        Var v1 = TransformElementLib.applyVar(v, exprTransform) ;
+        Triple t1 = transform.transform(el.getTriple());
+        Element el2 = transform.transform(el, v1, t1);
         push(el2) ;
     }
 
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/ElementTransform.java b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/ElementTransform.java
index f0bbcd3..cc586de 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/ElementTransform.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/ElementTransform.java
@@ -18,34 +18,36 @@
 
 package org.apache.jena.sparql.syntax.syntaxtransform;
 
-import java.util.List ;
+import java.util.List;
 
-import org.apache.jena.graph.Node ;
-import org.apache.jena.query.Query ;
-import org.apache.jena.sparql.core.Var ;
-import org.apache.jena.sparql.expr.Expr ;
-import org.apache.jena.sparql.syntax.* ;
+import org.apache.jena.graph.Node;
+import org.apache.jena.graph.Triple;
+import org.apache.jena.query.Query;
+import org.apache.jena.sparql.core.Var;
+import org.apache.jena.sparql.expr.Expr;
+import org.apache.jena.sparql.syntax.*;
 
 /** Transformation function on an Element
  *  @see ElementTransformer
  */
 public interface ElementTransform
 {
-    public Element transform(ElementTriplesBlock el) ;
-    public Element transform(ElementPathBlock el) ;
-    public Element transform(ElementFilter el, Expr expr2) ;
-    public Element transform(ElementAssign el, Var v, Expr expr2) ;
-    public Element transform(ElementBind el, Var v, Expr expr2) ;
-    public Element transform(ElementData el) ;
-    public Element transform(ElementDataset el, Element subElt) ;
-    public Element transform(ElementUnion el, List<Element> elements) ;
-    public Element transform(ElementOptional el, Element opElt) ;
-    public Element transform(ElementGroup el, List<Element> members) ;
-    public Element transform(ElementNamedGraph el, Node gn, Element subElt) ;
-    public Element transform(ElementExists el, Element subElt) ;
-    public Element transform(ElementNotExists el, Element subElt) ;
-    public Element transform(ElementMinus el, Element eltRHS) ;
-    public Element transform(ElementService el, Node service, Element subElt) ;
-    public Element transform(ElementSubQuery el, Query query) ;
+    public Element transform(ElementTriplesBlock el);
+    public Element transform(ElementPathBlock el);
+    public Element transform(ElementFilter el, Expr expr2);
+    public Element transform(ElementAssign el, Var v, Expr expr2);
+    public Element transform(ElementBind el, Var v, Expr expr2);
+    public Element transform(ElementFind el, Var v, Triple triple2);
+    public Triple  transform(Triple triple);
+    public Element transform(ElementData el);
+    public Element transform(ElementDataset el, Element subElt);
+    public Element transform(ElementUnion el, List<Element> elements);
+    public Element transform(ElementOptional el, Element opElt);
+    public Element transform(ElementGroup el, List<Element> members);
+    public Element transform(ElementNamedGraph el, Node gn, Element subElt);
+    public Element transform(ElementExists el, Element subElt);
+    public Element transform(ElementNotExists el, Element subElt);
+    public Element transform(ElementMinus el, Element eltRHS);
+    public Element transform(ElementService el, Node service, Element subElt);
+    public Element transform(ElementSubQuery el, Query query);
 }
-
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/ElementTransformCopyBase.java b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/ElementTransformCopyBase.java
index 19bb35a..ff30a95 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/ElementTransformCopyBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/ElementTransformCopyBase.java
@@ -21,6 +21,7 @@
 import java.util.List ;
 
 import org.apache.jena.graph.Node ;
+import org.apache.jena.graph.Triple;
 import org.apache.jena.query.Query ;
 import org.apache.jena.sparql.core.BasicPattern ;
 import org.apache.jena.sparql.core.PathBlock ;
@@ -54,7 +55,6 @@
             before.getList().forEach(copy::add);
             el = new ElementTriplesBlock(copy);
         }
-
         return el ;
     }
 
@@ -66,11 +66,15 @@
             before.getList().forEach(copy::add);
             el = new ElementPathBlock(copy);
         }
-
         return el ;
     }
 
     @Override
+    public Triple transform(Triple triple) {
+        return triple;
+    }
+
+    @Override
     public Element transform(ElementFilter el, Expr expr2) {
         if ( !alwaysCopy && el.getExpr() == expr2 )
             return el ;
@@ -92,6 +96,13 @@
     }
 
     @Override
+    public Element transform(ElementFind el, Var v, Triple triple2) {
+        if ( !alwaysCopy && el.getVar() == v && el.getTriple() == triple2 )
+            return el ;
+        return new ElementFind(v, triple2) ;
+    }
+
+    @Override
     public Element transform(ElementData el) {
          if( alwaysCopy ) {
              ElementData copy = new ElementData();
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/ElementTransformIdentity.java b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/ElementTransformIdentity.java
index 777be34..98d006c 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/ElementTransformIdentity.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/ElementTransformIdentity.java
@@ -21,6 +21,7 @@
 import java.util.List ;
 
 import org.apache.jena.graph.Node ;
+import org.apache.jena.graph.Triple;
 import org.apache.jena.query.Query ;
 import org.apache.jena.sparql.core.Var ;
 import org.apache.jena.sparql.expr.Expr ;
@@ -49,6 +50,10 @@
     @Override
     public Element transform(ElementBind el, Var v, Expr expr2) { return el ; }
     @Override
+    public Element transform(ElementFind el, Var v, Triple triple2) { return el ; }
+    @Override
+    public Triple transform(Triple triple) { return triple; }
+    @Override
     public Element transform(ElementData el) { return el ; }
     @Override
     public Element transform(ElementUnion el, List<Element> elements) { return el ; }
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/ElementTransformSubst.java b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/ElementTransformSubst.java
index 868b04c..240f5fe 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/ElementTransformSubst.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/ElementTransformSubst.java
@@ -34,7 +34,7 @@
  * Because a {@link Var} is a subclass of {@link Node_Variable} which is a {@link Node},
  * this includes variable renaming.
  * <p>
- * This is a transformation on the syntax - all occurences of a variable are replaced, even if
+ * This is a transformation on the syntax - all occurrences of a variable are replaced, even if
  * inside sub-select's and not project (which means it is effectively a different variable).
  */
 public class ElementTransformSubst extends ElementTransformCopyBase {
@@ -90,7 +90,8 @@
         return new TriplePath(s1, path.getPath(), o1) ;
     }
 
-    private Triple transform(Triple triple) {
+    @Override
+    public Triple transform(Triple triple) {
         Node s = triple.getSubject() ;
         Node s1 = transform(s) ;
         Node p = triple.getPredicate() ;
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/QueryUtils.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/QueryUtils.java
index 4cfc74a..47e3324 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/util/QueryUtils.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/QueryUtils.java
@@ -111,7 +111,12 @@
         if ( query.hashCode() != query2.hashCode() )
             throw new QueryCheckException("reparsed query hashCode does not equal parsed input query \nQuery (hashCode: " + query.hashCode() + ")=\n" + query + "\n\nQuery2 (hashCode: " + query2.hashCode() + ")=\n" + query2) ;
         
-        if ( ! query.equals(query2) ) 
+        if ( ! query.equals(query2) ) {
+            if ( false ) {
+                System.err.println(query);
+                System.err.println(query2);
+            }
             throw new QueryCheckException("reparsed output does not equal parsed input") ;
+        }
     }
 }
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/sse/TestSSE_Basic.java b/jena-arq/src/test/java/org/apache/jena/sparql/sse/TestSSE_Basic.java
index 52311fb..3c5373d 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/sse/TestSSE_Basic.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/sse/TestSSE_Basic.java
@@ -246,15 +246,15 @@
     @Test public void testMisc_11()    { testNotEquals("(a)", "()") ; }
     @Test public void testMisc_12()    { testNotEquals("(a)", "(<a>)") ; }
 
-    @Test public void testTripleTerm_1()  { testNode("{:s :p :o}"); }
-    @Test public void testTripleTerm_2()  { testNode("{ :s :p :o }"); }
-    @Test public void testTripleTerm_3()  { testNode("{ ?s ?p ?o }"); }
-    @Test public void testTripleTerm_4()  { testNode("{{ :s :p :o } :q { :s :p :o }}"); }
+    @Test public void testTripleTerm_1()  { testNode("<< :s :p :o >>"); }
+    @Test public void testTripleTerm_2()  { testNode("<<:s :p :o>>"); }
+    @Test public void testTripleTerm_3()  { testNode("<< ?s ?p ?o >>"); }
+    @Test public void testTripleTerm_4()  { testNode("<<<< :s :p :o >> :q << :s :p :o >>>>"); }
 
-    @Test public void testTripleTerm_10()  { parseBad("{ :s :p :o "); }
-    @Test public void testTripleTerm_11()  { parseBad("{ :s }"); }
-    @Test public void testTripleTerm_12()  { parseBad("{ :s :p }"); }
-    @Test public void testTripleTerm_13()  { parseBad("{ {:s :p :o} :q } "); }
+    @Test public void testTripleTerm_10()  { parseBad("<< :s :p :o "); }
+    @Test public void testTripleTerm_11()  { parseBad("<< :s >>"); }
+    @Test public void testTripleTerm_12()  { parseBad("<< :s :p >>"); }
+    @Test public void testTripleTerm_13()  { parseBad("<< <<:s :p :o >> :q >> "); }
 
     @Test public void testTaggedList_1()
     {
diff --git a/jena-db/jena-tdb2/src/test/java/org/apache/jena/tdb2/TestTDB2.java b/jena-db/jena-tdb2/src/test/java/org/apache/jena/tdb2/TestTDB2.java
index d1af13c..a7fd3c8 100644
--- a/jena-db/jena-tdb2/src/test/java/org/apache/jena/tdb2/TestTDB2.java
+++ b/jena-db/jena-tdb2/src/test/java/org/apache/jena/tdb2/TestTDB2.java
@@ -40,8 +40,8 @@
 /** Misc tests for TDB2. */
 public class TestTDB2 {
     // Safe on MS Windows - different directories for abort1 and abort2.
-    static String DIR1 = "DB_1";
-    static String DIR2 = "DB_2";
+    static String DIR1 = "target/tdb-testing/DB_1";
+    static String DIR2 = "target/tdb-testing/DB_2";
 
     @BeforeClass public static void beforeClass() {
         FileOps.ensureDir(DIR1);
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/rewriters/BuildElementVisitor.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/rewriters/BuildElementVisitor.java
index 9a3b89a..7890740 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/rewriters/BuildElementVisitor.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/rewriters/BuildElementVisitor.java
@@ -20,24 +20,7 @@
 import java.util.List;
 
 import org.apache.jena.arq.querybuilder.handlers.WhereHandler;
-import org.apache.jena.sparql.syntax.Element;
-import org.apache.jena.sparql.syntax.ElementAssign;
-import org.apache.jena.sparql.syntax.ElementBind;
-import org.apache.jena.sparql.syntax.ElementData;
-import org.apache.jena.sparql.syntax.ElementDataset;
-import org.apache.jena.sparql.syntax.ElementExists;
-import org.apache.jena.sparql.syntax.ElementFilter;
-import org.apache.jena.sparql.syntax.ElementGroup;
-import org.apache.jena.sparql.syntax.ElementMinus;
-import org.apache.jena.sparql.syntax.ElementNamedGraph;
-import org.apache.jena.sparql.syntax.ElementNotExists;
-import org.apache.jena.sparql.syntax.ElementOptional;
-import org.apache.jena.sparql.syntax.ElementPathBlock;
-import org.apache.jena.sparql.syntax.ElementService;
-import org.apache.jena.sparql.syntax.ElementSubQuery;
-import org.apache.jena.sparql.syntax.ElementTriplesBlock;
-import org.apache.jena.sparql.syntax.ElementUnion;
-import org.apache.jena.sparql.syntax.ElementVisitor;
+import org.apache.jena.sparql.syntax.*;
 
 /**
  * An element visitor that does an in-place modification of the elements to 
@@ -88,6 +71,11 @@
 		result=el;
 	}
 
+	@Override public void visit(ElementFind el) {
+        // no change
+        result=el;
+	}
+	
 	@Override
 	public void visit(ElementData el) {
 		// no change
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/rewriters/ElementRewriter.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/rewriters/ElementRewriter.java
index 6ec675e..7a99ff4 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/rewriters/ElementRewriter.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/rewriters/ElementRewriter.java
@@ -99,6 +99,20 @@
 			push(new ElementTriplesBlock());
 		}
 	}
+	
+    @Override
+    public void visit(ElementFind el) {
+        Node n = changeNode(el.getVar());
+        Triple triple = rewrite(el.getTriple());
+        
+        if (n.equals(el.getVar())) {
+            push(new ElementFind(Var.alloc(n), triple));
+        } else {
+            ElementTriplesBlock etb = new ElementTriplesBlock();
+            etb.addTriple(triple);
+            push(etb);
+        }
+    }
 
 	@Override
 	public void visit(ElementData el) {
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/rewriters/OpRewriter.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/rewriters/OpRewriter.java
index 28bc58c..71dd5e3 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/rewriters/OpRewriter.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/rewriters/OpRewriter.java
@@ -23,7 +23,9 @@
 import java.util.Map;
 
 import org.apache.jena.graph.Node ;
+import org.apache.jena.graph.Triple;
 import org.apache.jena.query.SortCondition ;
+import org.apache.jena.shared.JenaException;
 import org.apache.jena.sparql.algebra.Op ;
 import org.apache.jena.sparql.algebra.OpVisitor ;
 import org.apache.jena.sparql.algebra.Table ;
@@ -107,7 +109,21 @@
 		push(new OpPath(rewrite(opPath.getTriplePath())));
 	}
 
-	@Override
+    @Override
+    public void visit(OpFind opFind) {
+        Var var = opFind.getVar();
+        Triple triple = opFind.getTriple();
+        
+        Node n2 = changeNode(var);
+        if ( ! Var.isVar(n2) )
+            throw new JenaException("OpFind: Write if not a variable");
+        
+        Var var2 = Var.alloc(n2); 
+        Triple triple2 = rewrite(triple); 
+        push(new OpFind(triple2, var2));
+    }
+
+    @Override
 	public void visit(OpTable opTable) {
 		Table tbl = opTable.getTable();
 		boolean process = false;
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/QuadIteratorBuilder.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/QuadIteratorBuilder.java
index 16cd1a2..8331a80 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/QuadIteratorBuilder.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/QuadIteratorBuilder.java
@@ -26,24 +26,7 @@
 import org.apache.jena.query.QueryParseException;
 import org.apache.jena.sparql.core.Quad;
 import org.apache.jena.sparql.core.TriplePath;
-import org.apache.jena.sparql.syntax.Element;
-import org.apache.jena.sparql.syntax.ElementAssign;
-import org.apache.jena.sparql.syntax.ElementBind;
-import org.apache.jena.sparql.syntax.ElementData;
-import org.apache.jena.sparql.syntax.ElementDataset;
-import org.apache.jena.sparql.syntax.ElementExists;
-import org.apache.jena.sparql.syntax.ElementFilter;
-import org.apache.jena.sparql.syntax.ElementGroup;
-import org.apache.jena.sparql.syntax.ElementMinus;
-import org.apache.jena.sparql.syntax.ElementNamedGraph;
-import org.apache.jena.sparql.syntax.ElementNotExists;
-import org.apache.jena.sparql.syntax.ElementOptional;
-import org.apache.jena.sparql.syntax.ElementPathBlock;
-import org.apache.jena.sparql.syntax.ElementService;
-import org.apache.jena.sparql.syntax.ElementSubQuery;
-import org.apache.jena.sparql.syntax.ElementTriplesBlock;
-import org.apache.jena.sparql.syntax.ElementUnion;
-import org.apache.jena.sparql.syntax.ElementVisitor;
+import org.apache.jena.sparql.syntax.*;
 import org.apache.jena.util.iterator.ExtendedIterator;
 import org.apache.jena.util.iterator.WrappedIterator;
 
@@ -118,6 +101,11 @@
 	}
 
 	@Override
+	public void visit(ElementFind el) {
+	    throw new QueryParseException("FIND not permitted in data quad", -1, -1) ;   
+	}
+
+	@Override
 	public void visit(ElementData el) {
 		throw new QueryParseException("element data not permitted in data quad", -1, -1) ;   
 	}
diff --git a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/WhereValidator.java b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/WhereValidator.java
index b04e68b..5165298 100644
--- a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/WhereValidator.java
+++ b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/WhereValidator.java
@@ -19,24 +19,7 @@
 
 import java.util.List;
 
-import org.apache.jena.sparql.syntax.Element;
-import org.apache.jena.sparql.syntax.ElementAssign;
-import org.apache.jena.sparql.syntax.ElementBind;
-import org.apache.jena.sparql.syntax.ElementData;
-import org.apache.jena.sparql.syntax.ElementDataset;
-import org.apache.jena.sparql.syntax.ElementExists;
-import org.apache.jena.sparql.syntax.ElementFilter;
-import org.apache.jena.sparql.syntax.ElementGroup;
-import org.apache.jena.sparql.syntax.ElementMinus;
-import org.apache.jena.sparql.syntax.ElementNamedGraph;
-import org.apache.jena.sparql.syntax.ElementNotExists;
-import org.apache.jena.sparql.syntax.ElementOptional;
-import org.apache.jena.sparql.syntax.ElementPathBlock;
-import org.apache.jena.sparql.syntax.ElementService;
-import org.apache.jena.sparql.syntax.ElementSubQuery;
-import org.apache.jena.sparql.syntax.ElementTriplesBlock;
-import org.apache.jena.sparql.syntax.ElementUnion;
-import org.apache.jena.sparql.syntax.ElementVisitor;
+import org.apache.jena.sparql.syntax.*;
 import org.apache.jena.sparql.util.NodeIsomorphismMap;
 
 /**
@@ -110,7 +93,13 @@
 		return;
 	}
 
-	@Override
+    @Override
+    public void visit(ElementFind el) {
+        checkMatching( el );
+        return;
+    }
+
+    @Override
 	public void visit(ElementData el) {
 		checkMatching( el );
 		return;
diff --git a/jena-permissions/src/main/java/org/apache/jena/permissions/query/rewriter/OpRewriter.java b/jena-permissions/src/main/java/org/apache/jena/permissions/query/rewriter/OpRewriter.java
index 189bbe4..77a768f 100644
--- a/jena-permissions/src/main/java/org/apache/jena/permissions/query/rewriter/OpRewriter.java
+++ b/jena-permissions/src/main/java/org/apache/jena/permissions/query/rewriter/OpRewriter.java
@@ -324,16 +324,27 @@
 	}
 
 	/**
-	 * rewrites the subop of filter.
+	 * Returns the opFind
 	 */
 	@Override
-	public void visit(final OpFilter opFilter) {
+	public void visit(final OpFind opFind) {
 		if (LOG.isDebugEnabled()) {
-			LOG.debug("Starting visiting OpFilter");
+			LOG.debug("Starting visiting OpFind");
 		}
-		addOp(OpFilter.filterBy(opFilter.getExprs(), rewriteOp1(opFilter)));
+		addOp(opFind);
 	}
 
+    /**
+     * rewrites the subop of filter.
+     */
+    @Override
+    public void visit(final OpFilter opFilter) {
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("Starting visiting OpFilter");
+        }
+        addOp(OpFilter.filterBy(opFilter.getExprs(), rewriteOp1(opFilter)));
+    }
+
 	/**
 	 * rewrites the subop of graph.
 	 */
diff --git a/jena-shacl/src/main/java/org/apache/jena/shacl/engine/ShaclPaths.java b/jena-shacl/src/main/java/org/apache/jena/shacl/engine/ShaclPaths.java
index 01814e1..437d85c 100644
--- a/jena-shacl/src/main/java/org/apache/jena/shacl/engine/ShaclPaths.java
+++ b/jena-shacl/src/main/java/org/apache/jena/shacl/engine/ShaclPaths.java
@@ -274,11 +274,12 @@
 
         @Override
         public void visit(P_Alt pathAlt) {
+            // [ sh:alternativePath ( elt1 elt2 ) ]
             Node n1 = pathToRDF$(pathAlt.getLeft());
             Node n2 = pathToRDF$(pathAlt.getRight());
             Node list = list(acc, n1, n2);
+            point = NodeFactory.createBlankNode();
             Triple t = Triple.create(point, SHACL.alternativePath, list);
-            point = list;
             acc.accept(t);
         }