diff --git a/Common/Context.h b/Common/Context.h
index e02c5daac5f1d7440077d56878aca90a44bf8ae2..e4b2c13571a3d814fb2cdb565d013d613ed53709 100644
--- a/Common/Context.h
+++ b/Common/Context.h
@@ -109,7 +109,7 @@ public :
     int point_sel_size, line_sel_width;
     int hidden, shade;
     int highlight;
-    int level, old_circle, circle_points, old_newreg;
+    int level, old_circle, circle_points, extrude_spline_points, old_newreg;
     double normals, tangents;
     double scaling_factor;
     int color_scheme ;
diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h
index dbfb44a36b7cf589cb11e2d241af747ef1eee5fc..c4d55cd81ab5c717aa91140cfbe80f18daf98eba 100644
--- a/Common/DefaultOptions.h
+++ b/Common/DefaultOptions.h
@@ -333,6 +333,8 @@ StringXNumber GeometryOptions_Number[] = {
     "Use old newreg definition for geometrical transformations (compatibility option for old Gmsh geometries)" },
   { F|O, "CirclePoints" , opt_geometry_circle_points, 20. ,
     "Number of points used to draw a circle/ellipsis" },
+  { F|O, "ExtrudeSplinePoints" , opt_geometry_extrude_spline_points, 5. ,
+    "Number of control points for splines created during extrusion" },
   { F|O, "ScalingFactor" , opt_geometry_scaling_factor , 1.0 , 
     "Global geometry scaling factor" },
   { F|O, "ColorScheme" , opt_geometry_color_scheme , 0. , 
diff --git a/Common/Options.cpp b/Common/Options.cpp
index 1c53dbf8dfc13442d7ece9ffd61ef1e0a97ef9d7..0f5a14b5a67b15a7e842c925ad6296aa2f026ffb 100644
--- a/Common/Options.cpp
+++ b/Common/Options.cpp
@@ -1,4 +1,4 @@
-// $Id: Options.cpp,v 1.57 2001-11-09 11:20:21 geuzaine Exp $
+// $Id: Options.cpp,v 1.58 2001-11-12 08:21:17 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -1246,6 +1246,11 @@ double opt_geometry_circle_points(OPT_ARGS_NUM){
     CTX.geom.circle_points = (int)val;
   return CTX.geom.circle_points;
 }
+double opt_geometry_extrude_spline_points(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.geom.extrude_spline_points = (int)val;
+  return CTX.geom.extrude_spline_points;
+}
 double opt_geometry_scaling_factor(OPT_ARGS_NUM){
   if(action & GMSH_SET) 
     CTX.geom.scaling_factor = (int)val;
diff --git a/Common/Options.h b/Common/Options.h
index f001f569ef9aa78615f3390f1786ce6de8dc30b3..072675d46ea6320c0803e9956d750687a0024ca8 100644
--- a/Common/Options.h
+++ b/Common/Options.h
@@ -155,6 +155,7 @@ double opt_geometry_highlight(OPT_ARGS_NUM);
 double opt_geometry_old_circle(OPT_ARGS_NUM);
 double opt_geometry_old_newreg(OPT_ARGS_NUM);
 double opt_geometry_circle_points(OPT_ARGS_NUM);
+double opt_geometry_extrude_spline_points(OPT_ARGS_NUM);
 double opt_geometry_scaling_factor(OPT_ARGS_NUM);
 double opt_geometry_color_scheme(OPT_ARGS_NUM);
 double opt_mesh_quality(OPT_ARGS_NUM);
diff --git a/Geo/CAD.cpp b/Geo/CAD.cpp
index 172c743ba0dbad424043cee6e6e8909773b25c37..1a1160ce98368e2436765e9e84764a376fdcecb2 100644
--- a/Geo/CAD.cpp
+++ b/Geo/CAD.cpp
@@ -1,4 +1,4 @@
-// $Id: CAD.cpp,v 1.34 2001-11-07 07:13:45 geuzaine Exp $
+// $Id: CAD.cpp,v 1.35 2001-11-12 08:21:17 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "Numeric.h"
@@ -791,7 +791,7 @@ void printSurface(Surface*s){
   }
 }
 
