diff --git a/Geo/GEdge.cpp b/Geo/GEdge.cpp
index dc4c6a0b561ba5840657b54e94394001cb7a5beb..6bae59bb46442cc77ee416d8e2e15729fb1c807a 100644
--- a/Geo/GEdge.cpp
+++ b/Geo/GEdge.cpp
@@ -33,7 +33,7 @@ GEdge::~GEdge()
 {
   if(v0) v0->delEdge(this);
   if(v1 && v1 != v0) v1->delEdge(this);
-  if (_cp)delete _cp;
+  if(_cp) delete _cp;
   deleteMesh();
 }
 
@@ -97,9 +97,9 @@ void GEdge::setMeshMaster(GEdge* ge,const std::vector<double>& tfo)
   SVector3 d11 = locXYZ1 - tfoXYZ1;
 
   double tol = CTX::instance()->geom.tolerance * CTX::instance()->lc;
-  
+
   bool fwd = (d00.norm()*d11.norm() < d01.norm()*d10.norm());
-  
+
   if ((d00.norm() < tol) && (d11.norm() < tol)) {
     GEntity::setMeshMaster(ge,tfo);
     masterOrientation = 1;
@@ -109,7 +109,7 @@ void GEdge::setMeshMaster(GEdge* ge,const std::vector<double>& tfo)
     getEndVertex()  ->setMeshMaster(ge->getEndVertex()  ,tfo);
     return;
   }
-    
+
   if ((d01.norm() < tol) && (d10.norm() < tol)) {
     GEntity::setMeshMaster(ge,tfo);
     masterOrientation = -1;
@@ -119,7 +119,7 @@ void GEdge::setMeshMaster(GEdge* ge,const std::vector<double>& tfo)
     getEndVertex()  ->setMeshMaster(ge->getBeginVertex(),tfo);
     return;
   }
-  
+
   Msg::Info("Error in transformation from edge %d (%d-%d) to %d (%d-%d)"
             "(minimal transformed node distances %g %g, tolerance %g)",
             ge->tag(),ge->getBeginVertex()->tag(),ge->getEndVertex()->tag(),
diff --git a/Geo/GModelIO_OCC.cpp b/Geo/GModelIO_OCC.cpp
index f85fd598c17bfed3c309e7f016f79c86bfe9b7c2..86b51c355a39ecf88bc3ade2e552cad8f5401ee2 100644
--- a/Geo/GModelIO_OCC.cpp
+++ b/Geo/GModelIO_OCC.cpp
@@ -70,6 +70,35 @@ void OCC_Internals::addVertex(int tag, double x, double y, double z)
   bind(result, tag);
 }
 