-void ProtudeXYZ ( double &x, double &y, double &z, ExtrudeParams *e){
+void ProtudeXYZ (double &x, double &y, double &z, ExtrudeParams *e){
   double matrix[4][4];
   double T[3];
   Vertex v(x,y,z);
@@ -814,68 +814,75 @@ void ProtudeXYZ ( double &x, double &y, double &z, ExtrudeParams *e){
   z = v.Pos.Z;
 }
 
-void Extrude_ProtudePoint(int ep, int ip, double A, double B, double C,
-                          double X, double Y, double Z, double alpha,
-                          Curve **pc, Curve **prc, ExtrudeParams *e){
-  double xnew,ynew,znew,matrix[4][4],T[3],Ax[3];
-  Vertex V,*pv, *chapeau;
+void Extrude_ProtudePoint(int type, int ip, 
+			  double T0, double T1, double T2,
+			  double A0, double A1, double A2,
+                          double X0, double X1, double X2, double alpha,
+                          Curve **pc, Curve **prc, 
+			  ExtrudeParams *e){
+  double xnew,ynew,znew,matrix[4][4],T[3],Ax[3],d;
+  Vertex V,*pv,*newp,*chapeau;
   Curve *c;
+  int i;
   
   pv= &V;
   pv->Num = ip;
   *pc = *prc = NULL;
-  if(!Tree_Query(THEM->Points, &pv) )return;
+  if(!Tree_Query(THEM->Points, &pv)) return;
 
   Msg(DEBUG, "Extrude Point %d", ip);
 
   chapeau = DuplicateVertex(pv);
-  if(ep){
-    T[0] = A; T[1] = B; T[2] = C;
+
+  switch(type){
+
+  case TRANSLATE :
+    T[0] = T0; T[1] = T1; T[2] = T2;
     SetTranslationMatrix(matrix,T);
     ApplyTransformationToPoint(matrix,chapeau);
     List_Reset(ListOfTransformedPoints);
-  }
-  else{
-    T[0] = -X; T[1] = -Y; T[2] = -Z;
+
+    if(!comparePosition(&pv,&chapeau)) return ;
+    c = Create_Curve(NEWLINE(),MSH_SEGM_LINE,1,NULL,NULL,-1,-1,0.,1.);
+    c->Control_Points = List_Create(2,1,sizeof(Vertex*));
+    c->Extrude = new ExtrudeParams;
+    c->Extrude->fill(type,T0,T1,T2,A0,A1,A2,X0,X1,X2,alpha);
+    if(e) c->Extrude->mesh = e->mesh;
+
+    List_Add(c->Control_Points,&pv);
+    List_Add(c->Control_Points,&chapeau);
+    c->beg = pv;
+    c->end = chapeau;
+    break;
+
+  case ROTATE :
+    T[0] = -X0; T[1] = -X1; T[2] = -X2;
     SetTranslationMatrix(matrix,T);
     ApplyTransformationToPoint(matrix,chapeau);
     List_Reset(ListOfTransformedPoints);
 
-    Ax[0] = A; Ax[1] = B; Ax[2] = C;
+    Ax[0] = A0; Ax[1] = A1; Ax[2] = A2;
     SetRotationMatrix(matrix,Ax,alpha);
     ApplyTransformationToPoint(matrix,chapeau);
     List_Reset(ListOfTransformedPoints);
 
-    T[0] = X; T[1] = Y; T[2] = Z;
+    T[0] = X0; T[1] = X1; T[2] = X2;
     SetTranslationMatrix(matrix,T);
     ApplyTransformationToPoint(matrix,chapeau);
     List_Reset(ListOfTransformedPoints);
-    Msg(DEBUG,"Angle %g Point (%g,%g,%g) Axis (%g,%g,%g)",alpha,X,Y,Z,A,B,C);
-  }
-
-  if(!comparePosition(&pv,&chapeau)) return ;
 
-  c = Create_Curve(NEWLINE(),(ep)?MSH_SEGM_LINE:MSH_SEGM_CIRC,1,NULL,NULL,-1,-1,0.,1.);
-  c->Control_Points = List_Create((ep)?2:3,1,sizeof(Vertex*));
+    if(!comparePosition(&pv,&chapeau)) return ;
+    c = Create_Curve(NEWLINE(),MSH_SEGM_CIRC,1,NULL,NULL,-1,-1,0.,1.);
+    c->Control_Points = List_Create(3,1,sizeof(Vertex*));
+    c->Extrude = new ExtrudeParams;
+    c->Extrude->fill(type,T0,T1,T2,A0,A1,A2,X0,X1,X2,alpha);
+    if(e) c->Extrude->mesh = e->mesh;
 
-  // je me souviens
-  c->Extrude = new ExtrudeParams;
-  c->Extrude->fill(ep,A,B,C,X,Y,Z,alpha);
-  if(e)c->Extrude->mesh = e->mesh;
-  
-  if(ep){
-    List_Add(c->Control_Points,&pv);
-    List_Add(c->Control_Points,&chapeau);
-    c->beg = pv;
-    c->end = chapeau;
-  }
-  else{
     List_Add(c->Control_Points,&pv);
-    
     dist_ddg(pv->Pos.X,pv->Pos.Y,pv->Pos.Z,
              chapeau->Pos.X,chapeau->Pos.Y,chapeau->Pos.Z,
-             X,Y,Z,X+A,Y+B,Z+C,&xnew,&ynew,&znew);
-    Vertex *newp = DuplicateVertex(pv);
+             X0,X1,X2,X0+A0,X1+A1,X2+A2,&xnew,&ynew,&znew);
+    newp = DuplicateVertex(pv);
     newp->Pos.X = xnew;
     newp->Pos.Y = ynew;
     newp->Pos.Z = znew;
@@ -883,8 +890,50 @@ void Extrude_ProtudePoint(int ep, int ip, double A, double B, double C,
     List_Add(c->Control_Points,&chapeau);
     c->beg = pv;
     c->end = chapeau;
-    printCurve(c);
+    break;
+
+  case TRANSLATE_ROTATE :
+    d = CTX.geom.extrude_spline_points;
+    c = Create_Curve(NEWLINE(),MSH_SEGM_SPLN,1,NULL,NULL,-1,-1,0.,1.);
+    c->Control_Points = List_Create(CTX.geom.extrude_spline_points,1,sizeof(Vertex*));
+    c->Extrude = new ExtrudeParams;
+    c->Extrude->fill(type,T0,T1,T2,A0,A1,A2,X0,X1,X2,alpha);
+    if(e) c->Extrude->mesh = e->mesh;
+    List_Add(c->Control_Points,&chapeau);
+    c->beg = chapeau;
+    for(i=1 ; i<=CTX.geom.extrude_spline_points ; i++){
+      pv = DuplicateVertex(pv);
+
+      T[0] = -X0; T[1] = -X1; T[2] = -X2;
+      SetTranslationMatrix(matrix,T);
+      ApplyTransformationToPoint(matrix,pv);
+      List_Reset(ListOfTransformedPoints);
+
+      Ax[0] = A0; Ax[1] = A1; Ax[2] = A2;
+      SetRotationMatrix(matrix,Ax,alpha/d);
+      ApplyTransformationToPoint(matrix,pv);
+      List_Reset(ListOfTransformedPoints);
+
+      T[0] = X0; T[1] = X1; T[2] = X2;
+      SetTranslationMatrix(matrix,T);
+      ApplyTransformationToPoint(matrix,pv);
+      List_Reset(ListOfTransformedPoints);
+
+      T[0] = T0/d; T[1] = T1/d; T[2] = T2/d;
+      SetTranslationMatrix(matrix,T);
+      ApplyTransformationToPoint(matrix,pv);
+      List_Reset(ListOfTransformedPoints);
+
+      List_Add(c->Control_Points,&pv);
+    }
+    c->end = pv;
+    break;
+
+  default :
+    Msg(GERROR, "Unknown extrusion type");
+    return;
   }
+
   End_Curve(c);
   Tree_Add(THEM->Curves,&c);
   CreateReversedCurve (THEM,c);
@@ -893,9 +942,10 @@ void Extrude_ProtudePoint(int ep, int ip, double A, double B, double C,
 
 }
 
-Surface *Extrude_ProtudeCurve(int ep, int ic,
-                              double A, double B, double C,
-                              double X, double Y, double Z,
+Surface *Extrude_ProtudeCurve(int type, int ic,
+                              double T0, double T1, double T2,
+                              double A0, double A1, double A2,
+                              double X0, double X1, double X2,
                               double alpha, ExtrudeParams *e){
   double matrix[4][4],T[3],Ax[3];
   Curve *CurveBeg,*CurveEnd;
@@ -913,34 +963,64 @@ Surface *Extrude_ProtudeCurve(int ep, int ic,
   chapeau = DuplicateCurve(pc);
   
   chapeau->Extrude = new ExtrudeParams(COPIED_ENTITY);
-  chapeau->Extrude->fill(ep,A,B,C,X,Y,Z,alpha);
+  chapeau->Extrude->fill(type,T0,T1,T2,A0,A1,A2,X0,X1,X2,alpha);
   chapeau->Extrude->geo.Source = pc->Num;
   if(e) chapeau->Extrude->mesh = e->mesh;
   
-  if(ep){
-    T[0] = A; T[1] = B; T[2] = C;
+  switch(type){
+  case TRANSLATE :
+    T[0] = T0; T[1] = T1; T[2] = T2;
     SetTranslationMatrix(matrix,T);
     ApplyTransformationToCurve(matrix,chapeau);
-  }
-  else{
-    T[0] = -X; T[1] = -Y; T[2] = -Z;
+    List_Reset(ListOfTransformedPoints);
+    break;
+  case ROTATE :
+    T[0] = -X0; T[1] = -X1; T[2] = -X2;
     SetTranslationMatrix(matrix,T);
     ApplyTransformationToCurve(matrix,chapeau);
     List_Reset(ListOfTransformedPoints);
     
-    Ax[0] = A; Ax[1] = B; Ax[2] = C;
+    Ax[0] = A0; Ax[1] = A1; Ax[2] = A2;
     SetRotationMatrix(matrix,Ax,alpha);
     ApplyTransformationToCurve(matrix,chapeau);
     List_Reset(ListOfTransformedPoints);
     
-    T[0] = X; T[1] = Y; T[2] = Z;
+    T[0] = X0; T[1] = X1; T[2] = X2;
+    SetTranslationMatrix(matrix,T);
+    ApplyTransformationToCurve(matrix,chapeau);
+    List_Reset(ListOfTransformedPoints);
+    break;
+  case TRANSLATE_ROTATE :
+    T[0] = -X0; T[1] = -X1; T[2] = -X2;
     SetTranslationMatrix(matrix,T);
     ApplyTransformationToCurve(matrix,chapeau);
     List_Reset(ListOfTransformedPoints);
+    
+    Ax[0] = A0; Ax[1] = A1; Ax[2] = A2;
+    SetRotationMatrix(matrix,Ax,alpha);
+    ApplyTransformationToCurve(matrix,chapeau);
+    List_Reset(ListOfTransformedPoints);
+    
+    T[0] = X0; T[1] = X1; T[2] = X2;
+    SetTranslationMatrix(matrix,T);
+    ApplyTransformationToCurve(matrix,chapeau);
+    List_Reset(ListOfTransformedPoints);
+
+    T[0] = T0; T[1] = T1; T[2] = T2;
+    SetTranslationMatrix(matrix,T);
+    ApplyTransformationToCurve(matrix,chapeau);
+    List_Reset(ListOfTransformedPoints);
+    break;
+  default :
+    Msg(GERROR, "Unknown extrusion type");
+    return NULL;
   }
-  Extrude_ProtudePoint(ep,pc->beg->Num,A,B,C,X,Y,Z,alpha,
+
+  Extrude_ProtudePoint(type,pc->beg->Num,T0,T1,T2,
+		       A0,A1,A2,X0,X1,X2,alpha,
                        &CurveBeg,&ReverseBeg,e);
-  Extrude_ProtudePoint(ep,pc->end->Num,A,B,C,X,Y,Z,alpha,
+  Extrude_ProtudePoint(type,pc->end->Num,T0,T1,T2,
+		       A0,A1,A2,X0,X1,X2,alpha,
                        &CurveEnd,&ReverseEnd,e);
   List_Reset(ListOfTransformedPoints);
   
@@ -952,10 +1032,8 @@ Surface *Extrude_ProtudeCurve(int ep, int ic,
     s = Create_Surface(NEWSURFACE(),MSH_SURF_REGL,0);
 
   s->Generatrices = List_Create(4,1,sizeof(Curve*));
-  
-  // je me souviens
   s->Extrude = new ExtrudeParams;
-  s->Extrude->fill(ep,A,B,C,X,Y,Z,alpha);
+  s->Extrude->fill(type,T0,T1,T2,A0,A1,A2,X0,X1,X2,alpha);
   s->Extrude->geo.Source = pc->Num;
   if(e) s->Extrude->mesh = e->mesh;
   
@@ -984,10 +1062,10 @@ Surface *Extrude_ProtudeCurve(int ep, int ic,
   return s;
 }
 
-void Extrude_ProtudeSurface(int ep, int is,
-                            double A, double B, double C,
-                            double X, double Y, double Z,
-                            double alpha,
+void Extrude_ProtudeSurface(int type, int is,
+                            double T0, double T1, double T2,
+                            double A0, double A1, double A2,
+                            double X0, double X1, double X2, double alpha,
                             int NewVolume, ExtrudeParams *e){
   double matrix[4][4],T[3],Ax[3];
   Curve *c,*c2;
@@ -995,13 +1073,13 @@ void Extrude_ProtudeSurface(int ep, int is,
   Surface *s,*ps, *chapeau;
   Volume *pv = NULL;
   
-  if(!(ps = FindSurface(is,THEM)) )return;
+  if(!(ps = FindSurface(is,THEM))) return;
 
   Msg(DEBUG, "Extrude Surface %d", is);
 
   chapeau = DuplicateSurface(ps);
   chapeau->Extrude = new ExtrudeParams(COPIED_ENTITY);
-  chapeau->Extrude->fill(ep,A,B,C,X,Y,Z,alpha);
+  chapeau->Extrude->fill(type,T0,T1,T2,A0,A1,A2,X0,X1,X2,alpha);
   chapeau->Extrude->geo.Source = ps->Num;
   if(e) chapeau->Extrude->mesh = e->mesh;
   
@@ -1014,55 +1092,77 @@ void Extrude_ProtudeSurface(int ep, int is,
 	 return;
       }
     c->Extrude = new ExtrudeParams(COPIED_ENTITY);
-    c->Extrude->fill(ep,A,B,C,X,Y,Z,alpha);
+    c->Extrude->fill(type,T0,T1,T2,A0,A1,A2,X0,X1,X2,alpha);
     //pas de abs()! il faut le signe pour copy_mesh dans ExtrudeMesh
     c->Extrude->geo.Source = c2->Num; 
-    if(e)c->Extrude->mesh = e->mesh;
+    if(e) c->Extrude->mesh = e->mesh;
   }
   
   if(NewVolume){
     pv = Create_Volume(NewVolume,0,0);
-    //if(CTX.geom.old_newreg){//dirty compatibility trick...
-      //THEM->MaxVolumeNum--;
-    //}
     pv->Extrude = new ExtrudeParams;
-    pv->Extrude->fill(ep,A,B,C,X,Y,Z,alpha);
+    pv->Extrude->fill(type,T0,T1,T2,A0,A1,A2,X0,X1,X2,alpha);
     pv->Extrude->geo.Source = is;
-    if(e)pv->Extrude->mesh = e->mesh;
-    if(pv)List_Add(pv->Surfaces,&ps);
+    if(e) pv->Extrude->mesh = e->mesh;
+    if(pv) List_Add(pv->Surfaces,&ps);
   }
-  if(pv)List_Add(pv->Surfaces,&chapeau);
+  if(pv) List_Add(pv->Surfaces,&chapeau);
 
-  // filling extrude params
-  
   for(i=0;i<List_Nbr(ps->Generatrices);i++){
     List_Read(ps->Generatrices,i,&c);
-    s = Extrude_ProtudeCurve(ep,c->Num,A,B,C,X,Y,Z,alpha,e);
-    if(pv && s)List_Add(pv->Surfaces,&s);
-    //printSurface(s);
+    s = Extrude_ProtudeCurve(type,c->Num,T0,T1,T2,A0,A1,A2,X0,X1,X2,alpha,e);
+    if(pv && s) List_Add(pv->Surfaces,&s);
   }
 
-  if(ep){
-    T[0] = A; T[1] = B; T[2] = C;
+  switch(type){
+  case TRANSLATE :
+    T[0] = T0; T[1] = T1; T[2] = T2;
     SetTranslationMatrix(matrix,T);
     ApplyTransformationToSurface(matrix,chapeau);
-  }
-  else{
-    T[0] = -X; T[1] = -Y; T[2] = -Z;
+    List_Reset(ListOfTransformedPoints);
+    break;
+  case ROTATE :
+    T[0] = -X0; T[1] = -X1; T[2] = -X2;
     SetTranslationMatrix(matrix,T);
     ApplyTransformationToSurface(matrix,chapeau);
     List_Reset(ListOfTransformedPoints);
     
-    Ax[0] = A; Ax[1] = B; Ax[2] = C;
+    Ax[0] = A0; Ax[1] = A1; Ax[2] = A2;
     SetRotationMatrix(matrix,Ax,alpha);
     ApplyTransformationToSurface(matrix,chapeau);
     List_Reset(ListOfTransformedPoints);
     
-    T[0] = X; T[1] = Y; T[2] = Z;
+    T[0] = X0; T[1] = X1; T[2] = X2;
     SetTranslationMatrix(matrix,T);
     ApplyTransformationToSurface(matrix,chapeau);
     List_Reset(ListOfTransformedPoints);
+    break;
+  case TRANSLATE_ROTATE :
+    T[0] = -X0; T[1] = -X1; T[2] = -X2;
+    SetTranslationMatrix(matrix,T);
+    ApplyTransformationToSurface(matrix,chapeau);
+    List_Reset(ListOfTransformedPoints);
+    
+    Ax[0] = A0; Ax[1] = A1; Ax[2] = A2;
+    SetRotationMatrix(matrix,Ax,alpha);
+    ApplyTransformationToSurface(matrix,chapeau);
+    List_Reset(ListOfTransformedPoints);
+    
+    T[0] = X0; T[1] = X1; T[2] = X2;
+    SetTranslationMatrix(matrix,T);
+    ApplyTransformationToSurface(matrix,chapeau);
+    List_Reset(ListOfTransformedPoints);
+
+    T[0] = T0; T[1] = T1; T[2] = T2;
+    SetTranslationMatrix(matrix,T);
+    ApplyTransformationToSurface(matrix,chapeau);
+    List_Reset(ListOfTransformedPoints);
+    break;
+  default :
+    Msg(GERROR, "Unknown extrusion type");
+    return;
   }
+
   Tree_Suppress(THEM->Surfaces,&chapeau);
 
   chapeau->Num = NEWSURFACE();
@@ -1070,7 +1170,7 @@ void Extrude_ProtudeSurface(int ep, int is,
 
   Tree_Add(THEM->Surfaces,&chapeau);
   
-  if(pv)Tree_Add(THEM->Volumes,&pv);
+  if(pv) Tree_Add(THEM->Volumes,&pv);
   
   if(CTX.geom.auto_coherence) ReplaceAllDuplicates ( THEM );
   List_Reset(ListOfTransformedPoints);
diff --git a/Geo/CAD.h b/Geo/CAD.h
index 3c0d502903fae370b465b137bef3bf18b61bc31f..81bd3be58af46136f4007b3276cab4591594e09f 100644
--- a/Geo/CAD.h
+++ b/Geo/CAD.h
@@ -24,17 +24,21 @@ bool ProjectPointOnCurve (Curve *c, Vertex *v, Vertex *RES, Vertex *DER);
 bool ProjectPointOnSurface (Surface *s, Vertex &p);
 bool ProjectPointOnSurface (Surface *s, Vertex *p,double *u, double *v);
 
-void Extrude_ProtudePoint(int ep, int ip, double A, double B, double C,
-                          double X, double Y, double Z, double alpha,
-                          Curve **pc, Curve **prc, ExtrudeParams *e);
-Surface *Extrude_ProtudeCurve(int ep, int ic,
-                              double A, double B, double C,
-                              double X, double Y, double Z,
-                              double alpha, ExtrudeParams *e);
-void Extrude_ProtudeSurface(int ep, int is,
-                            double A, double B, double C,
-                            double X, double Y, double Z,
-                            double alpha,
+void Extrude_ProtudePoint(int type, int ip, 
+			  double T0, double T1, double T2,
+			  double A0, double A1, double A2,
+                          double X0, double X1, double X2, double alpha,
+                          Curve **pc, Curve **prc, 
+			  ExtrudeParams *e);
+Surface *Extrude_ProtudeCurve(int type, int ic,
+			      double T0, double T1, double T2,
+			      double A0, double A1, double A2,
+			      double X0, double X1, double X2, double alpha,
+			      ExtrudeParams *e);
+void Extrude_ProtudeSurface(int type, int is,
+			    double T0, double T1, double T2,
+			    double A0, double A1, double A2,
+			    double X0, double X1, double X2, double alpha,
                             int NewVolume, ExtrudeParams *e);
 void ProtudeXYZ ( double &x, double &y, double &z, ExtrudeParams *e);
 void ReplaceAllDuplicates ( Mesh *m );
diff --git a/Geo/ExtrudeParams.cpp b/Geo/ExtrudeParams.cpp
index f2bf4c832fbc06d0e9f6df0e1dabd999642c16e6..f963805d6bf173cb150a02b0b6e1eee4d4f76936 100644
--- a/Geo/ExtrudeParams.cpp
+++ b/Geo/ExtrudeParams.cpp
@@ -1,4 +1,4 @@
-// $Id: ExtrudeParams.cpp,v 1.6 2001-09-25 08:21:14 geuzaine Exp $
+// $Id: ExtrudeParams.cpp,v 1.7 2001-11-12 08:21:17 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "Geo.h"
@@ -24,23 +24,28 @@ ExtrudeParams :: ExtrudeParams (int ModeEx){
 }
 
 
-void ExtrudeParams :: fill (int ep , double A, double B, double C,
-                            double X, double Y, double Z, double angle){
-  geo.axe[0] = A;
-  geo.axe[1] = B;
-  geo.axe[2] = C;
-  geo.pt[0] = X;
-  geo.pt[1] = Y;
-  geo.pt[2] = Z;
+void ExtrudeParams :: fill (int type ,
+			    double T0, double T1, double T2,
+			    double A0, double A1, double A2,
+                            double X0, double X1, double X2, double angle){
+  geo.trans[0] = T0;
+  geo.trans[1] = T1;
+  geo.trans[2] = T2;
+  geo.axe[0] = A0;
+  geo.axe[1] = A1;
+  geo.axe[2] = A2;
+  geo.pt[0] = X0;
+  geo.pt[1] = X1;
+  geo.pt[2] = X2;
   geo.angle = angle;
-  geo.Type = ep;
+  geo.Type = type;
 }
 
 void ExtrudeParams :: Extrude ( int iLayer, int iElemLayer,
                                 double &x, double &y, double &z){
 
   double dx0,dy0,dz0,dx1,dy1,dz1;
-  double dx,dy,dz;
+  double dx,dy,dz,angle;
   if(!iLayer){
     dx0=dy0=dz0=0.0;
     dx1 = mesh.hLayer[0];
@@ -56,40 +61,71 @@ void ExtrudeParams :: Extrude ( int iLayer, int iElemLayer,
     dz1 = mesh.hLayer[iLayer];
   }
   double t = (double) iElemLayer /(double)mesh.NbElmLayer[iLayer];
-  if(geo.Type){
-    dx = geo.axe[0]*(dx0 + t * (dx1-dx0));
-    dy = geo.axe[1]*(dy0 + t * (dy1-dy0));
-    dz = geo.axe[2]*(dz0 + t * (dz1-dz0));
+  switch(geo.Type){
+  case TRANSLATE :
+    dx = geo.trans[0]*(dx0 + t * (dx1-dx0));
+    dy = geo.trans[1]*(dy0 + t * (dy1-dy0));
+    dz = geo.trans[2]*(dz0 + t * (dz1-dz0));
     x+=dx;y+=dy;z+=dz;
-  }
-  else{
-    double angle = geo.angle;
+    break;
+  case ROTATE :
+    angle = geo.angle;
+    geo.angle = geo.angle*(dx0 + t * (dx1-dx0));
+    ProtudeXYZ(x,y,z,this);
+    geo.angle = angle;
+    break;
+  case TRANSLATE_ROTATE :
+    angle = geo.angle;
     geo.angle = geo.angle*(dx0 + t * (dx1-dx0));
     ProtudeXYZ(x,y,z,this);
     geo.angle = angle;
+    dx = geo.trans[0]*(dx0 + t * (dx1-dx0));
+    dy = geo.trans[1]*(dy0 + t * (dy1-dy0));
+    dz = geo.trans[2]*(dz0 + t * (dz1-dz0));
+    x+=dx;y+=dy;z+=dz;
+    break;
+  default :
+    Msg(GERROR, "Unknown extrusion type");
+    break;
   }
 }
 
 void ExtrudeParams :: Rotate(double matr[3][3]){
+  Projette(geo.trans,matr);
   Projette(geo.axe,matr);
   Projette(geo.pt,matr);
   geo.angle = -geo.angle;
 }
 
 void ExtrudeParams :: Extrude (double t, double &x, double &y, double &z){
+  double dx,dy,dz,angle;
 
-  double dx,dy,dz;
-  if(geo.Type){
-    dx = geo.axe[0]*t;
-    dy = geo.axe[1]*t;
-    dz = geo.axe[2]*t;
+  switch(geo.Type){
+  case TRANSLATE :
+    dx = geo.trans[0]*t;
+    dy = geo.trans[1]*t;
+    dz = geo.trans[2]*t;
     x+=dx;y+=dy;z+=dz;
-  }
-  else{
-    double angle = geo.angle;
+    break;
+  case ROTATE :
+    angle = geo.angle;
+    geo.angle = geo.angle*t;
+    ProtudeXYZ(x,y,z,this);
+    geo.angle = angle;
+    break;
+  case TRANSLATE_ROTATE :
+    angle = geo.angle;
     geo.angle = geo.angle*t;
     ProtudeXYZ(x,y,z,this);
     geo.angle = angle;
+    dx = geo.trans[0]*t;
+    dy = geo.trans[1]*t;
+    dz = geo.trans[2]*t;
+    x+=dx;y+=dy;z+=dz;
+    break;
+  default :
+    Msg(GERROR, "Unknown extrusion type");
+    break;
   }
 }
 
diff --git a/Geo/ExtrudeParams.h b/Geo/ExtrudeParams.h
index dded11b0ec9b38e9c70c077da60d0dcbb9d260e1..d9ada870e9976a435556736a7f7f2679300a2f0c 100644
--- a/Geo/ExtrudeParams.h
+++ b/Geo/ExtrudeParams.h
@@ -1,18 +1,26 @@
 #ifndef _EXTRUDE_PARAMS_H_
 #define _EXTRUDE_PARAMS_H_
 
+//geo.Mode
 #define EXTRUDED_ENTITY 1
 #define COPIED_ENTITY 2
 
-class ExtrudeParams{
+//geo.Type
+#define TRANSLATE 1
+#define ROTATE 2
+#define TRANSLATE_ROTATE 3
 
+class ExtrudeParams{
+  
 public :
   ExtrudeParams(int Mode = EXTRUDED_ENTITY);
-  void fill (int ep,double A, double B, double C,
-             double X, double Y, double Z, double angle);
-  void Extrude (  int iLayer, int iElemLayer,
-                  double &dx, double &dy, double &dz);
-  void Extrude (double t, double &x, double &y, double &z);
+  void fill(int type,
+	    double T0, double T1, double T2,
+	    double A0, double A1, double A2,
+	    double X0, double X1, double X2, double angle);
+  void Extrude(int iLayer, int iElemLayer,
+	       double &dx, double &dy, double &dz);
+  void Extrude(double t, double &x, double &y, double &z);
   void Rotate(double matr[3][3]);
   struct{
     bool    ExtrudeMesh;
@@ -26,11 +34,10 @@ public :
     int Mode;
     int Type;
     int Source;
-    double axe[3];
-    double pt[3];
-    double angle;
+    double trans[3];
+    double axe[3], pt[3], angle;
   }geo;
-
+  
 };
 
 #endif
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index 0dc9fd437c2720c49ada7440a559a6d138f47166..c49877a86303d3d9034ee756d643d0d8f9f2c45e 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -177,7 +177,7 @@
 #line 1 "Gmsh.y"
  
 
-// $Id: Gmsh.tab.cpp,v 1.122 2001-11-07 09:30:26 geuzaine Exp $
+// $Id: Gmsh.tab.cpp,v 1.123 2001-11-12 08:21:17 geuzaine Exp $
 
 #include <stdarg.h>
 #ifndef _NOPLUGIN
@@ -264,11 +264,11 @@ typedef union {
 
 
 
-#define	YYFINAL		1668
+#define	YYFINAL		1697
 #define	YYFLAG		-32768
 #define	YYNTBASE	190
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 425 ? yytranslate[x] : 281)
+#define YYTRANSLATE(x) ((unsigned)(x) <= 425 ? yytranslate[x] : 283)
 
 static const short yytranslate[] = {     0,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -340,22 +340,23 @@ static const short yyprhs[] = {     0,
   1416,  1425,  1431,  1440,  1448,  1457,  1463,  1475,  1481,  1491,
   1493,  1495,  1497,  1498,  1501,  1506,  1511,  1518,  1522,  1526,
   1530,  1538,  1541,  1544,  1551,  1560,  1569,  1580,  1582,  1585,
-  1587,  1591,  1596,  1598,  1607,  1620,  1629,  1642,  1643,  1656,
-  1657,  1674,  1683,  1696,  1697,  1710,  1711,  1728,  1730,  1733,
-  1743,  1751,  1754,  1761,  1771,  1781,  1790,  1799,  1808,  1815,
-  1820,  1823,  1826,  1828,  1830,  1832,  1834,  1836,  1838,  1842,
-  1845,  1848,  1851,  1855,  1859,  1863,  1867,  1871,  1875,  1879,
-  1883,  1887,  1891,  1895,  1899,  1903,  1907,  1913,  1918,  1923,
-  1928,  1933,  1938,  1943,  1948,  1953,  1958,  1963,  1970,  1975,
-  1980,  1985,  1990,  1995,  2000,  2007,  2014,  2021,  2026,  2031,
-  2036,  2041,  2046,  2051,  2056,  2061,  2066,  2071,  2076,  2083,
-  2088,  2093,  2098,  2103,  2108,  2113,  2120,  2127,  2134,  2139,
-  2141,  2143,  2145,  2147,  2149,  2154,  2157,  2163,  2167,  2174,
-  2179,  2187,  2189,  2192,  2195,  2199,  2203,  2215,  2225,  2233,
-  2241,  2242,  2246,  2248,  2252,  2253,  2257,  2261,  2263,  2267,
-  2269,  2271,  2275,  2280,  2284,  2290,  2294,  2299,  2306,  2314,
-  2316,  2318,  2322,  2326,  2336,  2344,  2346,  2352,  2356,  2363,
-  2365,  2369,  2371,  2378,  2383,  2388,  2395,  2402
+  1587,  1591,  1596,  1598,  1607,  1620,  1635,  1644,  1657,  1672,
+  1673,  1686,  1687,  1704,  1705,  1724,  1733,  1746,  1761,  1762,
+  1775,  1776,  1793,  1794,  1813,  1815,  1818,  1828,  1836,  1839,
+  1846,  1856,  1866,  1875,  1884,  1893,  1900,  1905,  1908,  1911,
+  1913,  1915,  1917,  1919,  1921,  1923,  1927,  1930,  1933,  1936,
+  1940,  1944,  1948,  1952,  1956,  1960,  1964,  1968,  1972,  1976,
+  1980,  1984,  1988,  1992,  1998,  2003,  2008,  2013,  2018,  2023,
+  2028,  2033,  2038,  2043,  2048,  2055,  2060,  2065,  2070,  2075,
+  2080,  2085,  2092,  2099,  2106,  2111,  2116,  2121,  2126,  2131,
+  2136,  2141,  2146,  2151,  2156,  2161,  2168,  2173,  2178,  2183,
+  2188,  2193,  2198,  2205,  2212,  2219,  2224,  2226,  2228,  2230,
+  2232,  2234,  2239,  2242,  2248,  2252,  2259,  2264,  2272,  2274,
+  2277,  2280,  2284,  2288,  2300,  2310,  2318,  2326,  2327,  2331,
+  2333,  2337,  2338,  2342,  2346,  2348,  2352,  2354,  2356,  2360,
+  2365,  2369,  2375,  2379,  2384,  2391,  2399,  2401,  2403,  2407,
+  2411,  2421,  2429,  2431,  2437,  2441,  2448,  2450,  2454,  2456,
+  2463,  2468,  2473,  2480,  2487
 };
 
 static const short yyrhs[] = {   193,
@@ -365,242 +366,250 @@ static const short yyrhs[] = {   193,
    150,   191,   191,   191,   155,   156,     0,   149,     0,     0,
    193,   194,     0,   195,     0,   197,     0,   196,     0,   122,
      6,     0,   123,     6,     0,   125,     6,     0,   124,     6,
-     0,   126,     6,     0,   127,   182,   270,   187,     5,   183,
-     6,     0,   128,   182,   270,   183,     6,     0,   129,   182,
-     5,   187,     5,   187,   270,   187,   270,   187,     5,   187,
+     0,   126,     6,     0,   127,   182,   272,   187,     5,   183,
+     6,     0,   128,   182,   272,   183,     6,     0,   129,   182,
+     5,   187,     5,   187,   272,   187,   272,   187,     5,   187,
      5,   187,     5,   183,     6,     0,     3,     7,   106,   182,
-     5,   187,   268,   183,     6,     0,     3,     7,   105,   182,
-     5,   187,   266,   187,   274,   187,   265,   187,   265,   187,
-   265,   187,   274,   187,   274,   187,   265,   183,     6,     0,
-     3,     7,   104,   182,     5,   187,   266,   187,   266,   187,
-   272,   187,   265,   187,   265,   187,   265,   187,   265,   187,
-   274,   187,   274,   187,   274,   187,   274,   187,   265,   183,
+     5,   187,   270,   183,     6,     0,     3,     7,   105,   182,
+     5,   187,   268,   187,   276,   187,   267,   187,   267,   187,
+   267,   187,   276,   187,   276,   187,   267,   183,     6,     0,
+     3,     7,   104,   182,     5,   187,   268,   187,   268,   187,
+   274,   187,   267,   187,   267,   187,   267,   187,   267,   187,
+   276,   187,   276,   187,   276,   187,   276,   187,   267,   183,
      6,     0,     3,     7,   112,   182,     5,   187,     3,   187,
-     3,   187,     3,   187,   265,   183,     6,     0,     3,     7,
-   116,   182,     5,   187,     3,   187,   265,   183,     6,     0,
-     3,     7,   133,   182,     5,   187,     3,   187,   265,   183,
+     3,   187,     3,   187,   267,   183,     6,     0,     3,     7,
+   116,   182,     5,   187,     3,   187,   267,   183,     6,     0,
+     3,     7,   133,   182,     5,   187,     3,   187,   267,   183,
      6,     0,     3,     7,   114,   182,     5,   187,   173,   187,
-   173,   187,   266,   187,   265,   183,     6,     0,     3,     7,
-   117,   182,     5,   187,   274,   183,     6,     0,     3,     7,
-   118,   182,     5,   187,   274,   187,     3,   187,   265,   183,
+   173,   187,   268,   187,   267,   183,     6,     0,     3,     7,
+   117,   182,     5,   187,   276,   183,     6,     0,     3,     7,
+   118,   182,     5,   187,   276,   187,     3,   187,   267,   183,
      6,     0,     3,     7,   113,   182,     5,   187,     3,   183,
      6,     0,     3,     7,   119,   182,     5,   187,     3,   187,
-   266,   183,     6,     0,     3,     7,   121,   182,     5,   187,
+   268,   183,     6,     0,     3,     7,   121,   182,     5,   187,
      3,   187,     3,   187,     3,   183,     6,     0,     3,     7,
-   120,   182,     5,   187,   268,   183,     6,     0,     3,     7,
+   120,   182,     5,   187,   270,   183,     6,     0,     3,     7,
    115,   182,     5,   187,     3,   183,     6,     0,     3,     7,
     41,   182,     5,   187,     3,   187,     3,   183,     6,     0,
-     3,     7,   131,   182,     5,   187,   274,   183,     6,     0,
-     3,     7,   132,   182,     5,   187,   274,   187,     3,   183,
+     3,     7,   131,   182,     5,   187,   276,   183,     6,     0,
+     3,     7,   132,   182,     5,   187,   276,   187,     3,   183,
      6,     0,     3,     7,   130,   182,     5,   187,     3,   183,
      6,     0,     3,     7,   134,   182,     5,   187,     3,   187,
-   266,   183,     6,     0,     3,     7,   135,   182,     5,   187,
-     3,   187,   266,   187,   266,   183,     6,     0,     3,     7,
-   142,   182,     5,   187,     3,   187,   266,   187,   266,   183,
+   268,   183,     6,     0,     3,     7,   135,   182,     5,   187,
+     3,   187,   268,   187,   268,   183,     6,     0,     3,     7,
+   142,   182,     5,   187,     3,   187,   268,   187,   268,   183,
      6,     0,     3,     7,   136,   182,     5,   187,     3,   187,
-   266,   183,     6,     0,     3,     7,   146,   182,     5,   187,
-     3,   187,   266,   187,   266,   183,     6,     0,     3,     7,
-   137,   182,     5,   187,     3,   187,   274,   187,   274,   187,
-   265,   187,   265,   183,     6,     0,     3,     7,   138,   182,
-     5,   187,   274,   183,     6,     0,     3,     7,   139,   182,
-   140,   187,   265,   187,     3,   183,     6,     0,     3,     7,
-   141,   182,     5,   187,   274,   187,   265,   183,     6,     0,
+   268,   183,     6,     0,     3,     7,   146,   182,     5,   187,
+     3,   187,   268,   187,   268,   183,     6,     0,     3,     7,
+   137,   182,     5,   187,     3,   187,   276,   187,   276,   187,
+   267,   187,   267,   183,     6,     0,     3,     7,   138,   182,
+     5,   187,   276,   183,     6,     0,     3,     7,   139,   182,
+   140,   187,   267,   187,     3,   183,     6,     0,     3,     7,
+   141,   182,     5,   187,   276,   187,   267,   183,     6,     0,
      3,     7,   143,   182,     5,   187,     5,   187,     3,   187,
      3,   183,     6,     0,     3,     7,   144,   182,     5,   187,
      5,   187,     3,   183,     6,     0,     3,     7,   145,   182,
      3,   187,     3,   183,     6,     0,     0,   198,   199,     0,
    201,     0,   200,     0,   247,     0,   248,     0,   249,     0,
-   252,     0,   253,     0,   256,     0,   263,     0,   264,     0,
+   252,     0,   253,     0,   256,     0,   265,     0,   266,     0,
    255,     0,   254,     0,    33,   182,     5,   183,     6,     0,
-    33,   182,     5,   187,   276,   183,     6,     0,     4,     5,
-   188,   202,   189,     6,     0,     4,     5,     4,   268,   188,
+    33,   182,     5,   187,   278,   183,     6,     0,     4,     5,
+   188,   202,   189,     6,     0,     4,     5,     4,   270,   188,
    202,   189,     6,     0,     0,   202,   204,     0,   202,   207,
      0,   202,   210,     0,   202,   213,     0,   202,   216,     0,
    202,   219,     0,   202,   222,     0,   202,   225,     0,   202,
    228,     0,   202,   231,     0,   202,   234,     0,   202,   237,
-     0,   202,   240,     0,   202,   243,     0,   266,     0,   203,
-   187,   266,     0,     0,    80,   182,   266,   187,   266,   187,
-   266,   183,   205,   188,   203,   189,     6,     0,   266,     0,
-   206,   187,   266,     0,     0,    81,   182,   266,   187,   266,
-   187,   266,   183,   208,   188,   206,   189,     6,     0,   266,
-     0,   209,   187,   266,     0,     0,    82,   182,   266,   187,
-   266,   187,   266,   183,   211,   188,   209,   189,     6,     0,
-   266,     0,   212,   187,   266,     0,     0,    77,   182,   266,
-   187,   266,   187,   266,   187,   266,   187,   266,   187,   266,
-   183,   214,   188,   212,   189,     6,     0,   266,     0,   215,
-   187,   266,     0,     0,    78,   182,   266,   187,   266,   187,
-   266,   187,   266,   187,   266,   187,   266,   183,   217,   188,
-   215,   189,     6,     0,   266,     0,   218,   187,   266,     0,
-     0,    79,   182,   266,   187,   266,   187,   266,   187,   266,
-   187,   266,   187,   266,   183,   220,   188,   218,   189,     6,
-     0,   266,     0,   221,   187,   266,     0,     0,    74,   182,
-   266,   187,   266,   187,   266,   187,   266,   187,   266,   187,
-   266,   187,   266,   187,   266,   187,   266,   183,   223,   188,
-   221,   189,     6,     0,   266,     0,   224,   187,   266,     0,
-     0,    75,   182,   266,   187,   266,   187,   266,   187,   266,
-   187,   266,   187,   266,   187,   266,   187,   266,   187,   266,
-   183,   226,   188,   224,   189,     6,     0,   266,     0,   227,
-   187,   266,     0,     0,    76,   182,   266,   187,   266,   187,
-   266,   187,   266,   187,   266,   187,   266,   187,   266,   187,
-   266,   187,   266,   183,   229,   188,   227,   189,     6,     0,
-   266,     0,   230,   187,   266,     0,     0,    71,   182,   266,
-   187,   266,   187,   266,   187,   266,   187,   266,   187,   266,
-   187,   266,   187,   266,   187,   266,   187,   266,   187,   266,
-   187,   266,   183,   232,   188,   230,   189,     6,     0,   266,
-     0,   233,   187,   266,     0,     0,    72,   182,   266,   187,
-   266,   187,   266,   187,   266,   187,   266,   187,   266,   187,
-   266,   187,   266,   187,   266,   187,   266,   187,   266,   187,
-   266,   183,   235,   188,   233,   189,     6,     0,   266,     0,
-   236,   187,   266,     0,     0,    73,   182,   266,   187,   266,
-   187,   266,   187,   266,   187,   266,   187,   266,   187,   266,
-   187,   266,   187,   266,   187,   266,   187,   266,   187,   266,
-   183,   238,   188,   236,   189,     6,     0,   280,     0,   239,
-   187,   280,     0,     0,    83,   182,   266,   187,   266,   187,
-   266,   183,   241,   188,   239,   189,     6,     0,   280,     0,
-   242,   187,   280,     0,     0,    84,   182,   266,   187,   266,
-   187,   266,   187,   266,   183,   244,   188,   242,   189,     6,
+     0,   202,   240,     0,   202,   243,     0,   268,     0,   203,
+   187,   268,     0,     0,    80,   182,   268,   187,   268,   187,
+   268,   183,   205,   188,   203,   189,     6,     0,   268,     0,
+   206,   187,   268,     0,     0,    81,   182,   268,   187,   268,
+   187,   268,   183,   208,   188,   206,   189,     6,     0,   268,
+     0,   209,   187,   268,     0,     0,    82,   182,   268,   187,
+   268,   187,   268,   183,   211,   188,   209,   189,     6,     0,
+   268,     0,   212,   187,   268,     0,     0,    77,   182,   268,
+   187,   268,   187,   268,   187,   268,   187,   268,   187,   268,
+   183,   214,   188,   212,   189,     6,     0,   268,     0,   215,
+   187,   268,     0,     0,    78,   182,   268,   187,   268,   187,
+   268,   187,   268,   187,   268,   187,   268,   183,   217,   188,
+   215,   189,     6,     0,   268,     0,   218,   187,   268,     0,
+     0,    79,   182,   268,   187,   268,   187,   268,   187,   268,
+   187,   268,   187,   268,   183,   220,   188,   218,   189,     6,
+     0,   268,     0,   221,   187,   268,     0,     0,    74,   182,
+   268,   187,   268,   187,   268,   187,   268,   187,   268,   187,
+   268,   187,   268,   187,   268,   187,   268,   183,   223,   188,
+   221,   189,     6,     0,   268,     0,   224,   187,   268,     0,
+     0,    75,   182,   268,   187,   268,   187,   268,   187,   268,
+   187,   268,   187,   268,   187,   268,   187,   268,   187,   268,
+   183,   226,   188,   224,   189,     6,     0,   268,     0,   227,
+   187,   268,     0,     0,    76,   182,   268,   187,   268,   187,
+   268,   187,   268,   187,   268,   187,   268,   187,   268,   187,
+   268,   187,   268,   183,   229,   188,   227,   189,     6,     0,
+   268,     0,   230,   187,   268,     0,     0,    71,   182,   268,
+   187,   268,   187,   268,   187,   268,   187,   268,   187,   268,
+   187,   268,   187,   268,   187,   268,   187,   268,   187,   268,
+   187,   268,   183,   232,   188,   230,   189,     6,     0,   268,
+     0,   233,   187,   268,     0,     0,    72,   182,   268,   187,
+   268,   187,   268,   187,   268,   187,   268,   187,   268,   187,
+   268,   187,   268,   187,   268,   187,   268,   187,   268,   187,
+   268,   183,   235,   188,   233,   189,     6,     0,   268,     0,
+   236,   187,   268,     0,     0,    73,   182,   268,   187,   268,
+   187,   268,   187,   268,   187,   268,   187,   268,   187,   268,
+   187,   268,   187,   268,   187,   268,   187,   268,   187,   268,
+   183,   238,   188,   236,   189,     6,     0,   282,     0,   239,
+   187,   282,     0,     0,    83,   182,   268,   187,   268,   187,
+   268,   183,   241,   188,   239,   189,     6,     0,   282,     0,
+   242,   187,   282,     0,     0,    84,   182,   268,   187,   268,
+   187,   268,   187,   268,   183,   244,   188,   242,   189,     6,
      0,     7,     0,   157,     0,   158,     0,   159,     0,   160,
-     0,   178,     0,   179,     0,     4,   245,   266,     6,     0,
-     4,   184,   266,   185,   245,   266,     6,     0,     4,   184,
-   188,   276,   189,   185,   245,   274,     6,     0,     4,   184,
-   185,     7,   274,     6,     0,     4,   246,     6,     0,     4,
-   184,   266,   185,   246,     6,     0,     4,   186,     4,     7,
-   280,     6,     0,     4,   184,   266,   185,   186,     4,     7,
-   280,     6,     0,     4,   186,     4,   245,   266,     6,     0,
-     4,   184,   266,   185,   186,     4,   245,   266,     6,     0,
-     4,   186,     4,   246,     6,     0,     4,   184,   266,   185,
+     0,   178,     0,   179,     0,     4,   245,   268,     6,     0,
+     4,   184,   268,   185,   245,   268,     6,     0,     4,   184,
+   188,   278,   189,   185,   245,   276,     6,     0,     4,   184,
+   185,     7,   276,     6,     0,     4,   246,     6,     0,     4,
+   184,   268,   185,   246,     6,     0,     4,   186,     4,     7,
+   282,     6,     0,     4,   184,   268,   185,   186,     4,     7,
+   282,     6,     0,     4,   186,     4,   245,   268,     6,     0,
+     4,   184,   268,   185,   186,     4,   245,   268,     6,     0,
+     4,   186,     4,   246,     6,     0,     4,   184,   268,   185,
    186,     4,   246,     6,     0,     4,   186,    92,   186,     4,
-     7,   277,     6,     0,     4,   184,   266,   185,   186,    92,
-   186,     4,     7,   277,     6,     0,     4,   186,    93,     7,
-   278,     6,     0,     4,   184,   266,   185,   186,    93,     7,
-   278,     6,     0,    57,   182,     4,   183,   186,     4,     7,
-   266,     6,     0,    57,   182,     4,   183,   186,     4,     7,
-   280,     6,     0,    38,   182,   266,   183,     7,   268,     6,
-     0,    53,    38,   182,   266,   183,     7,   274,     6,     0,
-    69,    38,   274,     7,   188,   266,   187,   266,   187,   266,
-   189,     6,     0,    45,    46,   274,     7,   266,     6,     0,
-    38,   188,   266,   189,     6,     0,    41,   182,   266,   183,
-     7,   274,     6,     0,    43,   182,   266,   183,     7,   274,
-     6,     0,    69,    41,   274,     7,   188,   266,   187,   266,
-   187,   266,   189,     6,     0,    39,   182,   266,   183,     7,
-   274,     6,     0,    40,   182,   266,   183,     7,   274,     6,
-     0,    39,   182,   266,   183,     7,   274,    49,   268,     6,
-     0,    47,   182,   266,   183,     7,   188,   266,   187,   266,
+     7,   279,     6,     0,     4,   184,   268,   185,   186,    92,
+   186,     4,     7,   279,     6,     0,     4,   186,    93,     7,
+   280,     6,     0,     4,   184,   268,   185,   186,    93,     7,
+   280,     6,     0,    57,   182,     4,   183,   186,     4,     7,
+   268,     6,     0,    57,   182,     4,   183,   186,     4,     7,
+   282,     6,     0,    38,   182,   268,   183,     7,   270,     6,
+     0,    53,    38,   182,   268,   183,     7,   276,     6,     0,
+    69,    38,   276,     7,   188,   268,   187,   268,   187,   268,
+   189,     6,     0,    45,    46,   276,     7,   268,     6,     0,
+    38,   188,   268,   189,     6,     0,    41,   182,   268,   183,
+     7,   276,     6,     0,    43,   182,   268,   183,     7,   276,
+     6,     0,    69,    41,   276,     7,   188,   268,   187,   268,
+   187,   268,   189,     6,     0,    39,   182,   268,   183,     7,
+   276,     6,     0,    40,   182,   268,   183,     7,   276,     6,
+     0,    39,   182,   268,   183,     7,   276,    49,   270,     6,
+     0,    47,   182,   268,   183,     7,   188,   268,   187,   268,
    187,     5,   187,     5,   187,     5,   189,     6,     0,    53,
-    41,   182,   266,   183,     7,   274,     6,     0,    41,    64,
-   182,   266,   183,     7,   274,     6,     0,    85,   182,   266,
-   183,     7,   274,     6,     0,    86,   182,   266,   183,     7,
-   274,     6,     0,    87,   182,   266,   183,     7,   274,    91,
-   274,    88,   266,     6,     0,    41,   188,   266,   189,     6,
-     0,    49,    42,   182,   266,   183,     7,   274,     6,     0,
-   147,    42,   182,   266,   183,     7,   188,   266,   187,   274,
-   189,     6,     0,    50,    42,   182,   266,   183,     7,   274,
-     6,     0,    87,    42,    89,    90,   182,   266,   183,     7,
-   272,    91,   188,   274,   187,   274,   189,    88,   188,   266,
-   187,   266,   189,     6,     0,    87,    42,   182,   266,   183,
-     7,   272,    91,   188,   274,   187,   274,   189,    88,   188,
-   266,   187,   266,   189,     6,     0,    53,    42,   182,   266,
-   183,     7,   274,     6,     0,    42,    64,   182,   266,   183,
-     7,   274,     6,     0,    42,   188,   266,   189,     6,     0,
-    52,    44,   182,   266,   183,     7,   274,     6,     0,    44,
-   182,   266,   183,     7,   274,     6,     0,    53,    44,   182,
-   266,   183,     7,   274,     6,     0,    59,   268,   188,   250,
-   189,     0,    58,   188,   268,   187,   268,   187,   266,   189,
-   188,   250,   189,     0,    60,   268,   188,   250,   189,     0,
-    61,   188,   268,   187,   266,   189,   188,   250,   189,     0,
+    41,   182,   268,   183,     7,   276,     6,     0,    41,    64,
+   182,   268,   183,     7,   276,     6,     0,    85,   182,   268,
+   183,     7,   276,     6,     0,    86,   182,   268,   183,     7,
+   276,     6,     0,    87,   182,   268,   183,     7,   276,    91,
+   276,    88,   268,     6,     0,    41,   188,   268,   189,     6,
+     0,    49,    42,   182,   268,   183,     7,   276,     6,     0,
+   147,    42,   182,   268,   183,     7,   188,   268,   187,   276,
+   189,     6,     0,    50,    42,   182,   268,   183,     7,   276,
+     6,     0,    87,    42,    89,    90,   182,   268,   183,     7,
+   274,    91,   188,   276,   187,   276,   189,    88,   188,   268,
+   187,   268,   189,     6,     0,    87,    42,   182,   268,   183,
+     7,   274,    91,   188,   276,   187,   276,   189,    88,   188,
+   268,   187,   268,   189,     6,     0,    53,    42,   182,   268,
+   183,     7,   276,     6,     0,    42,    64,   182,   268,   183,
+     7,   276,     6,     0,    42,   188,   268,   189,     6,     0,
+    52,    44,   182,   268,   183,     7,   276,     6,     0,    44,
+   182,   268,   183,     7,   276,     6,     0,    53,    44,   182,
+   268,   183,     7,   276,     6,     0,    59,   270,   188,   250,
+   189,     0,    58,   188,   270,   187,   270,   187,   268,   189,
+   188,   250,   189,     0,    60,   270,   188,   250,   189,     0,
+    61,   188,   270,   187,   268,   189,   188,   250,   189,     0,
    252,     0,   251,     0,   249,     0,     0,   251,   248,     0,
     63,   188,   251,   189,     0,    66,   188,   251,   189,     0,
-    66,     4,   184,   266,   185,     6,     0,    66,   103,     6,
-     0,     4,   280,     6,     0,     4,   266,     6,     0,    57,
+    66,     4,   184,   268,   185,     6,     0,    66,   103,     6,
+     0,     4,   282,     6,     0,     4,   268,     6,     0,    57,
    182,     4,   183,   186,     4,     6,     0,    99,     6,     0,
-    37,     6,     0,    94,   182,   266,     8,   266,   183,     0,
-    94,   182,   266,     8,   266,     8,   266,   183,     0,    94,
-     4,    95,   188,   266,     8,   266,   189,     0,    94,     4,
-    95,   188,   266,     8,   266,     8,   266,   189,     0,    96,
+    37,     6,     0,    94,   182,   268,     8,   268,   183,     0,
+    94,   182,   268,     8,   268,     8,   268,   183,     0,    94,
+     4,    95,   188,   268,     8,   268,   189,     0,    94,     4,
+    95,   188,   268,     8,   268,     8,   268,   189,     0,    96,
      0,   102,     4,     0,   100,     0,   101,     4,     6,     0,
-    97,   182,   266,   183,     0,    98,     0,    62,    38,   188,
-   266,   187,   268,   189,     6,     0,    62,    38,   188,   266,
-   187,   268,   187,   268,   187,   266,   189,     6,     0,    62,
-    41,   188,   266,   187,   268,   189,     6,     0,    62,    41,
-   188,   266,   187,   268,   187,   268,   187,   266,   189,     6,
-     0,     0,    62,    41,   188,   266,   187,   268,   189,   257,
-   188,   261,   189,     6,     0,     0,    62,    41,   188,   266,
-   187,   268,   187,   268,   187,   266,   189,   258,   188,   261,
-   189,     6,     0,    62,    42,   188,   266,   187,   268,   189,
-     6,     0,    62,    42,   188,   266,   187,   268,   187,   268,
-   187,   266,   189,     6,     0,     0,    62,    42,   188,   266,
-   187,   268,   189,   259,   188,   261,   189,     6,     0,     0,
-    62,    42,   188,   266,   187,   268,   187,   268,   187,   266,
-   189,   260,   188,   261,   189,     6,     0,   262,     0,   261,
-   262,     0,    70,   188,   274,   187,   274,   187,   274,   189,
-     6,     0,    70,   188,   274,   187,   274,   189,     6,     0,
-    65,     6,     0,    51,    41,   274,     7,   266,     6,     0,
-    51,    41,   274,     7,   266,    54,    56,   266,     6,     0,
-    51,    41,   274,     7,   266,    54,    55,   266,     6,     0,
-    51,    42,   188,   266,   189,     7,   274,     6,     0,    48,
-    42,   188,   266,   189,     7,   274,     6,     0,    51,    44,
-   188,   266,   189,     7,   274,     6,     0,    65,    42,   274,
-     7,   266,     6,     0,    65,    42,   274,     6,     0,    67,
-     6,     0,    68,     6,     0,   107,     0,   108,     0,   109,
-     0,   110,     0,   111,     0,   267,     0,   182,   266,   183,
-     0,   172,   266,     0,   171,   266,     0,   177,   266,     0,
-   266,   172,   266,     0,   266,   171,   266,     0,   266,   173,
-   266,     0,   266,   174,   266,     0,   266,   175,   266,     0,
-   266,   181,   266,     0,   266,   167,   266,     0,   266,   169,
-   266,     0,   266,   168,   266,     0,   266,   170,   266,     0,
-   266,   164,   266,     0,   266,   165,   266,     0,   266,   163,
-   266,     0,   266,   162,   266,     0,   266,   161,   266,     8,
-   266,     0,    12,   182,   266,   183,     0,    13,   182,   266,
-   183,     0,    14,   182,   266,   183,     0,    15,   182,   266,
-   183,     0,    16,   182,   266,   183,     0,    17,   182,   266,
-   183,     0,    18,   182,   266,   183,     0,    19,   182,   266,
-   183,     0,    20,   182,   266,   183,     0,    22,   182,   266,
-   183,     0,    23,   182,   266,   187,   266,   183,     0,    24,
-   182,   266,   183,     0,    25,   182,   266,   183,     0,    26,
-   182,   266,   183,     0,    27,   182,   266,   183,     0,    28,
-   182,   266,   183,     0,    29,   182,   266,   183,     0,    30,
-   182,   266,   187,   266,   183,     0,    31,   182,   266,   187,
-   266,   183,     0,    32,   182,   266,   187,   266,   183,     0,
-    21,   182,   266,   183,     0,    12,   184,   266,   185,     0,
-    13,   184,   266,   185,     0,    14,   184,   266,   185,     0,
-    15,   184,   266,   185,     0,    16,   184,   266,   185,     0,
-    17,   184,   266,   185,     0,    18,   184,   266,   185,     0,
-    19,   184,   266,   185,     0,    20,   184,   266,   185,     0,
-    22,   184,   266,   185,     0,    23,   184,   266,   187,   266,
-   185,     0,    24,   184,   266,   185,     0,    25,   184,   266,
-   185,     0,    26,   184,   266,   185,     0,    27,   184,   266,
-   185,     0,    28,   184,   266,   185,     0,    29,   184,   266,
-   185,     0,    30,   184,   266,   187,   266,   185,     0,    31,
-   184,   266,   187,   266,   185,     0,    32,   184,   266,   187,
-   266,   185,     0,    21,   184,   266,   185,     0,     3,     0,
-     9,     0,    10,     0,    11,     0,     4,     0,     4,   184,
-   266,   185,     0,     4,   246,     0,     4,   184,   266,   185,
-   246,     0,     4,   186,     4,     0,     4,   184,   266,   185,
-   186,     4,     0,     4,   186,     4,   246,     0,     4,   184,
-   266,   185,   186,     4,   246,     0,   269,     0,   172,   268,
-     0,   171,   268,     0,   268,   172,   268,     0,   268,   171,
-   268,     0,   188,   266,   187,   266,   187,   266,   187,   266,
-   187,   266,   189,     0,   188,   266,   187,   266,   187,   266,
-   187,   266,   189,     0,   188,   266,   187,   266,   187,   266,
-   189,     0,   182,   266,   187,   266,   187,   266,   183,     0,
-     0,   182,   271,   183,     0,     5,     0,   271,   187,     5,
-     0,     0,   188,   273,   189,     0,   182,   273,   183,     0,
-   274,     0,   273,   187,   274,     0,   266,     0,   275,     0,
-   188,   276,   189,     0,   172,   188,   276,   189,     0,   266,
-     8,   266,     0,   266,     8,   266,     8,   266,     0,     4,
-   184,   185,     0,   172,     4,   184,   185,     0,     4,   184,
-   188,   276,   189,   185,     0,   172,     4,   184,   188,   276,
-   189,   185,     0,   266,     0,   275,     0,   276,   187,   266,
-     0,   276,   187,   275,     0,   188,   266,   187,   266,   187,
-   266,   187,   266,   189,     0,   188,   266,   187,   266,   187,
-   266,   189,     0,     4,     0,     4,   186,    92,   186,     4,
-     0,   188,   279,   189,     0,     4,   184,   266,   185,   186,
-    93,     0,   277,     0,   279,   187,   277,     0,     5,     0,
-    35,   182,   280,   187,   280,   183,     0,    36,   182,   280,
-   183,     0,    34,   182,   280,   183,     0,    34,   182,   280,
-   187,   276,   183,     0,    34,   182,     4,   186,     4,   183,
-     0,    34,   182,     4,   184,   266,   185,   186,     4,   183,
-     0
+    97,   182,   268,   183,     0,    98,     0,    62,    38,   188,
+   268,   187,   270,   189,     6,     0,    62,    38,   188,   268,
+   187,   270,   187,   270,   187,   268,   189,     6,     0,    62,
+    38,   188,   268,   187,   270,   187,   270,   187,   270,   187,
+   268,   189,     6,     0,    62,    41,   188,   268,   187,   270,
+   189,     6,     0,    62,    41,   188,   268,   187,   270,   187,
+   270,   187,   268,   189,     6,     0,    62,    41,   188,   268,
+   187,   270,   187,   270,   187,   270,   187,   268,   189,     6,
+     0,     0,    62,    41,   188,   268,   187,   270,   189,   257,
+   188,   263,   189,     6,     0,     0,    62,    41,   188,   268,
+   187,   270,   187,   270,   187,   268,   189,   258,   188,   263,
+   189,     6,     0,     0,    62,    41,   188,   268,   187,   270,
+   187,   270,   187,   270,   187,   268,   189,   259,   188,   263,
+   189,     6,     0,    62,    42,   188,   268,   187,   270,   189,
+     6,     0,    62,    42,   188,   268,   187,   270,   187,   270,
+   187,   268,   189,     6,     0,    62,    42,   188,   268,   187,
+   270,   187,   270,   187,   270,   187,   268,   189,     6,     0,
+     0,    62,    42,   188,   268,   187,   270,   189,   260,   188,
+   263,   189,     6,     0,     0,    62,    42,   188,   268,   187,
+   270,   187,   270,   187,   268,   189,   261,   188,   263,   189,
+     6,     0,     0,    62,    42,   188,   268,   187,   270,   187,
+   270,   187,   270,   187,   268,   189,   262,   188,   263,   189,
+     6,     0,   264,     0,   263,   264,     0,    70,   188,   276,
+   187,   276,   187,   276,   189,     6,     0,    70,   188,   276,
+   187,   276,   189,     6,     0,    65,     6,     0,    51,    41,
+   276,     7,   268,     6,     0,    51,    41,   276,     7,   268,
+    54,    56,   268,     6,     0,    51,    41,   276,     7,   268,
+    54,    55,   268,     6,     0,    51,    42,   188,   268,   189,
+     7,   276,     6,     0,    48,    42,   188,   268,   189,     7,
+   276,     6,     0,    51,    44,   188,   268,   189,     7,   276,
+     6,     0,    65,    42,   276,     7,   268,     6,     0,    65,
+    42,   276,     6,     0,    67,     6,     0,    68,     6,     0,
+   107,     0,   108,     0,   109,     0,   110,     0,   111,     0,
+   269,     0,   182,   268,   183,     0,   172,   268,     0,   171,
+   268,     0,   177,   268,     0,   268,   172,   268,     0,   268,
+   171,   268,     0,   268,   173,   268,     0,   268,   174,   268,
+     0,   268,   175,   268,     0,   268,   181,   268,     0,   268,
+   167,   268,     0,   268,   169,   268,     0,   268,   168,   268,
+     0,   268,   170,   268,     0,   268,   164,   268,     0,   268,
+   165,   268,     0,   268,   163,   268,     0,   268,   162,   268,
+     0,   268,   161,   268,     8,   268,     0,    12,   182,   268,
+   183,     0,    13,   182,   268,   183,     0,    14,   182,   268,
+   183,     0,    15,   182,   268,   183,     0,    16,   182,   268,
+   183,     0,    17,   182,   268,   183,     0,    18,   182,   268,
+   183,     0,    19,   182,   268,   183,     0,    20,   182,   268,
+   183,     0,    22,   182,   268,   183,     0,    23,   182,   268,
+   187,   268,   183,     0,    24,   182,   268,   183,     0,    25,
+   182,   268,   183,     0,    26,   182,   268,   183,     0,    27,
+   182,   268,   183,     0,    28,   182,   268,   183,     0,    29,
+   182,   268,   183,     0,    30,   182,   268,   187,   268,   183,
+     0,    31,   182,   268,   187,   268,   183,     0,    32,   182,
+   268,   187,   268,   183,     0,    21,   182,   268,   183,     0,
+    12,   184,   268,   185,     0,    13,   184,   268,   185,     0,
+    14,   184,   268,   185,     0,    15,   184,   268,   185,     0,
+    16,   184,   268,   185,     0,    17,   184,   268,   185,     0,
+    18,   184,   268,   185,     0,    19,   184,   268,   185,     0,
+    20,   184,   268,   185,     0,    22,   184,   268,   185,     0,
+    23,   184,   268,   187,   268,   185,     0,    24,   184,   268,
+   185,     0,    25,   184,   268,   185,     0,    26,   184,   268,
+   185,     0,    27,   184,   268,   185,     0,    28,   184,   268,
+   185,     0,    29,   184,   268,   185,     0,    30,   184,   268,
+   187,   268,   185,     0,    31,   184,   268,   187,   268,   185,
+     0,    32,   184,   268,   187,   268,   185,     0,    21,   184,
+   268,   185,     0,     3,     0,     9,     0,    10,     0,    11,
+     0,     4,     0,     4,   184,   268,   185,     0,     4,   246,
+     0,     4,   184,   268,   185,   246,     0,     4,   186,     4,
+     0,     4,   184,   268,   185,   186,     4,     0,     4,   186,
+     4,   246,     0,     4,   184,   268,   185,   186,     4,   246,
+     0,   271,     0,   172,   270,     0,   171,   270,     0,   270,
+   172,   270,     0,   270,   171,   270,     0,   188,   268,   187,
+   268,   187,   268,   187,   268,   187,   268,   189,     0,   188,
+   268,   187,   268,   187,   268,   187,   268,   189,     0,   188,
+   268,   187,   268,   187,   268,   189,     0,   182,   268,   187,
+   268,   187,   268,   183,     0,     0,   182,   273,   183,     0,
+     5,     0,   273,   187,     5,     0,     0,   188,   275,   189,
+     0,   182,   275,   183,     0,   276,     0,   275,   187,   276,
+     0,   268,     0,   277,     0,   188,   278,   189,     0,   172,
+   188,   278,   189,     0,   268,     8,   268,     0,   268,     8,
+   268,     8,   268,     0,     4,   184,   185,     0,   172,     4,
+   184,   185,     0,     4,   184,   188,   278,   189,   185,     0,
+   172,     4,   184,   188,   278,   189,   185,     0,   268,     0,
+   277,     0,   278,   187,   268,     0,   278,   187,   277,     0,
+   188,   268,   187,   268,   187,   268,   187,   268,   189,     0,
+   188,   268,   187,   268,   187,   268,   189,     0,     4,     0,
+     4,   186,    92,   186,     4,     0,   188,   281,   189,     0,
+     4,   184,   268,   185,   186,    93,     0,   279,     0,   281,
+   187,   279,     0,     5,     0,    35,   182,   282,   187,   282,
+   183,     0,    36,   182,   282,   183,     0,    34,   182,   282,
+   183,     0,    34,   182,   282,   187,   278,   183,     0,    34,
+   182,     4,   186,     4,   183,     0,    34,   182,     4,   184,
+   268,   185,   186,     4,   183,     0
 };
 
 #endif
@@ -629,22 +638,23 @@ static const short yyrline[] = { 0,
   1396,  1402,  1414,  1420,  1426,  1438,  1444,  1449,  1454,  1461,
   1463,  1464,  1467,  1472,  1483,  1501,  1509,  1514,  1525,  1593,
   1613,  1620,  1624,  1644,  1657,  1668,  1690,  1712,  1733,  1739,
-  1744,  1749,  1753,  1763,  1770,  1779,  1783,  1787,  1792,  1796,
-  1801,  1808,  1812,  1816,  1821,  1826,  1832,  1839,  1843,  1848,
-  1875,  1899,  1909,  1928,  1946,  1964,  1986,  2007,  2028,  2042,
-  2063,  2068,  2079,  2081,  2082,  2083,  2084,  2087,  2089,  2090,
-  2091,  2092,  2093,  2094,  2095,  2096,  2103,  2104,  2105,  2106,
-  2107,  2108,  2109,  2110,  2111,  2112,  2113,  2114,  2115,  2116,
-  2117,  2118,  2119,  2120,  2121,  2122,  2123,  2124,  2125,  2126,
-  2127,  2128,  2129,  2130,  2131,  2132,  2133,  2134,  2136,  2137,
-  2138,  2139,  2140,  2141,  2142,  2143,  2144,  2145,  2146,  2147,
-  2148,  2149,  2150,  2151,  2152,  2153,  2154,  2155,  2156,  2161,
-  2166,  2167,  2168,  2172,  2183,  2200,  2211,  2230,  2246,  2262,
-  2278,  2295,  2300,  2304,  2308,  2312,  2317,  2322,  2326,  2330,
-  2336,  2340,  2345,  2349,  2354,  2358,  2362,  2368,  2374,  2381,
-  2387,  2391,  2395,  2405,  2412,  2423,  2437,  2453,  2473,  2497,
-  2503,  2507,  2511,  2522,  2527,  2538,  2543,  2561,  2566,  2579,
-  2585,  2591,  2596,  2604,  2617,  2621,  2639,  2653
+  1744,  1749,  1753,  1763,  1772,  1779,  1788,  1793,  1798,  1803,
+  1808,  1813,  1818,  1823,  1828,  1836,  1841,  1846,  1851,  1856,
+  1862,  1868,  1874,  1880,  1888,  1892,  1897,  1924,  1948,  1958,
+  1977,  1995,  2013,  2035,  2056,  2077,  2091,  2112,  2117,  2128,
+  2130,  2131,  2132,  2133,  2136,  2138,  2139,  2140,  2141,  2142,
+  2143,  2144,  2145,  2152,  2153,  2154,  2155,  2156,  2157,  2158,
+  2159,  2160,  2161,  2162,  2163,  2164,  2165,  2166,  2167,  2168,
+  2169,  2170,  2171,  2172,  2173,  2174,  2175,  2176,  2177,  2178,
+  2179,  2180,  2181,  2182,  2183,  2185,  2186,  2187,  2188,  2189,
+  2190,  2191,  2192,  2193,  2194,  2195,  2196,  2197,  2198,  2199,
+  2200,  2201,  2202,  2203,  2204,  2205,  2210,  2215,  2216,  2217,
+  2221,  2232,  2249,  2260,  2279,  2295,  2311,  2327,  2344,  2349,
+  2353,  2357,  2361,  2366,  2371,  2375,  2379,  2385,  2389,  2394,
+  2398,  2403,  2407,  2411,  2417,  2423,  2430,  2436,  2440,  2444,
+  2454,  2461,  2472,  2486,  2502,  2522,  2546,  2552,  2556,  2560,
+  2571,  2576,  2587,  2592,  2610,  2615,  2628,  2634,  2640,  2645,
+  2653,  2666,  2670,  2688,  2702
 };
 #endif
 
@@ -689,11 +699,11 @@ static const char * const yytname[] = {   "$","error","$undefined.","tDOUBLE",
 "VectorTetrahedron","@11","TensorTetrahedronValues","TensorTetrahedron","@12",
 "Text2DValues","Text2D","@13","Text3DValues","Text3D","@14","NumericAffectation",
 "NumericIncrement","Affectation","Shape","Transform","MultipleShape","ListOfShapes",
-"Duplicata","Delete","Command","Loop","Extrude","@15","@16","@17","@18","ExtrudeParameters",
-"ExtrudeParameter","Transfini","Coherence","BoolExpr","FExpr","FExpr_Single",
-"VExpr","VExpr_Single","ListOfStrings","RecursiveListOfStrings","ListOfListOfDouble",
-"RecursiveListOfListOfDouble","ListOfDouble","FExpr_Multi","RecursiveListOfDouble",
-"ColorExpr","ListOfColor","RecursiveListOfColor","StringExpr", NULL
+"Duplicata","Delete","Command","Loop","Extrude","@15","@16","@17","@18","@19",
+"@20","ExtrudeParameters","ExtrudeParameter","Transfini","Coherence","BoolExpr",
+"FExpr","FExpr_Single","VExpr","VExpr_Single","ListOfStrings","RecursiveListOfStrings",
+"ListOfListOfDouble","RecursiveListOfListOfDouble","ListOfDouble","FExpr_Multi",
+"RecursiveListOfDouble","ColorExpr","ListOfColor","RecursiveListOfColor","StringExpr", NULL
 };
 #endif
 
@@ -720,22 +730,23 @@ static const short yyr1[] = {     0,
    248,   248,   248,   248,   248,   249,   249,   249,   249,   250,
    250,   250,   251,   251,   252,   253,   253,   253,   254,   254,
    254,   254,   254,   255,   255,   255,   255,   255,   255,   255,
-   255,   255,   255,   256,   256,   256,   256,   257,   256,   258,
-   256,   256,   256,   259,   256,   260,   256,   261,   261,   262,
-   262,   262,   263,   263,   263,   263,   263,   263,   263,   263,
-   264,   264,   265,   265,   265,   265,   265,   266,   266,   266,
-   266,   266,   266,   266,   266,   266,   266,   266,   266,   266,
-   266,   266,   266,   266,   266,   266,   266,   266,   266,   266,
-   266,   266,   266,   266,   266,   266,   266,   266,   266,   266,
-   266,   266,   266,   266,   266,   266,   266,   266,   266,   266,
-   266,   266,   266,   266,   266,   266,   266,   266,   266,   266,
-   266,   266,   266,   266,   266,   266,   266,   266,   266,   267,
-   267,   267,   267,   267,   267,   267,   267,   267,   267,   267,
-   267,   268,   268,   268,   268,   268,   269,   269,   269,   269,
-   270,   270,   271,   271,   272,   272,   272,   273,   273,   274,
-   274,   274,   274,   275,   275,   275,   275,   275,   275,   276,
-   276,   276,   276,   277,   277,   277,   277,   278,   278,   279,
-   279,   280,   280,   280,   280,   280,   280,   280
+   255,   255,   255,   256,   256,   256,   256,   256,   256,   257,
+   256,   258,   256,   259,   256,   256,   256,   256,   260,   256,
+   261,   256,   262,   256,   263,   263,   264,   264,   264,   265,
+   265,   265,   265,   265,   265,   265,   265,   266,   266,   267,
+   267,   267,   267,   267,   268,   268,   268,   268,   268,   268,
+   268,   268,   268,   268,   268,   268,   268,   268,   268,   268,
+   268,   268,   268,   268,   268,   268,   268,   268,   268,   268,
+   268,   268,   268,   268,   268,   268,   268,   268,   268,   268,
+   268,   268,   268,   268,   268,   268,   268,   268,   268,   268,
+   268,   268,   268,   268,   268,   268,   268,   268,   268,   268,
+   268,   268,   268,   268,   268,   268,   269,   269,   269,   269,
+   269,   269,   269,   269,   269,   269,   269,   269,   270,   270,
+   270,   270,   270,   271,   271,   271,   271,   272,   272,   273,
+   273,   274,   274,   274,   275,   275,   276,   276,   276,   276,
+   277,   277,   277,   277,   277,   277,   278,   278,   278,   278,
+   279,   279,   279,   279,   280,   280,   281,   281,   282,   282,
+   282,   282,   282,   282,   282
 };
 
 static const short yyr2[] = {     0,
@@ -761,22 +772,23 @@ static const short yyr2[] = {     0,
      8,     5,     8,     7,     8,     5,    11,     5,     9,     1,
      1,     1,     0,     2,     4,     4,     6,     3,     3,     3,
      7,     2,     2,     6,     8,     8,    10,     1,     2,     1,
-     3,     4,     1,     8,    12,     8,    12,     0,    12,     0,
-    16,     8,    12,     0,    12,     0,    16,     1,     2,     9,
-     7,     2,     6,     9,     9,     8,     8,     8,     6,     4,
-     2,     2,     1,     1,     1,     1,     1,     1,     3,     2,
-     2,     2,     3,     3,     3,     3,     3,     3,     3,     3,
-     3,     3,     3,     3,     3,     3,     5,     4,     4,     4,
-     4,     4,     4,     4,     4,     4,     4,     6,     4,     4,
-     4,     4,     4,     4,     6,     6,     6,     4,     4,     4,
-     4,     4,     4,     4,     4,     4,     4,     4,     6,     4,
-     4,     4,     4,     4,     4,     6,     6,     6,     4,     1,
-     1,     1,     1,     1,     4,     2,     5,     3,     6,     4,
-     7,     1,     2,     2,     3,     3,    11,     9,     7,     7,
-     0,     3,     1,     3,     0,     3,     3,     1,     3,     1,
-     1,     3,     4,     3,     5,     3,     4,     6,     7,     1,
-     1,     3,     3,     9,     7,     1,     5,     3,     6,     1,
-     3,     1,     6,     4,     4,     6,     6,     9
+     3,     4,     1,     8,    12,    14,     8,    12,    14,     0,
+    12,     0,    16,     0,    18,     8,    12,    14,     0,    12,
+     0,    16,     0,    18,     1,     2,     9,     7,     2,     6,
+     9,     9,     8,     8,     8,     6,     4,     2,     2,     1,
+     1,     1,     1,     1,     1,     3,     2,     2,     2,     3,
+     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+     3,     3,     3,     5,     4,     4,     4,     4,     4,     4,
+     4,     4,     4,     4,     6,     4,     4,     4,     4,     4,
+     4,     6,     6,     6,     4,     4,     4,     4,     4,     4,
+     4,     4,     4,     4,     4,     6,     4,     4,     4,     4,
+     4,     4,     6,     6,     6,     4,     1,     1,     1,     1,
+     1,     4,     2,     5,     3,     6,     4,     7,     1,     2,
+     2,     3,     3,    11,     9,     7,     7,     0,     3,     1,
+     3,     0,     3,     3,     1,     3,     1,     1,     3,     4,
+     3,     5,     3,     4,     6,     7,     1,     1,     3,     3,
+     9,     7,     1,     5,     3,     6,     1,     3,     1,     6,
+     4,     4,     6,     6,     9
 };
 
 static const short yydefact[] = {     0,
@@ -788,869 +800,871 @@ static const short yydefact[] = {     0,
      0,     0,     0,     0,     0,     0,   218,     0,   223,     0,
    220,     0,     0,     0,    54,    56,    55,    57,    58,    59,
     60,    61,    66,    65,    62,    63,    64,     5,     0,     0,
-     0,    15,    16,    18,    17,    19,   341,   341,     0,   320,
-   324,   372,   142,   321,   322,   323,     0,     0,     0,     0,
+     0,    15,    16,    18,    17,    19,   348,   348,     0,   327,
+   331,   379,   142,   328,   329,   330,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    143,   144,   145,   146,     0,     0,     0,   147,   148,     0,
-     0,     0,     0,     0,     0,   258,     0,     0,   213,     0,
+     0,     0,     0,     0,     0,   265,     0,     0,   213,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   332,     0,     0,     0,     0,     0,   203,     0,     0,     0,
-   203,   251,   252,     0,     0,     0,     0,     0,     0,     0,
+   339,     0,     0,     0,     0,     0,   203,     0,     0,     0,
+   203,   258,   259,     0,     0,     0,     0,     0,     0,     0,
      0,     0,   212,     0,   219,     0,     6,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   326,     0,    71,     0,     0,     0,
+     0,     0,     0,     0,   333,     0,    71,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   261,   260,   262,     0,     0,     0,     0,     0,
+     0,     0,   268,   267,   269,     0,     0,     0,     0,     0,
      0,     0,     0,   153,   210,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    209,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   324,     0,     0,   350,     0,   351,     0,
+     0,     0,     0,   331,     0,     0,   357,     0,   358,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   334,   333,     0,     0,     0,     0,   203,
+     0,     0,     0,   341,   340,     0,     0,     0,     0,   203,
    203,     0,     0,     0,     0,     0,     0,     0,   208,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    221,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   343,     0,     0,     0,     0,     0,   328,
+     0,     0,     0,   350,     0,     0,     0,     0,     0,   335,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   372,     0,     0,     0,   259,
-     0,     0,   360,   361,     0,     0,   142,     0,     0,     0,
-     0,   149,     0,   276,   275,   273,   274,   269,   271,   270,
-   272,   264,   263,   265,   266,   267,   268,     0,     0,     0,
+     0,     0,     0,     0,     0,   379,     0,     0,     0,   266,
+     0,     0,   367,   368,     0,     0,   142,     0,     0,     0,
+     0,   149,     0,   283,   282,   280,   281,   276,   278,   277,
+   279,   271,   270,   272,   273,   274,   275,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   324,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   331,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   336,   335,   202,     0,   201,   200,     0,     0,
-     0,     0,     0,   205,   204,   250,     0,     0,   206,     0,
+     0,     0,   343,   342,   202,     0,   201,   200,     0,     0,
+     0,     0,     0,   205,   204,   257,     0,     0,   206,     0,
      0,     0,     0,     0,     0,     0,     0,     0,   222,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   342,     0,     0,    21,     0,   325,   330,    71,     0,
+     0,   349,     0,     0,    21,     0,   332,   337,    71,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,    72,    73,    74,    75,    76,    77,
-    78,    79,    80,    81,    82,    83,    84,    85,   278,   299,
-   279,   300,   280,   301,   281,   302,   282,   303,   283,   304,
-   284,   305,   285,   306,   286,   307,   298,   319,   287,   308,
-     0,     0,   289,   310,   290,   311,   291,   312,   292,   313,
-   293,   314,   294,   315,     0,     0,     0,     0,     0,     0,
-     0,     0,   375,     0,     0,   374,     0,     0,     0,     0,
+    78,    79,    80,    81,    82,    83,    84,    85,   285,   306,
+   286,   307,   287,   308,   288,   309,   289,   310,   290,   311,
+   291,   312,   292,   313,   293,   314,   305,   326,   294,   315,
+     0,     0,   296,   317,   297,   318,   298,   319,   299,   320,
+   300,   321,   301,   322,     0,     0,     0,     0,     0,     0,
+     0,     0,   382,     0,     0,   381,     0,     0,     0,     0,
      0,     0,     0,     0,   159,     0,     0,     0,     0,     0,
     67,     0,     0,   171,     0,     0,     0,     0,   184,     0,
-   192,     0,     0,   356,     0,     0,     0,   352,   354,     0,
+   192,     0,     0,   363,     0,     0,     0,   359,   361,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,   196,   198,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   344,     0,   341,     0,   327,
+     0,     0,     0,     0,     0,   351,     0,   348,     0,   334,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,    69,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   152,   362,
-   363,     0,     0,     0,     0,     0,   154,   155,   157,     0,
-     0,   366,     0,   370,     0,   163,   277,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   357,     0,   353,
-     0,   170,     0,     0,     0,     0,   243,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   152,   369,
+   370,     0,     0,     0,     0,     0,   154,   155,   157,     0,
+     0,   373,     0,   377,     0,   163,   284,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   364,     0,   360,
+     0,   170,     0,     0,     0,     0,   250,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   249,   207,     0,     0,     0,     0,     0,
-   345,     0,     0,     0,   214,     0,     0,     0,     0,     0,
+     0,     0,     0,   256,   207,     0,     0,     0,     0,     0,
+   352,     0,     0,     0,   214,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   253,   254,   255,   256,   257,     0,     0,     0,     0,     0,
-     0,     0,    20,     0,   329,     0,     0,     0,     0,     0,
+   260,   261,   262,   263,   264,     0,     0,     0,     0,     0,
+     0,     0,    20,     0,   336,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   288,   309,   295,   316,   296,   317,   297,   318,     0,   377,
-   376,   373,     0,   142,     0,     0,     0,     0,   150,     0,
-     0,     0,     0,     0,   368,    68,   167,   175,     0,   176,
-     0,   172,     0,   173,   194,     0,     0,   355,     0,     0,
+   295,   316,   302,   323,   303,   324,   304,   325,     0,   384,
+   383,   380,     0,   142,     0,     0,     0,     0,   150,     0,
+     0,     0,     0,     0,   375,    68,   167,   175,     0,   176,
+     0,   172,     0,   173,   194,     0,     0,   362,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,   211,     0,     0,     0,     0,   203,     0,     0,     0,
-   228,     0,   234,     0,     0,   181,   182,     0,     0,     0,
+   230,     0,   239,     0,     0,   181,   182,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   341,   331,    70,     0,
+     0,     0,     0,     0,     0,     0,   348,   338,    70,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,   160,     0,     0,
-   161,     0,     0,     0,   371,     0,   180,   191,   358,     0,
-     0,   247,   185,   187,     0,     0,   246,   248,   193,   168,
-   179,   190,   195,     0,     0,     0,   340,     0,   339,     0,
-     0,   224,     0,   226,     0,     0,   232,     0,     0,     0,
-   345,     0,   348,     0,     0,     0,     0,   216,   215,     0,
+   161,     0,     0,     0,   378,     0,   180,   191,   365,     0,
+     0,   254,   185,   187,     0,     0,   253,   255,   193,   168,
+   179,   190,   195,     0,     0,     0,   347,     0,   346,     0,
+     0,   224,     0,   227,     0,     0,   236,     0,     0,     0,
+   352,     0,   355,     0,     0,     0,     0,   216,   215,     0,
      0,     0,     0,     0,    23,     0,    32,     0,    36,     0,
     30,     0,     0,    35,     0,    40,    38,     0,     0,     0,
      0,     0,     0,    47,     0,     0,     0,     0,     0,    52,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,   151,   156,   158,
-     0,   164,     0,     0,     0,   177,   359,     0,   245,   244,
+     0,   164,     0,     0,     0,   177,   366,     0,   252,   251,
    165,   166,   203,     0,   199,     0,     0,     0,     0,     0,
-     0,     0,     0,   347,     0,   346,     0,     0,     0,     0,
-     0,     0,   345,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   354,     0,   353,     0,     0,     0,     0,
+     0,     0,   352,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   378,     0,   369,
-   367,     0,     0,     0,     0,   338,     0,     0,     0,     0,
-     0,   238,     0,     0,     0,     0,     0,   349,     0,     0,
-   217,     0,     0,    37,     0,     0,     0,     0,    27,     0,
-    33,     0,    39,    28,    41,     0,    44,     0,    48,    49,
-     0,     0,    51,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   162,
-     0,     0,   197,     0,     0,   230,   242,     0,     0,   239,
-   236,     0,     0,     0,     0,     0,   183,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   385,     0,   376,
+   374,     0,     0,     0,     0,   345,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   245,     0,     0,     0,
+     0,     0,     0,   356,     0,     0,   217,     0,     0,    37,
+     0,     0,     0,     0,    27,     0,    33,     0,    39,    28,
+    41,     0,    44,     0,    48,    49,     0,     0,    51,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   162,     0,     0,   197,     0,
+     0,     0,     0,   232,     0,   249,     0,     0,   246,   241,
+     0,     0,     0,     0,     0,     0,   183,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    88,    92,    96,   136,     0,     0,   365,     0,   337,   225,
-   227,     0,     0,   229,   233,     0,   235,   169,   174,     0,
-     0,   186,     0,     0,     0,     0,     0,    31,    34,    42,
-     0,    43,    50,    45,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    88,    92,    96,   136,     0,     0,   372,     0,   344,   225,
+     0,   228,     0,     0,     0,   231,   237,     0,     0,   240,
+   169,   174,     0,     0,   186,     0,     0,     0,     0,     0,
+    31,    34,    42,     0,    43,    50,    45,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   234,     0,     0,   243,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   140,   364,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    26,    29,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,    86,     0,    90,     0,    94,     0,   134,     0,     0,
+     0,     0,   140,   371,     0,   226,     0,   229,     0,     0,
+     0,   238,     0,     0,     0,     0,     0,     0,    26,    29,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,    86,     0,    90,     0,    94,     0,   134,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   231,     0,   241,   237,     0,     0,     0,     0,     0,    46,
-    22,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    87,    89,    91,    93,    95,    97,   135,   137,     0,   138,
-   178,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   100,   104,   108,     0,     0,   240,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   139,   141,     0,     0,     8,     0,     0,
+     0,     0,     0,   233,     0,     0,   248,   242,     0,     0,
+     0,     0,     0,     0,    46,    22,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,    87,    89,    91,    93,    95,
+    97,   135,   137,     0,   138,   178,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   189,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    98,     0,   102,     0,   106,     0,     0,     0,     0,     0,
+   100,   104,   108,     0,     0,   235,   247,   244,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   188,     0,    24,     0,     0,     0,     0,     0,     0,    99,
-   101,   103,   105,   107,   109,     0,     0,     0,     0,   112,
-   116,   120,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   139,   141,     0,     0,     8,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   189,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,    98,
+     0,   102,     0,   106,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   188,
+     0,    24,     0,     0,     0,     0,     0,     0,    99,   101,
+   103,   105,   107,   109,     0,     0,     0,     0,   112,   116,
+   120,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   110,     0,   114,     0,   118,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   111,   113,   115,   117,   119,   121,     0,   124,   128,   132,
-    25,     0,     0,     0,     0,     0,     0,     0,   122,     0,
-   126,     0,   130,     0,     0,     0,     0,     0,     0,   123,
-   125,   127,   129,   131,   133,     0,     0,     0
+   110,     0,   114,     0,   118,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   111,
+   113,   115,   117,   119,   121,     0,   124,   128,   132,    25,
+     0,     0,     0,     0,     0,     0,     0,   122,     0,   126,
+     0,   130,     0,     0,     0,     0,     0,     0,   123,   125,
+   127,   129,   131,   133,     0,     0,     0
 };
 
-static const short yydefgoto[] = {  1666,
+static const short yydefgoto[] = {  1695,
     80,     5,     6,    19,    20,    21,    22,     7,    65,    66,
-    67,   412,  1421,   605,  1365,  1423,   606,  1366,  1425,   607,
-  1367,  1550,   608,  1521,  1552,   609,  1522,  1554,   610,  1523,
-  1611,   611,  1597,  1613,   612,  1598,  1615,   613,  1599,  1648,
-   614,  1642,  1650,   615,  1643,  1652,   616,  1644,  1427,   617,
-  1368,  1489,   618,  1429,   133,   235,    68,   535,   525,   526,
-   527,   528,    72,    73,    74,    75,  1085,  1332,  1088,  1336,
-  1231,  1232,    76,    77,   896,   327,   136,   170,   171,   230,
-   405,   991,  1092,  1093,   329,   465,   814,   679,   815,   137
+    67,   412,  1442,   605,  1378,  1444,   606,  1379,  1446,   607,
+  1380,  1579,   608,  1550,  1581,   609,  1551,  1583,   610,  1552,
+  1640,   611,  1626,  1642,   612,  1627,  1644,   613,  1628,  1677,
+   614,  1671,  1679,   615,  1672,  1681,   616,  1673,  1448,   617,
+  1381,  1514,   618,  1450,   133,   235,    68,   535,   525,   526,
+   527,   528,    72,    73,    74,    75,  1085,  1343,  1419,  1088,
+  1348,  1423,  1236,  1237,    76,    77,   896,   327,   136,   344,
+   171,   230,   405,   991,  1092,  1093,   329,   465,   814,   679,
+   815,   137
 };
 
-static const short yypact[] = {  2081,
-    80,-32768,-32768,   -75,-32768,   285,  2198,-32768,    11,    94,
-   103,   110,   149,   156,   161,   -61,   -10,    -4,-32768,-32768,
--32768,-32768,  1668,     7,   255,   -77,    87,   117,   -17,   -13,
-   145,   154,   302,   171,   317,   348,   357,   226,   329,   115,
-   224,   276,   -30,   -30,   293,   417,   320,   470,     9,   511,
-   523,    90,   323,   360,    -1,    78,-32768,   390,-32768,   574,
--32768,   595,   617,   589,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   640,    11,
-  2221,-32768,-32768,-32768,-32768,-32768,   474,   474,   655,-32768,
-   114,     4,-32768,-32768,-32768,-32768,   -91,   107,   234,   235,
-   262,   265,   305,   318,   319,   322,   327,   331,   338,   339,
-   359,   389,   408,   409,   412,   416,   438,   488,   489,   500,
--32768,-32768,-32768,-32768,  1760,  1760,  1760,-32768,-32768,  1760,
-     8,    40,  1760,   675,   564,-32768,   683,   685,-32768,  1760,
-  1760,  1760,  1760,   514,  1760,  1760,   518,  1760,  1760,  1760,
-  1432,  1760,   513,   530,   535,  1432,   516,   517,   541,   548,
-   565,   593,   598,   773,   -30,   -30,   -30,  1760,  1760,  -100,
--32768,   -82,   -30,   596,   599,   601,-32768,  1432,   602,   777,
--32768,-32768,-32768,  1432,  1432,  1760,  1760,   -43,  1760,   696,
-  1760,  1760,-32768,   786,-32768,   611,-32768,    11,   612,   613,
-   614,   615,   618,   619,   620,   621,   622,   623,   625,   627,
-   629,   630,   631,   635,   636,   637,   638,   639,   641,   645,
-   647,   648,   649,   650,   651,   652,   653,   654,   794,   660,
-   656,   670,  1760,   818,-32768,   -30,-32768,  1760,  1760,  1760,
-  1760,  1760,  1760,  1760,  1760,  1760,  1760,  1760,  1760,  1760,
-  1760,  1760,  1760,  1760,  1760,  1760,  1760,  1760,  1760,  1760,
-  1760,  1760,  1760,  1760,  1760,  1760,  1760,  1760,  1760,  1760,
-  1760,  1760,  1760,  1760,  1760,  1760,  1760,  1760,  1760,    61,
-    79,    79,   657,   657,   657,  1990,   830,  1852,   872,   283,
-   672,   852,   681,-32768,-32768,  1760,  1760,  1760,  1760,  1760,
-  1760,  1760,  1760,  1760,  1760,  1760,  1760,  1760,  1760,  1760,
--32768,   151,  2107,  2302,  5777,  5800,  1760,  5823,  2325,  1760,
-  2348,  5846,  5869,   191,  1633,  1852,   966,   853,-32768,  5892,
-  1760,  1760,  1760,   854,  1760,  1760,  1760,  1760,  1760,  1760,
-  1760,   680,   -11,-32768,-32768,  2716,  2737,   -30,   -30,   342,
-   342,   124,  1760,  1760,  1760,   729,   143,  1760,-32768,  2023,
-   857,   858,  5915,  5938,   776,  1760,  5961,   682,  1808,  5984,
--32768,  1760,   715,   864,   881,   883,   884,   885,   887,   888,
-   889,   895,   905,   906,   908,   909,   911,   912,   914,   916,
-   919,   921,   926,   927,   928,   929,   787,   930,   931,   932,
-   933,   936,   937,-32768,   159,   939,   940,   942,  5152,    21,
-   -37,  1276,  6007,  5177,  6030,  5202,  6053,  5227,  6076,  5252,
-  6099,  5277,  6122,  5302,  6145,  5327,  6168,  5352,  6191,  5377,
-  6214,  5402,  6237,  5427,  2758,  2779,  6260,  5452,  6283,  5477,
-  6306,  5502,  6329,  5527,  6352,  5552,  6375,  5577,  2800,  2821,
-  2842,  2863,  2884,  2905,   249,-32768,   164,   758,   765,-32768,
-  1432,  1935,   966,-32768,   278,   147,    79,  1760,   946,   950,
-    70,-32768,  1823,   363,   494,   256,   256,   223,   223,   223,
-   223,   296,   296,   657,   657,   657,   657,   949,  1852,   952,
-   954,   956,   959,  6398,   960,   963,  6421,   964,   969,   970,
-   536,   205,  1852,   287,  1760,  1760,   971,  2371,  6444,  6467,
-  1760,  2394,  2417,  6490,  6513,  6536,  6559,  6582,   770,   -30,
-  1760,  1760,-32768,-32768,-32768,   769,  2263,-32768,   782,  1760,
-  2926,  2947,  2968,-32768,-32768,-32768,  1760,  5602,-32768,   785,
-   791,   973,   974,   802,  6605,   979,  1760,  1760,-32768,  6628,
-   833,   803,   804,   811,   813,   814,   815,   817,   819,   834,
-   835,   836,   837,   838,   839,   840,   841,   842,   843,   845,
-   862,   863,   865,   867,   869,   871,   873,   875,   876,   877,
-   878,-32768,  1000,   868,-32768,   879,   306,-32768,-32768,   886,
-   893,   917,   918,   923,   924,   925,   968,   972,   975,   976,
-   977,   978,   980,  1061,-32768,-32768,-32768,-32768,-32768,-32768,
+static const short yypact[] = {  2200,
+    33,-32768,-32768,   -92,-32768,    25,  2380,-32768,    14,    62,
+   100,   103,   110,   115,   207,    81,   113,   122,-32768,-32768,
+-32768,-32768,  1806,   129,   313,  -159,   177,   196,   -26,   -31,
+   256,   265,   161,   274,   310,   341,   385,   464,   423,   170,
+   297,   299,   117,   117,   303,   339,   304,   454,     9,   510,
+   511,    39,   322,   338,   -24,     5,-32768,   355,-32768,   517,
+-32768,   541,   563,   526,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   298,    14,
+  2403,-32768,-32768,-32768,-32768,-32768,   457,   457,   605,-32768,
+    80,     7,-32768,-32768,-32768,-32768,   -83,     1,    12,    78,
+   157,   302,   327,   331,   345,   354,   373,   374,   377,   381,
+   382,   403,   404,   407,   425,   429,   432,   458,   461,   462,
+-32768,-32768,-32768,-32768,  1990,  1990,  1990,-32768,-32768,  1990,
+   708,    22,  1990,   645,   409,-32768,   647,   653,-32768,  1990,
+  1990,  1990,  1990,   477,  1990,  1990,   493,  1990,  1990,  1990,
+  1682,  1990,   494,   501,   518,  1682,   516,   519,   531,   534,
+   566,   586,   597,   704,   117,   117,   117,  1990,  1990,   119,
+-32768,   152,   117,   593,   594,   596,-32768,  1682,   502,   780,
+-32768,-32768,-32768,  1682,  1682,  1990,  1990,   -69,  1990,   692,
+  1990,  1990,-32768,   783,-32768,   614,-32768,    14,   625,   627,
+   631,   632,   633,   634,   636,   638,   639,   640,   641,   648,
+   649,   650,   651,   652,   654,   655,   656,   657,   666,   691,
+   693,   694,   695,   700,   701,   702,   706,   707,   807,   642,
+   644,   687,  1990,   831,-32768,   117,-32768,  1990,  1990,  1990,
+  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,
+  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,
+  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,
+  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,    40,
+    36,    36,   705,   705,   705,  2109,   884,  2020,  5239,   315,
+   709,   885,   431,-32768,-32768,  1990,  1990,  1990,  1990,  1990,
+  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,
+-32768,  -134,  5889,   763,  5912,  5935,  1990,  5958,  2045,  1990,
+  2226,  5981,  6004,   114,  1712,  2020,   697,   887,-32768,  6027,
+  1990,  1990,  1990,   895,  1990,  1990,  1990,  1990,  1990,  1990,
+  1990,   732,   198,-32768,-32768,  2803,  2824,   117,   117,   472,
+   472,   201,  1990,  1990,  1990,  2267,   153,  1990,-32768,  2317,
+   911,   912,  6050,  6073,   832,  1990,  6096,   735,  1506,  6119,
+-32768,  1990,   786,   937,   940,   941,   942,   943,   944,   946,
+   948,   949,   953,   955,   958,   959,   960,   961,   962,   963,
+   964,   965,   971,   972,   973,   976,   842,   978,   979,   982,
+   984,   987,   986,-32768,   -59,   990,   991,   993,  5264,    90,
+   165,    13,  6142,  5289,  6165,  5314,  6188,  5339,  6211,  5364,
+  6234,  5389,  6257,  5414,  6280,  5439,  6303,  5464,  6326,  5489,
+  6349,  5514,  6372,  5539,  2845,  2866,  6395,  5564,  6418,  5589,
+  6441,  5614,  6464,  5639,  6487,  5664,  6510,  5689,  2887,  2908,
+  2929,  2950,  2971,  2992,   436,-32768,   138,   809,   817,-32768,
+  1682,  2050,   697,-32768,   428,   264,    36,  1990,   995,   998,
+    10,-32768,  1949,   226,   496,   854,   854,   -39,   -39,   -39,
+   -39,   295,   295,   705,   705,   705,   705,   999,  2020,   997,
+  1000,  1023,  1025,  6533,  1026,  1028,  6556,  1030,  1032,  1033,
+  1341,   311,  2020,   434,  1990,  1990,  1034,  2389,  6579,  6602,
+  1990,  2412,  2435,  6625,  6648,  6671,  6694,  6717,   851,   117,
+  1990,  1990,-32768,-32768,-32768,   853,  1511,-32768,   856,  1990,
+  3013,  3034,  3055,-32768,-32768,-32768,  1990,  5714,-32768,   855,
+   858,  1040,  1041,   867,  6740,  1044,  1990,  1990,-32768,  6763,
+   899,   869,   870,   871,   872,   873,   874,   878,   879,   890,
+   891,   892,   893,   902,   914,   915,   916,   918,   919,   920,
+   921,   924,   930,   947,   950,   952,   954,   966,   967,   969,
+   970,-32768,  1049,   927,-32768,   975,    -7,-32768,-32768,   917,
+   945,   956,   968,   983,   985,   988,   992,   996,  1013,  1014,
+  1015,  1016,  1018,  1122,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-  1760,  1760,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,  1760,  1760,  1760,  1760,  1760,  1760,
-  1760,  1065,-32768,  1852,    79,-32768,  1064,  1852,   903,    55,
-  1760,  1092,  1098,   710,-32768,  1101,   958,    71,  1103,  1760,
--32768,   251,   -30,-32768,  1432,  1432,  1104,  1432,-32768,  1138,
--32768,  1432,  1432,-32768,  1852,  1310,   437,-32768,  1845,   734,
-   965,  1144,  1145,  1149,   414,  1154,  1157,  1158,  1159,  1160,
-  1161,  1162,  1106,   150,  2989,  3010,-32768,-32768,  2440,   -30,
-   -30,   -30,   922,  1166,  1760,  1760,  1432,  1432,  1760,  1167,
-  1432,  1877,   442,  1168,  1023,  1174,  1760,  1760,   -30,  1192,
-  1193,  1024,  1195,  1197,  1432,  1432,  1198,   -30,  1205,  1216,
-  1432,  1432,  1217,  1218,  1219,  1221,  1222,  1432,   386,  1432,
-  1223,  1225,  1226,  1224,  1229,-32768,  1228,   474,  1231,-32768,
-  1838,  1760,  1760,  1760,  1760,  1760,  1760,  1760,  1760,  1760,
-  1760,  1760,  1760,  1760,  1760,-32768,  6651,  5627,  6674,  5652,
-  6697,  5677,  6720,  5702,  5727,  1054,   292,  1055,-32768,   966,
--32768,    45,   294,  1053,  1233,   951,-32768,-32768,-32768,    71,
-  1760,  1056,  1760,-32768,   440,-32768,  2052,  1235,    37,    51,
-  1238,  1432,  1239,  1432,  1240,  1241,   441,-32768,  1852,-32768,
-  1760,-32768,  1760,  1432,  1432,  1432,-32768,   546,  1432,  1432,
-  1432,  1432,  1432,  1432,  1432,   633,  1760,  1760,  1760,  1060,
-  -111,  -108,  -102,-32768,-32768,  3031,  3052,  1243,  1244,  6743,
-   -58,  1163,  1760,  1760,-32768,  1063,    11,  1066,  3073,  3094,
-    23,  1069,  1079,  1085,  1090,  1087,  1093,  1088,  1091,   169,
-  1094,  1097,  1099,  1100,  1111,  1113,  1114,  1117,  1118,  1102,
--32768,-32768,-32768,-32768,-32768,  1119,  1120,  1121,  1122,  1123,
-  1105,  1124,-32768,  1125,    21,  1246,  3115,  3136,  3157,  3178,
-  3199,  3220,  3241,  3262,  3283,  3304,  3325,  3346,  3367,  3388,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1129,-32768,
--32768,-32768,  1432,    79,  1760,  1273,  1279,    70,-32768,  1278,
-  5752,  1194,  3409,    71,-32768,-32768,-32768,-32768,   -30,-32768,
-  1311,-32768,  1312,-32768,-32768,  1131,   457,  2052,  3430,  1338,
-  1339,  1340,  1760,  1760,  1372,  1397,  1398,  1400,  1401,  1403,
-  1404,-32768,  1726,  2463,  6766,  2207,   342,   -30,  1405,   -30,
-  1409,   -30,  1410,  1760,  1760,-32768,-32768,  1411,  1432,  1432,
-  1343,  1432,   193,  6789,  1760,    11,  1426,  1760,  1432,  1425,
-  1435,  1433,  1267,  1460,   386,  1462,  1466,  1760,  1467,  1469,
-  1468,  1477,  1481,   386,  1760,  1760,  1760,  1432,  1479,  1483,
-   386,  1760,  1485,  1486,  1484,  1760,   474,-32768,-32768,  1760,
-  1760,  1760,  1760,  1760,  1760,  1760,  1760,  1760,  1760,  1760,
-  1760,  1760,  1760,  1487,  1488,  1490,  1042,-32768,  1492,  1491,
--32768,  1307,  1314,  1760,-32768,    92,-32768,-32768,-32768,  1316,
-  1760,-32768,-32768,-32768,  1096,  1212,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,  1227,  1496,  1317,-32768,  1760,-32768,  1315,
-   152,-32768,   157,-32768,  1318,   200,-32768,  1319,  3451,  3472,
-   -58,   303,-32768,   460,  1329,  1430,  1760,-32768,-32768,  3493,
-    11,  1336,  3514,  1333,-32768,  1334,-32768,  1335,-32768,  1341,
--32768,  1342,  6812,-32768,  1344,-32768,-32768,  1345,  1347,  6835,
-  3535,  6858,  1348,-32768,  1351,  1360,  3556,  1358,  1364,-32768,
-  3577,  1361,  3598,  3619,  3640,  3661,  3682,  3703,  3724,  3745,
-  3766,  3787,  3808,  3829,  3850,  3871,  1366,-32768,-32768,-32768,
-    71,-32768,  1434,  1519,  3892,-32768,-32768,  3913,-32768,-32768,
--32768,-32768,   342,  2244,-32768,  1760,  1760,     3,  1760,     3,
-  1760,  1760,  1461,-32768,  1432,-32768,  1432,  1760,  2486,  1432,
-  1376,  1545,   -58,   386,  1550,  1760,  1548,   386,  1549,  1553,
-  1551,  1552,  1554,  1760,  1555,  1432,  1556,  1557,  1760,  1564,
-  1562,  1760,  1565,  1760,  1760,  1760,  1760,  1760,  1760,  1760,
-  1760,  1760,  1760,  1760,  1760,  1760,  1760,-32768,  1563,-32768,
--32768,  1760,  1566,  1370,  1760,-32768,  2509,  2532,  1567,  1384,
-   -16,-32768,  2555,   -15,  2578,  2601,  1386,-32768,  1388,  1544,
--32768,  1387,    11,-32768,  1390,  1399,  1402,  3934,-32768,  1407,
--32768,  1408,-32768,-32768,-32768,  6881,-32768,  1406,-32768,-32768,
-  6904,  1416,-32768,  6927,  1414,  3955,  3976,  3997,  4018,  4039,
-  4060,  4081,  4102,  4123,  6950,  6973,  6996,  7019,  4144,-32768,
-  2273,  1418,-32768,  2624,  1578,  1579,-32768,  1432,  1581,-32768,
-  1582,  1586,  1588,  1600,  1432,  1432,-32768,  1601,    11,   386,
-   386,   386,   386,  1602,  1605,  1607,   386,  1609,  1610,  1611,
-  1613,  1760,  1760,  1760,  1760,  1760,  1760,  1760,  1760,  1760,
--32768,-32768,-32768,-32768,  1760,  1760,-32768,  1614,-32768,-32768,
--32768,  1437,  1439,-32768,-32768,  1440,-32768,-32768,-32768,  1442,
-  1438,-32768,    11,  1443,  1445,  1451,  1455,-32768,-32768,-32768,
-  1452,-32768,-32768,-32768,  1453,  4165,  4186,  4207,  4228,  4249,
-  4270,  4291,  4312,  4333,  1478,  1480,  1482,  1513,  7042,  2647,
-  1454,     3,  1432,     3,  1432,  1533,  1517,   386,   386,  1704,
-  1714,   386,  1669,  1760,  1760,  1760,  1760,  1760,  1760,  1760,
-  1760,  1760,  1760,  1760,  1760,    79,-32768,-32768,  1716,   -12,
-   463,    -3,  1534,  1536,    11,  1535,  1539,-32768,-32768,  1576,
-  1584,  4354,  4375,  4396,  4417,  4438,  4459,  4480,  4501,  4522,
-   464,  2052,   487,  2052,   490,  2052,   491,-32768,  1540,  1538,
-  1727,  1432,  1759,  1762,  1644,  1760,    11,   386,  1432,  1787,
-  1789,  1760,  1760,  1760,  1760,  1760,  1760,  1760,  1760,  1760,
-  1760,  1790,  1760,  1791,  1760,  1792,    79,  1793,    79,  1794,
--32768,  1612,-32768,-32768,  1615,  4543,    11,  1619,  1620,-32768,
--32768,  4564,  4585,  4606,  4627,  4648,  4669,  7065,  7088,  7111,
-  2052,-32768,  2052,-32768,  2052,-32768,-32768,-32768,   496,-32768,
--32768,  1796,  1760,  1760,  1653,   386,  1432,  1760,  1760,  1760,
-  1760,  1760,  1760,-32768,-32768,-32768,    79,  1803,-32768,  4690,
-  2670,  1655,  1625,  1626,  4711,  4732,  4753,  4774,  4795,  4816,
-  1629,  1630,  1631,-32768,-32768,  1760,  1814,-32768,  1432,   386,
-  1760,  1760,  1760,  1760,  1760,  1760,  1760,  1760,  1760,  2693,
--32768,  1627,  1639,  4837,  4858,  4879,  4900,  4921,  4942,   499,
-  2052,   510,  2052,   522,  2052,  1818,  1432,  1824,  1760,  1760,
-  1760,  1760,  1760,  1760,  1760,  1826,  1760,  1827,  1760,  1828,
--32768,  1642,-32768,  4963,  4984,  5005,  7134,  7157,  7180,  2052,
--32768,  2052,-32768,  2052,-32768,  1432,  1760,  1760,  1760,-32768,
--32768,-32768,  1648,  5026,  5047,  5068,  1650,  1654,  1656,  1432,
-  1760,  1760,  1760,  1760,  1760,  1760,  1649,  5089,  5110,  5131,
-   533,  2052,   554,  2052,   555,  2052,   386,  1760,  1760,  1760,
-  1760,  1835,  1760,  1837,  1760,  1842,  1666,  7203,  7226,  7249,
-  2052,-32768,  2052,-32768,  2052,-32768,  1851,-32768,-32768,-32768,
--32768,  1663,  1670,  1671,  1760,  1760,  1760,   559,  2052,   576,
-  2052,   577,  2052,  1760,  1854,  1760,  1880,  1760,  1881,  2052,
--32768,  2052,-32768,  2052,-32768,  1888,  1889,-32768
+  1990,  1990,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,  1990,  1990,  1990,  1990,  1990,  1990,
+  1990,  1125,-32768,  2020,    36,-32768,  1124,  2020,   957,    38,
+  1990,  1129,  1130,   602,-32768,  1133,   974,    11,  1139,  1990,
+-32768,   159,   117,-32768,  1682,  1682,  1140,  1682,-32768,  1144,
+-32768,  1682,  1682,-32768,  2020,  1461,   437,-32768,  1964,   682,
+   980,  1145,  1157,  1159,   290,  1162,  1165,  1166,  1168,  1170,
+  1173,  1200,  1127,   231,  3076,  3097,-32768,-32768,  2458,   117,
+   117,   117,   736,  1154,  1990,  1990,  1682,  1682,  1990,  1201,
+  1682,  1979,   379,  1202,  1060,  1208,  1990,  1990,   117,  1209,
+  1210,  1042,  1211,  1213,  1682,  1682,  1214,   117,  1215,  1216,
+  1682,  1682,  1218,  1219,  1220,  1222,  1223,  1682,    30,  1682,
+  1225,  1224,  1230,  1242,  1244,-32768,  1243,   457,  1247,-32768,
+  1185,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,
+  1990,  1990,  1990,  1990,  1990,-32768,  6786,  5739,  6809,  5764,
+  6832,  5789,  6855,  5814,  5839,  1065,   188,  1070,-32768,   697,
+-32768,    17,   343,  1066,  1264,   923,-32768,-32768,-32768,    11,
+  1990,  1087,  1990,-32768,   438,-32768,  7407,  1268,    19,    16,
+  1269,  1682,  1270,  1682,  1271,  1273,   441,-32768,  2020,-32768,
+  1990,-32768,  1990,  1682,  1682,  1682,-32768,   292,  1682,  1682,
+  1682,  1682,  1682,  1682,  1682,   402,  1990,  1990,  1990,  1092,
+  -137,  -108,   -89,-32768,-32768,  3118,  3139,  1275,  1276,  6878,
+    21,  1192,  1990,  1990,-32768,  1097,    14,  1099,  3160,  3181,
+  -125,  1100,  1105,  1102,  1107,  1104,  1109,  1106,  1108,  -105,
+  1110,  1111,  1113,  1121,  1132,  1142,  1143,  1146,  1148,  1115,
+-32768,-32768,-32768,-32768,-32768,  1149,  1150,  1151,  1155,  1160,
+  1126,  1161,-32768,  1188,    90,  1305,  3202,  3223,  3244,  3265,
+  3286,  3307,  3328,  3349,  3370,  3391,  3412,  3433,  3454,  3475,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1163,-32768,
+-32768,-32768,  1682,    36,  1990,  1326,  1336,    10,-32768,  1340,
+  5864,  1284,  3496,    11,-32768,-32768,-32768,-32768,   117,-32768,
+  1383,-32768,  1384,-32768,-32768,  1206,   442,  7407,  3517,  1386,
+  1387,  1388,  1990,  1990,  1389,  1390,  1391,  1392,  1393,  1394,
+  1396,-32768,  1924,  2481,  6901,   630,   472,   117,  1398,   117,
+  1400,   117,  1401,  1990,  1990,-32768,-32768,  1407,  1682,  1682,
+  1334,  1682,   193,  6924,  1990,    14,  1423,  1990,  1682,  1421,
+  1425,  1424,  1258,  1426,    30,  1427,  1431,  1990,  1432,  1434,
+  1433,  1435,  1437,    30,  1990,  1990,  1990,  1682,  1446,  1451,
+    30,  1990,  1453,  1454,  1452,  1990,   457,-32768,-32768,  1990,
+  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,
+  1990,  1990,  1990,  1455,  1456,  1457,   951,-32768,  1459,  1462,
+-32768,  1274,  1283,  1990,-32768,    34,-32768,-32768,-32768,  1309,
+  1990,-32768,-32768,-32768,  1069,  1153,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,  1248,  1489,  1308,-32768,  1990,-32768,  1272,
+   245,-32768,   248,-32768,  1311,   254,-32768,  1312,  3538,  3559,
+    21,   253,-32768,   460,  1313,  1420,  1990,-32768,-32768,  3580,
+    14,  1327,  3601,  1322,-32768,  1324,-32768,  1328,-32768,  1333,
+-32768,  1330,  6947,-32768,  1332,-32768,-32768,  1337,  1338,  6970,
+  3622,  6993,  1335,-32768,  1348,  1352,  3643,  1349,  1363,-32768,
+  3664,  1360,  3685,  3706,  3727,  3748,  3769,  3790,  3811,  3832,
+  3853,  3874,  3895,  3916,  3937,  3958,  1365,-32768,-32768,-32768,
+    11,-32768,  1464,  1520,  3979,-32768,-32768,  4000,-32768,-32768,
+-32768,-32768,   472,  1704,-32768,  1744,  1744,   -38,  1744,   -38,
+  1990,  1990,  1468,-32768,  1682,-32768,  1682,  1990,  2504,  1682,
+  1412,  1566,    21,    30,  1571,  1990,  1570,    30,  1572,  1574,
+  1573,  1575,  1576,  1990,  1577,  1682,  1578,  1579,  1990,  1583,
+  1581,  1990,  1585,  1990,  1990,  1990,  1990,  1990,  1990,  1990,
+  1990,  1990,  1990,  1990,  1990,  1990,  1990,-32768,  1582,-32768,
+-32768,  1990,  1586,  1403,  1990,-32768,  1744,  1744,  1990,  2527,
+   257,  2550,   259,  1593,  1413,   -34,-32768,  2573,   262,   -22,
+  2596,  2619,  1414,-32768,  1416,  1631,-32768,  1411,    14,-32768,
+  1417,  1418,  1419,  4021,-32768,  1430,-32768,  1438,-32768,-32768,
+-32768,  7016,-32768,  1428,-32768,-32768,  7039,  1439,-32768,  7062,
+  1436,  4042,  4063,  4084,  4105,  4126,  4147,  4168,  4189,  4210,
+  7085,  7108,  7131,  7154,  4231,-32768,  2323,  1441,-32768,  2642,
+  2012,  1608,  1990,  1611,  1990,-32768,  1682,  1612,-32768,  1614,
+  1990,  1624,  1628,  1629,  1682,  1682,-32768,  1630,    14,    30,
+    30,    30,    30,  1633,  1634,  1635,    30,  1636,  1638,  1639,
+  1642,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,
+-32768,-32768,-32768,-32768,  1990,  1990,-32768,  1643,-32768,-32768,
+  2665,-32768,  1466,  2688,  1463,-32768,-32768,  1467,  2711,-32768,
+-32768,-32768,  1469,  1470,-32768,    14,  1474,  1476,  1482,  1483,
+-32768,-32768,-32768,  1485,-32768,-32768,-32768,  1496,  4252,  4273,
+  4294,  4315,  4336,  4357,  4378,  4399,  4420,  1500,  1501,  1529,
+  1530,  7177,  2734,  1497,  1651,   -38,  1713,  1682,   -38,  1714,
+  1682,  1657,  1596,    30,    30,  1743,  1745,    30,  1772,  1990,
+  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,
+  1990,    36,-32768,-32768,  1773,-32768,   -11,-32768,  1562,   463,
+    -9,-32768,  1591,  1592,  1594,    14,  1597,  1598,-32768,-32768,
+  1600,  1604,  4441,  4462,  4483,  4504,  4525,  4546,  4567,  4588,
+  4609,   467,  7407,   487,  7407,   491,  7407,   492,-32768,  1601,
+  1599,  1774,   -38,  1682,  1784,  1785,   -38,  1709,  1990,    14,
+    30,  1682,  1801,  1802,  1990,  1990,  1990,  1990,  1990,  1990,
+  1990,  1990,  1990,  1990,  1833,  1990,  1838,  1990,  1839,    36,
+  1840,    36,  1841,-32768,    -8,  1659,-32768,-32768,     3,  1661,
+  4630,    14,  1663,  1664,-32768,-32768,  4651,  4672,  4693,  4714,
+  4735,  4756,  7200,  7223,  7246,  7407,-32768,  7407,-32768,  7407,
+-32768,-32768,-32768,   498,-32768,-32768,  1846,  1849,  1850,  1990,
+  1990,  1703,    30,  1682,  1990,  1990,  1990,  1990,  1990,  1990,
+-32768,-32768,-32768,    36,  1854,-32768,-32768,-32768,  4777,  2757,
+  1705,  1675,  1676,  4798,  4819,  4840,  4861,  4882,  4903,  1692,
+  1693,  1694,-32768,-32768,  1990,  1880,-32768,  1682,    30,  1990,
+  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  2780,-32768,
+  1700,  1707,  4924,  4945,  4966,  4987,  5008,  5029,   503,  7407,
+   504,  7407,   508,  7407,  1882,  1682,  1886,  1990,  1990,  1990,
+  1990,  1990,  1990,  1990,  1889,  1990,  1890,  1990,  1891,-32768,
+  1711,-32768,  5050,  5071,  5092,  7269,  7292,  7315,  7407,-32768,
+  7407,-32768,  7407,-32768,  1682,  1990,  1990,  1990,-32768,-32768,
+-32768,  1715,  5113,  5134,  5155,  1716,  1717,  1718,  1682,  1990,
+  1990,  1990,  1990,  1990,  1990,  1720,  5176,  5197,  5218,   509,
+  7407,   512,  7407,   554,  7407,    30,  1990,  1990,  1990,  1990,
+  1893,  1990,  1895,  1990,  1897,  1725,  7338,  7361,  7384,  7407,
+-32768,  7407,-32768,  7407,-32768,  1903,-32768,-32768,-32768,-32768,
+  1722,  1723,  1724,  1990,  1990,  1990,   557,  7407,   558,  7407,
+   591,  7407,  1990,  1907,  1990,  1908,  1990,  1911,  7407,-32768,
+  7407,-32768,  7407,-32768,  1918,  1919,-32768
 };
 
 static const short yypgoto[] = {-32768,
-     0,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,  1301,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+   -25,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,  1331,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,  -284,   -18,-32768,  1884,  1885,  -335,
-    10,  1886,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
- -1160, -1189,-32768,-32768,  -922,   -23,-32768,   -29,-32768,   -84,
--32768, -1043,   904,   237,  -232,  -319,  -801,   957,-32768,  -279
+-32768,-32768,-32768,-32768,  -284,   -18,-32768,  1915,  1916,  -335,
+   -16,  1917,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768, -1119, -1228,-32768,-32768,  -984,   -23,-32768,   361,
+-32768,   -84,-32768, -1072,   935,   228,  -183,  -319,  -800,  1024,
+-32768,  -279
 };
 
 
-#define	YYLAST		7432
+#define	YYLAST		7588
 
 
 static const short yytable[] = {   135,
-   457,   458,   459,   231,   134,   468,   504,   236,   940,  1234,
-    90,    91,   179,    78,   172,   529,    94,    95,    96,    97,
-    98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-   108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-   188,  1290,   947,   290,  1290,   365,   144,  1173,  1229,  1229,
-   147,    93,  1229,  1230,  1230,   464,   948,  1230,   803,   348,
-   349,  1229,   348,   349,   455,   456,  1230,  1229,   348,   349,
-   348,   349,  1230,   677,   812,   978,     9,   979,   980,   198,
-   981,   190,  1110,   456,   982,     8,   983,   350,   348,   349,
-   238,  1119,   239,   464,   118,   119,   120,  1156,  1126,   949,
-    81,   283,   284,   285,   140,   351,   286,   289,    82,   293,
-   141,   180,   118,   119,   120,    83,   313,   314,   315,   316,
-    87,   318,   319,   989,   321,   322,   323,   184,   330,   990,
-   185,   291,   292,   348,   349,   343,   344,   345,   366,  1245,
-   166,   167,  1055,   352,   346,   347,   804,   805,   536,   537,
-   589,   168,   160,    93,    84,   161,   162,   169,   163,   348,
-   349,    85,   363,   364,   145,   367,    86,   369,   370,   682,
-   146,    88,  1289,  1292,   148,   520,  1431,    89,   125,   126,
-   189,   671,    79,   697,   127,  1434,   356,   673,   138,   130,
-   360,   237,   287,   348,   349,   288,   181,   373,   128,   129,
-  1097,   121,   122,   123,   124,  1000,   411,   348,   349,   409,
-  1290,  1400,  1290,  1402,   413,   414,   415,   416,   417,   418,
+   457,   458,   459,   231,   134,   468,   504,  1299,   190,   940,
+   236,  1299,   179,   677,   812,   529,    78,   188,  1173,   365,
+  1110,   948,   140,    93,   947,   290,  1234,    10,   141,  1119,
+  1234,  1235,   147,   348,   349,  1235,  1126,   144,     8,  1156,
+   456,   803,  1234,   455,   456,   348,   349,  1235,   488,   978,
+  1240,   979,   489,  1234,   198,  1234,  1234,  1000,  1235,     9,
+  1235,  1235,   348,   349,   949,   348,   349,  1234,    81,   118,
+   119,   120,  1235,   118,   119,   120,   184,  1009,   980,   185,
+   981,   348,   349,   590,   591,   592,   593,   594,   595,   596,
+   597,   598,   599,   600,   601,   602,   603,   982,   238,   983,
+   239,   283,   284,   285,   464,    82,   286,   289,    83,   293,
+  1251,   180,   366,   291,   292,    84,   313,   314,   315,   316,
+    85,   318,   319,   582,   321,   322,   323,   583,   330,   804,
+   805,   305,   306,   307,   308,   309,   891,   892,   893,   894,
+   895,   310,   464,  1055,   346,   347,    11,    12,    13,    14,
+    15,    16,    17,    18,  1298,   145,   148,   189,   536,   537,
+   356,   146,   363,   364,   360,   367,  1302,   369,   370,   682,
+   128,   129,   373,   121,   122,   123,   124,  1452,   769,  1456,
+  1517,   671,   240,   697,   241,    79,   191,   673,  1299,   348,
+   349,  1519,  1299,   242,   237,   243,   181,   678,   813,  1252,
+  1097,   604,   989,  1256,   348,   349,   151,   160,   990,   409,
+   161,   162,    86,   163,   413,   414,   415,   416,   417,   418,
    419,   420,   421,   422,   423,   424,   425,   426,   427,   428,
    429,   430,   431,   432,   433,   434,   435,   436,   437,   438,
    439,   440,   441,   442,   443,   444,   445,   446,   447,   448,
-   449,   450,   451,   452,   453,   454,   464,   678,   813,   191,
-   139,  1246,   348,   349,   463,  1250,   156,   157,   142,   158,
-   464,   469,   473,   474,   475,   476,   477,   478,   479,   480,
-   481,   482,   483,   484,   485,   486,   487,    10,   240,   467,
-   241,   128,   129,   494,   348,   349,   497,   233,   143,   234,
-   934,   284,   463,   121,   122,   123,   124,   508,   509,   510,
-   530,   512,   513,   514,   515,   516,   517,   518,   523,   524,
-   348,   349,   348,   349,   128,   129,   149,   348,   349,   531,
-   532,   533,   670,   488,   538,   150,   847,   489,  1166,   348,
-   349,   582,   545,  1167,   797,   583,   663,   151,   550,  1219,
-   664,  1009,   152,   296,   297,   298,   299,   300,   153,   301,
-   302,   303,   304,   305,   306,   307,   308,   309,   128,   129,
-   348,   349,   159,   310,   501,   827,   234,  1344,  1345,  1346,
-  1347,  1098,   128,   129,  1351,   798,  1169,   328,   696,   154,
-   234,   588,   334,   305,   306,   307,   308,   309,   155,    42,
-    43,    44,    45,   310,    47,   164,    11,    12,    13,    14,
-    15,    16,    17,    18,   357,   242,   244,   243,   245,   837,
-   361,   362,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,   464,   661,   818,   662,   801,   310,   668,   284,   121,
-   122,   123,   124,   246,   674,   247,   248,   672,   249,   864,
-   121,   122,   123,   124,   174,  1406,  1407,   175,   176,  1410,
-   128,   129,   464,   165,   668,   463,   669,   838,   307,   308,
-   309,   128,   129,   668,   931,   698,   310,   409,   668,   463,
-   173,   699,   700,   128,   129,  1174,   250,   705,   251,  1175,
-   714,   769,   891,   892,   893,   894,   895,   715,   716,   252,
-   254,   253,   255,   256,   186,   257,   719,   177,   258,   957,
-   259,   178,   260,   723,   261,  1468,   182,   933,   935,   262,
-   264,   263,   265,   732,   733,   298,   299,   300,   183,   301,
-   302,   303,   304,   305,   306,   307,   308,   309,    90,    91,
-   266,   187,   267,   310,    94,    95,    96,    97,    98,    99,
-   100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-   110,   111,   112,   113,   114,   115,   116,   117,   770,   295,
-   268,   192,   269,  1513,   296,   297,   298,   299,   300,   193,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,   270,
-   272,   271,   273,   274,   310,   275,   464,   276,   194,   277,
-   963,   964,   296,   297,   298,   299,   300,  1543,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,   787,   788,   278,
-   195,   279,   310,   668,   865,   830,   944,   668,   945,   956,
-   196,   789,   790,   791,   792,   793,   794,   795,   972,   973,
-   463,  1080,   197,   668,   800,  1060,  1175,   806,  1176,  1432,
-  1451,  1433,  1452,   819,  1046,   229,   817,   299,   300,   232,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,   280,
-   281,   463,   409,  1453,   310,  1454,  1455,  1457,  1456,  1458,
-   294,   282,  1507,   904,  1508,  1565,   472,  1566,   311,   312,
-   851,   852,   853,  1075,  1627,   317,  1567,   667,  1568,   320,
-   331,   856,   857,   335,   336,   860,   125,   126,  1569,   871,
-  1570,   332,   127,   869,   870,   809,   333,   130,   880,  1621,
-   694,  1622,   337,   695,   296,   297,   298,   299,   300,   338,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,   832,
-  1623,  1625,  1624,  1626,   310,  1654,   339,  1655,   907,   908,
+   449,   450,   451,   452,   453,   454,  1299,   128,   129,   244,
+  1299,   245,    87,   233,   463,   234,  1417,   128,   129,  1421,
+    93,   469,   473,   474,   475,   476,   477,   478,   479,   480,
+   481,   482,   483,   484,   485,   486,   487,   166,   167,   348,
+   349,   128,   129,   494,    88,   837,   497,   501,   168,   234,
+   197,   284,   463,    89,   169,   464,   350,   508,   509,   510,
+   138,   512,   513,   514,   515,   516,   517,   518,   139,   464,
+   663,   467,   348,   349,   664,  1357,  1358,  1359,  1360,   531,
+   532,   533,  1364,  1485,   538,   348,   349,  1489,   246,   351,
+   247,   818,   545,   838,   797,   668,   963,   964,   550,   934,
+  1219,   153,   589,   296,   297,   298,   299,   300,   142,   301,
+   302,   303,   304,   305,   306,   307,   308,   309,   348,   349,
+   931,   348,   349,   310,   668,   827,   174,   143,   328,   175,
+   176,  1098,   154,   334,   520,   798,   864,   530,   298,   299,
+   300,   588,   301,   302,   303,   304,   305,   306,   307,   308,
+   309,   348,   349,   170,   172,   357,   310,   972,   973,  1427,
+  1428,   361,   362,  1431,   295,   348,   349,   847,   348,   349,
+   121,   122,   123,   124,   348,   349,   155,   348,   349,   348,
+   349,  1166,   348,   349,  1167,  1174,   472,   149,   284,  1175,
+  1169,   128,   129,  1293,   674,  1295,   150,   672,  1301,   670,
+   296,   297,   298,   299,   300,   152,   301,   302,   303,   304,
+   305,   306,   307,   308,   309,   463,   159,   307,   308,   309,
+   310,   121,   122,   123,   124,   310,  1493,   409,   164,   463,
+   464,   699,   700,   248,   801,   249,   165,   705,   128,   129,
+   173,   177,   128,   129,   696,   178,   234,   715,   716,   121,
+   122,   123,   124,   186,   156,   157,   719,   158,   250,   957,
+   251,   464,   252,   723,   253,   182,   183,   933,   935,   187,
+   128,   129,   193,   732,   733,   343,   254,   345,   255,    42,
+    43,    44,    45,   352,    47,   256,   192,   257,  1542,   296,
+   297,   298,   299,   300,   194,   301,   302,   303,   304,   305,
+   306,   307,   308,   309,   258,   260,   259,   261,   262,   310,
+   263,   865,   264,   266,   265,   267,   195,   196,   770,   296,
+   297,   298,   299,   300,  1572,   301,   302,   303,   304,   305,
+   306,   307,   308,   309,   268,   270,   269,   271,   272,   310,
+   273,   296,   297,   298,   299,   300,   411,   301,   302,   303,
+   304,   305,   306,   307,   308,   309,   274,   809,   275,   232,
+   276,   310,   277,   278,   668,   279,   669,   787,   788,   661,
+   668,   662,   698,   668,   944,   830,   945,   668,   668,   956,
+  1060,   789,   790,   791,   792,   793,   794,   795,   229,   280,
+   463,  1080,   281,   282,   800,   464,  1175,   806,  1176,  1454,
+   294,  1455,   311,  1474,  1046,  1475,   817,   312,   317,   299,
+   300,  1656,   301,   302,   303,   304,   305,   306,   307,   308,
+   309,   463,   409,  1476,   320,  1477,   310,  1478,  1480,  1479,
+  1481,   331,   332,   904,  1534,   358,  1535,   832,   667,  1594,
+  1596,  1595,  1597,  1075,  1598,  1650,  1599,  1651,  1652,   333,
+  1653,   856,   857,   335,   505,   860,   336,   342,   523,   524,
+    90,    91,   337,   869,   870,   338,    94,    95,    96,    97,
+    98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+   108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+  1654,   854,  1655,  1683,  1685,  1684,  1686,   339,   907,   908,
    909,   910,   911,   912,   913,   914,   915,   916,   917,   918,
-   919,   920,  1656,  1658,  1657,  1659,    26,    27,    28,    29,
-    30,    31,    32,    33,   340,    34,   342,    36,    37,   341,
-    39,    40,   359,   353,   936,   358,   354,   941,   355,   943,
-   368,   371,   372,   374,   375,   376,   377,    52,   404,   378,
-   379,   380,   381,   382,   383,   463,   384,   958,   385,   959,
-   386,   387,   388,    53,    54,    55,   389,   390,   391,   392,
-   393,   410,   394,   974,   975,   976,   395,  1224,   396,   397,
-   398,   399,   400,   401,   402,   403,   461,   310,   407,   993,
-   994,   296,   297,   298,   299,   300,   406,   301,   302,   303,
-   304,   305,   306,   307,   308,   309,   408,   470,   471,   506,
-   511,   310,   519,   540,   541,   544,   996,   551,   552,   547,
-   296,   297,   298,   299,   300,    64,   301,   302,   303,   304,
-   305,   306,   307,   308,   309,   553,  1028,   554,   555,   556,
-   310,   557,   558,   559,   296,   297,   298,   299,   300,   560,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,   561,
-   562,  1047,   563,   564,   310,   565,   566,   534,   567,  1056,
-   568,   820,   821,   569,   823,   570,   575,   854,   825,   826,
-   571,   572,   573,   574,   576,   577,   578,   579,   580,  1065,
-  1066,   581,  1132,   584,   665,   585,   586,   666,  1081,  1074,
-  1083,   675,  1086,   676,   681,   713,   939,   717,   683,   684,
-  1089,  1090,   685,   858,   859,   686,   688,   862,   689,   691,
-   718,  1100,   725,   505,  1103,   692,   693,   701,   726,   727,
-   728,   877,   878,   729,  1113,   731,   735,   883,   884,   736,
-   737,  1120,  1121,  1122,   890,  1101,   897,   738,  1127,   739,
-   740,   741,  1131,   742,   766,   743,  1133,  1134,  1135,  1136,
-  1137,  1138,  1139,  1140,  1141,  1142,  1143,  1144,  1145,  1146,
-   744,   745,   746,   747,   748,   749,   750,   751,   752,   753,
-  1155,   754,   296,   297,   298,   299,   300,  1158,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,  1150,   755,   756,
-   767,   757,   310,   758,  1164,   759,   466,   760,   951,   761,
-   953,   762,   763,   764,   765,   768,   786,   772,   796,   799,
-   960,   961,   962,  1179,   773,   965,   966,   967,   968,   969,
-   970,   971,   296,   297,   298,   299,   300,   802,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,   807,   774,   775,
-  1181,  1159,   310,   808,   776,   777,   778,   810,   816,   846,
-   822,   296,   297,   298,   299,   300,  1428,   301,   302,   303,
-   304,   305,   306,   307,   308,   309,   296,   297,   298,   299,
-   300,   310,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,   811,  1227,  1228,   824,  1233,   310,  1235,  1236,   779,
-   834,   835,   833,   780,  1240,   836,   781,   782,   783,   784,
-   839,   785,  1248,   840,   841,   842,   843,   844,   845,  1045,
-  1256,   855,   867,   861,   866,  1261,   868,  1487,  1264,  1490,
-  1266,  1267,  1268,  1269,  1270,  1271,  1272,  1273,  1274,  1275,
-  1276,  1277,  1278,  1279,   872,   873,   874,   875,  1281,   876,
-   879,  1284,   296,   297,   298,   299,   300,   881,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,  1160,   882,   885,
-   886,   887,   310,   888,   889,   898,   901,  1524,  1096,   899,
-   900,   902,  1161,   903,   905,  1104,   930,   932,   937,   938,
-   946,   942,  1299,   950,   952,   954,   955,   977,   986,   987,
-   995,  1029,   997,   992,  1123,  1001,   296,   297,   298,   299,
-   300,  1002,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,  1003,  1004,  1005,  1007,  1006,   310,  1008,  1048,  1011,
-  1010,  1012,  1049,  1051,  1019,  1053,  1013,  1025,  1356,  1357,
-  1358,  1359,  1360,  1361,  1362,  1363,  1364,  1014,  1343,  1015,
-  1016,  1369,  1370,  1017,  1018,  1020,  1021,  1022,  1023,  1024,
-  1026,  1027,    90,    91,  1044,  1059,  1057,  1058,    94,    95,
-    96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-   106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-   116,   117,  1377,  1062,  1063,  1064,   590,   591,   592,   593,
-   594,   595,   596,   597,   598,   599,   600,   601,   602,   603,
-  1412,  1413,  1414,  1415,  1416,  1417,  1418,  1419,  1420,  1422,
-  1424,  1426,   296,   297,   298,   299,   300,  1067,   301,   302,
+   919,   920,   296,   297,   298,   299,   300,   340,   301,   302,
+   303,   304,   305,   306,   307,   308,   309,  1687,   341,  1688,
+   353,   354,   310,   355,   936,   359,   368,   941,   371,   943,
+   296,   297,   298,   299,   300,   372,   301,   302,   303,   304,
+   305,   306,   307,   308,   309,   463,   374,   958,   375,   959,
+   310,   404,   376,   377,   378,   379,  1078,   380,  1079,   381,
+   382,   383,   384,   974,   975,   976,   407,  1224,   406,   385,
+   386,   387,   388,   389,   410,   390,   391,   392,   393,   993,
+   994,   996,   296,   297,   298,   299,   300,   394,   301,   302,
    303,   304,   305,   306,   307,   308,   309,   296,   297,   298,
    299,   300,   310,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,  1068,  1069,  1437,  1070,  1071,   310,  1072,  1073,
-  1082,  1238,  1466,  1239,  1084,  1087,  1242,  1091,  1472,  1473,
-  1474,  1475,  1476,  1477,  1478,  1479,  1480,  1481,  1102,  1483,
-  1105,  1485,  1258,  1095,    90,   324,  1467,  1106,  1107,  1108,
+   308,   309,   395,   408,   396,   397,   398,   310,   125,   126,
+   714,   399,   400,   401,   127,   310,  1028,   402,   403,   130,
+   461,   471,   287,   506,   470,   288,   296,   297,   298,   299,
+   300,   511,   301,   302,   303,   304,   305,   306,   307,   308,
+   309,  1047,   820,   821,   519,   823,   310,   540,   541,   825,
+   826,   544,   547,   296,   297,   298,   299,   300,   939,   301,
+   302,   303,   304,   305,   306,   307,   308,   309,   551,  1065,
+  1066,   552,  1132,   310,   553,   554,   555,   556,   557,  1074,
+   558,   491,   559,   560,   858,   859,  1150,   561,   862,   562,
+  1089,  1090,   563,   564,   565,   566,   567,   568,   569,   570,
+  1101,  1100,   877,   878,  1103,   571,   572,   573,   883,   884,
+   574,   575,   576,   577,  1113,   890,   578,   897,   579,   580,
+   581,  1120,  1121,  1122,   584,   665,   585,   586,  1127,   666,
+   675,   676,  1131,   683,   681,   684,  1133,  1134,  1135,  1136,
+  1137,  1138,  1139,  1140,  1141,  1142,  1143,  1144,  1145,  1146,
+   301,   302,   303,   304,   305,   306,   307,   308,   309,   685,
+  1155,   686,   688,   689,   310,   691,   713,  1158,   692,   693,
+   701,   717,   725,   819,   718,   726,   727,   728,   729,   951,
+   731,   953,   735,   766,  1164,   736,   737,   738,   739,   740,
+   741,   960,   961,   962,   742,   743,   965,   966,   967,   968,
+   969,   970,   971,  1179,  1159,  1181,   744,   745,   746,   747,
+   851,   852,   853,   296,   297,   298,   299,   300,   748,   301,
+   302,   303,   304,   305,   306,   307,   308,   309,   772,   871,
+   749,   750,   751,   310,   752,   753,   754,   755,   880,   767,
+   756,   296,   297,   298,   299,   300,   757,   301,   302,   303,
+   304,   305,   306,   307,   308,   309,   773,   786,   796,   799,
+   846,   310,  1449,   758,   807,   808,   759,   774,   760,   810,
+   761,   802,  1230,  1232,   816,  1238,   822,  1241,  1242,   775,
+   824,   834,   762,   763,  1246,   764,   765,   811,  1160,   855,
+  1045,   768,  1254,   835,   776,   836,   777,   833,   839,   778,
+  1262,   840,   841,   779,   842,  1267,   843,   780,  1270,   844,
+  1272,  1273,  1274,  1275,  1276,  1277,  1278,  1279,  1280,  1281,
+  1282,  1283,  1284,  1285,   781,   782,   783,   784,  1287,   785,
+  1512,  1290,  1515,   283,   284,  1291,   845,   861,   866,   867,
+   868,   872,   873,   875,   874,   876,   879,   881,   882,  1096,
+   885,   886,   887,  1309,   888,   889,  1104,   898,   899,   296,
+   297,   298,   299,   300,   900,   301,   302,   303,   304,   305,
+   306,   307,   308,   309,   901,  1123,   902,   930,   903,   310,
+   905,   937,   932,  1161,  1553,   590,   591,   592,   593,   594,
+   595,   596,   597,   598,   599,   600,   601,   602,   603,  1341,
+   938,  1344,   942,   946,   950,   952,   954,  1349,   955,   977,
+   986,   987,   992,  1356,   995,   997,  1001,  1002,  1003,  1004,
+  1005,  1006,  1007,  1011,  1008,  1012,  1010,  1019,  1369,  1370,
+  1371,  1372,  1373,  1374,  1375,  1376,  1377,  1013,  1025,  1056,
+  1029,  1382,  1383,   296,   297,   298,   299,   300,  1014,   301,
+   302,   303,   304,   305,   306,   307,   308,   309,  1015,  1016,
+  1393,  1048,  1017,   310,  1018,  1020,  1021,  1022,  1081,  1049,
+  1083,  1023,  1086,    90,    91,  1051,  1024,  1026,  1044,    94,
+    95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+   105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+   115,   116,   117,   906,  1027,  1053,  1433,  1434,  1435,  1436,
+  1437,  1438,  1439,  1440,  1441,  1443,  1445,  1447,  1057,  1058,
+  1059,  1062,  1063,  1064,  1067,  1068,  1069,  1070,  1071,  1072,
+  1460,  1073,  1244,  1082,  1245,  1084,  1087,  1248,   296,   297,
+   298,   299,   300,  1091,   301,   302,   303,   304,   305,   306,
+   307,   308,   309,  1264,  1095,  1102,  1105,  1106,   310,  1107,
+  1108,  1109,  1111,  1112,  1492,  1491,  1115,  1114,  1116,  1118,
+  1117,  1497,  1498,  1499,  1500,  1501,  1502,  1503,  1504,  1505,
+  1506,  1124,  1508,  1125,  1510,  1128,  1129,  1130,  1147,  1153,
+  1165,  1148,  1149,    90,    91,  1151,  1522,  1152,  1154,    94,
+    95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+   105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+   115,   116,   117,  1157,  1162,  1163,  1539,  1540,  1168,  1170,
+  1177,  1544,  1545,  1546,  1547,  1548,  1549,  1178,  1184,  1182,
+  1185,   125,   126,   548,  1186,  1187,  1188,   127,  1190,  1191,
+  1192,  1196,   130,  1221,  1345,   694,  1231,  1233,   695,  1239,
+  1197,  1569,  1353,  1354,  1198,  1200,  1573,  1574,  1575,  1576,
+  1577,  1578,  1580,  1582,  1584,  1201,  1203,  1218,    26,    27,
+    28,    29,    30,    31,    32,    33,  1220,    34,  1243,    36,
+    37,  1249,    39,    40,  1603,  1604,  1605,  1606,  1607,  1608,
+  1609,  1250,  1611,  1253,  1613,  1255,  1258,  1257,  1259,    52,
+  1260,  1261,  1263,  1265,  1266,  1268,  1269,  1286,   345,  1271,
+  1288,  1289,  1623,  1624,  1625,    53,    54,    55,  1296,  1308,
+  1297,  1305,  1306,  1310,  1311,  1312,  1637,  1638,  1639,  1641,
+  1643,  1645,  1314,  1340,  1317,  1420,  1342,  1346,  1424,  1347,
+  1315,  1319,  1321,  1657,  1658,  1659,  1660,  1338,  1662,  1350,
+  1664,   125,   126,  1351,  1352,  1355,  1307,   127,  1361,  1362,
+  1363,  1365,   130,  1366,  1367,   828,  1368,  1384,   829,  1388,
+  1678,  1680,  1682,  1386,  1389,  1391,  1416,    64,  1392,  1689,
+  1394,  1691,  1395,  1693,  1396,  1397,   296,   297,   298,   299,
+   300,  1398,   301,   302,   303,   304,   305,   306,   307,   308,
+   309,  1486,  1399,  1415,    90,   324,   310,  1409,  1410,  1494,
     94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
    104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-   114,   115,   116,   117,   604,  1109,  1495,  1111,  1112,  1510,
-  1511,  1115,  1114,  1116,  1515,  1516,  1517,  1518,  1519,  1520,
-   125,   126,  1117,  1118,  1124,  1125,   127,  1128,  1129,  1130,
-  1147,   130,  1153,  1148,   828,  1149,  1152,   829,  1151,  1154,
-  1157,  1162,  1540,  1165,  1163,  1168,  1170,  1544,  1545,  1546,
-  1547,  1548,  1549,  1551,  1553,  1555,  1177,  1178,  1182,  1184,
-  1185,  1186,  1221,  1187,  1333,  1243,  1220,  1191,  1188,  1192,
-  1190,  1340,  1341,  1197,  1196,  1574,  1575,  1576,  1577,  1578,
-  1579,  1580,  1198,  1582,  1200,  1584,  1201,  1203,  1218,  1297,
-  1244,  1237,  1247,  1249,  1251,  1252,  1253,  1254,  1283,  1255,
-  1257,  1259,  1260,  1594,  1595,  1596,  1262,  1263,  1280,  1265,
-  1282,  1288,  1287,  1295,  1296,  1298,  1300,  1608,  1609,  1610,
-  1612,  1614,  1616,  1330,  1331,  1301,  1334,  1335,  1302,  1304,
-  1305,  1337,  1307,  1338,  1628,  1629,  1630,  1631,  1309,  1633,
-  1311,  1635,   125,   325,  1328,  1339,  1342,  1348,   127,  1401,
-  1349,  1403,  1350,   130,  1352,  1353,  1354,  1355,  1371,   326,
-  1404,  1649,  1651,  1653,  1372,  1373,  1376,  1374,  1375,  1378,
-  1660,  1379,  1662,  1380,  1664,    90,   502,  1381,  1382,  1383,
-  1399,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-   103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-   113,   114,   115,   116,   117,  1393,  1405,  1394,  1462,  1395,
-    90,    91,    92,  1411,    93,  1469,    94,    95,    96,    97,
-    98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-   108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-  1396,   118,   119,   120,   296,   297,   298,   299,   300,  1408,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,  1409,
-  1430,  1438,  1435,  1436,   310,  1439,  1460,  1459,    90,    91,
-   456,  1465,  1461,  1514,    94,    95,    96,    97,    98,    99,
+   114,   115,   116,   117,    90,   502,  1411,  1412,  1418,  1422,
+    94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+   104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+   114,   115,   116,   117,  1425,  1426,    90,    91,  1429,  1453,
+  1430,  1543,    94,    95,    96,    97,    98,    99,   100,   101,
+   102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+   112,   113,   114,   115,   116,   117,  1432,  1451,  1457,  1484,
+  1458,  1459,  1463,  1461,  1462,  1571,  1464,  1483,  1482,  1487,
+  1488,   296,   297,   298,   299,   300,  1490,   301,   302,   303,
+   304,   305,   306,   307,   308,   309,  1495,  1496,    90,    91,
+    92,   310,    93,  1601,    94,    95,    96,    97,    98,    99,
    100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-   110,   111,   112,   113,   114,   115,   116,   117,  1440,   118,
-   119,   120,    90,    91,  1463,  1542,  1441,  1464,    94,    95,
+   110,   111,   112,   113,   114,   115,   116,   117,  1507,   118,
+   119,   120,  1622,  1509,  1511,  1513,  1516,  1518,  1520,  1523,
+  1524,  1536,   125,   325,  1537,  1538,  1636,  1541,   127,  1554,
+  1557,  1558,  1559,   130,   296,   297,   298,   299,   300,   326,
+   301,   302,   303,   304,   305,   306,   307,   308,   309,  1566,
+  1567,  1568,   125,   126,   310,  1570,  1586,  1600,   127,  1587,
+  1225,  1602,  1226,   130,  1610,  1612,  1614,  1615,  1661,   503,
+  1663,  1629,  1665,  1633,  1634,  1635,  1646,  1666,  1670,  1674,
+  1675,  1676,  1690,  1692,  1227,  1228,  1694,  1696,  1697,   771,
+   127,    69,    70,    71,  1094,  1229,    90,    91,   456,     0,
+     0,   169,    94,    95,    96,    97,    98,    99,   100,   101,
+   102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+   112,   113,   114,   115,   116,   117,   680,   118,   119,   120,
+     0,  1050,   121,   122,   123,   124,     0,     0,     0,     0,
+     0,   831,     0,     0,     0,     0,   125,   126,     0,     0,
+     0,     0,   127,   128,   129,     0,   863,   130,     0,   131,
+     0,   132,    90,    91,     0,     0,     0,     0,    94,    95,
     96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
    106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-   116,   117,  1470,  1572,  1471,  1482,  1484,  1486,  1488,  1491,
-  1492,  1509,  1493,   125,   126,  1496,  1497,  1512,  1525,   127,
-  1528,  1529,  1530,  1557,   130,   548,  1537,  1538,  1539,  1541,
-   503,  1558,  1593,  1571,   121,   122,   123,   124,  1586,  1573,
-   680,  1581,  1583,  1585,  1600,  1617,  1607,  1604,   125,   126,
-  1632,  1605,  1634,  1606,   127,   128,   129,  1636,  1637,   130,
-  1645,   131,   831,   132,    90,   324,  1641,  1646,  1647,  1661,
-    94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-   104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-   114,   115,   116,   117,   863,  1663,  1665,  1667,  1668,   771,
-    69,    70,    71,  1094,  1050,     0,   125,   126,     0,     0,
-     0,     0,   127,     0,     0,     0,     0,   130,   590,   591,
-   592,   593,   594,   595,   596,   597,   598,   599,   600,   601,
-   602,   603,     0,     0,     0,     0,     0,     0,     0,     0,
-   125,   126,     0,     0,     0,     0,   127,    90,   502,     0,
-     0,   130,     0,    94,    95,    96,    97,    98,    99,   100,
-   101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-   111,   112,   113,   114,   115,   116,   117,     0,   296,   297,
-   298,   299,   300,     0,   301,   302,   303,   304,   305,   306,
-   307,   308,   309,   296,   297,   298,   299,   300,   310,   301,
-   302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,     0,   296,   297,   298,   299,   300,
+   116,   117,    90,   324,     0,     0,     0,     0,    94,    95,
+    96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+   106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+   116,   117,    90,   502,     0,     0,     0,     0,    94,    95,
+    96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+   106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+   116,   117,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   125,   126,     0,     0,     0,     0,
+   127,     0,     0,     0,     0,   130,     0,     0,     0,   296,
+   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
+   306,   307,   308,   309,   296,   297,   298,   299,   300,   310,
+   301,   302,   303,   304,   305,   306,   307,   308,   309,   296,
+   297,   298,   299,   300,   310,   301,   302,   303,   304,   305,
+   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
+   125,   126,     0,     0,     0,     0,   127,     0,     0,     0,
+     0,   130,   296,   297,   298,   299,   300,     0,   301,   302,
+   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
+   125,   462,   310,     0,   460,     0,   127,     0,   521,   -10,
+     1,   130,   -10,   -53,     0,   296,   297,   298,   299,   300,
      0,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     0,     0,   125,   462,     0,   310,   906,     0,   127,     0,
-     0,     0,     0,   130,     0,     0,     0,   296,   297,   298,
-   299,   300,     0,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,     0,     0,
-    26,    27,    28,    29,    30,    31,    32,    33,     0,    34,
-     0,    36,    37,     0,    39,    40,     0,     0,     0,     0,
-   -10,     1,     0,   -10,   -53,     0,     0,     0,     0,     0,
-     0,    52,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   125,   126,    53,    54,    55,
-     0,   127,     0,   -53,     0,     0,   130,   -53,   -53,   -53,
-   -53,   -53,   -53,   -53,   -53,   -53,     0,   -53,   -53,   -53,
-   -53,   -53,   -53,   -53,     0,     0,     0,   -53,   -53,   -53,
-   -53,   -53,   -53,   -53,     0,   -53,   -53,   -53,   -53,   -53,
-   296,   297,   298,   299,   300,     0,   301,   302,   303,   304,
-   305,   306,   307,   308,   309,   -53,   -53,   -53,     0,    64,
-   310,     0,   460,     0,   -53,     0,   -53,   -53,   -53,   -53,
-   -53,   -53,   -53,     0,     0,     0,     0,     0,     0,     0,
+   125,   126,     0,     0,     0,   310,   127,     0,     0,     0,
+     0,   130,   -53,   496,     0,     0,   -53,   -53,   -53,   -53,
+   -53,   -53,   -53,   -53,   -53,     0,   -53,   -53,   -53,   -53,
+   -53,   -53,   -53,     0,     0,     0,   -53,   -53,   -53,   -53,
+   -53,   -53,   -53,     0,   -53,   -53,   -53,   -53,   -53,   296,
+   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
+   306,   307,   308,   309,   -53,   -53,   -53,     0,     0,   310,
+     0,   460,     0,   -53,     0,   -53,   -53,   -53,   -53,   -53,
+   -53,   -53,     0,     0,    26,    27,    28,    29,    30,    31,
+    32,    33,     0,    34,     0,    36,    37,     0,    39,    40,
+     0,   -10,   -10,   -10,   -10,   -10,   -10,   -10,   -10,     0,
+     0,     0,     0,     0,     0,    52,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   -53,     2,     3,     0,
+     4,    53,    54,    55,    26,    27,    28,    29,    30,    31,
+    32,    33,     0,    34,     0,    36,    37,     0,    39,    40,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,    23,   -10,   -10,   -10,   -10,   -10,   -10,   -10,   -10,
-     0,   539,   296,   297,   298,   299,   300,     0,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,   -53,     2,     3,
-    24,     4,   310,     0,    25,    26,    27,    28,    29,    30,
-    31,    32,    33,     0,    34,    35,    36,    37,    38,    39,
-    40,     0,     0,     0,    41,    42,    43,    44,    45,    46,
-    47,   199,    48,    49,    50,    51,    52,   296,   297,   298,
-   299,   300,     0,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,    53,    54,    55,     0,     0,   310,     0,   490,
-     0,    56,     0,    57,    58,    59,    60,    61,    62,    63,
-    26,    27,    28,    29,    30,    31,    32,    33,     0,    34,
-     0,    36,    37,     0,    39,    40,     0,     0,     0,     0,
-     0,     0,     0,     0,   200,   201,   202,     0,     0,     0,
-     0,    52,   203,   204,   205,   206,   207,   208,   209,   210,
-   211,   212,     0,     0,    64,     0,     0,    53,    54,    55,
-   213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
-     0,   223,   224,   225,   226,   227,   228,   296,   297,   298,
-   299,   300,     0,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,     0,     0,
-     0,     0,     0,  1078,     0,  1079,     0,     0,     0,     0,
-     0,     0,     0,     0,   296,   297,   298,   299,   300,    64,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,     0,     0,     0,     0,     0,
-  1225,     0,  1226,   296,   297,   298,   299,   300,     0,   301,
+     0,     0,     0,    23,     0,    52,   296,   297,   298,   299,
+   300,     0,   301,   302,   303,   304,   305,   306,   307,   308,
+   309,    53,    54,    55,     0,     0,   310,     0,     0,     0,
+     0,     0,    24,    64,   498,     0,    25,    26,    27,    28,
+    29,    30,    31,    32,    33,     0,    34,    35,    36,    37,
+    38,    39,    40,     0,     0,     0,    41,    42,    43,    44,
+    45,    46,    47,   199,    48,    49,    50,    51,    52,     0,
+     0,     0,     0,     0,     0,   534,     0,     0,     0,     0,
+     0,     0,     0,    64,    53,    54,    55,     0,     0,     0,
+     0,     0,     0,    56,     0,    57,    58,    59,    60,    61,
+    62,    63,     0,   296,   297,   298,   299,   300,     0,   301,
    302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,     0,     0,     0,     0,     0,  1326,
-     0,  1327,   296,   297,   298,   299,   300,     0,   301,   302,
+     0,     0,     0,   310,     0,   539,   200,   201,   202,  1336,
+     0,  1337,     0,     0,   203,   204,   205,   206,   207,   208,
+   209,   210,   211,   212,     0,     0,    64,     0,     0,     0,
+     0,     0,   213,   214,   215,   216,   217,   218,   219,   220,
+   221,   222,     0,   223,   224,   225,   226,   227,   228,   296,
+   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
+   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
+     0,     0,   296,   297,   298,   299,   300,   702,   301,   302,
    303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
      0,     0,   310,     0,     0,   296,   297,   298,   299,   300,
-   491,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+   706,   301,   302,   303,   304,   305,   306,   307,   308,   309,
      0,     0,     0,     0,     0,   310,     0,     0,   296,   297,
-   298,   299,   300,   496,   301,   302,   303,   304,   305,   306,
+   298,   299,   300,   707,   301,   302,   303,   304,   305,   306,
    307,   308,   309,     0,     0,     0,     0,     0,   310,     0,
-     0,   296,   297,   298,   299,   300,   498,   301,   302,   303,
+     0,   296,   297,   298,   299,   300,   850,   301,   302,   303,
    304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,     0,     0,   296,   297,   298,   299,   300,   702,
+     0,   310,     0,     0,   296,   297,   298,   299,   300,  1076,
    301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
      0,     0,     0,     0,   310,     0,     0,   296,   297,   298,
-   299,   300,   706,   301,   302,   303,   304,   305,   306,   307,
+   299,   300,  1247,   301,   302,   303,   304,   305,   306,   307,
    308,   309,     0,     0,     0,     0,     0,   310,     0,     0,
-   296,   297,   298,   299,   300,   707,   301,   302,   303,   304,
+   296,   297,   298,   299,   300,  1292,   301,   302,   303,   304,
    305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,     0,     0,   296,   297,   298,   299,   300,   850,   301,
+   310,     0,     0,   296,   297,   298,   299,   300,  1294,   301,
    302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
      0,     0,     0,   310,     0,     0,   296,   297,   298,   299,
-   300,  1076,   301,   302,   303,   304,   305,   306,   307,   308,
+   300,  1300,   301,   302,   303,   304,   305,   306,   307,   308,
    309,     0,     0,     0,     0,     0,   310,     0,     0,   296,
-   297,   298,   299,   300,  1241,   301,   302,   303,   304,   305,
+   297,   298,   299,   300,  1303,   301,   302,   303,   304,   305,
    306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-     0,     0,   296,   297,   298,   299,   300,  1285,   301,   302,
+     0,     0,   296,   297,   298,   299,   300,  1304,   301,   302,
    303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
      0,     0,   310,     0,     0,   296,   297,   298,   299,   300,
-  1286,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+  1339,   301,   302,   303,   304,   305,   306,   307,   308,   309,
      0,     0,     0,     0,     0,   310,     0,     0,   296,   297,
-   298,   299,   300,  1291,   301,   302,   303,   304,   305,   306,
+   298,   299,   300,  1385,   301,   302,   303,   304,   305,   306,
    307,   308,   309,     0,     0,     0,     0,     0,   310,     0,
-     0,   296,   297,   298,   299,   300,  1293,   301,   302,   303,
+     0,   296,   297,   298,   299,   300,  1387,   301,   302,   303,
    304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,     0,     0,   296,   297,   298,   299,   300,  1294,
+     0,   310,     0,     0,   296,   297,   298,   299,   300,  1390,
    301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
      0,     0,     0,     0,   310,     0,     0,   296,   297,   298,
-   299,   300,  1329,   301,   302,   303,   304,   305,   306,   307,
+   299,   300,  1414,   301,   302,   303,   304,   305,   306,   307,
    308,   309,     0,     0,     0,     0,     0,   310,     0,     0,
-   296,   297,   298,   299,   300,  1398,   301,   302,   303,   304,
-   305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,     0,     0,   296,   297,   298,   299,   300,  1527,   301,
-   302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,     0,     0,   296,   297,   298,   299,
-   300,  1556,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,     0,     0,     0,     0,     0,   310,   296,   297,   298,
-   299,   300,   521,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,   296,   297,
-   298,   299,   300,   522,   301,   302,   303,   304,   305,   306,
-   307,   308,   309,     0,     0,     0,     0,     0,   310,   296,
-   297,   298,   299,   300,   641,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-   296,   297,   298,   299,   300,   642,   301,   302,   303,   304,
+   296,   297,   298,   299,   300,  1556,   301,   302,   303,   304,
    305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,   296,   297,   298,   299,   300,   655,   301,   302,   303,
-   304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,   296,   297,   298,   299,   300,   656,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,   296,   297,   298,   299,   300,   657,   301,
+   310,     0,     0,   296,   297,   298,   299,   300,  1585,   301,
    302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,   296,   297,   298,   299,   300,   658,
+     0,     0,     0,   310,   296,   297,   298,   299,   300,   521,
    301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
      0,     0,     0,     0,   310,   296,   297,   298,   299,   300,
-   659,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+   522,   301,   302,   303,   304,   305,   306,   307,   308,   309,
      0,     0,     0,     0,     0,   310,   296,   297,   298,   299,
-   300,   660,   301,   302,   303,   304,   305,   306,   307,   308,
+   300,   641,   301,   302,   303,   304,   305,   306,   307,   308,
    309,     0,     0,     0,     0,     0,   310,   296,   297,   298,
-   299,   300,   720,   301,   302,   303,   304,   305,   306,   307,
+   299,   300,   642,   301,   302,   303,   304,   305,   306,   307,
    308,   309,     0,     0,     0,     0,     0,   310,   296,   297,
-   298,   299,   300,   721,   301,   302,   303,   304,   305,   306,
+   298,   299,   300,   655,   301,   302,   303,   304,   305,   306,
    307,   308,   309,     0,     0,     0,     0,     0,   310,   296,
-   297,   298,   299,   300,   722,   301,   302,   303,   304,   305,
+   297,   298,   299,   300,   656,   301,   302,   303,   304,   305,
    306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-   296,   297,   298,   299,   300,   848,   301,   302,   303,   304,
+   296,   297,   298,   299,   300,   657,   301,   302,   303,   304,
    305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,   296,   297,   298,   299,   300,   849,   301,   302,   303,
+   310,   296,   297,   298,   299,   300,   658,   301,   302,   303,
    304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,   296,   297,   298,   299,   300,   984,   301,   302,
+     0,   310,   296,   297,   298,   299,   300,   659,   301,   302,
    303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,   296,   297,   298,   299,   300,   985,   301,
+     0,     0,   310,   296,   297,   298,   299,   300,   660,   301,
    302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,   296,   297,   298,   299,   300,   998,
+     0,     0,     0,   310,   296,   297,   298,   299,   300,   720,
    301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
      0,     0,     0,     0,   310,   296,   297,   298,   299,   300,
-   999,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+   721,   301,   302,   303,   304,   305,   306,   307,   308,   309,
      0,     0,     0,     0,     0,   310,   296,   297,   298,   299,
-   300,  1030,   301,   302,   303,   304,   305,   306,   307,   308,
+   300,   722,   301,   302,   303,   304,   305,   306,   307,   308,
    309,     0,     0,     0,     0,     0,   310,   296,   297,   298,
-   299,   300,  1031,   301,   302,   303,   304,   305,   306,   307,
+   299,   300,   848,   301,   302,   303,   304,   305,   306,   307,
    308,   309,     0,     0,     0,     0,     0,   310,   296,   297,
-   298,   299,   300,  1032,   301,   302,   303,   304,   305,   306,
+   298,   299,   300,   849,   301,   302,   303,   304,   305,   306,
    307,   308,   309,     0,     0,     0,     0,     0,   310,   296,
-   297,   298,   299,   300,  1033,   301,   302,   303,   304,   305,
+   297,   298,   299,   300,   984,   301,   302,   303,   304,   305,
    306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-   296,   297,   298,   299,   300,  1034,   301,   302,   303,   304,
+   296,   297,   298,   299,   300,   985,   301,   302,   303,   304,
    305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,   296,   297,   298,   299,   300,  1035,   301,   302,   303,
+   310,   296,   297,   298,   299,   300,   998,   301,   302,   303,
    304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,   296,   297,   298,   299,   300,  1036,   301,   302,
+     0,   310,   296,   297,   298,   299,   300,   999,   301,   302,
    303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,   296,   297,   298,   299,   300,  1037,   301,
+     0,     0,   310,   296,   297,   298,   299,   300,  1030,   301,
    302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,   296,   297,   298,   299,   300,  1038,
+     0,     0,     0,   310,   296,   297,   298,   299,   300,  1031,
    301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
      0,     0,     0,     0,   310,   296,   297,   298,   299,   300,
-  1039,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+  1032,   301,   302,   303,   304,   305,   306,   307,   308,   309,
      0,     0,     0,     0,     0,   310,   296,   297,   298,   299,
-   300,  1040,   301,   302,   303,   304,   305,   306,   307,   308,
+   300,  1033,   301,   302,   303,   304,   305,   306,   307,   308,
    309,     0,     0,     0,     0,     0,   310,   296,   297,   298,
-   299,   300,  1041,   301,   302,   303,   304,   305,   306,   307,
+   299,   300,  1034,   301,   302,   303,   304,   305,   306,   307,
    308,   309,     0,     0,     0,     0,     0,   310,   296,   297,
-   298,   299,   300,  1042,   301,   302,   303,   304,   305,   306,
+   298,   299,   300,  1035,   301,   302,   303,   304,   305,   306,
    307,   308,   309,     0,     0,     0,     0,     0,   310,   296,
-   297,   298,   299,   300,  1043,   301,   302,   303,   304,   305,
+   297,   298,   299,   300,  1036,   301,   302,   303,   304,   305,
    306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-   296,   297,   298,   299,   300,  1054,   301,   302,   303,   304,
+   296,   297,   298,   299,   300,  1037,   301,   302,   303,   304,
    305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,   296,   297,   298,   299,   300,  1061,   301,   302,   303,
+   310,   296,   297,   298,   299,   300,  1038,   301,   302,   303,
    304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,   296,   297,   298,   299,   300,  1171,   301,   302,
+     0,   310,   296,   297,   298,   299,   300,  1039,   301,   302,
    303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,   296,   297,   298,   299,   300,  1172,   301,
+     0,     0,   310,   296,   297,   298,   299,   300,  1040,   301,
    302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,   296,   297,   298,   299,   300,  1180,
+     0,     0,     0,   310,   296,   297,   298,   299,   300,  1041,
    301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
      0,     0,     0,     0,   310,   296,   297,   298,   299,   300,
-  1183,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+  1042,   301,   302,   303,   304,   305,   306,   307,   308,   309,
      0,     0,     0,     0,     0,   310,   296,   297,   298,   299,
-   300,  1194,   301,   302,   303,   304,   305,   306,   307,   308,
+   300,  1043,   301,   302,   303,   304,   305,   306,   307,   308,
    309,     0,     0,     0,     0,     0,   310,   296,   297,   298,
-   299,   300,  1199,   301,   302,   303,   304,   305,   306,   307,
+   299,   300,  1054,   301,   302,   303,   304,   305,   306,   307,
    308,   309,     0,     0,     0,     0,     0,   310,   296,   297,
-   298,   299,   300,  1202,   301,   302,   303,   304,   305,   306,
+   298,   299,   300,  1061,   301,   302,   303,   304,   305,   306,
    307,   308,   309,     0,     0,     0,     0,     0,   310,   296,
-   297,   298,   299,   300,  1204,   301,   302,   303,   304,   305,
+   297,   298,   299,   300,  1171,   301,   302,   303,   304,   305,
    306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-   296,   297,   298,   299,   300,  1205,   301,   302,   303,   304,
+   296,   297,   298,   299,   300,  1172,   301,   302,   303,   304,
    305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,   296,   297,   298,   299,   300,  1206,   301,   302,   303,
+   310,   296,   297,   298,   299,   300,  1180,   301,   302,   303,
    304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,   296,   297,   298,   299,   300,  1207,   301,   302,
+     0,   310,   296,   297,   298,   299,   300,  1183,   301,   302,
    303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,   296,   297,   298,   299,   300,  1208,   301,
+     0,     0,   310,   296,   297,   298,   299,   300,  1194,   301,
    302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,   296,   297,   298,   299,   300,  1209,
+     0,     0,     0,   310,   296,   297,   298,   299,   300,  1199,
    301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
      0,     0,     0,     0,   310,   296,   297,   298,   299,   300,
-  1210,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+  1202,   301,   302,   303,   304,   305,   306,   307,   308,   309,
      0,     0,     0,     0,     0,   310,   296,   297,   298,   299,
-   300,  1211,   301,   302,   303,   304,   305,   306,   307,   308,
+   300,  1204,   301,   302,   303,   304,   305,   306,   307,   308,
    309,     0,     0,     0,     0,     0,   310,   296,   297,   298,
-   299,   300,  1212,   301,   302,   303,   304,   305,   306,   307,
+   299,   300,  1205,   301,   302,   303,   304,   305,   306,   307,
    308,   309,     0,     0,     0,     0,     0,   310,   296,   297,
-   298,   299,   300,  1213,   301,   302,   303,   304,   305,   306,
+   298,   299,   300,  1206,   301,   302,   303,   304,   305,   306,
    307,   308,   309,     0,     0,     0,     0,     0,   310,   296,
-   297,   298,   299,   300,  1214,   301,   302,   303,   304,   305,
+   297,   298,   299,   300,  1207,   301,   302,   303,   304,   305,
    306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-   296,   297,   298,   299,   300,  1215,   301,   302,   303,   304,
+   296,   297,   298,   299,   300,  1208,   301,   302,   303,   304,
    305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,   296,   297,   298,   299,   300,  1216,   301,   302,   303,
+   310,   296,   297,   298,   299,   300,  1209,   301,   302,   303,
    304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,   296,   297,   298,   299,   300,  1217,   301,   302,
+     0,   310,   296,   297,   298,   299,   300,  1210,   301,   302,
    303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,   296,   297,   298,   299,   300,  1222,   301,
+     0,     0,   310,   296,   297,   298,   299,   300,  1211,   301,
    302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,   296,   297,   298,   299,   300,  1223,
+     0,     0,     0,   310,   296,   297,   298,   299,   300,  1212,
    301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
      0,     0,     0,     0,   310,   296,   297,   298,   299,   300,
-  1303,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+  1213,   301,   302,   303,   304,   305,   306,   307,   308,   309,
      0,     0,     0,     0,     0,   310,   296,   297,   298,   299,
-   300,  1312,   301,   302,   303,   304,   305,   306,   307,   308,
+   300,  1214,   301,   302,   303,   304,   305,   306,   307,   308,
    309,     0,     0,     0,     0,     0,   310,   296,   297,   298,
-   299,   300,  1313,   301,   302,   303,   304,   305,   306,   307,
+   299,   300,  1215,   301,   302,   303,   304,   305,   306,   307,
    308,   309,     0,     0,     0,     0,     0,   310,   296,   297,
-   298,   299,   300,  1314,   301,   302,   303,   304,   305,   306,
+   298,   299,   300,  1216,   301,   302,   303,   304,   305,   306,
    307,   308,   309,     0,     0,     0,     0,     0,   310,   296,
-   297,   298,   299,   300,  1315,   301,   302,   303,   304,   305,
+   297,   298,   299,   300,  1217,   301,   302,   303,   304,   305,
    306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-   296,   297,   298,   299,   300,  1316,   301,   302,   303,   304,
+   296,   297,   298,   299,   300,  1222,   301,   302,   303,   304,
    305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,   296,   297,   298,   299,   300,  1317,   301,   302,   303,
+   310,   296,   297,   298,   299,   300,  1223,   301,   302,   303,
    304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,   296,   297,   298,   299,   300,  1318,   301,   302,
+     0,   310,   296,   297,   298,   299,   300,  1313,   301,   302,
    303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,   296,   297,   298,   299,   300,  1319,   301,
+     0,     0,   310,   296,   297,   298,   299,   300,  1322,   301,
    302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,   296,   297,   298,   299,   300,  1320,
+     0,     0,     0,   310,   296,   297,   298,   299,   300,  1323,
    301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
      0,     0,     0,     0,   310,   296,   297,   298,   299,   300,
-  1325,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+  1324,   301,   302,   303,   304,   305,   306,   307,   308,   309,
      0,     0,     0,     0,     0,   310,   296,   297,   298,   299,
-   300,  1384,   301,   302,   303,   304,   305,   306,   307,   308,
+   300,  1325,   301,   302,   303,   304,   305,   306,   307,   308,
    309,     0,     0,     0,     0,     0,   310,   296,   297,   298,
-   299,   300,  1385,   301,   302,   303,   304,   305,   306,   307,
+   299,   300,  1326,   301,   302,   303,   304,   305,   306,   307,
    308,   309,     0,     0,     0,     0,     0,   310,   296,   297,
-   298,   299,   300,  1386,   301,   302,   303,   304,   305,   306,
+   298,   299,   300,  1327,   301,   302,   303,   304,   305,   306,
    307,   308,   309,     0,     0,     0,     0,     0,   310,   296,
-   297,   298,   299,   300,  1387,   301,   302,   303,   304,   305,
+   297,   298,   299,   300,  1328,   301,   302,   303,   304,   305,
    306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-   296,   297,   298,   299,   300,  1388,   301,   302,   303,   304,
+   296,   297,   298,   299,   300,  1329,   301,   302,   303,   304,
    305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,   296,   297,   298,   299,   300,  1389,   301,   302,   303,
+   310,   296,   297,   298,   299,   300,  1330,   301,   302,   303,
    304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,   296,   297,   298,   299,   300,  1390,   301,   302,
+     0,   310,   296,   297,   298,   299,   300,  1335,   301,   302,
    303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,   296,   297,   298,   299,   300,  1391,   301,
+     0,     0,   310,   296,   297,   298,   299,   300,  1400,   301,
    302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,   296,   297,   298,   299,   300,  1392,
+     0,     0,     0,   310,   296,   297,   298,   299,   300,  1401,
    301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
      0,     0,     0,     0,   310,   296,   297,   298,   299,   300,
-  1442,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+  1402,   301,   302,   303,   304,   305,   306,   307,   308,   309,
      0,     0,     0,     0,     0,   310,   296,   297,   298,   299,
-   300,  1443,   301,   302,   303,   304,   305,   306,   307,   308,
+   300,  1403,   301,   302,   303,   304,   305,   306,   307,   308,
    309,     0,     0,     0,     0,     0,   310,   296,   297,   298,
-   299,   300,  1444,   301,   302,   303,   304,   305,   306,   307,
+   299,   300,  1404,   301,   302,   303,   304,   305,   306,   307,
    308,   309,     0,     0,     0,     0,     0,   310,   296,   297,
-   298,   299,   300,  1445,   301,   302,   303,   304,   305,   306,
+   298,   299,   300,  1405,   301,   302,   303,   304,   305,   306,
    307,   308,   309,     0,     0,     0,     0,     0,   310,   296,
-   297,   298,   299,   300,  1446,   301,   302,   303,   304,   305,
+   297,   298,   299,   300,  1406,   301,   302,   303,   304,   305,
    306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-   296,   297,   298,   299,   300,  1447,   301,   302,   303,   304,
+   296,   297,   298,   299,   300,  1407,   301,   302,   303,   304,
    305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,   296,   297,   298,   299,   300,  1448,   301,   302,   303,
+   310,   296,   297,   298,   299,   300,  1408,   301,   302,   303,
    304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,   296,   297,   298,   299,   300,  1449,   301,   302,
+     0,   310,   296,   297,   298,   299,   300,  1465,   301,   302,
    303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,   296,   297,   298,   299,   300,  1450,   301,
+     0,     0,   310,   296,   297,   298,   299,   300,  1466,   301,
    302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,   296,   297,   298,   299,   300,  1494,
+     0,     0,     0,   310,   296,   297,   298,   299,   300,  1467,
    301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
      0,     0,     0,     0,   310,   296,   297,   298,   299,   300,
-  1498,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+  1468,   301,   302,   303,   304,   305,   306,   307,   308,   309,
      0,     0,     0,     0,     0,   310,   296,   297,   298,   299,
-   300,  1499,   301,   302,   303,   304,   305,   306,   307,   308,
+   300,  1469,   301,   302,   303,   304,   305,   306,   307,   308,
    309,     0,     0,     0,     0,     0,   310,   296,   297,   298,
-   299,   300,  1500,   301,   302,   303,   304,   305,   306,   307,
+   299,   300,  1470,   301,   302,   303,   304,   305,   306,   307,
    308,   309,     0,     0,     0,     0,     0,   310,   296,   297,
-   298,   299,   300,  1501,   301,   302,   303,   304,   305,   306,
+   298,   299,   300,  1471,   301,   302,   303,   304,   305,   306,
    307,   308,   309,     0,     0,     0,     0,     0,   310,   296,
-   297,   298,   299,   300,  1502,   301,   302,   303,   304,   305,
+   297,   298,   299,   300,  1472,   301,   302,   303,   304,   305,
    306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-   296,   297,   298,   299,   300,  1503,   301,   302,   303,   304,
+   296,   297,   298,   299,   300,  1473,   301,   302,   303,   304,
    305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,   296,   297,   298,   299,   300,  1526,   301,   302,   303,
+   310,   296,   297,   298,   299,   300,  1521,   301,   302,   303,
    304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,   296,   297,   298,   299,   300,  1531,   301,   302,
+     0,   310,   296,   297,   298,   299,   300,  1525,   301,   302,
    303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,   296,   297,   298,   299,   300,  1532,   301,
+     0,     0,   310,   296,   297,   298,   299,   300,  1526,   301,
    302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,   296,   297,   298,   299,   300,  1533,
+     0,     0,     0,   310,   296,   297,   298,   299,   300,  1527,
    301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
      0,     0,     0,     0,   310,   296,   297,   298,   299,   300,
-  1534,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+  1528,   301,   302,   303,   304,   305,   306,   307,   308,   309,
      0,     0,     0,     0,     0,   310,   296,   297,   298,   299,
-   300,  1535,   301,   302,   303,   304,   305,   306,   307,   308,
+   300,  1529,   301,   302,   303,   304,   305,   306,   307,   308,
    309,     0,     0,     0,     0,     0,   310,   296,   297,   298,
-   299,   300,  1536,   301,   302,   303,   304,   305,   306,   307,
+   299,   300,  1530,   301,   302,   303,   304,   305,   306,   307,
    308,   309,     0,     0,     0,     0,     0,   310,   296,   297,
-   298,   299,   300,  1559,   301,   302,   303,   304,   305,   306,
+   298,   299,   300,  1555,   301,   302,   303,   304,   305,   306,
    307,   308,   309,     0,     0,     0,     0,     0,   310,   296,
    297,   298,   299,   300,  1560,   301,   302,   303,   304,   305,
    306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
@@ -1662,486 +1676,518 @@ static const short yytable[] = {   135,
    303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
      0,     0,   310,   296,   297,   298,   299,   300,  1564,   301,
    302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,   296,   297,   298,   299,   300,  1587,
+     0,     0,     0,   310,   296,   297,   298,   299,   300,  1565,
    301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
      0,     0,     0,     0,   310,   296,   297,   298,   299,   300,
   1588,   301,   302,   303,   304,   305,   306,   307,   308,   309,
      0,     0,     0,     0,     0,   310,   296,   297,   298,   299,
    300,  1589,   301,   302,   303,   304,   305,   306,   307,   308,
    309,     0,     0,     0,     0,     0,   310,   296,   297,   298,
-   299,   300,  1601,   301,   302,   303,   304,   305,   306,   307,
+   299,   300,  1590,   301,   302,   303,   304,   305,   306,   307,
    308,   309,     0,     0,     0,     0,     0,   310,   296,   297,
-   298,   299,   300,  1602,   301,   302,   303,   304,   305,   306,
+   298,   299,   300,  1591,   301,   302,   303,   304,   305,   306,
    307,   308,   309,     0,     0,     0,     0,     0,   310,   296,
-   297,   298,   299,   300,  1603,   301,   302,   303,   304,   305,
+   297,   298,   299,   300,  1592,   301,   302,   303,   304,   305,
    306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-   296,   297,   298,   299,   300,  1618,   301,   302,   303,   304,
+   296,   297,   298,   299,   300,  1593,   301,   302,   303,   304,
    305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,   296,   297,   298,   299,   300,  1619,   301,   302,   303,
+   310,   296,   297,   298,   299,   300,  1616,   301,   302,   303,
    304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,   296,   297,   298,   299,   300,  1620,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,     0,     0,     0,   587,   296,   297,   298,
-   299,   300,     0,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,     0,     0,
-     0,   620,   296,   297,   298,   299,   300,     0,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,     0,     0,     0,   622,   296,   297,   298,
-   299,   300,     0,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,     0,     0,
-     0,   624,   296,   297,   298,   299,   300,     0,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,     0,     0,     0,   626,   296,   297,   298,
-   299,   300,     0,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,     0,     0,
-     0,   628,   296,   297,   298,   299,   300,     0,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,     0,     0,     0,   630,   296,   297,   298,
-   299,   300,     0,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,     0,     0,
-     0,   632,   296,   297,   298,   299,   300,     0,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,     0,     0,     0,   634,   296,   297,   298,
-   299,   300,     0,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,     0,     0,
-     0,   636,   296,   297,   298,   299,   300,     0,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,     0,     0,     0,   638,   296,   297,   298,
-   299,   300,     0,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,     0,     0,
-     0,   640,   296,   297,   298,   299,   300,     0,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,     0,     0,     0,   644,   296,   297,   298,
-   299,   300,     0,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,     0,     0,
-     0,   646,   296,   297,   298,   299,   300,     0,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,     0,     0,     0,   648,   296,   297,   298,
-   299,   300,     0,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,     0,     0,
-     0,   650,   296,   297,   298,   299,   300,     0,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,     0,     0,     0,   652,   296,   297,   298,
-   299,   300,     0,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,     0,     0,
-     0,   654,   296,   297,   298,   299,   300,     0,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,     0,     0,     0,   724,   296,   297,   298,
-   299,   300,     0,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,     0,     0,
-     0,   922,   296,   297,   298,   299,   300,     0,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,     0,     0,     0,   924,   296,   297,   298,
-   299,   300,     0,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,     0,     0,
-     0,   926,   296,   297,   298,   299,   300,     0,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,     0,     0,     0,   928,   296,   297,   298,
-   299,   300,     0,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,     0,     0,
-     0,   929,   296,   297,   298,   299,   300,     0,   301,   302,
+     0,   310,   296,   297,   298,   299,   300,  1617,   301,   302,
    303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,     0,     0,     0,  1052,   296,   297,   298,
-   299,   300,     0,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,     0,   492,
-   296,   297,   298,   299,   300,     0,   301,   302,   303,   304,
-   305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,     0,   493,   296,   297,   298,   299,   300,     0,   301,
+     0,     0,   310,   296,   297,   298,   299,   300,  1618,   301,
    302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,     0,   495,   296,   297,   298,   299,
-   300,     0,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,     0,     0,     0,     0,     0,   310,     0,   499,   296,
+     0,     0,     0,   310,   296,   297,   298,   299,   300,  1630,
+   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
+     0,     0,     0,     0,   310,   296,   297,   298,   299,   300,
+  1631,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+     0,     0,     0,     0,     0,   310,   296,   297,   298,   299,
+   300,  1632,   301,   302,   303,   304,   305,   306,   307,   308,
+   309,     0,     0,     0,     0,     0,   310,   296,   297,   298,
+   299,   300,  1647,   301,   302,   303,   304,   305,   306,   307,
+   308,   309,     0,     0,     0,     0,     0,   310,   296,   297,
+   298,   299,   300,  1648,   301,   302,   303,   304,   305,   306,
+   307,   308,   309,     0,     0,     0,     0,     0,   310,   296,
+   297,   298,   299,   300,  1649,   301,   302,   303,   304,   305,
+   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
+     0,     0,     0,   466,   296,   297,   298,   299,   300,     0,
+   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
+     0,     0,     0,     0,   310,     0,     0,     0,   587,   296,
+   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
+   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
+     0,     0,     0,   620,   296,   297,   298,   299,   300,     0,
+   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
+     0,     0,     0,     0,   310,     0,     0,     0,   622,   296,
+   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
+   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
+     0,     0,     0,   624,   296,   297,   298,   299,   300,     0,
+   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
+     0,     0,     0,     0,   310,     0,     0,     0,   626,   296,
+   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
+   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
+     0,     0,     0,   628,   296,   297,   298,   299,   300,     0,
+   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
+     0,     0,     0,     0,   310,     0,     0,     0,   630,   296,
+   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
+   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
+     0,     0,     0,   632,   296,   297,   298,   299,   300,     0,
+   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
+     0,     0,     0,     0,   310,     0,     0,     0,   634,   296,
+   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
+   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
+     0,     0,     0,   636,   296,   297,   298,   299,   300,     0,
+   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
+     0,     0,     0,     0,   310,     0,     0,     0,   638,   296,
+   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
+   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
+     0,     0,     0,   640,   296,   297,   298,   299,   300,     0,
+   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
+     0,     0,     0,     0,   310,     0,     0,     0,   644,   296,
+   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
+   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
+     0,     0,     0,   646,   296,   297,   298,   299,   300,     0,
+   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
+     0,     0,     0,     0,   310,     0,     0,     0,   648,   296,
+   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
+   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
+     0,     0,     0,   650,   296,   297,   298,   299,   300,     0,
+   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
+     0,     0,     0,     0,   310,     0,     0,     0,   652,   296,
+   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
+   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
+     0,     0,     0,   654,   296,   297,   298,   299,   300,     0,
+   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
+     0,     0,     0,     0,   310,     0,     0,     0,   724,   296,
+   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
+   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
+     0,     0,     0,   922,   296,   297,   298,   299,   300,     0,
+   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
+     0,     0,     0,     0,   310,     0,     0,     0,   924,   296,
+   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
+   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
+     0,     0,     0,   926,   296,   297,   298,   299,   300,     0,
+   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
+     0,     0,     0,     0,   310,     0,     0,     0,   928,   296,
+   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
+   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
+     0,     0,     0,   929,   296,   297,   298,   299,   300,     0,
+   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
+     0,     0,     0,     0,   310,     0,     0,     0,  1052,   296,
    297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
    306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-     0,   500,   296,   297,   298,   299,   300,     0,   301,   302,
+     0,   490,   296,   297,   298,   299,   300,     0,   301,   302,
    303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,     0,   507,   296,   297,   298,   299,   300,
+     0,     0,   310,     0,   492,   296,   297,   298,   299,   300,
      0,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     0,     0,     0,     0,     0,   310,     0,   542,   296,   297,
+     0,     0,     0,     0,     0,   310,     0,   493,   296,   297,
    298,   299,   300,     0,   301,   302,   303,   304,   305,   306,
    307,   308,   309,     0,     0,     0,     0,     0,   310,     0,
-   543,   296,   297,   298,   299,   300,     0,   301,   302,   303,
+   495,   296,   297,   298,   299,   300,     0,   301,   302,   303,
    304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,     0,   546,   296,   297,   298,   299,   300,     0,
+     0,   310,     0,   499,   296,   297,   298,   299,   300,     0,
    301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,     0,   549,   296,   297,   298,
+     0,     0,     0,     0,   310,     0,   500,   296,   297,   298,
    299,   300,     0,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,     0,   619,
+   308,   309,     0,     0,     0,     0,     0,   310,     0,   507,
    296,   297,   298,   299,   300,     0,   301,   302,   303,   304,
    305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,     0,   621,   296,   297,   298,   299,   300,     0,   301,
+   310,     0,   542,   296,   297,   298,   299,   300,     0,   301,
    302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,     0,   623,   296,   297,   298,   299,
+     0,     0,     0,   310,     0,   543,   296,   297,   298,   299,
    300,     0,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,     0,     0,     0,     0,     0,   310,     0,   625,   296,
+   309,     0,     0,     0,     0,     0,   310,     0,   546,   296,
    297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
    306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-     0,   627,   296,   297,   298,   299,   300,     0,   301,   302,
+     0,   549,   296,   297,   298,   299,   300,     0,   301,   302,
    303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,     0,   629,   296,   297,   298,   299,   300,
+     0,     0,   310,     0,   619,   296,   297,   298,   299,   300,
      0,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     0,     0,     0,     0,     0,   310,     0,   631,   296,   297,
+     0,     0,     0,     0,     0,   310,     0,   621,   296,   297,
    298,   299,   300,     0,   301,   302,   303,   304,   305,   306,
    307,   308,   309,     0,     0,     0,     0,     0,   310,     0,
-   633,   296,   297,   298,   299,   300,     0,   301,   302,   303,
+   623,   296,   297,   298,   299,   300,     0,   301,   302,   303,
    304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,     0,   635,   296,   297,   298,   299,   300,     0,
+     0,   310,     0,   625,   296,   297,   298,   299,   300,     0,
    301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,     0,   637,   296,   297,   298,
+     0,     0,     0,     0,   310,     0,   627,   296,   297,   298,
    299,   300,     0,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,     0,   639,
+   308,   309,     0,     0,     0,     0,     0,   310,     0,   629,
    296,   297,   298,   299,   300,     0,   301,   302,   303,   304,
    305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,     0,   643,   296,   297,   298,   299,   300,     0,   301,
+   310,     0,   631,   296,   297,   298,   299,   300,     0,   301,
    302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,     0,   645,   296,   297,   298,   299,
+     0,     0,     0,   310,     0,   633,   296,   297,   298,   299,
    300,     0,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,     0,     0,     0,     0,     0,   310,     0,   647,   296,
+   309,     0,     0,     0,     0,     0,   310,     0,   635,   296,
    297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
    306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-     0,   649,   296,   297,   298,   299,   300,     0,   301,   302,
+     0,   637,   296,   297,   298,   299,   300,     0,   301,   302,
    303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,     0,   651,   296,   297,   298,   299,   300,
+     0,     0,   310,     0,   639,   296,   297,   298,   299,   300,
      0,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     0,     0,     0,     0,     0,   310,     0,   653,   296,   297,
+     0,     0,     0,     0,     0,   310,     0,   643,   296,   297,
    298,   299,   300,     0,   301,   302,   303,   304,   305,   306,
    307,   308,   309,     0,     0,     0,     0,     0,   310,     0,
-   687,   296,   297,   298,   299,   300,     0,   301,   302,   303,
+   645,   296,   297,   298,   299,   300,     0,   301,   302,   303,
    304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,     0,   690,   296,   297,   298,   299,   300,     0,
+     0,   310,     0,   647,   296,   297,   298,   299,   300,     0,
    301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,     0,   703,   296,   297,   298,
+     0,     0,     0,     0,   310,     0,   649,   296,   297,   298,
    299,   300,     0,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,     0,   704,
+   308,   309,     0,     0,     0,     0,     0,   310,     0,   651,
    296,   297,   298,   299,   300,     0,   301,   302,   303,   304,
    305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,     0,   708,   296,   297,   298,   299,   300,     0,   301,
+   310,     0,   653,   296,   297,   298,   299,   300,     0,   301,
    302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,     0,   709,   296,   297,   298,   299,
+     0,     0,     0,   310,     0,   687,   296,   297,   298,   299,
    300,     0,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,     0,     0,     0,     0,     0,   310,     0,   710,   296,
+   309,     0,     0,     0,     0,     0,   310,     0,   690,   296,
    297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
    306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-     0,   711,   296,   297,   298,   299,   300,     0,   301,   302,
+     0,   703,   296,   297,   298,   299,   300,     0,   301,   302,
    303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,     0,   712,   296,   297,   298,   299,   300,
+     0,     0,   310,     0,   704,   296,   297,   298,   299,   300,
      0,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     0,     0,     0,     0,     0,   310,     0,   730,   296,   297,
+     0,     0,     0,     0,     0,   310,     0,   708,   296,   297,
    298,   299,   300,     0,   301,   302,   303,   304,   305,   306,
    307,   308,   309,     0,     0,     0,     0,     0,   310,     0,
-   734,   296,   297,   298,   299,   300,     0,   301,   302,   303,
+   709,   296,   297,   298,   299,   300,     0,   301,   302,   303,
    304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,     0,   921,   296,   297,   298,   299,   300,     0,
+     0,   310,     0,   710,   296,   297,   298,   299,   300,     0,
    301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,     0,   923,   296,   297,   298,
+     0,     0,     0,     0,   310,     0,   711,   296,   297,   298,
    299,   300,     0,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,     0,   925,
+   308,   309,     0,     0,     0,     0,     0,   310,     0,   712,
    296,   297,   298,   299,   300,     0,   301,   302,   303,   304,
    305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,     0,   927,   296,   297,   298,   299,   300,     0,   301,
+   310,     0,   730,   296,   297,   298,   299,   300,     0,   301,
    302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,     0,   988,   296,   297,   298,   299,
+     0,     0,     0,   310,     0,   734,   296,   297,   298,   299,
    300,     0,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,     0,     0,     0,     0,     0,   310,     0,  1077,   296,
+   309,     0,     0,     0,     0,     0,   310,     0,   921,   296,
    297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
    306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-     0,  1099,   296,   297,   298,   299,   300,     0,   301,   302,
+     0,   923,   296,   297,   298,   299,   300,     0,   301,   302,
    303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,     0,  1189,   296,   297,   298,   299,   300,
+     0,     0,   310,     0,   925,   296,   297,   298,   299,   300,
      0,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     0,     0,     0,     0,     0,   310,     0,  1193,   296,   297,
+     0,     0,     0,     0,     0,   310,     0,   927,   296,   297,
    298,   299,   300,     0,   301,   302,   303,   304,   305,   306,
    307,   308,   309,     0,     0,     0,     0,     0,   310,     0,
-  1195,   296,   297,   298,   299,   300,     0,   301,   302,   303,
+   988,   296,   297,   298,   299,   300,     0,   301,   302,   303,
    304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,     0,  1306,   296,   297,   298,   299,   300,     0,
+     0,   310,     0,  1077,   296,   297,   298,   299,   300,     0,
    301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,     0,  1308,   296,   297,   298,
+     0,     0,     0,     0,   310,     0,  1099,   296,   297,   298,
    299,   300,     0,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,     0,  1310,
+   308,   309,     0,     0,     0,     0,     0,   310,     0,  1189,
    296,   297,   298,   299,   300,     0,   301,   302,   303,   304,
    305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,     0,  1321,   296,   297,   298,   299,   300,     0,   301,
+   310,     0,  1193,   296,   297,   298,   299,   300,     0,   301,
    302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,     0,  1322,   296,   297,   298,   299,
+     0,     0,     0,   310,     0,  1195,   296,   297,   298,   299,
    300,     0,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,     0,     0,     0,     0,     0,   310,     0,  1323,   296,
+   309,     0,     0,     0,     0,     0,   310,     0,  1316,   296,
    297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
    306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-     0,  1324,   296,   297,   298,   299,   300,     0,   301,   302,
+     0,  1318,   296,   297,   298,   299,   300,     0,   301,   302,
    303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,     0,  1397,   296,   297,   298,   299,   300,
+     0,     0,   310,     0,  1320,   296,   297,   298,   299,   300,
      0,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     0,     0,     0,     0,     0,   310,     0,  1504,   296,   297,
+     0,     0,     0,     0,     0,   310,     0,  1331,   296,   297,
    298,   299,   300,     0,   301,   302,   303,   304,   305,   306,
    307,   308,   309,     0,     0,     0,     0,     0,   310,     0,
-  1505,   296,   297,   298,   299,   300,     0,   301,   302,   303,
+  1332,   296,   297,   298,   299,   300,     0,   301,   302,   303,
    304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,     0,  1506,   296,   297,   298,   299,   300,     0,
+     0,   310,     0,  1333,   296,   297,   298,   299,   300,     0,
    301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,     0,  1590,   296,   297,   298,
+     0,     0,     0,     0,   310,     0,  1334,   296,   297,   298,
    299,   300,     0,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,     0,  1591,
+   308,   309,     0,     0,     0,     0,     0,   310,     0,  1413,
    296,   297,   298,   299,   300,     0,   301,   302,   303,   304,
    305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,     0,  1592,   296,   297,   298,   299,   300,     0,   301,
+   310,     0,  1531,   296,   297,   298,   299,   300,     0,   301,
    302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,     0,  1638,   296,   297,   298,   299,
+     0,     0,     0,   310,     0,  1532,   296,   297,   298,   299,
    300,     0,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,     0,     0,     0,     0,     0,   310,     0,  1639,   296,
+   309,     0,     0,     0,     0,     0,   310,     0,  1533,   296,
    297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
    306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-     0,  1640
+     0,  1619,   296,   297,   298,   299,   300,     0,   301,   302,
+   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
+     0,     0,   310,     0,  1620,   296,   297,   298,   299,   300,
+     0,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+     0,     0,     0,     0,     0,   310,     0,  1621,   296,   297,
+   298,   299,   300,     0,   301,   302,   303,   304,   305,   306,
+   307,   308,   309,     0,     0,     0,     0,     0,   310,     0,
+  1667,   296,   297,   298,   299,   300,     0,   301,   302,   303,
+   304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
+     0,   310,     0,  1668,   296,   297,   298,   299,   300,     0,
+   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
+     0,     0,     0,     0,   310,     0,  1669,   296,   297,   298,
+   299,   300,     0,   301,   302,   303,   304,   305,   306,   307,
+   308,   309,     0,     0,     0,     0,     0,   310
 };
 
 static const short yycheck[] = {    23,
-   280,   281,   282,    88,    23,   290,   326,     4,   810,  1170,
-     3,     4,     4,     3,    44,   351,     9,    10,    11,    12,
-    13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-    23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-    42,  1231,     6,     4,  1234,    89,    64,  1091,    65,    65,
-    64,     7,    65,    70,    70,   288,     6,    70,     4,   171,
-   172,    65,   171,   172,     4,     5,    70,    65,   171,   172,
-   171,   172,    70,     4,     4,   187,   152,   189,   187,    80,
-   189,     4,  1005,     5,   187,     6,   189,   188,   171,   172,
-   182,  1014,   184,   326,    34,    35,    36,     6,  1021,    49,
-     7,   125,   126,   127,   182,   188,   130,   131,     6,   133,
-   188,   103,    34,    35,    36,     6,   140,   141,   142,   143,
-   182,   145,   146,   182,   148,   149,   150,    38,   152,   188,
-    41,    92,    93,   171,   172,   165,   166,   167,   182,  1183,
-   171,   172,   944,   173,   168,   169,    92,    93,     6,     7,
-   188,   182,    38,     7,     6,    41,    42,   188,    44,   171,
-   172,     6,   186,   187,   182,   189,     6,   191,   192,   489,
-   188,   182,   189,   189,   188,   187,   189,   182,   171,   172,
-   182,   466,   172,   503,   177,   189,   177,   467,   182,   182,
-   181,   188,   185,   171,   172,   188,   188,   198,   178,   179,
-     8,   157,   158,   159,   160,   183,   236,   171,   172,   233,
-  1400,  1372,  1402,  1374,   238,   239,   240,   241,   242,   243,
+   280,   281,   282,    88,    23,   290,   326,  1236,     4,   810,
+     4,  1240,     4,     4,     4,   351,     3,    42,  1091,    89,
+  1005,     6,   182,     7,     6,     4,    65,     3,   188,  1014,
+    65,    70,    64,   171,   172,    70,  1021,    64,     6,     6,
+     5,     4,    65,     4,     5,   171,   172,    70,   183,   187,
+  1170,   189,   187,    65,    80,    65,    65,   183,    70,   152,
+    70,    70,   171,   172,    49,   171,   172,    65,     7,    34,
+    35,    36,    70,    34,    35,    36,    38,   183,   187,    41,
+   189,   171,   172,    71,    72,    73,    74,    75,    76,    77,
+    78,    79,    80,    81,    82,    83,    84,   187,   182,   189,
+   184,   125,   126,   127,   288,     6,   130,   131,     6,   133,
+  1183,   103,   182,    92,    93,     6,   140,   141,   142,   143,
+     6,   145,   146,   183,   148,   149,   150,   187,   152,    92,
+    93,   171,   172,   173,   174,   175,   107,   108,   109,   110,
+   111,   181,   326,   944,   168,   169,   122,   123,   124,   125,
+   126,   127,   128,   129,   189,   182,   188,   182,     6,     7,
+   177,   188,   186,   187,   181,   189,   189,   191,   192,   489,
+   178,   179,   198,   157,   158,   159,   160,   189,   186,   189,
+   189,   466,   182,   503,   184,   172,   182,   467,  1417,   171,
+   172,   189,  1421,   182,   188,   184,   188,   188,   188,  1184,
+     8,   189,   182,  1188,   171,   172,    46,    38,   188,   233,
+    41,    42,     6,    44,   238,   239,   240,   241,   242,   243,
    244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
    254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
    264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
-   274,   275,   276,   277,   278,   279,   489,   188,   188,   182,
-     6,  1184,   171,   172,   288,  1188,    41,    42,   182,    44,
-   503,   290,   296,   297,   298,   299,   300,   301,   302,   303,
-   304,   305,   306,   307,   308,   309,   310,     3,   182,     7,
-   184,   178,   179,   317,   171,   172,   320,   184,   182,   186,
-     7,   325,   326,   157,   158,   159,   160,   331,   332,   333,
-   187,   335,   336,   337,   338,   339,   340,   341,   348,   349,
-   171,   172,   171,   172,   178,   179,   182,   171,   172,   353,
-   354,   355,   186,   183,   358,   182,   187,   187,   187,   171,
-   172,   183,   366,   187,   664,   187,   183,    46,   372,  1151,
-   187,   183,   182,   161,   162,   163,   164,   165,    42,   167,
-   168,   169,   170,   171,   172,   173,   174,   175,   178,   179,
-   171,   172,    44,   181,   184,   695,   186,  1300,  1301,  1302,
-  1303,   189,   178,   179,  1307,   665,   187,   151,   184,    42,
-   186,   410,   156,   171,   172,   173,   174,   175,    42,    58,
-    59,    60,    61,   181,    63,   182,   122,   123,   124,   125,
-   126,   127,   128,   129,   178,   182,   182,   184,   184,     6,
-   184,   185,   167,   168,   169,   170,   171,   172,   173,   174,
-   175,   664,   184,   183,   186,   668,   181,   187,   462,   157,
-   158,   159,   160,   182,   468,   184,   182,   466,   184,     8,
-   157,   158,   159,   160,    38,  1378,  1379,    41,    42,  1382,
-   178,   179,   695,   188,   187,   489,   189,    54,   173,   174,
-   175,   178,   179,   187,   183,   189,   181,   501,   187,   503,
-   188,   505,   506,   178,   179,   183,   182,   511,   184,   187,
-   520,   186,   107,   108,   109,   110,   111,   521,   522,   182,
-   182,   184,   184,   182,   182,   184,   530,   188,   182,   829,
-   184,    42,   182,   537,   184,  1438,     6,   802,   803,   182,
-   182,   184,   184,   547,   548,   163,   164,   165,     6,   167,
-   168,   169,   170,   171,   172,   173,   174,   175,     3,     4,
-   182,   182,   184,   181,     9,    10,    11,    12,    13,    14,
-    15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-    25,    26,    27,    28,    29,    30,    31,    32,   587,     6,
-   182,   182,   184,  1496,   161,   162,   163,   164,   165,     6,
-   167,   168,   169,   170,   171,   172,   173,   174,   175,   182,
-   182,   184,   184,   182,   181,   184,   829,   182,     4,   184,
-    55,    56,   161,   162,   163,   164,   165,  1530,   167,   168,
-   169,   170,   171,   172,   173,   174,   175,   641,   642,   182,
-     4,   184,   181,   187,   183,   189,   187,   187,   189,   189,
-    42,   655,   656,   657,   658,   659,   660,   661,     6,     7,
-   664,   977,     3,   187,   668,   189,   187,   671,   189,   187,
-   187,   189,   189,   683,   934,   182,   680,   164,   165,     5,
-   167,   168,   169,   170,   171,   172,   173,   174,   175,   182,
-   182,   695,   696,   187,   181,   189,   187,   187,   189,   189,
-     6,   182,   187,   768,   189,   187,     6,   189,     6,     5,
-   720,   721,   722,   973,  1617,   182,   187,   461,   189,   182,
-   188,   725,   726,   188,   188,   729,   171,   172,   187,   739,
-   189,   182,   177,   737,   738,     6,   182,   182,   748,   187,
-   185,   189,   182,   188,   161,   162,   163,   164,   165,   182,
-   167,   168,   169,   170,   171,   172,   173,   174,   175,     6,
-   187,   187,   189,   189,   181,   187,   182,   189,   772,   773,
+   274,   275,   276,   277,   278,   279,  1485,   178,   179,   182,
+  1489,   184,   182,   184,   288,   186,  1386,   178,   179,  1389,
+     7,   290,   296,   297,   298,   299,   300,   301,   302,   303,
+   304,   305,   306,   307,   308,   309,   310,   171,   172,   171,
+   172,   178,   179,   317,   182,     6,   320,   184,   182,   186,
+     3,   325,   326,   182,   188,   489,   188,   331,   332,   333,
+   182,   335,   336,   337,   338,   339,   340,   341,     6,   503,
+   183,     7,   171,   172,   187,  1310,  1311,  1312,  1313,   353,
+   354,   355,  1317,  1453,   358,   171,   172,  1457,   182,   188,
+   184,   183,   366,    54,   664,   187,    55,    56,   372,     7,
+  1151,    42,   188,   161,   162,   163,   164,   165,   182,   167,
+   168,   169,   170,   171,   172,   173,   174,   175,   171,   172,
+   183,   171,   172,   181,   187,   695,    38,   182,   151,    41,
+    42,   189,    42,   156,   187,   665,     8,   187,   163,   164,
+   165,   410,   167,   168,   169,   170,   171,   172,   173,   174,
+   175,   171,   172,    43,    44,   178,   181,     6,     7,  1394,
+  1395,   184,   185,  1398,     6,   171,   172,   187,   171,   172,
+   157,   158,   159,   160,   171,   172,    42,   171,   172,   171,
+   172,   187,   171,   172,   187,   183,     6,   182,   462,   187,
+   187,   178,   179,   187,   468,   187,   182,   466,   187,   186,
+   161,   162,   163,   164,   165,   182,   167,   168,   169,   170,
+   171,   172,   173,   174,   175,   489,    44,   173,   174,   175,
+   181,   157,   158,   159,   160,   181,  1461,   501,   182,   503,
+   664,   505,   506,   182,   668,   184,   188,   511,   178,   179,
+   188,   188,   178,   179,   184,    42,   186,   521,   522,   157,
+   158,   159,   160,   182,    41,    42,   530,    44,   182,   829,
+   184,   695,   182,   537,   184,     6,     6,   802,   803,   182,
+   178,   179,     6,   547,   548,   165,   182,   167,   184,    58,
+    59,    60,    61,   173,    63,   182,   182,   184,  1523,   161,
+   162,   163,   164,   165,     4,   167,   168,   169,   170,   171,
+   172,   173,   174,   175,   182,   182,   184,   184,   182,   181,
+   184,   183,   182,   182,   184,   184,     4,    42,   587,   161,
+   162,   163,   164,   165,  1559,   167,   168,   169,   170,   171,
+   172,   173,   174,   175,   182,   182,   184,   184,   182,   181,
+   184,   161,   162,   163,   164,   165,   236,   167,   168,   169,
+   170,   171,   172,   173,   174,   175,   182,     6,   184,     5,
+   182,   181,   184,   182,   187,   184,   189,   641,   642,   184,
+   187,   186,   189,   187,   187,   189,   189,   187,   187,   189,
+   189,   655,   656,   657,   658,   659,   660,   661,   182,   182,
+   664,   977,   182,   182,   668,   829,   187,   671,   189,   187,
+     6,   189,     6,   187,   934,   189,   680,     5,   182,   164,
+   165,  1646,   167,   168,   169,   170,   171,   172,   173,   174,
+   175,   695,   696,   187,   182,   189,   181,   187,   187,   189,
+   189,   188,   182,   768,   187,   184,   189,     6,   461,   187,
+   187,   189,   189,   973,   187,   187,   189,   189,   187,   182,
+   189,   725,   726,   188,     8,   729,   188,     4,   348,   349,
+     3,     4,   182,   737,   738,   182,     9,    10,    11,    12,
+    13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+    23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+   187,     6,   189,   187,   187,   189,   189,   182,   772,   773,
    774,   775,   776,   777,   778,   779,   780,   781,   782,   783,
-   784,   785,   187,   187,   189,   189,    38,    39,    40,    41,
-    42,    43,    44,    45,   182,    47,     4,    49,    50,   182,
-    52,    53,     6,   188,   803,   184,   188,   811,   188,   813,
-    95,     6,   182,   182,   182,   182,   182,    69,     5,   182,
-   182,   182,   182,   182,   182,   829,   182,   831,   182,   833,
-   182,   182,   182,    85,    86,    87,   182,   182,   182,   182,
-   182,     4,   182,   847,   848,   849,   182,  1163,   182,   182,
-   182,   182,   182,   182,   182,   182,     7,   181,   183,   863,
-   864,   161,   162,   163,   164,   165,   187,   167,   168,   169,
-   170,   171,   172,   173,   174,   175,   187,   186,     7,     7,
-     7,   181,   183,     7,     7,    90,   867,   153,     5,   188,
-   161,   162,   163,   164,   165,   147,   167,   168,   169,   170,
-   171,   172,   173,   174,   175,     5,   905,     5,     5,     5,
-   181,     5,     5,     5,   161,   162,   163,   164,   165,     5,
-   167,   168,   169,   170,   171,   172,   173,   174,   175,     5,
-     5,   935,     5,     5,   181,     5,     5,   189,     5,   949,
-     5,   685,   686,     5,   688,     5,   140,     6,   692,   693,
-     5,     5,     5,     5,     5,     5,     5,     5,     3,   963,
-   964,     5,  1027,     5,   187,     6,     5,   183,   978,   973,
-   980,     6,   982,     4,     6,   186,     6,   189,     7,     6,
-   984,   985,     7,   727,   728,     7,     7,   731,     6,     6,
-   189,   995,   188,     8,   998,     7,     7,     7,   188,     7,
-     7,   745,   746,   182,  1008,     7,   154,   751,   752,   187,
-   187,  1015,  1016,  1017,   758,   996,   760,   187,  1022,   187,
-   187,   187,  1026,   187,     5,   187,  1030,  1031,  1032,  1033,
-  1034,  1035,  1036,  1037,  1038,  1039,  1040,  1041,  1042,  1043,
-   187,   187,   187,   187,   187,   187,   187,   187,   187,   187,
-  1054,   187,   161,   162,   163,   164,   165,  1061,   167,   168,
-   169,   170,   171,   172,   173,   174,   175,     6,   187,   187,
-   183,   187,   181,   187,  1078,   187,   185,   187,   822,   187,
-   824,   187,   187,   187,   187,   187,     6,   182,     4,     6,
-   834,   835,   836,  1097,   182,   839,   840,   841,   842,   843,
-   844,   845,   161,   162,   163,   164,   165,   185,   167,   168,
-   169,   170,   171,   172,   173,   174,   175,     6,   182,   182,
-  1101,     6,   181,     6,   182,   182,   182,     7,     6,     4,
-     7,   161,   162,   163,   164,   165,  1396,   167,   168,   169,
-   170,   171,   172,   173,   174,   175,   161,   162,   163,   164,
-   165,   181,   167,   168,   169,   170,   171,   172,   173,   174,
-   175,   184,  1166,  1167,     7,  1169,   181,  1171,  1172,   182,
-     7,     7,   188,   182,  1178,     7,   182,   182,   182,   182,
-     7,   182,  1186,     7,     7,     7,     7,     7,     7,   933,
-  1194,     6,   150,     7,     7,  1199,     3,  1457,  1202,  1459,
-  1204,  1205,  1206,  1207,  1208,  1209,  1210,  1211,  1212,  1213,
-  1214,  1215,  1216,  1217,     3,     3,   173,     3,  1222,     3,
-     3,  1225,   161,   162,   163,   164,   165,     3,   167,   168,
-   169,   170,   171,   172,   173,   174,   175,     6,     3,     3,
-     3,     3,   181,     3,     3,     3,     3,  1507,   992,     5,
-     5,     3,     6,     6,     4,   999,   183,   183,   186,     7,
-     6,   186,  1243,     6,     6,     6,     6,   188,     6,     6,
-   188,     6,   187,    91,  1018,   187,   161,   162,   163,   164,
-   165,   183,   167,   168,   169,   170,   171,   172,   173,   174,
-   175,   187,   183,   187,   187,   183,   181,   187,     6,   183,
-   187,   183,     4,     6,   183,    92,   187,   183,  1312,  1313,
-  1314,  1315,  1316,  1317,  1318,  1319,  1320,   187,  1299,   187,
-   187,  1325,  1326,   187,   187,   187,   187,   187,   187,   187,
-   187,   187,     3,     4,   186,   185,     6,     6,     9,    10,
-    11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-    21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-    31,    32,  1343,     6,     6,     6,    71,    72,    73,    74,
-    75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-  1384,  1385,  1386,  1387,  1388,  1389,  1390,  1391,  1392,  1393,
-  1394,  1395,   161,   162,   163,   164,   165,     6,   167,   168,
+   784,   785,   161,   162,   163,   164,   165,   182,   167,   168,
+   169,   170,   171,   172,   173,   174,   175,   187,   182,   189,
+   188,   188,   181,   188,   803,     6,    95,   811,     6,   813,
+   161,   162,   163,   164,   165,   182,   167,   168,   169,   170,
+   171,   172,   173,   174,   175,   829,   182,   831,   182,   833,
+   181,     5,   182,   182,   182,   182,   187,   182,   189,   182,
+   182,   182,   182,   847,   848,   849,   183,  1163,   187,   182,
+   182,   182,   182,   182,     4,   182,   182,   182,   182,   863,
+   864,   867,   161,   162,   163,   164,   165,   182,   167,   168,
    169,   170,   171,   172,   173,   174,   175,   161,   162,   163,
    164,   165,   181,   167,   168,   169,   170,   171,   172,   173,
-   174,   175,     6,     6,  1405,     6,     6,   181,     6,     6,
-     6,  1175,  1436,  1177,     6,     6,  1180,     7,  1442,  1443,
-  1444,  1445,  1446,  1447,  1448,  1449,  1450,  1451,     3,  1453,
-     6,  1455,  1196,    91,     3,     4,  1437,     3,     6,   173,
+   174,   175,   182,   187,   182,   182,   182,   181,   171,   172,
+   520,   182,   182,   182,   177,   181,   905,   182,   182,   182,
+     7,     7,   185,     7,   186,   188,   161,   162,   163,   164,
+   165,     7,   167,   168,   169,   170,   171,   172,   173,   174,
+   175,   935,   685,   686,   183,   688,   181,     7,     7,   692,
+   693,    90,   188,   161,   162,   163,   164,   165,     6,   167,
+   168,   169,   170,   171,   172,   173,   174,   175,   153,   963,
+   964,     5,  1027,   181,     5,     5,     5,     5,     5,   973,
+     5,   189,     5,     5,   727,   728,     6,     5,   731,     5,
+   984,   985,     5,     5,     5,     5,     5,     5,     5,     5,
+   996,   995,   745,   746,   998,     5,     5,     5,   751,   752,
+     5,   140,     5,     5,  1008,   758,     5,   760,     5,     3,
+     5,  1015,  1016,  1017,     5,   187,     6,     5,  1022,   183,
+     6,     4,  1026,     7,     6,     6,  1030,  1031,  1032,  1033,
+  1034,  1035,  1036,  1037,  1038,  1039,  1040,  1041,  1042,  1043,
+   167,   168,   169,   170,   171,   172,   173,   174,   175,     7,
+  1054,     7,     7,     6,   181,     6,   186,  1061,     7,     7,
+     7,   189,   188,   683,   189,   188,     7,     7,   182,   822,
+     7,   824,   154,     5,  1078,   187,   187,   187,   187,   187,
+   187,   834,   835,   836,   187,   187,   839,   840,   841,   842,
+   843,   844,   845,  1097,     6,  1101,   187,   187,   187,   187,
+   720,   721,   722,   161,   162,   163,   164,   165,   187,   167,
+   168,   169,   170,   171,   172,   173,   174,   175,   182,   739,
+   187,   187,   187,   181,   187,   187,   187,   187,   748,   183,
+   187,   161,   162,   163,   164,   165,   187,   167,   168,   169,
+   170,   171,   172,   173,   174,   175,   182,     6,     4,     6,
+     4,   181,  1412,   187,     6,     6,   187,   182,   187,     7,
+   187,   185,  1166,  1167,     6,  1169,     7,  1171,  1172,   182,
+     7,     7,   187,   187,  1178,   187,   187,   184,     6,     6,
+   933,   187,  1186,     7,   182,     7,   182,   188,     7,   182,
+  1194,     7,     7,   182,     7,  1199,     7,   182,  1202,     7,
+  1204,  1205,  1206,  1207,  1208,  1209,  1210,  1211,  1212,  1213,
+  1214,  1215,  1216,  1217,   182,   182,   182,   182,  1222,   182,
+  1480,  1225,  1482,  1227,  1228,  1229,     7,     7,     7,   150,
+     3,     3,     3,     3,   173,     3,     3,     3,     3,   992,
+     3,     3,     3,  1249,     3,     3,   999,     3,     5,   161,
+   162,   163,   164,   165,     5,   167,   168,   169,   170,   171,
+   172,   173,   174,   175,     3,  1018,     3,   183,     6,   181,
+     4,   186,   183,     6,  1534,    71,    72,    73,    74,    75,
+    76,    77,    78,    79,    80,    81,    82,    83,    84,  1293,
+     7,  1295,   186,     6,     6,     6,     6,  1301,     6,   188,
+     6,     6,    91,  1309,   188,   187,   187,   183,   187,   183,
+   187,   183,   187,   183,   187,   183,   187,   183,  1322,  1323,
+  1324,  1325,  1326,  1327,  1328,  1329,  1330,   187,   183,   949,
+     6,  1335,  1336,   161,   162,   163,   164,   165,   187,   167,
+   168,   169,   170,   171,   172,   173,   174,   175,   187,   187,
+  1356,     6,   187,   181,   187,   187,   187,   187,   978,     4,
+   980,   187,   982,     3,     4,     6,   187,   187,   186,     9,
+    10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+    20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+    30,    31,    32,   189,   187,    92,  1400,  1401,  1402,  1403,
+  1404,  1405,  1406,  1407,  1408,  1409,  1410,  1411,     6,     6,
+   185,     6,     6,     6,     6,     6,     6,     6,     6,     6,
+  1426,     6,  1175,     6,  1177,     6,     6,  1180,   161,   162,
+   163,   164,   165,     7,   167,   168,   169,   170,   171,   172,
+   173,   174,   175,  1196,    91,     3,     6,     3,   181,     6,
+   173,     6,     6,     3,  1460,  1459,     3,     6,     6,     3,
+     6,  1465,  1466,  1467,  1468,  1469,  1470,  1471,  1472,  1473,
+  1474,     6,  1476,     3,  1478,     3,     3,     6,     4,   186,
+   189,     6,     6,     3,     4,     7,  1492,     6,   186,     9,
+    10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+    20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+    30,    31,    32,   185,     6,   188,  1520,  1521,   188,   188,
+   188,  1525,  1526,  1527,  1528,  1529,  1530,    88,   187,   183,
+   187,   171,   172,     8,   187,   183,   187,   177,   187,   183,
+   183,   187,   182,     4,  1297,   185,  1166,  1167,   188,  1169,
+   183,  1555,  1305,  1306,   183,   187,  1560,  1561,  1562,  1563,
+  1564,  1565,  1566,  1567,  1568,   183,   187,   183,    38,    39,
+    40,    41,    42,    43,    44,    45,    93,    47,    91,    49,
+    50,   150,    52,    53,  1588,  1589,  1590,  1591,  1592,  1593,
+  1594,     6,  1596,     3,  1598,     6,     3,     6,     6,    69,
+     6,     6,     6,     6,     6,     3,     6,     6,  1228,     5,
+     5,   189,  1616,  1617,  1618,    85,    86,    87,     6,   189,
+   188,   188,   187,   187,   187,   187,  1630,  1631,  1632,  1633,
+  1634,  1635,   183,     6,   187,  1388,     6,     6,  1391,     6,
+   183,   183,   187,  1647,  1648,  1649,  1650,   187,  1652,     6,
+  1654,   171,   172,     6,     6,     6,     6,   177,     6,     6,
+     6,     6,   182,     6,     6,   185,     5,     5,   188,   187,
+  1674,  1675,  1676,   188,   188,   187,     6,   147,   189,  1683,
+   187,  1685,   187,  1687,   183,   183,   161,   162,   163,   164,
+   165,   187,   167,   168,   169,   170,   171,   172,   173,   174,
+   175,  1454,   187,   187,     3,     4,   181,   188,   188,  1462,
      9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-    29,    30,    31,    32,   189,     6,  1467,     6,     3,  1493,
-  1494,     3,     6,     6,  1498,  1499,  1500,  1501,  1502,  1503,
-   171,   172,     6,     3,     6,     3,   177,     3,     3,     6,
-     4,   182,   186,     6,   185,     6,     6,   188,     7,   186,
-   185,     6,  1526,   189,   188,   188,   188,  1531,  1532,  1533,
-  1534,  1535,  1536,  1537,  1538,  1539,   188,    88,   183,   187,
-   187,   187,     4,   183,  1288,   150,    93,   183,   187,   183,
-   187,  1295,  1296,   183,   187,  1559,  1560,  1561,  1562,  1563,
-  1564,  1565,   183,  1567,   187,  1569,   183,   187,   183,     6,
-     6,    91,     3,     6,     6,     3,     6,     6,   189,     6,
-     6,     6,     6,  1587,  1588,  1589,     3,     6,     6,     5,
-     5,   188,     6,   188,   187,   189,   187,  1601,  1602,  1603,
-  1604,  1605,  1606,     6,     6,   187,     6,     6,   187,   183,
-   183,     6,   187,     6,  1618,  1619,  1620,  1621,   183,  1623,
-   187,  1625,   171,   172,   187,     6,     6,     6,   177,  1373,
-     6,  1375,     6,   182,     6,     6,     6,     5,     5,   188,
-    88,  1645,  1646,  1647,   188,   187,   189,   188,   187,   187,
-  1654,   187,  1656,   183,  1658,     3,     4,   183,   187,   187,
-   187,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-    18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-    28,    29,    30,    31,    32,   188,   150,   188,  1432,   188,
-     3,     4,     5,     5,     7,  1439,     9,    10,    11,    12,
-    13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-    23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-   188,    34,    35,    36,   161,   162,   163,   164,   165,     6,
-   167,   168,   169,   170,   171,   172,   173,   174,   175,     6,
-     5,   187,   189,   188,   181,   187,   189,   188,     3,     4,
-     5,    88,     6,  1497,     9,    10,    11,    12,    13,    14,
+    29,    30,    31,    32,     3,     4,   188,   188,     6,     6,
+     9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+    19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+    29,    30,    31,    32,    88,   150,     3,     4,     6,   188,
+     6,  1524,     9,    10,    11,    12,    13,    14,    15,    16,
+    17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+    27,    28,    29,    30,    31,    32,     5,     5,   188,     6,
+   189,   188,   183,   187,   187,  1558,   183,   189,   188,     6,
+     6,   161,   162,   163,   164,   165,    88,   167,   168,   169,
+   170,   171,   172,   173,   174,   175,     6,     6,     3,     4,
+     5,   181,     7,  1586,     9,    10,    11,    12,    13,    14,
     15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-    25,    26,    27,    28,    29,    30,    31,    32,   183,    34,
-    35,    36,     3,     4,     6,  1529,   183,     6,     9,    10,
+    25,    26,    27,    28,    29,    30,    31,    32,     6,    34,
+    35,    36,  1615,     6,     6,     6,     6,   189,   188,   187,
+   187,     6,   171,   172,     6,     6,  1629,   155,   177,     6,
+   156,   187,   187,   182,   161,   162,   163,   164,   165,   188,
+   167,   168,   169,   170,   171,   172,   173,   174,   175,   188,
+   188,   188,   171,   172,   181,     6,   187,     6,   177,   183,
+   187,     6,   189,   182,     6,     6,     6,   187,     6,   188,
+     6,   187,     6,   188,   188,   188,   187,   183,     6,   188,
+   188,   188,     6,     6,   171,   172,     6,     0,     0,   589,
+   177,     7,     7,     7,   990,   182,     3,     4,     5,    -1,
+    -1,   188,     9,    10,    11,    12,    13,    14,    15,    16,
+    17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+    27,    28,    29,    30,    31,    32,     8,    34,    35,    36,
+    -1,   938,   157,   158,   159,   160,    -1,    -1,    -1,    -1,
+    -1,     8,    -1,    -1,    -1,    -1,   171,   172,    -1,    -1,
+    -1,    -1,   177,   178,   179,    -1,     8,   182,    -1,   184,
+    -1,   186,     3,     4,    -1,    -1,    -1,    -1,     9,    10,
     11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-    31,    32,     6,  1557,     6,     6,     6,     6,     6,     6,
-   189,     6,   188,   171,   172,   187,   187,   155,     6,   177,
-   156,   187,   187,   187,   182,     8,   188,   188,   188,     6,
-   188,   183,  1586,     6,   157,   158,   159,   160,   187,     6,
-     8,     6,     6,     6,   187,   187,  1600,   188,   171,   172,
-     6,   188,     6,   188,   177,   178,   179,     6,   183,   182,
-   188,   184,     8,   186,     3,     4,     6,   188,   188,     6,
-     9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-    19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-    29,    30,    31,    32,     8,     6,     6,     0,     0,   589,
-     7,     7,     7,   990,   938,    -1,   171,   172,    -1,    -1,
-    -1,    -1,   177,    -1,    -1,    -1,    -1,   182,    71,    72,
-    73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   171,   172,    -1,    -1,    -1,    -1,   177,     3,     4,    -1,
-    -1,   182,    -1,     9,    10,    11,    12,    13,    14,    15,
-    16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-    26,    27,    28,    29,    30,    31,    32,    -1,   161,   162,
-   163,   164,   165,    -1,   167,   168,   169,   170,   171,   172,
-   173,   174,   175,   161,   162,   163,   164,   165,   181,   167,
-   168,   169,   170,   171,   172,   173,   174,   175,    -1,    -1,
-    -1,    -1,    -1,   181,    -1,   161,   162,   163,   164,   165,
+    31,    32,     3,     4,    -1,    -1,    -1,    -1,     9,    10,
+    11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+    21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+    31,    32,     3,     4,    -1,    -1,    -1,    -1,     9,    10,
+    11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+    21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   171,   172,    -1,    -1,    -1,    -1,
+   177,    -1,    -1,    -1,    -1,   182,    -1,    -1,    -1,   161,
+   162,   163,   164,   165,    -1,   167,   168,   169,   170,   171,
+   172,   173,   174,   175,   161,   162,   163,   164,   165,   181,
+   167,   168,   169,   170,   171,   172,   173,   174,   175,   161,
+   162,   163,   164,   165,   181,   167,   168,   169,   170,   171,
+   172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,
+   171,   172,    -1,    -1,    -1,    -1,   177,    -1,    -1,    -1,
+    -1,   182,   161,   162,   163,   164,   165,    -1,   167,   168,
+   169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
+   171,   172,   181,    -1,   183,    -1,   177,    -1,   187,     0,
+     1,   182,     3,     4,    -1,   161,   162,   163,   164,   165,
     -1,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-    -1,    -1,   171,   172,    -1,   181,   189,    -1,   177,    -1,
-    -1,    -1,    -1,   182,    -1,    -1,    -1,   161,   162,   163,
-   164,   165,    -1,   167,   168,   169,   170,   171,   172,   173,
-   174,   175,    -1,    -1,    -1,    -1,    -1,   181,    -1,    -1,
-    38,    39,    40,    41,    42,    43,    44,    45,    -1,    47,
-    -1,    49,    50,    -1,    52,    53,    -1,    -1,    -1,    -1,
-     0,     1,    -1,     3,     4,    -1,    -1,    -1,    -1,    -1,
-    -1,    69,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   171,   172,    85,    86,    87,
-    -1,   177,    -1,    33,    -1,    -1,   182,    37,    38,    39,
-    40,    41,    42,    43,    44,    45,    -1,    47,    48,    49,
-    50,    51,    52,    53,    -1,    -1,    -1,    57,    58,    59,
-    60,    61,    62,    63,    -1,    65,    66,    67,    68,    69,
-   161,   162,   163,   164,   165,    -1,   167,   168,   169,   170,
-   171,   172,   173,   174,   175,    85,    86,    87,    -1,   147,
-   181,    -1,   183,    -1,    94,    -1,    96,    97,    98,    99,
-   100,   101,   102,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   171,   172,    -1,    -1,    -1,   181,   177,    -1,    -1,    -1,
+    -1,   182,    33,   189,    -1,    -1,    37,    38,    39,    40,
+    41,    42,    43,    44,    45,    -1,    47,    48,    49,    50,
+    51,    52,    53,    -1,    -1,    -1,    57,    58,    59,    60,
+    61,    62,    63,    -1,    65,    66,    67,    68,    69,   161,
+   162,   163,   164,   165,    -1,   167,   168,   169,   170,   171,
+   172,   173,   174,   175,    85,    86,    87,    -1,    -1,   181,
+    -1,   183,    -1,    94,    -1,    96,    97,    98,    99,   100,
+   101,   102,    -1,    -1,    38,    39,    40,    41,    42,    43,
+    44,    45,    -1,    47,    -1,    49,    50,    -1,    52,    53,
+    -1,   122,   123,   124,   125,   126,   127,   128,   129,    -1,
+    -1,    -1,    -1,    -1,    -1,    69,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   147,   148,   149,    -1,
+   151,    85,    86,    87,    38,    39,    40,    41,    42,    43,
+    44,    45,    -1,    47,    -1,    49,    50,    -1,    52,    53,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,     4,   122,   123,   124,   125,   126,   127,   128,   129,
-    -1,   189,   161,   162,   163,   164,   165,    -1,   167,   168,
-   169,   170,   171,   172,   173,   174,   175,   147,   148,   149,
-    33,   151,   181,    -1,    37,    38,    39,    40,    41,    42,
-    43,    44,    45,    -1,    47,    48,    49,    50,    51,    52,
-    53,    -1,    -1,    -1,    57,    58,    59,    60,    61,    62,
-    63,    41,    65,    66,    67,    68,    69,   161,   162,   163,
-   164,   165,    -1,   167,   168,   169,   170,   171,   172,   173,
-   174,   175,    85,    86,    87,    -1,    -1,   181,    -1,   183,
-    -1,    94,    -1,    96,    97,    98,    99,   100,   101,   102,
-    38,    39,    40,    41,    42,    43,    44,    45,    -1,    47,
-    -1,    49,    50,    -1,    52,    53,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   104,   105,   106,    -1,    -1,    -1,
-    -1,    69,   112,   113,   114,   115,   116,   117,   118,   119,
-   120,   121,    -1,    -1,   147,    -1,    -1,    85,    86,    87,
-   130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-    -1,   141,   142,   143,   144,   145,   146,   161,   162,   163,
-   164,   165,    -1,   167,   168,   169,   170,   171,   172,   173,
-   174,   175,    -1,    -1,    -1,    -1,    -1,   181,    -1,    -1,
-    -1,    -1,    -1,   187,    -1,   189,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   161,   162,   163,   164,   165,   147,
-   167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
-    -1,    -1,    -1,    -1,   181,    -1,    -1,    -1,    -1,    -1,
-   187,    -1,   189,   161,   162,   163,   164,   165,    -1,   167,
+    -1,    -1,    -1,     4,    -1,    69,   161,   162,   163,   164,
+   165,    -1,   167,   168,   169,   170,   171,   172,   173,   174,
+   175,    85,    86,    87,    -1,    -1,   181,    -1,    -1,    -1,
+    -1,    -1,    33,   147,   189,    -1,    37,    38,    39,    40,
+    41,    42,    43,    44,    45,    -1,    47,    48,    49,    50,
+    51,    52,    53,    -1,    -1,    -1,    57,    58,    59,    60,
+    61,    62,    63,    41,    65,    66,    67,    68,    69,    -1,
+    -1,    -1,    -1,    -1,    -1,   189,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   147,    85,    86,    87,    -1,    -1,    -1,
+    -1,    -1,    -1,    94,    -1,    96,    97,    98,    99,   100,
+   101,   102,    -1,   161,   162,   163,   164,   165,    -1,   167,
    168,   169,   170,   171,   172,   173,   174,   175,    -1,    -1,
-    -1,    -1,    -1,   181,    -1,    -1,    -1,    -1,    -1,   187,
-    -1,   189,   161,   162,   163,   164,   165,    -1,   167,   168,
+    -1,    -1,    -1,   181,    -1,   189,   104,   105,   106,   187,
+    -1,   189,    -1,    -1,   112,   113,   114,   115,   116,   117,
+   118,   119,   120,   121,    -1,    -1,   147,    -1,    -1,    -1,
+    -1,    -1,   130,   131,   132,   133,   134,   135,   136,   137,
+   138,   139,    -1,   141,   142,   143,   144,   145,   146,   161,
+   162,   163,   164,   165,    -1,   167,   168,   169,   170,   171,
+   172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,
+    -1,    -1,   161,   162,   163,   164,   165,   189,   167,   168,
    169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
     -1,    -1,   181,    -1,    -1,   161,   162,   163,   164,   165,
    189,   167,   168,   169,   170,   171,   172,   173,   174,   175,
@@ -2182,8 +2228,12 @@ static const short yycheck[] = {    23,
    171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,
    181,    -1,    -1,   161,   162,   163,   164,   165,   189,   167,
    168,   169,   170,   171,   172,   173,   174,   175,    -1,    -1,
-    -1,    -1,    -1,   181,    -1,    -1,   161,   162,   163,   164,
-   165,   189,   167,   168,   169,   170,   171,   172,   173,   174,
+    -1,    -1,    -1,   181,   161,   162,   163,   164,   165,   187,
+   167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+    -1,    -1,    -1,    -1,   181,   161,   162,   163,   164,   165,
+   187,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+    -1,    -1,    -1,    -1,    -1,   181,   161,   162,   163,   164,
+   165,   187,   167,   168,   169,   170,   171,   172,   173,   174,
    175,    -1,    -1,    -1,    -1,    -1,   181,   161,   162,   163,
    164,   165,   187,   167,   168,   169,   170,   171,   172,   173,
    174,   175,    -1,    -1,    -1,    -1,    -1,   181,   161,   162,
@@ -2422,104 +2472,91 @@ static const short yycheck[] = {    23,
    173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,   161,
    162,   163,   164,   165,   187,   167,   168,   169,   170,   171,
    172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,
-   161,   162,   163,   164,   165,   187,   167,   168,   169,   170,
-   171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,
-   181,   161,   162,   163,   164,   165,   187,   167,   168,   169,
-   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,
-    -1,   181,   161,   162,   163,   164,   165,   187,   167,   168,
-   169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
-    -1,    -1,   181,    -1,    -1,    -1,   185,   161,   162,   163,
-   164,   165,    -1,   167,   168,   169,   170,   171,   172,   173,
-   174,   175,    -1,    -1,    -1,    -1,    -1,   181,    -1,    -1,
-    -1,   185,   161,   162,   163,   164,   165,    -1,   167,   168,
-   169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
-    -1,    -1,   181,    -1,    -1,    -1,   185,   161,   162,   163,
-   164,   165,    -1,   167,   168,   169,   170,   171,   172,   173,
-   174,   175,    -1,    -1,    -1,    -1,    -1,   181,    -1,    -1,
-    -1,   185,   161,   162,   163,   164,   165,    -1,   167,   168,
-   169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
-    -1,    -1,   181,    -1,    -1,    -1,   185,   161,   162,   163,
-   164,   165,    -1,   167,   168,   169,   170,   171,   172,   173,
-   174,   175,    -1,    -1,    -1,    -1,    -1,   181,    -1,    -1,
-    -1,   185,   161,   162,   163,   164,   165,    -1,   167,   168,
-   169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
-    -1,    -1,   181,    -1,    -1,    -1,   185,   161,   162,   163,
-   164,   165,    -1,   167,   168,   169,   170,   171,   172,   173,
-   174,   175,    -1,    -1,    -1,    -1,    -1,   181,    -1,    -1,
-    -1,   185,   161,   162,   163,   164,   165,    -1,   167,   168,
-   169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
-    -1,    -1,   181,    -1,    -1,    -1,   185,   161,   162,   163,
-   164,   165,    -1,   167,   168,   169,   170,   171,   172,   173,
-   174,   175,    -1,    -1,    -1,    -1,    -1,   181,    -1,    -1,
-    -1,   185,   161,   162,   163,   164,   165,    -1,   167,   168,
-   169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
-    -1,    -1,   181,    -1,    -1,    -1,   185,   161,   162,   163,
-   164,   165,    -1,   167,   168,   169,   170,   171,   172,   173,
-   174,   175,    -1,    -1,    -1,    -1,    -1,   181,    -1,    -1,
-    -1,   185,   161,   162,   163,   164,   165,    -1,   167,   168,
-   169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
-    -1,    -1,   181,    -1,    -1,    -1,   185,   161,   162,   163,
-   164,   165,    -1,   167,   168,   169,   170,   171,   172,   173,
-   174,   175,    -1,    -1,    -1,    -1,    -1,   181,    -1,    -1,
-    -1,   185,   161,   162,   163,   164,   165,    -1,   167,   168,
-   169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
-    -1,    -1,   181,    -1,    -1,    -1,   185,   161,   162,   163,
-   164,   165,    -1,   167,   168,   169,   170,   171,   172,   173,
-   174,   175,    -1,    -1,    -1,    -1,    -1,   181,    -1,    -1,
-    -1,   185,   161,   162,   163,   164,   165,    -1,   167,   168,
-   169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
-    -1,    -1,   181,    -1,    -1,    -1,   185,   161,   162,   163,
-   164,   165,    -1,   167,   168,   169,   170,   171,   172,   173,
-   174,   175,    -1,    -1,    -1,    -1,    -1,   181,    -1,    -1,
-    -1,   185,   161,   162,   163,   164,   165,    -1,   167,   168,
-   169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
-    -1,    -1,   181,    -1,    -1,    -1,   185,   161,   162,   163,
-   164,   165,    -1,   167,   168,   169,   170,   171,   172,   173,
-   174,   175,    -1,    -1,    -1,    -1,    -1,   181,    -1,    -1,
-    -1,   185,   161,   162,   163,   164,   165,    -1,   167,   168,
-   169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
-    -1,    -1,   181,    -1,    -1,    -1,   185,   161,   162,   163,
-   164,   165,    -1,   167,   168,   169,   170,   171,   172,   173,
-   174,   175,    -1,    -1,    -1,    -1,    -1,   181,    -1,    -1,
-    -1,   185,   161,   162,   163,   164,   165,    -1,   167,   168,
-   169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
-    -1,    -1,   181,    -1,    -1,    -1,   185,   161,   162,   163,
-   164,   165,    -1,   167,   168,   169,   170,   171,   172,   173,
-   174,   175,    -1,    -1,    -1,    -1,    -1,   181,    -1,    -1,
-    -1,   185,   161,   162,   163,   164,   165,    -1,   167,   168,
-   169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
-    -1,    -1,   181,    -1,    -1,    -1,   185,   161,   162,   163,
-   164,   165,    -1,   167,   168,   169,   170,   171,   172,   173,
-   174,   175,    -1,    -1,    -1,    -1,    -1,   181,    -1,   183,
-   161,   162,   163,   164,   165,    -1,   167,   168,   169,   170,
-   171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,
-   181,    -1,   183,   161,   162,   163,   164,   165,    -1,   167,
-   168,   169,   170,   171,   172,   173,   174,   175,    -1,    -1,
-    -1,    -1,    -1,   181,    -1,   183,   161,   162,   163,   164,
-   165,    -1,   167,   168,   169,   170,   171,   172,   173,   174,
-   175,    -1,    -1,    -1,    -1,    -1,   181,    -1,   183,   161,
+    -1,    -1,    -1,   185,   161,   162,   163,   164,   165,    -1,
+   167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+    -1,    -1,    -1,    -1,   181,    -1,    -1,    -1,   185,   161,
    162,   163,   164,   165,    -1,   167,   168,   169,   170,   171,
    172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,
-    -1,   183,   161,   162,   163,   164,   165,    -1,   167,   168,
-   169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
-    -1,    -1,   181,    -1,   183,   161,   162,   163,   164,   165,
-    -1,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-    -1,    -1,    -1,    -1,    -1,   181,    -1,   183,   161,   162,
-   163,   164,   165,    -1,   167,   168,   169,   170,   171,   172,
-   173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,    -1,
-   183,   161,   162,   163,   164,   165,    -1,   167,   168,   169,
-   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,
-    -1,   181,    -1,   183,   161,   162,   163,   164,   165,    -1,
+    -1,    -1,    -1,   185,   161,   162,   163,   164,   165,    -1,
    167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
-    -1,    -1,    -1,    -1,   181,    -1,   183,   161,   162,   163,
-   164,   165,    -1,   167,   168,   169,   170,   171,   172,   173,
-   174,   175,    -1,    -1,    -1,    -1,    -1,   181,    -1,   183,
-   161,   162,   163,   164,   165,    -1,   167,   168,   169,   170,
-   171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,
-   181,    -1,   183,   161,   162,   163,   164,   165,    -1,   167,
-   168,   169,   170,   171,   172,   173,   174,   175,    -1,    -1,
-    -1,    -1,    -1,   181,    -1,   183,   161,   162,   163,   164,
-   165,    -1,   167,   168,   169,   170,   171,   172,   173,   174,
+    -1,    -1,    -1,    -1,   181,    -1,    -1,    -1,   185,   161,
+   162,   163,   164,   165,    -1,   167,   168,   169,   170,   171,
+   172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,
+    -1,    -1,    -1,   185,   161,   162,   163,   164,   165,    -1,
+   167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+    -1,    -1,    -1,    -1,   181,    -1,    -1,    -1,   185,   161,
+   162,   163,   164,   165,    -1,   167,   168,   169,   170,   171,
+   172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,
+    -1,    -1,    -1,   185,   161,   162,   163,   164,   165,    -1,
+   167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+    -1,    -1,    -1,    -1,   181,    -1,    -1,    -1,   185,   161,
+   162,   163,   164,   165,    -1,   167,   168,   169,   170,   171,
+   172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,
+    -1,    -1,    -1,   185,   161,   162,   163,   164,   165,    -1,
+   167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+    -1,    -1,    -1,    -1,   181,    -1,    -1,    -1,   185,   161,
+   162,   163,   164,   165,    -1,   167,   168,   169,   170,   171,
+   172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,
+    -1,    -1,    -1,   185,   161,   162,   163,   164,   165,    -1,
+   167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+    -1,    -1,    -1,    -1,   181,    -1,    -1,    -1,   185,   161,
+   162,   163,   164,   165,    -1,   167,   168,   169,   170,   171,
+   172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,
+    -1,    -1,    -1,   185,   161,   162,   163,   164,   165,    -1,
+   167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+    -1,    -1,    -1,    -1,   181,    -1,    -1,    -1,   185,   161,
+   162,   163,   164,   165,    -1,   167,   168,   169,   170,   171,
+   172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,
+    -1,    -1,    -1,   185,   161,   162,   163,   164,   165,    -1,
+   167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+    -1,    -1,    -1,    -1,   181,    -1,    -1,    -1,   185,   161,
+   162,   163,   164,   165,    -1,   167,   168,   169,   170,   171,
+   172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,
+    -1,    -1,    -1,   185,   161,   162,   163,   164,   165,    -1,
+   167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+    -1,    -1,    -1,    -1,   181,    -1,    -1,    -1,   185,   161,
+   162,   163,   164,   165,    -1,   167,   168,   169,   170,   171,
+   172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,
+    -1,    -1,    -1,   185,   161,   162,   163,   164,   165,    -1,
+   167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+    -1,    -1,    -1,    -1,   181,    -1,    -1,    -1,   185,   161,
+   162,   163,   164,   165,    -1,   167,   168,   169,   170,   171,
+   172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,
+    -1,    -1,    -1,   185,   161,   162,   163,   164,   165,    -1,
+   167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+    -1,    -1,    -1,    -1,   181,    -1,    -1,    -1,   185,   161,
+   162,   163,   164,   165,    -1,   167,   168,   169,   170,   171,
+   172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,
+    -1,    -1,    -1,   185,   161,   162,   163,   164,   165,    -1,
+   167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+    -1,    -1,    -1,    -1,   181,    -1,    -1,    -1,   185,   161,
+   162,   163,   164,   165,    -1,   167,   168,   169,   170,   171,
+   172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,
+    -1,    -1,    -1,   185,   161,   162,   163,   164,   165,    -1,
+   167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+    -1,    -1,    -1,    -1,   181,    -1,    -1,    -1,   185,   161,
+   162,   163,   164,   165,    -1,   167,   168,   169,   170,   171,
+   172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,
+    -1,   183,   161,   162,   163,   164,   165,    -1,   167,   168,
+   169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
+    -1,    -1,   181,    -1,   183,   161,   162,   163,   164,   165,
+    -1,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+    -1,    -1,    -1,    -1,    -1,   181,    -1,   183,   161,   162,
+   163,   164,   165,    -1,   167,   168,   169,   170,   171,   172,
+   173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,    -1,
+   183,   161,   162,   163,   164,   165,    -1,   167,   168,   169,
+   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,
+    -1,   181,    -1,   183,   161,   162,   163,   164,   165,    -1,
+   167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+    -1,    -1,    -1,    -1,   181,    -1,   183,   161,   162,   163,
+   164,   165,    -1,   167,   168,   169,   170,   171,   172,   173,
+   174,   175,    -1,    -1,    -1,    -1,    -1,   181,    -1,   183,
+   161,   162,   163,   164,   165,    -1,   167,   168,   169,   170,
+   171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,
+   181,    -1,   183,   161,   162,   163,   164,   165,    -1,   167,
+   168,   169,   170,   171,   172,   173,   174,   175,    -1,    -1,
+    -1,    -1,    -1,   181,    -1,   183,   161,   162,   163,   164,
+   165,    -1,   167,   168,   169,   170,   171,   172,   173,   174,
    175,    -1,    -1,    -1,    -1,    -1,   181,    -1,   183,   161,
    162,   163,   164,   165,    -1,   167,   168,   169,   170,   171,
    172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,
@@ -2638,7 +2675,20 @@ static const short yycheck[] = {    23,
    175,    -1,    -1,    -1,    -1,    -1,   181,    -1,   183,   161,
    162,   163,   164,   165,    -1,   167,   168,   169,   170,   171,
    172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,
-    -1,   183
+    -1,   183,   161,   162,   163,   164,   165,    -1,   167,   168,
+   169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
+    -1,    -1,   181,    -1,   183,   161,   162,   163,   164,   165,
+    -1,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+    -1,    -1,    -1,    -1,    -1,   181,    -1,   183,   161,   162,
+   163,   164,   165,    -1,   167,   168,   169,   170,   171,   172,
+   173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,    -1,
+   183,   161,   162,   163,   164,   165,    -1,   167,   168,   169,
+   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,
+    -1,   181,    -1,   183,   161,   162,   163,   164,   165,    -1,
+   167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+    -1,    -1,    -1,    -1,   181,    -1,   183,   161,   162,   163,
+   164,   165,    -1,   167,   168,   169,   170,   171,   172,   173,
+   174,   175,    -1,    -1,    -1,    -1,    -1,   181
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
 #line 3 "/usr/lib/bison.simple"
@@ -4912,107 +4962,170 @@ case 224:
 #line 1766 "Gmsh.y"
 {
       Curve *pc, *prc;
-      Extrude_ProtudePoint(1,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2],0.,0.,0.,0.,&pc,&prc,NULL);
+      Extrude_ProtudePoint(TRANSLATE,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2],
+			   0.,0.,0.,0.,0.,0.,0.,
+			   &pc,&prc,NULL);
     ;
     break;}
 case 225:
-#line 1771 "Gmsh.y"
+#line 1773 "Gmsh.y"
 {
       Curve *pc, *prc;
-      Extrude_ProtudePoint(0,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,
+      Extrude_ProtudePoint(ROTATE,(int)yyvsp[-8].d,0.,0.,0.,
+			   yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,
 			   &pc,&prc,NULL);
     ;
     break;}
 case 226:
 #line 1780 "Gmsh.y"
 {
-      Extrude_ProtudeCurve(1,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2],0.,0.,0.,0.,NULL);
+      Curve *pc, *prc;
+      Extrude_ProtudePoint(TRANSLATE_ROTATE,(int)yyvsp[-10].d,yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2],
+			   yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,
+			   &pc,&prc,NULL);
     ;
     break;}
 case 227:
-#line 1784 "Gmsh.y"
+#line 1789 "Gmsh.y"
 {
-      Extrude_ProtudeCurve(0,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,NULL);
+      Extrude_ProtudeCurve(TRANSLATE,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2],
+			   0.,0.,0.,0.,0.,0.,0.,NULL);
     ;
     break;}
 case 228:
-#line 1788 "Gmsh.y"
+#line 1794 "Gmsh.y"
 {
-      extr.mesh.ExtrudeMesh = false;
-      extr.mesh.Recombine = false;
+      Extrude_ProtudeCurve(ROTATE,(int)yyvsp[-8].d,0.,0.,0.,
+			   yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,NULL);
     ;
     break;}
 case 229:
-#line 1793 "Gmsh.y"
+#line 1799 "Gmsh.y"
 {
-      Extrude_ProtudeCurve(1,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],0.,0.,0.,0.,&extr);
+      Extrude_ProtudeCurve(TRANSLATE_ROTATE,(int)yyvsp[-10].d,yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2],
+			   yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,NULL);
     ;
     break;}
 case 230:
-#line 1797 "Gmsh.y"
+#line 1804 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 231:
-#line 1802 "Gmsh.y"
+#line 1809 "Gmsh.y"
 {
-      Extrude_ProtudeCurve(0,(int)yyvsp[-12].d,yyvsp[-10].v[0],yyvsp[-10].v[1],yyvsp[-10].v[2],yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2],yyvsp[-6].d,&extr);
+      Extrude_ProtudeCurve(TRANSLATE,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],
+			   0.,0.,0.,0.,0.,0.,0.,&extr);
     ;
     break;}
 case 232:
-#line 1809 "Gmsh.y"
+#line 1814 "Gmsh.y"
 {
-      Extrude_ProtudeSurface(1,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2],0.,0.,0.,0.,0,NULL);
+      extr.mesh.ExtrudeMesh = false;
+      extr.mesh.Recombine = false;
     ;
     break;}
 case 233:
-#line 1813 "Gmsh.y"
+#line 1819 "Gmsh.y"
 {
-      Extrude_ProtudeSurface(0,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,0,NULL);
+      Extrude_ProtudeCurve(ROTATE,(int)yyvsp[-12].d,0.,0.,0.,
+			   yyvsp[-10].v[0],yyvsp[-10].v[1],yyvsp[-10].v[2],yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2],yyvsp[-6].d,&extr);
     ;
     break;}
 case 234:
-#line 1817 "Gmsh.y"
+#line 1824 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 235:
-#line 1822 "Gmsh.y"
+#line 1829 "Gmsh.y"
 {
-      int vol = NEWREG();
-      Extrude_ProtudeSurface(1,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],0.,0.,0.,0.,vol,&extr);
+      Extrude_ProtudeCurve(TRANSLATE_ROTATE,(int)yyvsp[-14].d,yyvsp[-12].v[0],yyvsp[-12].v[1],yyvsp[-12].v[2],
+			   yyvsp[-10].v[0],yyvsp[-10].v[1],yyvsp[-10].v[2],yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2],yyvsp[-6].d,&extr);
     ;
     break;}
 case 236:
-#line 1827 "Gmsh.y"
+#line 1837 "Gmsh.y"
 {
-      extr.mesh.ExtrudeMesh = false;
-      extr.mesh.Recombine = false;
+      Extrude_ProtudeSurface(TRANSLATE,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2],
+			     0.,0.,0.,0.,0.,0.,0.,0,NULL);
     ;
     break;}
 case 237:
-#line 1833 "Gmsh.y"
+#line 1842 "Gmsh.y"
 {
-      int vol = NEWREG();
-      Extrude_ProtudeSurface(0,(int)yyvsp[-12].d,yyvsp[-10].v[0],yyvsp[-10].v[1],yyvsp[-10].v[2],yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2],yyvsp[-6].d,vol,&extr);
+      Extrude_ProtudeSurface(ROTATE,(int)yyvsp[-8].d,0.,0.,0.,
+			     yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,0,NULL);
     ;
     break;}
 case 238:
-#line 1841 "Gmsh.y"
+#line 1847 "Gmsh.y"
 {
+      Extrude_ProtudeSurface(TRANSLATE_ROTATE,(int)yyvsp[-10].d,yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2],
+			     yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,0,NULL);
     ;
     break;}
 case 239:
-#line 1844 "Gmsh.y"
+#line 1852 "Gmsh.y"
 {
+      extr.mesh.ExtrudeMesh = false;
+      extr.mesh.Recombine = false;
     ;
     break;}
 case 240:
-#line 1850 "Gmsh.y"
+#line 1857 "Gmsh.y"
+{
+      int vol = NEWREG();
+      Extrude_ProtudeSurface(TRANSLATE,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],
+			     0.,0.,0.,0.,0.,0.,0.,vol,&extr);
+    ;
+    break;}
+case 241:
+#line 1863 "Gmsh.y"
+{
+      extr.mesh.ExtrudeMesh = false;
+      extr.mesh.Recombine = false;
+    ;
+    break;}
+case 242:
+#line 1869 "Gmsh.y"
+{
+      int vol = NEWREG();
+      Extrude_ProtudeSurface(ROTATE,(int)yyvsp[-12].d,0.,0.,0.,
+			     yyvsp[-10].v[0],yyvsp[-10].v[1],yyvsp[-10].v[2],yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2],yyvsp[-6].d,vol,&extr);
+    ;
+    break;}
+case 243:
+#line 1875 "Gmsh.y"
+{
+      extr.mesh.ExtrudeMesh = false;
+      extr.mesh.Recombine = false;
+    ;
+    break;}
+case 244:
+#line 1881 "Gmsh.y"
+{
+      int vol = NEWREG();
+      Extrude_ProtudeSurface(TRANSLATE_ROTATE,(int)yyvsp[-14].d,yyvsp[-12].v[0],yyvsp[-12].v[1],yyvsp[-12].v[2],
+			     yyvsp[-10].v[0],yyvsp[-10].v[1],yyvsp[-10].v[2],yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2],yyvsp[-6].d,vol,&extr);
+    ;
+    break;}
+case 245:
+#line 1890 "Gmsh.y"
+{
+    ;
+    break;}
+case 246:
+#line 1893 "Gmsh.y"
+{
+    ;
+    break;}
+case 247:
+#line 1899 "Gmsh.y"
 {
       double d;
       extr.mesh.ExtrudeMesh = true;
@@ -5039,8 +5152,8 @@ case 240:
       List_Delete(yyvsp[-2].l);
     ;
     break;}
-case 241:
-#line 1876 "Gmsh.y"
+case 248:
+#line 1925 "Gmsh.y"
 {
       double d;
       extr.mesh.ExtrudeMesh = true;
@@ -5065,14 +5178,14 @@ case 241:
       List_Delete(yyvsp[-2].l);
     ;
     break;}
-case 242:
-#line 1900 "Gmsh.y"
+case 249:
+#line 1949 "Gmsh.y"
 {
       extr.mesh.Recombine = true;
     ;
     break;}
-case 243:
-#line 1911 "Gmsh.y"
+case 250:
+#line 1960 "Gmsh.y"
 {
       Curve *c;
       for(i=0;i<List_Nbr(yyvsp[-3].l);i++){
@@ -5091,8 +5204,8 @@ case 243:
       List_Delete(yyvsp[-3].l);
     ;
     break;}
-case 244:
-#line 1929 "Gmsh.y"
+case 251:
+#line 1978 "Gmsh.y"
 {
       Curve *c;
       for(i=0;i<List_Nbr(yyvsp[-6].l);i++){
@@ -5111,8 +5224,8 @@ case 244:
       List_Delete(yyvsp[-6].l);
     ;
     break;}
-case 245:
-#line 1947 "Gmsh.y"
+case 252:
+#line 1996 "Gmsh.y"
 {
       Curve *c;
       for(i=0;i<List_Nbr(yyvsp[-6].l);i++){
@@ -5131,8 +5244,8 @@ case 245:
       List_Delete(yyvsp[-6].l);
     ;
     break;}
-case 246:
-#line 1965 "Gmsh.y"
+case 253:
+#line 2014 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-4].d,THEM);
       if(!s)
@@ -5155,8 +5268,8 @@ case 246:
       List_Delete(yyvsp[-1].l);
     ;
     break;}
-case 247:
-#line 1987 "Gmsh.y"
+case 254:
+#line 2036 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-4].d,THEM);
       if(!s)
@@ -5178,8 +5291,8 @@ case 247:
       List_Delete(yyvsp[-1].l);
     ;
     break;}
-case 248:
-#line 2008 "Gmsh.y"
+case 255:
+#line 2057 "Gmsh.y"
 {
       Volume *v = FindVolume((int)yyvsp[-4].d,THEM);
       if(!v)
@@ -5201,8 +5314,8 @@ case 248:
       List_Delete(yyvsp[-1].l);
     ;
     break;}
-case 249:
-#line 2029 "Gmsh.y"
+case 256:
+#line 2078 "Gmsh.y"
 {
       Surface *s;
       for(i=0;i<List_Nbr(yyvsp[-3].l);i++){
@@ -5217,8 +5330,8 @@ case 249:
       List_Delete(yyvsp[-3].l);
     ;
     break;}
-case 250:
-#line 2043 "Gmsh.y"
+case 257:
+#line 2092 "Gmsh.y"
 {
       Surface *s;
       for(i=0;i<List_Nbr(yyvsp[-1].l);i++){
@@ -5233,72 +5346,72 @@ case 250:
       List_Delete(yyvsp[-1].l);
     ;
     break;}
-case 251:
-#line 2065 "Gmsh.y"
+case 258:
+#line 2114 "Gmsh.y"
 { 
       Coherence_PS();
     ;
     break;}
-case 252:
-#line 2069 "Gmsh.y"
+case 259:
+#line 2118 "Gmsh.y"
 { 
       IntersectAllSegmentsTogether();
     ;
     break;}
-case 253:
-#line 2080 "Gmsh.y"
+case 260:
+#line 2129 "Gmsh.y"
 {yyval.i = 1;;
     break;}
-case 254:
-#line 2081 "Gmsh.y"
+case 261:
+#line 2130 "Gmsh.y"
 {yyval.i = 0;;
     break;}
-case 255:
-#line 2082 "Gmsh.y"
+case 262:
+#line 2131 "Gmsh.y"
 {yyval.i = -1;;
     break;}
-case 256:
-#line 2083 "Gmsh.y"
+case 263:
+#line 2132 "Gmsh.y"
 {yyval.i = -1;;
     break;}
-case 257:
-#line 2084 "Gmsh.y"
+case 264:
+#line 2133 "Gmsh.y"
 {yyval.i = -1;;
     break;}
-case 258:
-#line 2088 "Gmsh.y"
+case 265:
+#line 2137 "Gmsh.y"
 { yyval.d = yyvsp[0].d;           ;
     break;}
-case 259:
-#line 2089 "Gmsh.y"
+case 266:
+#line 2138 "Gmsh.y"
 { yyval.d = yyvsp[-1].d ;          ;
     break;}
-case 260:
-#line 2090 "Gmsh.y"
+case 267:
+#line 2139 "Gmsh.y"
 { yyval.d = -yyvsp[0].d ;         ;
     break;}
-case 261:
-#line 2091 "Gmsh.y"
+case 268:
+#line 2140 "Gmsh.y"
 { yyval.d = yyvsp[0].d;           ;
     break;}
-case 262:
-#line 2092 "Gmsh.y"
+case 269:
+#line 2141 "Gmsh.y"
 { yyval.d = !yyvsp[0].d ;         ;
     break;}
-case 263:
-#line 2093 "Gmsh.y"
+case 270:
+#line 2142 "Gmsh.y"
 { yyval.d = yyvsp[-2].d - yyvsp[0].d ;     ;
     break;}
-case 264:
-#line 2094 "Gmsh.y"
+case 271:
+#line 2143 "Gmsh.y"
 { yyval.d = yyvsp[-2].d + yyvsp[0].d ;     ;
     break;}
-case 265:
-#line 2095 "Gmsh.y"
+case 272:
+#line 2144 "Gmsh.y"
 { yyval.d = yyvsp[-2].d * yyvsp[0].d ;     ;
     break;}
-case 266:
-#line 2097 "Gmsh.y"
+case 273:
+#line 2146 "Gmsh.y"
 { 
       if(!yyvsp[0].d)
 	vyyerror("Division by zero in '%g / %g'", yyvsp[-2].d, yyvsp[0].d);
@@ -5306,236 +5419,236 @@ case 266:
 	yyval.d = yyvsp[-2].d / yyvsp[0].d ;     
     ;
     break;}
-case 267:
-#line 2103 "Gmsh.y"
+case 274:
+#line 2152 "Gmsh.y"
 { yyval.d = (int)yyvsp[-2].d % (int)yyvsp[0].d ;  ;
     break;}
-case 268:
-#line 2104 "Gmsh.y"
+case 275:
+#line 2153 "Gmsh.y"
 { yyval.d = pow(yyvsp[-2].d,yyvsp[0].d) ;  ;
     break;}
-case 269:
-#line 2105 "Gmsh.y"
+case 276:
+#line 2154 "Gmsh.y"
 { yyval.d = yyvsp[-2].d < yyvsp[0].d ;     ;
     break;}
-case 270:
-#line 2106 "Gmsh.y"
+case 277:
+#line 2155 "Gmsh.y"
 { yyval.d = yyvsp[-2].d > yyvsp[0].d ;     ;
     break;}
-case 271:
-#line 2107 "Gmsh.y"
+case 278:
+#line 2156 "Gmsh.y"
 { yyval.d = yyvsp[-2].d <= yyvsp[0].d ;    ;
     break;}
-case 272:
-#line 2108 "Gmsh.y"
+case 279:
+#line 2157 "Gmsh.y"
 { yyval.d = yyvsp[-2].d >= yyvsp[0].d ;    ;
     break;}
-case 273:
-#line 2109 "Gmsh.y"
+case 280:
+#line 2158 "Gmsh.y"
 { yyval.d = yyvsp[-2].d == yyvsp[0].d ;    ;
     break;}
-case 274:
-#line 2110 "Gmsh.y"
+case 281:
+#line 2159 "Gmsh.y"
 { yyval.d = yyvsp[-2].d != yyvsp[0].d ;    ;
     break;}
-case 275:
-#line 2111 "Gmsh.y"
+case 282:
+#line 2160 "Gmsh.y"
 { yyval.d = yyvsp[-2].d && yyvsp[0].d ;    ;
     break;}
-case 276:
-#line 2112 "Gmsh.y"
+case 283:
+#line 2161 "Gmsh.y"
 { yyval.d = yyvsp[-2].d || yyvsp[0].d ;    ;
     break;}
-case 277:
-#line 2113 "Gmsh.y"
+case 284:
+#line 2162 "Gmsh.y"
 { yyval.d = yyvsp[-4].d? yyvsp[-2].d : yyvsp[0].d ; ;
     break;}
-case 278:
-#line 2114 "Gmsh.y"
+case 285:
+#line 2163 "Gmsh.y"
 { yyval.d = exp(yyvsp[-1].d);      ;
     break;}
-case 279:
-#line 2115 "Gmsh.y"
+case 286:
+#line 2164 "Gmsh.y"
 { yyval.d = log(yyvsp[-1].d);      ;
     break;}
-case 280:
-#line 2116 "Gmsh.y"
+case 287:
+#line 2165 "Gmsh.y"
 { yyval.d = log10(yyvsp[-1].d);    ;
     break;}
-case 281:
-#line 2117 "Gmsh.y"
+case 288:
+#line 2166 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-1].d);     ;
     break;}
-case 282:
-#line 2118 "Gmsh.y"
+case 289:
+#line 2167 "Gmsh.y"
 { yyval.d = sin(yyvsp[-1].d);      ;
     break;}
-case 283:
-#line 2119 "Gmsh.y"
+case 290:
+#line 2168 "Gmsh.y"
 { yyval.d = asin(yyvsp[-1].d);     ;
     break;}
-case 284:
-#line 2120 "Gmsh.y"
+case 291:
+#line 2169 "Gmsh.y"
 { yyval.d = cos(yyvsp[-1].d);      ;
     break;}
-case 285:
-#line 2121 "Gmsh.y"
+case 292:
+#line 2170 "Gmsh.y"
 { yyval.d = acos(yyvsp[-1].d);     ;
     break;}
-case 286:
-#line 2122 "Gmsh.y"
+case 293:
+#line 2171 "Gmsh.y"
 { yyval.d = tan(yyvsp[-1].d);      ;
     break;}
-case 287:
-#line 2123 "Gmsh.y"
+case 294:
+#line 2172 "Gmsh.y"
 { yyval.d = atan(yyvsp[-1].d);     ;
     break;}
-case 288:
-#line 2124 "Gmsh.y"
+case 295:
+#line 2173 "Gmsh.y"
 { yyval.d = atan2(yyvsp[-3].d,yyvsp[-1].d); ;
     break;}
-case 289:
-#line 2125 "Gmsh.y"
+case 296:
+#line 2174 "Gmsh.y"
 { yyval.d = sinh(yyvsp[-1].d);     ;
     break;}
-case 290:
-#line 2126 "Gmsh.y"
+case 297:
+#line 2175 "Gmsh.y"
 { yyval.d = cosh(yyvsp[-1].d);     ;
     break;}
-case 291:
-#line 2127 "Gmsh.y"
+case 298:
+#line 2176 "Gmsh.y"
 { yyval.d = tanh(yyvsp[-1].d);     ;
     break;}
-case 292:
-#line 2128 "Gmsh.y"
+case 299:
+#line 2177 "Gmsh.y"
 { yyval.d = fabs(yyvsp[-1].d);     ;
     break;}
-case 293:
-#line 2129 "Gmsh.y"
+case 300:
+#line 2178 "Gmsh.y"
 { yyval.d = floor(yyvsp[-1].d);    ;
     break;}
-case 294:
-#line 2130 "Gmsh.y"
+case 301:
+#line 2179 "Gmsh.y"
 { yyval.d = ceil(yyvsp[-1].d);     ;
     break;}
-case 295:
-#line 2131 "Gmsh.y"
+case 302:
+#line 2180 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d);  ;
     break;}
-case 296:
-#line 2132 "Gmsh.y"
+case 303:
+#line 2181 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d);  ;
     break;}
-case 297:
-#line 2133 "Gmsh.y"
+case 304:
+#line 2182 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ;
     break;}
-case 298:
-#line 2134 "Gmsh.y"
+case 305:
+#line 2183 "Gmsh.y"
 { yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ;
     break;}
-case 299:
-#line 2136 "Gmsh.y"
+case 306:
+#line 2185 "Gmsh.y"
 { yyval.d = exp(yyvsp[-1].d);      ;
     break;}
-case 300:
-#line 2137 "Gmsh.y"
+case 307:
+#line 2186 "Gmsh.y"
 { yyval.d = log(yyvsp[-1].d);      ;
     break;}
-case 301:
-#line 2138 "Gmsh.y"
+case 308:
+#line 2187 "Gmsh.y"
 { yyval.d = log10(yyvsp[-1].d);    ;
     break;}
-case 302:
-#line 2139 "Gmsh.y"
+case 309:
+#line 2188 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-1].d);     ;
     break;}
-case 303:
-#line 2140 "Gmsh.y"
+case 310:
+#line 2189 "Gmsh.y"
 { yyval.d = sin(yyvsp[-1].d);      ;
     break;}
-case 304:
-#line 2141 "Gmsh.y"
+case 311:
+#line 2190 "Gmsh.y"
 { yyval.d = asin(yyvsp[-1].d);     ;
     break;}
-case 305:
-#line 2142 "Gmsh.y"
+case 312:
+#line 2191 "Gmsh.y"
 { yyval.d = cos(yyvsp[-1].d);      ;
     break;}
-case 306:
-#line 2143 "Gmsh.y"
+case 313:
+#line 2192 "Gmsh.y"
 { yyval.d = acos(yyvsp[-1].d);     ;
     break;}
-case 307:
-#line 2144 "Gmsh.y"
+case 314:
+#line 2193 "Gmsh.y"
 { yyval.d = tan(yyvsp[-1].d);      ;
     break;}
-case 308:
-#line 2145 "Gmsh.y"
+case 315:
+#line 2194 "Gmsh.y"
 { yyval.d = atan(yyvsp[-1].d);     ;
     break;}
-case 309:
-#line 2146 "Gmsh.y"
+case 316:
+#line 2195 "Gmsh.y"
 { yyval.d = atan2(yyvsp[-3].d,yyvsp[-1].d); ;
     break;}
-case 310:
-#line 2147 "Gmsh.y"
+case 317:
+#line 2196 "Gmsh.y"
 { yyval.d = sinh(yyvsp[-1].d);     ;
     break;}
-case 311:
-#line 2148 "Gmsh.y"
+case 318:
+#line 2197 "Gmsh.y"
 { yyval.d = cosh(yyvsp[-1].d);     ;
     break;}
-case 312:
-#line 2149 "Gmsh.y"
+case 319:
+#line 2198 "Gmsh.y"
 { yyval.d = tanh(yyvsp[-1].d);     ;
     break;}
-case 313:
-#line 2150 "Gmsh.y"
+case 320:
+#line 2199 "Gmsh.y"
 { yyval.d = fabs(yyvsp[-1].d);     ;
     break;}
-case 314:
-#line 2151 "Gmsh.y"
+case 321:
+#line 2200 "Gmsh.y"
 { yyval.d = floor(yyvsp[-1].d);    ;
     break;}
-case 315:
-#line 2152 "Gmsh.y"
+case 322:
+#line 2201 "Gmsh.y"
 { yyval.d = ceil(yyvsp[-1].d);     ;
     break;}
-case 316:
-#line 2153 "Gmsh.y"
+case 323:
+#line 2202 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d);  ;
     break;}
-case 317:
-#line 2154 "Gmsh.y"
+case 324:
+#line 2203 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d);  ;
     break;}
-case 318:
-#line 2155 "Gmsh.y"
+case 325:
+#line 2204 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ;
     break;}
-case 319:
-#line 2156 "Gmsh.y"
+case 326:
+#line 2205 "Gmsh.y"
 { yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ;
     break;}
-case 320:
-#line 2165 "Gmsh.y"
+case 327:
+#line 2214 "Gmsh.y"
 { yyval.d = yyvsp[0].d; ;
     break;}
-case 321:
-#line 2166 "Gmsh.y"
+case 328:
+#line 2215 "Gmsh.y"
 { yyval.d = 3.141592653589793; ;
     break;}
-case 322:
-#line 2167 "Gmsh.y"
+case 329:
+#line 2216 "Gmsh.y"
 { yyval.d = ParUtil::Instance()->rank(); ;
     break;}
-case 323:
-#line 2168 "Gmsh.y"
+case 330:
+#line 2217 "Gmsh.y"
 { yyval.d = ParUtil::Instance()->size(); ;
     break;}
-case 324:
-#line 2173 "Gmsh.y"
+case 331:
+#line 2222 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[0].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
@@ -5546,8 +5659,8 @@ case 324:
 	yyval.d = *(double*)List_Pointer_Fast(pSymbol->val, 0) ;
     ;
     break;}
-case 325:
-#line 2184 "Gmsh.y"
+case 332:
+#line 2233 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-3].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
@@ -5564,8 +5677,8 @@ case 325:
       }
     ;
     break;}
-case 326:
-#line 2201 "Gmsh.y"
+case 333:
+#line 2250 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-1].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
@@ -5576,8 +5689,8 @@ case 326:
 	yyval.d = (*(double*)List_Pointer_Fast(pSymbol->val, 0) += yyvsp[0].i) ;
     ;
     break;}
-case 327:
-#line 2212 "Gmsh.y"
+case 334:
+#line 2261 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-4].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
@@ -5594,8 +5707,8 @@ case 327:
       }
     ;
     break;}
-case 328:
-#line 2231 "Gmsh.y"
+case 335:
+#line 2280 "Gmsh.y"
 {
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-2].c))){
 	vyyerror("Unknown numeric option class '%s'", yyvsp[-2].c);
@@ -5611,8 +5724,8 @@ case 328:
       }
     ;
     break;}
-case 329:
-#line 2247 "Gmsh.y"
+case 336:
+#line 2296 "Gmsh.y"
 {
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-5].c))){
 	vyyerror("Unknown numeric option class '%s'", yyvsp[-5].c);
@@ -5628,8 +5741,8 @@ case 329:
       }
     ;
     break;}
-case 330:
-#line 2263 "Gmsh.y"
+case 337:
+#line 2312 "Gmsh.y"
 {
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-3].c))){
 	vyyerror("Unknown numeric option class '%s'", yyvsp[-3].c);
@@ -5645,8 +5758,8 @@ case 330:
       }
     ;
     break;}
-case 331:
-#line 2279 "Gmsh.y"
+case 338:
+#line 2328 "Gmsh.y"
 {
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-6].c))){
 	vyyerror("Unknown numeric option class '%s'", yyvsp[-6].c);
@@ -5662,131 +5775,131 @@ case 331:
       }
     ;
     break;}
-case 332:
-#line 2297 "Gmsh.y"
+case 339:
+#line 2346 "Gmsh.y"
 {
       memcpy(yyval.v, yyvsp[0].v, 5*sizeof(double)) ;
     ;
     break;}
-case 333:
-#line 2301 "Gmsh.y"
+case 340:
+#line 2350 "Gmsh.y"
 {
       for(i=0 ; i<5 ; i++) yyval.v[i] = -yyvsp[0].v[i] ;
     ;
     break;}