+void OCC_Internals::addLine(int tag, int startTag, int endTag)
+{
+  if(tag > 0 && _tagEdge.IsBound(tag)){
+    Msg::Error("OCC edge with tag %d already exists", tag);
+    return;
+  }
+  if(!_tagVertex.IsBound(startTag)){
+    Msg::Error("Unknown OCC vertex with tag %d", startTag);
+    return;
+  }
+  if(!_tagVertex.IsBound(endTag)){
+    Msg::Error("Unknown OCC vertex with tag %d", endTag);
+    return;
+  }
+
+  TopoDS_Edge result;
+  try{
+    TopoDS_Vertex start = TopoDS::Vertex(_tagVertex.Find(startTag));
+    TopoDS_Vertex end = TopoDS::Vertex(_tagVertex.Find(endTag));
+    result = BRepBuilderAPI_MakeEdge(start, end).Edge();
+  }
+  catch(Standard_Failure &err){
+    Msg::Error("OCC %s", err.GetMessageString());
+    return;
+  }
+  if(tag <= 0) tag = _getMaxTag(1) + 1;
+  bind(result, tag);
+}
+
 void OCC_Internals::addCircleArc(int tag, int startTag, int centerTag, int endTag)
 {
   if(tag > 0 && _tagEdge.IsBound(tag)){
diff --git a/Geo/GModelIO_OCC.h b/Geo/GModelIO_OCC.h
index af9c2c5e77fc6f9423b55190d951d1c21642f691..010ef035a5e60ae4ab69d03c49be0bfb4fd24503 100644
--- a/Geo/GModelIO_OCC.h
+++ b/Geo/GModelIO_OCC.h
@@ -43,6 +43,7 @@ class OCC_Internals {
 
   // add shapes only using internal OCC data
   void addVertex(int tag, double x, double y, double z);
+  void addLine(int tag, int startTag, int endTag);
   void addCircleArc(int tag, int startTag, int centerTag, int endTag);
   void addSphere(int tag, double xc, double yc, double zc, double radius);
   void addBlock(int tag, double x1, double y1, double z1,
@@ -146,6 +147,7 @@ public:
   enum BooleanOperator { Intersection, Cut, Section, Fuse };
   OCC_Internals(){}
   void addVertex(int tag, double x, double y, double z){}
+  void addLine(int tag, int startTag, int endTag){}
   void addCircleArc(int tag, int tagStart, int tagCenter, int tagEnd){}
   void addSphere(int tag, double xc, double yc, double zc, double radius){};
   void addBlock(int tag, double x1, double y1, double z1,
diff --git a/Geo/Geo.cpp b/Geo/Geo.cpp
index 54ab857f8d8c0e5d12d78182a2b46468dd9fb9db..a995cf5ca219e08ecb929d14a58dfc9544876563 100644
--- a/Geo/Geo.cpp
+++ b/Geo/Geo.cpp
@@ -627,7 +627,7 @@ Curve *Create_Curve(int Num, int Typ, int Order, List_T *Liste,
         pC->end = v;
       }
       else {
-        Msg::Error("Unknown control point %d in Curve %d  (c)", p2, pC->Num);
+        Msg::Error("Unknown control point %d in Curve %d (c)", p2, pC->Num);
       }
     }
     End_Curve(pC);
diff --git a/Geo/GeoInterpolation.cpp b/Geo/GeoInterpolation.cpp
index 700da6bc4da055a316c753912a3903793032fa1f..978be063c6d497df15c9e9366ea4af895ee3aeb6 100644
--- a/Geo/GeoInterpolation.cpp
+++ b/Geo/GeoInterpolation.cpp
@@ -378,29 +378,35 @@ Vertex InterpolateCurve(Curve *c, double u, int derivee)
     //    printf("MSH_SEGM_LINE\n");
 #endif
     N = List_Nbr(c->Control_Points);
-    i = (int)((double)(N - 1) * u);
-    while(i >= N - 1)
-      i--;
-    while(i < 0)
-      i++;
-    t1 = (double)(i) / (double)(N - 1);
-    t2 = (double)(i + 1) / (double)(N - 1);
-    t = (u - t1) / (t2 - t1);
-    List_Read(c->Control_Points, i, &v[1]);
-    List_Read(c->Control_Points, i + 1, &v[2]);
-    if(!c->geometry){
-      V.Pos.X = v[1]->Pos.X + t * (v[2]->Pos.X - v[1]->Pos.X);
-      V.Pos.Y = v[1]->Pos.Y + t * (v[2]->Pos.Y - v[1]->Pos.Y);
-      V.Pos.Z = v[1]->Pos.Z + t * (v[2]->Pos.Z - v[1]->Pos.Z);
-      V.w = (1. - t) * v[1]->w + t * v[2]->w;
-      V.lc = (1. - t) * v[1]->lc + t * v[2]->lc;
+    if(N < 2){
+      Msg::Error("Line with less than 2 control points");
+      V.Pos.X = V.Pos.Y = V.Pos.Z = 0;
     }
     else{
-      SPoint2 p = v[1]->pntOnGeometry +  (v[2]->pntOnGeometry - v[1]->pntOnGeometry) * t;
-      SPoint3 pp = c->geometry->point(p);
-      V.Pos.X = pp.x();
-      V.Pos.Y = pp.y();
-      V.Pos.Z = pp.z();
+      i = (int)((double)(N - 1) * u);
+      while(i >= N - 1)
+        i--;
+      while(i < 0)
+        i++;
+      t1 = (double)(i) / (double)(N - 1);
+      t2 = (double)(i + 1) / (double)(N - 1);
+      t = (u - t1) / (t2 - t1);
+      List_Read(c->Control_Points, i, &v[1]);
+      List_Read(c->Control_Points, i + 1, &v[2]);
+      if(!c->geometry){
+        V.Pos.X = v[1]->Pos.X + t * (v[2]->Pos.X - v[1]->Pos.X);
+        V.Pos.Y = v[1]->Pos.Y + t * (v[2]->Pos.Y - v[1]->Pos.Y);
+        V.Pos.Z = v[1]->Pos.Z + t * (v[2]->Pos.Z - v[1]->Pos.Z);
+        V.w = (1. - t) * v[1]->w + t * v[2]->w;
+        V.lc = (1. - t) * v[1]->lc + t * v[2]->lc;
+      }
+      else{
+        SPoint2 p = v[1]->pntOnGeometry +  (v[2]->pntOnGeometry - v[1]->pntOnGeometry) * t;
+        SPoint3 pp = c->geometry->point(p);
+        V.Pos.X = pp.x();
+        V.Pos.Y = pp.y();
+        V.Pos.Z = pp.z();
+      }
     }
     break;
 
@@ -408,26 +414,33 @@ Vertex InterpolateCurve(Curve *c, double u, int derivee)
   case MSH_SEGM_CIRC_INV:
   case MSH_SEGM_ELLI:
   case MSH_SEGM_ELLI_INV:
-    if(c->Typ == MSH_SEGM_CIRC_INV || c->Typ == MSH_SEGM_ELLI_INV) {
-      V.u = 1. - u;
-      u = V.u;
+    N = List_Nbr(c->Control_Points);
+    if(N < 2){
+      Msg::Error("Circle or ellipse with less than 2 control points");
+      V.Pos.X = V.Pos.Y = V.Pos.Z = 0;
+    }
+    else{
+      if(c->Typ == MSH_SEGM_CIRC_INV || c->Typ == MSH_SEGM_ELLI_INV) {
+        V.u = 1. - u;
+        u = V.u;
+      }
+      theta = c->Circle.t1 - (c->Circle.t1 - c->Circle.t2) * u;
+      theta -= c->Circle.incl; // for ellipses
+      V.Pos.X =
+        c->Circle.f1 * cos(theta) * cos(c->Circle.incl) -
+        c->Circle.f2 * sin(theta) * sin(c->Circle.incl);
+      V.Pos.Y =
+        c->Circle.f1 * cos(theta) * sin(c->Circle.incl) +
+        c->Circle.f2 * sin(theta) * cos(c->Circle.incl);
+      V.Pos.Z = 0.0;
+      Projette(&V, c->Circle.invmat);
+      List_Read(c->Control_Points, 1, &v[0]);
+      V.Pos.X += v[0]->Pos.X;
+      V.Pos.Y += v[0]->Pos.Y;
+      V.Pos.Z += v[0]->Pos.Z;
+      V.w = (1. - u) * c->beg->w + u * c->end->w;
+      V.lc = (1. - u) * c->beg->lc + u * c->end->lc;
     }
-    theta = c->Circle.t1 - (c->Circle.t1 - c->Circle.t2) * u;
-    theta -= c->Circle.incl; // for ellipses
-    V.Pos.X =
-      c->Circle.f1 * cos(theta) * cos(c->Circle.incl) -
-      c->Circle.f2 * sin(theta) * sin(c->Circle.incl);
-    V.Pos.Y =
-      c->Circle.f1 * cos(theta) * sin(c->Circle.incl) +
-      c->Circle.f2 * sin(theta) * cos(c->Circle.incl);
-    V.Pos.Z = 0.0;
-    Projette(&V, c->Circle.invmat);
-    List_Read(c->Control_Points, 1, &v[0]);
-    V.Pos.X += v[0]->Pos.X;
-    V.Pos.Y += v[0]->Pos.Y;
-    V.Pos.Z += v[0]->Pos.Z;
-    V.w = (1. - u) * c->beg->w + u * c->end->w;
-    V.lc = (1. - u) * c->beg->lc + u * c->end->lc;
     break;
 
   case MSH_SEGM_BSPLN:
@@ -443,56 +456,63 @@ Vertex InterpolateCurve(Curve *c, double u, int derivee)
 
   case MSH_SEGM_SPLN:
     N = List_Nbr(c->Control_Points);
-    i = (int)((double)(N - 1) * u);
-    if(i < 0)
-      i = 0;
-    if(i >= N - 1)
-      i = N - 2;
-    t1 = (double)(i) / (double)(N - 1);
-    t2 = (double)(i + 1) / (double)(N - 1);
-    t = (u - t1) / (t2 - t1);
-    List_Read(c->Control_Points, i, &v[1]);
-    List_Read(c->Control_Points, i + 1, &v[2]);
-    if(!i) {
-      if(c->beg == c->end){
-        List_Read(c->Control_Points, N - 2, &v[0]);
+    if(N < 2){
+      Msg::Error("Spline with less than 2 control points");
+      V.Pos.X = V.Pos.Y = V.Pos.Z = 0;
+    }
+    else{
+      i = (int)((double)(N - 1) * u);
+      if(i < 0)
+        i = 0;
+      if(i >= N - 1)
+        i = N - 2;
+      t1 = (double)(i) / (double)(N - 1);
+      t2 = (double)(i + 1) / (double)(N - 1);
+      t = (u - t1) / (t2 - t1);
+      List_Read(c->Control_Points, i, &v[1]);
+      List_Read(c->Control_Points, i + 1, &v[2]);
+      if(!i) {
+        if(c->beg == c->end){
+          List_Read(c->Control_Points, N - 2, &v[0]);
+        }
+        else{
+          v[0] = &temp1;
+          v[0]->Pos.X = 2. * v[1]->Pos.X - v[2]->Pos.X;
+          v[0]->Pos.Y = 2. * v[1]->Pos.Y - v[2]->Pos.Y;
+          v[0]->Pos.Z = 2. * v[1]->Pos.Z - v[2]->Pos.Z;
+          v[0]->pntOnGeometry = v[1]->pntOnGeometry * 2. - v[2]->pntOnGeometry;
+        }
       }
-      else{
-        v[0] = &temp1;
-        v[0]->Pos.X = 2. * v[1]->Pos.X - v[2]->Pos.X;
-        v[0]->Pos.Y = 2. * v[1]->Pos.Y - v[2]->Pos.Y;
-        v[0]->Pos.Z = 2. * v[1]->Pos.Z - v[2]->Pos.Z;
-        v[0]->pntOnGeometry = v[1]->pntOnGeometry * 2. - v[2]->pntOnGeometry;
+      else {
+        List_Read(c->Control_Points, i - 1, &v[0]);
       }
-    }
-    else {
-      List_Read(c->Control_Points, i - 1, &v[0]);
-    }
-    if(i == N - 2) {
-      if(c->beg == c->end){
-        List_Read(c->Control_Points, 1, &v[3]);
+      if(i == N - 2) {
+        if(c->beg == c->end){
+          List_Read(c->Control_Points, 1, &v[3]);
+        }
+        else{
+          v[3] = &temp2;
+          v[3]->Pos.X = 2. * v[2]->Pos.X - v[1]->Pos.X;
+          v[3]->Pos.Y = 2. * v[2]->Pos.Y - v[1]->Pos.Y;
+          v[3]->Pos.Z = 2. * v[2]->Pos.Z - v[1]->Pos.Z;
+          v[3]->pntOnGeometry = v[2]->pntOnGeometry * 2. - v[1]->pntOnGeometry;
+        }
+      }
+      else {
+        List_Read(c->Control_Points, i + 2, &v[3]);
+      }
+      if(c->geometry){
+        SPoint2 pp = InterpolateCubicSpline(v, t, c->mat, t1, t2,c->geometry,0);
+        SPoint3 pt = c->geometry->point(pp);
+        V.Pos.X = pt.x();
+        V.Pos.Y = pt.y();
+        V.Pos.Z = pt.z();
       }
       else{
-        v[3] = &temp2;
-        v[3]->Pos.X = 2. * v[2]->Pos.X - v[1]->Pos.X;
-        v[3]->Pos.Y = 2. * v[2]->Pos.Y - v[1]->Pos.Y;
-        v[3]->Pos.Z = 2. * v[2]->Pos.Z - v[1]->Pos.Z;
-        v[3]->pntOnGeometry = v[2]->pntOnGeometry * 2. - v[1]->pntOnGeometry;
+        InterpolateCatmullRom(v, t, V);
+        // V = InterpolateCubicSpline(v, t, c->mat, 0, t1, t2);
       }
     }
-    else {
-      List_Read(c->Control_Points, i + 2, &v[3]);
-    }
-    if(c->geometry){
-      SPoint2 pp = InterpolateCubicSpline(v, t, c->mat, t1, t2,c->geometry,0);
-      SPoint3 pt = c->geometry->point(pp);
-      V.Pos.X = pt.x();
-      V.Pos.Y = pt.y();
-      V.Pos.Z = pt.z();
-    }
-    else
-      InterpolateCatmullRom(v, t, V);
-	//      V = InterpolateCubicSpline(v, t, c->mat, 0, t1, t2);
     break;
 
   case MSH_SEGM_BND_LAYER:
diff --git a/Mesh/meshGEdge.cpp b/Mesh/meshGEdge.cpp
index f11748bdc53e8c4847356b91136fb06b2716b833..0f35039338031416163c01c0f4efdf9153a89fcd 100644
--- a/Mesh/meshGEdge.cpp
+++ b/Mesh/meshGEdge.cpp
@@ -543,7 +543,7 @@ void meshGEdge::operator() (GEdge *ge)
     return;
   }
 
-  if (ge->model()->getNumEdges() > 1000){    
+  if (ge->model()->getNumEdges() > 1000){
     if (ge->tag() % 1000 == 1){
       Msg::Info("Meshing curve %d/%d (%s)", ge->tag(), ge->model()->getNumEdges(), ge->getTypeString().c_str());
       }
@@ -640,7 +640,6 @@ void meshGEdge::operator() (GEdge *ge)
     }
   }
 
-
   //printFandPrimitive(ge->tag(),Points);
 
   // if the curve is periodic and if the begin vertex is identical to
@@ -649,7 +648,11 @@ void meshGEdge::operator() (GEdge *ge)
   // curve. So, the mesh vertex and its associated geom vertex are not
   // necessary at the same location
   GPoint beg_p, end_p;
-  if(ge->getBeginVertex() == ge->getEndVertex() &&
+  if(!ge->getBeginVertex() && !ge->getEndVertex()){
+    Msg::Warning("Skipping curve with no begin nor end vertex");
+    return;
+  }
+  else if(ge->getBeginVertex() == ge->getEndVertex() &&
      ge->getBeginVertex()->edges().size() == 1){
     end_p = beg_p = ge->point(t_begin);
     Msg::Debug("Meshing periodic closed curve");
diff --git a/Parser/Gmsh.l b/Parser/Gmsh.l
index 411d0706c5f5fc19972995b4a0da4b8e87a38b54..47e59bcef13a43253e6915ff3e80c2ad64e8ecdd 100644
--- a/Parser/Gmsh.l
+++ b/Parser/Gmsh.l
@@ -122,8 +122,10 @@ Bezier			return tBezier;
 Block                   return tBlock;
 BSpline			return tBSpline;
 BooleanUnion            return tBooleanUnion;
+BooleanFuse             return tBooleanUnion;
 BooleanIntersection     return tBooleanIntersection;
 BooleanSubtraction      return tBooleanSubtraction;
+BooleanDifference       return tBooleanSubtraction;
 BoundingBox             return tBoundingBox;
 
 Catenary                return tCatenary;
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index 76f4098a042f525167da05283d92ba38b92d6cb5..b54a9469e321c3b0ab0907f62398be2aa4f0404e 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -1366,48 +1366,48 @@ static const yytype_uint16 yyrline[] =
     1489,  1495,  1500,  1526,  1527,  1531,  1542,  1557,  1567,  1568,
     1573,  1581,  1590,  1598,  1616,  1620,  1626,  1634,  1638,  1644,
     1652,  1656,  1662,  1670,  1674,  1680,  1689,  1692,  1705,  1708,
-    1716,  1724,  1752,  1795,  1818,  1836,  1857,  1875,  1915,  1945,
-    1963,  1981,  2008,  2027,  2032,  2050,  2096,  2114,  2153,  2159,
-    2165,  2172,  2213,  2239,  2263,  2288,  2305,  2309,  2328,  2362,
-    2409,  2427,  2444,  2473,  2477,  2493,  2541,  2546,  2551,  2556,
-    2561,  2566,  2589,  2595,  2606,  2607,  2612,  2615,  2619,  2648,
-    2677,  2706,  2740,  2762,  2788,  2810,  2833,  2854,  2910,  2934,
-    2959,  2985,  3098,  3117,  3160,  3169,  3175,  3190,  3218,  3235,
-    3244,  3258,  3272,  3278,  3284,  3293,  3302,  3311,  3325,  3387,
-    3405,  3422,  3437,  3466,  3478,  3502,  3506,  3511,  3519,  3524,
-    3530,  3535,  3541,  3549,  3553,  3557,  3562,  3622,  3638,  3655,
-    3672,  3694,  3716,  3751,  3759,  3767,  3773,  3780,  3787,  3807,
-    3833,  3845,  3857,  3865,  3873,  3882,  3881,  3896,  3895,  3910,
-    3909,  3924,  3923,  3937,  3944,  3951,  3958,  3965,  3972,  3979,
-    3986,  3993,  4001,  4000,  4014,  4013,  4027,  4026,  4040,  4039,
-    4053,  4052,  4066,  4065,  4079,  4078,  4092,  4091,  4105,  4104,
-    4121,  4124,  4130,  4142,  4162,  4186,  4190,  4194,  4198,  4202,
-    4206,  4212,  4218,  4222,  4226,  4230,  4234,  4253,  4266,  4267,
-    4268,  4272,  4273,  4274,  4277,  4298,  4318,  4321,  4337,  4340,
-    4357,  4360,  4366,  4369,  4376,  4379,  4386,  4442,  4512,  4517,
-    4584,  4620,  4628,  4671,  4710,  4730,  4762,  4789,  4815,  4841,
-    4867,  4893,  4915,  4943,  4971,  4999,  5027,  5055,  5094,  5133,
-    5154,  5175,  5202,  5206,  5216,  5251,  5252,  5253,  5257,  5263,
-    5275,  5293,  5321,  5322,  5323,  5324,  5325,  5326,  5327,  5328,
-    5329,  5336,  5337,  5338,  5339,  5340,  5341,  5342,  5343,  5344,
-    5345,  5346,  5347,  5348,  5349,  5350,  5351,  5352,  5353,  5354,
-    5355,  5356,  5357,  5358,  5359,  5360,  5361,  5362,  5363,  5364,
-    5365,  5366,  5367,  5368,  5377,  5378,  5379,  5380,  5381,  5382,
-    5383,  5384,  5385,  5386,  5387,  5392,  5391,  5399,  5404,  5409,
-    5426,  5444,  5462,  5480,  5498,  5503,  5509,  5524,  5543,  5563,
-    5583,  5603,  5626,  5631,  5636,  5646,  5656,  5661,  5672,  5681,
-    5686,  5691,  5718,  5722,  5726,  5730,  5734,  5741,  5745,  5749,
-    5753,  5760,  5765,  5772,  5777,  5781,  5786,  5790,  5798,  5809,
-    5813,  5825,  5833,  5841,  5848,  5858,  5887,  5891,  5895,  5899,
-    5903,  5907,  5911,  5915,  5919,  5948,  5977,  6006,  6035,  6048,
-    6061,  6074,  6087,  6097,  6107,  6117,  6129,  6142,  6154,  6158,
-    6162,  6166,  6170,  6188,  6206,  6214,  6222,  6251,  6264,  6269,
-    6273,  6277,  6289,  6293,  6305,  6322,  6332,  6336,  6351,  6356,
-    6363,  6367,  6380,  6394,  6408,  6422,  6436,  6444,  6455,  6459,
-    6463,  6471,  6477,  6483,  6491,  6499,  6506,  6514,  6529,  6543,
-    6557,  6569,  6585,  6594,  6603,  6613,  6624,  6632,  6640,  6644,
-    6663,  6670,  6676,  6683,  6691,  6690,  6703,  6708,  6714,  6723,
-    6736,  6739,  6743
+    1716,  1724,  1752,  1795,  1818,  1847,  1868,  1886,  1926,  1956,
+    1974,  1992,  2019,  2038,  2043,  2061,  2107,  2125,  2164,  2170,
+    2176,  2183,  2224,  2250,  2274,  2299,  2316,  2320,  2339,  2373,
+    2420,  2438,  2455,  2484,  2488,  2504,  2552,  2557,  2562,  2567,
+    2572,  2577,  2600,  2606,  2617,  2618,  2623,  2626,  2630,  2659,
+    2688,  2717,  2751,  2773,  2799,  2821,  2844,  2865,  2921,  2945,
+    2970,  2996,  3109,  3128,  3171,  3180,  3186,  3201,  3229,  3246,
+    3255,  3269,  3283,  3289,  3295,  3304,  3313,  3322,  3336,  3398,
+    3416,  3433,  3448,  3477,  3489,  3513,  3517,  3522,  3530,  3535,
+    3541,  3546,  3552,  3560,  3564,  3568,  3573,  3633,  3649,  3666,
+    3683,  3705,  3727,  3762,  3770,  3778,  3784,  3791,  3798,  3818,
+    3844,  3856,  3868,  3876,  3884,  3893,  3892,  3907,  3906,  3921,
+    3920,  3935,  3934,  3948,  3955,  3962,  3969,  3976,  3983,  3990,
+    3997,  4004,  4012,  4011,  4025,  4024,  4038,  4037,  4051,  4050,
+    4064,  4063,  4077,  4076,  4090,  4089,  4103,  4102,  4116,  4115,
+    4132,  4135,  4141,  4153,  4173,  4197,  4201,  4205,  4209,  4213,
+    4217,  4223,  4229,  4233,  4237,  4241,  4245,  4264,  4277,  4278,
+    4279,  4283,  4284,  4285,  4288,  4314,  4335,  4338,  4354,  4357,
+    4374,  4377,  4383,  4386,  4393,  4396,  4403,  4459,  4529,  4534,
+    4601,  4637,  4645,  4688,  4727,  4747,  4779,  4806,  4832,  4858,
+    4884,  4910,  4932,  4960,  4988,  5016,  5044,  5072,  5111,  5150,
+    5171,  5192,  5219,  5223,  5233,  5268,  5269,  5270,  5274,  5280,
+    5292,  5310,  5338,  5339,  5340,  5341,  5342,  5343,  5344,  5345,
+    5346,  5353,  5354,  5355,  5356,  5357,  5358,  5359,  5360,  5361,
+    5362,  5363,  5364,  5365,  5366,  5367,  5368,  5369,  5370,  5371,
+    5372,  5373,  5374,  5375,  5376,  5377,  5378,  5379,  5380,  5381,
+    5382,  5383,  5384,  5385,  5394,  5395,  5396,  5397,  5398,  5399,
+    5400,  5401,  5402,  5403,  5404,  5409,  5408,  5416,  5421,  5426,
+    5443,  5461,  5479,  5497,  5515,  5520,  5526,  5541,  5560,  5580,
+    5600,  5620,  5643,  5648,  5653,  5663,  5673,  5678,  5689,  5698,
+    5703,  5708,  5735,  5739,  5743,  5747,  5751,  5758,  5762,  5766,
+    5770,  5777,  5782,  5789,  5794,  5798,  5803,  5807,  5815,  5826,
+    5830,  5842,  5850,  5858,  5865,  5875,  5904,  5908,  5912,  5916,
+    5920,  5924,  5928,  5932,  5936,  5965,  5994,  6023,  6052,  6065,
+    6078,  6091,  6104,  6114,  6124,  6134,  6146,  6159,  6171,  6175,
+    6179,  6183,  6187,  6205,  6223,  6231,  6239,  6268,  6281,  6286,
+    6290,  6294,  6306,  6310,  6322,  6339,  6349,  6353,  6368,  6373,
+    6380,  6384,  6397,  6411,  6425,  6439,  6453,  6461,  6472,  6476,
+    6480,  6488,  6494,  6500,  6508,  6516,  6523,  6531,  6546,  6560,
+    6574,  6586,  6602,  6611,  6620,  6630,  6641,  6649,  6657,  6661,
+    6680,  6687,  6693,  6700,  6708,  6707,  6720,  6725,  6731,  6740,
+    6753,  6756,  6760
 };
 #endif
 
@@ -7684,12 +7684,23 @@ yyreduce:
 	yymsg(0, "Curve %d already exists", num);
       }
       else{
-	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (7)].l));
-	Curve *c = Create_Curve(num, MSH_SEGM_LINE, 1, temp, NULL,
-				-1, -1, 0., 1.);
-	Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
-	CreateReversedCurve(c);
-	List_Delete(temp);
+        if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
+          if(List_Nbr((yyvsp[(6) - (7)].l)) == 2){
+            double d[3];
+            List_Read((yyvsp[(6) - (7)].l), 0, &d[0]); List_Read((yyvsp[(6) - (7)].l), 1, &d[1]);
+            GModel::current()->getOCCInternals()->addLine(num, (int)d[0], (int)d[1]);
+          }
+          else
+            yymsg(0, "OpenCASCADE line only takes 2 points");
+        }
+        else{
+          List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (7)].l));
+          Curve *c = Create_Curve(num, MSH_SEGM_LINE, 1, temp, NULL,
+                                  -1, -1, 0., 1.);
+          Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
+          CreateReversedCurve(c);
+          List_Delete(temp);
+        }
       }
       List_Delete((yyvsp[(6) - (7)].l));
       (yyval.s).Type = MSH_SEGM_LINE;
@@ -7698,7 +7709,7 @@ yyreduce:
     break;
 
   case 175:
-#line 1837 "Gmsh.y"
+#line 1848 "Gmsh.y"
     {
       for (int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	double dnum;
@@ -7722,7 +7733,7 @@ yyreduce:
     break;
 
   case 176:
-#line 1858 "Gmsh.y"
+#line 1869 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -7743,7 +7754,7 @@ yyreduce:
     break;
 
   case 177:
-#line 1876 "Gmsh.y"
+#line 1887 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (8)].d);
       if(FindCurve(num)){
@@ -7786,7 +7797,7 @@ yyreduce:
     break;
 
   case 178:
-#line 1916 "Gmsh.y"
+#line 1927 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (8)].d);
       if(FindCurve(num)){
@@ -7819,7 +7830,7 @@ yyreduce:
     break;
 
   case 179:
-#line 1946 "Gmsh.y"
+#line 1957 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -7840,7 +7851,7 @@ yyreduce:
     break;
 
   case 180:
-#line 1964 "Gmsh.y"
+#line 1975 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -7861,7 +7872,7 @@ yyreduce:
     break;
 
   case 181:
-#line 1983 "Gmsh.y"
+#line 1994 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (11)].d);
       if(List_Nbr((yyvsp[(6) - (11)].l)) + (int)(yyvsp[(10) - (11)].d) + 1 != List_Nbr((yyvsp[(8) - (11)].l))){
@@ -7890,7 +7901,7 @@ yyreduce:
     break;
 
   case 182:
-#line 2009 "Gmsh.y"
+#line 2020 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindEdgeLoop(num)){
@@ -7911,14 +7922,14 @@ yyreduce:
     break;
 
   case 183:
-#line 2028 "Gmsh.y"
+#line 2039 "Gmsh.y"
     {
      GModel::current()->getGEOInternals()->addCompoundMesh ( 1 , (yyvsp[(3) - (4)].l) );
    ;}
     break;
 
   case 184:
-#line 2033 "Gmsh.y"
+#line 2044 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindCurve(num)){
@@ -7939,7 +7950,7 @@ yyreduce:
     break;
 
   case 185:
-#line 2051 "Gmsh.y"
+#line 2062 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].i);
       int op = (yyvsp[(6) - (8)].i);
@@ -7985,7 +7996,7 @@ yyreduce:
     break;
 
   case 186:
-#line 2097 "Gmsh.y"
+#line 2108 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindSurface(num)){
@@ -8006,7 +8017,7 @@ yyreduce:
     break;
 
   case 187:
-#line 2115 "Gmsh.y"
+#line 2126 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (9)].d), type = 0;
       if(FindSurface(num)){
@@ -8048,7 +8059,7 @@ yyreduce:
     break;
 
   case 188:
-#line 2154 "Gmsh.y"
+#line 2165 "Gmsh.y"
     {
       myGmshSurface = 0;
       (yyval.s).Type = 0;
@@ -8057,7 +8068,7 @@ yyreduce:
     break;
 
   case 189:
-#line 2160 "Gmsh.y"
+#line 2171 "Gmsh.y"
     {
       myGmshSurface = gmshSurface::getSurface((int)(yyvsp[(3) - (4)].d));
       (yyval.s).Type = 0;
@@ -8066,7 +8077,7 @@ yyreduce:
     break;
 
   case 190:
-#line 2166 "Gmsh.y"
+#line 2177 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (10)].d);
       myGmshSurface = gmshParametricSurface::NewParametricSurface(num, (yyvsp[(7) - (10)].c), (yyvsp[(8) - (10)].c), (yyvsp[(9) - (10)].c));
@@ -8076,7 +8087,7 @@ yyreduce:
     break;
 
   case 191:
-#line 2173 "Gmsh.y"
+#line 2184 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(List_Nbr((yyvsp[(6) - (7)].l)) == 4){ // solid sphere (volume)
@@ -8120,7 +8131,7 @@ yyreduce:
     break;
 
   case 192:
-#line 2214 "Gmsh.y"
+#line 2225 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if (List_Nbr((yyvsp[(6) - (7)].l)) != 2){
@@ -8149,7 +8160,7 @@ yyreduce:
     break;
 
   case 193:
-#line 2240 "Gmsh.y"
+#line 2251 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(List_Nbr((yyvsp[(6) - (7)].l)) == 6){
@@ -8176,7 +8187,7 @@ yyreduce:
     break;
 
   case 194:
-#line 2264 "Gmsh.y"
+#line 2275 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(List_Nbr((yyvsp[(6) - (7)].l)) == 7){
@@ -8204,7 +8215,7 @@ yyreduce:
     break;
 
   case 195:
-#line 2289 "Gmsh.y"
+#line 2300 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindSurfaceLoop(num)){
@@ -8224,14 +8235,14 @@ yyreduce:
     break;
 
   case 196:
-#line 2306 "Gmsh.y"
+#line 2317 "Gmsh.y"
     {
       GModel::current()->getGEOInternals()->addCompoundMesh ( 2 , (yyvsp[(3) - (4)].l) );
     ;}
     break;
 
   case 197:
-#line 2310 "Gmsh.y"
+#line 2321 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindSurface(num)){
@@ -8253,7 +8264,7 @@ yyreduce:
     break;
 
   case 198:
-#line 2330 "Gmsh.y"
+#line 2341 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (12)].d);
       if(FindSurface(num)){
@@ -8289,7 +8300,7 @@ yyreduce:
     break;
 
   case 199:
-#line 2363 "Gmsh.y"
+#line 2374 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].i);
       int op = (yyvsp[(6) - (8)].i);
@@ -8335,7 +8346,7 @@ yyreduce:
     break;
 
   case 200:
-#line 2410 "Gmsh.y"
+#line 2421 "Gmsh.y"
     {
       yymsg(0, "'Complex Volume' command is deprecated: use 'Volume' instead");
       int num = (int)(yyvsp[(4) - (8)].d);
@@ -8356,7 +8367,7 @@ yyreduce:
     break;
 
   case 201:
-#line 2428 "Gmsh.y"
+#line 2439 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindVolume(num)){
@@ -8376,7 +8387,7 @@ yyreduce:
     break;
 
   case 202:
-#line 2445 "Gmsh.y"
+#line 2456 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (9)].d);
       if(FindVolume(num)){
@@ -8408,14 +8419,14 @@ yyreduce:
     break;
 
   case 203:
-#line 2474 "Gmsh.y"
+#line 2485 "Gmsh.y"
     {
       GModel::current()->getGEOInternals()->addCompoundMesh ( 3 , (yyvsp[(3) - (4)].l) );
     ;}
     break;
 
   case 204:
-#line 2478 "Gmsh.y"
+#line 2489 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindVolume(num)){
@@ -8434,7 +8445,7 @@ yyreduce:
     break;
 
   case 205:
-#line 2494 "Gmsh.y"
+#line 2505 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].i);
       int op = (yyvsp[(6) - (8)].i);
@@ -8480,7 +8491,7 @@ yyreduce:
     break;
 
   case 206:
-#line 2542 "Gmsh.y"
+#line 2553 "Gmsh.y"
     {
       TranslateShapes((yyvsp[(2) - (5)].v)[0], (yyvsp[(2) - (5)].v)[1], (yyvsp[(2) - (5)].v)[2], (yyvsp[(4) - (5)].l));
       (yyval.l) = (yyvsp[(4) - (5)].l);
@@ -8488,7 +8499,7 @@ yyreduce:
     break;
 
   case 207:
-#line 2547 "Gmsh.y"
+#line 2558 "Gmsh.y"
     {
       RotateShapes((yyvsp[(3) - (11)].v)[0], (yyvsp[(3) - (11)].v)[1], (yyvsp[(3) - (11)].v)[2], (yyvsp[(5) - (11)].v)[0], (yyvsp[(5) - (11)].v)[1], (yyvsp[(5) - (11)].v)[2], (yyvsp[(7) - (11)].d), (yyvsp[(10) - (11)].l));
       (yyval.l) = (yyvsp[(10) - (11)].l);
@@ -8496,7 +8507,7 @@ yyreduce:
     break;
 
   case 208:
-#line 2552 "Gmsh.y"
+#line 2563 "Gmsh.y"
     {
       SymmetryShapes((yyvsp[(2) - (5)].v)[0], (yyvsp[(2) - (5)].v)[1], (yyvsp[(2) - (5)].v)[2], (yyvsp[(2) - (5)].v)[3], (yyvsp[(4) - (5)].l));
       (yyval.l) = (yyvsp[(4) - (5)].l);
@@ -8504,7 +8515,7 @@ yyreduce:
     break;
 
   case 209:
-#line 2557 "Gmsh.y"
+#line 2568 "Gmsh.y"
     {
       DilatShapes((yyvsp[(3) - (9)].v)[0], (yyvsp[(3) - (9)].v)[1], (yyvsp[(3) - (9)].v)[2], (yyvsp[(5) - (9)].d), (yyvsp[(5) - (9)].d), (yyvsp[(5) - (9)].d), (yyvsp[(8) - (9)].l));
       (yyval.l) = (yyvsp[(8) - (9)].l);
@@ -8512,7 +8523,7 @@ yyreduce:
     break;
 
   case 210:
-#line 2562 "Gmsh.y"
+#line 2573 "Gmsh.y"
     {
       DilatShapes((yyvsp[(3) - (9)].v)[0], (yyvsp[(3) - (9)].v)[1], (yyvsp[(3) - (9)].v)[2], (yyvsp[(5) - (9)].v)[0], (yyvsp[(5) - (9)].v)[1], (yyvsp[(5) - (9)].v)[2], (yyvsp[(8) - (9)].l));
       (yyval.l) = (yyvsp[(8) - (9)].l);
@@ -8520,7 +8531,7 @@ yyreduce:
     break;
 
   case 211:
-#line 2567 "Gmsh.y"
+#line 2578 "Gmsh.y"
     {
       (yyval.l) = List_Create(3, 3, sizeof(Shape));
       if(!strcmp((yyvsp[(1) - (4)].c), "Duplicata")){
@@ -8546,7 +8557,7 @@ yyreduce:
     break;
 
   case 212:
-#line 2590 "Gmsh.y"
+#line 2601 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       IntersectCurvesWithSurface((yyvsp[(4) - (9)].l), (int)(yyvsp[(8) - (9)].d), (yyval.l));
@@ -8555,7 +8566,7 @@ yyreduce:
     break;
 
   case 213:
-#line 2596 "Gmsh.y"
+#line 2607 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape*));
       List_T *tmp = ListOfDouble2ListOfInt((yyvsp[(7) - (9)].l));
@@ -8566,31 +8577,31 @@ yyreduce:
     break;
 
   case 214:
-#line 2606 "Gmsh.y"
+#line 2617 "Gmsh.y"
     { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
     break;
 
   case 215:
-#line 2607 "Gmsh.y"
+#line 2618 "Gmsh.y"
     { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
     break;
 
   case 216:
-#line 2612 "Gmsh.y"
+#line 2623 "Gmsh.y"
     {
       (yyval.l) = List_Create(3, 3, sizeof(Shape));
     ;}
     break;
 
   case 217:
-#line 2616 "Gmsh.y"
+#line 2627 "Gmsh.y"
     {
       List_Add((yyval.l), &(yyvsp[(2) - (2)].s));
     ;}
     break;
 
   case 218:
-#line 2620 "Gmsh.y"
+#line 2631 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -8622,7 +8633,7 @@ yyreduce:
     break;
 
   case 219:
-#line 2649 "Gmsh.y"
+#line 2660 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -8654,7 +8665,7 @@ yyreduce:
     break;
 
   case 220:
-#line 2678 "Gmsh.y"
+#line 2689 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -8686,7 +8697,7 @@ yyreduce:
     break;
 
   case 221:
-#line 2707 "Gmsh.y"
+#line 2718 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -8718,7 +8729,7 @@ yyreduce:
     break;
 
   case 222:
-#line 2741 "Gmsh.y"
+#line 2752 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(7) - (8)].l)) == 4){
@@ -8743,7 +8754,7 @@ yyreduce:
     break;
 
   case 223:
-#line 2763 "Gmsh.y"
+#line 2774 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       int t = (int)(yyvsp[(4) - (10)].d);
@@ -8772,7 +8783,7 @@ yyreduce:
     break;
 
   case 224:
-#line 2790 "Gmsh.y"
+#line 2801 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(12) - (14)].l)) == 0){
@@ -8796,7 +8807,7 @@ yyreduce:
     break;
 
   case 225:
-#line 2812 "Gmsh.y"
+#line 2823 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(14) - (16)].l)) == 0){
@@ -8821,7 +8832,7 @@ yyreduce:
     break;
 
   case 226:
-#line 2834 "Gmsh.y"
+#line 2845 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(10) - (12)].l)) == 1){
@@ -8845,7 +8856,7 @@ yyreduce:
     break;
 
   case 227:
-#line 2856 "Gmsh.y"
+#line 2867 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(12) - (14)].l)) == 1){
@@ -8903,7 +8914,7 @@ yyreduce:
     break;
 
   case 228:
-#line 2912 "Gmsh.y"
+#line 2923 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(12) - (14)].l)) == 1){
@@ -8929,7 +8940,7 @@ yyreduce:
     break;
 
   case 229:
-#line 2936 "Gmsh.y"
+#line 2947 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(12) - (14)].l)) == 3){
@@ -8956,7 +8967,7 @@ yyreduce:
     break;
 
   case 230:
-#line 2961 "Gmsh.y"
+#line 2972 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(12) - (14)].l)) == 5){
@@ -8984,7 +8995,7 @@ yyreduce:
     break;
 
   case 231:
-#line 2986 "Gmsh.y"
+#line 2997 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(!strcmp((yyvsp[(2) - (8)].c), "Union")){
@@ -9100,7 +9111,7 @@ yyreduce:
     break;
 
   case 232:
-#line 3099 "Gmsh.y"
+#line 3110 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(!strcmp((yyvsp[(2) - (8)].c), "MathEval")){
@@ -9122,7 +9133,7 @@ yyreduce:
     break;
 
   case 233:
-#line 3118 "Gmsh.y"
+#line 3129 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(!strcmp((yyvsp[(2) - (6)].c), "CutMesh")){
@@ -9163,7 +9174,7 @@ yyreduce:
     break;
 
   case 234:
-#line 3161 "Gmsh.y"
+#line 3172 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -9175,7 +9186,7 @@ yyreduce:
     break;
 
   case 235:
-#line 3170 "Gmsh.y"
+#line 3181 "Gmsh.y"
     {
 #if defined(HAVE_MESH)
       GModel::current()->getFields()->deleteField((int)(yyvsp[(4) - (6)].d));
@@ -9184,7 +9195,7 @@ yyreduce:
     break;
 
   case 236:
-#line 3176 "Gmsh.y"
+#line 3187 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(2) - (6)].c), "View")){
@@ -9202,7 +9213,7 @@ yyreduce:
     break;
 
   case 237:
-#line 3191 "Gmsh.y"
+#line 3202 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Meshes") || !strcmp((yyvsp[(2) - (3)].c), "All")){
         ClearProject();
@@ -9233,7 +9244,7 @@ yyreduce:
     break;
 
   case 238:
-#line 3219 "Gmsh.y"
+#line 3230 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(2) - (4)].c), "Empty") && !strcmp((yyvsp[(3) - (4)].c), "Views")){
@@ -9248,7 +9259,7 @@ yyreduce:
     break;
 
   case 239:
-#line 3236 "Gmsh.y"
+#line 3247 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
 	Shape TheShape;
@@ -9260,7 +9271,7 @@ yyreduce:
     break;
 
   case 240:
-#line 3245 "Gmsh.y"
+#line 3256 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(5) - (6)].l)); i++){
 	Shape TheShape;
@@ -9272,7 +9283,7 @@ yyreduce:
     break;
 
   case 241:
-#line 3259 "Gmsh.y"
+#line 3270 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
 	Shape TheShape;
@@ -9284,7 +9295,7 @@ yyreduce:
     break;
 
   case 242:
-#line 3273 "Gmsh.y"
+#line 3284 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++)
 	VisibilityShape((yyvsp[(2) - (3)].c), i, 1, false);
@@ -9293,7 +9304,7 @@ yyreduce:
     break;
 
   case 243:
-#line 3279 "Gmsh.y"
+#line 3290 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++)
 	VisibilityShape((yyvsp[(2) - (3)].c), i, 0, false);
@@ -9302,7 +9313,7 @@ yyreduce:
     break;
 
   case 244:
-#line 3285 "Gmsh.y"
+#line 3296 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -9314,7 +9325,7 @@ yyreduce:
     break;
 
   case 245:
-#line 3294 "Gmsh.y"
+#line 3305 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
 	Shape TheShape;
@@ -9326,7 +9337,7 @@ yyreduce:
     break;
 
   case 246:
-#line 3303 "Gmsh.y"
+#line 3314 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -9338,7 +9349,7 @@ yyreduce:
     break;
 
   case 247:
-#line 3312 "Gmsh.y"
+#line 3323 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
 	Shape TheShape;
@@ -9350,7 +9361,7 @@ yyreduce:
     break;
 
   case 248:
-#line 3326 "Gmsh.y"
+#line 3337 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Include")){
         std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(2) - (3)].c));
@@ -9415,7 +9426,7 @@ yyreduce:
     break;
 
   case 249:
-#line 3388 "Gmsh.y"
+#line 3399 "Gmsh.y"
     {
       int n = List_Nbr((yyvsp[(3) - (5)].l));
       if(n == 1){
@@ -9436,7 +9447,7 @@ yyreduce:
     break;
 
   case 250:
-#line 3406 "Gmsh.y"
+#line 3417 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(1) - (7)].c), "Save") && !strcmp((yyvsp[(2) - (7)].c), "View")){
@@ -9456,7 +9467,7 @@ yyreduce:
     break;
 
   case 251:
-#line 3423 "Gmsh.y"
+#line 3434 "Gmsh.y"
     {
 #if defined(HAVE_POST) && defined(HAVE_MESH)
       if(!strcmp((yyvsp[(1) - (7)].c), "Background") && !strcmp((yyvsp[(2) - (7)].c), "Mesh")  && !strcmp((yyvsp[(3) - (7)].c), "View")){
@@ -9474,7 +9485,7 @@ yyreduce:
     break;
 
   case 252:
-#line 3438 "Gmsh.y"
+#line 3449 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Sleep")){
 	SleepInSeconds((yyvsp[(2) - (3)].d));
@@ -9506,7 +9517,7 @@ yyreduce:
     break;
 
   case 253:
-#line 3467 "Gmsh.y"
+#line 3478 "Gmsh.y"
     {
 #if defined(HAVE_PLUGINS)
        try {
@@ -9521,7 +9532,7 @@ yyreduce:
     break;
 
   case 254:
-#line 3479 "Gmsh.y"
+#line 3490 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(2) - (3)].c), "ElementsFromAllViews"))
@@ -9548,14 +9559,14 @@ yyreduce:
     break;
 
   case 255:
-#line 3503 "Gmsh.y"
+#line 3514 "Gmsh.y"
     {
       Msg::Exit(0);
     ;}
     break;
 
   case 256:
-#line 3507 "Gmsh.y"
+#line 3518 "Gmsh.y"
     {
       gmsh_yyerrorstate = 999; // this will be checked when yyparse returns
       YYABORT;
@@ -9563,7 +9574,7 @@ yyreduce:
     break;
 
   case 257:
-#line 3512 "Gmsh.y"
+#line 3523 "Gmsh.y"
     {
       // FIXME: this is a hack to force a transfer from the old DB to
       // the new DB. This will become unnecessary if/when we fill the
@@ -9574,7 +9585,7 @@ yyreduce:
     break;
 
   case 258:
-#line 3520 "Gmsh.y"
+#line 3531 "Gmsh.y"
     {
       new GModel();
       GModel::current(GModel::list.size() - 1);
@@ -9582,7 +9593,7 @@ yyreduce:
     break;
 
   case 259:
-#line 3525 "Gmsh.y"
+#line 3536 "Gmsh.y"
     {
       CTX::instance()->forcedBBox = 0;
       GModel::current()->importGEOInternals();
@@ -9591,7 +9602,7 @@ yyreduce:
     break;
 
   case 260:
-#line 3531 "Gmsh.y"
+#line 3542 "Gmsh.y"
     {
       CTX::instance()->forcedBBox = 1;
       SetBoundingBox((yyvsp[(3) - (15)].d), (yyvsp[(5) - (15)].d), (yyvsp[(7) - (15)].d), (yyvsp[(9) - (15)].d), (yyvsp[(11) - (15)].d), (yyvsp[(13) - (15)].d));
@@ -9599,7 +9610,7 @@ yyreduce:
     break;
 
   case 261:
-#line 3536 "Gmsh.y"
+#line 3547 "Gmsh.y"
     {
 #if defined(HAVE_OPENGL)
       drawContext::global()->draw();
@@ -9608,7 +9619,7 @@ yyreduce:
     break;
 
   case 262:
-#line 3542 "Gmsh.y"
+#line 3553 "Gmsh.y"
     {
 #if defined(HAVE_OPENGL)
      CTX::instance()->mesh.changed = ENT_ALL;
@@ -9619,21 +9630,21 @@ yyreduce:
     break;
 
   case 263:
-#line 3550 "Gmsh.y"
+#line 3561 "Gmsh.y"
     {
       GModel::current()->createTopologyFromMesh();
     ;}
     break;
 
   case 264:
-#line 3554 "Gmsh.y"
+#line 3565 "Gmsh.y"
     {
       GModel::current()->createTopologyFromMesh(1);
     ;}
     break;
 
   case 265:
-#line 3558 "Gmsh.y"
+#line 3569 "Gmsh.y"
     {
       GModel::current()->importGEOInternals();
       GModel::current()->refineMesh(CTX::instance()->mesh.secondOrderLinear);
@@ -9641,7 +9652,7 @@ yyreduce:
     break;
 
   case 266:
-#line 3564 "Gmsh.y"
+#line 3575 "Gmsh.y"
     {
       int lock = CTX::instance()->lock;
       CTX::instance()->lock = 0;
@@ -9698,7 +9709,7 @@ yyreduce:
     break;
 
   case 267:
-#line 3623 "Gmsh.y"
+#line 3634 "Gmsh.y"
     {
 #if defined(HAVE_POPPLER)
        std::vector<int> is;
@@ -9713,7 +9724,7 @@ yyreduce:
     break;
 
   case 268:
-#line 3639 "Gmsh.y"
+#line 3650 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (6)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (6)].d);
@@ -9733,7 +9744,7 @@ yyreduce:
     break;
 
   case 269:
-#line 3656 "Gmsh.y"
+#line 3667 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (8)].d);
@@ -9753,7 +9764,7 @@ yyreduce:
     break;
 
   case 270:
-#line 3673 "Gmsh.y"
+#line 3684 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (8)].d);
@@ -9778,7 +9789,7 @@ yyreduce:
     break;
 
   case 271:
-#line 3695 "Gmsh.y"
+#line 3706 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (10)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (10)].d);
@@ -9803,7 +9814,7 @@ yyreduce:
     break;
 
   case 272:
-#line 3717 "Gmsh.y"
+#line 3728 "Gmsh.y"
     {
       if(ImbricatedLoop <= 0){
 	yymsg(0, "Invalid For/EndFor loop");
@@ -9841,7 +9852,7 @@ yyreduce:
     break;
 
   case 273:
-#line 3752 "Gmsh.y"
+#line 3763 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->createFunction
          (std::string((yyvsp[(2) - (2)].c)), gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -9852,7 +9863,7 @@ yyreduce:
     break;
 
   case 274:
-#line 3760 "Gmsh.y"
+#line 3771 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->createFunction
          (std::string((yyvsp[(2) - (2)].c)), gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -9863,7 +9874,7 @@ yyreduce:
     break;
 
   case 275:
-#line 3768 "Gmsh.y"
+#line 3779 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->leaveFunction
          (&gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -9872,7 +9883,7 @@ yyreduce:
     break;
 
   case 276:
-#line 3774 "Gmsh.y"
+#line 3785 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->enterFunction
          (std::string((yyvsp[(2) - (3)].c)), &gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -9882,7 +9893,7 @@ yyreduce:
     break;
 
   case 277:
-#line 3781 "Gmsh.y"
+#line 3792 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->enterFunction
          (std::string((yyvsp[(2) - (3)].c)), &gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -9892,7 +9903,7 @@ yyreduce:
     break;
 
   case 278:
-#line 3788 "Gmsh.y"
+#line 3799 "Gmsh.y"
     {
       ImbricatedTest++;
       if(ImbricatedTest > MAX_RECUR_TESTS-1){
@@ -9915,7 +9926,7 @@ yyreduce:
     break;
 
   case 279:
-#line 3808 "Gmsh.y"
+#line 3819 "Gmsh.y"
     {
       if(ImbricatedTest > 0){
         if (statusImbricatedTests[ImbricatedTest]){
@@ -9944,7 +9955,7 @@ yyreduce:
     break;
 
   case 280:
-#line 3834 "Gmsh.y"
+#line 3845 "Gmsh.y"
     {
       if(ImbricatedTest > 0){
         if(statusImbricatedTests[ImbricatedTest]){
@@ -9959,7 +9970,7 @@ yyreduce:
     break;
 
   case 281:
-#line 3846 "Gmsh.y"
+#line 3857 "Gmsh.y"
     {
       ImbricatedTest--;
       if(ImbricatedTest < 0)
@@ -9968,7 +9979,7 @@ yyreduce:
     break;
 
   case 282:
-#line 3858 "Gmsh.y"
+#line 3869 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (5)].l),
@@ -9979,7 +9990,7 @@ yyreduce:
     break;
 
   case 283:
-#line 3866 "Gmsh.y"
+#line 3877 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (11)].l),
@@ -9990,7 +10001,7 @@ yyreduce:
     break;
 
   case 284:
-#line 3874 "Gmsh.y"
+#line 3885 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (13)].l),
@@ -10001,7 +10012,7 @@ yyreduce:
     break;
 
   case 285:
-#line 3882 "Gmsh.y"
+#line 3893 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -10010,7 +10021,7 @@ yyreduce:
     break;
 
   case 286:
-#line 3888 "Gmsh.y"
+#line 3899 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (7)].l),
@@ -10021,7 +10032,7 @@ yyreduce:
     break;
 
   case 287:
-#line 3896 "Gmsh.y"
+#line 3907 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -10030,7 +10041,7 @@ yyreduce:
     break;
 
   case 288:
-#line 3902 "Gmsh.y"
+#line 3913 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (13)].l),
@@ -10041,7 +10052,7 @@ yyreduce:
     break;
 
   case 289:
-#line 3910 "Gmsh.y"
+#line 3921 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -10050,7 +10061,7 @@ yyreduce:
     break;
 
   case 290:
-#line 3916 "Gmsh.y"
+#line 3927 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (15)].l),
@@ -10061,7 +10072,7 @@ yyreduce:
     break;
 
   case 291:
-#line 3924 "Gmsh.y"
+#line 3935 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -10070,7 +10081,7 @@ yyreduce:
     break;
 
   case 292:
-#line 3930 "Gmsh.y"
+#line 3941 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(BOUNDARY_LAYER, (yyvsp[(3) - (6)].l), 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
@@ -10080,7 +10091,7 @@ yyreduce:
     break;
 
   case 293:
-#line 3938 "Gmsh.y"
+#line 3949 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (8)].d),
@@ -10090,7 +10101,7 @@ yyreduce:
     break;
 
   case 294:
-#line 3945 "Gmsh.y"
+#line 3956 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (8)].d),
@@ -10100,7 +10111,7 @@ yyreduce:
     break;
 
   case 295:
-#line 3952 "Gmsh.y"
+#line 3963 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (8)].d),
@@ -10110,7 +10121,7 @@ yyreduce:
     break;
 
   case 296:
-#line 3959 "Gmsh.y"
+#line 3970 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d),
@@ -10120,7 +10131,7 @@ yyreduce:
     break;
 
   case 297:
-#line 3966 "Gmsh.y"
+#line 3977 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d),
@@ -10130,7 +10141,7 @@ yyreduce:
     break;
 
   case 298:
-#line 3973 "Gmsh.y"
+#line 3984 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d),
@@ -10140,7 +10151,7 @@ yyreduce:
     break;
 
   case 299:
-#line 3980 "Gmsh.y"
+#line 3991 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (14)].d),
@@ -10150,7 +10161,7 @@ yyreduce:
     break;
 
   case 300:
-#line 3987 "Gmsh.y"
+#line 3998 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (14)].d),
@@ -10160,7 +10171,7 @@ yyreduce:
     break;
 
   case 301:
-#line 3994 "Gmsh.y"
+#line 4005 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (14)].d),
@@ -10170,7 +10181,7 @@ yyreduce:
     break;
 
   case 302:
-#line 4001 "Gmsh.y"
+#line 4012 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -10179,7 +10190,7 @@ yyreduce:
     break;
 
   case 303:
-#line 4007 "Gmsh.y"
+#line 4018 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d),
@@ -10189,7 +10200,7 @@ yyreduce:
     break;
 
   case 304:
-#line 4014 "Gmsh.y"
+#line 4025 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -10198,7 +10209,7 @@ yyreduce:
     break;
 
   case 305:
-#line 4020 "Gmsh.y"
+#line 4031 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d),
@@ -10208,7 +10219,7 @@ yyreduce:
     break;
 
   case 306:
-#line 4027 "Gmsh.y"
+#line 4038 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -10217,7 +10228,7 @@ yyreduce:
     break;
 
   case 307:
-#line 4033 "Gmsh.y"
+#line 4044 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d),
@@ -10227,7 +10238,7 @@ yyreduce:
     break;
 
   case 308:
-#line 4040 "Gmsh.y"
+#line 4051 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -10236,7 +10247,7 @@ yyreduce:
     break;
 
   case 309:
-#line 4046 "Gmsh.y"
+#line 4057 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (16)].d),
@@ -10246,7 +10257,7 @@ yyreduce:
     break;
 
   case 310:
-#line 4053 "Gmsh.y"
+#line 4064 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -10255,7 +10266,7 @@ yyreduce:
     break;
 
   case 311:
-#line 4059 "Gmsh.y"
+#line 4070 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (16)].d),
@@ -10265,7 +10276,7 @@ yyreduce:
     break;
 
   case 312:
-#line 4066 "Gmsh.y"
+#line 4077 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -10274,7 +10285,7 @@ yyreduce:
     break;
 
   case 313:
-#line 4072 "Gmsh.y"
+#line 4083 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (16)].d),
@@ -10284,7 +10295,7 @@ yyreduce:
     break;
 
   case 314:
-#line 4079 "Gmsh.y"
+#line 4090 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -10293,7 +10304,7 @@ yyreduce:
     break;
 
   case 315:
-#line 4085 "Gmsh.y"
+#line 4096 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (18)].d),
@@ -10303,7 +10314,7 @@ yyreduce:
     break;
 
   case 316:
-#line 4092 "Gmsh.y"
+#line 4103 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -10312,7 +10323,7 @@ yyreduce:
     break;
 
   case 317:
-#line 4098 "Gmsh.y"
+#line 4109 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (18)].d),
@@ -10322,7 +10333,7 @@ yyreduce:
     break;
 
   case 318:
-#line 4105 "Gmsh.y"
+#line 4116 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -10331,7 +10342,7 @@ yyreduce:
     break;
 
   case 319:
-#line 4111 "Gmsh.y"
+#line 4122 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (18)].d),
@@ -10341,19 +10352,19 @@ yyreduce:
     break;
 
   case 320:
-#line 4122 "Gmsh.y"
+#line 4133 "Gmsh.y"
     {
     ;}
     break;
 
   case 321:
-#line 4125 "Gmsh.y"
+#line 4136 "Gmsh.y"
     {
     ;}
     break;
 
   case 322:
-#line 4131 "Gmsh.y"
+#line 4142 "Gmsh.y"
     {
       int n = (int)fabs((yyvsp[(3) - (5)].d));
       if(n){ // we accept n==0 to easily disable layers
@@ -10368,7 +10379,7 @@ yyreduce:
     break;
 
   case 323:
-#line 4143 "Gmsh.y"
+#line 4154 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = true;
       extr.mesh.NbLayer = List_Nbr((yyvsp[(3) - (7)].l));
@@ -10391,7 +10402,7 @@ yyreduce:
     break;
 
   case 324:
-#line 4163 "Gmsh.y"
+#line 4174 "Gmsh.y"
     {
       yymsg(0, "Explicit region numbers in layers are deprecated");
       extr.mesh.ExtrudeMesh = true;
@@ -10417,42 +10428,42 @@ yyreduce:
     break;
 
   case 325:
-#line 4187 "Gmsh.y"
+#line 4198 "Gmsh.y"
     {
       extr.mesh.ScaleLast = true;
     ;}
     break;
 
   case 326:
-#line 4191 "Gmsh.y"
+#line 4202 "Gmsh.y"
     {
       extr.mesh.Recombine = true;
     ;}
     break;
 
   case 327:
-#line 4195 "Gmsh.y"
+#line 4206 "Gmsh.y"
     {
       extr.mesh.Recombine = (yyvsp[(2) - (3)].d) ? true : false;
     ;}
     break;
 
   case 328:
-#line 4199 "Gmsh.y"
+#line 4210 "Gmsh.y"
     {
       yymsg(0, "Keyword 'QuadTriSngl' deprecated. Use 'QuadTriNoNewVerts' instead.");
     ;}
     break;
 
   case 329:
-#line 4203 "Gmsh.y"
+#line 4214 "Gmsh.y"
     {
       yymsg(0, "Keyword 'QuadTriSngl' deprecated. Use 'QuadTriNoNewVerts' instead.");
     ;}
     break;
 
   case 330:
-#line 4207 "Gmsh.y"
+#line 4218 "Gmsh.y"
     {
       yymsg(0, "Method 'QuadTriDbl' deprecated. Use 'QuadTriAddVerts' instead, "
             "which has no requirement for the number of extrusion layers and meshes "
@@ -10461,7 +10472,7 @@ yyreduce:
     break;
 
   case 331:
-#line 4213 "Gmsh.y"
+#line 4224 "Gmsh.y"
     {
       yymsg(0, "Method 'QuadTriDbl' deprecated. Use 'QuadTriAddVerts' instead, "
             "which has no requirement for the number of extrusion layers and meshes "
@@ -10470,35 +10481,35 @@ yyreduce:
     break;
 
   case 332:
-#line 4219 "Gmsh.y"
+#line 4230 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_ADDVERTS_1;
     ;}
     break;
 
   case 333:
-#line 4223 "Gmsh.y"
+#line 4234 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_ADDVERTS_1_RECOMB;
     ;}
     break;
 
   case 334:
-#line 4227 "Gmsh.y"
+#line 4238 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_NOVERTS_1;
     ;}
     break;
 
   case 335:
-#line 4231 "Gmsh.y"
+#line 4242 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_NOVERTS_1_RECOMB;
     ;}
     break;
 
   case 336:
-#line 4235 "Gmsh.y"
+#line 4246 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (9)].d);
       if(FindSurface(num)){
@@ -10520,7 +10531,7 @@ yyreduce:
     break;
 
   case 337:
-#line 4254 "Gmsh.y"
+#line 4265 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (6)].c), "Index"))
         extr.mesh.BoundaryLayerIndex = (yyvsp[(4) - (6)].d);
@@ -10531,37 +10542,37 @@ yyreduce:
     break;
 
   case 338:
-#line 4266 "Gmsh.y"
+#line 4277 "Gmsh.y"
     { (yyval.i) = OCC_Internals::Fuse; ;}
     break;
 
   case 339:
-#line 4267 "Gmsh.y"
+#line 4278 "Gmsh.y"
     { (yyval.i) = OCC_Internals::Intersection; ;}
     break;
 
   case 340:
-#line 4268 "Gmsh.y"
+#line 4279 "Gmsh.y"
     { (yyval.i) = OCC_Internals::Cut; ;}
     break;
 
   case 341:
-#line 4272 "Gmsh.y"
+#line 4283 "Gmsh.y"
     { (yyval.i) = 0; ;}
     break;
 
   case 342:
-#line 4273 "Gmsh.y"
+#line 4284 "Gmsh.y"
     { (yyval.i) = 1; ;}
     break;
 
   case 343:
-#line 4274 "Gmsh.y"
+#line 4285 "Gmsh.y"
     { (yyval.i) = (yyvsp[(2) - (3)].d); ;}
     break;
 
   case 344:
-#line 4278 "Gmsh.y"
+#line 4290 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
@@ -10572,9 +10583,13 @@ yyreduce:
         for(int i = 0; i < List_Nbr((yyvsp[(7) - (9)].l)); i++){
           Shape s; List_Read((yyvsp[(7) - (9)].l), i, &s); tool[3].push_back(s.Num);
         }
-        GModel::current()->getOCCInternals()->applyBooleanOperator
+        std::vector<int> ret =
+          GModel::current()->getOCCInternals()->applyBooleanOperator
           (-1, shape, tool, (OCC_Internals::BooleanOperator)(yyvsp[(1) - (9)].i), (yyvsp[(4) - (9)].i), (yyvsp[(8) - (9)].i));
-        // FIXME add to returned list of shapes
+        for(unsigned int i = 0; i < ret.size(); i++){
+          double d = ret[i];
+          List_Add((yyval.l), &d);
+        }
       }
       List_Delete((yyvsp[(3) - (9)].l));
       List_Delete((yyvsp[(7) - (9)].l));
@@ -10582,7 +10597,7 @@ yyreduce:
     break;
 
   case 345:
-#line 4299 "Gmsh.y"
+#line 4316 "Gmsh.y"
     {
       if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
         std::vector<int> shape[4], tool[4];
@@ -10601,14 +10616,14 @@ yyreduce:
     break;
 
   case 346:
-#line 4318 "Gmsh.y"
+#line 4335 "Gmsh.y"
     {
       (yyval.v)[0] = (yyval.v)[1] = 1.;
     ;}
     break;
 
   case 347:
-#line 4322 "Gmsh.y"
+#line 4339 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Progression") || !strcmp((yyvsp[(2) - (3)].c), "Power"))
         (yyval.v)[0] = 1.;
@@ -10624,14 +10639,14 @@ yyreduce:
     break;
 
   case 348:
-#line 4337 "Gmsh.y"
+#line 4354 "Gmsh.y"
     {
       (yyval.i) = -1; // left
     ;}
     break;
 
   case 349:
-#line 4341 "Gmsh.y"
+#line 4358 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (1)].c), "Right"))
         (yyval.i) = 1;
@@ -10648,49 +10663,49 @@ yyreduce:
     break;
 
   case 350:
-#line 4357 "Gmsh.y"
+#line 4374 "Gmsh.y"
     {
      (yyval.l) = List_Create(1, 1, sizeof(double));
    ;}
     break;
 
   case 351:
-#line 4361 "Gmsh.y"
+#line 4378 "Gmsh.y"
     {
      (yyval.l) = (yyvsp[(2) - (2)].l);
    ;}
     break;
 
   case 352:
-#line 4366 "Gmsh.y"
+#line 4383 "Gmsh.y"
     {
       (yyval.i) = 45;
     ;}
     break;
 
   case 353:
-#line 4370 "Gmsh.y"
+#line 4387 "Gmsh.y"
     {
       (yyval.i) = (int)(yyvsp[(2) - (2)].d);
     ;}
     break;
 
   case 354:
-#line 4376 "Gmsh.y"
+#line 4393 "Gmsh.y"
     {
       (yyval.l) = List_Create(1, 1, sizeof(double));
     ;}
     break;
 
   case 355:
-#line 4380 "Gmsh.y"
+#line 4397 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (2)].l);
     ;}
     break;
 
   case 356:
-#line 4387 "Gmsh.y"
+#line 4404 "Gmsh.y"
     {
       int type = (int)(yyvsp[(6) - (7)].v)[0];
       double coef = fabs((yyvsp[(6) - (7)].v)[1]);
@@ -10749,7 +10764,7 @@ yyreduce:
     break;
 
   case 357:
-#line 4443 "Gmsh.y"
+#line 4460 "Gmsh.y"
     {
       int k = List_Nbr((yyvsp[(4) - (6)].l));
       if(k != 0 && k != 3 && k != 4){
@@ -10822,7 +10837,7 @@ yyreduce:
     break;
 
   case 358:
-#line 4513 "Gmsh.y"
+#line 4530 "Gmsh.y"
     {
       yymsg(1, "Elliptic Surface is deprecated: use Transfinite instead (with smoothing)");
       List_Delete((yyvsp[(7) - (8)].l));
@@ -10830,7 +10845,7 @@ yyreduce:
     break;
 
   case 359:
-#line 4518 "Gmsh.y"
+#line 4535 "Gmsh.y"
     {
       int k = List_Nbr((yyvsp[(4) - (5)].l));
       if(k != 0 && k != 6 && k != 8){
@@ -10900,7 +10915,7 @@ yyreduce:
     break;
 
   case 360:
-#line 4585 "Gmsh.y"
+#line 4602 "Gmsh.y"
     {
       if(!(yyvsp[(2) - (3)].l)){
   	  List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Volumes);
@@ -10939,7 +10954,7 @@ yyreduce:
     break;
 
   case 361:
-#line 4621 "Gmsh.y"
+#line 4638 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (8)].l)); i++){
 	double d;
@@ -10950,7 +10965,7 @@ yyreduce:
     break;
 
   case 362:
-#line 4629 "Gmsh.y"
+#line 4646 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (5)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
@@ -10996,7 +11011,7 @@ yyreduce:
     break;
 
   case 363:
-#line 4672 "Gmsh.y"
+#line 4689 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Volumes);
@@ -11038,7 +11053,7 @@ yyreduce:
     break;
 
   case 364:
-#line 4711 "Gmsh.y"
+#line 4728 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
         double d;
@@ -11061,7 +11076,7 @@ yyreduce:
     break;
 
   case 365:
-#line 4732 "Gmsh.y"
+#line 4749 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(4) - (11)].l)) != List_Nbr((yyvsp[(8) - (11)].l))){
         yymsg(0, "Number of master lines (%d) different from number of "
@@ -11095,7 +11110,7 @@ yyreduce:
     break;
 
   case 366:
-#line 4764 "Gmsh.y"
+#line 4781 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(4) - (11)].l)) != List_Nbr((yyvsp[(8) - (11)].l))){
         yymsg(0, "Number of master faces (%d) different from number of "
@@ -11124,7 +11139,7 @@ yyreduce:
     break;
 
   case 367:
-#line 4791 "Gmsh.y"
+#line 4808 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(4) - (18)].l)) != List_Nbr((yyvsp[(8) - (18)].l))){
         yymsg(0, "Number of master edges (%d) different from number of "
@@ -11152,7 +11167,7 @@ yyreduce:
     break;
 
   case 368:
-#line 4817 "Gmsh.y"
+#line 4834 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(4) - (18)].l)) != List_Nbr((yyvsp[(8) - (18)].l))){
         yymsg(0, "Number of master faces (%d) different from number of "
@@ -11180,7 +11195,7 @@ yyreduce:
     break;
 
   case 369:
-#line 4843 "Gmsh.y"
+#line 4860 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(4) - (12)].l)) != List_Nbr((yyvsp[(8) - (12)].l))){
         yymsg(0, "Number of master edges (%d) different from number of "
@@ -11208,7 +11223,7 @@ yyreduce:
     break;
 
   case 370:
-#line 4869 "Gmsh.y"
+#line 4886 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(4) - (12)].l)) != List_Nbr((yyvsp[(8) - (12)].l))){
         yymsg(0, "Number of master faces (%d) different from number of "
@@ -11236,7 +11251,7 @@ yyreduce:
     break;
 
   case 371:
-#line 4895 "Gmsh.y"
+#line 4912 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(5) - (12)].l)) != List_Nbr((yyvsp[(10) - (12)].l))){
         yymsg(0, "Number of master surface edges (%d) different from number of "
@@ -11260,7 +11275,7 @@ yyreduce:
     break;
 
   case 372:
-#line 4916 "Gmsh.y"
+#line 4933 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s){
@@ -11291,7 +11306,7 @@ yyreduce:
     break;
 
   case 373:
-#line 4944 "Gmsh.y"
+#line 4961 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s){
@@ -11322,7 +11337,7 @@ yyreduce:
     break;
 
   case 374:
-#line 4972 "Gmsh.y"
+#line 4989 "Gmsh.y"
     {
       Volume *v = FindVolume((int)(yyvsp[(8) - (10)].d));
       if(v){
@@ -11353,7 +11368,7 @@ yyreduce:
     break;
 
   case 375:
-#line 5000 "Gmsh.y"
+#line 5017 "Gmsh.y"
     {
       Volume *v = FindVolume((int)(yyvsp[(8) - (10)].d));
       if(v){
@@ -11384,7 +11399,7 @@ yyreduce:
     break;
 
   case 376:
-#line 5028 "Gmsh.y"
+#line 5045 "Gmsh.y"
     {
       Volume *v = FindVolume((int)(yyvsp[(8) - (10)].d));
       if(v){
@@ -11415,7 +11430,7 @@ yyreduce:
     break;
 
   case 377:
-#line 5056 "Gmsh.y"
+#line 5073 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
@@ -11457,7 +11472,7 @@ yyreduce:
     break;
 
   case 378:
-#line 5095 "Gmsh.y"
+#line 5112 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Curves);
@@ -11499,7 +11514,7 @@ yyreduce:
     break;
 
   case 379:
-#line 5134 "Gmsh.y"
+#line 5151 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
         for(GModel::viter it = GModel::current()->firstVertex();
@@ -11523,7 +11538,7 @@ yyreduce:
     break;
 
   case 380:
-#line 5155 "Gmsh.y"
+#line 5172 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
         for(GModel::eiter it = GModel::current()->firstEdge();
@@ -11547,7 +11562,7 @@ yyreduce:
     break;
 
   case 381:
-#line 5176 "Gmsh.y"
+#line 5193 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
         for(GModel::fiter it = GModel::current()->firstFace();
@@ -11571,14 +11586,14 @@ yyreduce:
     break;
 
   case 382:
-#line 5203 "Gmsh.y"
+#line 5220 "Gmsh.y"
     {
       ReplaceAllDuplicates();
     ;}
     break;
 
   case 383:
-#line 5207 "Gmsh.y"
+#line 5224 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Geometry"))
         ReplaceAllDuplicates();
@@ -11591,7 +11606,7 @@ yyreduce:
     break;
 
   case 384:
-#line 5217 "Gmsh.y"
+#line 5234 "Gmsh.y"
     {
       if(List_Nbr((yyvsp[(4) - (6)].l)) >= 2){
         double d;
@@ -11624,22 +11639,22 @@ yyreduce:
     break;
 
   case 385:
-#line 5251 "Gmsh.y"
+#line 5268 "Gmsh.y"
     { (yyval.c) = (char*)"Homology"; ;}
     break;
 
   case 386:
-#line 5252 "Gmsh.y"
+#line 5269 "Gmsh.y"
     { (yyval.c) = (char*)"Cohomology"; ;}
     break;
 
   case 387:
-#line 5253 "Gmsh.y"
+#line 5270 "Gmsh.y"
     { (yyval.c) = (char*)"Betti"; ;}
     break;
 
   case 388:
-#line 5258 "Gmsh.y"
+#line 5275 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < 4; i++) dim.push_back(i);
@@ -11648,7 +11663,7 @@ yyreduce:
     break;
 
   case 389:
-#line 5264 "Gmsh.y"
+#line 5281 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (5)].l)); i++){
@@ -11663,7 +11678,7 @@ yyreduce:
     break;
 
   case 390:
-#line 5276 "Gmsh.y"
+#line 5293 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (7)].l)); i++){
@@ -11684,7 +11699,7 @@ yyreduce:
     break;
 
   case 391:
-#line 5294 "Gmsh.y"
+#line 5311 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < List_Nbr((yyvsp[(6) - (10)].l)); i++){
@@ -11710,47 +11725,47 @@ yyreduce:
     break;
 
   case 392:
-#line 5321 "Gmsh.y"
+#line 5338 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d);           ;}
     break;
 
   case 393:
-#line 5322 "Gmsh.y"
+#line 5339 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (3)].d);           ;}
     break;
 
   case 394:
-#line 5323 "Gmsh.y"
+#line 5340 "Gmsh.y"
     { (yyval.d) = -(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 395:
-#line 5324 "Gmsh.y"
+#line 5341 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (2)].d);           ;}
     break;
 
   case 396:
-#line 5325 "Gmsh.y"
+#line 5342 "Gmsh.y"
     { (yyval.d) = !(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 397:
-#line 5326 "Gmsh.y"
+#line 5343 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) - (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 398:
-#line 5327 "Gmsh.y"
+#line 5344 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) + (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 399:
-#line 5328 "Gmsh.y"
+#line 5345 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) * (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 400:
-#line 5330 "Gmsh.y"
+#line 5347 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (3)].d))
 	yymsg(0, "Division by zero in '%g / %g'", (yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));
@@ -11760,232 +11775,232 @@ yyreduce:
     break;
 
   case 401:
-#line 5336 "Gmsh.y"
+#line 5353 "Gmsh.y"
     { (yyval.d) = (int)(yyvsp[(1) - (3)].d) % (int)(yyvsp[(3) - (3)].d);  ;}
     break;
 
   case 402:
-#line 5337 "Gmsh.y"
+#line 5354 "Gmsh.y"
     { (yyval.d) = pow((yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));  ;}
     break;
 
   case 403:
-#line 5338 "Gmsh.y"
+#line 5355 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 404:
-#line 5339 "Gmsh.y"
+#line 5356 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) > (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 405:
-#line 5340 "Gmsh.y"
+#line 5357 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) <= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 406:
-#line 5341 "Gmsh.y"
+#line 5358 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) >= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 407:
-#line 5342 "Gmsh.y"
+#line 5359 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) == (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 408:
-#line 5343 "Gmsh.y"
+#line 5360 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) != (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 409:
-#line 5344 "Gmsh.y"
+#line 5361 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) && (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 410:
-#line 5345 "Gmsh.y"
+#line 5362 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) || (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 411:
-#line 5346 "Gmsh.y"
+#line 5363 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (5)].d) ? (yyvsp[(3) - (5)].d) : (yyvsp[(5) - (5)].d); ;}
     break;
 
   case 412:
-#line 5347 "Gmsh.y"
+#line 5364 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 413:
-#line 5348 "Gmsh.y"
+#line 5365 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 414:
-#line 5349 "Gmsh.y"
+#line 5366 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 415:
-#line 5350 "Gmsh.y"
+#line 5367 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 416:
-#line 5351 "Gmsh.y"
+#line 5368 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 417:
-#line 5352 "Gmsh.y"
+#line 5369 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 418:
-#line 5353 "Gmsh.y"
+#line 5370 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 419:
-#line 5354 "Gmsh.y"
+#line 5371 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 420:
-#line 5355 "Gmsh.y"
+#line 5372 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 421:
-#line 5356 "Gmsh.y"
+#line 5373 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 422:
-#line 5357 "Gmsh.y"
+#line 5374 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
   case 423:
-#line 5358 "Gmsh.y"
+#line 5375 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 424:
-#line 5359 "Gmsh.y"
+#line 5376 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 425:
-#line 5360 "Gmsh.y"
+#line 5377 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 426:
-#line 5361 "Gmsh.y"
+#line 5378 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 427:
-#line 5362 "Gmsh.y"
+#line 5379 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 428:
-#line 5363 "Gmsh.y"
+#line 5380 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 429:
-#line 5364 "Gmsh.y"
+#line 5381 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d) + 0.5); ;}
     break;
 
   case 430:
-#line 5365 "Gmsh.y"
+#line 5382 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 431:
-#line 5366 "Gmsh.y"
+#line 5383 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 432:
-#line 5367 "Gmsh.y"
+#line 5384 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 433:
-#line 5368 "Gmsh.y"
+#line 5385 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
     break;
 
   case 434:
-#line 5377 "Gmsh.y"
+#line 5394 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d); ;}
     break;
 
   case 435:
-#line 5378 "Gmsh.y"
+#line 5395 "Gmsh.y"
     { (yyval.d) = 3.141592653589793; ;}
     break;
 
   case 436:
-#line 5379 "Gmsh.y"
+#line 5396 "Gmsh.y"
     { (yyval.d) = (double)ImbricatedTest; ;}
     break;
 
   case 437:
-#line 5380 "Gmsh.y"
+#line 5397 "Gmsh.y"
     { (yyval.d) = Msg::GetCommRank(); ;}
     break;
 
   case 438:
-#line 5381 "Gmsh.y"
+#line 5398 "Gmsh.y"
     { (yyval.d) = Msg::GetCommSize(); ;}
     break;
 
   case 439:
-#line 5382 "Gmsh.y"
+#line 5399 "Gmsh.y"
     { (yyval.d) = GetGmshMajorVersion(); ;}
     break;
 
   case 440:
-#line 5383 "Gmsh.y"
+#line 5400 "Gmsh.y"
     { (yyval.d) = GetGmshMinorVersion(); ;}
     break;
 
   case 441:
-#line 5384 "Gmsh.y"
+#line 5401 "Gmsh.y"
     { (yyval.d) = GetGmshPatchVersion(); ;}
     break;
 
   case 442:
-#line 5385 "Gmsh.y"
+#line 5402 "Gmsh.y"
     { (yyval.d) = Cpu(); ;}
     break;
 
   case 443:
-#line 5386 "Gmsh.y"
+#line 5403 "Gmsh.y"
     { (yyval.d) = GetMemoryUsage()/1024./1024.; ;}
     break;
 
   case 444:
-#line 5387 "Gmsh.y"
+#line 5404 "Gmsh.y"
     { (yyval.d) = TotalRam(); ;}
     break;
 
   case 445:
-#line 5392 "Gmsh.y"
+#line 5409 "Gmsh.y"
     { floatOptions.clear(); charOptions.clear(); ;}
     break;
 
   case 446:
-#line 5394 "Gmsh.y"
+#line 5411 "Gmsh.y"
     {
       std::vector<double> val(1, (yyvsp[(3) - (6)].d));
       Msg::ExchangeOnelabParameter("", val, floatOptions, charOptions);
@@ -11994,7 +12009,7 @@ yyreduce:
     break;
 
   case 447:
-#line 5400 "Gmsh.y"
+#line 5417 "Gmsh.y"
     {
       (yyval.d) = Msg::GetOnelabNumber((yyvsp[(3) - (4)].c));
       Free((yyvsp[(3) - (4)].c));
@@ -12002,7 +12017,7 @@ yyreduce:
     break;
 
   case 448:
-#line 5405 "Gmsh.y"
+#line 5422 "Gmsh.y"
     {
       (yyval.d) = Msg::GetOnelabNumber((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
       Free((yyvsp[(3) - (6)].c));
@@ -12010,7 +12025,7 @@ yyreduce:
     break;
 
   case 449:
-#line 5410 "Gmsh.y"
+#line 5427 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (1)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (1)].c));
@@ -12030,7 +12045,7 @@ yyreduce:
     break;
 
   case 450:
-#line 5427 "Gmsh.y"
+#line 5444 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -12051,7 +12066,7 @@ yyreduce:
     break;
 
   case 451:
-#line 5445 "Gmsh.y"
+#line 5462 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -12072,7 +12087,7 @@ yyreduce:
     break;
 
   case 452:
-#line 5463 "Gmsh.y"
+#line 5480 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -12093,7 +12108,7 @@ yyreduce:
     break;
 
   case 453:
-#line 5481 "Gmsh.y"
+#line 5498 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -12114,7 +12129,7 @@ yyreduce:
     break;
 
   case 454:
-#line 5499 "Gmsh.y"
+#line 5516 "Gmsh.y"
     {
       (yyval.d) = gmsh_yysymbols.count((yyvsp[(3) - (4)].c));
       Free((yyvsp[(3) - (4)].c));
@@ -12122,7 +12137,7 @@ yyreduce:
     break;
 
   case 455:
-#line 5504 "Gmsh.y"
+#line 5521 "Gmsh.y"
     {
       std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(3) - (4)].c));
       (yyval.d) = !StatFile(tmp);
@@ -12131,7 +12146,7 @@ yyreduce:
     break;
 
   case 456:
-#line 5510 "Gmsh.y"
+#line 5527 "Gmsh.y"
     {
       if(gmsh_yysymbols.count((yyvsp[(2) - (4)].c))){
         gmsh_yysymbol &s(gmsh_yysymbols[(yyvsp[(2) - (4)].c)]);
@@ -12149,7 +12164,7 @@ yyreduce:
     break;
 
   case 457:
-#line 5525 "Gmsh.y"
+#line 5542 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (2)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (2)].c));
@@ -12171,7 +12186,7 @@ yyreduce:
     break;
 
   case 458:
-#line 5544 "Gmsh.y"
+#line 5561 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -12194,7 +12209,7 @@ yyreduce:
     break;
 
   case 459:
-#line 5564 "Gmsh.y"
+#line 5581 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -12217,7 +12232,7 @@ yyreduce:
     break;
 
   case 460:
-#line 5584 "Gmsh.y"
+#line 5601 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -12240,7 +12255,7 @@ yyreduce:
     break;
 
   case 461:
-#line 5604 "Gmsh.y"
+#line 5621 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -12263,7 +12278,7 @@ yyreduce:
     break;
 
   case 462:
-#line 5627 "Gmsh.y"
+#line 5644 "Gmsh.y"
     {
       NumberOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), (yyval.d));
       Free((yyvsp[(1) - (3)].c)); Free((yyvsp[(3) - (3)].c));
@@ -12271,7 +12286,7 @@ yyreduce:
     break;
 
   case 463:
-#line 5632 "Gmsh.y"
+#line 5649 "Gmsh.y"
     {
       NumberOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), (yyval.d));
       Free((yyvsp[(1) - (6)].c)); Free((yyvsp[(6) - (6)].c));
@@ -12279,7 +12294,7 @@ yyreduce:
     break;
 
   case 464:
-#line 5637 "Gmsh.y"
+#line 5654 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (4)].c), 0, (yyvsp[(3) - (4)].c), d)){
@@ -12292,7 +12307,7 @@ yyreduce:
     break;
 
   case 465:
-#line 5647 "Gmsh.y"
+#line 5664 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c), d)){
@@ -12305,7 +12320,7 @@ yyreduce:
     break;
 
   case 466:
-#line 5657 "Gmsh.y"
+#line 5674 "Gmsh.y"
     {
       (yyval.d) = Msg::GetValue((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
       Free((yyvsp[(3) - (6)].c));
@@ -12313,7 +12328,7 @@ yyreduce:
     break;
 
   case 467:
-#line 5662 "Gmsh.y"
+#line 5679 "Gmsh.y"
     {
       int matches = 0;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
@@ -12327,7 +12342,7 @@ yyreduce:
     break;
 
   case 468:
-#line 5673 "Gmsh.y"
+#line 5690 "Gmsh.y"
     {
       std::string s((yyvsp[(3) - (6)].c)), substr((yyvsp[(5) - (6)].c));
       if(s.find(substr) != std::string::npos)
@@ -12339,7 +12354,7 @@ yyreduce:
     break;
 
   case 469:
-#line 5682 "Gmsh.y"
+#line 5699 "Gmsh.y"
     {
       (yyval.d) = strlen((yyvsp[(3) - (4)].c));
       Free((yyvsp[(3) - (4)].c));
@@ -12347,7 +12362,7 @@ yyreduce:
     break;
 
   case 470:
-#line 5687 "Gmsh.y"
+#line 5704 "Gmsh.y"
     {
       (yyval.d) = strcmp((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
       Free((yyvsp[(3) - (6)].c)); Free((yyvsp[(5) - (6)].c));
@@ -12355,7 +12370,7 @@ yyreduce:
     break;
 
   case 471:
-#line 5692 "Gmsh.y"
+#line 5709 "Gmsh.y"
     {
       int align = 0, font = 0, fontsize = CTX::instance()->glFontSize;
       if(List_Nbr((yyvsp[(3) - (4)].l)) % 2){
@@ -12382,70 +12397,70 @@ yyreduce:
     break;
 
   case 472:
-#line 5719 "Gmsh.y"
+#line 5736 "Gmsh.y"
     {
       memcpy((yyval.v), (yyvsp[(1) - (1)].v), 5*sizeof(double));
     ;}
     break;
 
   case 473:
-#line 5723 "Gmsh.y"
+#line 5740 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = -(yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 474:
-#line 5727 "Gmsh.y"
+#line 5744 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 475:
-#line 5731 "Gmsh.y"
+#line 5748 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] - (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 476:
-#line 5735 "Gmsh.y"
+#line 5752 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] + (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 477:
-#line 5742 "Gmsh.y"
+#line 5759 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (11)].d);  (yyval.v)[1] = (yyvsp[(4) - (11)].d);  (yyval.v)[2] = (yyvsp[(6) - (11)].d);  (yyval.v)[3] = (yyvsp[(8) - (11)].d); (yyval.v)[4] = (yyvsp[(10) - (11)].d);
     ;}
     break;
 
   case 478:
-#line 5746 "Gmsh.y"
+#line 5763 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (9)].d);  (yyval.v)[1] = (yyvsp[(4) - (9)].d);  (yyval.v)[2] = (yyvsp[(6) - (9)].d);  (yyval.v)[3] = (yyvsp[(8) - (9)].d); (yyval.v)[4] = 1.0;
     ;}
     break;
 
   case 479:
-#line 5750 "Gmsh.y"
+#line 5767 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (7)].d);  (yyval.v)[1] = (yyvsp[(4) - (7)].d);  (yyval.v)[2] = (yyvsp[(6) - (7)].d);  (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0;
     ;}
     break;
 
   case 480:
-#line 5754 "Gmsh.y"
+#line 5771 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (7)].d);  (yyval.v)[1] = (yyvsp[(4) - (7)].d);  (yyval.v)[2] = (yyvsp[(6) - (7)].d);  (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0;
     ;}
     break;
 
   case 481:
-#line 5761 "Gmsh.y"
+#line 5778 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(List_T*));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].l)));
@@ -12453,14 +12468,14 @@ yyreduce:
     break;
 
   case 482:
-#line 5766 "Gmsh.y"
+#line 5783 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].l)));
     ;}
     break;
 
   case 483:
-#line 5773 "Gmsh.y"
+#line 5790 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -12468,14 +12483,14 @@ yyreduce:
     break;
 
   case 484:
-#line 5778 "Gmsh.y"
+#line 5795 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 485:
-#line 5782 "Gmsh.y"
+#line 5799 "Gmsh.y"
     {
       // creates an empty list
       (yyval.l) = List_Create(2, 1, sizeof(double));
@@ -12483,14 +12498,14 @@ yyreduce:
     break;
 
   case 486:
-#line 5787 "Gmsh.y"
+#line 5804 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 487:
-#line 5791 "Gmsh.y"
+#line 5808 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -12501,7 +12516,7 @@ yyreduce:
     break;
 
   case 488:
-#line 5799 "Gmsh.y"
+#line 5816 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(4) - (5)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -12512,14 +12527,14 @@ yyreduce:
     break;
 
   case 489:
-#line 5810 "Gmsh.y"
+#line 5827 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 490:
-#line 5814 "Gmsh.y"
+#line 5831 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (1)].c), "*") || !strcmp((yyvsp[(1) - (1)].c), "all"))
         (yyval.l) = 0;
@@ -12531,7 +12546,7 @@ yyreduce:
     break;
 
   case 491:
-#line 5826 "Gmsh.y"
+#line 5843 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (2)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -12542,7 +12557,7 @@ yyreduce:
     break;
 
   case 492:
-#line 5834 "Gmsh.y"
+#line 5851 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (3)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -12553,7 +12568,7 @@ yyreduce:
     break;
 
   case 493:
-#line 5842 "Gmsh.y"
+#line 5859 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       for(double d = (yyvsp[(1) - (3)].d); ((yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d)) ? (d <= (yyvsp[(3) - (3)].d)) : (d >= (yyvsp[(3) - (3)].d));
@@ -12563,7 +12578,7 @@ yyreduce:
     break;
 
   case 494:
-#line 5849 "Gmsh.y"
+#line 5866 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!(yyvsp[(5) - (5)].d)){  //|| ($1 < $3 && $5 < 0) || ($1 > $3 && $5 > 0)
@@ -12576,7 +12591,7 @@ yyreduce:
     break;
 
   case 495:
-#line 5859 "Gmsh.y"
+#line 5876 "Gmsh.y"
     {
       // Returns the coordinates of a point and fills a list with it.
       // This allows to ensure e.g. that relative point positions are
@@ -12608,63 +12623,63 @@ yyreduce:
     break;
 
   case 496:
-#line 5888 "Gmsh.y"
+#line 5905 "Gmsh.y"
     {
       (yyval.l) = GetAllElementaryEntityNumbers(0);
     ;}
     break;
 
   case 497:
-#line 5892 "Gmsh.y"
+#line 5909 "Gmsh.y"
     {
       (yyval.l) = GetAllElementaryEntityNumbers(1);
     ;}
     break;
 
   case 498:
-#line 5896 "Gmsh.y"
+#line 5913 "Gmsh.y"
     {
       (yyval.l) = GetAllElementaryEntityNumbers(2);
     ;}
     break;
 
   case 499:
-#line 5900 "Gmsh.y"
+#line 5917 "Gmsh.y"
     {
       (yyval.l) = GetAllElementaryEntityNumbers(3);
     ;}
     break;
 
   case 500:
-#line 5904 "Gmsh.y"
+#line 5921 "Gmsh.y"
     {
       (yyval.l) = GetAllPhysicalEntityNumbers(0);
     ;}
     break;
 
   case 501:
-#line 5908 "Gmsh.y"
+#line 5925 "Gmsh.y"
     {
       (yyval.l) = GetAllPhysicalEntityNumbers(1);
     ;}
     break;
 
   case 502:
-#line 5912 "Gmsh.y"
+#line 5929 "Gmsh.y"
     {
       (yyval.l) = GetAllPhysicalEntityNumbers(2);
     ;}
     break;
 
   case 503:
-#line 5916 "Gmsh.y"
+#line 5933 "Gmsh.y"
     {
       (yyval.l) = GetAllPhysicalEntityNumbers(3);
     ;}
     break;
 
   case 504:
-#line 5920 "Gmsh.y"
+#line 5937 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@ -12696,7 +12711,7 @@ yyreduce:
     break;
 
   case 505:
-#line 5949 "Gmsh.y"
+#line 5966 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@ -12728,7 +12743,7 @@ yyreduce:
     break;
 
   case 506:
-#line 5978 "Gmsh.y"
+#line 5995 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@ -12760,7 +12775,7 @@ yyreduce:
     break;
 
   case 507:
-#line 6007 "Gmsh.y"
+#line 6024 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@ -12792,7 +12807,7 @@ yyreduce:
     break;
 
   case 508:
-#line 6037 "Gmsh.y"
+#line 6054 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       GModel::current()->importGEOInternals();
@@ -12807,7 +12822,7 @@ yyreduce:
     break;
 
   case 509:
-#line 6050 "Gmsh.y"
+#line 6067 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       GModel::current()->importGEOInternals();
@@ -12822,7 +12837,7 @@ yyreduce:
     break;
 
   case 510:
-#line 6063 "Gmsh.y"
+#line 6080 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       GModel::current()->importGEOInternals();
@@ -12837,7 +12852,7 @@ yyreduce:
     break;
 
   case 511:
-#line 6076 "Gmsh.y"
+#line 6093 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       GModel::current()->importGEOInternals();
@@ -12852,7 +12867,7 @@ yyreduce:
     break;
 
   case 512:
-#line 6088 "Gmsh.y"
+#line 6105 "Gmsh.y"
     {
       (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){
@@ -12865,7 +12880,7 @@ yyreduce:
     break;
 
   case 513:
-#line 6098 "Gmsh.y"
+#line 6115 "Gmsh.y"
     {
       (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){
@@ -12878,7 +12893,7 @@ yyreduce:
     break;
 
   case 514:
-#line 6108 "Gmsh.y"
+#line 6125 "Gmsh.y"
     {
       (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){
@@ -12891,7 +12906,7 @@ yyreduce:
     break;
 
   case 515:
-#line 6118 "Gmsh.y"
+#line 6135 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
@@ -12906,7 +12921,7 @@ yyreduce:
     break;
 
   case 516:
-#line 6130 "Gmsh.y"
+#line 6147 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
@@ -12921,7 +12936,7 @@ yyreduce:
     break;
 
   case 517:
-#line 6143 "Gmsh.y"
+#line 6160 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(3) - (4)].c)))
@@ -12936,35 +12951,35 @@ yyreduce:
     break;
 
   case 518:
-#line 6155 "Gmsh.y"
+#line 6172 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
     ;}
     break;
 
   case 519:
-#line 6159 "Gmsh.y"
+#line 6176 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
     ;}
     break;
 
   case 520:
-#line 6163 "Gmsh.y"
+#line 6180 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(4) - (6)].l);
     ;}
     break;
 
   case 521:
-#line 6167 "Gmsh.y"
+#line 6184 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(4) - (6)].l);
     ;}
     break;
 
   case 522:
-#line 6171 "Gmsh.y"
+#line 6188 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
@@ -12985,7 +13000,7 @@ yyreduce:
     break;
 
   case 523:
-#line 6189 "Gmsh.y"
+#line 6206 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
@@ -13006,7 +13021,7 @@ yyreduce:
     break;
 
   case 524:
-#line 6207 "Gmsh.y"
+#line 6224 "Gmsh.y"
     {
       (yyval.l) = List_Create(20,20,sizeof(double));
       for(int i = 0; i < (int)(yyvsp[(7) - (8)].d); i++) {
@@ -13017,7 +13032,7 @@ yyreduce:
     break;
 
   case 525:
-#line 6215 "Gmsh.y"
+#line 6232 "Gmsh.y"
     {
       (yyval.l) = List_Create(20,20,sizeof(double));
       for(int i = 0; i < (int)(yyvsp[(7) - (8)].d); i++) {
@@ -13028,7 +13043,7 @@ yyreduce:
     break;
 
   case 526:
-#line 6223 "Gmsh.y"
+#line 6240 "Gmsh.y"
     {
       Msg::Barrier();
       FILE *File;
@@ -13060,7 +13075,7 @@ yyreduce:
     break;
 
   case 527:
-#line 6252 "Gmsh.y"
+#line 6269 "Gmsh.y"
     {
       double x0 = (yyvsp[(3) - (14)].d), x1 = (yyvsp[(5) - (14)].d), y0 = (yyvsp[(7) - (14)].d), y1 = (yyvsp[(9) - (14)].d), ys = (yyvsp[(11) - (14)].d);
       int N = (int)(yyvsp[(13) - (14)].d);
@@ -13073,7 +13088,7 @@ yyreduce:
     break;
 
   case 528:
-#line 6265 "Gmsh.y"
+#line 6282 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -13081,21 +13096,21 @@ yyreduce:
     break;
 
   case 529:
-#line 6270 "Gmsh.y"
+#line 6287 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 530:
-#line 6274 "Gmsh.y"
+#line 6291 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].d)));
     ;}
     break;
 
   case 531:
-#line 6278 "Gmsh.y"
+#line 6295 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (3)].l)); i++){
 	double d;
@@ -13107,21 +13122,21 @@ yyreduce:
     break;
 
   case 532:
-#line 6290 "Gmsh.y"
+#line 6307 "Gmsh.y"
     {
       (yyval.u) = CTX::instance()->packColor((int)(yyvsp[(2) - (9)].d), (int)(yyvsp[(4) - (9)].d), (int)(yyvsp[(6) - (9)].d), (int)(yyvsp[(8) - (9)].d));
     ;}
     break;
 
   case 533:
-#line 6294 "Gmsh.y"
+#line 6311 "Gmsh.y"
     {
       (yyval.u) = CTX::instance()->packColor((int)(yyvsp[(2) - (7)].d), (int)(yyvsp[(4) - (7)].d), (int)(yyvsp[(6) - (7)].d), 255);
     ;}
     break;
 
   case 534:
-#line 6306 "Gmsh.y"
+#line 6323 "Gmsh.y"
     {
       int flag = 0;
       if(gmsh_yystringsymbols.count((yyvsp[(1) - (1)].c))){
@@ -13141,7 +13156,7 @@ yyreduce:
     break;
 
   case 535:
-#line 6323 "Gmsh.y"
+#line 6340 "Gmsh.y"
     {
       unsigned int val = 0;
       ColorOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(5) - (5)].c), val);
@@ -13151,14 +13166,14 @@ yyreduce:
     break;
 
   case 536:
-#line 6333 "Gmsh.y"
+#line 6350 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 537:
-#line 6337 "Gmsh.y"
+#line 6354 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       GmshColorTable *ct = GetColorTable((int)(yyvsp[(3) - (6)].d));
@@ -13173,7 +13188,7 @@ yyreduce:
     break;
 
   case 538:
-#line 6352 "Gmsh.y"
+#line 6369 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].u)));
@@ -13181,21 +13196,21 @@ yyreduce:
     break;
 
   case 539:
-#line 6357 "Gmsh.y"
+#line 6374 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].u)));
     ;}
     break;
 
   case 540:
-#line 6364 "Gmsh.y"
+#line 6381 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 541:
-#line 6368 "Gmsh.y"
+#line 6385 "Gmsh.y"
     {
       std::string val;
       if(!gmsh_yystringsymbols.count((yyvsp[(1) - (1)].c)))
@@ -13211,7 +13226,7 @@ yyreduce:
     break;
 
   case 542:
-#line 6381 "Gmsh.y"
+#line 6398 "Gmsh.y"
     {
       std::string val;
       int j = (int)(yyvsp[(3) - (4)].d);
@@ -13228,7 +13243,7 @@ yyreduce:
     break;
 
   case 543:
-#line 6395 "Gmsh.y"
+#line 6412 "Gmsh.y"
     {
       std::string val;
       int j = (int)(yyvsp[(3) - (4)].d);
@@ -13245,7 +13260,7 @@ yyreduce:
     break;
 
   case 544:
-#line 6409 "Gmsh.y"
+#line 6426 "Gmsh.y"
     {
       std::string val;
       int j = (int)(yyvsp[(3) - (4)].d);
@@ -13262,7 +13277,7 @@ yyreduce:
     break;
 
   case 545:
-#line 6423 "Gmsh.y"
+#line 6440 "Gmsh.y"
     {
       std::string val;
       int j = (int)(yyvsp[(3) - (4)].d);
@@ -13279,7 +13294,7 @@ yyreduce:
     break;
 
   case 546:
-#line 6437 "Gmsh.y"
+#line 6454 "Gmsh.y"
     {
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), out);
@@ -13290,7 +13305,7 @@ yyreduce:
     break;
 
   case 547:
-#line 6445 "Gmsh.y"
+#line 6462 "Gmsh.y"
     {
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), out);
@@ -13301,21 +13316,21 @@ yyreduce:
     break;
 
   case 548:
-#line 6456 "Gmsh.y"
+#line 6473 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 549:
-#line 6460 "Gmsh.y"
+#line 6477 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(3) - (4)].c);
     ;}
     break;
 
   case 550:
-#line 6464 "Gmsh.y"
+#line 6481 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc(32 * sizeof(char));
       time_t now;
@@ -13326,7 +13341,7 @@ yyreduce:
     break;
 
   case 551:
-#line 6472 "Gmsh.y"
+#line 6489 "Gmsh.y"
     {
       std::string exe = Msg::GetExecutableName();
       (yyval.c) = (char *)Malloc(exe.size() + 1);
@@ -13335,7 +13350,7 @@ yyreduce:
     break;
 
   case 552:
-#line 6478 "Gmsh.y"
+#line 6495 "Gmsh.y"
     {
       std::string action = Msg::GetOnelabAction();
       (yyval.c) = (char *)Malloc(action.size() + 1);
@@ -13344,7 +13359,7 @@ yyreduce:
     break;
 
   case 553:
-#line 6484 "Gmsh.y"
+#line 6501 "Gmsh.y"
     {
       const char *env = GetEnvironmentVar((yyvsp[(3) - (4)].c));
       if(!env) env = "";
@@ -13355,7 +13370,7 @@ yyreduce:
     break;
 
   case 554:
-#line 6492 "Gmsh.y"
+#line 6509 "Gmsh.y"
     {
       std::string s = Msg::GetString((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
       (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char));
@@ -13366,7 +13381,7 @@ yyreduce:
     break;
 
   case 555:
-#line 6500 "Gmsh.y"
+#line 6517 "Gmsh.y"
     {
       std::string s = Msg::GetOnelabString((yyvsp[(3) - (4)].c));
       (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char));
@@ -13376,7 +13391,7 @@ yyreduce:
     break;
 
   case 556:
-#line 6507 "Gmsh.y"
+#line 6524 "Gmsh.y"
     {
       std::string s = Msg::GetOnelabString((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
       (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char));
@@ -13387,7 +13402,7 @@ yyreduce:
     break;
 
   case 557:
-#line 6515 "Gmsh.y"
+#line 6532 "Gmsh.y"
     {
       int size = 1;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++)
@@ -13405,7 +13420,7 @@ yyreduce:
     break;
 
   case 558:
-#line 6530 "Gmsh.y"
+#line 6547 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -13422,7 +13437,7 @@ yyreduce:
     break;
 
   case 559:
-#line 6544 "Gmsh.y"
+#line 6561 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -13439,7 +13454,7 @@ yyreduce:
     break;
 
   case 560:
-#line 6558 "Gmsh.y"
+#line 6575 "Gmsh.y"
     {
       std::string input = (yyvsp[(3) - (8)].c);
       std::string substr_old = (yyvsp[(5) - (8)].c);
@@ -13454,7 +13469,7 @@ yyreduce:
     break;
 
   case 561:
-#line 6570 "Gmsh.y"
+#line 6587 "Gmsh.y"
     {
       int size = 1;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++)
@@ -13473,7 +13488,7 @@ yyreduce:
     break;
 
   case 562:
-#line 6586 "Gmsh.y"
+#line 6603 "Gmsh.y"
     {
       int i = 0;
       while ((yyvsp[(3) - (4)].c)[i]) {
@@ -13485,7 +13500,7 @@ yyreduce:
     break;
 
   case 563:
-#line 6595 "Gmsh.y"
+#line 6612 "Gmsh.y"
     {
       int i = 0;
       while ((yyvsp[(3) - (4)].c)[i]) {
@@ -13497,7 +13512,7 @@ yyreduce:
     break;
 
   case 564:
-#line 6604 "Gmsh.y"
+#line 6621 "Gmsh.y"
     {
       int i = 0;
       while ((yyvsp[(3) - (4)].c)[i]) {
@@ -13510,7 +13525,7 @@ yyreduce:
     break;
 
   case 565:
-#line 6614 "Gmsh.y"
+#line 6631 "Gmsh.y"
     {
       if((yyvsp[(3) - (8)].d)){
         (yyval.c) = (yyvsp[(5) - (8)].c);
@@ -13524,7 +13539,7 @@ yyreduce:
     break;
 
   case 566:
-#line 6625 "Gmsh.y"
+#line 6642 "Gmsh.y"
     {
       std::string in = (yyvsp[(3) - (8)].c);
       std::string out = in.substr((int)(yyvsp[(5) - (8)].d), (int)(yyvsp[(7) - (8)].d));
@@ -13535,7 +13550,7 @@ yyreduce:
     break;
 
   case 567:
-#line 6633 "Gmsh.y"
+#line 6650 "Gmsh.y"
     {
       std::string in = (yyvsp[(3) - (6)].c);
       std::string out = in.substr((int)(yyvsp[(5) - (6)].d), std::string::npos);
@@ -13546,14 +13561,14 @@ yyreduce:
     break;
 
   case 568:
-#line 6641 "Gmsh.y"
+#line 6658 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(3) - (4)].c);
     ;}
     break;
 
   case 569:
-#line 6645 "Gmsh.y"
+#line 6662 "Gmsh.y"
     {
       char tmpstring[5000];
       int i = PrintListOfDouble((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].l), tmpstring);
@@ -13575,7 +13590,7 @@ yyreduce:
     break;
 
   case 570:
-#line 6664 "Gmsh.y"
+#line 6681 "Gmsh.y"
     {
       std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(3) - (4)].c));
       (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char));
@@ -13585,7 +13600,7 @@ yyreduce:
     break;
 
   case 571:
-#line 6671 "Gmsh.y"
+#line 6688 "Gmsh.y"
     {
       std::string tmp = SplitFileName(GetAbsolutePath(gmsh_yyname))[0];
       (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char));
@@ -13594,7 +13609,7 @@ yyreduce:
     break;
 
   case 572:
-#line 6677 "Gmsh.y"
+#line 6694 "Gmsh.y"
     {
       std::string tmp = SplitFileName((yyvsp[(3) - (4)].c))[0];
       (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char));
@@ -13604,7 +13619,7 @@ yyreduce:
     break;
 
   case 573:
-#line 6684 "Gmsh.y"
+#line 6701 "Gmsh.y"
     {
       std::string tmp = GetAbsolutePath((yyvsp[(3) - (4)].c));
       (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char));
@@ -13614,12 +13629,12 @@ yyreduce:
     break;
 
   case 574:
-#line 6691 "Gmsh.y"
+#line 6708 "Gmsh.y"
     { floatOptions.clear(); charOptions.clear(); ;}
     break;
 
   case 575:
-#line 6693 "Gmsh.y"
+#line 6710 "Gmsh.y"
     {
       std::string val((yyvsp[(3) - (6)].c));
       Msg::ExchangeOnelabParameter("", val, floatOptions, charOptions);
@@ -13630,7 +13645,7 @@ yyreduce:
     break;
 
   case 576:
-#line 6704 "Gmsh.y"
+#line 6721 "Gmsh.y"
     {
       (yyval.l) = List_Create(20,20,sizeof(char*));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].c)));
@@ -13638,12 +13653,12 @@ yyreduce:
     break;
 
   case 577:
-#line 6709 "Gmsh.y"
+#line 6726 "Gmsh.y"
     { List_Add((yyval.l), &((yyvsp[(3) - (3)].c))); ;}
     break;
 
   case 578:
-#line 6715 "Gmsh.y"
+#line 6732 "Gmsh.y"
     {
       char tmpstr[256];
       sprintf(tmpstr, "_%d", (int)(yyvsp[(4) - (5)].d));
@@ -13654,7 +13669,7 @@ yyreduce:
     break;
 
   case 579:
-#line 6724 "Gmsh.y"
+#line 6741 "Gmsh.y"
     {
       char tmpstr[256];
       sprintf(tmpstr, "_%d", (int)(yyvsp[(4) - (5)].d));
@@ -13665,23 +13680,23 @@ yyreduce:
     break;
 
   case 580:
-#line 6737 "Gmsh.y"
+#line 6754 "Gmsh.y"
     { (yyval.c) = (yyvsp[(1) - (1)].c); ;}
     break;
 
   case 581:
-#line 6740 "Gmsh.y"
+#line 6757 "Gmsh.y"
     { (yyval.c) = (yyvsp[(1) - (1)].c); ;}
     break;
 
   case 582:
-#line 6744 "Gmsh.y"
+#line 6761 "Gmsh.y"
     { (yyval.c) = (yyvsp[(3) - (4)].c); ;}
     break;
 
 
 /* Line 1267 of yacc.c.  */
-#line 13685 "Gmsh.tab.cpp"
+#line 13700 "Gmsh.tab.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -13895,7 +13910,7 @@ yyreturn:
 }
 
 
-#line 6747 "Gmsh.y"
+#line 6764 "Gmsh.y"
 
 
 void assignVariable(const std::string &name, int index, int assignType,
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index f193e3a4548163d0bd7761dff7700c3b5a4a31c3..d1518579e6cd1489bfc2a3d9c2188e0ae7040691 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -1822,12 +1822,23 @@ Shape :
 	yymsg(0, "Curve %d already exists", num);
       }
       else{
-	List_T *temp = ListOfDouble2ListOfInt($6);
-	Curve *c = Create_Curve(num, MSH_SEGM_LINE, 1, temp, NULL,
-				-1, -1, 0., 1.);
-	Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
-	CreateReversedCurve(c);
-	List_Delete(temp);
+        if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
+          if(List_Nbr($6) == 2){
+            double d[3];
+            List_Read($6, 0, &d[0]); List_Read($6, 1, &d[1]);
+            GModel::current()->getOCCInternals()->addLine(num, (int)d[0], (int)d[1]);
+          }
+          else
+            yymsg(0, "OpenCASCADE line only takes 2 points");
+        }
+        else{
+          List_T *temp = ListOfDouble2ListOfInt($6);
+          Curve *c = Create_Curve(num, MSH_SEGM_LINE, 1, temp, NULL,
+                                  -1, -1, 0., 1.);
+          Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
+          CreateReversedCurve(c);
+          List_Delete(temp);
+        }
       }
       List_Delete($6);
       $$.Type = MSH_SEGM_LINE;
@@ -4274,7 +4285,8 @@ BooleanOption :
   | tDelete FExpr tEND { $$ = $2; }
 
 Boolean :
-    BooleanOperator '{' ListOfShapes BooleanOption '}' '{' ListOfShapes BooleanOption '}'
+    BooleanOperator '{' ListOfShapes BooleanOption '}'
+                    '{' ListOfShapes BooleanOption '}'
     {
       $$ = List_Create(2, 1, sizeof(Shape));
       if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
@@ -4285,9 +4297,13 @@ Boolean :
         for(int i = 0; i < List_Nbr($7); i++){
           Shape s; List_Read($7, i, &s); tool[3].push_back(s.Num);
         }
-        GModel::current()->getOCCInternals()->applyBooleanOperator
+        std::vector<int> ret =
+          GModel::current()->getOCCInternals()->applyBooleanOperator
           (-1, shape, tool, (OCC_Internals::BooleanOperator)$1, $4, $8);
-        // FIXME add to returned list of shapes
+        for(unsigned int i = 0; i < ret.size(); i++){
+          double d = ret[i];
+          List_Add($$, &d);
+        }
       }
       List_Delete($3);
       List_Delete($7);
@@ -4295,7 +4311,8 @@ Boolean :
 ;
 
 BooleanShape :
-    BooleanOperator '(' FExpr ')' tAFFECT '{' ListOfShapes BooleanOption '}' '{' ListOfShapes BooleanOption '}' tEND
+    BooleanOperator '(' FExpr ')' tAFFECT '{' ListOfShapes BooleanOption '}'
+                                          '{' ListOfShapes BooleanOption '}' tEND
     {
       if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
         std::vector<int> shape[4], tool[4];
diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp
index f971ce5104d3697b57db66d2109e2f1b1f28acc2..6c7ba2d32dc91f64be7b76385d65abea115249ab 100644
--- a/Parser/Gmsh.yy.cpp
+++ b/Parser/Gmsh.yy.cpp
@@ -380,8 +380,8 @@ static void yy_fatal_error (yyconst char msg[]  );
 	*yy_cp = '\0'; \
 	(yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 230
-#define YY_END_OF_BUFFER 231
+#define YY_NUM_RULES 232
+#define YY_END_OF_BUFFER 233
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -389,137 +389,138 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[1177] =
+static yyconst flex_int16_t yy_accept[1191] =
     {   0,
-        0,    0,  231,  229,    1,    1,  229,    5,  229,    6,
-      229,  229,  229,  229,  229,  224,   21,    2,  229,   16,
-      229,  228,  228,  228,  228,  228,  228,  228,  228,  228,
-      228,  228,  228,  228,  228,  228,  228,  228,  228,  228,
-      228,  228,  228,  228,  229,   28,   24,   19,   25,   17,
-       26,   18,    0,  226,    3,    4,   20,  225,  224,    0,
-       29,   27,   30,  228,  228,  228,  228,  228,  228,  228,
-      228,  228,  228,  228,  228,  228,  228,  228,  228,  228,
-      228,  228,  228,  228,  228,  228,  228,  228,  228,  228,
-      228,  228,  228,  228,  228,  228,  228,  228,  228,  228,
-
-      228,  228,  228,  228,  228,  228,  123,  122,  228,  228,
-      228,  228,  228,  228,  228,  228,  228,  228,  228,  228,
-      228,  228,  228,  228,  228,  228,  152,  228,  228,  228,
-      228,  228,  228,  228,  228,  228,  228,  228,  228,  228,
-      228,  228,  228,  228,  228,  228,  228,  205,  206,  228,
-      228,  228,  228,  228,  228,  228,  228,  228,  228,  228,
-       23,   22,    0,  225,    0,    0,  227,  228,  228,  228,
-      228,  228,  228,  228,  228,  228,  228,  228,  228,  228,
-      228,  228,  228,  228,  228,  228,  228,  228,  228,  228,
-      228,  228,  228,   62,   73,  228,  228,  228,  228,  228,
-
-      228,  228,  228,  228,  228,  228,  228,  228,  228,  228,
-       86,  228,  228,  228,  228,  228,  228,  228,  228,  107,
-      228,  228,  228,  228,  228,  228,  228,  228,  228,  228,
-      228,  228,  228,  228,  228,  228,  133,  228,  228,  228,
-      228,  228,  228,  144,  228,  228,  228,  228,  228,  228,
-      228,  228,  228,  228,  228,  228,  228,  228,  228,  228,
-      228,  228,  228,  228,  228,  228,  228,  190,  228,  228,
-      228,  182,  228,  228,  228,  228,  228,  228,  188,  228,
-      228,  228,  228,  215,  228,  228,  228,  228,  228,  228,
-      228,  228,  228,  228,  228,    0,  226,    0,    0,  225,
-
-      228,  228,   33,  228,  228,  228,  228,  228,  228,   39,
-       41,  228,  228,  228,  228,  228,  228,   70,  228,  228,
-       54,  228,  228,  228,  228,  228,  228,  228,   60,  228,
-      228,   61,  228,  228,  228,  228,  228,  228,  228,  228,
-       84,  228,   90,  228,  228,  228,  228,  228,   98,  228,
-      100,  228,  228,  102,  228,  228,  106,  228,  228,  228,
-      228,  228,  228,  228,  118,  119,  228,  228,  228,  228,
-      228,  228,  228,  228,  228,  128,  129,  228,  228,  228,
-      228,  228,  228,  228,  228,  228,  228,  228,  228,  228,
-      228,  228,  228,  228,  228,  228,  228,  228,  228,  170,
-
-      228,  228,  228,  228,  228,  228,  228,  228,  228,  228,
-      228,  228,  228,  228,  228,  201,  183,  228,  228,  228,
-      228,  228,  181,  228,  228,  228,  228,  228,  228,  228,
-      228,  228,  228,  210,  214,  228,  228,  228,  228,  228,
-      228,  228,  228,  228,  228,   10,   15,    9,    8,  228,
-       12,   14,    0,  225,   31,  228,  228,  228,   37,  228,
-      228,  228,   43,  228,   45,  228,   47,  228,  228,  228,
-      228,  228,  228,  228,  228,   65,  228,  228,  228,  228,
-      228,  228,  228,  228,  228,  228,  228,  228,  228,  228,
-      228,  228,   95,   97,  228,  228,  228,  101,  228,  228,
-
-      105,  228,  228,  228,  228,  228,  228,  228,  228,  121,
-      228,  228,  126,  228,  228,  228,  228,  228,  134,  228,
-      228,  228,  228,  137,  228,  228,  228,  228,  228,  146,
-      228,  149,  228,  228,  228,  153,  228,  154,  228,  228,
-      228,  228,  228,  228,  228,  228,  228,  228,  228,  168,
-      169,  228,  228,  228,  228,  228,  228,  203,  228,  228,
-      228,  186,  228,  228,  228,  228,  228,  228,  228,  228,
-      228,  228,  228,  228,  228,  228,  228,  228,  216,  228,
-      228,  228,  228,  222,  228,   11,  228,   13,  228,  228,
-       35,  228,   36,   40,   42,  228,   46,  228,  228,  228,
-
-      228,  228,   55,  228,  228,  228,  228,  228,  228,  228,
-      228,  228,  228,  228,  228,  228,   80,   82,  228,  228,
-      228,   91,   94,  228,   99,  228,  228,  228,  228,  228,
-      228,  109,  228,  228,  228,  228,  228,  228,  228,  135,
-      127,  228,  228,  228,  228,  228,  228,  228,  142,  228,
-      139,  228,  228,  228,  228,  228,  228,  158,  228,  157,
-      228,  228,  228,  228,  228,  228,  173,  228,  167,  228,
-      228,  228,  228,  228,  228,  228,  184,  185,  228,  192,
-      228,  197,  228,  199,  228,  228,  228,  200,  228,  228,
-      228,  228,  228,  228,  228,  228,  228,  228,  228,  228,
-
-      223,    7,  228,  228,  228,   44,   48,  228,  228,  228,
-      228,  228,  228,  228,  228,   59,   64,  228,  228,  228,
-      228,  228,  228,  228,  228,  228,  228,   83,   88,  228,
-      228,  228,  228,   92,  228,  228,  228,  228,  228,  228,
-      228,  228,  228,  228,  228,  228,  228,  228,  228,  228,
-      228,  228,  228,  228,  228,  228,  228,  228,  228,  228,
-      228,  228,  228,  228,  159,  228,  228,  228,  228,  228,
-      174,  228,  228,  228,  228,  228,  228,  228,  191,  228,
-      196,  228,  228,  228,  228,  187,  228,  228,  228,  228,
-      228,  228,  228,  228,  228,  228,  228,  228,  228,  228,
-
-      228,  228,  228,  228,   53,  228,  228,  228,  228,  228,
-       67,  228,  228,  228,  228,   76,  228,  228,  228,  228,
-       87,  228,   93,  228,  228,  228,  108,  228,  228,  228,
-      228,  228,  112,  228,  120,  228,  228,  136,  131,  228,
-      132,  228,  140,  141,  228,  228,  145,  228,  228,  228,
-      150,  151,  228,  228,  228,  228,  228,  228,  228,  228,
-      228,  228,  228,  228,  228,  228,  228,  228,  176,  228,
-      228,  228,  228,  228,  202,  228,  228,  228,  228,  228,
-      228,  228,  228,  228,  228,  228,   34,  228,  228,  228,
-      228,  228,  228,  228,   57,  228,  228,  228,  228,  228,
-
-      228,  228,  228,  228,  228,   89,   96,  228,  228,  228,
-      228,  228,  111,  110,  228,  228,  124,  228,  220,  228,
-      228,  228,  148,  228,  228,  228,  228,  228,  228,  228,
-      164,  166,  228,  228,  228,  228,  228,  178,  228,  179,
-      198,  194,  228,  228,  228,  204,  207,  228,  228,  228,
-      228,  228,  213,  228,  219,  228,  228,  228,  228,  228,
-      228,   69,  228,   58,   66,  228,  228,  228,   75,  228,
-      228,  228,  228,  103,  228,  228,  228,  228,  228,  228,
-      228,  228,  228,  228,  228,  228,  155,  228,  228,  162,
-      228,  228,  228,  171,  228,  228,   85,  177,  228,  228,
-
-      193,  228,  228,  228,  228,  228,  228,  228,  228,  228,
-      228,  228,  228,   52,  228,   68,   56,  228,  228,  228,
-      228,  228,   81,  228,  228,  228,  228,  228,  228,  228,
-      228,  221,  228,  228,  228,  156,  228,  228,  163,  228,
-      228,  228,  228,  195,  228,  228,  228,  217,  228,  211,
-      228,   32,  228,  228,  228,   49,  228,  228,  228,  228,
-       78,   79,  228,  228,  228,  228,  228,  228,  228,  130,
-      228,  143,  147,  228,  228,  228,  172,  228,  180,  189,
-      228,  209,  228,  228,  228,  228,  228,  228,  228,  228,
-      228,  228,  228,  228,  228,  228,  228,  228,  138,  228,
-
-      228,  228,  228,  228,  212,  228,  228,  228,  228,   63,
-       71,  228,   77,  228,  228,  228,  228,  113,  228,  228,
-      228,  228,  165,  175,  208,  228,  228,  228,  228,  228,
-      228,  104,  228,  228,  228,  228,  228,  160,  228,  228,
-       38,  228,  228,  228,   74,  228,  228,  228,  228,  228,
-      228,  218,  228,  228,  228,  228,  228,  228,  228,  228,
-      161,  228,   51,  228,  114,  115,  116,  117,  228,   50,
-      228,  228,  228,  125,   72,    0
+        0,    0,  233,  231,    1,    1,  231,    5,  231,    6,
+      231,  231,  231,  231,  231,  226,   21,    2,  231,   16,
+      231,  230,  230,  230,  230,  230,  230,  230,  230,  230,
+      230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
+      230,  230,  230,  230,  231,   28,   24,   19,   25,   17,
+       26,   18,    0,  228,    3,    4,   20,  227,  226,    0,
+       29,   27,   30,  230,  230,  230,  230,  230,  230,  230,
+      230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
+      230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
+      230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
+
+      230,  230,  230,  230,  230,  230,  125,  124,  230,  230,
+      230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
+      230,  230,  230,  230,  230,  230,  154,  230,  230,  230,
+      230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
+      230,  230,  230,  230,  230,  230,  230,  207,  208,  230,
+      230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
+       23,   22,    0,  227,    0,    0,  229,  230,  230,  230,
+      230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
+      230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
+      230,  230,  230,   64,   75,  230,  230,  230,  230,  230,
+
+      230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
+       88,  230,  230,  230,  230,  230,  230,  230,  230,  109,
+      230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
+      230,  230,  230,  230,  230,  230,  135,  230,  230,  230,
+      230,  230,  230,  146,  230,  230,  230,  230,  230,  230,
+      230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
+      230,  230,  230,  230,  230,  230,  230,  192,  230,  230,
+      230,  184,  230,  230,  230,  230,  230,  230,  190,  230,
+      230,  230,  230,  217,  230,  230,  230,  230,  230,  230,
+      230,  230,  230,  230,  230,    0,  228,    0,    0,  227,
+
+      230,  230,   33,  230,  230,  230,  230,  230,  230,   39,
+       41,  230,  230,  230,  230,  230,  230,   72,  230,  230,
+       56,  230,  230,  230,  230,  230,  230,  230,   62,  230,
+      230,   63,  230,  230,  230,  230,  230,  230,  230,  230,
+       86,  230,   92,  230,  230,  230,  230,  230,  100,  230,
+      102,  230,  230,  104,  230,  230,  108,  230,  230,  230,
+      230,  230,  230,  230,  120,  121,  230,  230,  230,  230,
+      230,  230,  230,  230,  230,  130,  131,  230,  230,  230,
+      230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
+      230,  230,  230,  230,  230,  230,  230,  230,  230,  172,
+
+      230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
+      230,  230,  230,  230,  230,  203,  185,  230,  230,  230,
+      230,  230,  183,  230,  230,  230,  230,  230,  230,  230,
+      230,  230,  230,  212,  216,  230,  230,  230,  230,  230,
+      230,  230,  230,  230,  230,   10,   15,    9,    8,  230,
+       12,   14,    0,  227,   31,  230,  230,  230,   37,  230,
+      230,  230,   43,  230,   45,  230,   47,  230,  230,  230,
+      230,  230,  230,  230,  230,   67,  230,  230,  230,  230,
+      230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
+      230,  230,   97,   99,  230,  230,  230,  103,  230,  230,
+
+      107,  230,  230,  230,  230,  230,  230,  230,  230,  123,
+      230,  230,  128,  230,  230,  230,  230,  230,  136,  230,
+      230,  230,  230,  139,  230,  230,  230,  230,  230,  148,
+      230,  151,  230,  230,  230,  155,  230,  156,  230,  230,
+      230,  230,  230,  230,  230,  230,  230,  230,  230,  170,
+      171,  230,  230,  230,  230,  230,  230,  205,  230,  230,
+      230,  188,  230,  230,  230,  230,  230,  230,  230,  230,
+      230,  230,  230,  230,  230,  230,  230,  230,  218,  230,
+      230,  230,  230,  224,  230,   11,  230,   13,  230,  230,
+       35,  230,   36,   40,   42,  230,   46,  230,  230,  230,
+
+      230,  230,   57,  230,  230,  230,  230,  230,  230,  230,
+      230,  230,  230,  230,  230,  230,   82,   84,  230,  230,
+      230,   93,   96,  230,  101,  230,  230,  230,  230,  230,
+      230,  111,  230,  230,  230,  230,  230,  230,  230,  137,
+      129,  230,  230,  230,  230,  230,  230,  230,  144,  230,
+      141,  230,  230,  230,  230,  230,  230,  160,  230,  159,
+      230,  230,  230,  230,  230,  230,  175,  230,  169,  230,
+      230,  230,  230,  230,  230,  230,  186,  187,  230,  194,
+      230,  199,  230,  201,  230,  230,  230,  202,  230,  230,
+      230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
+
+      225,    7,  230,  230,  230,   44,   48,  230,  230,  230,
+      230,  230,  230,  230,  230,   61,   66,  230,  230,  230,
+      230,  230,  230,  230,  230,  230,  230,   85,   90,  230,
+      230,  230,  230,   94,  230,  230,  230,  230,  230,  230,
+      230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
+      230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
+      230,  230,  230,  230,  161,  230,  230,  230,  230,  230,
+      176,  230,  230,  230,  230,  230,  230,  230,  193,  230,
+      198,  230,  230,  230,  230,  189,  230,  230,  230,  230,
+      230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
+
+      230,  230,  230,  230,  230,  230,   55,  230,  230,  230,
+      230,  230,   69,  230,  230,  230,  230,   78,  230,  230,
+      230,  230,   89,  230,   95,  230,  230,  230,  110,  230,
+      230,  230,  230,  230,  114,  230,  122,  230,  230,  138,
+      133,  230,  134,  230,  142,  143,  230,  230,  147,  230,
+      230,  230,  152,  153,  230,  230,  230,  230,  230,  230,
+      230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
+      178,  230,  230,  230,  230,  230,  204,  230,  230,  230,
+      230,  230,  230,  230,  230,  230,  230,  230,   34,  230,
+      230,  230,  230,  230,  230,  230,  230,  230,   59,  230,
+
+      230,  230,  230,  230,  230,  230,  230,  230,  230,   91,
+       98,  230,  230,  230,  230,  230,  113,  112,  230,  230,
+      126,  230,  222,  230,  230,  230,  150,  230,  230,  230,
+      230,  230,  230,  230,  166,  168,  230,  230,  230,  230,
+      230,  180,  230,  181,  200,  196,  230,  230,  230,  206,
+      209,  230,  230,  230,  230,  230,  215,  230,  221,  230,
+      230,  230,  230,  230,  230,  230,  230,   71,  230,   60,
+       68,  230,  230,  230,   77,  230,  230,  230,  230,  105,
+      230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
+      230,  230,  157,  230,  230,  164,  230,  230,  230,  173,
+
+      230,  230,   87,  179,  230,  230,  195,  230,  230,  230,
+      230,  230,  230,  230,  230,  230,  230,   50,  230,  230,
+      230,   54,  230,   70,   58,  230,  230,  230,  230,  230,
+       83,  230,  230,  230,  230,  230,  230,  230,  230,  223,
+      230,  230,  230,  158,  230,  230,  165,  230,  230,  230,
+      230,  197,  230,  230,  230,  219,  230,  213,  230,   32,
+      230,  230,  230,  230,   49,  230,  230,  230,  230,   80,
+       81,  230,  230,  230,  230,  230,  230,  230,  132,  230,
+      145,  149,  230,  230,  230,  174,  230,  182,  191,  230,
+      211,  230,  230,  230,  230,  230,  230,  230,  230,  230,
+
+      230,  230,  230,  230,  230,  230,  230,  230,  140,  230,
+      230,  230,  230,  230,  214,  230,  230,  230,  230,  230,
+       65,   73,  230,   79,  230,  230,  230,  230,  115,  230,
+      230,  230,  230,  167,  177,  210,  230,  230,  230,  230,
+      230,  230,  230,  106,  230,  230,  230,  230,  230,  162,
+      230,  230,   38,  230,  230,  230,  230,   76,  230,  230,
+      230,  230,  230,  230,  220,   53,  230,  230,  230,  230,
+      230,  230,  230,  230,  163,  230,   52,  230,  116,  117,
+      118,  119,  230,   51,  230,  230,  230,  127,   74,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -566,273 +567,279 @@ static yyconst flex_int32_t yy_meta[74] =
         2,    2,    1
     } ;
 
-static yyconst flex_int16_t yy_base[1178] =
+static yyconst flex_int16_t yy_base[1192] =
     {   0,
-        0,    0, 1309, 1310, 1310, 1310, 1287, 1310, 1301, 1310,
-     1285,   65,   66,   64,   76,   78, 1310, 1310, 1284, 1283,
-     1282,   49,   60,   71,   52,   64,   88,  102,   87,  103,
-        0, 1242,  112,  114,  105,   46,  122, 1234,  133,  186,
-      173,  122, 1239, 1247, 1225, 1310, 1310, 1310, 1310, 1310,
-     1310, 1310, 1286,  195, 1310, 1310, 1310,  202,  245,  182,
-     1310, 1310, 1310,    0,   64, 1235, 1247, 1241, 1237, 1242,
-     1235, 1242, 1227,   24, 1227,   42,   93, 1231, 1238, 1221,
-      208, 1217, 1231, 1218, 1223,   87,   53, 1232,  111, 1228,
-     1214, 1227,  158, 1227,  219, 1214, 1213, 1209, 1212, 1230,
-
-     1204, 1204, 1217,   24, 1205, 1224,    0, 1199, 1203, 1192,
-      111,  142,   96, 1231, 1211,  167, 1209, 1218, 1199, 1188,
-     1192, 1203, 1203, 1189, 1188, 1180,    0,  179,  147, 1194,
-     1201, 1188,  225,  164, 1189, 1210, 1197, 1178, 1182, 1182,
-     1185, 1179,  226, 1175, 1174, 1173,  180,    0,    0, 1201,
-     1175,  185, 1170,  214, 1185, 1181, 1169, 1174, 1171, 1159,
-     1310, 1310,  285,  290,  299,  305,  310, 1163, 1165, 1160,
-     1162, 1167, 1174,  303, 1161, 1160, 1161, 1152, 1161, 1166,
-     1157, 1154, 1155,  154, 1154, 1147, 1160,  224, 1148,  202,
-     1156, 1143, 1135, 1150,    0, 1156, 1139, 1146, 1145, 1148,
-
-     1147, 1150, 1161, 1127, 1139, 1142,  162, 1132, 1134,  221,
-        0, 1127, 1125, 1131, 1136, 1136, 1146, 1124, 1133,    0,
-     1133, 1152,  302, 1126, 1128, 1127, 1117, 1116, 1149, 1123,
-     1108, 1121, 1118, 1119,  289, 1104,  296, 1117, 1121, 1103,
-     1105, 1110, 1097,    0, 1111, 1127, 1112, 1102, 1107, 1110,
-     1101, 1091, 1095, 1100, 1093, 1104, 1091, 1099, 1098,  221,
-     1092, 1086, 1079, 1093, 1096, 1083, 1090,    0, 1083,  311,
-     1071, 1084, 1087, 1076, 1084, 1079, 1078, 1067,  323, 1079,
-     1072, 1080, 1102, 1073, 1061, 1060, 1058, 1076, 1075, 1062,
-     1069, 1068, 1059, 1051,  309,  318,  367,  376,  381,  386,
-
-     1051, 1058,    0, 1049, 1054, 1048, 1051, 1055, 1062,    0,
-     1094, 1052, 1051, 1054, 1048, 1052, 1052,    0, 1042, 1034,
-        0, 1052, 1041, 1034, 1038, 1032, 1039,  292,    0, 1043,
-     1056,    0, 1026, 1039, 1030, 1029, 1028, 1021, 1020, 1037,
-        0, 1022, 1052, 1021, 1028, 1016, 1023, 1012,    0, 1010,
-        0, 1025, 1048,    0, 1022, 1009,    0, 1006, 1024, 1010,
-     1002, 1002, 1019, 1039,    0,    0, 1007,  998, 1023,  998,
-      996,  996,  993, 1000,  995,    0, 1028, 1042,  992,  989,
-      314,  991,  987, 1027,  991, 1006,  986,  981,  997,  980,
-      984,  981,  985,  988,  983,  972,  973,  970,  345,    0,
-
-      976,  970,  973,  982,  967,  966,  963,  977,  976,  974,
-      970,  976,  956,  974,  955,    0,    0,  968,  953,  954,
-      300,  957,    0,  310,  960,  963,  950,  961,  945,  951,
-      962,  957,  973,    0,    0,  973,  983,  964,  933,  945,
-      937,  948,  936,  945,  939,    0,    0,  939,    0,  944,
-      937,    0,  391,  399,    0,  927,  958,  940,  946,  925,
-      929,  928,    0,  927,    0,  922,    0,  937,  928,  935,
-      924,  931,  928,  927,  917,  935,  916,  923,  907,  917,
-      910,  919,  910,  918,  916,  915,  914,  913,  905,  310,
-      910,  898,    0,    0,  910,  895,  908,    0,  888,  899,
-
-        0,  900,  382,  887,  895,  889,  894,  881,  889,    0,
-      911,  883,    0,  882,  891,  880,  896,  879,    0,  894,
-      916,  892,  883,    0,  867,  879,  875,  874,  883,    0,
-      884,    0,  880,  880,  880,    0,  869,    0,  887,  874,
-      862,  869,  875,  858,  870,  873,  860,  854,  866,    0,
-        0,  883,  868,  865,  855,  849,  848,    0,  856,  858,
-      857,    0,  842,  841,  845,  843,  844,  843,  850,  234,
-      852,  846,  849,  832,  836,  844,  829,  842,    0,  858,
-      365,  836,  866,    0,  838,    0,  835,    0,  822,  835,
-        0,  830,    0,    0,  870,  832,    0,  823,  822,  817,
-
-      822,  813,    0,  818,  819,  828,  823,  804,  813,  812,
-      805,  828,  803,  816,  385,  803,    0,    0,  814,  372,
-      809,    0,    0,  808,    0,  811,  806,  813,  799,  212,
-      836,    0,  809,  801,  789,  803,  800,  816,  800,    0,
-        0,  799,  800,  788,  798,  799,  786,  773,    0,  790,
-        0,  802,  790,  396,  775,  784,  791,    0,  776,    0,
-      781,  786,  388,  779,  799,  767,    0,  780,    0,  783,
-      770,  763,  779,  761,  770,  773,    0,    0,  771,    0,
-      767,    0,  771,    0,  768,  772,  761,    0,  776,  765,
-      752,  764,  746,  747,  762,  759,  386,   37,  107,  175,
-
-        0,    0,  181,  209,  245,    0,    0,  396,  286,  285,
-      328,  318,  322,  317,  339,    0,    0,  378,  382,  375,
-      371,  408,  371,  377,  373,  375,  395,    0,    0,  380,
-      391,  398,  402,    0,  386,  386,  393,  422,  419,  414,
-      405,  398,  407,  410,  390,  428,  413,  398,  413,  407,
-      415,  403,  412,  418,  410,  406,  415,  424,  408,  412,
-      427,  420,  424,  457,    0,  433,  422,  416,  433,  434,
-        0,  422,  434,  428,  438,  435,  432,  430,    0,  445,
-        0,  440,  431,  451,  439,    0,  430,  450,  451,  440,
-      440,  448,  442,  450,  445,  460,  448,  476,  460,  461,
-
-      458,  452,  460,  497,    0,  462,  460,  473,  472,  469,
-        0,  462,  468,  468,  475,    0,  472,  474,  470,  469,
-        0,  485,    0,  477,  472,  483,    0,  503,  504,  517,
-      479,  490,    0,  478,    0,  523,  481,    0,    0,  520,
-        0,  497,    0,    0,  486,  487,    0,  486,  493,  498,
-        0,    0,  503,  505,  508,  497,  499,  494,  509,  510,
-      498,  529,  499,  514,  503,  504,  503,  516,    0,  519,
-      502,  517,  524,  539,    0,  518,  519,  522,  523,  519,
-      533,  526,  531,  559,  533,  538,    0,  550,  522,  540,
-      534,  530,  533,  537,    0,  523,  543,  544,  537,  537,
-
-      535,  535,  552,  546,  551,    0,    0,  539,  537,  566,
-      567,  578,    0,  565,  544,  569,    0,  556,  582,  558,
-      559,  560,    0,  567,  554,  568,  562,  585,  568,  571,
-        0,    0,  569,  573,  592,  576,  557,    0,  573,    0,
-        0,    0,  562,  579,  584,    0,    0,  584,  573,  571,
-      585,  571,    0,  577,    0,  573,  578,  589,  576,  582,
-      574,    0,  581,    0,    0,  582,  583,  591,  598,  585,
-      600,  593,  603,    0,  603,  609,  610,  611,  611,  612,
-      630,  604,  603,  598,  605,  605,    0,  615,  624,    0,
-      617,  612,  607,    0,  607,  625,    0,    0,  613,  623,
-
-        0,  617,  610,  618,  608,  638,  629,  622,  628,  618,
-      621,  622,  627,    0,  622,    0,    0,  628,  640,  643,
-      629,  640,    0,  657,  652,  653,  654,  641,  651,  664,
-      650,    0,  648,  651,  646,    0,  655,  639,    0,  661,
-      655,  640,  652,    0,  661,  648,  650,    0,  652,    0,
-      652,    0,  662,  654,  672,    0,  665,  668,  657,  664,
-        0,    0,  677,  699,  700,  701,  662,  672,  695,    0,
-      673,    0,    0,  669,  690,  677,    0,  684,    0,    0,
-      685,    0,  682,  673,  679,  689,  692,  693,  673,  684,
-      680,  681,  708,  709,  710,  699,  700,  706,    0,  688,
-
-      703,  691,  693,  694,    0,  712,  701,  712,  697,    0,
-      728,  701,    0,  711,  726,  727,  728,    0,  734,  730,
-      707,  709,    0,    0,    0,  714,  710,  710,  721,  717,
-      708,    0,  749,  750,  751,  735,  759,    0,  719,  720,
-        0,  731,  727,  759,    0,  753,  754,  755,  734,  764,
-      730,    0,  735,  737,  737,  763,  764,  765,  750,  776,
-        0,  744,    0,  747,    0,    0,    0,    0,  771,    0,
-      755,  781,  744,    0,    0, 1310,  808
+        0,    0, 1323, 1324, 1324, 1324, 1301, 1324, 1315, 1324,
+     1299,   65,   66,   64,   76,   78, 1324, 1324, 1298, 1297,
+     1296,   49,   60,   71,   52,   64,   88,  102,   87,  103,
+        0, 1256,  112,  114,  105,   46,  122, 1248,  133,  186,
+      173,  122, 1253, 1261, 1239, 1324, 1324, 1324, 1324, 1324,
+     1324, 1324, 1300,  195, 1324, 1324, 1324,  202,  245,  182,
+     1324, 1324, 1324,    0,   64, 1249, 1261, 1255, 1251, 1256,
+     1249, 1256, 1241,   24, 1241,   42,   93, 1245, 1252, 1235,
+      208, 1231, 1245, 1232, 1237,   87,   53, 1246,  111, 1242,
+     1228, 1241,  158, 1241,  219, 1228, 1227, 1223, 1226, 1244,
+
+     1218, 1218, 1231,   24, 1219, 1238,    0, 1213, 1217, 1206,
+      111,  142,   96, 1245, 1225,  167, 1223, 1232, 1213, 1202,
+     1206, 1217, 1217, 1203, 1202, 1194,    0,  179,  147, 1208,
+     1215, 1202,  225,  164, 1203, 1224, 1211, 1192, 1196, 1196,
+     1199, 1193,  226, 1189, 1188, 1187,  180,    0,    0, 1215,
+     1189,  185, 1184,  214, 1199, 1195, 1183, 1188, 1185, 1173,
+     1324, 1324,  285,  290,  299,  305,  310, 1177, 1179, 1174,
+     1176, 1181, 1188,  303, 1175, 1174, 1175, 1166, 1175, 1180,
+     1171, 1168, 1169,  154, 1168, 1161, 1174,  224, 1162,  202,
+     1170, 1157, 1149, 1164,    0, 1170, 1153, 1160, 1159, 1162,
+
+     1161, 1164, 1175, 1141, 1153, 1156,  162, 1146, 1148,  221,
+        0, 1141, 1139, 1145, 1150, 1150, 1160, 1138, 1147,    0,
+     1147, 1166,  302, 1140, 1142, 1141, 1131, 1130, 1163, 1137,
+     1122, 1135, 1132, 1133,  289, 1118,  296, 1131, 1135, 1117,
+     1119, 1124, 1111,    0, 1125, 1141, 1126, 1116, 1121, 1124,
+     1115, 1105, 1109, 1114, 1107, 1118, 1105, 1113, 1112,  221,
+     1106, 1100, 1093, 1107, 1110, 1097, 1104,    0, 1097,  311,
+     1085, 1098, 1101, 1090, 1098, 1093, 1092, 1081,  323, 1093,
+     1086, 1094, 1116, 1087, 1075, 1074, 1072, 1090, 1089, 1076,
+     1083, 1082, 1073, 1065,  309,  318,  367,  376,  381,  386,
+
+     1065, 1072,    0, 1063, 1068, 1062, 1065, 1069, 1076,    0,
+     1108, 1066, 1065, 1068, 1062, 1066, 1066,    0, 1056, 1048,
+        0, 1066, 1055, 1048, 1052, 1046, 1053,  292,    0, 1057,
+     1070,    0, 1040, 1053, 1044, 1043, 1042, 1035, 1034, 1051,
+        0, 1036, 1066, 1035, 1042, 1030, 1037, 1026,    0, 1024,
+        0, 1039, 1062,    0, 1036, 1023,    0, 1020, 1038, 1024,
+     1016, 1016, 1033, 1053,    0,    0, 1021, 1012, 1037, 1012,
+     1010, 1010, 1007, 1014, 1009,    0, 1042, 1056, 1006, 1003,
+      314, 1005, 1001, 1041, 1005, 1020, 1000,  995, 1011,  994,
+      998,  995,  999, 1002,  997,  986,  987,  984,  345,    0,
+
+      990,  984,  987,  996,  981,  980,  977,  991,  990,  988,
+      984,  990,  970,  988,  969,    0,    0,  982,  967,  968,
+      300,  971,    0,  310,  974,  977,  964,  975,  959,  965,
+      976,  971,  987,    0,    0,  987,  997,  978,  947,  959,
+      951,  962,  950,  959,  953,    0,    0,  953,    0,  958,
+      951,    0,  391,  399,    0,  941,  972,  954,  960,  939,
+      943,  942,    0,  941,    0,  936,    0,  951,  942,  949,
+      938,  945,  942,  941,  931,  949,  930,  937,  921,  931,
+      924,  933,  924,  932,  930,  929,  928,  927,  919,  310,
+      924,  912,    0,    0,  924,  909,  922,    0,  902,  913,
+
+        0,  914,  382,  901,  909,  903,  908,  895,  903,    0,
+      925,  897,    0,  896,  905,  894,  910,  893,    0,  908,
+      930,  906,  897,    0,  881,  893,  889,  888,  897,    0,
+      898,    0,  894,  894,  894,    0,  883,    0,  901,  888,
+      876,  883,  889,  872,  884,  887,  874,  868,  880,    0,
+        0,  897,  882,  879,  869,  863,  862,    0,  870,  872,
+      871,    0,  856,  855,  859,  857,  858,  857,  864,  234,
+      866,  860,  863,  846,  850,  858,  843,  856,    0,  872,
+      365,  850,  880,    0,  852,    0,  849,    0,  836,  849,
+        0,  844,    0,    0,  884,  846,    0,  837,  836,  831,
+
+      836,  827,    0,  832,  833,  842,  837,  818,  827,  826,
+      819,  842,  817,  830,  385,  817,    0,    0,  828,  372,
+      823,    0,    0,  822,    0,  825,  820,  827,  813,  212,
+      850,    0,  823,  815,  803,  817,  814,  830,  814,    0,
+        0,  813,  814,  802,  812,  813,  800,  787,    0,  804,
+        0,  816,  804,  396,  789,  798,  805,    0,  790,    0,
+      795,  800,  388,  793,  813,  781,    0,  794,    0,  797,
+      784,  777,  793,  775,  784,  787,    0,    0,  785,    0,
+      781,    0,  785,    0,  782,  786,  775,    0,  790,  779,
+      766,  778,  760,  761,  776,  773,  386,   37,  107,  175,
+
+        0,    0,  181,  209,  245,    0,    0,  404,  286,  285,
+      328,  318,  322,  317,  339,    0,    0,  376,  381,  375,
+      373,  411,  374,  378,  373,  375,  395,    0,    0,  383,
+      394,  401,  404,    0,  388,  388,  395,  424,  421,  416,
+      407,  400,  409,  412,  392,  430,  415,  400,  415,  409,
+      417,  405,  414,  420,  412,  408,  417,  426,  410,  414,
+      429,  422,  426,  459,    0,  435,  424,  418,  435,  436,
+        0,  424,  436,  430,  440,  437,  434,  432,    0,  447,
+        0,  442,  433,  453,  441,    0,  432,  452,  453,  442,
+      442,  450,  444,  452,  447,  462,  450,  478,  462,  463,
+
+      464,  454,  462,  456,  465,  502,    0,  466,  464,  477,
+      476,  473,    0,  466,  472,  472,  479,    0,  476,  478,
+      474,  473,    0,  489,    0,  481,  476,  487,    0,  507,
+      508,  521,  483,  494,    0,  482,    0,  527,  485,    0,
+        0,  524,    0,  501,    0,    0,  490,  491,    0,  490,
+      497,  502,    0,    0,  507,  509,  512,  501,  503,  498,
+      513,  514,  502,  533,  503,  518,  507,  508,  507,  520,
+        0,  523,  506,  521,  528,  543,    0,  522,  523,  526,
+      527,  523,  537,  530,  535,  563,  537,  542,    0,  554,
+      539,  528,  528,  546,  540,  536,  539,  543,    0,  529,
+
+      549,  550,  543,  543,  541,  541,  558,  552,  557,    0,
+        0,  545,  543,  572,  573,  584,    0,  571,  550,  575,
+        0,  562,  588,  564,  565,  566,    0,  573,  560,  574,
+      568,  591,  574,  577,    0,    0,  575,  579,  598,  582,
+      563,    0,  579,    0,    0,    0,  568,  585,  590,    0,
+        0,  590,  579,  577,  591,  577,    0,  583,    0,  579,
+      584,  594,  596,  597,  584,  591,  583,    0,  589,    0,
+        0,  590,  591,  599,  606,  593,  608,  601,  611,    0,
+      611,  617,  618,  619,  619,  620,  638,  612,  611,  606,
+      613,  613,    0,  623,  632,    0,  625,  620,  615,    0,
+
+      615,  633,    0,    0,  621,  631,    0,  625,  618,  626,
+      616,  646,  637,  630,  636,  626,  641,    0,  630,  631,
+      636,    0,  631,    0,    0,  637,  649,  653,  638,  649,
+        0,  666,  661,  662,  663,  650,  660,  673,  659,    0,
+      658,  660,  655,    0,  664,  648,    0,  670,  664,  649,
+      661,    0,  670,  657,  659,    0,  661,    0,  661,    0,
+      671,  664,  664,  682,    0,  675,  678,  667,  674,    0,
+        0,  687,  709,  710,  711,  672,  682,  705,    0,  683,
+        0,    0,  679,  700,  687,    0,  694,    0,    0,  695,
+        0,  692,  683,  689,  699,  700,  703,  704,  684,  695,
+
+      691,  692,  719,  720,  721,  710,  711,  717,    0,  699,
+      714,  702,  705,  705,    0,  723,  712,  713,  724,  709,
+        0,  740,  713,    0,  723,  738,  739,  740,    0,  746,
+      742,  719,  721,    0,    0,    0,  726,  722,  738,  723,
+      734,  730,  721,    0,  762,  763,  764,  748,  772,    0,
+      732,  733,    0,  748,  745,  741,  773,    0,  767,  768,
+      769,  748,  778,  744,    0,    0,  749,  751,  751,  777,
+      778,  779,  764,  790,    0,  758,    0,  761,    0,    0,
+        0,    0,  785,    0,  769,  795,  758,    0,    0, 1324,
+      822
+
     } ;
 
-static yyconst flex_int16_t yy_def[1178] =
+static yyconst flex_int16_t yy_def[1192] =
     {   0,
-     1176,    1, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
-     1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
-     1176, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1176, 1176, 1176, 1176, 1176, 1176,
-     1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
-     1176, 1176, 1176, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1176, 1176, 1176, 1176, 1176, 1176, 1176, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1176, 1176, 1176, 1176, 1176,
-
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1176, 1176, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177,    0, 1176
+     1190,    1, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190,
+     1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190,
+     1190, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1190, 1190, 1190, 1190, 1190, 1190,
+     1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190,
+     1190, 1190, 1190, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1190, 1190, 1190, 1190, 1190, 1190, 1190, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1190, 1190, 1190, 1190, 1190,
+
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1190, 1190, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,    0,
+     1190
+
     } ;
 
-static yyconst flex_int16_t yy_nxt[1384] =
+static yyconst flex_int16_t yy_nxt[1398] =
     {   0,
         4,    5,    6,    7,    8,    9,   10,   11,   12,   13,
        14,   15,   16,   16,   16,   16,   16,   17,   18,   19,
@@ -870,28 +877,28 @@ static yyconst flex_int16_t yy_nxt[1384] =
       297,  297,  164,  164,  164,  164,  164,  299,  299,  378,
       800,  300,  300,  300,  300,  300,  298,  167,  167,  167,
       167,  167,  167,  167,  167,  167,  167,  307,  360,  375,
-      297,  297,  297,  297,  297,  411,  379,  361,  412,  804,
+      297,  297,  297,  297,  297,  411,  379,  361,  412,  806,
       376,  298,  362,  308,  309,  363,  413,  424,  414,  478,
-      425,  415,  479,  522,  523,  805,  426,  564,  446,  561,
-      427,  447,  428,  429,  565,  562,  448,  806,  566,  807,
-      449,  808,  450,  451,  620,  621,  452,  809,  430,  297,
-      297,  297,  297,  297,  453,  453,  541,  810,  454,  454,
+      425,  415,  479,  522,  523,  807,  426,  564,  446,  561,
+      427,  447,  428,  429,  565,  562,  448,  808,  566,  809,
+      449,  810,  450,  451,  620,  621,  452,  811,  430,  297,
+      297,  297,  297,  297,  453,  453,  541,  812,  454,  454,
       454,  454,  454,  300,  300,  300,  300,  300,  300,  300,
 
       300,  300,  300,  454,  454,  454,  454,  454,  542,  724,
       541,  454,  454,  454,  454,  454,  630,  697,  758,  631,
-      725,  766,  698,  729,  793,  726,  801,  730,  811,  812,
-      813,  814,  731,  815,  816,  759,  802,  817,  803,  818,
-      819,  794,  820,  767,  821,  766,  822,  823,  793,  824,
+      725,  766,  698,  729,  793,  726,  813,  730,  814,  801,
+      815,  802,  731,  816,  803,  759,  817,  818,  819,  820,
+      821,  794,  822,  767,  804,  766,  805,  823,  793,  824,
       825,  826,  827,  828,  829,  830,  831,  832,  833,  834,
       835,  836,  837,  838,  839,  840,  841,  842,  843,  844,
       845,  846,  847,  848,  849,  850,  851,  852,  853,  854,
-      858,  859,  855,  860,  861,  862,  863,  864,  865,  866,
-      867,  868,  856,  869,  870,  871,  872,  857,  873,  874,
+      855,  856,  860,  861,  857,  862,  863,  864,  865,  866,
+      867,  868,  869,  870,  858,  871,  872,  873,  874,  859,
 
-      875,  876,  877,  878,  854,  879,  880,  855,  881,  882,
-      883,  884,  885,  886,  887,  888,  856,  889,  890,  891,
-      892,  857,  893,  894,  895,  896,  897,  898,  899,  900,
+      875,  876,  877,  878,  879,  880,  856,  881,  882,  857,
+      883,  884,  885,  886,  887,  888,  889,  890,  858,  891,
+      892,  893,  894,  859,  895,  896,  897,  898,  899,  900,
       901,  902,  903,  904,  905,  906,  907,  908,  909,  910,
       911,  912,  913,  914,  915,  916,  917,  918,  919,  920,
       921,  922,  923,  924,  925,  926,  927,  928,  929,  930,
@@ -904,91 +911,93 @@ static yyconst flex_int16_t yy_nxt[1384] =
       981,  982,  983,  984,  985,  986,  987,  988,  989,  990,
       991,  992,  993,  994,  995,  996,  997,  998,  999, 1000,
      1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010,
-     1011, 1012, 1013, 1014,  991, 1015, 1016, 1017, 1018, 1019,
-     1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029,
+     1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020,
+      997, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029,
      1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039,
      1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049,
      1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059,
-     1060, 1037, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068,
+     1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1045,
 
-     1069, 1070, 1071, 1049, 1072, 1073, 1074, 1075, 1076, 1077,
-     1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087,
+     1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078,
+     1079, 1057, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087,
      1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097,
      1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107,
      1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117,
-     1118, 1119, 1120, 1121, 1122, 1123, 1124, 1101, 1125, 1126,
-     1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136,
+     1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127,
+     1128, 1129, 1130, 1131, 1132, 1133, 1134, 1111, 1135, 1136,
      1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146,
      1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156,
      1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166,
 
-     1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175,   64,
-      792,  791,  790,  789,  788,  787,  786,  785,  784,  783,
-      782,  781,  780,  779,  778,  777,  776,  775,  774,  773,
-      772,  771,  770,  769,  768,  765,  764,  763,  762,  761,
-      760,  757,  756,  755,  754,  753,  752,  751,  750,  749,
-      748,  747,  746,  745,  744,  743,  742,  741,  740,  737,
-      736,  735,  734,  733,  732,  728,  727,  723,  722,  721,
-      720,  719,  718,  717,  716,  715,  714,  713,  712,  711,
-      710,  709,  708,  707,  706,  705,  704,  703,  702,  701,
-      700,  699,  696,  695,  694,  693,  692,  691,  690,  689,
-
-      688,  685,  684,  683,  682,  681,  680,  679,  678,  677,
-      676,  675,  674,  673,  672,  671,  670,  669,  668,  667,
-      666,  665,  664,  663,  662,  661,  660,  659,  658,  657,
-      656,  655,  654,  653,  652,  651,  650,  649,  648,  647,
-      646,  645,  644,  643,  642,  641,  640,  639,  638,  637,
-      636,  635,  634,  633,  632,  629,  628,  627,  626,  625,
-      624,  623,  622,  619,  618,  617,  616,  615,  614,  613,
-      612,  611,  610,  609,  608,  607,  606,  605,  604,  603,
-      602,  601,  600,  599,  598,  597,  596,  595,  594,  593,
-      592,  591,  590,  589,  588,  587,  586,  585,  584,  583,
-
-      582,  581,  580,  579,  578,  577,  576,  575,  574,  573,
-      572,  571,  570,  569,  568,  567,  563,  560,  559,  558,
-      557,  556,  555,  554,  553,  552,  551,  550,  549,  548,
-      547,  546,  545,  544,  543,  540,  539,  538,  537,  536,
-      535,  534,  533,  532,  531,  530,  529,  528,  527,  526,
-      525,  524,  521,  520,  519,  518,  517,  516,  515,  514,
-      513,  512,  511,  510,  509,  508,  507,  506,  505,  504,
-      503,  502,  501,  500,  499,  498,  497,  496,  495,  494,
-      493,  492,  491,  490,  489,  488,  487,  486,  485,  484,
-      483,  482,  481,  480,  477,  476,  475,  474,  473,  472,
-
-      471,  470,  469,  468,  467,  466,  465,  464,  463,  462,
-      461,  460,  459,  458,  457,  456,  455,  445,  444,  443,
-      442,  441,  440,  439,  438,  437,  436,  435,  434,  433,
-      432,  431,  423,  422,  421,  420,  419,  418,  417,  416,
-      410,  409,  408,  407,  406,  405,  404,  403,  400,  399,
-      398,  397,  396,  395,  394,  393,  392,  391,  390,  389,
-      388,  387,  386,  385,  384,  383,  382,  381,  380,  377,
-      374,  373,  372,  371,  370,  369,  368,  367,  366,  365,
-      364,  359,  358,  357,  356,  355,  354,  353,  352,  351,
-      350,  347,  346,  343,  342,  341,  340,  339,  338,  337,
-
-      336,  335,  334,  333,  332,  331,  330,  329,  326,  323,
-      322,  321,  318,  317,  316,  315,  314,  313,  312,  311,
-      310,  306,  305,  304,  303,  302,  301,  295,  294,  293,
-      292,  291,  290,  287,  284,  283,  280,  279,  278,  274,
-      273,  272,  271,  270,  269,  268,  267,  259,  258,  257,
-      252,  251,  250,  249,  248,  247,  246,  245,  244,  243,
-      240,  239,  232,  231,  230,  229,  228,  225,  224,  223,
-      222,  221,  220,  219,  218,  213,  209,  208,  207,  204,
-      198,  197,  196,  195,  187,  186,  185,  180,  177,  176,
-      175,  174,  173,  172,  171,  170,  162,  161,  160,  159,
-
-      131,  109,   63,   62,   61,   48,   47,   46, 1176,    3,
-     1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
-     1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
-     1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
-     1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
-     1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
-     1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
-     1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
-     1176, 1176, 1176
+     1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176,
+     1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186,
+     1187, 1188, 1189,   64,  792,  791,  790,  789,  788,  787,
+      786,  785,  784,  783,  782,  781,  780,  779,  778,  777,
+      776,  775,  774,  773,  772,  771,  770,  769,  768,  765,
+      764,  763,  762,  761,  760,  757,  756,  755,  754,  753,
+      752,  751,  750,  749,  748,  747,  746,  745,  744,  743,
+      742,  741,  740,  737,  736,  735,  734,  733,  732,  728,
+      727,  723,  722,  721,  720,  719,  718,  717,  716,  715,
+      714,  713,  712,  711,  710,  709,  708,  707,  706,  705,
+
+      704,  703,  702,  701,  700,  699,  696,  695,  694,  693,
+      692,  691,  690,  689,  688,  685,  684,  683,  682,  681,
+      680,  679,  678,  677,  676,  675,  674,  673,  672,  671,
+      670,  669,  668,  667,  666,  665,  664,  663,  662,  661,
+      660,  659,  658,  657,  656,  655,  654,  653,  652,  651,
+      650,  649,  648,  647,  646,  645,  644,  643,  642,  641,
+      640,  639,  638,  637,  636,  635,  634,  633,  632,  629,
+      628,  627,  626,  625,  624,  623,  622,  619,  618,  617,
+      616,  615,  614,  613,  612,  611,  610,  609,  608,  607,
+      606,  605,  604,  603,  602,  601,  600,  599,  598,  597,
+
+      596,  595,  594,  593,  592,  591,  590,  589,  588,  587,
+      586,  585,  584,  583,  582,  581,  580,  579,  578,  577,
+      576,  575,  574,  573,  572,  571,  570,  569,  568,  567,
+      563,  560,  559,  558,  557,  556,  555,  554,  553,  552,
+      551,  550,  549,  548,  547,  546,  545,  544,  543,  540,
+      539,  538,  537,  536,  535,  534,  533,  532,  531,  530,
+      529,  528,  527,  526,  525,  524,  521,  520,  519,  518,
+      517,  516,  515,  514,  513,  512,  511,  510,  509,  508,
+      507,  506,  505,  504,  503,  502,  501,  500,  499,  498,
+      497,  496,  495,  494,  493,  492,  491,  490,  489,  488,
+
+      487,  486,  485,  484,  483,  482,  481,  480,  477,  476,
+      475,  474,  473,  472,  471,  470,  469,  468,  467,  466,
+      465,  464,  463,  462,  461,  460,  459,  458,  457,  456,
+      455,  445,  444,  443,  442,  441,  440,  439,  438,  437,
+      436,  435,  434,  433,  432,  431,  423,  422,  421,  420,
+      419,  418,  417,  416,  410,  409,  408,  407,  406,  405,
+      404,  403,  400,  399,  398,  397,  396,  395,  394,  393,
+      392,  391,  390,  389,  388,  387,  386,  385,  384,  383,
+      382,  381,  380,  377,  374,  373,  372,  371,  370,  369,
+      368,  367,  366,  365,  364,  359,  358,  357,  356,  355,
+
+      354,  353,  352,  351,  350,  347,  346,  343,  342,  341,
+      340,  339,  338,  337,  336,  335,  334,  333,  332,  331,
+      330,  329,  326,  323,  322,  321,  318,  317,  316,  315,
+      314,  313,  312,  311,  310,  306,  305,  304,  303,  302,
+      301,  295,  294,  293,  292,  291,  290,  287,  284,  283,
+      280,  279,  278,  274,  273,  272,  271,  270,  269,  268,
+      267,  259,  258,  257,  252,  251,  250,  249,  248,  247,
+      246,  245,  244,  243,  240,  239,  232,  231,  230,  229,
+      228,  225,  224,  223,  222,  221,  220,  219,  218,  213,
+      209,  208,  207,  204,  198,  197,  196,  195,  187,  186,
+
+      185,  180,  177,  176,  175,  174,  173,  172,  171,  170,
+      162,  161,  160,  159,  131,  109,   63,   62,   61,   48,
+       47,   46, 1190,    3, 1190, 1190, 1190, 1190, 1190, 1190,
+     1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190,
+     1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190,
+     1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190,
+     1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190,
+     1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190,
+     1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190,
+     1190, 1190, 1190, 1190, 1190, 1190, 1190
+
     } ;
 
-static yyconst flex_int16_t yy_chk[1384] =
+static yyconst flex_int16_t yy_chk[1398] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1036,112 +1045,114 @@ static yyconst flex_int16_t yy_chk[1384] =
 
       300,  300,  300,  453,  453,  453,  453,  453,  399,  615,
       399,  454,  454,  454,  454,  454,  503,  581,  654,  503,
-      615,  663,  581,  620,  697,  615,  708,  620,  718,  719,
-      720,  721,  620,  722,  723,  654,  708,  724,  708,  725,
-      726,  697,  727,  663,  730,  663,  731,  732,  697,  733,
-      735,  736,  737,  738,  739,  740,  741,  742,  743,  744,
-      745,  746,  747,  748,  749,  750,  751,  752,  753,  754,
-      755,  756,  757,  758,  759,  760,  761,  762,  763,  764,
-      766,  767,  764,  768,  769,  770,  772,  773,  774,  775,
-      776,  777,  764,  778,  780,  782,  783,  764,  784,  785,
-
-      787,  788,  789,  790,  764,  791,  792,  764,  793,  794,
-      795,  796,  797,  798,  799,  800,  764,  801,  802,  803,
-      804,  764,  806,  807,  808,  809,  810,  812,  813,  814,
-      815,  817,  818,  819,  820,  822,  824,  825,  826,  828,
-      829,  830,  831,  832,  834,  836,  837,  840,  842,  845,
-      846,  848,  849,  850,  853,  854,  855,  856,  857,  858,
-      859,  860,  861,  862,  863,  864,  865,  866,  867,  868,
-      870,  871,  872,  873,  874,  876,  877,  878,  879,  880,
-      881,  882,  883,  884,  885,  886,  888,  889,  890,  891,
-      892,  893,  894,  896,  897,  898,  899,  900,  901,  902,
-
-      903,  904,  905,  908,  909,  910,  911,  912,  914,  915,
-      916,  918,  919,  920,  921,  922,  924,  925,  926,  927,
-      928,  929,  930,  933,  934,  935,  936,  937,  939,  943,
-      944,  945,  948,  949,  950,  951,  952,  954,  956,  957,
-      958,  959,  960,  961,  928,  963,  966,  967,  968,  969,
-      970,  971,  972,  973,  975,  976,  977,  978,  979,  980,
-      981,  982,  983,  984,  985,  986,  988,  989,  991,  992,
-      993,  995,  996,  999, 1000, 1002, 1003, 1004, 1005, 1006,
-     1007, 1008, 1009, 1010, 1011, 1012, 1013, 1015, 1018, 1019,
-     1020,  989, 1021, 1022, 1024, 1025, 1026, 1027, 1028, 1029,
-
-     1030, 1031, 1033, 1006, 1034, 1035, 1037, 1038, 1040, 1041,
-     1042, 1043, 1045, 1046, 1047, 1049, 1051, 1053, 1054, 1055,
-     1057, 1058, 1059, 1060, 1063, 1064, 1065, 1066, 1067, 1068,
-     1069, 1071, 1074, 1075, 1076, 1078, 1081, 1083, 1084, 1085,
-     1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095,
-     1096, 1097, 1098, 1100, 1101, 1102, 1103, 1075, 1104, 1106,
-     1107, 1108, 1109, 1111, 1112, 1114, 1115, 1116, 1117, 1119,
-     1120, 1121, 1122, 1126, 1127, 1128, 1129, 1130, 1131, 1133,
-     1134, 1135, 1136, 1137, 1139, 1140, 1142, 1143, 1144, 1146,
-     1147, 1148, 1149, 1150, 1151, 1153, 1154, 1155, 1156, 1157,
-
-     1158, 1159, 1160, 1162, 1164, 1169, 1171, 1172, 1173, 1177,
-      696,  695,  694,  693,  692,  691,  690,  689,  687,  686,
-      685,  683,  681,  679,  676,  675,  674,  673,  672,  671,
-      670,  668,  666,  665,  664,  662,  661,  659,  657,  656,
-      655,  653,  652,  650,  648,  647,  646,  645,  644,  643,
-      642,  639,  638,  637,  636,  635,  634,  633,  631,  629,
-      628,  627,  626,  624,  621,  619,  616,  614,  613,  612,
-      611,  610,  609,  608,  607,  606,  605,  604,  602,  601,
-      600,  599,  598,  596,  595,  592,  590,  589,  587,  585,
-      583,  582,  580,  578,  577,  576,  575,  574,  573,  572,
-
-      571,  569,  568,  567,  566,  565,  564,  563,  561,  560,
-      559,  557,  556,  555,  554,  553,  552,  549,  548,  547,
-      546,  545,  544,  543,  542,  541,  540,  539,  537,  535,
-      534,  533,  531,  529,  528,  527,  526,  525,  523,  522,
-      521,  520,  518,  517,  516,  515,  514,  512,  511,  509,
-      508,  507,  506,  505,  504,  502,  500,  499,  497,  496,
-      495,  492,  491,  489,  488,  487,  486,  485,  484,  483,
-      482,  481,  480,  479,  478,  477,  476,  475,  474,  473,
-      472,  471,  470,  469,  468,  466,  464,  462,  461,  460,
-      459,  458,  457,  456,  451,  450,  448,  445,  444,  443,
-
-      442,  441,  440,  439,  438,  437,  436,  433,  432,  431,
-      430,  429,  428,  427,  426,  425,  422,  420,  419,  418,
-      415,  414,  413,  412,  411,  410,  409,  408,  407,  406,
-      405,  404,  403,  402,  401,  398,  397,  396,  395,  394,
-      393,  392,  391,  390,  389,  388,  387,  386,  385,  384,
-      383,  382,  380,  379,  378,  377,  375,  374,  373,  372,
-      371,  370,  369,  368,  367,  364,  363,  362,  361,  360,
-      359,  358,  356,  355,  353,  352,  350,  348,  347,  346,
-      345,  344,  343,  342,  340,  339,  338,  337,  336,  335,
-      334,  333,  331,  330,  327,  326,  325,  324,  323,  322,
-
-      320,  319,  317,  316,  315,  314,  313,  312,  311,  309,
-      308,  307,  306,  305,  304,  302,  301,  294,  293,  292,
-      291,  290,  289,  288,  287,  286,  285,  284,  283,  282,
-      281,  280,  278,  277,  276,  275,  274,  273,  272,  271,
-      269,  267,  266,  265,  264,  263,  262,  261,  259,  258,
-      257,  256,  255,  254,  253,  252,  251,  250,  249,  248,
-      247,  246,  245,  243,  242,  241,  240,  239,  238,  236,
-      234,  233,  232,  231,  230,  229,  228,  227,  226,  225,
-      224,  222,  221,  219,  218,  217,  216,  215,  214,  213,
-      212,  209,  208,  206,  205,  204,  203,  202,  201,  200,
-
-      199,  198,  197,  196,  194,  193,  192,  191,  189,  187,
-      186,  185,  183,  182,  181,  180,  179,  178,  177,  176,
-      175,  173,  172,  171,  170,  169,  168,  160,  159,  158,
-      157,  156,  155,  153,  151,  150,  146,  145,  144,  142,
-      141,  140,  139,  138,  137,  136,  135,  132,  131,  130,
-      126,  125,  124,  123,  122,  121,  120,  119,  118,  117,
-      115,  114,  110,  109,  108,  106,  105,  103,  102,  101,
-      100,   99,   98,   97,   96,   94,   92,   91,   90,   88,
-       85,   84,   83,   82,   80,   79,   78,   75,   73,   72,
-       71,   70,   69,   68,   67,   66,   53,   45,   44,   43,
-
-       38,   32,   21,   20,   19,   11,    9,    7,    3, 1176,
-     1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
-     1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
-     1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
-     1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
-     1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
-     1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
-     1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
-     1176, 1176, 1176
+      615,  663,  581,  620,  697,  615,  718,  620,  719,  708,
+      720,  708,  620,  721,  708,  654,  722,  723,  724,  725,
+      726,  697,  727,  663,  708,  663,  708,  730,  697,  731,
+      732,  733,  735,  736,  737,  738,  739,  740,  741,  742,
+      743,  744,  745,  746,  747,  748,  749,  750,  751,  752,
+      753,  754,  755,  756,  757,  758,  759,  760,  761,  762,
+      763,  764,  766,  767,  764,  768,  769,  770,  772,  773,
+      774,  775,  776,  777,  764,  778,  780,  782,  783,  764,
+
+      784,  785,  787,  788,  789,  790,  764,  791,  792,  764,
+      793,  794,  795,  796,  797,  798,  799,  800,  764,  801,
+      802,  803,  804,  764,  805,  806,  808,  809,  810,  811,
+      812,  814,  815,  816,  817,  819,  820,  821,  822,  824,
+      826,  827,  828,  830,  831,  832,  833,  834,  836,  838,
+      839,  842,  844,  847,  848,  850,  851,  852,  855,  856,
+      857,  858,  859,  860,  861,  862,  863,  864,  865,  866,
+      867,  868,  869,  870,  872,  873,  874,  875,  876,  878,
+      879,  880,  881,  882,  883,  884,  885,  886,  887,  888,
+      890,  891,  892,  893,  894,  895,  896,  897,  898,  900,
+
+      901,  902,  903,  904,  905,  906,  907,  908,  909,  912,
+      913,  914,  915,  916,  918,  919,  920,  922,  923,  924,
+      925,  926,  928,  929,  930,  931,  932,  933,  934,  937,
+      938,  939,  940,  941,  943,  947,  948,  949,  952,  953,
+      954,  955,  956,  958,  960,  961,  962,  963,  964,  965,
+      932,  966,  967,  969,  972,  973,  974,  975,  976,  977,
+      978,  979,  981,  982,  983,  984,  985,  986,  987,  988,
+      989,  990,  991,  992,  994,  995,  997,  998,  999, 1001,
+     1002, 1005, 1006, 1008, 1009, 1010, 1011, 1012, 1013, 1014,
+     1015, 1016, 1017, 1019, 1020, 1021, 1023, 1026, 1027,  995,
+
+     1028, 1029, 1030, 1032, 1033, 1034, 1035, 1036, 1037, 1038,
+     1039, 1012, 1041, 1042, 1043, 1045, 1046, 1048, 1049, 1050,
+     1051, 1053, 1054, 1055, 1057, 1059, 1061, 1062, 1063, 1064,
+     1066, 1067, 1068, 1069, 1072, 1073, 1074, 1075, 1076, 1077,
+     1078, 1080, 1083, 1084, 1085, 1087, 1090, 1092, 1093, 1094,
+     1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104,
+     1105, 1106, 1107, 1108, 1110, 1111, 1112, 1084, 1113, 1114,
+     1116, 1117, 1118, 1119, 1120, 1122, 1123, 1125, 1126, 1127,
+     1128, 1130, 1131, 1132, 1133, 1137, 1138, 1139, 1140, 1141,
+     1142, 1143, 1145, 1146, 1147, 1148, 1149, 1151, 1152, 1154,
+
+     1155, 1156, 1157, 1159, 1160, 1161, 1162, 1163, 1164, 1167,
+     1168, 1169, 1170, 1171, 1172, 1173, 1174, 1176, 1178, 1183,
+     1185, 1186, 1187, 1191,  696,  695,  694,  693,  692,  691,
+      690,  689,  687,  686,  685,  683,  681,  679,  676,  675,
+      674,  673,  672,  671,  670,  668,  666,  665,  664,  662,
+      661,  659,  657,  656,  655,  653,  652,  650,  648,  647,
+      646,  645,  644,  643,  642,  639,  638,  637,  636,  635,
+      634,  633,  631,  629,  628,  627,  626,  624,  621,  619,
+      616,  614,  613,  612,  611,  610,  609,  608,  607,  606,
+      605,  604,  602,  601,  600,  599,  598,  596,  595,  592,
+
+      590,  589,  587,  585,  583,  582,  580,  578,  577,  576,
+      575,  574,  573,  572,  571,  569,  568,  567,  566,  565,
+      564,  563,  561,  560,  559,  557,  556,  555,  554,  553,
+      552,  549,  548,  547,  546,  545,  544,  543,  542,  541,
+      540,  539,  537,  535,  534,  533,  531,  529,  528,  527,
+      526,  525,  523,  522,  521,  520,  518,  517,  516,  515,
+      514,  512,  511,  509,  508,  507,  506,  505,  504,  502,
+      500,  499,  497,  496,  495,  492,  491,  489,  488,  487,
+      486,  485,  484,  483,  482,  481,  480,  479,  478,  477,
+      476,  475,  474,  473,  472,  471,  470,  469,  468,  466,
+
+      464,  462,  461,  460,  459,  458,  457,  456,  451,  450,
+      448,  445,  444,  443,  442,  441,  440,  439,  438,  437,
+      436,  433,  432,  431,  430,  429,  428,  427,  426,  425,
+      422,  420,  419,  418,  415,  414,  413,  412,  411,  410,
+      409,  408,  407,  406,  405,  404,  403,  402,  401,  398,
+      397,  396,  395,  394,  393,  392,  391,  390,  389,  388,
+      387,  386,  385,  384,  383,  382,  380,  379,  378,  377,
+      375,  374,  373,  372,  371,  370,  369,  368,  367,  364,
+      363,  362,  361,  360,  359,  358,  356,  355,  353,  352,
+      350,  348,  347,  346,  345,  344,  343,  342,  340,  339,
+
+      338,  337,  336,  335,  334,  333,  331,  330,  327,  326,
+      325,  324,  323,  322,  320,  319,  317,  316,  315,  314,
+      313,  312,  311,  309,  308,  307,  306,  305,  304,  302,
+      301,  294,  293,  292,  291,  290,  289,  288,  287,  286,
+      285,  284,  283,  282,  281,  280,  278,  277,  276,  275,
+      274,  273,  272,  271,  269,  267,  266,  265,  264,  263,
+      262,  261,  259,  258,  257,  256,  255,  254,  253,  252,
+      251,  250,  249,  248,  247,  246,  245,  243,  242,  241,
+      240,  239,  238,  236,  234,  233,  232,  231,  230,  229,
+      228,  227,  226,  225,  224,  222,  221,  219,  218,  217,
+
+      216,  215,  214,  213,  212,  209,  208,  206,  205,  204,
+      203,  202,  201,  200,  199,  198,  197,  196,  194,  193,
+      192,  191,  189,  187,  186,  185,  183,  182,  181,  180,
+      179,  178,  177,  176,  175,  173,  172,  171,  170,  169,
+      168,  160,  159,  158,  157,  156,  155,  153,  151,  150,
+      146,  145,  144,  142,  141,  140,  139,  138,  137,  136,
+      135,  132,  131,  130,  126,  125,  124,  123,  122,  121,
+      120,  119,  118,  117,  115,  114,  110,  109,  108,  106,
+      105,  103,  102,  101,  100,   99,   98,   97,   96,   94,
+       92,   91,   90,   88,   85,   84,   83,   82,   80,   79,
+
+       78,   75,   73,   72,   71,   70,   69,   68,   67,   66,
+       53,   45,   44,   43,   38,   32,   21,   20,   19,   11,
+        9,    7,    3, 1190, 1190, 1190, 1190, 1190, 1190, 1190,
+     1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190,
+     1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190,
+     1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190,
+     1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190,
+     1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190,
+     1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190,
+     1190, 1190, 1190, 1190, 1190, 1190, 1190
+
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -1221,7 +1232,7 @@ void   skipline(void);
 #define YY_NO_UNISTD_H
 #endif
 
-#line 1225 "Gmsh.yy.cpp"
+#line 1236 "Gmsh.yy.cpp"
 
 #define INITIAL 0
 
@@ -1406,7 +1417,7 @@ YY_DECL
 #line 72 "Gmsh.l"
 
 
-#line 1410 "Gmsh.yy.cpp"
+#line 1421 "Gmsh.yy.cpp"
 
 	if ( !(yy_init) )
 		{
@@ -1459,13 +1470,13 @@ yy_match:
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 1177 )
+				if ( yy_current_state >= 1191 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 			++yy_cp;
 			}
-		while ( yy_base[yy_current_state] != 1310 );
+		while ( yy_base[yy_current_state] != 1324 );
 
 yy_find_action:
 		yy_act = yy_accept[yy_current_state];
@@ -1738,900 +1749,910 @@ return tBooleanUnion;
 case 50:
 YY_RULE_SETUP
 #line 125 "Gmsh.l"
-return tBooleanIntersection;
+return tBooleanUnion;
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
 #line 126 "Gmsh.l"
-return tBooleanSubtraction;
+return tBooleanIntersection;
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
 #line 127 "Gmsh.l"
-return tBoundingBox;
+return tBooleanSubtraction;
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 129 "Gmsh.l"
-return tCatenary;
+#line 128 "Gmsh.l"
+return tBooleanSubtraction;
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 130 "Gmsh.l"
-return tCeil;
+#line 129 "Gmsh.l"
+return tBoundingBox;
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
 #line 131 "Gmsh.l"
-return tCircle;
+return tCatenary;
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
 #line 132 "Gmsh.l"
-return tCopyOptions;
+return tCeil;
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
 #line 133 "Gmsh.l"
-return tCoherence;
+return tCircle;
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
 #line 134 "Gmsh.l"
-return tCohomology;
+return tCopyOptions;
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
 #line 135 "Gmsh.l"
-return tCombine;
+return tCoherence;
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
 #line 136 "Gmsh.l"
-return tCone;
+return tCohomology;
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
 #line 137 "Gmsh.l"
-return tCosh;
+return tCombine;
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
 #line 138 "Gmsh.l"
-return tCos;
+return tCone;
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
 #line 139 "Gmsh.l"
-return tCharacteristic;
+return tCosh;
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
 #line 140 "Gmsh.l"
-return tComplex;
+return tCos;
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
 #line 141 "Gmsh.l"
-return tColor;
+return tCharacteristic;
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
 #line 142 "Gmsh.l"
-return tColorTable;
+return tComplex;
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
 #line 143 "Gmsh.l"
-return tCompound;
+return tColor;
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
 #line 144 "Gmsh.l"
-return tCoordinates;
+return tColorTable;
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
 #line 145 "Gmsh.l"
-return tSpline;
+return tCompound;
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
 #line 146 "Gmsh.l"
-return tCall;
+return tCoordinates;
 	YY_BREAK
 case 71:
 YY_RULE_SETUP
 #line 147 "Gmsh.l"
-return tCreateTopology;
+return tSpline;
 	YY_BREAK
 case 72:
 YY_RULE_SETUP
 #line 148 "Gmsh.l"
-return tCreateTopologyNoHoles;
+return tCall;
 	YY_BREAK
 case 73:
 YY_RULE_SETUP
 #line 149 "Gmsh.l"
-return tCpu;
+return tCreateTopology;
 	YY_BREAK
 case 74:
 YY_RULE_SETUP
 #line 150 "Gmsh.l"
-return tCurrentDirectory;
+return tCreateTopologyNoHoles;
 	YY_BREAK
 case 75:
 YY_RULE_SETUP
 #line 151 "Gmsh.l"
-return tCurrentDirectory;
+return tCpu;
 	YY_BREAK
 case 76:
 YY_RULE_SETUP
 #line 152 "Gmsh.l"
-return tCylinder;
+return tCurrentDirectory;
 	YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 154 "Gmsh.l"
-return tDefineConstant;
+#line 153 "Gmsh.l"
+return tCurrentDirectory;
 	YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 155 "Gmsh.l"
-return tDefineNumber;
+#line 154 "Gmsh.l"
+return tCylinder;
 	YY_BREAK
 case 79:
 YY_RULE_SETUP
 #line 156 "Gmsh.l"
-return tDefineString;
+return tDefineConstant;
 	YY_BREAK
 case 80:
 YY_RULE_SETUP
 #line 157 "Gmsh.l"
-return tDelete;
+return tDefineNumber;
 	YY_BREAK
 case 81:
 YY_RULE_SETUP
 #line 158 "Gmsh.l"
-return tDegenerated;
+return tDefineString;
 	YY_BREAK
 case 82:
 YY_RULE_SETUP
 #line 159 "Gmsh.l"
-return tDilate;
+return tDelete;
 	YY_BREAK
 case 83:
 YY_RULE_SETUP
 #line 160 "Gmsh.l"
-return tDirName;
+return tDegenerated;
 	YY_BREAK
 case 84:
 YY_RULE_SETUP
 #line 161 "Gmsh.l"
-return tDraw;
+return tDilate;
 	YY_BREAK
 case 85:
 YY_RULE_SETUP
 #line 162 "Gmsh.l"
-return tSetChanged;
+return tDirName;
 	YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 164 "Gmsh.l"
-return tExp;
+#line 163 "Gmsh.l"
+return tDraw;
 	YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 165 "Gmsh.l"
-return tEllipse;
+#line 164 "Gmsh.l"
+return tSetChanged;
 	YY_BREAK
 case 88:
 YY_RULE_SETUP
 #line 166 "Gmsh.l"
-return tEllipse;
+return tExp;
 	YY_BREAK
 case 89:
 YY_RULE_SETUP
 #line 167 "Gmsh.l"
-return tEllipsoid;
+return tEllipse;
 	YY_BREAK
 case 90:
 YY_RULE_SETUP
 #line 168 "Gmsh.l"
-return tElse;
+return tEllipse;
 	YY_BREAK
 case 91:
 YY_RULE_SETUP
 #line 169 "Gmsh.l"
-return tElseIf;
+return tEllipsoid;
 	YY_BREAK
 case 92:
 YY_RULE_SETUP
 #line 170 "Gmsh.l"
-return tExtrude;
+return tElse;
 	YY_BREAK
 case 93:
 YY_RULE_SETUP
 #line 171 "Gmsh.l"
-return tElliptic;
+return tElseIf;
 	YY_BREAK
 case 94:
 YY_RULE_SETUP
 #line 172 "Gmsh.l"
-return tEndFor;
+return tExtrude;
 	YY_BREAK
 case 95:
 YY_RULE_SETUP
 #line 173 "Gmsh.l"
-return tEndIf;
+return tElliptic;
 	YY_BREAK
 case 96:
 YY_RULE_SETUP
 #line 174 "Gmsh.l"
-return tEuclidian;
+return tEndFor;
 	YY_BREAK
 case 97:
 YY_RULE_SETUP
 #line 175 "Gmsh.l"
-return tError;
+return tEndIf;
 	YY_BREAK
 case 98:
 YY_RULE_SETUP
 #line 176 "Gmsh.l"
-return tExit;
+return tEuclidian;
 	YY_BREAK
 case 99:
 YY_RULE_SETUP
 #line 177 "Gmsh.l"
-return tExists;
+return tError;
 	YY_BREAK
 case 100:
 YY_RULE_SETUP
-#line 179 "Gmsh.l"
-return tFabs;
+#line 178 "Gmsh.l"
+return tExit;
 	YY_BREAK
 case 101:
 YY_RULE_SETUP
-#line 180 "Gmsh.l"
-return tField;
+#line 179 "Gmsh.l"
+return tExists;
 	YY_BREAK
 case 102:
 YY_RULE_SETUP
 #line 181 "Gmsh.l"
-return tFind;
+return tFabs;
 	YY_BREAK
 case 103:
 YY_RULE_SETUP
 #line 182 "Gmsh.l"
-return tFileExists;
+return tField;
 	YY_BREAK
 case 104:
 YY_RULE_SETUP
 #line 183 "Gmsh.l"
-return tFixRelativePath;
+return tFind;
 	YY_BREAK
 case 105:
 YY_RULE_SETUP
 #line 184 "Gmsh.l"
-return tFloor;
+return tFileExists;
 	YY_BREAK
 case 106:
 YY_RULE_SETUP
 #line 185 "Gmsh.l"
-return tFmod;
+return tFixRelativePath;
 	YY_BREAK
 case 107:
 YY_RULE_SETUP
 #line 186 "Gmsh.l"
-return tFor;
+return tFloor;
 	YY_BREAK
 case 108:
 YY_RULE_SETUP
 #line 187 "Gmsh.l"
-return tMacro;
+return tFmod;
 	YY_BREAK
 case 109:
 YY_RULE_SETUP
-#line 189 "Gmsh.l"
-return tGetEnv;
+#line 188 "Gmsh.l"
+return tFor;
 	YY_BREAK
 case 110:
 YY_RULE_SETUP
-#line 190 "Gmsh.l"
-return tGetString;
+#line 189 "Gmsh.l"
+return tMacro;
 	YY_BREAK
 case 111:
 YY_RULE_SETUP
 #line 191 "Gmsh.l"
-return tGetNumber;
+return tGetEnv;
 	YY_BREAK
 case 112:
 YY_RULE_SETUP
 #line 192 "Gmsh.l"
-return tGetValue;
+return tGetString;
 	YY_BREAK
 case 113:
 YY_RULE_SETUP
 #line 193 "Gmsh.l"
-return tGetStringValue;
+return tGetNumber;
 	YY_BREAK
 case 114:
 YY_RULE_SETUP
 #line 194 "Gmsh.l"
-return tGMSH_MAJOR_VERSION;
+return tGetValue;
 	YY_BREAK
 case 115:
 YY_RULE_SETUP
 #line 195 "Gmsh.l"
-return tGMSH_MINOR_VERSION;
+return tGetStringValue;
 	YY_BREAK
 case 116:
 YY_RULE_SETUP
 #line 196 "Gmsh.l"
-return tGMSH_PATCH_VERSION;
+return tGMSH_MAJOR_VERSION;
 	YY_BREAK
 case 117:
 YY_RULE_SETUP
 #line 197 "Gmsh.l"
-return tGmshExecutableName;
+return tGMSH_MINOR_VERSION;
 	YY_BREAK
 case 118:
 YY_RULE_SETUP
-#line 199 "Gmsh.l"
-return tHide;
+#line 198 "Gmsh.l"
+return tGMSH_PATCH_VERSION;
 	YY_BREAK
 case 119:
 YY_RULE_SETUP
-#line 200 "Gmsh.l"
-return tHole;
+#line 199 "Gmsh.l"
+return tGmshExecutableName;
 	YY_BREAK
 case 120:
 YY_RULE_SETUP
 #line 201 "Gmsh.l"
-return tHomology;
+return tHide;
 	YY_BREAK
 case 121:
 YY_RULE_SETUP
 #line 202 "Gmsh.l"
-return tHypot;
+return tHole;
 	YY_BREAK
 case 122:
 YY_RULE_SETUP
-#line 204 "Gmsh.l"
-return tIn;
+#line 203 "Gmsh.l"
+return tHomology;
 	YY_BREAK
 case 123:
 YY_RULE_SETUP
-#line 205 "Gmsh.l"
-return tIf;
+#line 204 "Gmsh.l"
+return tHypot;
 	YY_BREAK
 case 124:
 YY_RULE_SETUP
 #line 206 "Gmsh.l"
-return tIntersect;
+return tIn;
 	YY_BREAK
 case 125:
 YY_RULE_SETUP
 #line 207 "Gmsh.l"
-return tInterpolationScheme;
+return tIf;
 	YY_BREAK
 case 126:
 YY_RULE_SETUP
-#line 209 "Gmsh.l"
-return tNurbsKnots;
+#line 208 "Gmsh.l"
+return tIntersect;
 	YY_BREAK
 case 127:
 YY_RULE_SETUP
-#line 211 "Gmsh.l"
-return tLength;
+#line 209 "Gmsh.l"
+return tInterpolationScheme;
 	YY_BREAK
 case 128:
 YY_RULE_SETUP
-#line 212 "Gmsh.l"
-return tLine;
+#line 211 "Gmsh.l"
+return tNurbsKnots;
 	YY_BREAK
 case 129:
 YY_RULE_SETUP
 #line 213 "Gmsh.l"
-return tList;
+return tLength;
 	YY_BREAK
 case 130:
 YY_RULE_SETUP
 #line 214 "Gmsh.l"
-return tListFromFile;
+return tLine;
 	YY_BREAK
 case 131:
 YY_RULE_SETUP
 #line 215 "Gmsh.l"
-return tLinSpace;
+return tList;
 	YY_BREAK
 case 132:
 YY_RULE_SETUP
 #line 216 "Gmsh.l"
-return tLogSpace;
+return tListFromFile;
 	YY_BREAK
 case 133:
 YY_RULE_SETUP
 #line 217 "Gmsh.l"
-return tLog;
+return tLinSpace;
 	YY_BREAK
 case 134:
 YY_RULE_SETUP
 #line 218 "Gmsh.l"
-return tLog10;
+return tLogSpace;
 	YY_BREAK
 case 135:
 YY_RULE_SETUP
 #line 219 "Gmsh.l"
-return tLayers;
+return tLog;
 	YY_BREAK
 case 136:
 YY_RULE_SETUP
 #line 220 "Gmsh.l"
-return tLevelset;
+return tLog10;
 	YY_BREAK
 case 137:
 YY_RULE_SETUP
-#line 222 "Gmsh.l"
-return tMacro;
+#line 221 "Gmsh.l"
+return tLayers;
 	YY_BREAK
 case 138:
 YY_RULE_SETUP
-#line 223 "Gmsh.l"
-return tMeshAlgorithm;
+#line 222 "Gmsh.l"
+return tLevelset;
 	YY_BREAK
 case 139:
 YY_RULE_SETUP
 #line 224 "Gmsh.l"
-return tModulo;
+return tMacro;
 	YY_BREAK
 case 140:
 YY_RULE_SETUP
 #line 225 "Gmsh.l"
-return tMPI_Rank;
+return tMeshAlgorithm;
 	YY_BREAK
 case 141:
 YY_RULE_SETUP
 #line 226 "Gmsh.l"
-return tMPI_Size;
+return tModulo;
 	YY_BREAK
 case 142:
 YY_RULE_SETUP
 #line 227 "Gmsh.l"
-return tMemory;
+return tMPI_Rank;
 	YY_BREAK
 case 143:
 YY_RULE_SETUP
-#line 229 "Gmsh.l"
-return tNameToString;
+#line 228 "Gmsh.l"
+return tMPI_Size;
 	YY_BREAK
 case 144:
 YY_RULE_SETUP
-#line 230 "Gmsh.l"
-return tNameToString;
+#line 229 "Gmsh.l"
+return tMemory;
 	YY_BREAK
 case 145:
 YY_RULE_SETUP
 #line 231 "Gmsh.l"
-return tNewModel;
+return tNameToString;
 	YY_BREAK
 case 146:
 YY_RULE_SETUP
 #line 232 "Gmsh.l"
-return tNurbs;
+return tNameToString;
 	YY_BREAK
 case 147:
 YY_RULE_SETUP
-#line 234 "Gmsh.l"
-return tOnelabAction;
+#line 233 "Gmsh.l"
+return tNewModel;
 	YY_BREAK
 case 148:
 YY_RULE_SETUP
-#line 235 "Gmsh.l"
-return tOnelabRun;
+#line 234 "Gmsh.l"
+return tNurbs;
 	YY_BREAK
 case 149:
 YY_RULE_SETUP
 #line 236 "Gmsh.l"
-return tNurbsOrder;
+return tOnelabAction;
 	YY_BREAK
 case 150:
 YY_RULE_SETUP
-#line 238 "Gmsh.l"
-return tPeriodic;
+#line 237 "Gmsh.l"
+return tOnelabRun;
 	YY_BREAK
 case 151:
 YY_RULE_SETUP
-#line 239 "Gmsh.l"
-return tPhysical;
+#line 238 "Gmsh.l"
+return tNurbsOrder;
 	YY_BREAK
 case 152:
 YY_RULE_SETUP
 #line 240 "Gmsh.l"
-return tPi;
+return tPeriodic;
 	YY_BREAK
 case 153:
 YY_RULE_SETUP
 #line 241 "Gmsh.l"
-return tPlane;
+return tPhysical;
 	YY_BREAK
 case 154:
 YY_RULE_SETUP
 #line 242 "Gmsh.l"
-return tPoint;
+return tPi;
 	YY_BREAK
 case 155:
 YY_RULE_SETUP
 #line 243 "Gmsh.l"
-return tParametric;
+return tPlane;
 	YY_BREAK
 case 156:
 YY_RULE_SETUP
 #line 244 "Gmsh.l"
-return tPolarSphere;
+return tPoint;
 	YY_BREAK
 case 157:
 YY_RULE_SETUP
 #line 245 "Gmsh.l"
-return tPrintf;
+return tParametric;
 	YY_BREAK
 case 158:
 YY_RULE_SETUP
 #line 246 "Gmsh.l"
-return tPlugin;
+return tPolarSphere;
 	YY_BREAK
 case 159:
 YY_RULE_SETUP
-#line 248 "Gmsh.l"
-return tQuadric;
+#line 247 "Gmsh.l"
+return tPrintf;
 	YY_BREAK
 case 160:
 YY_RULE_SETUP
-#line 249 "Gmsh.l"
-return tQuadTriAddVerts;
+#line 248 "Gmsh.l"
+return tPlugin;
 	YY_BREAK
 case 161:
 YY_RULE_SETUP
 #line 250 "Gmsh.l"
-return tQuadTriNoNewVerts;
+return tQuadric;
 	YY_BREAK
 case 162:
 YY_RULE_SETUP
 #line 251 "Gmsh.l"
-return tQuadTriDbl;
+return tQuadTriAddVerts;
 	YY_BREAK
 case 163:
 YY_RULE_SETUP
 #line 252 "Gmsh.l"
-return tQuadTriSngl;
+return tQuadTriNoNewVerts;
 	YY_BREAK
 case 164:
 YY_RULE_SETUP
-#line 254 "Gmsh.l"
-return tRecombine;
+#line 253 "Gmsh.l"
+return tQuadTriDbl;
 	YY_BREAK
 case 165:
 YY_RULE_SETUP
-#line 255 "Gmsh.l"
-return tRecombLaterals;
+#line 254 "Gmsh.l"
+return tQuadTriSngl;
 	YY_BREAK
 case 166:
 YY_RULE_SETUP
 #line 256 "Gmsh.l"
-return tRecursive;
+return tRecombine;
 	YY_BREAK
 case 167:
 YY_RULE_SETUP
 #line 257 "Gmsh.l"
-return tRotate;
+return tRecombLaterals;
 	YY_BREAK
 case 168:
 YY_RULE_SETUP
 #line 258 "Gmsh.l"
-return tRound;
+return tRecursive;
 	YY_BREAK
 case 169:
 YY_RULE_SETUP
 #line 259 "Gmsh.l"
-return tRuled;
+return tRotate;
 	YY_BREAK
 case 170:
 YY_RULE_SETUP
 #line 260 "Gmsh.l"
-return tRand;
+return tRound;
 	YY_BREAK
 case 171:
 YY_RULE_SETUP
 #line 261 "Gmsh.l"
-return tRefineMesh;
+return tRuled;
 	YY_BREAK
 case 172:
 YY_RULE_SETUP
 #line 262 "Gmsh.l"
-return tRelocateMesh;
+return tRand;
 	YY_BREAK
 case 173:
 YY_RULE_SETUP
 #line 263 "Gmsh.l"
-return tReturn;
+return tRefineMesh;
 	YY_BREAK
 case 174:
 YY_RULE_SETUP
 #line 264 "Gmsh.l"
-return tReverse;
+return tRelocateMesh;
 	YY_BREAK
 case 175:
 YY_RULE_SETUP
-#line 266 "Gmsh.l"
-return tScaleLast;
+#line 265 "Gmsh.l"
+return tReturn;
 	YY_BREAK
 case 176:
 YY_RULE_SETUP
-#line 267 "Gmsh.l"
-return tSmoother;
+#line 266 "Gmsh.l"
+return tReverse;
 	YY_BREAK
 case 177:
 YY_RULE_SETUP
 #line 268 "Gmsh.l"
-return tSetFactory;
+return tScaleLast;
 	YY_BREAK
 case 178:
 YY_RULE_SETUP
 #line 269 "Gmsh.l"
-return tSetNumber;
+return tSmoother;
 	YY_BREAK
 case 179:
 YY_RULE_SETUP
 #line 270 "Gmsh.l"
-return tSetString;
+return tSetFactory;
 	YY_BREAK
 case 180:
 YY_RULE_SETUP
 #line 271 "Gmsh.l"
-return tSetPartition;
+return tSetNumber;
 	YY_BREAK
 case 181:
 YY_RULE_SETUP
 #line 272 "Gmsh.l"
-return tSqrt;
+return tSetString;
 	YY_BREAK
 case 182:
 YY_RULE_SETUP
 #line 273 "Gmsh.l"
-return tSin;
+return tSetPartition;
 	YY_BREAK
 case 183:
 YY_RULE_SETUP
 #line 274 "Gmsh.l"
-return tSinh;
+return tSqrt;
 	YY_BREAK
 case 184:
 YY_RULE_SETUP
 #line 275 "Gmsh.l"
-return tSphere;
+return tSin;
 	YY_BREAK
 case 185:
 YY_RULE_SETUP
 #line 276 "Gmsh.l"
-return tSpline;
+return tSinh;
 	YY_BREAK
 case 186:
 YY_RULE_SETUP
 #line 277 "Gmsh.l"
-return tSplit;
+return tSphere;
 	YY_BREAK
 case 187:
 YY_RULE_SETUP
 #line 278 "Gmsh.l"
-return tSurface;
+return tSpline;
 	YY_BREAK
 case 188:
 YY_RULE_SETUP
 #line 279 "Gmsh.l"
-return tStr;
+return tSplit;
 	YY_BREAK
 case 189:
 YY_RULE_SETUP
 #line 280 "Gmsh.l"
-return tStringToName;
+return tSurface;
 	YY_BREAK
 case 190:
 YY_RULE_SETUP
 #line 281 "Gmsh.l"
-return tStringToName;
+return tStr;
 	YY_BREAK
 case 191:
 YY_RULE_SETUP
 #line 282 "Gmsh.l"
-return tSprintf;
+return tStringToName;
 	YY_BREAK
 case 192:
 YY_RULE_SETUP
 #line 283 "Gmsh.l"
-return tStrCat;
+return tStringToName;
 	YY_BREAK
 case 193:
 YY_RULE_SETUP
 #line 284 "Gmsh.l"
-return tStrReplace;
+return tSprintf;
 	YY_BREAK
 case 194:
 YY_RULE_SETUP
 #line 285 "Gmsh.l"
-return tStrPrefix;
+return tStrCat;
 	YY_BREAK
 case 195:
 YY_RULE_SETUP
 #line 286 "Gmsh.l"
-return tStrRelative;
+return tStrReplace;
 	YY_BREAK
 case 196:
 YY_RULE_SETUP
 #line 287 "Gmsh.l"
-return tStrFind;
+return tStrPrefix;
 	YY_BREAK
 case 197:
 YY_RULE_SETUP
 #line 288 "Gmsh.l"
-return tStrCmp;
+return tStrRelative;
 	YY_BREAK
 case 198:
 YY_RULE_SETUP
 #line 289 "Gmsh.l"
-return tStrChoice;
+return tStrFind;
 	YY_BREAK
 case 199:
 YY_RULE_SETUP
 #line 290 "Gmsh.l"
-return tStrLen;
+return tStrCmp;
 	YY_BREAK
 case 200:
 YY_RULE_SETUP
 #line 291 "Gmsh.l"
-return tStrSub;
+return tStrChoice;
 	YY_BREAK
 case 201:
 YY_RULE_SETUP
 #line 292 "Gmsh.l"
-return tShow;
+return tStrLen;
 	YY_BREAK
 case 202:
 YY_RULE_SETUP
 #line 293 "Gmsh.l"
-return tSymmetry;
+return tStrSub;
 	YY_BREAK
 case 203:
 YY_RULE_SETUP
 #line 294 "Gmsh.l"
-return tSlide;
+return tShow;
 	YY_BREAK
 case 204:
 YY_RULE_SETUP
 #line 295 "Gmsh.l"
-return tSyncModel;
+return tSymmetry;
 	YY_BREAK
 case 205:
 YY_RULE_SETUP
-#line 297 "Gmsh.l"
-return tText2D;
+#line 296 "Gmsh.l"
+return tSlide;
 	YY_BREAK
 case 206:
 YY_RULE_SETUP
-#line 298 "Gmsh.l"
-return tText3D;
+#line 297 "Gmsh.l"
+return tSyncModel;
 	YY_BREAK
 case 207:
 YY_RULE_SETUP
 #line 299 "Gmsh.l"
-return tTestLevel;
+return tText2D;
 	YY_BREAK
 case 208:
 YY_RULE_SETUP
 #line 300 "Gmsh.l"
-return tTextAttributes;
+return tText3D;
 	YY_BREAK
 case 209:
 YY_RULE_SETUP
 #line 301 "Gmsh.l"
-return tThruSections;
+return tTestLevel;
 	YY_BREAK
 case 210:
 YY_RULE_SETUP
 #line 302 "Gmsh.l"
-return tTime;
+return tTextAttributes;
 	YY_BREAK
 case 211:
 YY_RULE_SETUP
 #line 303 "Gmsh.l"
-return tTransfinite;
+return tThruSections;
 	YY_BREAK
 case 212:
 YY_RULE_SETUP
 #line 304 "Gmsh.l"
-return tTransfQuadTri;
+return tTime;
 	YY_BREAK
 case 213:
 YY_RULE_SETUP
 #line 305 "Gmsh.l"
-return tTranslate;
+return tTransfinite;
 	YY_BREAK
 case 214:
 YY_RULE_SETUP
 #line 306 "Gmsh.l"
-return tTanh;
+return tTransfQuadTri;
 	YY_BREAK
 case 215:
 YY_RULE_SETUP
 #line 307 "Gmsh.l"
-return tTan;
+return tTranslate;
 	YY_BREAK
 case 216:
 YY_RULE_SETUP
 #line 308 "Gmsh.l"
-return tToday;
+return tTanh;
 	YY_BREAK
 case 217:
 YY_RULE_SETUP
 #line 309 "Gmsh.l"
-return tTotalMemory;
+return tTan;
 	YY_BREAK
 case 218:
 YY_RULE_SETUP
-#line 311 "Gmsh.l"
-return tUndefineConstant;
+#line 310 "Gmsh.l"
+return tToday;
 	YY_BREAK
 case 219:
 YY_RULE_SETUP
-#line 312 "Gmsh.l"
-return tUpperCase;
+#line 311 "Gmsh.l"
+return tTotalMemory;
 	YY_BREAK
 case 220:
 YY_RULE_SETUP
 #line 313 "Gmsh.l"
-return tLowerCase;
+return tUndefineConstant;
 	YY_BREAK
 case 221:
 YY_RULE_SETUP
 #line 314 "Gmsh.l"
-return tLowerCaseIn;
+return tUpperCase;
 	YY_BREAK
 case 222:
 YY_RULE_SETUP
 #line 315 "Gmsh.l"
-return tUsing;
+return tLowerCase;
 	YY_BREAK
 case 223:
 YY_RULE_SETUP
-#line 317 "Gmsh.l"
-return tVolume;
+#line 316 "Gmsh.l"
+return tLowerCaseIn;
 	YY_BREAK
 case 224:
-#line 320 "Gmsh.l"
+YY_RULE_SETUP
+#line 317 "Gmsh.l"
+return tUsing;
+	YY_BREAK
 case 225:
-#line 321 "Gmsh.l"
+YY_RULE_SETUP
+#line 319 "Gmsh.l"
+return tVolume;
+	YY_BREAK
 case 226:
 #line 322 "Gmsh.l"
 case 227:
+#line 323 "Gmsh.l"
+case 228:
+#line 324 "Gmsh.l"
+case 229:
 YY_RULE_SETUP
-#line 322 "Gmsh.l"
+#line 324 "Gmsh.l"
 { gmsh_yylval.d = atof((char *)gmsh_yytext); return tDOUBLE; }
 	YY_BREAK
-case 228:
+case 230:
 YY_RULE_SETUP
-#line 324 "Gmsh.l"
+#line 326 "Gmsh.l"
 { gmsh_yylval.c = strsave((char*)gmsh_yytext); return tSTRING; }
 	YY_BREAK
-case 229:
+case 231:
 YY_RULE_SETUP
-#line 326 "Gmsh.l"
+#line 328 "Gmsh.l"
 return gmsh_yytext[0];
 	YY_BREAK
-case 230:
+case 232:
 YY_RULE_SETUP
-#line 328 "Gmsh.l"
+#line 330 "Gmsh.l"
 ECHO;
 	YY_BREAK
-#line 2635 "Gmsh.yy.cpp"
+#line 2656 "Gmsh.yy.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -2923,7 +2944,7 @@ static int yy_get_next_buffer (void)
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 1177 )
+			if ( yy_current_state >= 1191 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2951,11 +2972,11 @@ static int yy_get_next_buffer (void)
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 1177 )
+		if ( yy_current_state >= 1191 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 1176);
+	yy_is_jam = (yy_current_state == 1190);
 
 	return yy_is_jam ? 0 : yy_current_state;
 }
@@ -3628,7 +3649,7 @@ void gmsh_yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 328 "Gmsh.l"
+#line 330 "Gmsh.l"