-case 334:
-#line 2305 "Gmsh.y"
+case 341:
+#line 2354 "Gmsh.y"
 { 
       for(i=0 ; i<5 ; i++) yyval.v[i] = yyvsp[0].v[i];
     ;
     break;}
-case 335:
-#line 2309 "Gmsh.y"
+case 342:
+#line 2358 "Gmsh.y"
 { 
       for(i=0 ; i<5 ; i++) yyval.v[i] = yyvsp[-2].v[i] - yyvsp[0].v[i] ;
     ;
     break;}
-case 336:
-#line 2313 "Gmsh.y"
+case 343:
+#line 2362 "Gmsh.y"
 {
       for(i=0 ; i<5 ; i++) yyval.v[i] = yyvsp[-2].v[i] + yyvsp[0].v[i] ;
     ;
     break;}
-case 337:
-#line 2319 "Gmsh.y"
+case 344:
+#line 2368 "Gmsh.y"
 { 
       yyval.v[0]=yyvsp[-9].d;  yyval.v[1]=yyvsp[-7].d;  yyval.v[2]=yyvsp[-5].d;  yyval.v[3]=yyvsp[-3].d; yyval.v[4]=yyvsp[-1].d;
     ;
     break;}
-case 338:
-#line 2323 "Gmsh.y"
+case 345:
+#line 2372 "Gmsh.y"
 { 
       yyval.v[0]=yyvsp[-7].d;  yyval.v[1]=yyvsp[-5].d;  yyval.v[2]=yyvsp[-3].d;  yyval.v[3]=yyvsp[-1].d; yyval.v[4]=1.0;
     ;
     break;}
-case 339:
-#line 2327 "Gmsh.y"
+case 346:
+#line 2376 "Gmsh.y"
 {
       yyval.v[0]=yyvsp[-5].d;  yyval.v[1]=yyvsp[-3].d;  yyval.v[2]=yyvsp[-1].d;  yyval.v[3]=0.0; yyval.v[4]=1.0;
     ;
     break;}
-case 340:
-#line 2331 "Gmsh.y"
+case 347:
+#line 2380 "Gmsh.y"
 {
       yyval.v[0]=yyvsp[-5].d;  yyval.v[1]=yyvsp[-3].d;  yyval.v[2]=yyvsp[-1].d;  yyval.v[3]=0.0; yyval.v[4]=1.0;
     ;
     break;}
-case 341:
-#line 2338 "Gmsh.y"
+case 348:
+#line 2387 "Gmsh.y"
 {
     ;
     break;}
-case 342:
-#line 2341 "Gmsh.y"
+case 349:
+#line 2390 "Gmsh.y"
 {
     ;
     break;}
-case 343:
-#line 2347 "Gmsh.y"
+case 350:
+#line 2396 "Gmsh.y"
 {
     ;
     break;}
-case 344:
-#line 2350 "Gmsh.y"
+case 351:
+#line 2399 "Gmsh.y"
 {
     ;
     break;}
-case 345:
-#line 2356 "Gmsh.y"
+case 352:
+#line 2405 "Gmsh.y"
 {
     ;
     break;}
-case 346:
-#line 2359 "Gmsh.y"
+case 353:
+#line 2408 "Gmsh.y"
 {
        yyval.l=yyvsp[-1].l;
     ;
     break;}
-case 347:
-#line 2363 "Gmsh.y"
+case 354:
+#line 2412 "Gmsh.y"
 {
        yyval.l=yyvsp[-1].l;
     ;
     break;}
-case 348:
-#line 2370 "Gmsh.y"
+case 355:
+#line 2419 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(List_T*)) ;
       List_Add(yyval.l, &(yyvsp[0].l)) ;
     ;
     break;}
-case 349:
-#line 2375 "Gmsh.y"
+case 356:
+#line 2424 "Gmsh.y"
 {
       List_Add(yyval.l, &(yyvsp[0].l)) ;
     ;
     break;}
-case 350:
-#line 2383 "Gmsh.y"
+case 357:
+#line 2432 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ;
       List_Add(yyval.l, &(yyvsp[0].d)) ;
     ;
     break;}
-case 351:
-#line 2388 "Gmsh.y"
+case 358:
+#line 2437 "Gmsh.y"
 {
       yyval.l = yyvsp[0].l ;
     ;
     break;}
-case 352:
-#line 2392 "Gmsh.y"
+case 359:
+#line 2441 "Gmsh.y"
 {
       yyval.l=yyvsp[-1].l;
     ;
     break;}
-case 353:
-#line 2396 "Gmsh.y"
+case 360:
+#line 2445 "Gmsh.y"
 {
       yyval.l=yyvsp[-1].l;
       for(i=0 ; i<List_Nbr(yyval.l) ; i++){
@@ -5795,16 +5908,16 @@ case 353:
       }
     ;
     break;}
-case 354:
-#line 2407 "Gmsh.y"
+case 361:
+#line 2456 "Gmsh.y"
 { 
       yyval.l = List_Create(2,1,sizeof(double)) ; 
       for(d=yyvsp[-2].d ; (yyvsp[-2].d<yyvsp[0].d)?(d<=yyvsp[0].d):(d>=yyvsp[0].d) ; (yyvsp[-2].d<yyvsp[0].d)?(d+=1.):(d-=1.)) 
 	List_Add(yyval.l, &d) ;
     ;
     break;}
-case 355:
-#line 2413 "Gmsh.y"
+case 362:
+#line 2462 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ; 
       if(!yyvsp[0].d || (yyvsp[-4].d<yyvsp[-2].d && yyvsp[0].d<0) || (yyvsp[-4].d>yyvsp[-2].d && yyvsp[0].d>0)){
@@ -5816,8 +5929,8 @@ case 355:
 	  List_Add(yyval.l, &d) ;
    ;
     break;}
-case 356:
-#line 2424 "Gmsh.y"
+case 363:
+#line 2473 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ;
       TheSymbol.Name = yyvsp[-2].c ;
@@ -5832,8 +5945,8 @@ case 356:
       }
     ;
     break;}
-case 357:
-#line 2438 "Gmsh.y"
+case 364:
+#line 2487 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ;
       TheSymbol.Name = yyvsp[-2].c ;
@@ -5850,8 +5963,8 @@ case 357:
       }
     ;
     break;}
-case 358:
-#line 2454 "Gmsh.y"
+case 365:
+#line 2503 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ;
       TheSymbol.Name = yyvsp[-5].c ;
@@ -5872,8 +5985,8 @@ case 358:
       List_Delete(yyvsp[-2].l);
     ;
     break;}
-case 359:
-#line 2474 "Gmsh.y"
+case 366:
+#line 2523 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ;
       TheSymbol.Name = yyvsp[-5].c ;
@@ -5896,27 +6009,27 @@ case 359:
       List_Delete(yyvsp[-2].l);
     ;
     break;}
-case 360:
-#line 2499 "Gmsh.y"
+case 367:
+#line 2548 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ;
       List_Add(yyval.l, &(yyvsp[0].d)) ;
     ;
     break;}
-case 361:
-#line 2504 "Gmsh.y"
+case 368:
+#line 2553 "Gmsh.y"
 {
       yyval.l = yyvsp[0].l ;
     ;
     break;}
-case 362:
-#line 2508 "Gmsh.y"
+case 369:
+#line 2557 "Gmsh.y"
 {
       List_Add(yyval.l, &(yyvsp[0].d)) ;
     ;
     break;}
-case 363:
-#line 2512 "Gmsh.y"
+case 370:
+#line 2561 "Gmsh.y"
 {
       for(i=0 ; i<List_Nbr(yyvsp[0].l) ; i++){
 	List_Read(yyvsp[0].l, i, &d) ;
@@ -5925,27 +6038,27 @@ case 363:
       List_Delete(yyvsp[0].l);
     ;
     break;}
-case 364:
-#line 2524 "Gmsh.y"
+case 371:
+#line 2573 "Gmsh.y"
 {
       yyval.u = PACK_COLOR((int)yyvsp[-7].d, (int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d);
     ;
     break;}
-case 365:
-#line 2528 "Gmsh.y"
+case 372:
+#line 2577 "Gmsh.y"
 {
       yyval.u = PACK_COLOR((int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d, 255);
     ;
     break;}
-case 366:
-#line 2539 "Gmsh.y"
+case 373:
+#line 2588 "Gmsh.y"
 {
       yyval.u = Get_ColorForString(ColorString, -1, yyvsp[0].c, &flag);
       if(flag) vyyerror("Unknown color '%s'", yyvsp[0].c);
     ;
     break;}
-case 367:
-#line 2544 "Gmsh.y"
+case 374:
+#line 2593 "Gmsh.y"
 {
       if(!(pColCat = Get_ColorOptionCategory(yyvsp[-4].c))){
 	vyyerror("Unknown color option class '%s'", yyvsp[-4].c);
@@ -5962,14 +6075,14 @@ case 367:
       }
     ;
     break;}
-case 368:
-#line 2563 "Gmsh.y"
+case 375:
+#line 2612 "Gmsh.y"
 {
       yyval.l = yyvsp[-1].l;
     ;
     break;}
-case 369:
-#line 2567 "Gmsh.y"
+case 376:
+#line 2616 "Gmsh.y"
 {
       yyval.l = List_Create(256,10,sizeof(unsigned int)) ;
       ColorTable *ct = Get_ColorTable((int)yyvsp[-3].d);
@@ -5981,27 +6094,27 @@ case 369:
       }
     ;
     break;}
-case 370:
-#line 2581 "Gmsh.y"
+case 377:
+#line 2630 "Gmsh.y"
 {
       yyval.l = List_Create(256,10,sizeof(unsigned int)) ;
       List_Add(yyval.l, &(yyvsp[0].u)) ;
     ;
     break;}
-case 371:
-#line 2586 "Gmsh.y"
+case 378:
+#line 2635 "Gmsh.y"
 {
       List_Add(yyval.l, &(yyvsp[0].u)) ;
     ;
     break;}
-case 372:
-#line 2593 "Gmsh.y"
+case 379:
+#line 2642 "Gmsh.y"
 {
       yyval.c = yyvsp[0].c;
     ;
     break;}
-case 373:
-#line 2597 "Gmsh.y"
+case 380:
+#line 2646 "Gmsh.y"
 {
       yyval.c = (char *)Malloc((strlen(yyvsp[-3].c)+strlen(yyvsp[-1].c)+1)*sizeof(char)) ;
       strcpy(yyval.c, yyvsp[-3].c) ;  
@@ -6010,8 +6123,8 @@ case 373:
       Free(yyvsp[-1].c);
     ;
     break;}
-case 374:
-#line 2605 "Gmsh.y"
+case 381:
+#line 2654 "Gmsh.y"
 {
       yyval.c = (char *)Malloc((strlen(yyvsp[-1].c)+1)*sizeof(char)) ;
       for(i=strlen(yyvsp[-1].c)-1; i>=0; i--){
@@ -6025,14 +6138,14 @@ case 374:
       Free(yyvsp[-1].c);
     ;
     break;}
-case 375:
-#line 2618 "Gmsh.y"
+case 382:
+#line 2667 "Gmsh.y"
 {
       yyval.c = yyvsp[-1].c;
     ;
     break;}
-case 376:
-#line 2622 "Gmsh.y"
+case 383:
+#line 2671 "Gmsh.y"
 {
       i = PrintListOfDouble(yyvsp[-3].c,yyvsp[-1].l,tmpstring);
       if(i<0){
@@ -6051,8 +6164,8 @@ case 376:
       List_Delete(yyvsp[-1].l);
     ;
     break;}
-case 377:
-#line 2640 "Gmsh.y"
+case 384:
+#line 2689 "Gmsh.y"
 { 
       if(!(pStrCat = Get_StringOptionCategory(yyvsp[-3].c)))
 	vyyerror("Unknown string option class '%s'", yyvsp[-3].c);
@@ -6067,8 +6180,8 @@ case 377:
       }
     ;
     break;}
-case 378:
-#line 2654 "Gmsh.y"
+case 385:
+#line 2703 "Gmsh.y"
 { 
       if(!(pStrCat = Get_StringOptionCategory(yyvsp[-6].c)))
 	vyyerror("Unknown string option class '%s'", yyvsp[-6].c);
@@ -6305,7 +6418,7 @@ yyerrhandle:
     }
   return 1;
 }
-#line 2669 "Gmsh.y"
+#line 2718 "Gmsh.y"
 
 
 void InitSymbols(void){
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index 16c6654712f8541b0d97c4b88bf33edd25f48233..1a8335e6c08442c553247d5b06eaa11f277140ef 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -1,6 +1,6 @@
 %{ 
 
-// $Id: Gmsh.y,v 1.107 2001-11-07 09:30:26 geuzaine Exp $
+// $Id: Gmsh.y,v 1.108 2001-11-12 08:21:18 geuzaine Exp $
 
 #include <stdarg.h>
 #ifndef _NOPLUGIN
@@ -1451,7 +1451,7 @@ Transform :
       SymmetryShapes($2[0],$2[1],$2[2],$2[3],$4,1);
       $$ = $4;
     }
-  | tDilate '{' VExpr ',' FExpr '}'  '{' MultipleShape '}'
+  | tDilate '{' VExpr ',' FExpr '}' '{' MultipleShape '}'
     {
       DilatShapes($3[0],$3[1],$3[2],$5,$8,1);
       $$ = $8;
@@ -1765,53 +1765,88 @@ Extrude :
     tExtrude tPoint '{' FExpr ',' VExpr '}' tEND
     {
       Curve *pc, *prc;
-      Extrude_ProtudePoint(1,(int)$4,$6[0],$6[1],$6[2],0.,0.,0.,0.,&pc,&prc,NULL);
+      Extrude_ProtudePoint(TRANSLATE,(int)$4,$6[0],$6[1],$6[2],
+			   0.,0.,0.,0.,0.,0.,0.,
+			   &pc,&prc,NULL);
     }
   | tExtrude tPoint '{' FExpr ',' VExpr ',' VExpr ',' FExpr '}' tEND
     {
       Curve *pc, *prc;
-      Extrude_ProtudePoint(0,(int)$4,$6[0],$6[1],$6[2],$8[0],$8[1],$8[2],$10,
+      Extrude_ProtudePoint(ROTATE,(int)$4,0.,0.,0.,
+			   $6[0],$6[1],$6[2],$8[0],$8[1],$8[2],$10,
+			   &pc,&prc,NULL);
+    }
+  | tExtrude tPoint '{' FExpr ',' VExpr ',' VExpr ',' VExpr ',' FExpr'}' tEND
+    {
+      Curve *pc, *prc;
+      Extrude_ProtudePoint(TRANSLATE_ROTATE,(int)$4,$6[0],$6[1],$6[2],
+			   $8[0],$8[1],$8[2],$10[0],$10[1],$10[2],$12,
 			   &pc,&prc,NULL);
     }
-
   /* -------- Lines -------- */ 
 
-  | tExtrude tLine'{' FExpr ',' VExpr '}' tEND
+  | tExtrude tLine '{' FExpr ',' VExpr '}' tEND
+    {
+      Extrude_ProtudeCurve(TRANSLATE,(int)$4,$6[0],$6[1],$6[2],
+			   0.,0.,0.,0.,0.,0.,0.,NULL);
+    }
+  | tExtrude tLine '{' FExpr ',' VExpr ',' VExpr ',' FExpr '}' tEND
     {
-      Extrude_ProtudeCurve(1,(int)$4,$6[0],$6[1],$6[2],0.,0.,0.,0.,NULL);
+      Extrude_ProtudeCurve(ROTATE,(int)$4,0.,0.,0.,
+			   $6[0],$6[1],$6[2],$8[0],$8[1],$8[2],$10,NULL);
     }
-  | tExtrude tLine'{' FExpr ',' VExpr ',' VExpr ',' FExpr '}' tEND
+  | tExtrude tLine '{' FExpr ',' VExpr ',' VExpr ',' VExpr ',' FExpr '}' tEND
     {
-      Extrude_ProtudeCurve(0,(int)$4,$6[0],$6[1],$6[2],$8[0],$8[1],$8[2],$10,NULL);
+      Extrude_ProtudeCurve(TRANSLATE_ROTATE,(int)$4,$6[0],$6[1],$6[2],
+			   $8[0],$8[1],$8[2],$10[0],$10[1],$10[2],$12,NULL);
     }
-  | tExtrude tLine'{' FExpr ',' VExpr '}'
+  | tExtrude tLine '{' FExpr ',' VExpr '}'
     {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     }
-                      '{' ExtrudeParameters '}' tEND
+                   '{' ExtrudeParameters '}' tEND
     {
-      Extrude_ProtudeCurve(1,(int)$4,$6[0],$6[1],$6[2],0.,0.,0.,0.,&extr);
+      Extrude_ProtudeCurve(TRANSLATE,(int)$4,$6[0],$6[1],$6[2],
+			   0.,0.,0.,0.,0.,0.,0.,&extr);
     }
-  | tExtrude tLine'{' FExpr ',' VExpr ',' VExpr ',' FExpr '}'
+  | tExtrude tLine '{' FExpr ',' VExpr ',' VExpr ',' FExpr '}'
     {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     }
-                      '{' ExtrudeParameters '}' tEND
+                   '{' ExtrudeParameters '}' tEND
     {
-      Extrude_ProtudeCurve(0,(int)$4,$6[0],$6[1],$6[2],$8[0],$8[1],$8[2],$10,&extr);
+      Extrude_ProtudeCurve(ROTATE,(int)$4,0.,0.,0.,
+			   $6[0],$6[1],$6[2],$8[0],$8[1],$8[2],$10,&extr);
+    }
+  | tExtrude tLine '{' FExpr ',' VExpr ',' VExpr ',' VExpr ',' FExpr '}'
+    {
+      extr.mesh.ExtrudeMesh = false;
+      extr.mesh.Recombine = false;
+    }
+                   '{' ExtrudeParameters '}' tEND
+    {
+      Extrude_ProtudeCurve(TRANSLATE_ROTATE,(int)$4,$6[0],$6[1],$6[2],
+			   $8[0],$8[1],$8[2],$10[0],$10[1],$10[2],$12,&extr);
     }
 
   /* -------- Surfaces -------- */ 
 
   | tExtrude tSurface '{' FExpr ',' VExpr '}' tEND
     {
-      Extrude_ProtudeSurface(1,(int)$4,$6[0],$6[1],$6[2],0.,0.,0.,0.,0,NULL);
+      Extrude_ProtudeSurface(TRANSLATE,(int)$4,$6[0],$6[1],$6[2],
+			     0.,0.,0.,0.,0.,0.,0.,0,NULL);
     }
   | tExtrude tSurface '{' FExpr ',' VExpr ',' VExpr ',' FExpr '}' tEND
     {
-      Extrude_ProtudeSurface(0,(int)$4,$6[0],$6[1],$6[2],$8[0],$8[1],$8[2],$10,0,NULL);
+      Extrude_ProtudeSurface(ROTATE,(int)$4,0.,0.,0.,
+			     $6[0],$6[1],$6[2],$8[0],$8[1],$8[2],$10,0,NULL);
+    }
+  | tExtrude tSurface '{' FExpr ',' VExpr ',' VExpr ',' VExpr ',' FExpr '}' tEND
+    {
+      Extrude_ProtudeSurface(TRANSLATE_ROTATE,(int)$4,$6[0],$6[1],$6[2],
+			     $8[0],$8[1],$8[2],$10[0],$10[1],$10[2],$12,0,NULL);
     }
   | tExtrude tSurface '{' FExpr ',' VExpr '}'
     {
@@ -1821,7 +1856,8 @@ Extrude :
                       '{' ExtrudeParameters '}' tEND
     {
       int vol = NEWREG();
-      Extrude_ProtudeSurface(1,(int)$4,$6[0],$6[1],$6[2],0.,0.,0.,0.,vol,&extr);
+      Extrude_ProtudeSurface(TRANSLATE,(int)$4,$6[0],$6[1],$6[2],
+			     0.,0.,0.,0.,0.,0.,0.,vol,&extr);
     }
   | tExtrude tSurface '{' FExpr ',' VExpr ',' VExpr ',' FExpr '}' 
     {
@@ -1832,7 +1868,20 @@ Extrude :
                       '{' ExtrudeParameters '}'tEND
     {
       int vol = NEWREG();
-      Extrude_ProtudeSurface(0,(int)$4,$6[0],$6[1],$6[2],$8[0],$8[1],$8[2],$10,vol,&extr);
+      Extrude_ProtudeSurface(ROTATE,(int)$4,0.,0.,0.,
+			     $6[0],$6[1],$6[2],$8[0],$8[1],$8[2],$10,vol,&extr);
+    }
+  | tExtrude tSurface '{' FExpr ',' VExpr ',' VExpr ',' VExpr ',' FExpr '}'
+    {
+      extr.mesh.ExtrudeMesh = false;
+      extr.mesh.Recombine = false;
+    }
+  
+                      '{' ExtrudeParameters '}'tEND
+    {
+      int vol = NEWREG();
+      Extrude_ProtudeSurface(TRANSLATE_ROTATE,(int)$4,$6[0],$6[1],$6[2],
+			     $8[0],$8[1],$8[2],$10[0],$10[1],$10[2],$12,vol,&extr);
     }
 ;
 
diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp
index b16fe1cea229246cc252801938fe77b3e34eb546..9d591f86213aa823be94776a704820f9104e0872 100644
--- a/Parser/Gmsh.yy.cpp
+++ b/Parser/Gmsh.yy.cpp
@@ -2,7 +2,7 @@
 /* A lexical scanner generated by flex */
 
 /* Scanner skeleton version:
- * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.122 2001-11-07 09:30:26 geuzaine Exp $
+ * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.123 2001-11-12 08:21:18 geuzaine Exp $
  */
 
 #define FLEX_SCANNER
@@ -1000,7 +1000,7 @@ char *yytext;
 #define INITIAL 0
 #line 2 "Gmsh.l"
 
-// $Id: Gmsh.yy.cpp,v 1.122 2001-11-07 09:30:26 geuzaine Exp $
+// $Id: Gmsh.yy.cpp,v 1.123 2001-11-12 08:21:18 geuzaine Exp $
 
 #include <stdio.h>
 #include <stdlib.h>
diff --git a/doc/VERSIONS b/doc/VERSIONS
index 567b2bee11cb4f73cd28c19c2bc5fc2a4693dc12..b7792f494e1bb3d8b9dfd8e9b6db1e6121b6df89 100644
--- a/doc/VERSIONS
+++ b/doc/VERSIONS
@@ -1,4 +1,7 @@
-$Date: 2001-11-05 08:37:43 $
+$Date: 2001-11-12 08:21:18 $
+
+New in 1.29: Translations and rotations can now be combined in
+extrusions;
 
 New in 1.28: Corrected the 'Using Progression' attribute for
 tranfinite meshes to actually match a real geometric progression; new
diff --git a/doc/gmsh.html b/doc/gmsh.html
index 88329fcf7e7f95e7d3f1ef07a45622c2e3c4af83..6b5cb43e4a3a0ef28ba3c92f9efda1cdf66015b1 100644
--- a/doc/gmsh.html
+++ b/doc/gmsh.html
@@ -259,6 +259,8 @@ Some pictures made with Gmsh:
     <A href="/gmsh/gallery/infodisplay2.gif">pict2</A>.
 <li>A smooth 2D <A href="/gmsh/gallery/blob.gif">colormap</A> and 
     a 3D <A href="/gmsh/gallery/density.mov">quicktime movie</A>.
+<li>Structured and unstructured mesh of an 
+    <A href="/gmsh/gallery/spirale.gif">extruded</A> geometry.
 <li>Some didactic animations about computational electromagnetics at 
     <A href="http://elap.montefiore.ulg.ac.be/elm/demos_en.html">ELAP</A>.
 </ul>
diff --git a/tutorial/t3.geo b/tutorial/t3.geo
index 7984307f0bfdcf4ffcc222790074cc5198ffef48..7dfe7716f68c6685ff6e9374b7dcc83525eedf5c 100644
--- a/tutorial/t3.geo
+++ b/tutorial/t3.geo
@@ -24,17 +24,24 @@ Extrude Surface { 6, {0,0,h} } {
   Layers { {8,4,2,1}, {9000:9003}, {0.25,0.5,0.75,1} } ; 
 } ;
 
-// The extrusion can also be combined with a rotation, and the
-// extruded 3D mesh can be recombined into prisms (wedges) if the
-// surface elements are triangles, or hexahedra if the surface
-// elements are quadrangles. All rotations are specified by an axis
-// direction ({0,1,0}), an axis point ({-0.1,0,0.1}) and a rotation
-// angle (-Pi/2):
+// The extrusion can also performed with a rotation instead of a
+// translation, and the resulting mesh can be recombined into prisms
+// (wedges) if the surface elements are triangles, or hexahedra if the
+// surface elements are quadrangles. All rotations are specified by an
+// axis direction ({0,1,0}), an axis point ({-0.1,0,0.1}) and a
+// rotation angle (-Pi/2):
 
 Extrude Surface { 122, {0,1,0} , {-0.1,0,0.1} , -Pi/2 } { 
   Recombine ; Layers { 7, 9004, 1 } ; 
 };
 
+// A translation ({-2*h,0,0}) and a rotation ({1,0,0} , {0,0.15,0.25},
+// Pi/4) can be combined:
+
+Extrude Surface {news-1, {-2*h,0,0}, {1,0,0} , {0,0.15,0.25} , Pi/2}{ 
+  Layers {10,9004,1}; Recombine; 
+};
+
 Physical Volume(101) = {9000:9004};
 
 // All interactive options can also be set directly in the input file.
diff --git a/tutorial/tutorial.html b/tutorial/tutorial.html
index 78fc6278bb96dca79aa8308556ff8f1fb43eed89..f8f7c6b2e5bcf429c1e4fbd71bbfc199be7d43a9 100644
--- a/tutorial/tutorial.html
+++ b/tutorial/tutorial.html
@@ -23,7 +23,7 @@
 <H1>README 1/10</H1>
 [<A HREF="#top">top</A>][prev][<A HREF="#file2">next</A>]
 <PRE>
-$Id: tutorial.html,v 1.26 2001-11-05 08:37:43 geuzaine Exp $
+$Id: tutorial.html,v 1.27 2001-11-12 08:21:18 geuzaine Exp $
 
 Here are the examples in the Gmsh tutorial. These examples are
 commented (both C and C++-style comments can be used in Gmsh input
@@ -298,7 +298,7 @@ Extrude Surface { 11, {0, 0, h} } ;
 </FONT></I><I><FONT COLOR="#B22222">// manually a characteristic length for some of the automatically
 </FONT></I><I><FONT COLOR="#B22222">// created points:
 </FONT></I>
-Characteristic Length{6,2,52,3,16,12} = lc * 2 ;
+Characteristic Length{6,22,2,3,16,12} = lc * 2 ;
 
 <I><FONT COLOR="#B22222">// If the transformation tools are handy to create complex geometries,
 </FONT></I><I><FONT COLOR="#B22222">// it is sometimes useful to generate the flat geometry, consisting
@@ -362,17 +362,24 @@ Extrude Surface { 6, {0,0,h} } {
   Layers { {8,4,2,1}, {9000:9003}, {0.25,0.5,0.75,1} } ; 
 } ;
 
-<I><FONT COLOR="#B22222">// The extrusion can also be combined with a rotation, and the
-</FONT></I><I><FONT COLOR="#B22222">// extruded 3D mesh can be recombined into prisms (wedges) if the
-</FONT></I><I><FONT COLOR="#B22222">// surface elements are triangles, or hexahedra if the surface
-</FONT></I><I><FONT COLOR="#B22222">// elements are quadrangles. All rotations are specified by an axis
-</FONT></I><I><FONT COLOR="#B22222">// direction ({0,1,0}), an axis point ({-0.1,0,0.1}) and a rotation
-</FONT></I><I><FONT COLOR="#B22222">// angle (-Pi/2):
+<I><FONT COLOR="#B22222">// The extrusion can also performed with a rotation instead of a
+</FONT></I><I><FONT COLOR="#B22222">// translation, and the resulting mesh can be recombined into prisms
+</FONT></I><I><FONT COLOR="#B22222">// (wedges) if the surface elements are triangles, or hexahedra if the
+</FONT></I><I><FONT COLOR="#B22222">// surface elements are quadrangles. All rotations are specified by an
+</FONT></I><I><FONT COLOR="#B22222">// axis direction ({0,1,0}), an axis point ({-0.1,0,0.1}) and a
+</FONT></I><I><FONT COLOR="#B22222">// rotation angle (-Pi/2):
 </FONT></I>
 Extrude Surface { 122, {0,1,0} , {-0.1,0,0.1} , -Pi/2 } { 
   Recombine ; Layers { 7, 9004, 1 } ; 
 };
 
+<I><FONT COLOR="#B22222">// A translation ({-2*h,0,0}) and a rotation ({1,0,0} , {0,0.15,0.25},
+</FONT></I><I><FONT COLOR="#B22222">// Pi/4) can be combined:
+</FONT></I>
+Extrude Surface {news-1, {-2*h,0,0}, {1,0,0} , {0,0.15,0.25} , Pi/2}{ 
+  Layers {10,9004,1}; Recombine; 
+};
+
 Physical Volume(101) = {9000:9004};
 
 <I><FONT COLOR="#B22222">// All interactive options can also be set directly in the input file.