diff --git a/Common/Context.h b/Common/Context.h
index 1815a994ba2712d4b1dbe6c4347a40f66b66a078..721763b4765c9a007987d90197969d7ff2c4d7c1 100644
--- a/Common/Context.h
+++ b/Common/Context.h
@@ -153,6 +153,7 @@ public :
     double scaling_factor;
     int color_scheme ;
     int auto_coherence;
+    int stl_create_elementary, stl_create_physical;
   } geom;
 
   // mesh options 
diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h
index c50477675587bee31a054cfa6531fc791d3dd758..c739c49a170e30a4f0874024fde54aa714d655ca 100644
--- a/Common/DefaultOptions.h
+++ b/Common/DefaultOptions.h
@@ -682,6 +682,10 @@ StringXNumber GeometryOptions_Number[] = {
 
   { F|O, "ScalingFactor" , opt_geometry_scaling_factor , 1.0 , 
     "Global geometry scaling factor" },
+  { F|O, "StlCreateElementary" , opt_geometry_stl_create_elementary , 1. ,
+    "Treat each STL input face as a new geometrical surface" },
+  { F|O, "StlCreatePhysical" , opt_geometry_stl_create_physical , 1. ,
+    "Automatically create physical entities when importing STL faces as geometrical surfaces" },
   { F|O, "Surfaces" , opt_geometry_surfaces , 0. , 
     "Display geometry surfaces?" },
   { F|O, "SurfacesNumbers" , opt_geometry_surfaces_num , 0. , 
@@ -707,7 +711,7 @@ StringXNumber MeshOptions_Number[] = {
   { F|O, "CharacteristicLengthFactor" , opt_mesh_lc_factor , 1.0 ,
     "Factor applied to all characteristic lengths (and background meshes)" },
   { F|O, "ColorCarousel" , opt_mesh_color_carousel , 1. ,
-    "Use a `color by region' coloring scheme (0=no, 1=by geometrical entity, 2=by partition)" },
+    "Color mesh by region? (0=no, 1=by elementary entity, 2=by physical entity, 3=by partition)" },
   { F|O, "ColorScheme" , opt_mesh_color_scheme , 0. , 
     "Default mesh color scheme (0, 1 or 2)" },
   { F|O, "ConstrainedBackgroundMesh" , opt_mesh_constrained_bgmesh, 0. ,
diff --git a/Common/GmshUI.h b/Common/GmshUI.h
index f81225abd0130d1634095355c9e67071adcdb8d9..0e501fc37ffd78e831988b42b51175fb891003d6 100644
--- a/Common/GmshUI.h
+++ b/Common/GmshUI.h
@@ -20,12 +20,6 @@
 // 
 // Please report all bugs and problems to <gmsh@geuz.org>.
 
-#if defined(WIN32)
-#  include <windows.h>
-#  include <GL/gl.h>
-#  include <GL/glu.h>
-#endif
-
 #if defined(HAVE_FLTK)
 #  include <FL/Fl.H>
 #  include <FL/gl.h>
diff --git a/Common/Makefile b/Common/Makefile
index ec6dabe09ce90307595b80827ba6f3d80497363d..479bec04e075069c2bd0153ed55820a9c54ce610 100644
--- a/Common/Makefile
+++ b/Common/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.48 2004-02-07 01:40:17 geuzaine Exp $
+# $Id: Makefile,v 1.49 2004-02-28 00:48:47 geuzaine Exp $
 #
 # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 #
@@ -90,8 +90,7 @@ Visibility.o: Visibility.cpp Gmsh.h Message.h ../DataStr/Malloc.h \
   ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
   ../Geo/Geo.h ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h \
   ../Mesh/Simplex.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \
-  ../Mesh/Metric.h ../Mesh/Matrix.h ../Geo/DataBase.h ../Parser/Parser.h \
-  Visibility.h
+  ../Mesh/Metric.h ../Mesh/Matrix.h ../Parser/Parser.h Visibility.h
 Trackball.o: Trackball.cpp Trackball.h
 License.o: License.cpp Gmsh.h Message.h ../DataStr/Malloc.h \
   ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h
diff --git a/Common/Options.cpp b/Common/Options.cpp
index 7d9f69554cc3207615c2d729b734498cfdf84b49..7d77277f0a7cfff6234beb9938368a8f2173a62f 100644
--- a/Common/Options.cpp
+++ b/Common/Options.cpp
@@ -1,4 +1,4 @@
-// $Id: Options.cpp,v 1.135 2004-02-20 17:57:59 geuzaine Exp $
+// $Id: Options.cpp,v 1.136 2004-02-28 00:48:47 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -2989,6 +2989,19 @@ double opt_geometry_color_scheme(OPT_ARGS_NUM)
   return CTX.geom.color_scheme;
 }
 
+double opt_geometry_stl_create_elementary(OPT_ARGS_NUM)
+{
+  if(action & GMSH_SET)
+    CTX.geom.stl_create_elementary = (int)val;
+  return CTX.geom.stl_create_elementary;
+}
+
+double opt_geometry_stl_create_physical(OPT_ARGS_NUM)
+{
+  if(action & GMSH_SET)
+    CTX.geom.stl_create_physical = (int)val;
+  return CTX.geom.stl_create_physical;
+}
 
 double opt_mesh_quality(OPT_ARGS_NUM)
 {
@@ -3490,6 +3503,7 @@ double opt_mesh_color_carousel(OPT_ARGS_NUM)
     WID->mesh_butt[17]->value(CTX.mesh.color_carousel==0);
     WID->mesh_butt[18]->value(CTX.mesh.color_carousel==1);
     WID->mesh_butt[19]->value(CTX.mesh.color_carousel==2);
+    WID->mesh_butt[20]->value(CTX.mesh.color_carousel==3);
   }
 #endif
   return CTX.mesh.color_carousel;
@@ -3564,7 +3578,6 @@ double opt_mesh_display_lists(OPT_ARGS_NUM)
   return CTX.mesh.display_lists;
 }
 
-
 double opt_solver_client_server(OPT_ARGS_NUM)
 {
 #if defined(HAVE_FLTK)
diff --git a/Common/Options.h b/Common/Options.h
index f5941bd458f9e05f5e2d07835d13fbfaf07efa50..4b730fd3076a0886aedafd51278ced715a8673af 100644
--- a/Common/Options.h
+++ b/Common/Options.h
@@ -336,6 +336,8 @@ double opt_geometry_circle_warning(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_geometry_stl_create_elementary(OPT_ARGS_NUM);
+double opt_geometry_stl_create_physical(OPT_ARGS_NUM);
 double opt_mesh_quality(OPT_ARGS_NUM);
 double opt_mesh_normals(OPT_ARGS_NUM);
 double opt_mesh_tangents(OPT_ARGS_NUM);
diff --git a/Common/Visibility.cpp b/Common/Visibility.cpp
index f68bbd2c6f95cabc0b1263631cb121d760e7b855..13668d6de1cc8919c29853dd8762e1b1659040e3 100644
--- a/Common/Visibility.cpp
+++ b/Common/Visibility.cpp
@@ -1,4 +1,4 @@
-// $Id: Visibility.cpp,v 1.6 2004-02-20 19:28:25 geuzaine Exp $
+// $Id: Visibility.cpp,v 1.7 2004-02-28 00:48:48 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -23,7 +23,6 @@
 #include "Geo.h"
 #include "CAD.h"
 #include "Mesh.h"
-#include "DataBase.h"
 #include "Parser.h"
 #include "Visibility.h"
 
diff --git a/DataStr/Tools.cpp b/DataStr/Tools.cpp
index 1930aad3b6c17973de496b574e74eed036b7799e..6e7fbe74d07f558251a1db4a5814aa2e56182a64 100644
--- a/DataStr/Tools.cpp
+++ b/DataStr/Tools.cpp
@@ -1,4 +1,4 @@
-// $Id: Tools.cpp,v 1.11 2004-02-07 01:40:17 geuzaine Exp $
+// $Id: Tools.cpp,v 1.12 2004-02-28 00:48:48 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -48,6 +48,21 @@ int fcmp_double(const void *a, const void *b)
     return 0;
 }
 
+// List utilities
+
+List_T *ListOfDouble2ListOfInt(List_T *dList)
+{
+  int n = List_Nbr(dList); 
+  List_T *iList = List_Create(n, n, sizeof(int));
+  for(int i = 0; i < n; i++){
+    double d;
+    List_Read(dList, i, &d);
+    int j = (int)d;
+    List_Add(iList, &j);
+  }
+  return iList;
+}
+
 // Tree -> List transfer
 
 List_T *pListeTransfert;
diff --git a/DataStr/Tools.h b/DataStr/Tools.h
index 4af70add57b1f634cd97bf8ec402c878f4e86bfc..8cfe053c83c2230e3c35cbdfc5422a9d98d9ef9c 100644
--- a/DataStr/Tools.h
+++ b/DataStr/Tools.h
@@ -27,15 +27,16 @@ int fcmp_int(const void *a, const void *b);
 int fcmp_absint(const void *a, const void *b);
 int fcmp_double(const void *a, const void *b);
 
-List_T *Tree2List(Tree_T *pTree) ;
+List_T *ListOfDouble2ListOfInt(List_T *dList);
+List_T *Tree2List(Tree_T *pTree);
 
-Tree_T *Tree_Duplique(Tree_T *pTree) ;
-Tree_T *Tree_Union       (Tree_T *pTreeA, Tree_T *pTreeB) ;
-Tree_T *Tree_Soustraction(Tree_T *pTreeA, Tree_T *pTreeB) ;
-Tree_T *Tree_Intersection(Tree_T *pTreeA, Tree_T *pTreeB) ;
+Tree_T *Tree_Duplique(Tree_T *pTree);
+Tree_T *Tree_Union(Tree_T *pTreeA, Tree_T *pTreeB);
+Tree_T *Tree_Soustraction(Tree_T *pTreeA, Tree_T *pTreeB);
+Tree_T *Tree_Intersection(Tree_T *pTreeA, Tree_T *pTreeB);
 
-void Tree_Unit      (Tree_T *pTreeA, Tree_T *pTreeB) ;
-void Tree_Soustrait (Tree_T *pTreeA, Tree_T *pTreeB) ;
-void Tree_Intersecte(Tree_T *pTreeA, Tree_T *pTreeB) ;
+void Tree_Unit(Tree_T *pTreeA, Tree_T *pTreeB);
+void Tree_Soustrait(Tree_T *pTreeA, Tree_T *pTreeB);
+void Tree_Intersecte(Tree_T *pTreeA, Tree_T *pTreeB);
 
 #endif
diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index b166fc927f7570870617eaed2c26f3ad5fd12cfa..e6dc9a1069c19b0342c888a430599018b5e0297b 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -1,4 +1,4 @@
-// $Id: Callbacks.cpp,v 1.205 2004-02-20 23:22:36 geuzaine Exp $
+// $Id: Callbacks.cpp,v 1.206 2004-02-28 00:48:48 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -29,7 +29,7 @@
 #include "GmshUI.h"
 #include "Geo.h"
 #include "CAD.h"
-#include "Verif.h"
+#include "ExtractContour.h"
 #include "Mesh.h"
 #include "Draw.h"
 #include "Views.h"
@@ -1073,7 +1073,9 @@ void mesh_options_ok_cb(CALLBACK_ARGS)
   opt_mesh_light(0, GMSH_SET, WID->mesh_butt[15]->value());
   opt_mesh_color_carousel(0, GMSH_SET,
 			  WID->mesh_butt[17]->value()? 0 :
-			  WID->mesh_butt[18]->value()? 1 : 2);
+			  WID->mesh_butt[18]->value()? 1 : 
+			  WID->mesh_butt[19]->value()? 2 : 
+			  3);
 
   opt_mesh_nb_smoothing(0, GMSH_SET, WID->mesh_value[0]->value());
   opt_mesh_scaling_factor(0, GMSH_SET, WID->mesh_value[1]->value());
diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp
index 68f3d06a880da94698b038e45beba11e4a504f3b..569df52fbf6f2149d25dbea17da44d47a3ec307f 100644
--- a/Fltk/GUI.cpp
+++ b/Fltk/GUI.cpp
@@ -1,4 +1,4 @@
-// $Id: GUI.cpp,v 1.273 2004-02-22 20:13:36 geuzaine Exp $
+// $Id: GUI.cpp,v 1.274 2004-02-28 00:48:48 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -1880,25 +1880,26 @@ void GUI::create_option_window()
       Fl_Group *o = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Colors");
       o->hide();
       mesh_butt[17] = new Fl_Check_Button(2 * WB, 2 * WB + 1 * BH, BW, BH, "Color by element type");
-      mesh_butt[18] = new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, BW, BH, "Color by geometrical entity");
-      mesh_butt[19] = new Fl_Check_Button(2 * WB, 2 * WB + 3 * BH, BW, BH, "Color by partition");
-      for(i = 17; i < 20; i++) {
+      mesh_butt[18] = new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, BW, BH, "Color by elementary entity");
+      mesh_butt[19] = new Fl_Check_Button(2 * WB, 2 * WB + 3 * BH, BW, BH, "Color by physical entity");
+      mesh_butt[20] = new Fl_Check_Button(2 * WB, 2 * WB + 4 * BH, BW, BH, "Color by partition");
+      for(i = 17; i < 21; i++) {
         mesh_butt[i]->type(FL_RADIO_BUTTON);
         mesh_butt[i]->down_box(RADIO_BOX);
         mesh_butt[i]->selection_color(RADIO_COLOR);
       }
 
-      mesh_value[12] = new Fl_Value_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Predefined color scheme");
+      mesh_value[12] = new Fl_Value_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "Predefined color scheme");
       mesh_value[12]->minimum(0);
       mesh_value[12]->maximum(2);
       mesh_value[12]->step(1);
       mesh_value[12]->align(FL_ALIGN_RIGHT);
       mesh_value[12]->callback(mesh_options_color_scheme_cb);
 
-      Fl_Scroll *s = new Fl_Scroll(2 * WB, 3 * WB + 5 * BH, IW + 20, height - 5 * WB - 5 * BH);
+      Fl_Scroll *s = new Fl_Scroll(2 * WB, 3 * WB + 6 * BH, IW + 20, height - 6 * WB - 6 * BH);
       i = 0;
       while(MeshOptions_Color[i].str) {
-        mesh_col[i] = new Fl_Button(2 * WB, 3 * WB + (5 + i) * BH, IW, BH, MeshOptions_Color[i].str);
+        mesh_col[i] = new Fl_Button(2 * WB, 3 * WB + (6 + i) * BH, IW, BH, MeshOptions_Color[i].str);
         mesh_col[i]->callback(color_cb, (void *)MeshOptions_Color[i].function);
         i++;
       }
diff --git a/Fltk/GUI.h b/Fltk/GUI.h
index 09ea9f3a9fea50b29455ea6012d854a371b656a8..ee9736795649ae6ab78c4a3b8989010146bbc91d 100644
--- a/Fltk/GUI.h
+++ b/Fltk/GUI.h
@@ -171,7 +171,7 @@ public:
   
   // mesh options
   Fl_Window        *mesh_window ;
-  Fl_Check_Button  *mesh_butt[20] ;
+  Fl_Check_Button  *mesh_butt[50] ;
   Fl_Input         *mesh_input[20] ;
   Fl_Value_Input   *mesh_value[20] ;
   Fl_Button        *mesh_col[50] ;
diff --git a/Fltk/Main.cpp b/Fltk/Main.cpp
index 1fe165d4190ded4e74adb861acd70f5cec71f4ca..8aa5f5c8f0a4657f2579a1ae7da6b5e4fe40627b 100644
--- a/Fltk/Main.cpp
+++ b/Fltk/Main.cpp
@@ -1,4 +1,4 @@
-// $Id: Main.cpp,v 1.56 2004-02-07 01:40:17 geuzaine Exp $
+// $Id: Main.cpp,v 1.57 2004-02-28 00:48:48 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -28,7 +28,6 @@
 #include "GmshVersion.h"
 
 #include "Geo.h"
-#include "Verif.h"
 #include "Mesh.h"
 #include "Draw.h"
 #include "Context.h"
diff --git a/Fltk/Makefile b/Fltk/Makefile
index 703cedfc348ece4529514cbaa3a0d46be4360012..b5751e919173d702017ac6877d336d94c7f4474f 100644
--- a/Fltk/Makefile
+++ b/Fltk/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.49 2004-02-07 01:40:17 geuzaine Exp $
+# $Id: Makefile,v 1.50 2004-02-28 00:48:48 geuzaine Exp $
 #
 # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 #
@@ -68,12 +68,11 @@ Main.o: Main.cpp ../Plugin/PluginManager.h ../Plugin/Plugin.h \
   ../Common/ColorTable.h ../DataStr/List.h ../Common/Gmsh.h \
   ../DataStr/Malloc.h ../DataStr/Tree.h ../DataStr/avl.h \
   ../DataStr/Tools.h ../Common/GmshUI.h ../Common/GmshVersion.h \
-  ../Geo/Geo.h ../Geo/Verif.h ../Mesh/Mesh.h ../Mesh/Vertex.h \
-  ../Mesh/Simplex.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \
-  ../Mesh/Metric.h ../Mesh/Matrix.h ../Graphics/Draw.h \
-  ../Common/Context.h ../Parser/Parser.h GUI.h Opengl_Window.h \
-  Colorbar_Window.h ../Parser/OpenFile.h ../Common/CommandLine.h \
-  ../Numeric/Numeric.h
+  ../Geo/Geo.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h \
+  ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h \
+  ../Mesh/Matrix.h ../Graphics/Draw.h ../Common/Context.h \
+  ../Parser/Parser.h GUI.h Opengl_Window.h Colorbar_Window.h \
+  ../Parser/OpenFile.h ../Common/CommandLine.h ../Numeric/Numeric.h
 Message.o: Message.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h \
@@ -95,11 +94,12 @@ Callbacks.o: Callbacks.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h ../Geo/Geo.h \
   ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h \
   ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h \
-  ../Mesh/Matrix.h ../Geo/Verif.h ../Graphics/Draw.h ../Common/Views.h \
-  ../Common/ColorTable.h ../Common/Timer.h ../Graphics/CreateFile.h \
-  ../Parser/OpenFile.h ../Common/CommandLine.h ../Common/Context.h \
-  ../Common/Options.h GUI.h Opengl_Window.h Colorbar_Window.h Callbacks.h \
-  ../Plugin/Plugin.h ../Common/Visibility.h Solvers.h
+  ../Mesh/Matrix.h ../Geo/ExtractContour.h ../Graphics/Draw.h \
+  ../Common/Views.h ../Common/ColorTable.h ../Common/Timer.h \
+  ../Graphics/CreateFile.h ../Parser/OpenFile.h ../Common/CommandLine.h \
+  ../Common/Context.h ../Common/Options.h GUI.h Opengl_Window.h \
+  Colorbar_Window.h Callbacks.h ../Plugin/Plugin.h ../Common/Visibility.h \
+  Solvers.h
 Opengl.o: Opengl.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h \
diff --git a/Geo/CAD.cpp b/Geo/CAD.cpp
index f8b6a2063011231bca96d8b734b35b49bdf8ddf4..901d20afdefbf66a5caccd28d5b1ee23730294dc 100644
--- a/Geo/CAD.cpp
+++ b/Geo/CAD.cpp
@@ -1,4 +1,4 @@
-// $Id: CAD.cpp,v 1.70 2004-02-07 01:40:18 geuzaine Exp $
+// $Id: CAD.cpp,v 1.71 2004-02-28 00:48:49 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -23,7 +23,6 @@
 #include "Numeric.h"
 #include "Geo.h"
 #include "Mesh.h"
-#include "DataBase.h"
 #include "Interpolation.h"
 #include "Create.h"
 #include "CAD.h"
@@ -157,7 +156,6 @@ void dist_ddg(double x1, double y1, double z1,
   *z = d * z4 + z3 * (1. - d);
 }
 
-
 Vertex *FindPoint(int inum, Mesh * M)
 {
   Vertex C, *pc;
@@ -235,6 +233,19 @@ SurfaceLoop *FindSurfaceLoop(int inum, Mesh * M)
   return NULL;
 }
 
+PhysicalGroup *FindPhysicalGroup(int num, int type, Mesh * M)
+{
+  PhysicalGroup P, *pp, **ppp;
+  pp = &P;
+  pp->Num = num;
+  pp->Typ = type;
+  if((ppp = (PhysicalGroup **) List_PQuery(M->PhysicalGroups, &pp,
+                                           comparePhysicalGroup))) {
+    return *ppp;
+  }
+  return NULL;
+}
+
 void CopyVertex(Vertex * v, Vertex * vv)
 {
   vv->lc = v->lc;
@@ -279,6 +290,11 @@ void CopyCurve(Curve * c, Curve * cc)
   cc->Control_Points =
     List_Create(List_Nbr(c->Control_Points), 1, sizeof(Vertex *));
   List_Copy(c->Control_Points, cc->Control_Points);
+  if(c->Typ == MSH_SEGM_PARAMETRIC){
+    strcpy(cc->functu, c->functu);
+    strcpy(cc->functv, c->functv);
+    strcpy(cc->functw, c->functw);
+  }
   End_Curve(cc);
   Tree_Insert(THEM->Curves, &cc);
 }
@@ -383,6 +399,7 @@ void CopyShape(int Type, int Num, int *New)
   case MSH_SEGM_CIRC:
   case MSH_SEGM_ELLI:
   case MSH_SEGM_NURBS:
+  case MSH_SEGM_PARAMETRIC:
     if(!(c = FindCurve(Num, THEM))) {
       Msg(GERROR, "Unknown Curve %d", Num);
       return;
@@ -482,6 +499,7 @@ void DeleteShape(int Type, int Num)
   case MSH_SEGM_CIRC:
   case MSH_SEGM_ELLI:
   case MSH_SEGM_NURBS:
+  case MSH_SEGM_PARAMETRIC:
     DeleteCurve(Num);
     break;
   case MSH_SURF_NURBS:
@@ -535,6 +553,7 @@ void ColorShape(int Type, int Num, unsigned int Color)
   case MSH_SEGM_CIRC:
   case MSH_SEGM_ELLI:
   case MSH_SEGM_NURBS:
+  case MSH_SEGM_PARAMETRIC:
     ColorCurve(Num, Color);
     break;
   case MSH_SURF_NURBS:
@@ -564,6 +583,7 @@ void VisibilityShape(int Type, int Num, int Mode)
   case MSH_SEGM_CIRC:
   case MSH_SEGM_ELLI:
   case MSH_SEGM_NURBS:
+  case MSH_SEGM_PARAMETRIC:
     SetVisibilityByNumber(Num, 3, Mode);
     break;
   case MSH_SURF_NURBS:
@@ -629,13 +649,13 @@ Curve *CreateReversedCurve(Mesh * M, Curve * c)
   Curve **pc;
 
   if((pc = (Curve **) Tree_PQuery(M->Curves, &newc))) {
-    Free_Curve(&newc, 0);
+    Free_Curve(&newc, NULL);
     return *pc;
   }
-  else
-    Tree_Insert(M->Curves, &newc);
-
-  return newc;
+  else{
+    Tree_Add(M->Curves, &newc);
+    return newc;
+  }
 }
 
 void ModifyLcPoint(int ip, double lc)
@@ -961,6 +981,7 @@ void ApplicationOnShapes(double matrix[4][4], List_T * ListShapes)
     case MSH_SEGM_CIRC:
     case MSH_SEGM_ELLI:
     case MSH_SEGM_NURBS:
+    case MSH_SEGM_PARAMETRIC:
       c = FindCurve(O.Num, THEM);
       if(c)
         ApplyTransformationToCurve(matrix, c);
diff --git a/Geo/CAD.h b/Geo/CAD.h
index 338d343d5a34a59723a1ba376870a351159342f4..a2f66f7af01711f892efd7fbd2b1bd0a229350d0 100644
--- a/Geo/CAD.h
+++ b/Geo/CAD.h
@@ -42,6 +42,7 @@ Surface *FindSurface(int inum, Mesh *M);
 Volume *FindVolume(int inum, Mesh *M);
 EdgeLoop *FindEdgeLoop(int inum, Mesh *M);
 SurfaceLoop *FindSurfaceLoop(int inum, Mesh *M);
+PhysicalGroup *FindPhysicalGroup(int inum, int type, Mesh * M);
 
 
 Curve * CreateReversedCurve (Mesh *M,Curve *c);
diff --git a/Geo/DataBase.cpp b/Geo/DataBase.cpp
deleted file mode 100644
index c6ffc7eded88d5833ec618813433b8871ef7238f..0000000000000000000000000000000000000000
--- a/Geo/DataBase.cpp
+++ /dev/null
@@ -1,631 +0,0 @@
-// $Id: DataBase.cpp,v 1.27 2004-02-07 01:40:18 geuzaine Exp $
-//
-// Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-// 
-// Please report all bugs and problems to <gmsh@geuz.org>.
-
-#include "Gmsh.h"
-#include "Numeric.h"
-#include "Geo.h"
-#include "Mesh.h"
-#include "CAD.h"
-#include "STL.h"
-#include "Create.h"
-#include "Verif.h"
-#include "Context.h"
-
-extern Context_T CTX;
-extern Mesh *THEM;
-
-// Points
-
-void Cdbpts101(int ip, double x, double y, double z, double l, double w)
-{
-  Vertex *v;
-  v = Create_Vertex(ip,
-                    CTX.geom.scaling_factor * x,
-                    CTX.geom.scaling_factor * y,
-                    CTX.geom.scaling_factor * z,
-                    CTX.geom.scaling_factor * l, 0.0);
-  v->w = w;
-  Tree_Insert(THEM->Points, &v);
-}
-
-// Curves
-
-void AddCurveInDataBase(int NumCurve, int TypCurve, int Order,
-                        List_T * ControlPoints, List_T * Knots,
-                        int VertexBeg, int VertexEnd,
-                        double uBeg, double uEnd)
-{
-  Curve *c;
-
-  if(NumCurve < 0)
-    return;     /* Negative Curves are reversed from positive ones */
-
-  c = Create_Curve(NumCurve, TypCurve, Order, ControlPoints, Knots,
-                   VertexBeg, VertexEnd, uBeg, uEnd);
-
-  // curve in reverse direction
-
-  Curve *rc = CreateReversedCurve(THEM, c);
-  Tree_Insert(THEM->Curves, &c);
-  Tree_Insert(THEM->Curves, &rc);
-}
-
-void AddCircleInDataBase(int NumCurve, int TypCurve, List_T * ControlPoints,
-                         double n[3])
-{
-  Curve *c;
-
-  if(NumCurve < 0)
-    return;     /* Negative Curves are reversed from positive ones */
-
-  c =
-    Create_Curve(NumCurve, TypCurve, 2, ControlPoints, NULL, -1, -1, 0., 1.);
-
-  c->Circle.n[0] = n[0];
-  c->Circle.n[1] = n[1];
-  c->Circle.n[2] = n[2];
-
-  End_Curve(c);
-
-  // curve in reverse direction
-
-  Curve *rc = CreateReversedCurve(THEM, c);
-
-  rc->Circle.n[0] = n[0];
-  rc->Circle.n[1] = n[1];
-  rc->Circle.n[2] = n[2];
-  End_Curve(rc);
-
-  Tree_Insert(THEM->Curves, &c);
-  Tree_Insert(THEM->Curves, &rc);
-}
-
-void Cdbseg101(int iseg, int typseg, int degre, List_T * liste,
-               List_T * listint, int i1, int i2, double u1, double u2,
-               char *c1, char *c2, char *c3)
-{
-  int i, j;
-  double d;
-  List_T *Temp;
-  if(listint) {
-    AddCurveInDataBase(iseg, typseg, degre, listint, NULL, i1, i2, u1, u2);
-  }
-  else {
-    Temp = List_Create(List_Nbr(liste), 1, sizeof(int));
-    for(i = 0; i < List_Nbr(liste); i++) {
-      List_Read(liste, i, &d);
-      j = (int)d;
-      List_Add(Temp, &j);
-    }
-    AddCurveInDataBase(iseg, typseg, degre, Temp, NULL, i1, i2, u1, u2);
-    List_Delete(Temp);
-  }
-
-}
-
-
-// Surfaces and volumes
-
-void AddQuadricSurfaceInDataBase(int Typ, int NumQuadric, double zaxis[3],
-                                 double xaxis[3], double center[3],
-                                 double radius1, double radius2,
-                                 List_T * loops)
-{
-  int ic, i, j, NbLoop, iLoop;
-  Surface *s;
-  Curve *c;
-  EdgeLoop *el;
-
-  s = Create_Surface(NumQuadric, Typ);
-  s->Method = LIBRE;
-  for(i = 0; i < 3; i++)
-    s->Cyl.xaxis[i] = xaxis[i];
-  for(i = 0; i < 3; i++)
-    s->Cyl.zaxis[i] = zaxis[i];
-  for(i = 0; i < 3; i++)
-    s->Cyl.center[i] = center[i];
-  s->Cyl.radius1 = radius1;
-  s->Cyl.radius2 = radius2;
-  s->Generatrices = List_Create(4, 1, sizeof(Curve *));
-
-  NbLoop = List_Nbr(loops);
-  s->Generatrices = List_Create(4, 1, sizeof(Curve *));
-  for(i = 0; i < NbLoop; i++) {
-    List_Read(loops, i, &iLoop);
-    if(!(el = FindEdgeLoop(iLoop, THEM))) {
-      Msg(GERROR, "Unknown Line Loop %d", iLoop);
-      List_Delete(s->Generatrices);
-      Free(s);
-      return;
-    }
-    else {
-      for(j = 0; j < List_Nbr(el->Curves); j++) {
-        List_Read(el->Curves, j, &ic);
-        if(!(c = FindCurve(ic, THEM))) {
-          Msg(GERROR, "Unknown Curve %d", ic);
-          List_Delete(s->Generatrices);
-          Free(s);
-          return;
-        }
-        else
-          List_Add(s->Generatrices, &c);
-      }
-    }
-  }
-  s->Support = s;
-  End_Surface(s);
-  Tree_Insert(THEM->Surfaces, &s);
-}
-
-void CreateSurfaceFromOldCrappyDatabase(int izon, int typzon, int o1, int o2,
-                                        int nbu, int nbv, int sup,
-                                        List_T * liste, List_T * loops,
-                                        Mesh * M)
-{
-  int ic, i, j, l, NbLoop, iLoop;
-  Surface *s, *pS;
-  Curve *c;
-  Vertex V, *v;
-  EdgeLoop *el;
-
-  s = Create_Surface(izon, typzon);
-  s->Method = LIBRE;
-
-  NbLoop = List_Nbr(loops);
-  s->Generatrices = List_Create(4, 1, sizeof(Curve *));
-  for(i = 0; i < NbLoop; i++) {
-    List_Read(loops, i, &iLoop);
-    if(!(el = FindEdgeLoop(iLoop, THEM))) {
-      Msg(GERROR, "Unknown Line Loop %d", iLoop);
-      List_Delete(s->Generatrices);
-      Free(s);
-      return;
-    }
-    else {
-      for(j = 0; j < List_Nbr(el->Curves); j++) {
-        List_Read(el->Curves, j, &ic);
-        if(!(c = FindCurve(ic, THEM))) {
-          Msg(GERROR, "Unknown Curve %d", ic);
-          List_Delete(s->Generatrices);
-          Free(s);
-          return;
-        }
-        else
-          List_Add(s->Generatrices, &c);
-      }
-    }
-  }
-
-  if((pS = FindSurface(sup, THEM))) {
-    s->Support = pS;
-  }
-  else {
-    s->Support = s;
-  }
-
-  if(typzon == MSH_SURF_NURBS && !pS) {
-    s->Control_Points = List_Create(4, 1, sizeof(Vertex *));
-    s->OrderU = o1;
-    s->OrderV = o2;
-    s->Nu = nbu;
-    s->Nv = nbv;
-    for(l = 0; l < List_Nbr(liste); l++) {
-      List_Read(liste, l, &iLoop);
-      v = &V;
-      v->Num = iLoop;
-      List_Add(s->Control_Points, Tree_PQuery(M->Points, &v));
-    }
-  }
-
-  End_Surface(s);
-  Tree_Insert(M->Surfaces, &s);
-}
-
-void CreateVolumeFromOldCrappyDatabase(int izon, List_T * loops, Mesh * M)
-{
-  SurfaceLoop *sl;
-  int i, j, iLoop, is;
-  Surface *s;
-  Volume *v;
-
-  v = Create_Volume(izon, MSH_VOLUME);
-  v->Surfaces = List_Create(4, 1, sizeof(Surface *));
-  for(i = 0; i < List_Nbr(loops); i++) {
-    List_Read(loops, i, &iLoop);
-    if(!(sl = FindSurfaceLoop(iLoop, THEM))) {
-      Msg(GERROR, "Unknown Surface Loop %d", iLoop);
-      List_Delete(v->Surfaces);
-      Free(v);
-      return;
-    }
-    else {
-      for(j = 0; j < List_Nbr(sl->Surfaces); j++) {
-        List_Read(sl->Surfaces, j, &is);
-        if(!(s = FindSurface(abs(is), THEM))) {
-          Msg(GERROR, "Unknown Surface %d", is);
-          List_Delete(v->Surfaces);
-          Free(v);
-          return;
-        }
-        else
-          List_Add(v->Surfaces, &s);
-      }
-    }
-  }
-  Tree_Add(M->Volumes, &v);
-}
-
-
-void Cdbz101(int izon, int typzon, int o1, int o2, int nbu, int nbv,
-             int support, List_T * ListCP, List_T * liste, List_T * intlist)
-{
-
-  int i, j;
-  double f;
-  List_T *templist = NULL;
-  Curve *c, *c0, *c1, *c2;
-
-  if(liste) {
-    templist = List_Create(List_Nbr(liste), 1, sizeof(int));
-    for(i = 0; i < List_Nbr(liste); i++) {
-      List_Read(liste, i, &f);
-      j = (int)f;
-      List_Add(templist, &j);
-    }
-  }
-  else if(intlist) {
-    templist = intlist;
-  }
-
-  if(typzon == MSH_SURF_REGL || typzon == MSH_SURF_TRIC ||
-     typzon == MSH_SURF_PLAN || typzon == MSH_SURF_TRIMMED ||
-     typzon == MSH_SURF_NURBS) {
-    CreateSurfaceFromOldCrappyDatabase(izon, typzon, o1, o2, nbu, nbv,
-                                       support, ListCP, templist, THEM);
-  }
-  else if(typzon == MSH_SURF_LOOP) {
-    Add_SurfaceLoop(izon, templist, THEM);
-  }
-  else if(typzon == MSH_SEGM_LOOP) {
-
-    // We sort the lines in the line loops. Without this sort, it very
-    // difficult to write general scriptable surface generation in
-    // complex cases.
-
-    int NbCurves = List_Nbr(templist);
-    List_T *curves = List_Create(NbCurves, 1, sizeof(Curve *));
-    for(i = 0; i < NbCurves; i++) {
-      if((c = FindCurve(*(int *)List_Pointer(templist, i), THEM)))
-        List_Add(curves, &c);
-      else
-        Msg(GERROR, "Unknown Curve %d in Line Loop %d",
-            *(int *)List_Pointer(templist, i), izon);
-    }
-    List_Reset(templist);
-
-    int j = 0, k = 0;
-    c0 = c1 = *(Curve **) List_Pointer(curves, 0);
-    List_Add(templist, &c1->Num);
-    List_PSuppress(curves, 0);
-    while(List_Nbr(templist) < NbCurves) {
-      for(i = 0; i < List_Nbr(curves); i++) {
-        c2 = *(Curve **) List_Pointer(curves, i);
-        if(c1->end == c2->beg) {
-          List_Add(templist, &c2->Num);
-          List_PSuppress(curves, i);
-          c1 = c2;
-          if(c2->end == c0->beg) {
-            if(List_Nbr(curves)) {
-              Msg(INFO,
-                  "Starting subloop %d in Line Loop %d (are you sure about this?)",
-                  ++k, izon);
-              c0 = c1 = *(Curve **) List_Pointer(curves, 0);
-              List_Add(templist, &c1->Num);
-              List_PSuppress(curves, 0);
-            }
-          }
-          break;
-        }
-      }
-      if(j++ > NbCurves) {
-        Msg(GERROR, "Line Loop %d is wrong", izon);
-        break;
-      }
-    }
-    List_Delete(curves);
-
-    /*
-       printf("Line Loop %d = {", izon);
-       for(i=0 ; i<List_Nbr(templist); i++){
-       printf(" %d", *(int*)List_Pointer(templist, i));
-       }
-       printf("}\n");
-     */
-    Add_EdgeLoop(izon, templist, THEM);
-  }
-  else if(typzon == MSH_VOLUME) {
-    CreateVolumeFromOldCrappyDatabase(izon, templist, THEM);
-  }
-  else {
-    Add_PhysicalGroup(izon, typzon, templist, THEM);
-  }
-
-  if(liste)
-    List_Delete(templist);
-
-
-}
-
-void CreateNurbsSurfaceSupport(int Num, int Order1, int Order2,
-                               List_T * List, List_T * ku, List_T * kv)
-{
-  List_T *ListOfDouble_L;
-  List_T *ListCP;
-  int i, j, Nv, Nu, N;
-  Surface *s;
-  double d;
-  float f;
-  ListCP = List_Create(2, 2, sizeof(int));
-
-  for(j = 0; j < List_Nbr(List); j++) {
-    List_Read(List, j, &ListOfDouble_L);
-    for(i = 0; i < List_Nbr(ListOfDouble_L); i++) {
-      List_Read(ListOfDouble_L, i, &d);
-      N = (int)d;
-      List_Add(ListCP, &N);
-    }
-  }
-  List_Read(List, 0, &ListOfDouble_L);
-  Nu = List_Nbr(List);
-  Nv = List_Nbr(ListOfDouble_L);
-  Cdbz101(Num, MSH_SURF_NURBS, Order1, Order2, Nv, Nu, 0, ListCP, NULL, NULL);
-
-  if(!(s = FindSurface(Num, THEM))) {
-    Msg(GERROR, "Unknown Surface Loop %d", Num);
-    return;
-  }
-  else {
-    s->ku = (float *)malloc(List_Nbr(ku) * sizeof(float));
-    s->kv = (float *)malloc(List_Nbr(kv) * sizeof(float));
-    s->Support = NULL;
-
-    double kumin = 0., kumax = 1.;
-    double kvmin = 0., kvmax = 1.;
-    /*
-       List_Read(ku,0,&kumin);
-       List_Read(ku,List_Nbr(ku)-1,&kumax);
-       List_Read(kv,0,&kvmin);
-       List_Read(kv,List_Nbr(kv)-1,&kvmax);
-     */
-
-    for(i = 0; i < List_Nbr(ku); i++) {
-      List_Read(ku, i, &d);
-      f = (float)((d - kumin) / (kumax - kumin));
-      s->ku[i] = f;
-    }
-    for(i = 0; i < List_Nbr(kv); i++) {
-      List_Read(kv, i, &d);
-      f = (float)((d - kvmin) / (kvmax - kvmin));
-      s->kv[i] = f;
-    }
-  }
-
-  List_Delete(ListCP);
-}
-
-void CreateNurbsSurface(int Num, int Order1, int Order2, List_T * List,
-                        List_T * ku, List_T * kv)
-{
-  List_T *ListOfDouble_L;
-  List_T *Listint, *ListCP;
-  int i, j, Loop[4], N, Nu, Nv;
-  double d;
-  int TypLine = MSH_SEGM_NURBS;
-  Curve *cc;
-
-  Listint = List_Create(2, 2, sizeof(int));
-  ListCP = List_Create(2, 2, sizeof(int));
-
-  double kumin, kumax;
-  List_Read(ku, 0, &kumin);
-  List_Read(ku, List_Nbr(ku) - 1, &kumax);
-  double kvmin, kvmax;
-  List_Read(kv, 0, &kvmin);
-  List_Read(kv, List_Nbr(kv) - 1, &kvmax);
-  for(j = 0; j < List_Nbr(List); j++) {
-    List_Read(List, j, &ListOfDouble_L);
-    for(i = 0; i < List_Nbr(ListOfDouble_L); i++) {
-      List_Read(ListOfDouble_L, i, &d);
-      N = (int)d;
-      List_Add(ListCP, &N);
-    }
-  }
-
-  List_Read(List, 0, &ListOfDouble_L);
-  Nu = List_Nbr(List);
-  Nv = List_Nbr(ListOfDouble_L);
-
-  for(i = 0; i < List_Nbr(ListOfDouble_L); i++) {
-    List_Read(ListOfDouble_L, i, &d);
-    j = (int)d;
-    List_Add(Listint, &j);
-  }
-  if(recognize_seg(TypLine, Listint, &Loop[0])) {
-  }
-  else {
-    Loop[0] = NEWREG();
-    Cdbseg101(Loop[0], TypLine, Order1, ListOfDouble_L, NULL, -1, -1, kumin,
-              kumax, NULL, NULL, NULL);
-    if(!(cc = FindCurve(Loop[0], THEM))) {
-      Msg(GERROR, "Unknown Curve %d", Loop[0]);
-      List_Delete(Listint);
-      List_Delete(ListCP);
-      return;
-    }
-    else {
-      cc->k = (float *)malloc(4 * List_Nbr(ku) * sizeof(float));
-      for(i = 0; i < List_Nbr(ku); i++) {
-        List_Read(ku, i, &d);
-        cc->k[i] = (float)d /*((d-kumin)/(kumax-kumin)) */ ;
-      }
-    }
-  }
-  List_Reset(Listint);
-
-  List_Read(List, List_Nbr(List) - 1, &ListOfDouble_L);
-  for(i = 0; i < List_Nbr(ListOfDouble_L); i++) {
-    List_Read(ListOfDouble_L, i, &d);
-    j = (int)d;
-    List_Add(Listint, &j);
-  }
-  if(recognize_seg(TypLine, Listint, &Loop[2])) {
-  }
-  else {
-    Loop[2] = NEWREG();
-    Cdbseg101(Loop[2], TypLine, Order1, ListOfDouble_L, NULL, -1, -1, kumin,
-              kumax, NULL, NULL, NULL);
-    if(!(cc = FindCurve(Loop[2], THEM))) {
-      Msg(GERROR, "Unknown Curve %d", Loop[2]);
-      List_Delete(Listint);
-      List_Delete(ListCP);
-      return;
-    }
-    else {
-      cc->k = (float *)malloc(4 * List_Nbr(ku) * sizeof(float));
-      for(i = 0; i < List_Nbr(ku); i++) {
-        List_Read(ku, i, &d);
-        cc->k[i] = (float)d /*((d-kumin)/(kumax-kumin)) */ ;
-      }
-    }
-  }
-  List_Reset(Listint);
-
-  List_T *List1 = List_Create(List_Nbr(List), 1, sizeof(double));
-  List_T *List2 = List_Create(List_Nbr(List), 1, sizeof(double));
-
-  for(i = 0; i < List_Nbr(List); i++) {
-    List_Read(List, i, &ListOfDouble_L);
-    List_Add(List1, List_Pointer(ListOfDouble_L, 0));
-    List_Add(List2,
-             List_Pointer(ListOfDouble_L, List_Nbr(ListOfDouble_L) - 1));
-  }
-
-  for(i = 0; i < List_Nbr(List1); i++) {
-    List_Read(List1, i, &d);
-    j = (int)d;
-    List_Add(Listint, &j);
-  }
-  if(recognize_seg(TypLine, Listint, &Loop[1])) {
-  }
-  else {
-    Loop[1] = NEWREG();
-    Cdbseg101(Loop[1], TypLine, Order2, List1, NULL, -1, -1, kvmin, kvmax,
-              NULL, NULL, NULL);
-    if(!(cc = FindCurve(Loop[1], THEM))) {
-      Msg(GERROR, "Unknown Curve %d", Loop[1]);
-      List_Delete(List1);
-      List_Delete(List2);
-      List_Delete(Listint);
-      List_Delete(ListCP);
-      return;
-    }
-    else {
-      cc->k = (float *)malloc(4 * List_Nbr(kv) * sizeof(float));
-      for(i = 0; i < List_Nbr(kv); i++) {
-        List_Read(kv, i, &d);
-        cc->k[i] = (float)d /*((d-kvmin)/(kvmax-kvmin)) */ ;
-      }
-    }
-  }
-  List_Reset(Listint);
-
-  for(i = 0; i < List_Nbr(List2); i++) {
-    List_Read(List2, i, &d);
-    j = (int)d;
-    List_Add(Listint, &j);
-  }
-  if(recognize_seg(TypLine, Listint, &Loop[3])) {
-  }
-  else {
-    Loop[3] = NEWREG();
-    Cdbseg101(Loop[3], TypLine, Order2, List2, NULL, -1, -1, kvmin, kvmax,
-              NULL, NULL, NULL);
-    if(!(cc = FindCurve(Loop[3], THEM)))
-      Msg(GERROR, "Unknown Curve %d", Loop[3]);
-    else {
-      cc->k = (float *)malloc(4 * List_Nbr(kv) * sizeof(float));
-      for(i = 0; i < List_Nbr(kv); i++) {
-        List_Read(kv, i, &d);
-        cc->k[i] = (float)d /*((d-kvmin)/(kvmax-kvmin)) */ ;
-      }
-    }
-  }
-
-  List_Reset(Listint);
-  List_Delete(List1);
-  List_Reset(List2);
-  double f = (double)-Loop[0];
-  List_Add(List2, &f);
-  f = (double)Loop[1];
-  List_Add(List2, &f);
-  f = (double)Loop[2];
-  List_Add(List2, &f);
-  f = (double)-Loop[3];
-  List_Add(List2, &f);
-
-  int topnew = NEWREG();
-  CreateNurbsSurfaceSupport(topnew, Order1, Order2, List, ku, kv);
-  j = NEWREG();
-  Cdbz101(j, MSH_SEGM_LOOP, 0, 0, 0, 0, 0, NULL, List2, NULL);
-  List_Delete(List2);
-  List_Add(Listint, &j);
-  j = NEWREG();
-  Cdbz101(j, MSH_SURF_TRIMMED, Order1, Order2, Nv, Nu, topnew, ListCP, NULL,
-          Listint);
-  List_Delete(Listint);
-  List_Delete(ListCP);
-}
-
-
-// This function takes a surfaces defined by edge loops that may
-// be initially planar or anything else and adds a triangulation
-// to in in order to represent the shape of the surface. This 
-// triangulation may be a STL triangulation (polygons are triangle)
-// but anything else is okay. Solid modelers like parasolid or proE
-// are able to provide such representations. I have written a translator
-// from ideas to gmsh that does that. 
-void AddTriangulationToSurface (int iSurface, int iNbPnt, int iNbrPolygons, 
-				List_T *points, List_T *polygons)
-{
-  Surface * s = FindSurface(iSurface, THEM);
-  
-  POLY_rep *rep = new POLY_rep (points,polygons);
-  
-  if (!s)
-    {
-      Msg(GERROR, "Unknown Surface %d", iSurface);
-      delete rep;
-      return;
-    }
-
-  s->thePolyRep = rep;
-
-}
diff --git a/Geo/DataBase.h b/Geo/DataBase.h
deleted file mode 100644
index 8aeeceed16613a9519daaee44672ad1fb0ae66ee..0000000000000000000000000000000000000000
--- a/Geo/DataBase.h
+++ /dev/null
@@ -1,54 +0,0 @@
-#ifndef _DATABASE_H_
-#define _DATABASE_H_
-
-// Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-// 
-// Please report all bugs and problems to <gmsh@geuz.org>.
-
-void Cdbpts101 (int ip, double x, double y, double z, double l, double w);
-void Cdbpts105 (int ip, double x, double y, double z, double l, double w);
-void Cdbseg102 (int iseg, int ip, int newp);
-void Cdbz102 (int izon, int ip, int newp, int oldp);
-void Cdbseg101 (int iseg, int typseg, int degre, List_T * liste, List_T * listint,
-                int, int, double, double, char *, char *, char *);
-void Cdbpts201 (int ip);
-void Cdbseg201 (int ip);
-void Cdbz201 (int ip);
-void Cdbz101 (int izon, int typzon, int o1, int o2, int nbu, int nbv,
-              int support, List_T * ListCP, List_T * liste, List_T * intlist);
-void CreateNurbsSurface (int Num, int Order1, int Order2, List_T *, List_T *, List_T *);
-void CreateNurbsSurfaceSupport (int Num, int Order2, int Order1, 
-                                List_T * List, List_T *, List_T *);
-void Cdbseg301 (int ip);
-void Cdbz301 (int ip);
-void Cdbn101 (int in, double X, double Y, double Z);
-void Cdbe101 (int nElm, int iEnt, int nnoe[4]);
-
-void AddCurveInDataBase (int NumCurve, int TypCurve, int Order, List_T * ControlPoints,
-                         List_T * Knots, int VertexBeg, int VertexEnd, double uBeg,
-                         double uEnd);
-void AddCircleInDataBase (int NumCurve, int TypCurve, List_T * ControlPoints,
-                          double n[3]);
-void AddQuadricSurfaceInDataBase (int Typ, int NumCyl, double zaxis[3], 
-                                  double xaxis[3], double center[3],
-                                  double radius1, double radius2,
-                                  List_T * loops);
-void AddTriangulationToSurface (int iSurface, int iNbPnt, int iNbrPolygons, 
-				List_T *points, List_T *polygons);
-
-#endif
diff --git a/Geo/Verif.cpp b/Geo/ExtractContour.cpp
similarity index 98%
rename from Geo/Verif.cpp
rename to Geo/ExtractContour.cpp
index cde7eb02d0482ca0ada8da8a9532085a653bad52..2465ffa7b512925ec5dacd33c9805604e4fb7c41 100644
--- a/Geo/Verif.cpp
+++ b/Geo/ExtractContour.cpp
@@ -1,4 +1,4 @@
-// $Id: Verif.cpp,v 1.16 2004-02-07 01:40:19 geuzaine Exp $
+// $Id: ExtractContour.cpp,v 1.1 2004-02-28 00:48:49 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -23,7 +23,6 @@
 #include "Geo.h"
 #include "CAD.h"
 #include "Mesh.h"
-#include "DataBase.h"
 
 extern Mesh *THEM;
 
diff --git a/Geo/Verif.h b/Geo/ExtractContour.h
similarity index 83%
rename from Geo/Verif.h
rename to Geo/ExtractContour.h
index beb6f74815060ea9bd582f3dae981113c1887eae..c226ee74aa679eac29c35558231fd7fe416b199f 100644
--- a/Geo/Verif.h
+++ b/Geo/ExtractContour.h
@@ -1,5 +1,5 @@
-#ifndef _VERIF_H_
-#define _VERIF_H_
+#ifndef _EXTRACT_CONTOUR_H_
+#define _EXTRACT_CONTOUR_H_
 
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -22,7 +22,7 @@
 
 #include "List.h"
 
-int alledgeslinked (int ed, List_T * Liste, List_T * old);
-int allfaceslinked (int iz, List_T * Liste, List_T * old);
+int alledgeslinked(int ed, List_T * Liste, List_T * old);
+int allfaceslinked(int iz, List_T * Liste, List_T * old);
 
 #endif
diff --git a/Geo/Geo.cpp b/Geo/Geo.cpp
index 5e6799ed2f01853eb30c38afa953af519e78a169..2dc0c61ff800b77a89cceec4f0816e75e3f35ef4 100644
--- a/Geo/Geo.cpp
+++ b/Geo/Geo.cpp
@@ -1,4 +1,4 @@
-// $Id: Geo.cpp,v 1.38 2004-02-07 01:40:19 geuzaine Exp $
+// $Id: Geo.cpp,v 1.39 2004-02-28 00:48:49 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -23,7 +23,6 @@
 #include "Numeric.h"
 #include "Geo.h"
 #include "CAD.h"
-#include "DataBase.h"
 #include "Parser.h"
 #include "Context.h"
 
diff --git a/Geo/GeoUtils.cpp b/Geo/GeoUtils.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a065a41fff0de8d767054e1902deb964b93cdb6d
--- /dev/null
+++ b/Geo/GeoUtils.cpp
@@ -0,0 +1,143 @@
+// $Id: GeoUtils.cpp,v 1.1 2004-02-28 00:48:49 geuzaine Exp $
+//
+// Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+// 
+// Please report all bugs and problems to <gmsh@geuz.org>.
+
+#include "Gmsh.h"
+#include "Geo.h"
+#include "CAD.h"
+#include "Mesh.h"
+
+extern Mesh *THEM;
+
+// A small function to sort the edges in an EdgeLoop. Without this
+// sort, it is very difficult to write general scriptable surface
+// generation in complex cases
+
+void sortEdgesInLoop(int num, List_T *edges)
+{
+  Curve *c, *c0, *c1, *c2;
+  int nbEdges = List_Nbr(edges);
+  List_T *temp = List_Create(nbEdges, 1, sizeof(Curve *));
+
+  for(int i = 0; i < nbEdges; i++) {
+    int j;
+    List_Read(edges, i, &j);
+    if((c = FindCurve(j, THEM)))
+      List_Add(temp, &c);
+    else
+      Msg(GERROR, "Unknown Curve %d in Line Loop %d", j, num);
+  }
+  List_Reset(edges);
+  
+  int j = 0, k = 0;
+  c0 = c1 = *(Curve **) List_Pointer(temp, 0);
+  List_Add(edges, &c1->Num);
+  List_PSuppress(temp, 0);
+  while(List_Nbr(edges) < nbEdges) {
+    for(int i = 0; i < List_Nbr(temp); i++) {
+      c2 = *(Curve **) List_Pointer(temp, i);
+      if(c1->end == c2->beg) {
+	List_Add(edges, &c2->Num);
+	List_PSuppress(temp, i);
+	c1 = c2;
+	if(c2->end == c0->beg) {
+	  if(List_Nbr(temp)) {
+	    Msg(INFO, "Starting subloop %d in Line Loop %d (are you sure about this?)",
+		++k, num);
+	    c0 = c1 = *(Curve **) List_Pointer(temp, 0);
+	    List_Add(edges, &c1->Num);
+	    List_PSuppress(temp, 0);
+	  }
+	}
+	break;
+      }
+    }
+    if(j++ > nbEdges) {
+      Msg(GERROR, "Line Loop %d is wrong", num);
+      break;
+    }
+  }
+  List_Delete(temp);
+}
+
+// Fills in the generatrices for a given surface, given the indices of
+// edge loops
+
+void setSurfaceGeneratrices(Surface *s, List_T *loops)
+{
+  int nbLoop = List_Nbr(loops);
+  s->Generatrices = List_Create(4, 4, sizeof(Curve *));
+  for(int i = 0; i < nbLoop; i++) {
+    int iLoop;
+    List_Read(loops, i, &iLoop);
+    EdgeLoop *el;
+    if(!(el = FindEdgeLoop(iLoop, THEM))) {
+      Msg(GERROR, "Unknown Line Loop %d", iLoop);
+      List_Delete(s->Generatrices);
+      return;
+    }
+    else {
+      for(int j = 0; j < List_Nbr(el->Curves); j++) {
+	int ic;
+        List_Read(el->Curves, j, &ic);
+	Curve *c;
+        if(!(c = FindCurve(ic, THEM))) {
+          Msg(GERROR, "Unknown Curve %d", ic);
+          List_Delete(s->Generatrices);
+          return;
+        }
+        else
+          List_Add(s->Generatrices, &c);
+      }
+    }
+  }
+}
+
+// Fills in the boundary of a volume, given the indices of surface
+// loops
+
+void setVolumeSurfaces(Volume *v, List_T * loops)
+{
+  v->Surfaces = List_Create(4, 1, sizeof(Surface *));
+  for(int i = 0; i < List_Nbr(loops); i++) {
+    int il;
+    List_Read(loops, i, &il);
+    SurfaceLoop *sl;
+    if(!(sl = FindSurfaceLoop(il, THEM))) {
+      Msg(GERROR, "Unknown Surface Loop %d", il);
+      List_Delete(v->Surfaces);
+      return;
+    }
+    else {
+      for(int j = 0; j < List_Nbr(sl->Surfaces); j++) {
+	int is;
+        List_Read(sl->Surfaces, j, &is);
+	Surface *s;
+        if(!(s = FindSurface(abs(is), THEM))) {
+          Msg(GERROR, "Unknown Surface %d", is);
+          List_Delete(v->Surfaces);
+          return;
+        }
+        else
+          List_Add(v->Surfaces, &s);
+      }
+    }
+  }
+}
diff --git a/Geo/GeoUtils.h b/Geo/GeoUtils.h
new file mode 100644
index 0000000000000000000000000000000000000000..351a79ca573936732c76191311a19e4d8e6d2831
--- /dev/null
+++ b/Geo/GeoUtils.h
@@ -0,0 +1,30 @@
+#ifndef _GEO_UTILS_H_
+#define _GEO_UTILS_H_
+
+// Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+// 
+// Please report all bugs and problems to <gmsh@geuz.org>.
+
+#include "Mesh.h"
+#include "List.h"
+
+void sortEdgesInLoop(int num, List_T *edges);
+void setSurfaceGeneratrices(Surface *s, List_T *loops);
+void setVolumeSurfaces(Volume *v, List_T * loops);
+
+#endif
diff --git a/Geo/Makefile b/Geo/Makefile
index ad962cd671e83d8b319dad3edf3ade2c1524ff4a..ef503ce456aaf5c9aad2d8b5b8b99c9bf2431803 100644
--- a/Geo/Makefile
+++ b/Geo/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.42 2004-02-07 01:40:19 geuzaine Exp $
+# $Id: Makefile,v 1.43 2004-02-28 00:48:49 geuzaine Exp $
 #
 # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 #
@@ -27,12 +27,12 @@ INCLUDE = -I../Common -I../DataStr -I../Geo -I../Mesh -I../Numeric -I../NR\
 CFLAGS  = ${OPTIM} ${FLAGS} ${INCLUDE}
 
 SRC = CAD.cpp \
-      DataBase.cpp \
       MinMax.cpp \
       ExtrudeParams.cpp \
       Geo.cpp \
+      GeoUtils.cpp \
       StepGeomDatabase.cpp \
-      Verif.cpp \
+      ExtractContour.cpp \
       Print_Geo.cpp
 
 OBJ = ${SRC:.cpp=.o}
@@ -62,14 +62,8 @@ CAD.o: CAD.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \
   ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
   ../Numeric/Numeric.h Geo.h ../Mesh/Mesh.h ../Mesh/Vertex.h \
   ../Mesh/Simplex.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \
-  ../Mesh/Metric.h ../Mesh/Matrix.h DataBase.h ../Mesh/Interpolation.h \
+  ../Mesh/Metric.h ../Mesh/Matrix.h ../Mesh/Interpolation.h \
   ../Mesh/Create.h CAD.h ../Common/Visibility.h ../Common/Context.h
-DataBase.o: DataBase.cpp ../Common/Gmsh.h ../Common/Message.h \
-  ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
-  ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h Geo.h \
-  ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \
-  ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h \
-  CAD.h ../Mesh/Create.h Verif.h ../Common/Context.h
 MinMax.o: MinMax.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h \
@@ -83,19 +77,25 @@ Geo.o: Geo.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \
   ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
   ../Numeric/Numeric.h Geo.h CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h \
   ../Mesh/Simplex.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \
-  ../Mesh/Metric.h ../Mesh/Matrix.h DataBase.h ../Parser/Parser.h \
+  ../Mesh/Metric.h ../Mesh/Matrix.h ../Parser/Parser.h \
   ../Common/Context.h
+GeoUtils.o: GeoUtils.cpp ../Common/Gmsh.h ../Common/Message.h \
+  ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../DataStr/Tools.h Geo.h CAD.h ../Mesh/Mesh.h \
+  ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \
+  ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h
 StepGeomDatabase.o: StepGeomDatabase.cpp ../Common/Gmsh.h \
   ../Common/Message.h ../DataStr/Malloc.h ../DataStr/List.h \
   ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
-  ../Numeric/Numeric.h Geo.h StepGeomDatabase.h DataBase.h \
-  ../Common/Context.h
-Verif.o: Verif.cpp ../Common/Gmsh.h ../Common/Message.h \
+  ../Numeric/Numeric.h Geo.h GeoUtils.h ../Mesh/Mesh.h ../Mesh/Vertex.h \
+  ../Mesh/Simplex.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \
+  ../Mesh/Metric.h ../Mesh/Matrix.h ../Mesh/Nurbs.h CAD.h \
+  StepGeomDatabase.h ../Mesh/Create.h ../Common/Context.h
+ExtractContour.o: ExtractContour.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h Geo.h CAD.h ../Mesh/Mesh.h \
   ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \
-  ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h \
-  DataBase.h
+  ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h
 Print_Geo.o: Print_Geo.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h Geo.h ../Mesh/Mesh.h \
diff --git a/Geo/StepGeomDatabase.cpp b/Geo/StepGeomDatabase.cpp
index 768491da51646e4cfde71a1ed383910c2e9427e0..b6138977e7ac26965e549b8255827fef6ec541b1 100644
--- a/Geo/StepGeomDatabase.cpp
+++ b/Geo/StepGeomDatabase.cpp
@@ -1,4 +1,4 @@
-// $Id: StepGeomDatabase.cpp,v 1.15 2004-02-07 01:40:19 geuzaine Exp $
+// $Id: StepGeomDatabase.cpp,v 1.16 2004-02-28 00:48:49 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -22,15 +22,21 @@
 #include "Gmsh.h"
 #include "Numeric.h"
 #include "Geo.h"
+#include "GeoUtils.h"
+#include "Nurbs.h"
+#include "CAD.h"
 #include "StepGeomDatabase.h"
-#include "DataBase.h"
+#include "Create.h"
 #include "Context.h"
 
+// WARNING: NOT FUNCTIONAL AT THE MOMENT -- NEEDS TO BE PORTED TO THE NEW
+// GEO CREATION INTERFACES (SEE "TODO"s)
+
 extern Context_T CTX;
+extern Mesh *THEM;
 
 static Step_Solid_BRep_t *BREP = NULL;
 
-
 Step_Solid_BRep_t *Create_Step_Solid_BRep(void)
 {
   Step_Solid_BRep_t *NEWBREP;
@@ -632,14 +638,14 @@ void Resolve_BREP(void)
   // resolving cartesian_points
   for(i = 0; i < List_Nbr(BREP->AllCartesian_Points); i++) {
     List_Read(BREP->AllCartesian_Points, i, &cp);
-    Cdbpts101(cp.Num, cp.Pos.X, cp.Pos.Y, cp.Pos.Z, L * .01, 1);
+    //TODO Cdbpts101(cp.Num, cp.Pos.X, cp.Pos.Y, cp.Pos.Z, L * .01, 1);
   }
 
   // resolving vertex_points
   for(i = 0; i < List_Nbr(BREP->AllVertex_Points); i++) {
     List_Read(BREP->AllVertex_Points, i, &vp);
     if((pcp = Get_Cartesian_Point(vp.Cartesian_Point))) {
-      Cdbpts101(vp.Num, pcp->Pos.X, pcp->Pos.Y, pcp->Pos.Z, L * .01, 1);
+      //TODO Cdbpts101(vp.Num, pcp->Pos.X, pcp->Pos.Y, pcp->Pos.Z, L * .01, 1);
     }
   }
 
@@ -650,21 +656,22 @@ void Resolve_BREP(void)
       if(pc->Typ == STEP_LINE) {
         List_Add(ListInt, &ec.Step_Vertex_Point_Begin);
         List_Add(ListInt, &ec.Step_Vertex_Point_End);
-        Cdbseg101(ec.Num, MSH_SEGM_LINE, 1, NULL, ListInt, -1, -1, 0., 1.,
-                  NULL, NULL, NULL);
+        //TODO Cdbseg101(ec.Num, MSH_SEGM_LINE, 1, NULL, ListInt, -1, -1, 0., 1.,
+	// NULL, NULL, NULL);
         List_Reset(ListInt);
       }
       else if(pc->Typ == STEP_BSPL) {
         List_Read(pc->Curve.BSpline.ListOf_Knots, 0, &ubeg);
         List_Read(pc->Curve.BSpline.ListOf_Knots,
                   List_Nbr(pc->Curve.BSpline.ListOf_Knots) - 1, &uend);
-        AddCurveInDataBase(ec.Num,
-                           MSH_SEGM_NURBS,
-                           pc->Curve.BSpline.Order,
-                           pc->Curve.BSpline.ListOf_Cartesian_Points,
-                           pc->Curve.BSpline.ListOf_Knots,
-                           ec.Step_Vertex_Point_Begin,
-                           ec.Step_Vertex_Point_End, ubeg, uend);
+	// TODO
+        //AddCurveInDataBase(ec.Num,
+        //                   MSH_SEGM_NURBS,
+        //                   pc->Curve.BSpline.Order,
+        //                   pc->Curve.BSpline.ListOf_Cartesian_Points,
+        //                   pc->Curve.BSpline.ListOf_Knots,
+        //                   ec.Step_Vertex_Point_Begin,
+        //                   ec.Step_Vertex_Point_End, ubeg, uend);
       }
       else if(pc->Typ == STEP_CIRC || pc->Typ == STEP_ELLP) {
         axs = Get_Axis2_Placement3D(pc->Curve.Circle.Step_Axis2_Placement3D);
@@ -678,9 +685,7 @@ void Resolve_BREP(void)
         List_Add(ListInt, &ec.Step_Vertex_Point_Begin);
         List_Add(ListInt, &pcp->Num);
         List_Add(ListInt, &ec.Step_Vertex_Point_End);
-        AddCircleInDataBase(ec.Num, MSH_SEGM_CIRC, ListInt, n);
-        // Cdbseg101(ec.Num,MSH_SEGM_CIRC,1,NULL,
-        // ListInt,-1,-1,0.,1.,NULL,NULL,NULL);
+        //AddCircleInDataBase(ec.Num, MSH_SEGM_CIRC, ListInt, n);
         List_Reset(ListInt);
       }
     }
@@ -727,8 +732,7 @@ void Resolve_BREP(void)
         else
           err = 1;
         if(!err) {
-          Cdbz101(pfab->Num, MSH_SEGM_LOOP, 0, 0, 0, 0, 0, NULL, NULL,
-                  ListInt);
+          //TODO Cdbz101(pfab->Num, MSH_SEGM_LOOP, 0, 0, 0, 0, 0, NULL, NULL, ListInt);
           List_Add(ListIntBis, &pfab->Num);
         }
         List_Reset(ListInt);
@@ -738,7 +742,7 @@ void Resolve_BREP(void)
     }
     if(!err && (ps = Get_Surface(af.Step_Surface))) {
       if(ps->Typ == STEP_PLAN) {
-        Cdbz101(af.Num, MSH_SURF_PLAN, 0, 0, 0, 0, 0, NULL, NULL, ListIntBis);
+        //TODO Cdbz101(af.Num, MSH_SURF_PLAN, 0, 0, 0, 0, 0, NULL, NULL, ListIntBis);
       }
       else if(ps->Typ == STEP_CYLD || ps->Typ == STEP_CONE
               /*|| ps->Typ == STEP_TORD || ps->Typ == STEP_CONE */ ) {
@@ -768,18 +772,28 @@ void Resolve_BREP(void)
           typ = MSH_SURF_CONE;
           break;
         }
-        AddQuadricSurfaceInDataBase(typ,
-                                    af.Num,
-                                    n, t, p,
-                                    ps->Surface.Quadric.Radius1,
-                                    ps->Surface.Quadric.Radius2, ListIntBis);
-
-        //Cdbz101(af.Num,MSH_SURF_REGL,0,0,0,0,0,NULL,NULL,ListIntBis);
+	if(FindSurface(af.Num, THEM)){
+	  Msg(GERROR, "Surface %d already exists", af.Num);
+	}
+	else{
+	  Surface *s = Create_Surface(af.Num, typ);
+	  for(int i = 0; i < 3; i++)
+	    s->Cyl.xaxis[i] = t[i];
+	  for(int i = 0; i < 3; i++)
+	    s->Cyl.zaxis[i] = n[i];
+	  for(int i = 0; i < 3; i++)
+	    s->Cyl.center[i] = p[i];
+	  s->Cyl.radius1 = ps->Surface.Quadric.Radius1;
+	  s->Cyl.radius2 = ps->Surface.Quadric.Radius2;
+	  setSurfaceGeneratrices(s, ListIntBis);
+	  s->Support = s;
+	  End_Surface(s);
+	  Tree_Add(THEM->Surfaces, &s);
+	}
       }
-
       else if(ps->Typ == STEP_BSPL) {
-        Cdbz101(af.Num, MSH_SURF_TRIMMED, 0, 0, 0, 0, af.Step_Surface, NULL,
-                NULL, ListIntBis);
+        //TODO Cdbz101(af.Num, MSH_SURF_TRIMMED, 0, 0, 0, 0, af.Step_Surface, NULL,
+	//  NULL, ListIntBis);
       }
     }
     List_Reset(ListIntBis);
@@ -796,11 +810,12 @@ void Resolve_BREP(void)
         List_Add(ListInt, &paf->Num);
       }
     }
-    Cdbz101(cs.Num + 1000000, MSH_SURF_LOOP, 0, 0, 0, 0, 0, NULL, NULL,
-            ListInt);
+    //TODO Cdbz101(cs.Num + 1000000, MSH_SURF_LOOP, 0, 0, 0, 0, 0, NULL, NULL, ListInt);
     List_Reset(ListInt);
     j = cs.Num + 1000000;
     List_Add(ListInt, &j);
-    Cdbz101(cs.Num, MSH_VOLUME, 0, 0, 0, 0, 0, NULL, NULL, ListInt);
+    //TODO Cdbz101(cs.Num, MSH_VOLUME, 0, 0, 0, 0, 0, NULL, NULL, ListInt);
   }
 }
+
+
diff --git a/Graphics/Geom.cpp b/Graphics/Geom.cpp
index 6a153e15f059a5475b65ae65bec6ae31ea322e4e..ab1ccd0522d08300c1941f330498f49379e70775 100644
--- a/Graphics/Geom.cpp
+++ b/Graphics/Geom.cpp
@@ -1,4 +1,4 @@
-// $Id: Geom.cpp,v 1.49 2004-02-20 17:58:00 geuzaine Exp $
+// $Id: Geom.cpp,v 1.50 2004-02-28 00:48:49 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -27,7 +27,6 @@
 #include "Utils.h"
 #include "Draw.h"
 #include "Context.h"
-#include "Verif.h"
 #include "Interpolation.h"
 #include "STL.h"
 #include "gl2ps.h"
@@ -282,13 +281,12 @@ void Draw_Triangulated_Surface(Surface * s)
     if(CTX.geom.light) glEnable(GL_LIGHTING);
     glBegin(GL_TRIANGLES);
     while (k < List_Nbr(s->thePolyRep->polygons)){
-      points = (double*)List_Pointer (s->thePolyRep->polygons,k);
+      points = (double*)List_Pointer(s->thePolyRep->polygons,k);
       k+= ((int)points[0] + 1);
-      
       if (points[0] == 3){
-	p1 = (double*)List_Pointer (s->thePolyRep->points_and_normals,6*(int)points[1]);
-	p2 = (double*)List_Pointer (s->thePolyRep->points_and_normals,6*(int)points[2]);
-	p3 = (double*)List_Pointer (s->thePolyRep->points_and_normals,6*(int)points[3]);
+	p1 = (double*)List_Pointer(s->thePolyRep->points_and_normals, 6*(int)points[1]);
+	p2 = (double*)List_Pointer(s->thePolyRep->points_and_normals, 6*(int)points[2]);
+	p3 = (double*)List_Pointer(s->thePolyRep->points_and_normals, 6*(int)points[3]);
 	glNormal3dv(&p1[3]);
 	glVertex3d(p1[0],p1[1],p1[2]);
 	glNormal3dv(&p2[3]);
diff --git a/Graphics/Makefile b/Graphics/Makefile
index 14b5e1c8430f974801340a9d5e3110af88751591..daf96f727063cd5a608f132cc34acf6419f16ace 100644
--- a/Graphics/Makefile
+++ b/Graphics/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.54 2004-02-07 01:40:19 geuzaine Exp $
+# $Id: Makefile,v 1.55 2004-02-28 00:48:49 geuzaine Exp $
 #
 # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 #
@@ -82,14 +82,14 @@ Mesh.o: Mesh.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \
   ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \
   ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h \
   Draw.h ../Common/Views.h ../Common/ColorTable.h ../Common/Context.h \
-  ../Geo/MinMax.h gl2ps.h ../Geo/Verif.h ../Numeric/Numeric.h
+  ../Geo/MinMax.h gl2ps.h ../Numeric/Numeric.h
 Geom.o: Geom.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \
   ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
   ../Common/GmshUI.h ../Numeric/Numeric.h ../Geo/Geo.h ../Mesh/Mesh.h \
   ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \
   ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h \
   ../Mesh/Utils.h Draw.h ../Common/Views.h ../Common/ColorTable.h \
-  ../Common/Context.h ../Geo/Verif.h ../Mesh/Interpolation.h gl2ps.h
+  ../Common/Context.h ../Mesh/Interpolation.h gl2ps.h
 Post.o: Post.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \
   ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
   ../Common/GmshUI.h ../Numeric/Numeric.h ../Geo/Geo.h ../Mesh/Mesh.h \
diff --git a/Graphics/Mesh.cpp b/Graphics/Mesh.cpp
index 45d4ccf26588f8a4e0e6d1280f4e5b22ed41c90e..a1b6e0da59bb398c5c1ee1207e2c79276e646d2c 100644
--- a/Graphics/Mesh.cpp
+++ b/Graphics/Mesh.cpp
@@ -1,4 +1,4 @@
-// $Id: Mesh.cpp,v 1.65 2004-02-20 17:58:00 geuzaine Exp $
+// $Id: Mesh.cpp,v 1.66 2004-02-28 00:48:49 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -28,12 +28,14 @@
 #include "Context.h"
 #include "MinMax.h"
 #include "gl2ps.h"
-#include "Verif.h"
 #include "Numeric.h"
 
 extern Mesh *THEM;
 extern Context_T CTX;
 
+static DrawingColor theColor;
+static int thePhysical = 0;
+
 void draw_polygon_2d(double r, double g, double b, int n,
                      double *x, double *y, double *z)
 {
@@ -58,13 +60,21 @@ void draw_polygon_2d(double r, double g, double b, int n,
   glEnable(GL_DEPTH_TEST);
 }
 
-static DrawingColor theColor;
-
 void ColorSwitch(int i)
 {
   glColor4ubv((GLubyte *) & CTX.color.mesh.carousel[abs(i % 10)]);
 }
 
+int getFirstPhysical(int type, int num)
+{
+  for(int i = 0; i < List_Nbr(THEM->PhysicalGroups); i++){
+    PhysicalGroup *p = *(PhysicalGroup**)List_Pointer(THEM->PhysicalGroups, i);
+    if(p->Typ == type && List_Query(p->Entities, &num, fcmp_int))
+      return p->Num;
+  }  
+  return 0;
+}
+
 void Draw_Mesh(Mesh * M)
 {
   int i;
@@ -135,7 +145,7 @@ void Draw_Mesh(Mesh * M)
       //printf("normal mesh drawing\n");
 
       if(M->status >= 3 && (CTX.mesh.volumes || CTX.mesh.volumes_num)) {
-        Tree_Action(M->Volumes, Draw_Mesh_Volumes);
+	Tree_Action(M->Volumes, Draw_Mesh_Volumes);
       }
 
       if(M->status >= 2 && (CTX.mesh.surfaces || CTX.mesh.surfaces_num)) {
@@ -184,12 +194,7 @@ void Draw_Mesh(Mesh * M)
 
 void Draw_Mesh_Volumes(void *a, void *b)
 {
-  Volume *v;
-  v = *(Volume **) a;
-  theColor = v->Color;
-  // FIXME: this is the correct method, but will only work when a
-  // coherent datastruct exists for volumes
-  // if(!(v->Visible & VIS_MESH)) return;
+  Volume *v = *(Volume **) a;
   Tree_Action(v->Simplexes, Draw_Simplex_Volume);
   Tree_Action(v->Hexahedra, Draw_Hexahedron_Volume);
   Tree_Action(v->Prisms, Draw_Prism_Volume);
@@ -208,9 +213,9 @@ int Test_Simple_Surface_Draw()
 
 void Draw_Mesh_Surfaces(void *a, void *b)
 {
-  Surface *s;
-  s = *(Surface **) a;
+  Surface *s = *(Surface **) a;
   theColor = s->Color;
+  thePhysical = getFirstPhysical(MSH_PHYSICAL_SURFACE, s->Num);
   if(!(s->Visible & VIS_MESH))
     return;
   if(!Test_Simple_Surface_Draw())
@@ -233,11 +238,11 @@ void Draw_Mesh_Extruded_Surfaces(void *a, void *b)
 
 void Draw_Mesh_Curves(void *a, void *b)
 {
-  Curve *c;
-  c = *(Curve **) a;
+  Curve *c = *(Curve **) a;
   if(c->Num < 0)
     return;
   theColor = c->Color;
+  thePhysical = getFirstPhysical(MSH_PHYSICAL_LINE, c->Num);
   if(!(c->Visible & VIS_MESH))
     return;
   Tree_Action(c->Simplexes, Draw_Simplex_Curves);
@@ -308,10 +313,13 @@ void Draw_Simplex_Volume(void *a, void *b)
   if(part && !(*part)->Visible)
     return;
 
-  // FIXME: remove as soon as a coherent structure exists for volumes
+  // FIXME: move this in Draw_Mesh_Volumes as soon as a coherent
+  // structure exists for volumes
   Volume *V;
   if((V = FindVolume(s->iEnt, THEM)) && !(V->Visible & VIS_MESH))
     return;
+  if(CTX.mesh.color_carousel == 2)
+    thePhysical = getFirstPhysical(MSH_PHYSICAL_VOLUME, s->iEnt);
 
   if(CTX.mesh.gamma_sup) {
     tmp = s->GammaShapeMeasure();
@@ -326,7 +334,6 @@ void Draw_Simplex_Volume(void *a, void *b)
     fulldraw = 1;
   }
 
-
   double Xc = .25 * (s->V[0]->Pos.X + s->V[1]->Pos.X +
                      s->V[2]->Pos.X + s->V[3]->Pos.X);
   double Yc = .25 * (s->V[0]->Pos.Y + s->V[1]->Pos.Y +
@@ -340,13 +347,20 @@ void Draw_Simplex_Volume(void *a, void *b)
     fulldraw = 1;
   }
 
-  if(CTX.mesh.color_carousel && !fulldraw){
-    ColorSwitch((CTX.mesh.color_carousel == 2) ? s->iPart : s->iEnt);
+  if(!fulldraw){
+    if(theColor.type)
+      glColor4ubv((GLubyte *) & theColor.mesh);
+    else if(CTX.mesh.color_carousel == 1)
+      ColorSwitch(s->iEnt);
+    else if(CTX.mesh.color_carousel == 2)
+      ColorSwitch(thePhysical);
+    else if(CTX.mesh.color_carousel == 3)
+      ColorSwitch(s->iPart);
+    else
+      glColor4ubv((GLubyte *) & CTX.color.mesh.tetrahedron);
   }
-  else if(fulldraw)
-    glColor4ubv((GLubyte *) & CTX.color.mesh.line);
   else
-    glColor4ubv((GLubyte *) & CTX.color.mesh.tetrahedron);
+    glColor4ubv((GLubyte *) & CTX.color.mesh.line);
 
   // this is killing us!!!
   for(int i = 0; i < 4; i++) {
@@ -414,8 +428,14 @@ void Draw_Simplex_Volume(void *a, void *b)
 
   double n[4], x1x0, y1y0, z1z0, x2x0, y2y0, z2z0;
 
-  if(CTX.mesh.color_carousel)
-    ColorSwitch((CTX.mesh.color_carousel == 2) ? s->iPart : s->iEnt);
+  if(theColor.type)
+    glColor4ubv((GLubyte *) & theColor.mesh);
+  else if(CTX.mesh.color_carousel == 1)
+    ColorSwitch(s->iEnt);
+  else if(CTX.mesh.color_carousel == 2)
+    ColorSwitch(thePhysical);
+  else if(CTX.mesh.color_carousel == 3)
+    ColorSwitch(s->iPart);
   else
     glColor4ubv((GLubyte *) & CTX.color.mesh.tetrahedron);
 
@@ -527,11 +547,17 @@ void Draw_Simplex_Surface_Common(Simplex * s, double *pX, double *pY,
 
   if(CTX.mesh.surfaces && CTX.mesh.lines) {
 
-    if(CTX.mesh.color_carousel && !CTX.mesh.solid) {
+    if(!CTX.mesh.solid) {
       if(theColor.type)
-        glColor4ubv((GLubyte *) & theColor.mesh);
+	glColor4ubv((GLubyte *) & theColor.mesh);
+      else if(CTX.mesh.color_carousel == 1)
+	ColorSwitch(s->iEnt);
+      else if(CTX.mesh.color_carousel == 2)
+	ColorSwitch(thePhysical);
+      else if(CTX.mesh.color_carousel == 3)
+	ColorSwitch(s->iPart);
       else
-        ColorSwitch((CTX.mesh.color_carousel == 2) ? s->iPart : s->iEnt);
+	glColor4ubv((GLubyte *) & CTX.color.mesh.line);
     }
     else {
       glColor4ubv((GLubyte *) & CTX.color.mesh.line);
@@ -564,18 +590,18 @@ void Draw_Simplex_Surface_Common(Simplex * s, double *pX, double *pY,
 
   }
 
-  if(CTX.mesh.color_carousel) {
-    if(theColor.type)
-      glColor4ubv((GLubyte *) & theColor.mesh);
-    else
-      ColorSwitch((CTX.mesh.color_carousel == 2) ? s->iPart : s->iEnt);
-  }
-  else {
-    if(K == 3)
-      glColor4ubv((GLubyte *) & CTX.color.mesh.triangle);
-    else
-      glColor4ubv((GLubyte *) & CTX.color.mesh.quadrangle);
-  }
+  if(theColor.type)
+    glColor4ubv((GLubyte *) & theColor.mesh);
+  else if(CTX.mesh.color_carousel == 1)
+    ColorSwitch(s->iEnt);
+  else if(CTX.mesh.color_carousel == 2)
+    ColorSwitch(thePhysical);
+  else if(CTX.mesh.color_carousel == 3)
+    ColorSwitch(s->iPart);
+  else if(K == 3)
+    glColor4ubv((GLubyte *) & CTX.color.mesh.triangle);
+  else
+    glColor4ubv((GLubyte *) & CTX.color.mesh.quadrangle);
 
   if(CTX.mesh.surfaces && CTX.mesh.solid) {
 
@@ -783,12 +809,14 @@ void Draw_Simplex_Curves(void *a, void *b)
     Z[1] = Zc + CTX.mesh.explode * (s->VSUP[0]->Pos.Z - Zc);
   }
 
-  if(CTX.mesh.color_carousel) {
-    if(theColor.type)
-      glColor4ubv((GLubyte *) & theColor.mesh);
-    else
-      ColorSwitch((CTX.mesh.color_carousel == 2) ? s->iPart : s->iEnt);
-  }
+  if(theColor.type)
+    glColor4ubv((GLubyte *) & theColor.mesh);
+  else if(CTX.mesh.color_carousel == 1)
+    ColorSwitch(s->iEnt);
+  else if(CTX.mesh.color_carousel == 2)
+    ColorSwitch(thePhysical);
+  else if(CTX.mesh.color_carousel == 3)
+    ColorSwitch(s->iPart);
   else
     glColor4ubv((GLubyte *) & CTX.color.mesh.line);
 
@@ -839,10 +867,13 @@ void Draw_Hexahedron_Volume(void *a, void *b)
   if(part && !(*part)->Visible)
     return;
 
-  // FIXME: remove as soon as a coherent structure exists for volumes
+  // FIXME: move this in Draw_Mesh_Volumes as soon as a coherent
+  // structure exists for volumes
   Volume *V;
   if((V = FindVolume(h->iEnt, THEM)) && !(V->Visible & VIS_MESH))
     return;
+  if(CTX.mesh.color_carousel == 2)
+    thePhysical = getFirstPhysical(MSH_PHYSICAL_VOLUME, h->iEnt);
 
   for(i = 0; i < 8; i++) {
     Xc += h->V[i]->Pos.X;
@@ -858,8 +889,14 @@ void Draw_Hexahedron_Volume(void *a, void *b)
       return;
   }
 
-  if(CTX.mesh.color_carousel)
-    ColorSwitch((CTX.mesh.color_carousel == 2) ? h->iPart : h->iEnt);
+  if(theColor.type)
+    glColor4ubv((GLubyte *) & theColor.mesh);
+  else if(CTX.mesh.color_carousel == 1)
+    ColorSwitch(h->iEnt);
+  else if(CTX.mesh.color_carousel == 2)
+    ColorSwitch(thePhysical);
+  else if(CTX.mesh.color_carousel == 3)
+    ColorSwitch(h->iPart);
   else
     glColor4ubv((GLubyte *) & CTX.color.mesh.hexahedron);
 
@@ -977,10 +1014,13 @@ void Draw_Prism_Volume(void *a, void *b)
   if(part && !(*part)->Visible)
     return;
 
-  // FIXME: remove as soon as a coherent structure exists for volumes
+  // FIXME: move this in Draw_Mesh_Volumes as soon as a coherent
+  // structure exists for volumes
   Volume *V;
   if((V = FindVolume(p->iEnt, THEM)) && !(V->Visible & VIS_MESH))
     return;
+  if(CTX.mesh.color_carousel == 2)
+    thePhysical = getFirstPhysical(MSH_PHYSICAL_VOLUME, p->iEnt);
 
   for(i = 0; i < 6; i++) {
     Xc += p->V[i]->Pos.X;
@@ -996,8 +1036,14 @@ void Draw_Prism_Volume(void *a, void *b)
       return;
   }
 
-  if(CTX.mesh.color_carousel)
-    ColorSwitch((CTX.mesh.color_carousel == 2) ? p->iPart : p->iEnt);
+  if(theColor.type)
+    glColor4ubv((GLubyte *) & theColor.mesh);
+  else if(CTX.mesh.color_carousel == 1)
+    ColorSwitch(p->iEnt);
+  else if(CTX.mesh.color_carousel == 2)
+    ColorSwitch(thePhysical);
+  else if(CTX.mesh.color_carousel == 3)
+    ColorSwitch(p->iPart);
   else
     glColor4ubv((GLubyte *) & CTX.color.mesh.prism);
 
@@ -1096,10 +1142,13 @@ void Draw_Pyramid_Volume(void *a, void *b)
   if(part && !(*part)->Visible)
     return;
 
-  // FIXME: remove as soon as a coherent structure exists for volumes
+  // FIXME: move this in Draw_Mesh_Volumes as soon as a coherent
+  // structure exists for volumes
   Volume *V;
   if((V = FindVolume(p->iEnt, THEM)) && !(V->Visible & VIS_MESH))
     return;
+  if(CTX.mesh.color_carousel == 2)
+    thePhysical = getFirstPhysical(MSH_PHYSICAL_VOLUME, p->iEnt);
 
   for(i = 0; i < 5; i++) {
     Xc += p->V[i]->Pos.X;
@@ -1115,8 +1164,14 @@ void Draw_Pyramid_Volume(void *a, void *b)
       return;
   }
 
-  if(CTX.mesh.color_carousel)
-    ColorSwitch((CTX.mesh.color_carousel == 2) ? p->iPart : p->iEnt);
+  if(theColor.type)
+    glColor4ubv((GLubyte *) & theColor.mesh);
+  else if(CTX.mesh.color_carousel == 1)
+    ColorSwitch(p->iEnt);
+  else if(CTX.mesh.color_carousel == 2)
+    ColorSwitch(thePhysical);
+  else if(CTX.mesh.color_carousel == 3)
+    ColorSwitch(p->iPart);
   else
     glColor4ubv((GLubyte *) & CTX.color.mesh.pyramid);
 
diff --git a/Graphics/PostElement.cpp b/Graphics/PostElement.cpp
index 51e266b14fd34a4ed6f698e43451f7dee6fbe985..abfc9eaaa94689cd8d84c9bbb10078b7322b4973 100644
--- a/Graphics/PostElement.cpp
+++ b/Graphics/PostElement.cpp
@@ -1,4 +1,4 @@
-// $Id: PostElement.cpp,v 1.22 2004-02-20 17:58:00 geuzaine Exp $
+// $Id: PostElement.cpp,v 1.23 2004-02-28 00:48:49 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -21,7 +21,7 @@
 //
 // Contributor(s):
 //   Laurent Stainier
-//
+//   Jean-Luc Flejou
 
 // OK, I understand why the Cut2D stuff does not work correctly with a
 // TWO_FACE light: the normal has too be coherent with the vertex
@@ -818,6 +818,10 @@ void Draw_VectorElement(int type, Post_View * View,
       if(ts) {  //draw trajectory
         if(View->LineType) {
           double dx2, dy2, dz2, XX[2], YY[2], ZZ[2];
+	  // warning, warning...
+	  Raise[0][1] = Raise[0][0];
+	  Raise[1][1] = Raise[1][0];
+	  Raise[2][1] = Raise[2][0];
           for(j = 0; j < ts; j++) {
             dx = V[3 * (ts - j)];
             dy = V[3 * (ts - j) + 1];
@@ -829,11 +833,11 @@ void Draw_VectorElement(int type, Post_View * View,
             // not perfect...
             Palette2(View, ValMin, ValMax, dd);
             XX[0] = X[0] + fact * dx;
-            XX[1] = X[1] + fact * dx2;
+            XX[1] = X[0] + fact * dx2;
             YY[0] = Y[0] + fact * dy;
-            YY[1] = Y[1] + fact * dy2;
+            YY[1] = Y[0] + fact * dy2;
             ZZ[0] = Z[0] + fact * dz;
-            ZZ[1] = Z[1] + fact * dz2;
+            ZZ[1] = Z[0] + fact * dz2;
             Draw_Line(View->LineType, View->LineWidth, XX, YY, ZZ, Raise, View->Light);
           }
         }
@@ -1041,10 +1045,12 @@ void Draw_TensorElement(int type, Post_View * View,
   /// the scalar function...
 
   // View->TensorType == DRAW_POST_VONMISES 
+  int ts = View->TimeStep;
+  View->TimeStep = 0;
 
   double V_VonMises[8];
   for(int i = 0; i < nbnod; i++){
-    V_VonMises[i] = ComputeVonMises(V + 9*i);
+    V_VonMises[i] = ComputeVonMises(V + 9*(i + nbnod * ts));
   }
 
   switch (type) {
@@ -1073,6 +1079,8 @@ void Draw_TensorElement(int type, Post_View * View,
     Draw_ScalarPyramid(View, 0, ValMin, ValMax, Raise, X, Y, Z, V_VonMises);
     break;
   }
+
+  View->TimeStep = ts;
 }
 
 #define ARGS Post_View *View, 					\
@@ -1120,4 +1128,3 @@ void Draw_TensorPyramid(ARGS)
 }
 
 #undef ARGS
-
diff --git a/Makefile b/Makefile
index fedb43cc0d4f9bca3357fae0f06ffc96bef883a9..043c09530fa6af5b90c074348cbe8a578ef01dc4 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.321 2004-02-20 17:57:58 geuzaine Exp $
+# $Id: Makefile,v 1.322 2004-02-28 00:48:47 geuzaine Exp $
 #
 # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 #
@@ -145,6 +145,10 @@ tags:
 	gtags
 	htags
 
+etags:
+	etags `find . \( -name "*.cpp" -o -name "*.c" -o -name "*.h"\
+                      -o -name "*.y" -o -name "*.l" \)`
+
 tgz:
 	if (test -f ${GMSH_ARCHIVE}.tar.gz); then \
 	  mv -f ${GMSH_ARCHIVE}.tar.gz ${GMSH_ARCHIVE}.tar.gz~; \
diff --git a/Mesh/2D_Mesh.cpp b/Mesh/2D_Mesh.cpp
index aff00fc2657f85fa088d309f2c6178bdbbd2c281..c4e3cc73ba1c71456ebabfba4d4f54e34e691914 100644
--- a/Mesh/2D_Mesh.cpp
+++ b/Mesh/2D_Mesh.cpp
@@ -1,4 +1,4 @@
-// $Id: 2D_Mesh.cpp,v 1.51 2004-02-07 01:40:20 geuzaine Exp $
+// $Id: 2D_Mesh.cpp,v 1.52 2004-02-28 00:48:49 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -925,6 +925,11 @@ void Maillage_Surface(void *data, void *dum)
     return;
   }
 
+  if(s->Typ == MSH_SURF_STL) {
+    Msg(GERROR, "Remeshing of STL surfaces is not implemented (yet)");
+    return;
+  }
+
   THESUPPORT = s->Support;
   THESURFACE = s;
 
diff --git a/Mesh/Create.cpp b/Mesh/Create.cpp
index f2130dcae6e16798dbb8217708c31b70a0fd85f4..312c0e99ac5029efbddb26f9dd7760fd8daaeafc 100644
--- a/Mesh/Create.cpp
+++ b/Mesh/Create.cpp
@@ -1,4 +1,4 @@
-// $Id: Create.cpp,v 1.47 2004-02-07 01:40:21 geuzaine Exp $
+// $Id: Create.cpp,v 1.48 2004-02-28 00:48:49 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -28,6 +28,10 @@
 #include "Context.h"
 #include "Create.h"
 
+// This file contains the C-style interface for creation/deletion of
+// objects. All this could be easily rewritten in C++ (and split into
+// separate classes: Line, Surface, Volume, etc.).
+
 extern Mesh *THEM;
 extern Context_T CTX;
 
@@ -155,6 +159,37 @@ int compareSxF(const void *a, const void *b)
   return compareFace(&q->F, &w->F);
 }
 
+int comparePhysicalGroup(const void *a, const void *b)
+{
+  PhysicalGroup *q, *w;
+  int cmp;
+
+  q = *(PhysicalGroup **) a;
+  w = *(PhysicalGroup **) b;
+  cmp = q->Typ - w->Typ;
+
+  if(cmp)
+    return cmp;
+  else
+    return (q->Num - w->Num);
+}
+
+int compareMeshPartitionNum(const void *a, const void *b)
+{
+  MeshPartition *q, *w;
+  q = *(MeshPartition **) a;
+  w = *(MeshPartition **) b;
+  return (q->Num - w->Num);
+}
+
+int compareMeshPartitionIndex(const void *a, const void *b)
+{
+  MeshPartition *q, *w;
+  q = *(MeshPartition **) a;
+  w = *(MeshPartition **) b;
+  return (q->Index - w->Index);
+}
+
 Attractor *Create_Attractor(int Num, double lc1, double lc2, double Radius,
                             Vertex * v, Curve * c, Surface * s)
 {
@@ -170,36 +205,20 @@ Attractor *Create_Attractor(int Num, double lc1, double lc2, double Radius,
   return pA;
 }
 
-void Add_SurfaceLoop(int Num, List_T * intlist, Mesh * M)
-{
-  SurfaceLoop *pSL;
-  int i, j;
-  pSL = (SurfaceLoop *) Malloc(sizeof(SurfaceLoop));
-  pSL->Surfaces = List_Create(List_Nbr(intlist), 1, sizeof(int));
-  pSL->Num = Num;
-  THEM->MaxSurfaceLoopNum = IMAX(THEM->MaxSurfaceLoopNum, Num);
-  for(i = 0; i < List_Nbr(intlist); i++) {
-    List_Read(intlist, i, &j);
-    List_Add(pSL->Surfaces, &j);
-  }
-  Tree_Add(M->SurfaceLoops, &pSL);
-}
-
-void Add_PhysicalGroup(int Num, int typ, List_T * intlist, Mesh * M)
+PhysicalGroup *Create_PhysicalGroup(int Num, int typ, List_T * intlist)
 {
-  PhysicalGroup *p;
-  int i, j;
-  p = (PhysicalGroup *) Malloc(sizeof(PhysicalGroup));
+  PhysicalGroup *p = (PhysicalGroup *) Malloc(sizeof(PhysicalGroup));
   p->Entities = List_Create(List_Nbr(intlist), 1, sizeof(int));
   p->Num = Num;
   THEM->MaxPhysicalNum = IMAX(THEM->MaxPhysicalNum, Num);
   p->Typ = typ;
   p->Visible = VIS_GEOM | VIS_MESH;
-  for(i = 0; i < List_Nbr(intlist); i++) {
+  for(int i = 0; i < List_Nbr(intlist); i++) {
+    int j;
     List_Read(intlist, i, &j);
     List_Add(p->Entities, &j);
   }
-  List_Add(M->PhysicalGroups, &p);
+  return p;
 }
 
 void Free_PhysicalGroup(void *a, void *b)
@@ -239,35 +258,52 @@ void Free_MeshPartition(void *a, void *b)
   }
 }
 
-int compareMeshPartitionNum(const void *a, const void *b)
+EdgeLoop *Create_EdgeLoop(int Num, List_T * intlist)
 {
-  MeshPartition *q, *w;
-  q = *(MeshPartition **) a;
-  w = *(MeshPartition **) b;
-  return (q->Num - w->Num);
+  EdgeLoop *l = (EdgeLoop *) Malloc(sizeof(EdgeLoop));
+  l->Curves = List_Create(List_Nbr(intlist), 1, sizeof(int));
+  l->Num = Num;
+  THEM->MaxLineLoopNum = IMAX(THEM->MaxLineLoopNum, Num);
+  for(int i = 0; i < List_Nbr(intlist); i++) {
+    int j;
+    List_Read(intlist, i, &j);
+    List_Add(l->Curves, &j);
+  }
+  return l;
 }
 
-int compareMeshPartitionIndex(const void *a, const void *b)
+void Free_EdgeLoop(void *a, void *b)
 {
-  MeshPartition *q, *w;
-  q = *(MeshPartition **) a;
-  w = *(MeshPartition **) b;
-  return (q->Index - w->Index);
+  EdgeLoop *l = *(EdgeLoop **) a;
+  if(l) {
+    List_Delete(l->Curves);
+    Free(l);
+    l = NULL;
+  }
 }
 
-void Add_EdgeLoop(int Num, List_T * intlist, Mesh * M)
+SurfaceLoop *Create_SurfaceLoop(int Num, List_T * intlist)
 {
-  EdgeLoop *pEL;
-  int i, j;
-  pEL = (EdgeLoop *) Malloc(sizeof(EdgeLoop));
-  pEL->Curves = List_Create(List_Nbr(intlist), 1, sizeof(int));
-  pEL->Num = Num;
-  THEM->MaxLineLoopNum = IMAX(THEM->MaxLineLoopNum, Num);
-  for(i = 0; i < List_Nbr(intlist); i++) {
+  SurfaceLoop *l = (SurfaceLoop *) Malloc(sizeof(SurfaceLoop));
+  l->Surfaces = List_Create(List_Nbr(intlist), 1, sizeof(int));
+  l->Num = Num;
+  THEM->MaxSurfaceLoopNum = IMAX(THEM->MaxSurfaceLoopNum, Num);
+  for(int i = 0; i < List_Nbr(intlist); i++) {
+    int j;
     List_Read(intlist, i, &j);
-    List_Add(pEL->Curves, &j);
+    List_Add(l->Surfaces, &j);
+  }
+  return l;
+}
+
+void Free_SurfaceLoop(void *a, void *b)
+{
+  SurfaceLoop *l = *(SurfaceLoop **) a;
+  if(l) {
+    List_Delete(l->Surfaces);
+    Free(l);
+    l = NULL;
   }
-  Tree_Add(M->EdgeLoops, &pEL);
 }
 
 void End_Curve(Curve * c)
@@ -279,8 +315,7 @@ void End_Curve(Curve * c)
   int i;
   Curve *Curve;
 
-  if(c->Typ == MSH_SEGM_CIRC ||
-     c->Typ == MSH_SEGM_CIRC_INV ||
+  if(c->Typ == MSH_SEGM_CIRC || c->Typ == MSH_SEGM_CIRC_INV ||
      c->Typ == MSH_SEGM_ELLI || c->Typ == MSH_SEGM_ELLI_INV) {
 
     Curve = c;
@@ -492,7 +527,6 @@ void End_Surface(Surface * s)
 }
 
 
-
 Curve *Create_Curve(int Num, int Typ, int Order, List_T * Liste,
                     List_T * Knots, int p1, int p2, double u1, double u2)
 {
@@ -501,20 +535,17 @@ Curve *Create_Curve(int Num, int Typ, int Order, List_T * Liste,
   int i, j, iPnt;
   double d;
   double matcr[4][4] = { {-0.5, 1.5, -1.5, 0.5},
-  {1.0, -2.5, 2.0, -0.5},
-  {-0.5, 0.0, 0.5, 0.0},
-  {0.0, 1.0, 0.0, 0.0}
-  };
+			 {1.0, -2.5, 2.0, -0.5},
+			 {-0.5, 0.0, 0.5, 0.0},
+			 {0.0, 1.0, 0.0, 0.0} };
   double matbs[4][4] = { {-1.0, 3, -3, 1},
-  {3, -6, 3.0, 0},
-  {-3, 0.0, 3, 0.0},
-  {1, 4, 1, 0.0}
-  };
+			 {3, -6, 3.0, 0},
+			 {-3, 0.0, 3, 0.0},
+			 {1, 4, 1, 0.0} };
   double matbez[4][4] = { {-1.0, 3, -3, 1},
-  {3, -6, 3.0, 0},
-  {-3, 3.0, 0, 0.0},
-  {1, 0, 0, 0.0}
-  };
+			  {3, -6, 3.0, 0},
+			  {-3, 3.0, 0, 0.0},
+			  {1, 0, 0, 0.0} };
 
   pC = (Curve *) Malloc(sizeof(Curve));
   pC->Dirty = 0;
diff --git a/Mesh/Create.h b/Mesh/Create.h
index db00214d5614d71b884fa0038cff651279bb2cf9..885f900afc2a308db0a825a9bb15e3c91f346105 100644
--- a/Mesh/Create.h
+++ b/Mesh/Create.h
@@ -24,56 +24,53 @@
 #include "Vertex.h"
 #include "Mesh.h"
 
-int compareNXE (const void *a, const void *b);
-int compareFxE (const void *a, const void *b);
-int compareSurfaceLoop (const void *a, const void *b);
-int compareEdgeLoop (const void *a, const void *b);
-int compareHexahedron (const void *a, const void *b);
-int comparePrism (const void *a, const void *b);
-int comparePyramid (const void *a, const void *b);
-int compareQuality (const void *a, const void *b);
-int compareCurve (const void *a, const void *b);
-int compareAttractor (const void *a, const void *b);
-int compareSurface (const void *a, const void *b);
-int compareVolume (const void *a, const void *b);
-int compareSxF (const void *a, const void *b);
+int compareNXE(const void *a, const void *b);
+int compareFxE(const void *a, const void *b);
+int compareSurfaceLoop(const void *a, const void *b);
+int compareEdgeLoop(const void *a, const void *b);
+int compareHexahedron(const void *a, const void *b);
+int comparePrism(const void *a, const void *b);
+int comparePyramid(const void *a, const void *b);
+int compareQuality(const void *a, const void *b);
+int compareCurve(const void *a, const void *b);
+int compareAttractor(const void *a, const void *b);
+int compareSurface(const void *a, const void *b);
+int compareVolume(const void *a, const void *b);
+int compareSxF(const void *a, const void *b);
 int compareMeshPartitionNum(const void *a, const void *b);
 int compareMeshPartitionIndex(const void *a, const void *b);
+int comparePhysicalGroup(const void *a, const void *b);
 
-Attractor * Create_Attractor (int Num, double lc1, double lc2, double Radius,
-                              Vertex * v, Curve * c, Surface * s);
+Attractor     *Create_Attractor(int Num, double lc1, double lc2, double Radius,
+				Vertex * v, Curve * c, Surface * s);
+PhysicalGroup *Create_PhysicalGroup(int Num, int typ, List_T * intlist);
+Curve         *Create_Curve(int Num, int Typ, int Order, List_T * Liste,
+			    List_T * Knots, int p1, int p2, double u1, double u2);
+Surface       *Create_Surface(int Num, int Typ);
+Volume        *Create_Volume(int Num, int Typ);
+Hexahedron    *Create_Hexahedron(Vertex * v1, Vertex * v2, Vertex * v3, Vertex * v4,
+				 Vertex * v5, Vertex * v6, Vertex * v7, Vertex * v8);
+Prism         *Create_Prism(Vertex * v1, Vertex * v2, Vertex * v3,
+			    Vertex * v4, Vertex * v5, Vertex * v6);
+Pyramid       *Create_Pyramid(Vertex * v1, Vertex * v2, Vertex * v3,
+			      Vertex * v4, Vertex * v5);
+EdgeLoop      *Create_EdgeLoop(int Num, List_T * intlist);
+SurfaceLoop   *Create_SurfaceLoop(int Num, List_T * intlist);
 
-void Add_EdgeLoop (int Num, List_T * intlist, Mesh * M);
-void Add_SurfaceLoop (int Num, List_T * intlist, Mesh * M);
-
-void Add_PhysicalGroup (int Num, int typ, List_T * intlist, Mesh * M);
 void Free_PhysicalGroup(void *a, void *b);
-
-int  Add_MeshPartition(int Num, Mesh * M);
 void Free_MeshPartition(void *a, void *b);
-
-Curve *Create_Curve (int Num, int Typ, int Order, List_T * Liste,
-                     List_T * Knots, int p1, int p2, double u1, double u2);
-void End_Curve (Curve * c);
-void Free_Curve(void *a, void *b);
-
-Surface * Create_Surface (int Num, int Typ);
-void End_Surface (Surface * s);
 void Free_Surface(void *a, void *b);
-
-Volume * Create_Volume (int Num, int Typ);
 void Free_Volume(void *a, void *b);
-
-Hexahedron * Create_Hexahedron (Vertex * v1, Vertex * v2, Vertex * v3, Vertex * v4,
-                              Vertex * v5, Vertex * v6, Vertex * v7, Vertex * v8);
 void Free_Hexahedron(void *a, void *b);
-
-Prism * Create_Prism (Vertex * v1, Vertex * v2, Vertex * v3,
-                      Vertex * v4, Vertex * v5, Vertex * v6);
 void Free_Prism(void *a, void *b);
-
-Pyramid * Create_Pyramid (Vertex * v1, Vertex * v2, Vertex * v3,
-			  Vertex * v4, Vertex * v5);
 void Free_Pyramid(void *a, void *b);
+void Free_Curve(void *a, void *b);
+void Free_EdgeLoop(void *a, void *b);
+void Free_SurfaceLoop(void *a, void *b);
+
+void End_Curve(Curve * c);
+void End_Surface(Surface * s);
+
+int  Add_MeshPartition(int Num, Mesh * M);
 
 #endif
diff --git a/Mesh/Generator.cpp b/Mesh/Generator.cpp
index 8dc8b911cc4ccfa2f2589e6317c7b564c033ef88..170ccba75a45f5fbe02b7c9280161e8a86726e32 100644
--- a/Mesh/Generator.cpp
+++ b/Mesh/Generator.cpp
@@ -1,4 +1,4 @@
-// $Id: Generator.cpp,v 1.48 2004-02-07 01:40:22 geuzaine Exp $
+// $Id: Generator.cpp,v 1.49 2004-02-28 00:48:50 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -200,10 +200,10 @@ void Init_Mesh(Mesh * M)
   Tree_Action(M->Curves, Free_Curve);
   Tree_Delete(M->Curves);
 
-  //Tree_Action (M->SurfaceLoops, Free_SurfaceLoop); // todo
+  Tree_Action (M->SurfaceLoops, Free_SurfaceLoop);
   Tree_Delete(M->SurfaceLoops);
 
-  //Tree_Action (M->EdgeLoops, Free_EdgeLoop); // todo
+  Tree_Action (M->EdgeLoops, Free_EdgeLoop);
   Tree_Delete(M->EdgeLoops);
 
   Tree_Action(M->Surfaces, Free_Surface);
diff --git a/Mesh/Interpolation.cpp b/Mesh/Interpolation.cpp
index e30dbcebbb980ea0b6cd90abb571f4439b07b8a8..24e81f1cd3eeeaaf9001dd40505a90046e7532f2 100644
--- a/Mesh/Interpolation.cpp
+++ b/Mesh/Interpolation.cpp
@@ -1,4 +1,4 @@
-// $Id: Interpolation.cpp,v 1.23 2004-02-07 01:40:22 geuzaine Exp $
+// $Id: Interpolation.cpp,v 1.24 2004-02-28 00:48:50 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -22,6 +22,7 @@
 #include "Gmsh.h"
 #include "Numeric.h"
 #include "Geo.h"
+#include "Nurbs.h"
 #include "CAD.h"
 #include "Mesh.h"
 #include "Utils.h"
@@ -420,20 +421,11 @@ Vertex InterpolateSurface(Surface * s, double u, double v,
     S[1] = C[1]->beg;
     S[2] = C[2]->beg;
     S[3] = C[3]->beg;
-    V[0] =
-      InterpolateCurve(C[0], C[0]->ubeg + (C[0]->uend - C[0]->ubeg) * u, 0);
-    V[1] =
-      InterpolateCurve(C[1], C[1]->ubeg + (C[1]->uend - C[1]->ubeg) * v, 0);
-    V[2] =
-      InterpolateCurve(C[2],
-                       C[2]->ubeg + (C[2]->uend - C[2]->ubeg) * (1. - u), 0);
-    V[3] =
-      InterpolateCurve(C[3],
-                       C[3]->ubeg + (C[3]->uend - C[3]->ubeg) * (1. - v), 0);
-
-    T =
-      TransfiniteQua(V[0], V[1], V[2], V[3], *S[0], *S[1], *S[2], *S[3], u,
-                     v);
+    V[0] = InterpolateCurve(C[0], C[0]->ubeg + (C[0]->uend - C[0]->ubeg) * u, 0);
+    V[1] = InterpolateCurve(C[1], C[1]->ubeg + (C[1]->uend - C[1]->ubeg) * v, 0);
+    V[2] = InterpolateCurve(C[2], C[2]->ubeg + (C[2]->uend - C[2]->ubeg) * (1. - u), 0);
+    V[3] = InterpolateCurve(C[3], C[3]->ubeg + (C[3]->uend - C[3]->ubeg) * (1. - v), 0);
+    T = TransfiniteQua(V[0], V[1], V[2], V[3], *S[0], *S[1], *S[2], *S[3], u, v);
     if(issphere)
       TransfiniteSph(*S[0], *c1, &T);
 
diff --git a/Mesh/Interpolation.h b/Mesh/Interpolation.h
index e4fc22b09e97dbc623373c4fad10f2260cecb381..55e49952a7fa08a2001201cc1425360cd30562a3 100644
--- a/Mesh/Interpolation.h
+++ b/Mesh/Interpolation.h
@@ -48,14 +48,6 @@ void TransfiniteSph (Vertex S, Vertex center, Vertex * T);
 
 void Normal2Surface (Surface * s, double u, double v, double n[3]);
 
-Vertex InterpolateCubicSpline (Vertex * v[4], double t, double mat[4][4],
-                               int derivee, double t1, double t2);
-Vertex InterpolateUBS (Curve * Curve, double u, int derivee);
-  
-Vertex InterpolateNurbs (Curve * Curve, double u, int derivee);
-
-Vertex InterpolateNurbsSurface (Surface * s, double u, double v);
-
 #endif
 
 
diff --git a/Mesh/Makefile b/Mesh/Makefile
index f6137d55b4214ad6fe01c4e1a6e6121d7368f9eb..7818243d46215f9422332e9f7b823f3e6a542f07 100644
--- a/Mesh/Makefile
+++ b/Mesh/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.54 2004-02-07 01:40:22 geuzaine Exp $
+# $Id: Makefile,v 1.55 2004-02-28 00:48:50 geuzaine Exp $
 #
 # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 #
@@ -251,13 +251,15 @@ Print_Mesh.o: Print_Mesh.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../Mesh/Matrix.h Create.h ../Common/Context.h
 Read_Mesh.o: Read_Mesh.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
-  ../DataStr/avl.h ../DataStr/Tools.h ../Geo/Geo.h Mesh.h Vertex.h \
-  Simplex.h Edge.h ../Geo/ExtrudeParams.h STL.h Metric.h Matrix.h \
+  ../DataStr/avl.h ../DataStr/Tools.h ../Geo/Geo.h ../Geo/CAD.h \
+  ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \
+  ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h \
   3D_Mesh.h Create.h ../Geo/MinMax.h ../Common/Context.h
 STL.o: STL.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \
   ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
-  Mesh.h Vertex.h Simplex.h Edge.h ../Geo/ExtrudeParams.h STL.h Metric.h \
-  Matrix.h
+  ../Numeric/Numeric.h Mesh.h Vertex.h Simplex.h Edge.h \
+  ../Geo/ExtrudeParams.h STL.h Metric.h Matrix.h ../Geo/CAD.h \
+  ../Geo/Geo.h Create.h Interpolation.h ../Common/Context.h
 SMS.o: SMS.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \
   ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
   ../Geo/Geo.h Mesh.h Vertex.h Simplex.h Edge.h ../Geo/ExtrudeParams.h \
@@ -282,14 +284,14 @@ Metric.o: Metric.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../Mesh/Matrix.h Interpolation.h
 Nurbs.o: Nurbs.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
-  ../DataStr/avl.h ../DataStr/Tools.h Mesh.h Vertex.h Simplex.h Edge.h \
-  ../Geo/ExtrudeParams.h STL.h Metric.h Matrix.h
+  ../DataStr/avl.h ../DataStr/Tools.h Nurbs.h Vertex.h Mesh.h Simplex.h \
+  Edge.h ../Geo/ExtrudeParams.h STL.h Metric.h Matrix.h ../Geo/Geo.h \
+  ../Geo/GeoUtils.h Create.h ../Geo/CAD.h
 Interpolation.o: Interpolation.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h ../Geo/Geo.h \
-  ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h \
-  ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h \
-  ../Mesh/Matrix.h Utils.h Interpolation.h
+  Nurbs.h Vertex.h Mesh.h Simplex.h Edge.h ../Geo/ExtrudeParams.h STL.h \
+  Metric.h Matrix.h ../Geo/CAD.h Utils.h Interpolation.h
 SecondOrder.o: SecondOrder.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../Geo/Geo.h Mesh.h Vertex.h \
diff --git a/Mesh/Mesh.h b/Mesh/Mesh.h
index 77d14351b9b530fac299a9fb9226a6f8096d6124..664b7c6a62c062585be8b148f04a4658e8928108 100644
--- a/Mesh/Mesh.h
+++ b/Mesh/Mesh.h
@@ -243,10 +243,11 @@ typedef struct{
   double center[3];
 }CylParam;
 
-typedef struct{
+class DrawingColor{
+ public:
   int type;
   unsigned int geom, mesh;
-}DrawingColor;
+};
 
 struct _Surf{
   int Num;
diff --git a/Mesh/Nurbs.cpp b/Mesh/Nurbs.cpp
index 8f6e9adb17faccb7a5471a20b1c9acc344b21aa9..fc503fcee094286ae4de8837af1bb17428b9233c 100644
--- a/Mesh/Nurbs.cpp
+++ b/Mesh/Nurbs.cpp
@@ -1,4 +1,4 @@
-// $Id: Nurbs.cpp,v 1.14 2004-02-07 01:40:22 geuzaine Exp $
+// $Id: Nurbs.cpp,v 1.15 2004-02-28 00:48:50 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -20,7 +20,14 @@
 // Please report all bugs and problems to <gmsh@geuz.org>.
 
 #include "Gmsh.h"
+#include "Nurbs.h"
 #include "Mesh.h"
+#include "Geo.h"
+#include "GeoUtils.h"
+#include "Create.h"
+#include "CAD.h"
+
+extern Mesh *THEM;
 
 // Cubic spline
 
@@ -227,3 +234,214 @@ Vertex InterpolateNurbsSurface(Surface * s, double u, double v)
   }
   return sp;
 }
+
+
+// Surface creation helpers
+
+void CreateNurbsSurfaceSupport(int Num, int Order1, int Order2,
+                               List_T * List, List_T * ku, List_T * kv)
+{
+  // This routine has been heavily modified to fit the new interfaces,
+  // but has not been tested since then. It's probably full of bugs
+  // now.
+  List_T *ListOfDouble_L;
+  List_T *ListCP = List_Create(2, 2, sizeof(int));
+
+  for(int j = 0; j < List_Nbr(List); j++) {
+    List_Read(List, j, &ListOfDouble_L);
+    for(int i = 0; i < List_Nbr(ListOfDouble_L); i++) {
+      double d;
+      List_Read(ListOfDouble_L, i, &d);
+      int N = (int)d;
+      List_Add(ListCP, &N);
+    }
+  }
+  List_Read(List, 0, &ListOfDouble_L);
+  int Nu = List_Nbr(List);
+  int Nv = List_Nbr(ListOfDouble_L);
+
+  Surface *s = Create_Surface(Num, MSH_SURF_NURBS);
+  s->Support = NULL;
+  s->Control_Points = List_Create(4, 1, sizeof(Vertex *));
+  s->OrderU = Order1;
+  s->OrderV = Order2;
+  s->Nu = Nu;
+  s->Nv = Nv;
+  for(int i = 0; i < List_Nbr(ListCP); i++) {
+    int j;
+    List_Read(ListCP, i, &j);
+    Vertex *v = FindPoint(j, THEM);
+    if(v){
+      List_Add(s->Control_Points, &v);
+    }
+    else{
+      Msg(GERROR, "Unknown control point %d in nurbs surface", j);
+    }
+  }
+
+  s->ku = (float *)malloc(List_Nbr(ku) * sizeof(float));
+  s->kv = (float *)malloc(List_Nbr(kv) * sizeof(float));
+
+  double kumin = 0., kumax = 1.;
+  double kvmin = 0., kvmax = 1.;
+
+  for(int i = 0; i < List_Nbr(ku); i++) {
+    double d;
+    List_Read(ku, i, &d);
+    float f = (float)((d - kumin) / (kumax - kumin));
+    s->ku[i] = f;
+  }
+  for(int i = 0; i < List_Nbr(kv); i++) {
+    double d;
+    List_Read(kv, i, &d);
+    float f = (float)((d - kvmin) / (kvmax - kvmin));
+    s->kv[i] = f;
+  }
+
+  List_Delete(ListCP);
+
+  End_Surface(s);
+  Tree_Add(THEM->Surfaces, &s);
+}
+
+void CreateNurbsSurface(int Num, int Order1, int Order2, List_T * List,
+                        List_T * ku, List_T * kv)
+{
+  // This routine has been heavily modified to fit the new interfaces,
+  // but has not been tested since then. It's probably full of bugs
+  // now.
+
+  List_T *ListOfDouble_L, *Listint, *ListCP;
+  int Loop[4];
+
+  ListCP = List_Create(2, 2, sizeof(int));
+
+  double kumin, kumax;
+  List_Read(ku, 0, &kumin);
+  List_Read(ku, List_Nbr(ku) - 1, &kumax);
+  double kvmin, kvmax;
+  List_Read(kv, 0, &kvmin);
+  List_Read(kv, List_Nbr(kv) - 1, &kvmax);
+  for(int j = 0; j < List_Nbr(List); j++) {
+    List_Read(List, j, &ListOfDouble_L);
+    for(int i = 0; i < List_Nbr(ListOfDouble_L); i++) {
+      double d;
+      List_Read(ListOfDouble_L, i, &d);
+      int N = (int)d;
+      List_Add(ListCP, &N);
+    }
+  }
+
+  // 1st and 3rd gen
+  List_Read(List, 0, &ListOfDouble_L);
+  Listint = ListOfDouble2ListOfInt(ListOfDouble_L);
+  if(recognize_seg(MSH_SEGM_NURBS, Listint, &Loop[0])) {
+  }
+  else {
+    Loop[0] = NEWREG();
+    Curve *c = Create_Curve(Loop[0], MSH_SEGM_NURBS, Order1, Listint, NULL, 
+			    -1, -1, kumin, kumax);
+    Tree_Add(THEM->Curves, &c);
+    CreateReversedCurve(THEM, c);
+    c->k = (float *)malloc(4 * List_Nbr(ku) * sizeof(float));
+    for(int i = 0; i < List_Nbr(ku); i++) {
+      double d;
+      List_Read(ku, i, &d);
+      c->k[i] = (float)d /*((d-kumin)/(kumax-kumin)) */ ;
+    }
+  }
+  List_Delete(Listint);
+
+  List_Read(List, List_Nbr(List) - 1, &ListOfDouble_L);
+  Listint = ListOfDouble2ListOfInt(ListOfDouble_L);
+  if(recognize_seg(MSH_SEGM_NURBS, Listint, &Loop[2])) {
+  }
+  else {
+    Loop[2] = NEWREG();
+    Curve *c = Create_Curve(Loop[2], MSH_SEGM_NURBS, Order1, Listint, NULL, 
+			    -1, -1, kumin, kumax);
+    Tree_Add(THEM->Curves, &c);
+    CreateReversedCurve(THEM, c);
+    c->k = (float *)malloc(4 * List_Nbr(ku) * sizeof(float));
+    for(int i = 0; i < List_Nbr(ku); i++) {
+      double d;
+      List_Read(ku, i, &d);
+      c->k[i] = (float)d /*((d-kumin)/(kumax-kumin)) */ ;
+    }
+  }
+  List_Delete(Listint);
+
+  // 2nd and 4th gen
+  List_T *List1 = List_Create(List_Nbr(List), 1, sizeof(double));
+  List_T *List2 = List_Create(List_Nbr(List), 1, sizeof(double));
+  for(int i = 0; i < List_Nbr(List); i++) {
+    List_Read(List, i, &ListOfDouble_L);
+    List_Add(List1, List_Pointer(ListOfDouble_L, 0));
+    List_Add(List2, List_Pointer(ListOfDouble_L, List_Nbr(ListOfDouble_L) - 1));
+  }
+
+  Listint = ListOfDouble2ListOfInt(List1);
+  if(recognize_seg(MSH_SEGM_NURBS, Listint, &Loop[1])) {
+  }
+  else {
+    Loop[1] = NEWREG();
+    Curve *c = Create_Curve(Loop[1], MSH_SEGM_NURBS, Order2, Listint, NULL, 
+			    -1, -1, kumin, kumax);
+    Tree_Add(THEM->Curves, &c);
+    CreateReversedCurve(THEM, c);
+    c->k = (float *)malloc(4 * List_Nbr(kv) * sizeof(float));
+    for(int i = 0; i < List_Nbr(kv); i++) {
+      double d;
+      List_Read(kv, i, &d);
+      c->k[i] = (float)d /*((d-kvmin)/(kvmax-kvmin)) */ ;
+    }
+  }
+  List_Delete(Listint);
+
+  Listint = ListOfDouble2ListOfInt(List2);
+  if(recognize_seg(MSH_SEGM_NURBS, Listint, &Loop[3])) {
+  }
+  else {
+    Loop[3] = NEWREG();
+    Curve *c = Create_Curve(Loop[3], MSH_SEGM_NURBS, Order2, Listint, NULL,
+			    -1, -1, kumin, kumax);
+    Tree_Add(THEM->Curves, &c);
+    CreateReversedCurve(THEM, c);
+    c->k = (float *)malloc(4 * List_Nbr(kv) * sizeof(float));
+    for(int i = 0; i < List_Nbr(kv); i++) {
+      double d;
+      List_Read(kv, i, &d);
+      c->k[i] = (float)d /*((d-kvmin)/(kvmax-kvmin)) */ ;
+    }
+  }
+  List_Delete(Listint);
+  List_Delete(List1);
+  List_Delete(List2);
+
+  Listint = List_Create(10, 10, sizeof(int));
+  int l0 = -Loop[0];
+  List_Add(Listint, &l0);
+  List_Add(Listint, &Loop[1]);
+  List_Add(Listint, &Loop[2]);
+  int l3 = -Loop[3];
+  List_Add(Listint, &l3);
+
+  int topnew = NEWREG();
+  CreateNurbsSurfaceSupport(topnew, Order1, Order2, List, ku, kv);
+
+  int il = NEWREG();
+  SurfaceLoop *l = Create_SurfaceLoop(il, Listint);
+  Tree_Add(THEM->SurfaceLoops, &l);
+  List_Reset(Listint);
+  List_Add(Listint, &il);
+
+  Surface *s = Create_Surface(NEWREG(), MSH_SURF_TRIMMED);
+  setSurfaceGeneratrices(s, Listint);
+  s->Support = s;
+  End_Surface(s);
+  Tree_Add(THEM->Surfaces, &s);
+
+  List_Delete(Listint);
+  List_Delete(ListCP);
+}
+
diff --git a/Mesh/Nurbs.h b/Mesh/Nurbs.h
new file mode 100644
index 0000000000000000000000000000000000000000..2ec9fa7fec3cfae87ac3c8e429d0ece59ea0a6b5
--- /dev/null
+++ b/Mesh/Nurbs.h
@@ -0,0 +1,37 @@
+#ifndef _NURBS_H_
+#define _NURBS_H_
+
+// Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+// 
+// Please report all bugs and problems to <gmsh@geuz.org>.
+
+#include "Vertex.h"
+#include "Mesh.h"
+#include "List.h"
+
+Vertex InterpolateCubicSpline (Vertex * v[4], double t, double mat[4][4],
+                               int derivee, double t1, double t2);
+Vertex InterpolateUBS (Curve * Curve, double u, int derivee);
+Vertex InterpolateNurbs (Curve * Curve, double u, int derivee);
+Vertex InterpolateNurbsSurface (Surface * s, double u, double v);
+
+void CreateNurbsSurface (int Num, int Order1, int Order2, List_T *, List_T *, List_T *);
+void CreateNurbsSurfaceSupport (int Num, int Order2, int Order1, 
+                                List_T * List, List_T *, List_T *);
+
+#endif
diff --git a/Mesh/Read_Mesh.cpp b/Mesh/Read_Mesh.cpp
index 92d641ac9613a4161b61c122ef620e4a1191ecd8..4362c5c0f8a03b0beed27e207b883da0326b6328 100644
--- a/Mesh/Read_Mesh.cpp
+++ b/Mesh/Read_Mesh.cpp
@@ -1,4 +1,4 @@
-// $Id: Read_Mesh.cpp,v 1.69 2004-02-07 01:40:22 geuzaine Exp $
+// $Id: Read_Mesh.cpp,v 1.70 2004-02-28 00:48:50 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -21,6 +21,7 @@
 
 #include "Gmsh.h"
 #include "Geo.h"
+#include "CAD.h"
 #include "Mesh.h"
 #include "3D_Mesh.h"
 #include "Create.h"
@@ -49,35 +50,17 @@ extern Context_T CTX;
 
 #define NB_NOD_MAX_ELM 30
 
-int comparePhysicalGroup(const void *a, const void *b)
-{
-  PhysicalGroup *q, *w;
-  int cmp;
-
-  q = *(PhysicalGroup **) a;
-  w = *(PhysicalGroup **) b;
-  cmp = q->Typ - w->Typ;
-
-  if(cmp)
-    return cmp;
-  else
-    return (q->Num - w->Num);
-}
-
 void addPhysicalGroup(Mesh * M, int Type, int Physical, int Elementary)
 {
-  PhysicalGroup PG, *pg, **ppg;
-  pg = &PG;
-  pg->Typ = Type;
-  pg->Num = Physical;
-  if((ppg = (PhysicalGroup **) List_PQuery(M->PhysicalGroups, &pg,
-                                           comparePhysicalGroup))) {
-    List_Insert((*ppg)->Entities, &Elementary, fcmp_int);
+  PhysicalGroup *pg;
+  if((pg = FindPhysicalGroup(Physical, Type, M))) {
+    List_Insert(pg->Entities, &Elementary, fcmp_int);
   }
   else {
     List_T *tmp = List_Create(1, 1, sizeof(int));
     List_Add(tmp, &Elementary);
-    Add_PhysicalGroup(Physical, Type, tmp, M);
+    pg = Create_PhysicalGroup(Physical, Type, tmp);
+    List_Add(M->PhysicalGroups, &pg);
     List_Delete(tmp);
   }
 }
@@ -88,46 +71,34 @@ void addPhysicalGroup(Mesh * M, int Type, int Physical, int Elementary)
 
 Curve *addElementaryCurve(Mesh * M, int Num)
 {
-  Curve C, *c, **cc;
-  c = &C;
-  c->Num = Num;
-  if(!(cc = (Curve **) Tree_PQuery(M->Curves, &c))) {
+  Curve *c;
+  if(!(c = FindCurve(Num, M))) {
     c = Create_Curve(Num, MSH_SEGM_LINE, 0, NULL, NULL, -1, -1, 0., 1.);
     c->Dirty = 1;
     Tree_Add(M->Curves, &c);
   }
-  else
-    c = *cc;
   return c;
 }
 
 Surface *addElementarySurface(Mesh * M, int Num)
 {
-  Surface S, *s, **ss;
-  s = &S;
-  s->Num = Num;
-  if(!(ss = (Surface **) Tree_PQuery(M->Surfaces, &s))) {
+  Surface *s;
+  if(!(s = FindSurface(Num, M))) {
     s = Create_Surface(Num, MSH_SURF_PLAN);
     s->Dirty = 1;
     Tree_Add(M->Surfaces, &s);
   }
-  else
-    s = *ss;
   return s;
 }
 
 Volume *addElementaryVolume(Mesh * M, int Num)
 {
-  Volume V, *v, **vv;
-  v = &V;
-  v->Num = Num;
-  if(!(vv = (Volume **) Tree_PQuery(M->Volumes, &v))) {
+  Volume *v;
+  if(!(v = FindVolume(Num, M))) {
     v = Create_Volume(Num, MSH_VOLUME);
     v->Dirty = 1;
     Tree_Add(M->Volumes, &v);
   }
-  else
-    v = *vv;
   return v;
 }
 
diff --git a/Mesh/STL.cpp b/Mesh/STL.cpp
index 52ae119e117b0a77f36a264f2733064bd0d947a5..851cc43e9df01e6ba9718a7af30a26fbe23c0a06 100644
--- a/Mesh/STL.cpp
+++ b/Mesh/STL.cpp
@@ -1,6 +1,6 @@
-// $Id: STL.cpp,v 1.11 2004-02-07 01:40:22 geuzaine Exp $
+// $Id: STL.cpp,v 1.12 2004-02-28 00:48:50 geuzaine Exp $
 //
-// Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
+// Copyright (C) 1997-2003 C. Geuzaine, J.-F. Remacle
 //
 // This program is free software; you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
@@ -16,14 +16,134 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 // USA.
-// 
-// Please report all bugs and problems to <gmsh@geuz.org>.
+//
+// Please report all bugs and problems to "gmsh@geuz.org".
+//
+// Contributor(s):
+//   Nicolas Tardieu
+//
 
 #include "Gmsh.h"
+#include "Numeric.h"
 #include "Mesh.h"
 #include "STL.h"
+#include "CAD.h"
+#include "Geo.h"
+#include "Create.h"
+#include "Interpolation.h"
+#include "Context.h"
 
 extern Mesh *THEM;
+extern Context_T CTX;
+
+bool BelongToPhysicalEntity(int SurfaceNumber,
+                            PhysicalGroup * CurrentPhysicalGroup)
+{
+  PhysicalGroup *PhysicalGroup;
+  int NbPhysicalGroup = List_Nbr(THEM->PhysicalGroups);
+  bool Belong = false;
+
+  // Search if the current Surface belongs to the current PhysicalGroup
+  if(CurrentPhysicalGroup != NULL) {
+    if(List_Search(CurrentPhysicalGroup->Entities, &SurfaceNumber, fcmp_int)) {
+      Belong = true;
+    }
+  }
+
+  // Search if the current Surface belongs to another PhysicalGroup
+  if(!Belong) {
+    for(int i = 0; i < NbPhysicalGroup; i++) {
+      List_Read(THEM->PhysicalGroups, i, &PhysicalGroup);
+      if((PhysicalGroup->Typ == MSH_PHYSICAL_SURFACE) && (!Belong)) {
+        if(List_Search(PhysicalGroup->Entities, &SurfaceNumber, fcmp_int)) {
+          Belong = true;
+          break;
+        }
+      }
+    }
+  }
+  return Belong;
+}
+
+
+void ComputeNormal(Surface * Surface, double Normal[3])
+{
+  Curve *Curve1;
+  Curve *Curve2;
+  Vertex *Point11;
+  Vertex *Point12;
+  Vertex *Point21;
+  Vertex *Point22;
+
+  double vec1[3];
+  double vec2[3];
+
+  List_Read(Surface->Generatrices, 0, &Curve1);
+  List_Read(Surface->Generatrices, 1, &Curve2);
+
+  Point11 = Curve1->beg;
+  Point12 = Curve1->end;
+
+  Point21 = Curve2->beg;
+  Point22 = Curve2->end;
+
+  vec1[0] = (Point12->Pos.X) - (Point11->Pos.X);
+  vec1[1] = (Point12->Pos.Y) - (Point11->Pos.Y);
+  vec1[2] = (Point12->Pos.Z) - (Point11->Pos.Z);
+
+  vec2[0] = (Point22->Pos.X) - (Point21->Pos.X);
+  vec2[1] = (Point22->Pos.Y) - (Point21->Pos.Y);
+  vec2[2] = (Point22->Pos.Z) - (Point21->Pos.Z);
+
+  prodve(vec1, vec2, Normal);
+  norme(Normal);
+}
+
+void AddCorrectNeighborToPhysical(Surface * Surf1, PhysicalGroup * CurrentPhysicalGroup)
+{
+
+  double Normal1[3], Normal2[3];
+  int elem2;
+  List_T *pSurfaceList = Tree2List(THEM->Surfaces);
+  Surface *Surf2;
+  int NbSimplex = Tree_Nbr(THEM->Surfaces);
+  Curve *Curve1;
+  Curve *Curve2;
+
+  ComputeNormal(Surf1, Normal1);
+
+  // Scan all the elements to find a Surface not belonging to an existing PhysicalGroup
+  for(elem2 = 1; elem2 < NbSimplex; elem2++) {
+    List_Read(pSurfaceList, elem2, &Surf2);
+    if(BelongToPhysicalEntity(Surf2->Num, CurrentPhysicalGroup)) {
+      continue;
+    }
+
+    ComputeNormal(Surf2, Normal2);
+    double Scal =
+      Normal1[0] * Normal2[0] + Normal1[1] * Normal2[1] +
+      Normal1[2] * Normal2[2];
+    // If the normals are OK, determine if the surfaces are neighbors
+    if((fabs(Scal) > 0.90) && ((Surf1->Num) != (Surf2->Num))) {
+      bool Exit = false;
+      for(int i = 0; i < 3; i++) {
+        if(!Exit) {
+          for(int j = 0; j < 3; j++) {
+            List_Read(Surf1->Generatrices, i, &Curve1);
+            List_Read(Surf2->Generatrices, j, &Curve2);
+            // The Surface have a common Edge
+	    if(fabs(Curve1->Num) == fabs(Curve2->Num)) {
+              List_Add(CurrentPhysicalGroup->Entities, &(Surf2->Num));
+              AddCorrectNeighborToPhysical(Surf2, CurrentPhysicalGroup);
+              Exit = true;
+              break;
+            }
+          }
+        }
+      }
+    }
+  }
+}
 
 STL_Data::STL_Data()
 {
@@ -39,11 +159,26 @@ STL_Data::~STL_Data()
 
 void STL_Data::Add_Facet(double x1, double y1, double z1,
                          double x2, double y2, double z2,
-                         double x3, double y3, double z3)
+                         double x3, double y3, double z3,
+			 int in_geometry)
 {
   Vertex **ppv;
-  Vertex *v1 = Create_Vertex(Tree_Nbr(Vertices) + 1, x1, y1, z1, 1, 0);
 
+  // Calculation Of Characterisctic Length
+  double lc1 =
+    sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) +
+         (z1 - z2) * (z1 - z2));
+  double lc2 =
+    sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3) +
+         (z1 - z3) * (z1 - z3));
+  double lc3 =
+    sqrt((x2 - x3) * (x2 - x3) + (y2 - y3) * (y2 - y3) +
+         (z2 - z3) * (z2 - z3));
+  double lc = DMAX(lc1, DMAX(lc2, lc3));
+
+
+  // Importation Of Nodes
+  Vertex *v1 = Create_Vertex(Tree_Nbr(Vertices) + 1, x1, y1, z1, lc, 0);
   if((ppv = (Vertex **) Tree_PQuery(Vertices, &v1))) {
     delete v1;
     v1 = *ppv;
@@ -53,7 +188,7 @@ void STL_Data::Add_Facet(double x1, double y1, double z1,
     Tree_Add(THEM->Points, &v1);
   }
 
-  Vertex *v2 = Create_Vertex(Tree_Nbr(Vertices) + 1, x2, y2, z2, 1, 0);
+  Vertex *v2 = Create_Vertex(Tree_Nbr(Vertices) + 1, x2, y2, z2, lc, 0);
   if((ppv = (Vertex **) Tree_PQuery(Vertices, &v2))) {
     delete v2;
     v2 = *ppv;
@@ -63,7 +198,7 @@ void STL_Data::Add_Facet(double x1, double y1, double z1,
     Tree_Add(THEM->Points, &v2);
   }
 
-  Vertex *v3 = Create_Vertex(Tree_Nbr(Vertices) + 1, x3, y3, z3, 1, 0);
+  Vertex *v3 = Create_Vertex(Tree_Nbr(Vertices) + 1, x3, y3, z3, lc, 0);
   if((ppv = (Vertex **) Tree_PQuery(Vertices, &v3))) {
     delete v3;
     v3 = *ppv;
@@ -72,8 +207,89 @@ void STL_Data::Add_Facet(double x1, double y1, double z1,
     Tree_Add(Vertices, &v3);
     Tree_Add(THEM->Points, &v3);
   }
-  Simplex *s = Create_Simplex(v1, v2, v3, NULL);
-  Tree_Add(Simplexes, &s);
+
+  if(in_geometry){
+    // Creation Of Each Curve
+    Curve *c1;
+    c1 = Create_Curve(NEWLINE(), MSH_SEGM_LINE, 1, NULL, NULL, -1, -1, 0., 1.);
+    c1->Control_Points = List_Create(2, 1, sizeof(Vertex *));
+    List_Add(c1->Control_Points, &v1);
+    List_Add(c1->Control_Points, &v2);
+    c1->beg = v1;
+    c1->end = v2;
+    End_Curve(c1);
+    Tree_Add(THEM->Curves, &c1);
+    CreateReversedCurve(THEM, c1);
+    
+    Curve *c2;
+    c2 = Create_Curve(NEWLINE(), MSH_SEGM_LINE, 1, NULL, NULL, -1, -1, 0., 1.);
+    c2->Control_Points = List_Create(2, 1, sizeof(Vertex *));
+    List_Add(c2->Control_Points, &v2);
+    List_Add(c2->Control_Points, &v3);
+    c2->beg = v2;
+    c2->end = v3;
+    End_Curve(c2);
+    Tree_Add(THEM->Curves, &c2);
+    CreateReversedCurve(THEM, c2);
+    
+    Curve *c3;
+    c3 = Create_Curve(NEWLINE(), MSH_SEGM_LINE, 1, NULL, NULL, -1, -1, 0., 1.);
+    c3->Control_Points = List_Create(2, 1, sizeof(Vertex *));
+    List_Add(c3->Control_Points, &v3);
+    List_Add(c3->Control_Points, &v1);
+    c3->beg = v3;
+    c3->end = v1;
+    End_Curve(c3);
+    Tree_Add(THEM->Curves, &c3);
+    CreateReversedCurve(THEM, c3);
+    
+    // Creation Of Each Surface
+    Surface *s;
+    s = Create_Surface(NEWSURFACE(), MSH_SURF_PLAN);
+    s->Method = LIBRE;
+    s->Generatrices = List_Create(4, 1, sizeof(Curve *));
+    List_Add(s->Generatrices, &c1);
+    List_Add(s->Generatrices, &c2);
+    List_Add(s->Generatrices, &c3);
+    s->Support = s;
+    End_Surface(s);
+    Tree_Insert(THEM->Surfaces, &s);
+  }
+  else{
+    Simplex *s = Create_Simplex(v1, v2, v3, NULL);
+    Tree_Add(Simplexes, &s);
+  }
+}
+
+void STL_Data::ReplaceDuplicate()
+{
+  ReplaceAllDuplicates(THEM);
+}
+
+void STL_Data::CreatePhysicalSurface()
+{
+  Surface *Surf1;
+  PhysicalGroup *CurrentPhysicalGroup;
+  int NbSimplex = Tree_Nbr(THEM->Surfaces);
+  List_T *pSurfaceList = Tree2List(THEM->Surfaces);
+
+  // Scan all Simplexes to find correct Neighbors and add them to a PhysicalGroup
+  for(int elem1 = 0; elem1 < NbSimplex; elem1++) {
+    List_Read(pSurfaceList, elem1, &Surf1);
+    if(BelongToPhysicalEntity((Surf1->Num), NULL))
+      continue;
+    CurrentPhysicalGroup = (PhysicalGroup *) Malloc(sizeof(PhysicalGroup));
+    CurrentPhysicalGroup->Num = List_Nbr(THEM->PhysicalGroups)+1;
+    CurrentPhysicalGroup->Entities = List_Create(1, 1, sizeof(int));
+    CurrentPhysicalGroup->Typ = MSH_PHYSICAL_SURFACE;
+    CurrentPhysicalGroup->Visible = VIS_GEOM | VIS_MESH;
+    List_Add(CurrentPhysicalGroup->Entities, &(Surf1->Num));
+    AddCorrectNeighborToPhysical(Surf1, CurrentPhysicalGroup);
+    if(List_Nbr(CurrentPhysicalGroup->Entities) > 0)
+      List_Add(THEM->PhysicalGroups, &CurrentPhysicalGroup);
+    else
+      Free(CurrentPhysicalGroup);
+  }
 }
 
 void STL_Data::GetFacet(int ifac, int &v1, int &v2, int &v3)
diff --git a/Mesh/STL.h b/Mesh/STL.h
index 5a51a5105a36bafbeb426f2e17dc45fb4996321c..a21133d8c7534d6eca86b642da691aeea7f310cb 100644
--- a/Mesh/STL.h
+++ b/Mesh/STL.h
@@ -1,7 +1,7 @@
 #ifndef _STL_H_
 #define _STL_H_
 
-// Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
+// Copyright (C) 1997-2003 C. Geuzaine, J.-F. Remacle
 //
 // This program is free software; you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
@@ -18,7 +18,7 @@
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 // USA.
 // 
-// Please report all bugs and problems to <gmsh@geuz.org>.
+// Please report all bugs and problems to "gmsh@geuz.org".
 
 #include "List.h"
 #include "Tree.h"
@@ -32,28 +32,44 @@ class STL_Data
   List_T *LSimplexes;
   void Add_Facet (double x1, double y1, double z1,
                   double x2, double y2, double z2,
-                  double x3, double y3, double z3);
+                  double x3, double y3, double z3,
+		  int in_geometry=0);
   int GetNbFacets (){
-    return Tree_Nbr (Simplexes);
+    return Tree_Nbr(Simplexes);
   }
   int GetNbVertices (){
     return Tree_Nbr (Vertices);
   }
   void GetFacet (int iFac, int &v1, int &v2, int &v3);
   void GetVertex (int iVertex, double &x, double &y, double &z);
+  void ReplaceDuplicate ();
+  void CreatePhysicalSurface ();
   STL_Data ();
   ~STL_Data ();
 };
 
-// more convenient representation
+
+// This is a more convinient surface representation, that can be used
+// as a triangulation for any given surface. See the "Triangulation
+// Surface" command, which takes a surface defined by edge loops (that
+// may be initially planar or anything else) and adds a triangulation
+// to it in order to represent the shape of the surface. This
+// triangulation may be a STL triangulation (polygons are triangle)
+// but anything else is okay. Solid modelers like parasolid or proE
+// are able to provide such representations. I have written a
+// translator from ideas to gmsh that does that.
+
 class POLY_rep 
 {
 public :
   List_T *points_and_normals;  // 6 * nbrPoints 
   List_T *polygons; // first integer gives the number of point of the polygon
-                   // then next ones are the points id's of the polygon
+                    // then next ones are the points id's of the polygon
   POLY_rep (List_T *_p, List_T *_pol) : points_and_normals (_p),polygons(_pol){}
-  ~POLY_rep(){if(polygons)List_Delete(polygons);if(points_and_normals)List_Delete(points_and_normals);}
+  ~POLY_rep(){
+    if(polygons)List_Delete(polygons);
+    if(points_and_normals)List_Delete(points_and_normals);
+  }
 };
 
 #endif
diff --git a/Mesh/Vertex.cpp b/Mesh/Vertex.cpp
index 01c33af4906cbd4d2a59bf4c7241848456574288..839fbfcd39f123cd4e3b5a4399def7cd5f8ba0af 100644
--- a/Mesh/Vertex.cpp
+++ b/Mesh/Vertex.cpp
@@ -1,4 +1,4 @@
-// $Id: Vertex.cpp,v 1.23 2004-02-07 01:40:22 geuzaine Exp $
+// $Id: Vertex.cpp,v 1.24 2004-02-28 00:48:50 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -35,6 +35,7 @@ Vertex::Vertex()
   Pos.X = 0.0;
   Pos.Y = 0.0;
   Pos.Z = 0.0;
+  w = 1.0;
   lc = 1.0;
   Mov = NULL;
   ListSurf = NULL;
diff --git a/Parser/Gmsh.l b/Parser/Gmsh.l
index 4dd319db0530c0469c0c76be09732ae47fc2d450..2ed10db68142ce37a749ce85d3a1870a8c85599a 100644
--- a/Parser/Gmsh.l
+++ b/Parser/Gmsh.l
@@ -1,6 +1,5 @@
 %{
-
-// $Id: Gmsh.l,v 1.53 2004-02-07 01:40:23 geuzaine Exp $
+// $Id: Gmsh.l,v 1.54 2004-02-28 00:48:50 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index 86c71f9d9a18f2807a0dba02e8efbbbe3680ee47..02eaadcd530768b98de7114fa0f8ab95d4ed57a4 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -190,8 +190,8 @@
 #define	UNARYPREC	440
 
 #line 1 "Gmsh.y"
- 
-// $Id: Gmsh.tab.cpp,v 1.181 2004-02-07 01:40:23 geuzaine Exp $
+
+// $Id: Gmsh.tab.cpp,v 1.182 2004-02-28 00:48:50 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -219,8 +219,9 @@
 #include "Numeric.h"
 #include "Context.h"
 #include "Geo.h"
+#include "GeoUtils.h"
+#include "Nurbs.h"
 #include "CAD.h"
-#include "DataBase.h"
 #include "Mesh.h"
 #include "Draw.h"
 #include "Create.h"
@@ -238,39 +239,32 @@
 #include "STL.h"
 #include "Visibility.h"
 
+// FIXME: most tSTRING and tBIGSTRING are leaked: Free() them!
+
 Tree_T *Symbol_T = NULL;
 
 extern Context_T CTX;
 extern Mesh *THEM;
 
-static fpos_t yyposImbricatedLoopsTab[MAX_OPEN_FILES];
-static int yylinenoImbricatedLoopsTab[MAX_OPEN_FILES];
-static double LoopControlVariablesTab[MAX_OPEN_FILES][3];
-static char *LoopControlVariablesNameTab[MAX_OPEN_FILES];
-static char tmpstring[1024];
-static Symbol TheSymbol, *pSymbol;
-static Surface *STL_Surf;
-static Shape TheShape;
-static int i, j, k, flag, ImbricatedLoop = 0;
 static int Last_NumberOfPoints = 0;
-static double d, *pd;
+static Surface *STL_Surf;
 static ExtrudeParams extr;
-static char *str;
-static StringXString *pStrCat;
-static StringXNumber *pNumCat;
-static StringXColor *pColCat;
-static double (*pNumOpt)(int num, int action, double value);
-static char* (*pStrOpt)(int num, int action, char *value);
-static unsigned int (*pColOpt)(int num, int action, unsigned int value);
 static Post_View *View;
 
+#define MAX_RECUR_LOOPS 100
+static int ImbricatedLoop = 0;
+static fpos_t yyposImbricatedLoopsTab[MAX_RECUR_LOOPS];
+static int yylinenoImbricatedLoopsTab[MAX_RECUR_LOOPS];
+static double LoopControlVariablesTab[MAX_RECUR_LOOPS][3];
+static char *LoopControlVariablesNameTab[MAX_RECUR_LOOPS];
+
 char *strsave (char *ptr);
 void yyerror (char *s);
 void yymsg (int type, char *fmt, ...);
 void skip_until (char *skip, char *until);
 int PrintListOfDouble (char *format, List_T *list, char *buffer);
 
-#line 82 "Gmsh.y"
+#line 76 "Gmsh.y"
 typedef union {
   char *c;
   int i;
@@ -290,11 +284,11 @@ typedef union {
 
 
 
-#define	YYFINAL		2323
+#define	YYFINAL		2336
 #define	YYFLAG		-32768
 #define	YYNTBASE	206
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 440 ? yytranslate[x] : 340)
+#define YYTRANSLATE(x) ((unsigned)(x) <= 440 ? yytranslate[x] : 341)
 
 static const short yytranslate[] = {     0,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -345,436 +339,440 @@ static const short yytranslate[] = {     0,
 
 #if YYDEBUG != 0
 static const short yyprhs[] = {     0,
-     0,     2,     4,     6,     9,    11,    14,    16,    38,    40,
-    41,    44,    46,    48,    50,    53,    56,    59,    62,    65,
-    73,    79,    97,   107,   131,   163,   179,   191,   203,   219,
-   229,   243,   253,   265,   279,   289,   299,   311,   321,   333,
-   343,   355,   369,   383,   395,   409,   427,   437,   449,   461,
-   475,   487,   497,   498,   501,   503,   505,   507,   509,   511,
-   513,   515,   517,   519,   521,   523,   525,   527,   529,   535,
-   543,   550,   559,   560,   563,   566,   569,   572,   575,   578,
-   581,   584,   587,   590,   593,   596,   599,   602,   605,   608,
-   611,   614,   617,   620,   623,   626,   629,   632,   635,   638,
-   640,   644,   645,   659,   661,   665,   666,   680,   682,   686,
-   687,   701,   703,   707,   708,   728,   730,   734,   735,   755,
-   757,   761,   762,   782,   784,   788,   789,   815,   817,   821,
-   822,   848,   850,   854,   855,   881,   883,   887,   888,   920,
-   922,   926,   927,   959,   961,   965,   966,   998,  1000,  1004,
-  1005,  1037,  1039,  1043,  1044,  1076,  1078,  1082,  1083,  1115,
-  1117,  1121,  1122,  1178,  1180,  1184,  1185,  1241,  1243,  1247,
-  1248,  1304,  1306,  1310,  1311,  1355,  1357,  1361,  1362,  1406,
-  1408,  1412,  1413,  1457,  1459,  1463,  1464,  1502,  1504,  1508,
-  1509,  1547,  1549,  1553,  1554,  1592,  1594,  1598,  1599,  1613,
-  1615,  1619,  1620,  1636,  1638,  1640,  1642,  1644,  1646,  1648,
-  1650,  1655,  1663,  1673,  1680,  1684,  1691,  1698,  1708,  1715,
-  1725,  1731,  1740,  1749,  1761,  1768,  1778,  1788,  1798,  1806,
-  1815,  1828,  1835,  1843,  1851,  1864,  1872,  1880,  1890,  1908,
-  1917,  1926,  1934,  1942,  1954,  1963,  1976,  1985,  2000,  2023,
-  2044,  2053,  2062,  2071,  2079,  2088,  2094,  2106,  2112,  2122,
-  2124,  2126,  2128,  2129,  2132,  2139,  2146,  2153,  2160,  2165,
-  2172,  2177,  2184,  2188,  2194,  2198,  2202,  2207,  2212,  2216,
-  2224,  2228,  2236,  2240,  2243,  2246,  2253,  2262,  2271,  2282,
-  2284,  2287,  2289,  2293,  2298,  2300,  2309,  2322,  2337,  2338,
-  2351,  2352,  2369,  2370,  2389,  2398,  2411,  2426,  2427,  2440,
-  2441,  2458,  2459,  2478,  2487,  2500,  2515,  2516,  2529,  2530,
-  2547,  2548,  2567,  2569,  2572,  2582,  2590,  2593,  2600,  2610,
-  2620,  2629,  2638,  2647,  2654,  2659,  2662,  2665,  2667,  2669,
-  2671,  2673,  2675,  2677,  2681,  2684,  2687,  2690,  2694,  2698,
-  2702,  2706,  2710,  2714,  2718,  2722,  2726,  2730,  2734,  2738,
-  2742,  2746,  2752,  2757,  2762,  2767,  2772,  2777,  2782,  2787,
-  2792,  2797,  2802,  2809,  2814,  2819,  2824,  2829,  2834,  2839,
-  2846,  2853,  2860,  2865,  2870,  2875,  2880,  2885,  2890,  2895,
-  2900,  2905,  2910,  2915,  2922,  2927,  2932,  2937,  2942,  2947,
-  2952,  2959,  2966,  2973,  2978,  2980,  2982,  2984,  2986,  2988,
-  2993,  2998,  3001,  3007,  3011,  3018,  3023,  3031,  3033,  3036,
-  3039,  3043,  3047,  3059,  3069,  3077,  3085,  3086,  3090,  3092,
-  3096,  3097,  3101,  3105,  3107,  3111,  3113,  3115,  3119,  3124,
-  3128,  3134,  3139,  3141,  3143,  3145,  3149,  3154,  3161,  3169,
-  3171,  3173,  3177,  3181,  3191,  3199,  3201,  3207,  3211,  3218,
-  3220,  3224,  3226,  3233,  3238,  3243,  3250,  3257
+     0,     2,     4,     6,     9,    11,    14,    15,    18,    20,
+    42,    44,    45,    48,    50,    52,    54,    57,    60,    63,
+    66,    69,    77,    83,   101,   111,   135,   167,   183,   195,
+   207,   223,   233,   247,   257,   269,   283,   293,   303,   315,
+   325,   337,   347,   359,   373,   387,   399,   413,   431,   441,
+   453,   465,   479,   491,   501,   502,   505,   507,   509,   511,
+   513,   515,   517,   519,   521,   523,   525,   527,   529,   531,
+   533,   539,   547,   554,   563,   564,   567,   570,   573,   576,
+   579,   582,   585,   588,   591,   594,   597,   600,   603,   606,
+   609,   612,   615,   618,   621,   624,   627,   630,   633,   636,
+   639,   642,   644,   648,   649,   663,   665,   669,   670,   684,
+   686,   690,   691,   705,   707,   711,   712,   732,   734,   738,
+   739,   759,   761,   765,   766,   786,   788,   792,   793,   819,
+   821,   825,   826,   852,   854,   858,   859,   885,   887,   891,
+   892,   924,   926,   930,   931,   963,   965,   969,   970,  1002,
+  1004,  1008,  1009,  1041,  1043,  1047,  1048,  1080,  1082,  1086,
+  1087,  1119,  1121,  1125,  1126,  1182,  1184,  1188,  1189,  1245,
+  1247,  1251,  1252,  1308,  1310,  1314,  1315,  1359,  1361,  1365,
+  1366,  1410,  1412,  1416,  1417,  1461,  1463,  1467,  1468,  1506,
+  1508,  1512,  1513,  1551,  1553,  1557,  1558,  1596,  1598,  1602,
+  1603,  1617,  1619,  1623,  1624,  1640,  1642,  1644,  1646,  1648,
+  1650,  1652,  1654,  1659,  1667,  1677,  1684,  1688,  1695,  1702,
+  1712,  1719,  1729,  1735,  1744,  1753,  1765,  1772,  1782,  1792,
+  1802,  1810,  1819,  1832,  1839,  1847,  1855,  1863,  1873,  1881,
+  1899,  1907,  1915,  1927,  1936,  1949,  1958,  1967,  1976,  1989,
+  2004,  2019,  2042,  2063,  2072,  2081,  2090,  2098,  2107,  2113,
+  2125,  2131,  2141,  2143,  2145,  2147,  2148,  2151,  2158,  2165,
+  2172,  2179,  2184,  2191,  2196,  2203,  2207,  2213,  2217,  2221,
+  2226,  2231,  2235,  2243,  2247,  2255,  2259,  2262,  2265,  2272,
+  2281,  2290,  2301,  2303,  2306,  2308,  2312,  2317,  2319,  2328,
+  2341,  2356,  2357,  2370,  2371,  2388,  2389,  2408,  2417,  2430,
+  2445,  2446,  2459,  2460,  2477,  2478,  2497,  2506,  2519,  2534,
+  2535,  2548,  2549,  2566,  2567,  2586,  2588,  2591,  2601,  2609,
+  2612,  2619,  2629,  2639,  2648,  2657,  2666,  2673,  2678,  2681,
+  2684,  2686,  2688,  2690,  2692,  2694,  2696,  2700,  2703,  2706,
+  2709,  2713,  2717,  2721,  2725,  2729,  2733,  2737,  2741,  2745,
+  2749,  2753,  2757,  2761,  2765,  2771,  2776,  2781,  2786,  2791,
+  2796,  2801,  2806,  2811,  2816,  2821,  2828,  2833,  2838,  2843,
+  2848,  2853,  2858,  2865,  2872,  2879,  2884,  2889,  2894,  2899,
+  2904,  2909,  2914,  2919,  2924,  2929,  2934,  2941,  2946,  2951,
+  2956,  2961,  2966,  2971,  2978,  2985,  2992,  2997,  2999,  3001,
+  3003,  3005,  3007,  3012,  3017,  3020,  3026,  3030,  3037,  3042,
+  3050,  3052,  3055,  3058,  3062,  3066,  3078,  3088,  3096,  3104,
+  3105,  3109,  3111,  3115,  3116,  3120,  3124,  3126,  3130,  3132,
+  3134,  3138,  3143,  3147,  3153,  3158,  3160,  3162,  3164,  3168,
+  3173,  3180,  3188,  3190,  3192,  3196,  3200,  3210,  3218,  3220,
+  3226,  3230,  3237,  3239,  3243,  3245,  3252,  3257,  3262,  3269,
+  3276
 };
 
-static const short yyrhs[] = {   209,
-     0,   208,     0,   214,     0,     1,     6,     0,     3,     0,
-   187,     3,     0,   163,     0,   166,   167,   207,   207,   207,
-   168,   169,   165,   207,   207,   207,   165,   207,   207,   207,
-   165,   207,   207,   207,   170,   171,     0,   164,     0,     0,
-   209,   210,     0,   211,     0,   213,     0,   212,     0,   138,
-     6,     0,   139,     6,     0,   141,     6,     0,   140,     6,
-     0,   142,     6,     0,   143,   197,   329,   203,     5,   198,
-     6,     0,   144,   197,   329,   198,     6,     0,   145,   197,
-     5,   203,     5,   203,   329,   203,   329,   203,     5,   203,
-     5,   203,     5,   198,     6,     0,     3,     7,   122,   197,
-     5,   203,   327,   198,     6,     0,     3,     7,   121,   197,
-     5,   203,   325,   203,   333,   203,   324,   203,   324,   203,
-   324,   203,   333,   203,   333,   203,   324,   198,     6,     0,
-     3,     7,   120,   197,     5,   203,   325,   203,   325,   203,
-   331,   203,   324,   203,   324,   203,   324,   203,   324,   203,
-   333,   203,   333,   203,   333,   203,   333,   203,   324,   198,
-     6,     0,     3,     7,   128,   197,     5,   203,     3,   203,
-     3,   203,     3,   203,   324,   198,     6,     0,     3,     7,
-   132,   197,     5,   203,     3,   203,   324,   198,     6,     0,
-     3,     7,   149,   197,     5,   203,     3,   203,   324,   198,
-     6,     0,     3,     7,   130,   197,     5,   203,   188,   203,
-   188,   203,   325,   203,   324,   198,     6,     0,     3,     7,
-   133,   197,     5,   203,   333,   198,     6,     0,     3,     7,
-   134,   197,     5,   203,   333,   203,     3,   203,   324,   198,
-     6,     0,     3,     7,   129,   197,     5,   203,     3,   198,
-     6,     0,     3,     7,   135,   197,     5,   203,     3,   203,
-   325,   198,     6,     0,     3,     7,   137,   197,     5,   203,
-     3,   203,     3,   203,     3,   198,     6,     0,     3,     7,
-   136,   197,     5,   203,   327,   198,     6,     0,     3,     7,
-   131,   197,     5,   203,     3,   198,     6,     0,     3,     7,
-    41,   197,     5,   203,     3,   203,     3,   198,     6,     0,
-     3,     7,   147,   197,     5,   203,   333,   198,     6,     0,
-     3,     7,   148,   197,     5,   203,   333,   203,     3,   198,
-     6,     0,     3,     7,   146,   197,     5,   203,     3,   198,
-     6,     0,     3,     7,   150,   197,     5,   203,     3,   203,
-   325,   198,     6,     0,     3,     7,   151,   197,     5,   203,
-     3,   203,   325,   203,   325,   198,     6,     0,     3,     7,
-   158,   197,     5,   203,     3,   203,   325,   203,   325,   198,
-     6,     0,     3,     7,   152,   197,     5,   203,     3,   203,
-   325,   198,     6,     0,     3,     7,   162,   197,     5,   203,
-     3,   203,   325,   203,   325,   198,     6,     0,     3,     7,
-   153,   197,     5,   203,     3,   203,   333,   203,   333,   203,
-   324,   203,   324,   198,     6,     0,     3,     7,   154,   197,
-     5,   203,   333,   198,     6,     0,     3,     7,   155,   197,
-   156,   203,   324,   203,     3,   198,     6,     0,     3,     7,
-   157,   197,     5,   203,   333,   203,   324,   198,     6,     0,
-     3,     7,   159,   197,     5,   203,     5,   203,     3,   203,
-     3,   198,     6,     0,     3,     7,   160,   197,     5,   203,
-     5,   203,     3,   198,     6,     0,     3,     7,   161,   197,
-     3,   203,     3,   198,     6,     0,     0,   214,   215,     0,
-   217,     0,   216,     0,   299,     0,   300,     0,   301,     0,
-   304,     0,   305,     0,   306,     0,   307,     0,   310,     0,
-   322,     0,   323,     0,   309,     0,   308,     0,    33,   197,
-     5,   198,     6,     0,    33,   197,     5,   203,   335,   198,
-     6,     0,     4,     5,   204,   218,   205,     6,     0,     4,
-     5,     4,   327,   204,   218,   205,     6,     0,     0,   218,
-   220,     0,   218,   223,     0,   218,   226,     0,   218,   229,
-     0,   218,   232,     0,   218,   235,     0,   218,   238,     0,
-   218,   241,     0,   218,   244,     0,   218,   247,     0,   218,
-   250,     0,   218,   253,     0,   218,   256,     0,   218,   259,
-     0,   218,   262,     0,   218,   265,     0,   218,   268,     0,
-   218,   271,     0,   218,   274,     0,   218,   277,     0,   218,
-   280,     0,   218,   283,     0,   218,   286,     0,   218,   289,
-     0,   218,   292,     0,   218,   295,     0,   325,     0,   219,
-   203,   325,     0,     0,    72,   197,   325,   203,   325,   203,
-   325,   198,   221,   204,   219,   205,     6,     0,   325,     0,
-   222,   203,   325,     0,     0,    73,   197,   325,   203,   325,
-   203,   325,   198,   224,   204,   222,   205,     6,     0,   325,
-     0,   225,   203,   325,     0,     0,    74,   197,   325,   203,
-   325,   203,   325,   198,   227,   204,   225,   205,     6,     0,
-   325,     0,   228,   203,   325,     0,     0,    75,   197,   325,
-   203,   325,   203,   325,   203,   325,   203,   325,   203,   325,
-   198,   230,   204,   228,   205,     6,     0,   325,     0,   231,
-   203,   325,     0,     0,    76,   197,   325,   203,   325,   203,
-   325,   203,   325,   203,   325,   203,   325,   198,   233,   204,
-   231,   205,     6,     0,   325,     0,   234,   203,   325,     0,
-     0,    77,   197,   325,   203,   325,   203,   325,   203,   325,
-   203,   325,   203,   325,   198,   236,   204,   234,   205,     6,
-     0,   325,     0,   237,   203,   325,     0,     0,    78,   197,
-   325,   203,   325,   203,   325,   203,   325,   203,   325,   203,
-   325,   203,   325,   203,   325,   203,   325,   198,   239,   204,
-   237,   205,     6,     0,   325,     0,   240,   203,   325,     0,
-     0,    79,   197,   325,   203,   325,   203,   325,   203,   325,
-   203,   325,   203,   325,   203,   325,   203,   325,   203,   325,
-   198,   242,   204,   240,   205,     6,     0,   325,     0,   243,
-   203,   325,     0,     0,    80,   197,   325,   203,   325,   203,
-   325,   203,   325,   203,   325,   203,   325,   203,   325,   203,
-   325,   203,   325,   198,   245,   204,   243,   205,     6,     0,
-   325,     0,   246,   203,   325,     0,     0,    81,   197,   325,
-   203,   325,   203,   325,   203,   325,   203,   325,   203,   325,
-   203,   325,   203,   325,   203,   325,   203,   325,   203,   325,
-   203,   325,   198,   248,   204,   246,   205,     6,     0,   325,
-     0,   249,   203,   325,     0,     0,    82,   197,   325,   203,
-   325,   203,   325,   203,   325,   203,   325,   203,   325,   203,
-   325,   203,   325,   203,   325,   203,   325,   203,   325,   203,
-   325,   198,   251,   204,   249,   205,     6,     0,   325,     0,
-   252,   203,   325,     0,     0,    83,   197,   325,   203,   325,
-   203,   325,   203,   325,   203,   325,   203,   325,   203,   325,
-   203,   325,   203,   325,   203,   325,   203,   325,   203,   325,
-   198,   254,   204,   252,   205,     6,     0,   325,     0,   255,
-   203,   325,     0,     0,    84,   197,   325,   203,   325,   203,
-   325,   203,   325,   203,   325,   203,   325,   203,   325,   203,
-   325,   203,   325,   203,   325,   203,   325,   203,   325,   198,
-   257,   204,   255,   205,     6,     0,   325,     0,   258,   203,
-   325,     0,     0,    85,   197,   325,   203,   325,   203,   325,
-   203,   325,   203,   325,   203,   325,   203,   325,   203,   325,
-   203,   325,   203,   325,   203,   325,   203,   325,   198,   260,
-   204,   258,   205,     6,     0,   325,     0,   261,   203,   325,
-     0,     0,    86,   197,   325,   203,   325,   203,   325,   203,
-   325,   203,   325,   203,   325,   203,   325,   203,   325,   203,
-   325,   203,   325,   203,   325,   203,   325,   198,   263,   204,
-   261,   205,     6,     0,   325,     0,   264,   203,   325,     0,
-     0,    87,   197,   325,   203,   325,   203,   325,   203,   325,
-   203,   325,   203,   325,   203,   325,   203,   325,   203,   325,
-   203,   325,   203,   325,   203,   325,   203,   325,   203,   325,
-   203,   325,   203,   325,   203,   325,   203,   325,   203,   325,
-   203,   325,   203,   325,   203,   325,   203,   325,   203,   325,
-   198,   266,   204,   264,   205,     6,     0,   325,     0,   267,
-   203,   325,     0,     0,    88,   197,   325,   203,   325,   203,
-   325,   203,   325,   203,   325,   203,   325,   203,   325,   203,
-   325,   203,   325,   203,   325,   203,   325,   203,   325,   203,
-   325,   203,   325,   203,   325,   203,   325,   203,   325,   203,
-   325,   203,   325,   203,   325,   203,   325,   203,   325,   203,
-   325,   203,   325,   198,   269,   204,   267,   205,     6,     0,
-   325,     0,   270,   203,   325,     0,     0,    89,   197,   325,
-   203,   325,   203,   325,   203,   325,   203,   325,   203,   325,
-   203,   325,   203,   325,   203,   325,   203,   325,   203,   325,
-   203,   325,   203,   325,   203,   325,   203,   325,   203,   325,
-   203,   325,   203,   325,   203,   325,   203,   325,   203,   325,
-   203,   325,   203,   325,   203,   325,   198,   272,   204,   270,
-   205,     6,     0,   325,     0,   273,   203,   325,     0,     0,
-    90,   197,   325,   203,   325,   203,   325,   203,   325,   203,
-   325,   203,   325,   203,   325,   203,   325,   203,   325,   203,
-   325,   203,   325,   203,   325,   203,   325,   203,   325,   203,
-   325,   203,   325,   203,   325,   203,   325,   198,   275,   204,
-   273,   205,     6,     0,   325,     0,   276,   203,   325,     0,
-     0,    91,   197,   325,   203,   325,   203,   325,   203,   325,
-   203,   325,   203,   325,   203,   325,   203,   325,   203,   325,
-   203,   325,   203,   325,   203,   325,   203,   325,   203,   325,
-   203,   325,   203,   325,   203,   325,   203,   325,   198,   278,
-   204,   276,   205,     6,     0,   325,     0,   279,   203,   325,
-     0,     0,    92,   197,   325,   203,   325,   203,   325,   203,
-   325,   203,   325,   203,   325,   203,   325,   203,   325,   203,
-   325,   203,   325,   203,   325,   203,   325,   203,   325,   203,
-   325,   203,   325,   203,   325,   203,   325,   203,   325,   198,
-   281,   204,   279,   205,     6,     0,   325,     0,   282,   203,
-   325,     0,     0,    93,   197,   325,   203,   325,   203,   325,
-   203,   325,   203,   325,   203,   325,   203,   325,   203,   325,
-   203,   325,   203,   325,   203,   325,   203,   325,   203,   325,
-   203,   325,   203,   325,   198,   284,   204,   282,   205,     6,
-     0,   325,     0,   285,   203,   325,     0,     0,    94,   197,
-   325,   203,   325,   203,   325,   203,   325,   203,   325,   203,
-   325,   203,   325,   203,   325,   203,   325,   203,   325,   203,
-   325,   203,   325,   203,   325,   203,   325,   203,   325,   198,
-   287,   204,   285,   205,     6,     0,   325,     0,   288,   203,
-   325,     0,     0,    95,   197,   325,   203,   325,   203,   325,
-   203,   325,   203,   325,   203,   325,   203,   325,   203,   325,
-   203,   325,   203,   325,   203,   325,   203,   325,   203,   325,
-   203,   325,   203,   325,   198,   290,   204,   288,   205,     6,
-     0,   339,     0,   291,   203,   339,     0,     0,    96,   197,
-   325,   203,   325,   203,   325,   198,   293,   204,   291,   205,
-     6,     0,   339,     0,   294,   203,   339,     0,     0,    97,
-   197,   325,   203,   325,   203,   325,   203,   325,   198,   296,
-   204,   294,   205,     6,     0,     7,     0,   172,     0,   173,
-     0,   174,     0,   175,     0,   193,     0,   194,     0,     4,
-   297,   325,     6,     0,     4,   199,   325,   200,   297,   325,
-     6,     0,     4,   199,   204,   335,   205,   200,   297,   333,
-     6,     0,     4,   199,   200,     7,   333,     6,     0,     4,
-   298,     6,     0,     4,   199,   325,   200,   298,     6,     0,
-     4,   201,     4,     7,   339,     6,     0,     4,   199,   325,
-   200,   201,     4,     7,   339,     6,     0,     4,   201,     4,
-   297,   325,     6,     0,     4,   199,   325,   200,   201,     4,
-   297,   325,     6,     0,     4,   201,     4,   298,     6,     0,
-     4,   199,   325,   200,   201,     4,   298,     6,     0,     4,
-   201,   106,   201,     4,     7,   336,     6,     0,     4,   199,
-   325,   200,   201,   106,   201,     4,     7,   336,     6,     0,
-     4,   201,   107,     7,   337,     6,     0,     4,   199,   325,
-   200,   201,   107,     7,   337,     6,     0,    58,   197,     4,
-   198,   201,     4,     7,   325,     6,     0,    58,   197,     4,
-   198,   201,     4,     7,   339,     6,     0,    38,   197,   325,
-   198,     7,   327,     6,     0,    54,    38,   197,   325,   198,
-     7,   333,     6,     0,    70,    38,   333,     7,   204,   325,
-   203,   325,   203,   325,   205,     6,     0,    45,    46,   333,
-     7,   325,     6,     0,    41,   197,   325,   198,     7,   333,
-     6,     0,    43,   197,   325,   198,     7,   333,     6,     0,
-    70,    41,   333,     7,   204,   325,   203,   325,   203,   325,
-   205,     6,     0,    39,   197,   325,   198,     7,   333,     6,
-     0,    40,   197,   325,   198,     7,   333,     6,     0,    39,
-   197,   325,   198,     7,   333,    49,   327,     6,     0,    47,
-   197,   325,   198,     7,   204,   325,   203,   325,   203,     5,
-   203,     5,   203,     5,   205,     6,     0,    54,    41,   197,
-   325,   198,     7,   333,     6,     0,    41,    65,   197,   325,
-   198,     7,   333,     6,     0,    99,   197,   325,   198,     7,
-   333,     6,     0,   100,   197,   325,   198,     7,   333,     6,
-     0,   101,   197,   325,   198,     7,   333,   105,   333,   102,
-   325,     6,     0,    49,    42,   197,   325,   198,     7,   333,
-     6,     0,   117,    42,   197,   325,   198,     7,   204,   325,
-   203,   333,   205,     6,     0,    50,    42,   197,   325,   198,
-     7,   333,     6,     0,    51,    42,   197,   325,   198,     7,
-   197,   325,   203,   325,   198,   333,   333,     6,     0,   101,
-    42,   103,   104,   197,   325,   198,     7,   331,   105,   204,
-   333,   203,   333,   205,   102,   204,   325,   203,   325,   205,
-     6,     0,   101,    42,   197,   325,   198,     7,   331,   105,
-   204,   333,   203,   333,   205,   102,   204,   325,   203,   325,
-   205,     6,     0,    54,    42,   197,   325,   198,     7,   333,
-     6,     0,    42,    65,   197,   325,   198,     7,   333,     6,
-     0,    53,    44,   197,   325,   198,     7,   333,     6,     0,
-    44,   197,   325,   198,     7,   333,     6,     0,    54,    44,
-   197,   325,   198,     7,   333,     6,     0,    60,   327,   204,
-   302,   205,     0,    59,   204,   327,   203,   327,   203,   325,
-   205,   204,   302,   205,     0,    61,   327,   204,   302,   205,
-     0,    62,   204,   327,   203,   325,   205,   204,   302,   205,
-     0,   304,     0,   303,     0,   301,     0,     0,   303,   300,
-     0,   303,    38,   204,   335,   205,     6,     0,   303,    41,
-   204,   335,   205,     6,     0,   303,    42,   204,   335,   205,
-     6,     0,   303,    44,   204,   335,   205,     6,     0,    64,
-   204,   303,   205,     0,    64,     4,   199,   325,   200,     6,
-     0,    67,   204,   303,   205,     0,    67,     4,   199,   325,
-   200,     6,     0,    67,     4,     6,     0,   106,   336,   204,
-   303,   205,     0,   118,   339,     6,     0,   119,   339,     6,
-     0,   118,   204,   303,   205,     0,   119,   204,   303,   205,
-     0,     4,   339,     6,     0,     4,     4,   199,   325,   200,
-   339,     6,     0,     4,   325,     6,     0,    58,   197,     4,
-   198,   201,     4,     6,     0,    98,     4,     6,     0,   113,
-     6,     0,    37,     6,     0,   108,   197,   325,     8,   325,
-   198,     0,   108,   197,   325,     8,   325,     8,   325,   198,
-     0,   108,     4,   109,   204,   325,     8,   325,   205,     0,
-   108,     4,   109,   204,   325,     8,   325,     8,   325,   205,
-     0,   110,     0,   116,     4,     0,   114,     0,   115,     4,
-     6,     0,   111,   197,   325,   198,     0,   112,     0,    63,
-    38,   204,   325,   203,   327,   205,     6,     0,    63,    38,
-   204,   325,   203,   327,   203,   327,   203,   325,   205,     6,
-     0,    63,    38,   204,   325,   203,   327,   203,   327,   203,
-   327,   203,   325,   205,     6,     0,     0,    63,    38,   204,
-   325,   203,   327,   205,   311,   204,   320,   205,     6,     0,
-     0,    63,    38,   204,   325,   203,   327,   203,   327,   203,
-   325,   205,   312,   204,   320,   205,     6,     0,     0,    63,
-    38,   204,   325,   203,   327,   203,   327,   203,   327,   203,
-   325,   205,   313,   204,   320,   205,     6,     0,    63,    41,
-   204,   325,   203,   327,   205,     6,     0,    63,    41,   204,
-   325,   203,   327,   203,   327,   203,   325,   205,     6,     0,
-    63,    41,   204,   325,   203,   327,   203,   327,   203,   327,
-   203,   325,   205,     6,     0,     0,    63,    41,   204,   325,
-   203,   327,   205,   314,   204,   320,   205,     6,     0,     0,
-    63,    41,   204,   325,   203,   327,   203,   327,   203,   325,
-   205,   315,   204,   320,   205,     6,     0,     0,    63,    41,
-   204,   325,   203,   327,   203,   327,   203,   327,   203,   325,
-   205,   316,   204,   320,   205,     6,     0,    63,    42,   204,
-   325,   203,   327,   205,     6,     0,    63,    42,   204,   325,
-   203,   327,   203,   327,   203,   325,   205,     6,     0,    63,
-    42,   204,   325,   203,   327,   203,   327,   203,   327,   203,
-   325,   205,     6,     0,     0,    63,    42,   204,   325,   203,
-   327,   205,   317,   204,   320,   205,     6,     0,     0,    63,
-    42,   204,   325,   203,   327,   203,   327,   203,   325,   205,
-   318,   204,   320,   205,     6,     0,     0,    63,    42,   204,
-   325,   203,   327,   203,   327,   203,   327,   203,   325,   205,
-   319,   204,   320,   205,     6,     0,   321,     0,   320,   321,
-     0,    71,   204,   333,   203,   333,   203,   333,   205,     6,
-     0,    71,   204,   333,   203,   333,   205,     6,     0,    66,
-     6,     0,    52,    41,   333,     7,   325,     6,     0,    52,
-    41,   333,     7,   325,    55,    57,   325,     6,     0,    52,
-    41,   333,     7,   325,    55,    56,   325,     6,     0,    52,
-    42,   204,   325,   205,     7,   333,     6,     0,    48,    42,
-   204,   325,   205,     7,   333,     6,     0,    52,    44,   204,
-   325,   205,     7,   333,     6,     0,    66,    42,   333,     7,
-   325,     6,     0,    66,    42,   333,     6,     0,    68,     6,
-     0,    69,     6,     0,   123,     0,   124,     0,   125,     0,
-   126,     0,   127,     0,   326,     0,   197,   325,   198,     0,
-   187,   325,     0,   186,   325,     0,   192,   325,     0,   325,
-   187,   325,     0,   325,   186,   325,     0,   325,   188,   325,
-     0,   325,   189,   325,     0,   325,   190,   325,     0,   325,
-   196,   325,     0,   325,   182,   325,     0,   325,   184,   325,
-     0,   325,   183,   325,     0,   325,   185,   325,     0,   325,
-   179,   325,     0,   325,   180,   325,     0,   325,   178,   325,
-     0,   325,   177,   325,     0,   325,   176,   325,     8,   325,
-     0,    12,   197,   325,   198,     0,    13,   197,   325,   198,
-     0,    14,   197,   325,   198,     0,    15,   197,   325,   198,
-     0,    16,   197,   325,   198,     0,    17,   197,   325,   198,
-     0,    18,   197,   325,   198,     0,    19,   197,   325,   198,
-     0,    20,   197,   325,   198,     0,    22,   197,   325,   198,
-     0,    23,   197,   325,   203,   325,   198,     0,    24,   197,
-   325,   198,     0,    25,   197,   325,   198,     0,    26,   197,
-   325,   198,     0,    27,   197,   325,   198,     0,    28,   197,
-   325,   198,     0,    29,   197,   325,   198,     0,    30,   197,
-   325,   203,   325,   198,     0,    31,   197,   325,   203,   325,
-   198,     0,    32,   197,   325,   203,   325,   198,     0,    21,
-   197,   325,   198,     0,    12,   199,   325,   200,     0,    13,
-   199,   325,   200,     0,    14,   199,   325,   200,     0,    15,
-   199,   325,   200,     0,    16,   199,   325,   200,     0,    17,
-   199,   325,   200,     0,    18,   199,   325,   200,     0,    19,
-   199,   325,   200,     0,    20,   199,   325,   200,     0,    22,
-   199,   325,   200,     0,    23,   199,   325,   203,   325,   200,
-     0,    24,   199,   325,   200,     0,    25,   199,   325,   200,
-     0,    26,   199,   325,   200,     0,    27,   199,   325,   200,
-     0,    28,   199,   325,   200,     0,    29,   199,   325,   200,
-     0,    30,   199,   325,   203,   325,   200,     0,    31,   199,
-   325,   203,   325,   200,     0,    32,   199,   325,   203,   325,
-   200,     0,    21,   199,   325,   200,     0,     3,     0,     9,
-     0,    10,     0,    11,     0,     4,     0,     4,   199,   325,
-   200,     0,   202,     4,   199,   200,     0,     4,   298,     0,
-     4,   199,   325,   200,   298,     0,     4,   201,     4,     0,
-     4,   199,   325,   200,   201,     4,     0,     4,   201,     4,
-   298,     0,     4,   199,   325,   200,   201,     4,   298,     0,
-   328,     0,   187,   327,     0,   186,   327,     0,   327,   187,
-   327,     0,   327,   186,   327,     0,   204,   325,   203,   325,
-   203,   325,   203,   325,   203,   325,   205,     0,   204,   325,
-   203,   325,   203,   325,   203,   325,   205,     0,   204,   325,
-   203,   325,   203,   325,   205,     0,   197,   325,   203,   325,
-   203,   325,   198,     0,     0,   197,   330,   198,     0,     5,
-     0,   330,   203,     5,     0,     0,   204,   332,   205,     0,
-   197,   332,   198,     0,   333,     0,   332,   203,   333,     0,
-   325,     0,   334,     0,   204,   335,   205,     0,   187,   204,
-   335,   205,     0,   325,     8,   325,     0,   325,     8,   325,
-     8,   325,     0,    38,   204,   325,   205,     0,   301,     0,
-   304,     0,   310,     0,     4,   199,   200,     0,   187,     4,
-   199,   200,     0,     4,   199,   204,   335,   205,   200,     0,
-   187,     4,   199,   204,   335,   205,   200,     0,   325,     0,
-   334,     0,   335,   203,   325,     0,   335,   203,   334,     0,
-   204,   325,   203,   325,   203,   325,   203,   325,   205,     0,
-   204,   325,   203,   325,   203,   325,   205,     0,     4,     0,
-     4,   201,   106,   201,     4,     0,   204,   338,   205,     0,
-     4,   199,   325,   200,   201,   107,     0,   336,     0,   338,
-   203,   336,     0,     5,     0,    35,   197,   339,   203,   339,
-   198,     0,    36,   197,   339,   198,     0,    34,   197,   339,
-   198,     0,    34,   197,   339,   203,   335,   198,     0,    34,
-   197,     4,   201,     4,   198,     0,    34,   197,     4,   199,
-   325,   200,   201,     4,   198,     0
+static const short yyrhs[] = {   210,
+     0,   208,     0,   215,     0,     1,     6,     0,     3,     0,
+   187,     3,     0,     0,   208,   209,     0,   163,     0,   166,
+   167,   207,   207,   207,   168,   169,   165,   207,   207,   207,
+   165,   207,   207,   207,   165,   207,   207,   207,   170,   171,
+     0,   164,     0,     0,   210,   211,     0,   212,     0,   214,
+     0,   213,     0,   138,     6,     0,   139,     6,     0,   141,
+     6,     0,   140,     6,     0,   142,     6,     0,   143,   197,
+   330,   203,     5,   198,     6,     0,   144,   197,   330,   198,
+     6,     0,   145,   197,     5,   203,     5,   203,   330,   203,
+   330,   203,     5,   203,     5,   203,     5,   198,     6,     0,
+     3,     7,   122,   197,     5,   203,   328,   198,     6,     0,
+     3,     7,   121,   197,     5,   203,   326,   203,   334,   203,
+   325,   203,   325,   203,   325,   203,   334,   203,   334,   203,
+   325,   198,     6,     0,     3,     7,   120,   197,     5,   203,
+   326,   203,   326,   203,   332,   203,   325,   203,   325,   203,
+   325,   203,   325,   203,   334,   203,   334,   203,   334,   203,
+   334,   203,   325,   198,     6,     0,     3,     7,   128,   197,
+     5,   203,     3,   203,     3,   203,     3,   203,   325,   198,
+     6,     0,     3,     7,   132,   197,     5,   203,     3,   203,
+   325,   198,     6,     0,     3,     7,   149,   197,     5,   203,
+     3,   203,   325,   198,     6,     0,     3,     7,   130,   197,
+     5,   203,   188,   203,   188,   203,   326,   203,   325,   198,
+     6,     0,     3,     7,   133,   197,     5,   203,   334,   198,
+     6,     0,     3,     7,   134,   197,     5,   203,   334,   203,
+     3,   203,   325,   198,     6,     0,     3,     7,   129,   197,
+     5,   203,     3,   198,     6,     0,     3,     7,   135,   197,
+     5,   203,     3,   203,   326,   198,     6,     0,     3,     7,
+   137,   197,     5,   203,     3,   203,     3,   203,     3,   198,
+     6,     0,     3,     7,   136,   197,     5,   203,   328,   198,
+     6,     0,     3,     7,   131,   197,     5,   203,     3,   198,
+     6,     0,     3,     7,    41,   197,     5,   203,     3,   203,
+     3,   198,     6,     0,     3,     7,   147,   197,     5,   203,
+   334,   198,     6,     0,     3,     7,   148,   197,     5,   203,
+   334,   203,     3,   198,     6,     0,     3,     7,   146,   197,
+     5,   203,     3,   198,     6,     0,     3,     7,   150,   197,
+     5,   203,     3,   203,   326,   198,     6,     0,     3,     7,
+   151,   197,     5,   203,     3,   203,   326,   203,   326,   198,
+     6,     0,     3,     7,   158,   197,     5,   203,     3,   203,
+   326,   203,   326,   198,     6,     0,     3,     7,   152,   197,
+     5,   203,     3,   203,   326,   198,     6,     0,     3,     7,
+   162,   197,     5,   203,     3,   203,   326,   203,   326,   198,
+     6,     0,     3,     7,   153,   197,     5,   203,     3,   203,
+   334,   203,   334,   203,   325,   203,   325,   198,     6,     0,
+     3,     7,   154,   197,     5,   203,   334,   198,     6,     0,
+     3,     7,   155,   197,   156,   203,   325,   203,     3,   198,
+     6,     0,     3,     7,   157,   197,     5,   203,   334,   203,
+   325,   198,     6,     0,     3,     7,   159,   197,     5,   203,
+     5,   203,     3,   203,     3,   198,     6,     0,     3,     7,
+   160,   197,     5,   203,     5,   203,     3,   198,     6,     0,
+     3,     7,   161,   197,     3,   203,     3,   198,     6,     0,
+     0,   215,   216,     0,   218,     0,   217,     0,   300,     0,
+   301,     0,   302,     0,   305,     0,   306,     0,   307,     0,
+   308,     0,   311,     0,   323,     0,   324,     0,   310,     0,
+   309,     0,    33,   197,     5,   198,     6,     0,    33,   197,
+     5,   203,   336,   198,     6,     0,     4,     5,   204,   219,
+   205,     6,     0,     4,     5,     4,   328,   204,   219,   205,
+     6,     0,     0,   219,   221,     0,   219,   224,     0,   219,
+   227,     0,   219,   230,     0,   219,   233,     0,   219,   236,
+     0,   219,   239,     0,   219,   242,     0,   219,   245,     0,
+   219,   248,     0,   219,   251,     0,   219,   254,     0,   219,
+   257,     0,   219,   260,     0,   219,   263,     0,   219,   266,
+     0,   219,   269,     0,   219,   272,     0,   219,   275,     0,
+   219,   278,     0,   219,   281,     0,   219,   284,     0,   219,
+   287,     0,   219,   290,     0,   219,   293,     0,   219,   296,
+     0,   326,     0,   220,   203,   326,     0,     0,    72,   197,
+   326,   203,   326,   203,   326,   198,   222,   204,   220,   205,
+     6,     0,   326,     0,   223,   203,   326,     0,     0,    73,
+   197,   326,   203,   326,   203,   326,   198,   225,   204,   223,
+   205,     6,     0,   326,     0,   226,   203,   326,     0,     0,
+    74,   197,   326,   203,   326,   203,   326,   198,   228,   204,
+   226,   205,     6,     0,   326,     0,   229,   203,   326,     0,
+     0,    75,   197,   326,   203,   326,   203,   326,   203,   326,
+   203,   326,   203,   326,   198,   231,   204,   229,   205,     6,
+     0,   326,     0,   232,   203,   326,     0,     0,    76,   197,
+   326,   203,   326,   203,   326,   203,   326,   203,   326,   203,
+   326,   198,   234,   204,   232,   205,     6,     0,   326,     0,
+   235,   203,   326,     0,     0,    77,   197,   326,   203,   326,
+   203,   326,   203,   326,   203,   326,   203,   326,   198,   237,
+   204,   235,   205,     6,     0,   326,     0,   238,   203,   326,
+     0,     0,    78,   197,   326,   203,   326,   203,   326,   203,
+   326,   203,   326,   203,   326,   203,   326,   203,   326,   203,
+   326,   198,   240,   204,   238,   205,     6,     0,   326,     0,
+   241,   203,   326,     0,     0,    79,   197,   326,   203,   326,
+   203,   326,   203,   326,   203,   326,   203,   326,   203,   326,
+   203,   326,   203,   326,   198,   243,   204,   241,   205,     6,
+     0,   326,     0,   244,   203,   326,     0,     0,    80,   197,
+   326,   203,   326,   203,   326,   203,   326,   203,   326,   203,
+   326,   203,   326,   203,   326,   203,   326,   198,   246,   204,
+   244,   205,     6,     0,   326,     0,   247,   203,   326,     0,
+     0,    81,   197,   326,   203,   326,   203,   326,   203,   326,
+   203,   326,   203,   326,   203,   326,   203,   326,   203,   326,
+   203,   326,   203,   326,   203,   326,   198,   249,   204,   247,
+   205,     6,     0,   326,     0,   250,   203,   326,     0,     0,
+    82,   197,   326,   203,   326,   203,   326,   203,   326,   203,
+   326,   203,   326,   203,   326,   203,   326,   203,   326,   203,
+   326,   203,   326,   203,   326,   198,   252,   204,   250,   205,
+     6,     0,   326,     0,   253,   203,   326,     0,     0,    83,
+   197,   326,   203,   326,   203,   326,   203,   326,   203,   326,
+   203,   326,   203,   326,   203,   326,   203,   326,   203,   326,
+   203,   326,   203,   326,   198,   255,   204,   253,   205,     6,
+     0,   326,     0,   256,   203,   326,     0,     0,    84,   197,
+   326,   203,   326,   203,   326,   203,   326,   203,   326,   203,
+   326,   203,   326,   203,   326,   203,   326,   203,   326,   203,
+   326,   203,   326,   198,   258,   204,   256,   205,     6,     0,
+   326,     0,   259,   203,   326,     0,     0,    85,   197,   326,
+   203,   326,   203,   326,   203,   326,   203,   326,   203,   326,
+   203,   326,   203,   326,   203,   326,   203,   326,   203,   326,
+   203,   326,   198,   261,   204,   259,   205,     6,     0,   326,
+     0,   262,   203,   326,     0,     0,    86,   197,   326,   203,
+   326,   203,   326,   203,   326,   203,   326,   203,   326,   203,
+   326,   203,   326,   203,   326,   203,   326,   203,   326,   203,
+   326,   198,   264,   204,   262,   205,     6,     0,   326,     0,
+   265,   203,   326,     0,     0,    87,   197,   326,   203,   326,
+   203,   326,   203,   326,   203,   326,   203,   326,   203,   326,
+   203,   326,   203,   326,   203,   326,   203,   326,   203,   326,
+   203,   326,   203,   326,   203,   326,   203,   326,   203,   326,
+   203,   326,   203,   326,   203,   326,   203,   326,   203,   326,
+   203,   326,   203,   326,   198,   267,   204,   265,   205,     6,
+     0,   326,     0,   268,   203,   326,     0,     0,    88,   197,
+   326,   203,   326,   203,   326,   203,   326,   203,   326,   203,
+   326,   203,   326,   203,   326,   203,   326,   203,   326,   203,
+   326,   203,   326,   203,   326,   203,   326,   203,   326,   203,
+   326,   203,   326,   203,   326,   203,   326,   203,   326,   203,
+   326,   203,   326,   203,   326,   203,   326,   198,   270,   204,
+   268,   205,     6,     0,   326,     0,   271,   203,   326,     0,
+     0,    89,   197,   326,   203,   326,   203,   326,   203,   326,
+   203,   326,   203,   326,   203,   326,   203,   326,   203,   326,
+   203,   326,   203,   326,   203,   326,   203,   326,   203,   326,
+   203,   326,   203,   326,   203,   326,   203,   326,   203,   326,
+   203,   326,   203,   326,   203,   326,   203,   326,   203,   326,
+   198,   273,   204,   271,   205,     6,     0,   326,     0,   274,
+   203,   326,     0,     0,    90,   197,   326,   203,   326,   203,
+   326,   203,   326,   203,   326,   203,   326,   203,   326,   203,
+   326,   203,   326,   203,   326,   203,   326,   203,   326,   203,
+   326,   203,   326,   203,   326,   203,   326,   203,   326,   203,
+   326,   198,   276,   204,   274,   205,     6,     0,   326,     0,
+   277,   203,   326,     0,     0,    91,   197,   326,   203,   326,
+   203,   326,   203,   326,   203,   326,   203,   326,   203,   326,
+   203,   326,   203,   326,   203,   326,   203,   326,   203,   326,
+   203,   326,   203,   326,   203,   326,   203,   326,   203,   326,
+   203,   326,   198,   279,   204,   277,   205,     6,     0,   326,
+     0,   280,   203,   326,     0,     0,    92,   197,   326,   203,
+   326,   203,   326,   203,   326,   203,   326,   203,   326,   203,
+   326,   203,   326,   203,   326,   203,   326,   203,   326,   203,
+   326,   203,   326,   203,   326,   203,   326,   203,   326,   203,
+   326,   203,   326,   198,   282,   204,   280,   205,     6,     0,
+   326,     0,   283,   203,   326,     0,     0,    93,   197,   326,
+   203,   326,   203,   326,   203,   326,   203,   326,   203,   326,
+   203,   326,   203,   326,   203,   326,   203,   326,   203,   326,
+   203,   326,   203,   326,   203,   326,   203,   326,   198,   285,
+   204,   283,   205,     6,     0,   326,     0,   286,   203,   326,
+     0,     0,    94,   197,   326,   203,   326,   203,   326,   203,
+   326,   203,   326,   203,   326,   203,   326,   203,   326,   203,
+   326,   203,   326,   203,   326,   203,   326,   203,   326,   203,
+   326,   203,   326,   198,   288,   204,   286,   205,     6,     0,
+   326,     0,   289,   203,   326,     0,     0,    95,   197,   326,
+   203,   326,   203,   326,   203,   326,   203,   326,   203,   326,
+   203,   326,   203,   326,   203,   326,   203,   326,   203,   326,
+   203,   326,   203,   326,   203,   326,   203,   326,   198,   291,
+   204,   289,   205,     6,     0,   340,     0,   292,   203,   340,
+     0,     0,    96,   197,   326,   203,   326,   203,   326,   198,
+   294,   204,   292,   205,     6,     0,   340,     0,   295,   203,
+   340,     0,     0,    97,   197,   326,   203,   326,   203,   326,
+   203,   326,   198,   297,   204,   295,   205,     6,     0,     7,
+     0,   172,     0,   173,     0,   174,     0,   175,     0,   193,
+     0,   194,     0,     4,   298,   326,     6,     0,     4,   199,
+   326,   200,   298,   326,     6,     0,     4,   199,   204,   336,
+   205,   200,   298,   334,     6,     0,     4,   199,   200,     7,
+   334,     6,     0,     4,   299,     6,     0,     4,   199,   326,
+   200,   299,     6,     0,     4,   201,     4,     7,   340,     6,
+     0,     4,   199,   326,   200,   201,     4,     7,   340,     6,
+     0,     4,   201,     4,   298,   326,     6,     0,     4,   199,
+   326,   200,   201,     4,   298,   326,     6,     0,     4,   201,
+     4,   299,     6,     0,     4,   199,   326,   200,   201,     4,
+   299,     6,     0,     4,   201,   106,   201,     4,     7,   337,
+     6,     0,     4,   199,   326,   200,   201,   106,   201,     4,
+     7,   337,     6,     0,     4,   201,   107,     7,   338,     6,
+     0,     4,   199,   326,   200,   201,   107,     7,   338,     6,
+     0,    58,   197,     4,   198,   201,     4,     7,   326,     6,
+     0,    58,   197,     4,   198,   201,     4,     7,   340,     6,
+     0,    38,   197,   326,   198,     7,   328,     6,     0,    54,
+    38,   197,   326,   198,     7,   334,     6,     0,    70,    38,
+   334,     7,   204,   326,   203,   326,   203,   326,   205,     6,
+     0,    45,    46,   334,     7,   326,     6,     0,    41,   197,
+   326,   198,     7,   334,     6,     0,    43,   197,   326,   198,
+     7,   334,     6,     0,    39,   197,   326,   198,     7,   334,
+     6,     0,    39,   197,   326,   198,     7,   334,    49,   328,
+     6,     0,    40,   197,   326,   198,     7,   334,     6,     0,
+    47,   197,   326,   198,     7,   204,   326,   203,   326,   203,
+     5,   203,     5,   203,     5,   205,     6,     0,    99,   197,
+   326,   198,     7,   334,     6,     0,   100,   197,   326,   198,
+     7,   334,     6,     0,   101,   197,   326,   198,     7,   334,
+   105,   334,   102,   326,     6,     0,    41,    65,   197,   326,
+   198,     7,   334,     6,     0,    70,    41,   334,     7,   204,
+   326,   203,   326,   203,   326,   205,     6,     0,    54,    41,
+   197,   326,   198,     7,   334,     6,     0,    49,    42,   197,
+   326,   198,     7,   334,     6,     0,    50,    42,   197,   326,
+   198,     7,   334,     6,     0,   117,    42,   197,   326,   198,
+     7,   204,   326,   203,   334,   205,     6,     0,    51,    42,
+   204,   326,   205,     7,   197,   326,   203,   326,   198,   334,
+   334,     6,     0,    51,    42,   197,   326,   198,     7,   197,
+   326,   203,   326,   198,   334,   334,     6,     0,   101,    42,
+   103,   104,   197,   326,   198,     7,   332,   105,   204,   334,
+   203,   334,   205,   102,   204,   326,   203,   326,   205,     6,
+     0,   101,    42,   197,   326,   198,     7,   332,   105,   204,
+   334,   203,   334,   205,   102,   204,   326,   203,   326,   205,
+     6,     0,    42,    65,   197,   326,   198,     7,   334,     6,
+     0,    54,    42,   197,   326,   198,     7,   334,     6,     0,
+    53,    44,   197,   326,   198,     7,   334,     6,     0,    44,
+   197,   326,   198,     7,   334,     6,     0,    54,    44,   197,
+   326,   198,     7,   334,     6,     0,    60,   328,   204,   303,
+   205,     0,    59,   204,   328,   203,   328,   203,   326,   205,
+   204,   303,   205,     0,    61,   328,   204,   303,   205,     0,
+    62,   204,   328,   203,   326,   205,   204,   303,   205,     0,
+   305,     0,   304,     0,   302,     0,     0,   304,   301,     0,
+   304,    38,   204,   336,   205,     6,     0,   304,    41,   204,
+   336,   205,     6,     0,   304,    42,   204,   336,   205,     6,
+     0,   304,    44,   204,   336,   205,     6,     0,    64,   204,
+   304,   205,     0,    64,     4,   199,   326,   200,     6,     0,
+    67,   204,   304,   205,     0,    67,     4,   199,   326,   200,
+     6,     0,    67,     4,     6,     0,   106,   337,   204,   304,
+   205,     0,   118,   340,     6,     0,   119,   340,     6,     0,
+   118,   204,   304,   205,     0,   119,   204,   304,   205,     0,
+     4,   340,     6,     0,     4,     4,   199,   326,   200,   340,
+     6,     0,     4,   326,     6,     0,    58,   197,     4,   198,
+   201,     4,     6,     0,    98,     4,     6,     0,   113,     6,
+     0,    37,     6,     0,   108,   197,   326,     8,   326,   198,
+     0,   108,   197,   326,     8,   326,     8,   326,   198,     0,
+   108,     4,   109,   204,   326,     8,   326,   205,     0,   108,
+     4,   109,   204,   326,     8,   326,     8,   326,   205,     0,
+   110,     0,   116,     4,     0,   114,     0,   115,     4,     6,
+     0,   111,   197,   326,   198,     0,   112,     0,    63,    38,
+   204,   326,   203,   328,   205,     6,     0,    63,    38,   204,
+   326,   203,   328,   203,   328,   203,   326,   205,     6,     0,
+    63,    38,   204,   326,   203,   328,   203,   328,   203,   328,
+   203,   326,   205,     6,     0,     0,    63,    38,   204,   326,
+   203,   328,   205,   312,   204,   321,   205,     6,     0,     0,
+    63,    38,   204,   326,   203,   328,   203,   328,   203,   326,
+   205,   313,   204,   321,   205,     6,     0,     0,    63,    38,
+   204,   326,   203,   328,   203,   328,   203,   328,   203,   326,
+   205,   314,   204,   321,   205,     6,     0,    63,    41,   204,
+   326,   203,   328,   205,     6,     0,    63,    41,   204,   326,
+   203,   328,   203,   328,   203,   326,   205,     6,     0,    63,
+    41,   204,   326,   203,   328,   203,   328,   203,   328,   203,
+   326,   205,     6,     0,     0,    63,    41,   204,   326,   203,
+   328,   205,   315,   204,   321,   205,     6,     0,     0,    63,
+    41,   204,   326,   203,   328,   203,   328,   203,   326,   205,
+   316,   204,   321,   205,     6,     0,     0,    63,    41,   204,
+   326,   203,   328,   203,   328,   203,   328,   203,   326,   205,
+   317,   204,   321,   205,     6,     0,    63,    42,   204,   326,
+   203,   328,   205,     6,     0,    63,    42,   204,   326,   203,
+   328,   203,   328,   203,   326,   205,     6,     0,    63,    42,
+   204,   326,   203,   328,   203,   328,   203,   328,   203,   326,
+   205,     6,     0,     0,    63,    42,   204,   326,   203,   328,
+   205,   318,   204,   321,   205,     6,     0,     0,    63,    42,
+   204,   326,   203,   328,   203,   328,   203,   326,   205,   319,
+   204,   321,   205,     6,     0,     0,    63,    42,   204,   326,
+   203,   328,   203,   328,   203,   328,   203,   326,   205,   320,
+   204,   321,   205,     6,     0,   322,     0,   321,   322,     0,
+    71,   204,   334,   203,   334,   203,   334,   205,     6,     0,
+    71,   204,   334,   203,   334,   205,     6,     0,    66,     6,
+     0,    52,    41,   334,     7,   326,     6,     0,    52,    41,
+   334,     7,   326,    55,    57,   326,     6,     0,    52,    41,
+   334,     7,   326,    55,    56,   326,     6,     0,    52,    42,
+   204,   326,   205,     7,   334,     6,     0,    48,    42,   204,
+   326,   205,     7,   334,     6,     0,    52,    44,   204,   326,
+   205,     7,   334,     6,     0,    66,    42,   334,     7,   326,
+     6,     0,    66,    42,   334,     6,     0,    68,     6,     0,
+    69,     6,     0,   123,     0,   124,     0,   125,     0,   126,
+     0,   127,     0,   327,     0,   197,   326,   198,     0,   187,
+   326,     0,   186,   326,     0,   192,   326,     0,   326,   187,
+   326,     0,   326,   186,   326,     0,   326,   188,   326,     0,
+   326,   189,   326,     0,   326,   190,   326,     0,   326,   196,
+   326,     0,   326,   182,   326,     0,   326,   184,   326,     0,
+   326,   183,   326,     0,   326,   185,   326,     0,   326,   179,
+   326,     0,   326,   180,   326,     0,   326,   178,   326,     0,
+   326,   177,   326,     0,   326,   176,   326,     8,   326,     0,
+    12,   197,   326,   198,     0,    13,   197,   326,   198,     0,
+    14,   197,   326,   198,     0,    15,   197,   326,   198,     0,
+    16,   197,   326,   198,     0,    17,   197,   326,   198,     0,
+    18,   197,   326,   198,     0,    19,   197,   326,   198,     0,
+    20,   197,   326,   198,     0,    22,   197,   326,   198,     0,
+    23,   197,   326,   203,   326,   198,     0,    24,   197,   326,
+   198,     0,    25,   197,   326,   198,     0,    26,   197,   326,
+   198,     0,    27,   197,   326,   198,     0,    28,   197,   326,
+   198,     0,    29,   197,   326,   198,     0,    30,   197,   326,
+   203,   326,   198,     0,    31,   197,   326,   203,   326,   198,
+     0,    32,   197,   326,   203,   326,   198,     0,    21,   197,
+   326,   198,     0,    12,   199,   326,   200,     0,    13,   199,
+   326,   200,     0,    14,   199,   326,   200,     0,    15,   199,
+   326,   200,     0,    16,   199,   326,   200,     0,    17,   199,
+   326,   200,     0,    18,   199,   326,   200,     0,    19,   199,
+   326,   200,     0,    20,   199,   326,   200,     0,    22,   199,
+   326,   200,     0,    23,   199,   326,   203,   326,   200,     0,
+    24,   199,   326,   200,     0,    25,   199,   326,   200,     0,
+    26,   199,   326,   200,     0,    27,   199,   326,   200,     0,
+    28,   199,   326,   200,     0,    29,   199,   326,   200,     0,
+    30,   199,   326,   203,   326,   200,     0,    31,   199,   326,
+   203,   326,   200,     0,    32,   199,   326,   203,   326,   200,
+     0,    21,   199,   326,   200,     0,     3,     0,     9,     0,
+    10,     0,    11,     0,     4,     0,     4,   199,   326,   200,
+     0,   202,     4,   199,   200,     0,     4,   299,     0,     4,
+   199,   326,   200,   299,     0,     4,   201,     4,     0,     4,
+   199,   326,   200,   201,     4,     0,     4,   201,     4,   299,
+     0,     4,   199,   326,   200,   201,     4,   299,     0,   329,
+     0,   187,   328,     0,   186,   328,     0,   328,   187,   328,
+     0,   328,   186,   328,     0,   204,   326,   203,   326,   203,
+   326,   203,   326,   203,   326,   205,     0,   204,   326,   203,
+   326,   203,   326,   203,   326,   205,     0,   204,   326,   203,
+   326,   203,   326,   205,     0,   197,   326,   203,   326,   203,
+   326,   198,     0,     0,   197,   331,   198,     0,     5,     0,
+   331,   203,     5,     0,     0,   204,   333,   205,     0,   197,
+   333,   198,     0,   334,     0,   333,   203,   334,     0,   326,
+     0,   335,     0,   204,   336,   205,     0,   187,   204,   336,
+   205,     0,   326,     8,   326,     0,   326,     8,   326,     8,
+   326,     0,    38,   204,   326,   205,     0,   302,     0,   305,
+     0,   311,     0,     4,   199,   200,     0,   187,     4,   199,
+   200,     0,     4,   199,   204,   336,   205,   200,     0,   187,
+     4,   199,   204,   336,   205,   200,     0,   326,     0,   335,
+     0,   336,   203,   326,     0,   336,   203,   335,     0,   204,
+   326,   203,   326,   203,   326,   203,   326,   205,     0,   204,
+   326,   203,   326,   203,   326,   205,     0,     4,     0,     4,
+   201,   106,   201,     4,     0,   204,   339,   205,     0,     4,
+   199,   326,   200,   201,   107,     0,   337,     0,   339,   203,
+   337,     0,     5,     0,    35,   197,   340,   203,   340,   198,
+     0,    36,   197,   340,   198,     0,    34,   197,   340,   198,
+     0,    34,   197,   340,   203,   336,   198,     0,    34,   197,
+     4,   201,     4,   198,     0,    34,   197,     4,   199,   326,
+   200,   201,     4,   198,     0
 };
 
 #endif
 
 #if YYDEBUG != 0
 static const short yyrline[] = { 0,
-   167,   169,   170,   171,   176,   178,   181,   189,   203,   213,
-   215,   218,   220,   221,   224,   230,   235,   236,   237,   240,
-   244,   247,   253,   258,   264,   272,   277,   281,   287,   292,
-   296,   301,   305,   308,   313,   317,   321,   325,   330,   334,
-   337,   341,   345,   349,   353,   357,   361,   364,   368,   371,
-   375,   378,   385,   389,   395,   397,   398,   399,   400,   401,
-   402,   403,   404,   405,   406,   407,   408,   409,   412,   417,
-   432,   437,   443,   448,   449,   450,   451,   452,   453,   454,
+   161,   163,   164,   165,   170,   172,   175,   177,   180,   188,
+   202,   219,   221,   224,   226,   227,   230,   236,   241,   242,
+   243,   246,   250,   253,   259,   264,   270,   278,   283,   287,
+   293,   298,   302,   307,   311,   314,   319,   323,   327,   331,
+   336,   340,   343,   347,   351,   355,   359,   363,   367,   370,
+   374,   377,   381,   384,   391,   393,   396,   398,   399,   400,
+   401,   402,   403,   404,   405,   406,   407,   408,   409,   410,
+   413,   418,   434,   439,   445,   450,   451,   452,   453,   454,
    455,   456,   457,   458,   459,   460,   461,   462,   463,   464,
-   465,   466,   467,   468,   469,   470,   471,   472,   473,   476,
-   479,   483,   489,   495,   498,   502,   508,   514,   517,   521,
-   527,   533,   536,   540,   548,   554,   557,   561,   569,   575,
-   578,   582,   590,   596,   599,   603,   615,   621,   624,   628,
-   640,   646,   649,   653,   665,   671,   674,   678,   691,   697,
-   700,   704,   717,   723,   726,   730,   743,   749,   752,   756,
-   769,   775,   778,   782,   795,   801,   804,   808,   821,   827,
-   830,   834,   857,   863,   866,   870,   893,   899,   902,   906,
-   929,   935,   938,   942,   960,   966,   969,   973,   991,   997,
-  1000,  1004,  1022,  1028,  1031,  1035,  1052,  1058,  1061,  1065,
-  1082,  1088,  1091,  1095,  1112,  1118,  1124,  1131,  1139,  1145,
-  1151,  1158,  1166,  1175,  1177,  1178,  1179,  1180,  1183,  1185,
-  1188,  1219,  1253,  1300,  1315,  1324,  1339,  1351,  1365,  1388,
-  1412,  1424,  1438,  1450,  1464,  1484,  1506,  1516,  1530,  1541,
-  1547,  1566,  1580,  1586,  1592,  1611,  1617,  1623,  1639,  1646,
-  1652,  1658,  1669,  1680,  1705,  1711,  1730,  1752,  1758,  1766,
-  1772,  1778,  1787,  1793,  1799,  1809,  1815,  1820,  1825,  1832,
-  1834,  1835,  1838,  1843,  1847,  1861,  1875,  1889,  1907,  1918,
-  1928,  1936,  1940,  1949,  1961,  1969,  1974,  1983,  1994,  2030,
-  2043,  2060,  2069,  2078,  2082,  2102,  2114,  2124,  2145,  2166,
-  2187,  2193,  2198,  2203,  2207,  2215,  2228,  2238,  2248,  2253,
-  2263,  2268,  2278,  2283,  2295,  2312,  2329,  2346,  2351,  2368,
-  2373,  2390,  2395,  2415,  2431,  2447,  2463,  2468,  2485,  2491,
-  2508,  2514,  2533,  2537,  2542,  2569,  2593,  2601,  2620,  2638,
-  2656,  2678,  2699,  2720,  2734,  2753,  2758,  2767,  2769,  2770,
-  2771,  2772,  2775,  2777,  2778,  2779,  2780,  2781,  2782,  2783,
-  2784,  2791,  2792,  2793,  2794,  2795,  2796,  2797,  2798,  2799,
-  2800,  2801,  2802,  2803,  2804,  2805,  2806,  2807,  2808,  2809,
-  2810,  2811,  2812,  2813,  2814,  2815,  2816,  2817,  2818,  2819,
-  2820,  2821,  2822,  2824,  2825,  2826,  2827,  2828,  2829,  2830,
-  2831,  2832,  2833,  2834,  2835,  2836,  2837,  2838,  2839,  2840,
-  2841,  2842,  2843,  2844,  2849,  2854,  2855,  2856,  2860,  2871,
-  2888,  2900,  2911,  2930,  2946,  2962,  2978,  2995,  3000,  3004,
-  3008,  3012,  3018,  3023,  3027,  3031,  3037,  3041,  3046,  3050,
-  3055,  3059,  3063,  3069,  3075,  3082,  3088,  3092,  3096,  3106,
-  3113,  3124,  3144,  3153,  3162,  3173,  3187,  3203,  3223,  3247,
-  3253,  3257,  3261,  3272,  3277,  3288,  3293,  3311,  3316,  3329,
-  3335,  3341,  3346,  3354,  3367,  3371,  3389,  3403
+   465,   466,   467,   468,   469,   470,   471,   472,   473,   474,
+   475,   478,   481,   485,   491,   497,   500,   504,   510,   516,
+   519,   523,   529,   535,   538,   542,   550,   556,   559,   563,
+   571,   577,   580,   584,   592,   598,   601,   605,   617,   623,
+   626,   630,   642,   648,   651,   655,   667,   673,   676,   680,
+   693,   699,   702,   706,   719,   725,   728,   732,   745,   751,
+   754,   758,   771,   777,   780,   784,   797,   803,   806,   810,
+   823,   829,   832,   836,   859,   865,   868,   872,   895,   901,
+   904,   908,   931,   937,   940,   944,   962,   968,   971,   975,
+   993,   999,  1002,  1006,  1024,  1030,  1033,  1037,  1054,  1060,
+  1063,  1067,  1084,  1090,  1093,  1097,  1114,  1120,  1126,  1133,
+  1141,  1147,  1153,  1160,  1168,  1177,  1179,  1180,  1181,  1182,
+  1185,  1187,  1190,  1222,  1258,  1307,  1323,  1333,  1351,  1364,
+  1380,  1405,  1431,  1444,  1460,  1473,  1489,  1508,  1530,  1539,
+  1553,  1573,  1589,  1608,  1627,  1645,  1663,  1681,  1707,  1725,
+  1744,  1768,  1792,  1818,  1835,  1853,  1872,  1891,  1930,  1955,
+  1977,  1993,  2012,  2031,  2047,  2066,  2083,  2100,  2120,  2126,
+  2131,  2136,  2143,  2145,  2146,  2149,  2154,  2158,  2174,  2190,
+  2206,  2226,  2240,  2250,  2260,  2264,  2273,  2287,  2295,  2300,
+  2311,  2324,  2369,  2383,  2398,  2407,  2416,  2420,  2440,  2456,
+  2470,  2495,  2520,  2547,  2553,  2558,  2563,  2567,  2575,  2589,
+  2600,  2611,  2616,  2627,  2632,  2643,  2648,  2661,  2679,  2697,
+  2715,  2720,  2738,  2743,  2761,  2766,  2787,  2804,  2821,  2838,
+  2843,  2860,  2866,  2883,  2889,  2908,  2912,  2917,  2944,  2968,
+  2976,  2995,  3013,  3031,  3054,  3076,  3098,  3112,  3131,  3136,
+  3145,  3147,  3148,  3149,  3150,  3153,  3155,  3156,  3157,  3158,
+  3159,  3160,  3161,  3162,  3169,  3170,  3171,  3172,  3173,  3174,
+  3175,  3176,  3177,  3178,  3179,  3180,  3181,  3182,  3183,  3184,
+  3185,  3186,  3187,  3188,  3189,  3190,  3191,  3192,  3193,  3194,
+  3195,  3196,  3197,  3198,  3199,  3200,  3202,  3203,  3204,  3205,
+  3206,  3207,  3208,  3209,  3210,  3211,  3212,  3213,  3214,  3215,
+  3216,  3217,  3218,  3219,  3220,  3221,  3222,  3227,  3232,  3233,
+  3234,  3238,  3250,  3269,  3282,  3294,  3316,  3333,  3350,  3367,
+  3386,  3391,  3395,  3399,  3403,  3409,  3414,  3418,  3422,  3428,
+  3432,  3437,  3441,  3446,  3450,  3454,  3460,  3466,  3473,  3479,
+  3483,  3487,  3498,  3505,  3516,  3536,  3546,  3556,  3568,  3584,
+  3602,  3625,  3652,  3658,  3662,  3666,  3678,  3683,  3695,  3701,
+  3721,  3726,  3739,  3745,  3751,  3756,  3764,  3778,  3782,  3801,
+  3817
 };
 #endif
 
@@ -811,12 +809,12 @@ static const char * const yytname[] = {   "$","error","$undefined.","tDOUBLE",
 "tAFFECTMINUS","tAFFECTTIMES","tAFFECTDIVIDE","'?'","tOR","tAND","tEQUAL","tNOTEQUAL",
 "tAPPROXEQUAL","'<'","tLESSOREQUAL","'>'","tGREATEROREQUAL","'+'","'-'","'*'",
 "'/'","'%'","tCROSSPRODUCT","'!'","tPLUSPLUS","tMINUSMINUS","UNARYPREC","'^'",
-"'('","')'","'['","']'","'.'","'#'","','","'{'","'}'","All","SignedDouble","STLFormatItem",
-"StepFormatItems","StepFormatItem","StepSpecial","StepHeaderItem","StepDataItem",
-"GeomFormatList","GeomFormat","Printf","View","Views","ScalarPointValues","ScalarPoint",
-"@1","VectorPointValues","VectorPoint","@2","TensorPointValues","TensorPoint",
-"@3","ScalarLineValues","ScalarLine","@4","VectorLineValues","VectorLine","@5",
-"TensorLineValues","TensorLine","@6","ScalarTriangleValues","ScalarTriangle",
+"'('","')'","'['","']'","'.'","'#'","','","'{'","'}'","All","SignedDouble","StlFormatItems",
+"StlFormatItem","StepFormatItems","StepFormatItem","StepSpecial","StepHeaderItem",
+"StepDataItem","GeoFormatItems","GeoFormatItem","Printf","View","Views","ScalarPointValues",
+"ScalarPoint","@1","VectorPointValues","VectorPoint","@2","TensorPointValues",
+"TensorPoint","@3","ScalarLineValues","ScalarLine","@4","VectorLineValues","VectorLine",
+"@5","TensorLineValues","TensorLine","@6","ScalarTriangleValues","ScalarTriangle",
 "@7","VectorTriangleValues","VectorTriangle","@8","TensorTriangleValues","TensorTriangle",
 "@9","ScalarQuadrangleValues","ScalarQuadrangle","@10","VectorQuadrangleValues",
 "VectorQuadrangle","@11","TensorQuadrangleValues","TensorQuadrangle","@12","ScalarTetrahedronValues",
@@ -830,605 +828,609 @@ static const char * const yytname[] = {   "$","error","$undefined.","tDOUBLE",
 "@26","NumericAffectation","NumericIncrement","Affectation","Shape","Transform",
 "MultipleShape","ListOfShapes","Duplicata","Delete","Colorify","Visibility",
 "Command","Loop","Extrude","@27","@28","@29","@30","@31","@32","@33","@34","@35",
-"ExtrudeParameters","ExtrudeParameter","Transfini","Coherence","BoolExpr","FExpr",
-"FExpr_Single","VExpr","VExpr_Single","ListOfStrings","RecursiveListOfStrings",
+"ExtrudeParameters","ExtrudeParameter","Transfinite","Coherence","BoolExpr",
+"FExpr","FExpr_Single","VExpr","VExpr_Single","ListOfStrings","RecursiveListOfStrings",
 "ListOfListOfDouble","RecursiveListOfListOfDouble","ListOfDouble","FExpr_Multi",
 "RecursiveListOfDouble","ColorExpr","ListOfColor","RecursiveListOfColor","StringExpr", NULL
 };
 #endif
 
 static const short yyr1[] = {     0,
-   206,   206,   206,   206,   207,   207,   208,   208,   208,   209,
-   209,   210,   210,   210,   211,   211,   211,   211,   211,   212,
-   212,   212,   213,   213,   213,   213,   213,   213,   213,   213,
-   213,   213,   213,   213,   213,   213,   213,   213,   213,   213,
-   213,   213,   213,   213,   213,   213,   213,   213,   213,   213,
-   213,   213,   214,   214,   215,   215,   215,   215,   215,   215,
-   215,   215,   215,   215,   215,   215,   215,   215,   216,   216,
-   217,   217,   218,   218,   218,   218,   218,   218,   218,   218,
-   218,   218,   218,   218,   218,   218,   218,   218,   218,   218,
-   218,   218,   218,   218,   218,   218,   218,   218,   218,   219,
-   219,   221,   220,   222,   222,   224,   223,   225,   225,   227,
-   226,   228,   228,   230,   229,   231,   231,   233,   232,   234,
-   234,   236,   235,   237,   237,   239,   238,   240,   240,   242,
-   241,   243,   243,   245,   244,   246,   246,   248,   247,   249,
-   249,   251,   250,   252,   252,   254,   253,   255,   255,   257,
-   256,   258,   258,   260,   259,   261,   261,   263,   262,   264,
-   264,   266,   265,   267,   267,   269,   268,   270,   270,   272,
-   271,   273,   273,   275,   274,   276,   276,   278,   277,   279,
-   279,   281,   280,   282,   282,   284,   283,   285,   285,   287,
-   286,   288,   288,   290,   289,   291,   291,   293,   292,   294,
-   294,   296,   295,   297,   297,   297,   297,   297,   298,   298,
-   299,   299,   299,   299,   299,   299,   299,   299,   299,   299,
-   299,   299,   299,   299,   299,   299,   299,   299,   300,   300,
-   300,   300,   300,   300,   300,   300,   300,   300,   300,   300,
+   206,   206,   206,   206,   207,   207,   208,   208,   209,   209,
+   209,   210,   210,   211,   211,   211,   212,   212,   212,   212,
+   212,   213,   213,   213,   214,   214,   214,   214,   214,   214,
+   214,   214,   214,   214,   214,   214,   214,   214,   214,   214,
+   214,   214,   214,   214,   214,   214,   214,   214,   214,   214,
+   214,   214,   214,   214,   215,   215,   216,   216,   216,   216,
+   216,   216,   216,   216,   216,   216,   216,   216,   216,   216,
+   217,   217,   218,   218,   219,   219,   219,   219,   219,   219,
+   219,   219,   219,   219,   219,   219,   219,   219,   219,   219,
+   219,   219,   219,   219,   219,   219,   219,   219,   219,   219,
+   219,   220,   220,   222,   221,   223,   223,   225,   224,   226,
+   226,   228,   227,   229,   229,   231,   230,   232,   232,   234,
+   233,   235,   235,   237,   236,   238,   238,   240,   239,   241,
+   241,   243,   242,   244,   244,   246,   245,   247,   247,   249,
+   248,   250,   250,   252,   251,   253,   253,   255,   254,   256,
+   256,   258,   257,   259,   259,   261,   260,   262,   262,   264,
+   263,   265,   265,   267,   266,   268,   268,   270,   269,   271,
+   271,   273,   272,   274,   274,   276,   275,   277,   277,   279,
+   278,   280,   280,   282,   281,   283,   283,   285,   284,   286,
+   286,   288,   287,   289,   289,   291,   290,   292,   292,   294,
+   293,   295,   295,   297,   296,   298,   298,   298,   298,   298,
+   299,   299,   300,   300,   300,   300,   300,   300,   300,   300,
    300,   300,   300,   300,   300,   300,   300,   300,   300,   300,
-   300,   300,   300,   300,   300,   301,   301,   301,   301,   302,
-   302,   302,   303,   303,   303,   303,   303,   303,   304,   304,
-   305,   305,   305,   306,   307,   307,   307,   307,   308,   308,
-   308,   308,   308,   308,   308,   309,   309,   309,   309,   309,
-   309,   309,   309,   309,   309,   310,   310,   310,   311,   310,
-   312,   310,   313,   310,   310,   310,   310,   314,   310,   315,
-   310,   316,   310,   310,   310,   310,   317,   310,   318,   310,
-   319,   310,   320,   320,   321,   321,   321,   322,   322,   322,
-   322,   322,   322,   322,   322,   323,   323,   324,   324,   324,
-   324,   324,   325,   325,   325,   325,   325,   325,   325,   325,
-   325,   325,   325,   325,   325,   325,   325,   325,   325,   325,
-   325,   325,   325,   325,   325,   325,   325,   325,   325,   325,
-   325,   325,   325,   325,   325,   325,   325,   325,   325,   325,
-   325,   325,   325,   325,   325,   325,   325,   325,   325,   325,
-   325,   325,   325,   325,   325,   325,   325,   325,   325,   325,
-   325,   325,   325,   325,   326,   326,   326,   326,   326,   326,
+   301,   301,   301,   301,   301,   301,   301,   301,   301,   301,
+   301,   301,   301,   301,   301,   301,   301,   301,   301,   301,
+   301,   301,   301,   301,   301,   301,   301,   301,   302,   302,
+   302,   302,   303,   303,   303,   304,   304,   304,   304,   304,
+   304,   305,   305,   306,   306,   306,   307,   308,   308,   308,
+   308,   309,   309,   309,   309,   309,   309,   309,   310,   310,
+   310,   310,   310,   310,   310,   310,   310,   310,   311,   311,
+   311,   312,   311,   313,   311,   314,   311,   311,   311,   311,
+   315,   311,   316,   311,   317,   311,   311,   311,   311,   318,
+   311,   319,   311,   320,   311,   321,   321,   322,   322,   322,
+   323,   323,   323,   323,   323,   323,   323,   323,   324,   324,
+   325,   325,   325,   325,   325,   326,   326,   326,   326,   326,
+   326,   326,   326,   326,   326,   326,   326,   326,   326,   326,
+   326,   326,   326,   326,   326,   326,   326,   326,   326,   326,
+   326,   326,   326,   326,   326,   326,   326,   326,   326,   326,
+   326,   326,   326,   326,   326,   326,   326,   326,   326,   326,
+   326,   326,   326,   326,   326,   326,   326,   326,   326,   326,
    326,   326,   326,   326,   326,   326,   326,   327,   327,   327,
-   327,   327,   328,   328,   328,   328,   329,   329,   330,   330,
-   331,   331,   331,   332,   332,   333,   333,   333,   333,   334,
-   334,   334,   334,   334,   334,   334,   334,   334,   334,   335,
-   335,   335,   335,   336,   336,   336,   336,   337,   337,   338,
-   338,   339,   339,   339,   339,   339,   339,   339
+   327,   327,   327,   327,   327,   327,   327,   327,   327,   327,
+   328,   328,   328,   328,   328,   329,   329,   329,   329,   330,
+   330,   331,   331,   332,   332,   332,   333,   333,   334,   334,
+   334,   334,   335,   335,   335,   335,   335,   335,   335,   335,
+   335,   335,   336,   336,   336,   336,   337,   337,   337,   337,
+   338,   338,   339,   339,   340,   340,   340,   340,   340,   340,
+   340
 };
 
 static const short yyr2[] = {     0,
-     1,     1,     1,     2,     1,     2,     1,    21,     1,     0,
-     2,     1,     1,     1,     2,     2,     2,     2,     2,     7,
-     5,    17,     9,    23,    31,    15,    11,    11,    15,     9,
-    13,     9,    11,    13,     9,     9,    11,     9,    11,     9,
-    11,    13,    13,    11,    13,    17,     9,    11,    11,    13,
-    11,     9,     0,     2,     1,     1,     1,     1,     1,     1,
-     1,     1,     1,     1,     1,     1,     1,     1,     5,     7,
-     6,     8,     0,     2,     2,     2,     2,     2,     2,     2,
+     1,     1,     1,     2,     1,     2,     0,     2,     1,    21,
+     1,     0,     2,     1,     1,     1,     2,     2,     2,     2,
+     2,     7,     5,    17,     9,    23,    31,    15,    11,    11,
+    15,     9,    13,     9,    11,    13,     9,     9,    11,     9,
+    11,     9,    11,    13,    13,    11,    13,    17,     9,    11,
+    11,    13,    11,     9,     0,     2,     1,     1,     1,     1,
+     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+     5,     7,     6,     8,     0,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     1,
-     3,     0,    13,     1,     3,     0,    13,     1,     3,     0,
-    13,     1,     3,     0,    19,     1,     3,     0,    19,     1,
-     3,     0,    19,     1,     3,     0,    25,     1,     3,     0,
-    25,     1,     3,     0,    25,     1,     3,     0,    31,     1,
-     3,     0,    31,     1,     3,     0,    31,     1,     3,     0,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     1,     3,     0,    13,     1,     3,     0,    13,     1,
+     3,     0,    13,     1,     3,     0,    19,     1,     3,     0,
+    19,     1,     3,     0,    19,     1,     3,     0,    25,     1,
+     3,     0,    25,     1,     3,     0,    25,     1,     3,     0,
     31,     1,     3,     0,    31,     1,     3,     0,    31,     1,
-     3,     0,    55,     1,     3,     0,    55,     1,     3,     0,
-    55,     1,     3,     0,    43,     1,     3,     0,    43,     1,
-     3,     0,    43,     1,     3,     0,    37,     1,     3,     0,
-    37,     1,     3,     0,    37,     1,     3,     0,    13,     1,
-     3,     0,    15,     1,     1,     1,     1,     1,     1,     1,
-     4,     7,     9,     6,     3,     6,     6,     9,     6,     9,
-     5,     8,     8,    11,     6,     9,     9,     9,     7,     8,
-    12,     6,     7,     7,    12,     7,     7,     9,    17,     8,
-     8,     7,     7,    11,     8,    12,     8,    14,    22,    20,
-     8,     8,     8,     7,     8,     5,    11,     5,     9,     1,
-     1,     1,     0,     2,     6,     6,     6,     6,     4,     6,
-     4,     6,     3,     5,     3,     3,     4,     4,     3,     7,
-     3,     7,     3,     2,     2,     6,     8,     8,    10,     1,
-     2,     1,     3,     4,     1,     8,    12,    14,     0,    12,
-     0,    16,     0,    18,     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,     0,    31,     1,     3,     0,    31,     1,     3,     0,
+    31,     1,     3,     0,    55,     1,     3,     0,    55,     1,
+     3,     0,    55,     1,     3,     0,    43,     1,     3,     0,
+    43,     1,     3,     0,    43,     1,     3,     0,    37,     1,
+     3,     0,    37,     1,     3,     0,    37,     1,     3,     0,
+    13,     1,     3,     0,    15,     1,     1,     1,     1,     1,
+     1,     1,     4,     7,     9,     6,     3,     6,     6,     9,
+     6,     9,     5,     8,     8,    11,     6,     9,     9,     9,
+     7,     8,    12,     6,     7,     7,     7,     9,     7,    17,
+     7,     7,    11,     8,    12,     8,     8,     8,    12,    14,
+    14,    22,    20,     8,     8,     8,     7,     8,     5,    11,
+     5,     9,     1,     1,     1,     0,     2,     6,     6,     6,
+     6,     4,     6,     4,     6,     3,     5,     3,     3,     4,
+     4,     3,     7,     3,     7,     3,     2,     2,     6,     8,
+     8,    10,     1,     2,     1,     3,     4,     1,     8,    12,
+    14,     0,    12,     0,    16,     0,    18,     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,     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,
-     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,     4,     1,     1,     1,     3,     4,     6,     7,     1,
-     1,     3,     3,     9,     7,     1,     5,     3,     6,     1,
-     3,     1,     6,     4,     4,     6,     6,     9
+     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,     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,     4,     1,     1,     1,     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,
-     0,     7,     9,     0,     2,     1,     3,     4,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,    11,    12,
-    14,    13,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     2,     1,     3,     4,     9,    11,     0,     8,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,    13,    14,
+    16,    15,     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,   290,
-     0,   295,     0,   292,     0,     0,     0,     0,     0,    54,
-    56,    55,    57,    58,    59,    60,    61,    62,    63,    68,
-    67,    64,    65,    66,     5,     0,     0,     0,    15,    16,
-    18,    17,    19,   427,   427,     0,   405,   409,   462,   204,
-   406,   407,   408,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   293,
+     0,   298,     0,   295,     0,     0,     0,     0,     0,    56,
+    58,    57,    59,    60,    61,    62,    63,    64,    65,    70,
+    69,    66,    67,    68,     0,     0,    17,    18,    20,    19,
+    21,   430,   430,     0,   408,   412,   465,   206,   409,   410,
+   411,     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,   205,   206,   207,
-   208,     0,     0,     0,   209,   210,     0,     0,     0,     0,
-     0,     0,     0,   343,     0,     0,   285,     0,     0,     0,
+     0,     0,     0,     0,     0,   207,   208,   209,   210,     0,
+     0,     0,   211,   212,     0,     0,     0,     0,     0,     0,
+     0,   346,     0,     0,   288,     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,   418,     0,     0,     0,
-     0,     0,     0,   263,     0,     0,   263,   336,   337,     0,
-     0,     0,     0,     0,     0,     0,   456,     0,     0,     0,
-     0,     0,   284,     0,   291,     0,   462,   263,     0,   263,
-     0,     6,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   421,     0,     0,     0,     0,     0,
+     0,   266,     0,     0,   266,   339,   340,     0,     0,     0,
+     0,     0,     0,     0,   459,     0,     0,     0,     0,     0,
+   287,     0,   294,     0,   465,   266,     0,   266,     0,     5,
      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,   412,
-     0,    73,     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,   415,     0,
+    75,     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,   409,   346,   345,
-   347,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   215,   281,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   279,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   409,     0,     0,
-     0,   443,   444,   445,   436,     0,   437,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   412,   349,   348,   350,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   217,
+   284,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   282,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   412,     0,     0,     0,
+   446,   447,   448,   439,     0,   440,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   420,   419,     0,     0,     0,     0,   263,   263,
-     0,     0,     0,     0,     0,     0,     0,   273,     0,     0,
-     0,     0,   283,     0,     0,     0,     0,     0,     0,     0,
-   263,     0,     0,     0,   293,     0,     0,   275,     0,   276,
+     0,     0,   423,   422,     0,     0,     0,     0,   266,   266,
+     0,     0,     0,     0,     0,     0,     0,   276,     0,     0,
+     0,     0,   286,     0,     0,     0,     0,     0,     0,     0,
+   266,     0,     0,     0,   296,     0,     0,   278,     0,   279,
+     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,   432,     0,     0,     0,     0,     0,   417,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   429,     0,     0,     0,     0,     0,   414,     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,   347,     0,
+     0,   453,   454,     0,     0,   206,     0,     0,     0,     0,
+     0,   213,     0,   364,   363,   361,   362,   357,   359,   358,
+   360,   352,   351,   353,   354,   355,   356,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   412,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   344,     0,     0,
-   450,   451,     0,     0,   204,     0,     0,     0,     0,     0,
-   211,     0,   361,   360,   358,   359,   354,   356,   355,   357,
-   349,   348,   350,   351,   352,   353,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   409,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   425,   424,   265,     0,   264,   263,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   272,   267,
+   338,     0,     0,   274,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   297,     0,   280,   281,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   422,   421,   262,     0,   261,   260,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   269,   264,   335,     0,
-     0,   271,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   294,     0,   277,   278,     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,   428,
-     0,     0,    21,     0,   410,   416,    73,     0,     0,     0,
+     0,   431,     0,     0,    23,     0,   413,   419,    75,     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,    74,    75,    76,    77,    78,    79,
+     0,     0,     0,     0,     0,     0,    76,    77,    78,    79,
     80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
     90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-   363,   384,   364,   385,   365,   386,   366,   387,   367,   388,
-   368,   389,   369,   390,   370,   391,   371,   392,   383,   404,
-   372,   393,     0,     0,   374,   395,   375,   396,   376,   397,
-   377,   398,   378,   399,   379,   400,     0,     0,     0,     0,
-     0,     0,     0,     0,   465,     0,     0,   464,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   221,     0,     0,
-     0,     0,   411,     0,    69,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   446,     0,     0,     0,     0,   438,
-   440,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   256,
-   258,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   100,   101,   366,   387,   367,   388,   368,   389,   369,   390,
+   370,   391,   371,   392,   372,   393,   373,   394,   374,   395,
+   386,   407,   375,   396,     0,     0,   377,   398,   378,   399,
+   379,   400,   380,   401,   381,   402,   382,   403,     0,     0,
+     0,     0,     0,     0,     0,     0,   468,     0,     0,   467,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   223,
+     0,     0,     0,     0,   414,     0,    71,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   449,     0,     0,     0,
+     0,   441,   443,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   274,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   259,   261,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   277,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   430,     0,   427,     0,
-   413,     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,    71,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   433,
+     0,   430,     0,   416,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   410,   214,   452,   453,     0,     0,     0,     0,
-     0,   216,   217,   219,     0,     0,   460,     0,   225,   362,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   442,   447,     0,   439,     0,   232,     0,     0,     0,     0,
-     0,   328,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   270,     0,
-     0,     0,     0,   334,   272,     0,     0,     0,     0,     0,
-   431,     0,   457,     0,     0,     0,   286,     0,     0,     0,
+     0,     0,    73,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   413,   216,   455,   456,     0,
+     0,     0,     0,     0,   218,   219,   221,     0,     0,   463,
+     0,   227,   365,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   445,   450,     0,   442,     0,   234,     0,
+     0,     0,     0,     0,     0,   331,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   273,     0,     0,     0,     0,   337,   275,     0,
+     0,     0,     0,     0,   434,     0,   460,     0,     0,     0,
+   289,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   338,   339,   340,   341,   342,     0,     0,     0,
-     0,     0,     0,     0,    20,     0,   415,   280,     0,     0,
+     0,     0,     0,     0,     0,     0,   341,   342,   343,   344,
+   345,     0,     0,     0,     0,     0,     0,     0,    22,     0,
+   418,   283,     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,   376,
+   397,   383,   404,   384,   405,   385,   406,     0,   470,   469,
+   466,     0,   206,     0,     0,     0,     0,   214,     0,     0,
+     0,   461,    72,   231,   237,     0,   239,     0,   235,     0,
+   236,   257,     0,     0,   444,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   373,   394,   380,   401,   381,
-   402,   382,   403,     0,   467,   466,   463,     0,   204,     0,
-     0,     0,     0,   212,     0,     0,     0,   458,    70,   229,
-   236,     0,   237,     0,   233,     0,   234,   254,     0,     0,
-   441,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   282,     0,     0,     0,     0,
-   263,     0,   299,     0,   308,     0,   317,     0,     0,     0,
-     0,     0,     0,   242,   243,     0,     0,     0,     0,     0,
+   285,     0,     0,     0,     0,   266,     0,   302,     0,   311,
+     0,   320,     0,     0,     0,     0,     0,     0,   241,   242,
      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,   427,   417,    72,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   430,   420,    74,     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,   222,     0,
-     0,   223,     0,   461,     0,   241,   252,   448,     0,     0,
-   332,   245,   247,     0,     0,     0,   331,   333,   253,   230,
-   240,   251,   255,     0,     0,     0,   426,     0,   425,     0,
-     0,   296,     0,     0,   305,     0,     0,   314,     0,   265,
-   266,   267,   268,     0,     0,   431,     0,   434,     0,     0,
-     0,     0,   455,     0,   288,   287,     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,   224,     0,     0,   225,     0,   464,     0,
+   244,   254,   451,     0,     0,   335,   247,   248,     0,     0,
+     0,     0,   334,   336,   256,   232,   246,   255,   258,     0,
+     0,     0,   429,     0,   428,     0,     0,   299,     0,     0,
+   308,     0,     0,   317,     0,   268,   269,   270,   271,     0,
+     0,   434,     0,   437,     0,     0,     0,     0,   458,     0,
+   291,   290,     0,     0,     0,     0,     0,    25,     0,    34,
+     0,    38,     0,    32,     0,     0,    37,     0,    42,    40,
+     0,     0,     0,     0,     0,     0,    49,     0,     0,     0,
+     0,     0,    54,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   213,   218,   220,     0,
-   226,     0,   238,   449,     0,     0,   330,   329,   227,   228,
-   263,     0,   259,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   433,     0,   432,     0,     0,     0,     0,     0,
-     0,     0,   431,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   215,   220,   222,     0,   228,     0,   238,   452,
+     0,     0,     0,   333,   332,   229,   230,   266,     0,   262,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   436,
+     0,   435,     0,     0,     0,     0,     0,     0,     0,   434,
      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,   468,
-     0,   459,     0,     0,     0,     0,   424,     0,     0,     0,
-     0,     0,     0,     0,     0,   323,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   435,     0,     0,   454,   289,
-     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,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   224,     0,     0,   257,     0,     0,   301,     0,   327,     0,
-     0,   324,   310,     0,     0,   319,     0,     0,     0,     0,
-     0,     0,   244,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   102,   106,   110,
+     0,     0,     0,     0,     0,     0,   471,     0,   462,     0,
+     0,     0,     0,     0,   427,     0,     0,     0,     0,     0,
+     0,     0,     0,   326,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   438,     0,     0,   457,   292,     0,     0,
+    39,     0,     0,     0,     0,    29,     0,    35,     0,    41,
+    30,    43,     0,    46,     0,    50,    51,     0,     0,    53,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   198,     0,     0,     0,   423,   297,     0,     0,     0,
-   300,   306,     0,     0,   309,   315,     0,     0,   318,   231,
-   235,     0,     0,   246,     0,     0,     0,     0,     0,    31,
-    34,    42,     0,    43,    50,    45,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   226,     0,
+     0,     0,   260,     0,     0,   304,     0,   330,     0,     0,
+   327,   313,     0,     0,   322,     0,     0,     0,     0,     0,
+     0,   243,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   104,   108,   112,     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,   303,     0,     0,   312,
-     0,   321,     0,     0,     0,     0,     0,     0,     0,     0,
+   200,     0,     0,     0,     0,   426,   300,     0,     0,     0,
+   303,   309,     0,     0,   312,   318,     0,     0,   321,   233,
+   245,     0,     0,   249,     0,     0,     0,     0,     0,    33,
+    36,    44,     0,    45,    52,    47,     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,   202,     0,   248,     0,
-   298,     0,     0,     0,   307,     0,     0,   316,     0,     0,
-     0,     0,     0,     0,    26,    29,     0,     0,     0,   100,
-     0,   104,     0,   108,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   306,     0,     0,
+   315,     0,   324,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   196,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   204,     0,   251,
+   250,     0,   301,     0,     0,     0,   310,     0,     0,   319,
+     0,     0,     0,     0,     0,     0,    28,    31,     0,     0,
+     0,   102,     0,   106,     0,   110,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   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,   302,     0,     0,   326,   311,
-     0,   320,     0,     0,     0,     0,     0,     0,    46,    22,
-   101,   103,   105,   107,   109,   111,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   197,   199,     0,
-   200,   239,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   114,   118,   122,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   304,   325,   313,   322,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   305,     0,     0,
+   329,   314,     0,   323,     0,     0,     0,     0,     0,     0,
+    48,    24,   103,   105,   107,   109,   111,   113,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   199,
+   201,     0,   202,   240,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   116,   120,   124,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   201,   203,     0,     0,     8,     0,
+     0,     0,     0,     0,     0,     0,   307,   328,   316,   325,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   250,     0,     0,     0,   112,     0,   116,
-     0,   120,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   203,   205,     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,   253,    10,     0,     0,     0,
+   114,     0,   118,     0,   122,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   249,     0,    24,
-   113,   115,   117,   119,   121,   123,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   126,   130,   134,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   252,     0,    26,   115,   117,   119,   121,   123,   125,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   128,   132,
+   136,     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,   124,     0,   128,     0,   132,     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,   126,     0,   130,     0,
+   134,     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,   125,   127,   129,   131,
-   133,   135,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   138,   142,
-   146,   150,   154,   158,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,    25,     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,   127,
+   129,   131,   133,   135,   137,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   136,     0,   140,     0,   144,
-     0,   148,     0,   152,     0,   156,     0,     0,     0,     0,
+     0,   140,   144,   148,   152,   156,   160,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,    27,     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,   137,   139,   141,   143,
-   145,   147,   149,   151,   153,   155,   157,   159,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   138,     0,
+   142,     0,   146,     0,   150,     0,   154,     0,   158,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   186,   190,   194,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   139,
+   141,   143,   145,   147,   149,   151,   153,   155,   157,   159,
+   161,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   188,   192,   196,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   184,     0,   188,     0,   192,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   185,   187,   189,   191,   193,   195,
-     0,     0,     0,   174,   178,   182,     0,     0,     0,     0,
+     0,     0,     0,     0,   186,     0,   190,     0,   194,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   172,     0,   176,     0,   180,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   173,
-   175,   177,   179,   181,   183,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   187,   189,   191,
+   193,   195,   197,     0,     0,     0,   176,   180,   184,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   162,   166,   170,     0,     0,     0,     0,
-     0,     0,     0,   160,     0,   164,     0,   168,     0,     0,
-     0,     0,     0,     0,   161,   163,   165,   167,   169,   171,
-     0,     0,     0
+     0,     0,     0,     0,     0,   174,     0,   178,     0,   182,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   175,   177,   179,   181,   183,   185,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   164,   168,   172,     0,
+     0,     0,     0,     0,     0,     0,   162,     0,   166,     0,
+   170,     0,     0,     0,     0,     0,     0,   163,   165,   167,
+   169,   171,   173,     0,     0,     0
 };
 
-static const short yydefgoto[] = {  2321,
-    87,     5,     6,    19,    20,    21,    22,     7,    70,    71,
-    72,   440,  1639,   655,  1548,  1641,   656,  1549,  1643,   657,
-  1550,  1857,   658,  1804,  1859,   659,  1805,  1861,   660,  1806,
-  1993,   661,  1955,  1995,   662,  1956,  1997,   663,  1957,  2105,
-   664,  2075,  2107,   665,  2076,  2109,   666,  2077,  2111,   667,
-  2078,  2113,   668,  2079,  2115,   669,  2080,  2303,   670,  2297,
-  2305,   671,  2298,  2307,   672,  2299,  2252,   673,  2240,  2254,
-   674,  2241,  2256,   675,  2242,  2201,   676,  2183,  2203,   677,
-  2184,  2205,   678,  2185,  1666,   679,  1572,  1760,   680,  1668,
-   141,   250,    73,   568,   342,   554,   555,   343,    77,    78,
-    79,    80,    81,   344,  1203,  1518,  1622,  1206,  1523,  1626,
-  1209,  1527,  1629,  1385,  1386,    83,    84,   988,   345,   144,
-   363,   177,   245,   433,  1099,  1217,  1218,   347,   493,   199,
-   742,   898,   145
+static const short yydefgoto[] = {  2334,
+   212,     2,     9,     3,    19,    20,    21,    22,     4,    70,
+    71,    72,   441,  1651,   657,  1558,  1653,   658,  1559,  1655,
+   659,  1560,  1870,   660,  1816,  1872,   661,  1817,  1874,   662,
+  1818,  2006,   663,  1968,  2008,   664,  1969,  2010,   665,  1970,
+  2118,   666,  2088,  2120,   667,  2089,  2122,   668,  2090,  2124,
+   669,  2091,  2126,   670,  2092,  2128,   671,  2093,  2316,   672,
+  2310,  2318,   673,  2311,  2320,   674,  2312,  2265,   675,  2253,
+  2267,   676,  2254,  2269,   677,  2255,  2214,   678,  2196,  2216,
+   679,  2197,  2218,   680,  2198,  1678,   681,  1582,  1772,   682,
+  1680,   139,   249,    73,   570,   341,   556,   557,   342,    77,
+    78,    79,    80,    81,   343,  1209,  1528,  1634,  1212,  1533,
+  1638,  1215,  1537,  1641,  1393,  1394,    83,    84,   992,   344,
+   142,   363,   175,   244,   434,  1104,  1223,  1224,   346,   494,
+   197,   744,   901,   143
 };
 
-static const short yypact[] = {  2832,
-    65,-32768,-32768,  -123,-32768,   424,  3114,-32768,    21,    47,
-    82,   110,   139,   156,   168,   -49,    32,    76,-32768,-32768,
--32768,-32768,  2290,    88,   205,   108,   118,   149,   -44,   103,
-   172,   175,   262,   184,   282,   351,   357,   417,   575,   352,
-   470,   296,   302,   -80,   -80,   309,   384,     6,   475,     8,
-   512,   518,    63,   521,   331,   362,   -14,    10,    19,-32768,
-   373,-32768,   565,-32768,   545,   571,   532,    15,    22,-32768,
+static const short yypact[] = {  2959,
+    66,   388,   459,  3225,-32768,-32768,-32768,   -91,-32768,    99,
+   135,   147,   173,   181,   198,   -71,    31,    90,-32768,-32768,
+-32768,-32768,  2301,   107,   214,   151,   171,   209,   -11,   100,
+   213,   234,   298,   263,   353,   428,   439,   449,   514,   463,
+   241,   320,   326,   -76,   -76,   349,   478,     3,   546,     5,
+   559,   565,   240,   592,   421,   424,   -13,     8,    17,-32768,
+   466,-32768,   606,-32768,   652,   653,   633,    15,    23,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,   579,    21,  2942,-32768,-32768,
--32768,-32768,-32768,   393,   393,   608,-32768,  -132,    13,-32768,
--32768,-32768,-32768,   -99,   -60,    -8,   162,   221,   300,   349,
-   358,   403,   404,   469,   479,   490,   491,   494,   510,   513,
-   516,   517,   523,   526,   462,   482,   495,-32768,-32768,-32768,
--32768,  2324,  2324,  2324,-32768,-32768,  2324,   972,    60,   697,
-  2324,   661,   671,-32768,   698,   714,-32768,  2324,  2324,  2324,
-   531,  2324,   534,  2324,  2324,   611,  2324,   553,   566,   572,
-   587,   611,   558,   568,   591,   598,   599,   609,   617,   748,
-   -80,   -80,   -80,  2324,  2324,   -64,-32768,   167,   -80,   600,
-   616,   648,   672,-32768,   611,    25,-32768,-32768,-32768,   611,
-   611,   856,  2324,  2324,   -84,  2324,   673,  2324,   676,   790,
-  2324,  2324,-32768,   906,-32768,   732,-32768,-32768,   929,-32768,
-   937,-32768,    21,   783,   812,   814,   815,   816,   817,   818,
-   819,   822,   823,   824,   825,   827,   828,   834,   844,   851,
-   852,   854,   855,   861,   862,   863,   864,   865,   866,   867,
-   868,   869,   870,   969,   871,   849,   872,  2324,  1064,-32768,
-   -80,-32768,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,
-  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,
-  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,
-  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,
-  2324,  2324,  2324,  2324,    38,    48,    48,   209,   875,   875,
-   875, 11052,  1065,  1828,   850,   307,   877,  1069,   881,   699,
--32768,-32768,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,
-  2324,  2324,  2324,  2324,  2324,  2324,  2324,-32768,  -135, 11075,
- 11098, 11121,  2324, 11144,  2324, 11167, 11190,   222,   878,  1503,
-  1828,-32768,-32768,-32768,    17,  1076,-32768, 11213,  2324,  2324,
-  2324,  2324,  1078,  2324,  2324,  2324,  2324,  2324,  2324,  2324,
-   888,   -95,-32768,-32768,  3538,  3560,   -80,   -80,   601,   601,
-   -91,  2324,  2324,  2324,  2324,  2545,   405,-32768,  2324,  2579,
-  1080,  1083,-32768, 11236, 11259,   985,  2324, 11282,   986,  3582,
--32768,   887,   468, 11305,-32768,  2324,  2614,-32768,  2648,-32768,
-   925,  1090,  1091,  1092,  1093,  1094,  1095,  1099,  1100,  1101,
-  1102,  1104,  1105,  1106,  1108,  1109,  1110,  1142,  1155,  1156,
-  1158,  1160,  1161,  1162,  1012,  1165,  1166,  1168,  1172,  1175,
-  1174,-32768,   -70,  1180,  1196,  1225,  1906,   272,   193,  2927,
- 11328, 10402, 11351, 10427, 11374, 10452, 11397, 10477, 11420, 10502,
- 11443, 10527, 11466, 10552, 11489, 10577, 11512, 10602, 11535, 10627,
- 11558, 10652,  3604,  3626, 11581, 10677, 11604, 10702, 11627, 10727,
- 11650, 10752, 11673, 10777, 11696, 10802,  3648,  3670,  3692,  3714,
-  3736,  3758,   525,    86,  1026,  1033,  2324,-32768,   611,  2414,
-    17,-32768,   524,   169,    48,  2324,  1226,  1253,    14,  1063,
--32768,  1718,   718,   249,   554,   554,   422,   422,   422,   422,
-   333,   333,   875,   875,   875,   875,  1268,  1828,  1273,  1275,
-  1277, 11719,  1279, 11742,  1282,  1283,  1194,  2324,   297,  1828,
-   529,  2324,  2324,  1284,  2731, 11765, 11788, 11811,  2324,  3073,
-  3107, 11834, 11857, 11880, 11903, 11926,  1097,   -80,  2324,  2324,
--32768,-32768,-32768,  1087,  3147,-32768,  1088,  2324,  3780,  3802,
-  3824, 10827,   -40,   -39,   -20,   -12,-32768,-32768,-32768,  2324,
- 10852,-32768,  1096,  1098,  1288,  1289,  1107, 11949,  1294,  1111,
-  2324,  2751,  2324,  2324,-32768, 11972,-32768,-32768,  1136,  1103,
-  1112,  1114,  1115,  1117,  1144,  1145,  1146,  1148,  1149,  1151,
-  1157,  1159,  1179,  1181,  1184,  1185,  1186,  1187,  1190,  1192,
-  1197,  1198,  1199,  1200,  1201,  1202,  1203,  1204,  1205,-32768,
-  1302,  1116,-32768,  1206,    85,-32768,-32768,  1113,  1164,  1167,
-  1195,  1215,  1216,  1217,  1218,  1220,  1221,  1222,  1223,  1228,
-  1230,  1232,  1233,  1234,  1235,  1236,  1237,  1239,  1240,  1241,
-  1243,  1245,  1248,  1303,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,    21,  3089,-32768,-32768,-32768,-32768,
+-32768,   484,   484,   684,-32768,  -103,     9,-32768,-32768,-32768,
+-32768,  -144,   -77,   124,   175,   185,   231,   280,   362,   384,
+   408,   414,   417,   420,   427,   455,   456,   477,   480,   487,
+   488,   491,   494,   506,   520,-32768,-32768,-32768,-32768,  1720,
+  1720,  1720,-32768,-32768,  1720,   619,    52,   707,  1720,   710,
+  1008,-32768,   730,   736,-32768,  1720,  1720,  1720,   568,  1720,
+   574,  1720,  1720,   423,  1720,   550,   575,   589,  -152,   423,
+   551,   583,   594,   617,   620,   625,   658,   799,   -76,   -76,
+   -76,  1720,  1720,   -52,-32768,   120,   -76,   600,   661,   673,
+   675,-32768,   423,    16,-32768,-32768,-32768,   423,   423,   877,
+  1720,  1720,   -61,  1720,   711,  1720,   699,   807,  1720,  1720,
+-32768,   922,-32768,   732,-32768,-32768,   924,-32768,   925,-32768,
+   929,    21,   737,   741,   742,   744,   745,   751,   761,   762,
+   763,   764,   765,   769,   770,   771,   772,   773,   774,   775,
+   776,   777,   778,   779,   782,   783,   784,   810,   811,   812,
+   813,   814,   959,   809,   815,   816,  1720,  1011,-32768,   -76,
+-32768,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,
+  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,
+  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,
+  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,
+  1720,  1720,  1720,    69,    58,    58,   121,   820,   820,   820,
+  1324,  1010,  1841,   856,   340,   817,  1013,   824,  1087,-32768,
+-32768,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,
+  1720,  1720,  1720,  1720,  1720,  1720,-32768,   -47, 11121, 11144,
+ 11167,  1720, 11190,  1720, 11213, 11236,   270,   821,  1229,  1841,
+-32768,-32768,-32768,   482,  1017,-32768, 11259,  1720,  1720,  1720,
+  1720,  1720,  1019,  1720,  1720,  1720,  1720,  1720,  1720,  1720,
+   830,  -102,-32768,-32768,  1476,  3607,   -76,   -76,   486,   486,
+   -49,  1720,  1720,  1720,  1720,  2628,   460,-32768,  1720,  2650,
+  1022,  1023,-32768, 11282, 11305,   927,  1720, 11328,   931,  3629,
+-32768,   849,  1380, 11351,-32768,  1720,  2693,-32768,  2773,-32768,
+-32768,    21,  1049,  1050,  1058,  1059,  1060,  1061,  1062,  1063,
+  1064,  1065,  1066,  1067,  1068,  1071,  1072,  1073,  1074,  1075,
+  1076,  1077,  1079,  1080,  1083,   934,  1086,  1089,  1090,  1091,
+  1094,  1093,-32768,   -15,  1095,  1096,  1098,  2955,   119,   159,
+  3085, 11374, 10471, 11397, 10496, 11420, 10521, 11443, 10546, 11466,
+ 10571, 11489, 10596, 11512, 10621, 11535, 10646, 11558, 10671, 11581,
+ 10696, 11604, 10721,  3651,  3673, 11627, 10746, 11650, 10771, 11673,
+ 10796, 11696, 10821, 11719, 10846, 11742, 10871,  3695,  3717,  3739,
+  3761,  3783,  3805,   386,   157,   889,   903,  1720,-32768,   423,
+  2335,   482,-32768,   489,   168,    58,  1720,  1099,  1100,    14,
+   909,-32768,  2423,   560,   229,   612,   612,   203,   203,   203,
+   203,   233,   233,   820,   820,   820,   820,  1104,  1841,  1105,
+  1107,  1108, 11765,  1109, 11788,  1111,  1112,   974,  1720,   279,
+  1841,   490,  1720,  1720,  1113,  2592, 11811, 11834, 11857,  2717,
+  1720,  2768,  3123, 11880, 11903, 11926, 11949, 11972,   910,   -76,
+  1720,  1720,-32768,-32768,-32768,   942,  2992,-32768,   943,  1720,
+  3827,  3849,  3871, 10896,  -129,   -42,   -32,   -30,-32768,-32768,
+-32768,  1720, 10921,-32768,   945,   946,  1145,  1146,   957, 11995,
+  1148,   955,  1720,  2809,  1720,  1720,-32768, 12018,-32768,-32768,
+   989,   956,   960,   961,   962,   964,   965,   966,   967,   969,
+   970,   972,   976,   977,   979,   980,   986,   997,   998,  1003,
+  1031,  1032,  1033,  1034,  1078,  1084,  1088,  1097,  1101,  1103,
+  1110,-32768,  1153,  1070,-32768,  1114,    83,-32768,-32768,  1081,
+  1092,  1102,  1106,  1115,  1117,  1118,  1119,  1122,  1123,  1124,
+  1125,  1127,  1128,  1130,  1157,  1158,  1159,  1160,  1162,  1163,
+  1165,  1169,  1170,  1177,  1187,  1171,-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,-32768,-32768,
--32768,-32768,  2324,  2324,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,  2324,  2324,  2324,  2324,
-  2324,  2324,  2324,  1304,-32768,  1828,    48,-32768, 10877,  1307,
-  1828,  1163,    81,  2324,  1352,  1353,   762,-32768,  1376,  1252,
-    10,  1391,-32768,  2324,-32768,   127,   -80,   611,   611,  1392,
-   611,  1415,   611,   611,-32768,  1828,  3131,  1224,   543,-32768,
-  1793,   777,  1219,  1454,  1455,  1456,  1457,   354,  1458,  1460,
-  1482,  1484,  1485,  1486,  1487,  1491,   171,  3846,  3868,-32768,
--32768,  3161,   -80,   -80,   -80,  1490,  1828,  1828,  1828,  1828,
-   966,  1492,  2324,  2324,   611,   611,  2324,  1493,   611,  1495,
-  3890,-32768,  2352,   409,  1494,  1332,  1499,  2324,  2324,   -80,
-  1501,  1502,  1320,  1506,  1507,   611,   611,  1508,   -80,  1535,
-  1536,   611,   611,  1537,  1538,  1563,  1564,  1565,   611,   559,
-   611,  1590,  1589,  1591,  1594,  1595,-32768,  1593,   393,  1598,
--32768,  1599,  2964,  2324,  2324,  2324,  2324,  2324,  2324,  2324,
-  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,
-  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,-32768,
- 11995, 10902, 12018, 10927, 12041, 10952, 12064, 10977, 11002,  1403,
-   142,  1406,   154,-32768,    17,-32768,   148,   379,  1405,  1600,
-  1004,-32768,-32768,-32768,    10,  2324,-32768,   544,-32768, 12915,
-  1618,    34,    30,  1619,   611,  1620,   611,  1621,  1622,   548,
--32768,-32768,  1828,-32768,  2324,-32768,  2324,   611,   611,   611,
-  1434,-32768,   427,   611,   611,   611,   611,   611,   611,   611,
-   496,  2324,  2324,  2324,  1426,  -127,  -106,  -100,-32768,   555,
-   556,   570,   573,-32768,-32768,  3912,  3934,  1626,  1627, 12087,
-   188,  1529,-32768,  2324,  2324,  2324,-32768,  1431,    21,  1435,
-  3956,  3978,  -121,  1436,  1438,  1437,  1443,  1441,  1447,  1444,
-  1446,   -51,  1448,  1459,  1461,  1449,  1450,  1451,  1462,  1464,
-  1489,  1463,-32768,-32768,-32768,-32768,-32768,  1496,  1498,  1500,
-  1505,  1509,  1465,  1510,-32768,  1511,   272,-32768,  1640,  4000,
-  4022,  4044,  4066,  4088,  4110,  4132,  4154,  4176,  4198,  4220,
-  4242,  4264,  4286,  4308,  4330,  4352,  4374,  4396,  4418,  4440,
-  4462,  4484,  4506,  4528,  4550,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,  1497,-32768,-32768,-32768,   611,    48,  2324,
-  1644,  1651,    14,-32768,  1652, 11027,    10,-32768,-32768,-32768,
--32768,   -80,-32768,  1654,-32768,  1690,-32768,-32768,  1504,   574,
- 12915,  4572,  1691,  1696,  1700,  2324,  2324,  2324,  1703,  1704,
-  1705,  1709,  1710,  1711,  1712,-32768,  2380,  3185, 12110,  1948,
-   601,   -80,  1715,   -80,  1716,   -80,  1717,  1721,  1722,  1723,
-  1725,  2324,  2324,-32768,-32768,  1726,   611,   611,  1629,   611,
-  2317,   264, 12133,  2324,    21,  1729,  2324,   611,  1730,  1735,
-  1733,  1552,  1736,   559,  1737,  1738,  2324,  1740,  1744,  1742,
-  1743,  1747,   559,  2324,  2324,  2324,   611,  1745,  1767,   559,
-  2324,  1768,  1775,  1782,  2324,   393,-32768,-32768,  2324,  2324,
-  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,
-  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,
-  2324,  2324,  2324,  2324,  1720,  1783,  1784,  1082,-32768,  1785,
-  1788,-32768,  1596,-32768,    96,-32768,-32768,-32768,  1602,  2324,
--32768,-32768,-32768,  4594,  1189,  1270,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,  1433,  1789,  1587,-32768,  2324,-32768,  1601,
-   197,-32768,  1592,   201,-32768,  1603,   203,-32768,  1604,-32768,
--32768,-32768,-32768,  4616,  4638,   188,   265,-32768,   577,  1630,
-  1697,  2324,-32768,  2324,-32768,-32768,  4660,    21,  1605,  4682,
-  1632,-32768,  1633,-32768,  1659,-32768,  1607,-32768,  1661, 12156,
--32768,  1682,-32768,-32768,  1635,  1688, 12179,  4704, 12202,  1706,
--32768,  1695,  1701,  4726,  1707,  1713,-32768,  4748,  1728,  4770,
-  4792,  4814,  4836,  4858,  4880,  4902,  4924,  4946,  4968,  4990,
-  5012,  5034,  5056,  5078,  5100,  5122,  5144,  5166,  5188,  5210,
-  5232,  5254,  5276,  5298,  5320,  1714,-32768,-32768,-32768,    10,
--32768,  1693,-32768,-32768,  5342,  2324,-32768,-32768,-32768,-32768,
-   601,  2550,-32768,  1533,   406,  1533,   406,  1533,   406,  2324,
-  2324,  1808,-32768,   611,-32768,   611,  2324,  3215,  3250,   611,
-  1665,  1792,   188,   559,  1912,  2324,  1926,   559,  1927,  1931,
-  1929,  1930,  1932,  2324,  1933,   611,  1934,  1936,  2324,  1940,
-  1938,  2324,  1941,  2324,  2324,  2324,  2324,  2324,  2324,  2324,
-  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,
-  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,-32768,
-  1939,-32768,  1942, 12225,  1732,  2324,-32768,  1533,  1533,  2324,
-  3274,   227,  1943,  1746,   -36,-32768,  3298,   275,   -33,  3322,
-   284,   -25,  3346,  3370,  1770,-32768,  1781,  1597,-32768,-32768,
-  1780,    21,-32768,  1787,  1790,  1794,  5364,-32768,  1750,-32768,
-  1797,-32768,-32768,-32768, 12248,-32768,  1810,-32768,-32768, 12271,
-  1818,-32768, 12294,  1814, 12317, 12340, 12363,  5386,  5408,  5430,
-  5452,  5474,  5496,  5518,  5540,  5562,  5584,  5606,  5628,  5650,
-  5672,  5694,  5716,  5738,  5760,  5782,  5804,  5826, 12386,  5848,
--32768,  1815,   611,-32768,  3394,  2271,  1980,  2324,-32768,   611,
-  1981,-32768,  1982,  2324,  1985,  2013,  2324,  2015,  2016,  2017,
-   611,   611,-32768,  2018,    21,   559,   559,   559,   559,  2020,
-  2021,  2022,   559,  2023,  2025,  2026,  2028,-32768,-32768,-32768,
-  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,
-  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,
-  2324,-32768,  2324,  2029,   611,-32768,-32768,  1831,  3418,  1833,
--32768,-32768,  1834,  3442,-32768,-32768,  1835,  3466,-32768,-32768,
--32768,  1837,  1832,-32768,    21,  1838,  1848,  1854,  1855,-32768,
--32768,-32768,  1851,-32768,-32768,-32768,  1852,  1853,  1856,  1857,
-  5870,  5892,  5914,  5936,  5958,  5980,  6002,  6024,  6046,  6068,
-  6090,  6112,  6134,  6156,  6178,  6200,  6222,  6244,  6266,  6288,
-  6310,  1858, 12409,  1860,  2050,   406,  2052,   611,   406,  2053,
-   406,  2058,   611,  1963,  1901,   559,   559,  2081,  2091,   559,
-  2093,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,
-  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,
-  2324,  2324,  2324,  2324,  2324,    48,-32768,  2094,-32768,     4,
--32768,  1896,   584,    23,-32768,  1897,    72,-32768,  1900,  1903,
-  1908,    21,  1907,  1911,-32768,-32768,  1944,  1945,   588, 12915,
-   589, 12915,   596, 12915,  6332,  6354,  6376,  6398,  6420,  6442,
-  6464,  6486,  6508,  6530,  6552,  6574,  6596,  6618,  6640,  6662,
-  6684,  6706,  6728,  6750,  6772,   597,-32768,  1925,  1935,  2133,
-   406,   611,  2135,  2146,   406,  2148,   406,  2054,  2324,    21,
-   559,   611,  2149,  2151,  2324,  2152,  2324,  2153,  2324,  2154,
-  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,
-  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,
-  2324,    48,  2155,    48,  2156,-32768,    75,  1967,-32768,-32768,
-    83,-32768,   111,  1969,  6794,    21,  1971,  1972,-32768,-32768,
- 12915,-32768, 12915,-32768, 12915,-32768, 12432, 12455, 12478,  6816,
-  6838,  6860,  6882,  6904,  6926,  6948,  6970,  6992,  7014,  7036,
-  7058,  7080,  7102,  7124,  7146,  7168,  7190,-32768,-32768,   602,
--32768,-32768,  2170,  2171,  2172,  2173,  2324,  2324,  2010,   559,
-   611,-32768,-32768,-32768,  2324,  2324,  2324,  2324,  2324,  2324,
-  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,
-  2324,  2324,    48,  2175,-32768,-32768,-32768,-32768,  7212,  3490,
-  2011,  1988,  1990,  1979,  1991,  1992,  7234,  7256,  7278,  7300,
-  7322,  7344,  7366,  7388,  7410,  7432,  7454,  7476,  7498,  7520,
-  7542,  7564,  7586,  7608,-32768,-32768,  2324,  2191,-32768,   611,
-   559,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,
-  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,
-  2324,  2324,  3514,-32768,  1995,  2001,   606, 12915,   607, 12915,
-   613, 12915,  7630,  7652,  7674,  7696,  7718,  7740,  7762,  7784,
-  7806,  7828,  7850,  7872,  7894,  7916,  7938,  7960,  7982,  8004,
-  2196,   611,  2198,  2324,  2201,  2324,  2205,  2324,  2206,  2324,
-  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,
-  2324,  2324,  2324,  2324,  2324,  2324,  2324,-32768,  2012,-32768,
- 12915,-32768, 12915,-32768, 12915,-32768, 12501, 12524, 12547,  8026,
-  8048,  8070,  8092,  8114,  8136,  8158,  8180,  8202,  8224,  8246,
-  8268,  8290,  8312,  8334,   611,-32768,-32768,-32768,  2324,  2324,
-  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,
-  2324,  2324,  2324,  2014,  2009,  2024,  2027,  8356,  8378,  8400,
-  8422,  8444,  8466,  8488,  8510,  8532,  8554,  8576,  8598,  8620,
-  8642,  8664,   611,  2324,  2324,  2324,  2324,  2324,  2324,  2324,
-  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,
-  2324,  2030,   614, 12915,   660, 12915,   663, 12915,  8686,  8708,
-  8730,  8752,  8774,  8796,  8818,  8840,  8862,  8884,  8906,  8928,
-  8950,  8972,  8994,   559,  2324,  2208,  2324,  2210,  2324,  2212,
-  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,
-  2324,  2324,  2324,  2324,  2324,  2031, 12915,-32768, 12915,-32768,
- 12915,-32768, 12570, 12593, 12616, 12639, 12662, 12685,  9016,  9038,
-  9060,  9082,  9104,  9126,  9148,  9170,  9192,  2213,-32768,-32768,
--32768,-32768,-32768,-32768,  2324,  2324,  2324,  2324,  2324,  2324,
-  2324,  2324,  2324,-32768,  2035,  2037,  2039,  2040,  2041,  2042,
-  9214,  9236,  9258,  9280,  9302,  9324,  9346,  9368,  9390,  2324,
-  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,  2324,
-  2324,  2324,  2324,  2324,   667, 12915,   688, 12915,   712, 12915,
-   713, 12915,   716, 12915,   717, 12915,  9412,  9434,  9456,  9478,
-  9500,  9522,  9544,  9566,  9588,  2324,  2220,  2324,  2221,  2324,
-  2224,  2324,  2226,  2324,  2228,  2324,  2243,  2324,  2324,  2324,
-  2324,  2324,  2324,  2324,  2324,  2324, 12915,-32768, 12915,-32768,
- 12915,-32768, 12915,-32768, 12915,-32768, 12915,-32768,  9610,  9632,
-  9654,  9676,  9698,  9720, 12708, 12731, 12754,  2324,  2324,  2324,
-  2324,  2324,  2324,-32768,-32768,-32768,  9742,  9764,  9786,  9808,
-  9830,  9852,  2046,  2048,  2059,  2324,  2324,  2324,  2324,  2324,
-  2324,  2324,  2324,  2324,  9874,  9896,  9918,  9940,  9962,  9984,
-   720, 12915,   721, 12915,   725, 12915,  2324,  2324,  2324,  2324,
-  2324,  2324,  2324,  2250,  2324,  2251,  2324,  2252, 10006, 10028,
- 10050, 12777, 12800, 12823, 12915,-32768, 12915,-32768, 12915,-32768,
-  2324,  2324,  2324,-32768,-32768,-32768, 10072, 10094, 10116,  2060,
-  2066,  2067,  2324,  2324,  2324,  2324,  2324,  2324, 10138, 10160,
- 10182,   731, 12915,   765, 12915,   766, 12915,  2324,  2324,  2324,
-  2324,  2256,  2324,  2266,  2324,  2267, 10204, 10226, 10248, 12915,
--32768, 12915,-32768, 12915,-32768,  2324,  2324,  2324, 10270, 10292,
- 10314,  2324,  2324,  2324, 10336, 10358, 10380,  2324,  2324,  2324,
- 12846, 12869, 12892,-32768,-32768,-32768,  2072,  2076,  2078,  2324,
-  2324,  2324,   774, 12915,   802, 12915,   803, 12915,  2324,  2278,
-  2324,  2279,  2324,  2281, 12915,-32768, 12915,-32768, 12915,-32768,
-  2289,  2291,-32768
+-32768,-32768,-32768,-32768,  1720,  1720,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1720,  1720,
+  1720,  1720,  1720,  1720,  1720,  1258,-32768,  1841,    58,-32768,
+ 10946,  1287,  1841,  1190,    75,  1720,  1290,  1291,  1193,-32768,
+  1295,  1188,     8,  1292,-32768,  1720,-32768,   300,   -76,   423,
+   423,  1301,   423,  1304,   423,   423,-32768,  1841,  3176,  1199,
+   501,-32768,  2454,  1279,  1189,  1385,  1387,  1388,  1390,  1391,
+   674,  1393,  1395,  1397,  1398,  1399,  1400,  1401,  1405,   -43,
+  3893,  3915,-32768,-32768,  3200,   -76,   -76,   -76,  1404,  1841,
+  1841,  1841,  1841,  1441,  1406,  1720,  1720,   423,   423,  1720,
+  1407,   423,  1409,  3937,-32768,  2469,   767,  1410,  1242,  1415,
+  1720,  1720,   -76,  1417,  1419,  1235,  1421,  1422,   423,   423,
+  1424,   -76,  1425,  1426,   423,   423,  1427,  1429,  1431,  1432,
+  1433,   423,   415,   423,  1434,  1435,  1436,  1439,  1440,-32768,
+  1442,   484,  1445,-32768,  1446,  3111,  1720,  1720,  1720,  1720,
+  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,
+  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,
+  1720,  1720,-32768, 12041, 10971, 12064, 10996, 12087, 11021, 12110,
+ 11046, 11071,  1240,   306,  1241,   301,-32768,   482,-32768,    20,
+   350,  1244,  1444,  1609,-32768,-32768,-32768,     8,  1720,-32768,
+   504,-32768,  2529,  1448,    19,    37,  1454,   423,  1464,   423,
+  1465,  1466,   509,-32768,-32768,  1841,-32768,  1720,-32768,  1720,
+   423,   423,   423,  1249,  1276,-32768,   444,   423,   423,   423,
+   423,   423,   423,   423,   529,  1720,  1720,  1720,  1270,  -116,
+  -106,   -72,-32768,   516,   519,   522,   523,-32768,-32768,  3959,
+  3981,  1470,  1492, 12133,    -8,  1411,-32768,  1720,  1720,  1720,
+-32768,  1313,  1340,  1318,  4003,  4025,     4,  1320,  1350,  1346,
+  1352,  1348,  1354,  1351,  1368,   167,  1369,  1355,  1357,  1370,
+  1371,  1372,  1374,  1375,  1376,  1412,-32768,-32768,-32768,-32768,
+-32768,  1402,  1408,  1430,  1437,  1438,  1414,  1443,-32768,  1467,
+   119,-32768,  1601,  4047,  4069,  4091,  4113,  4135,  4157,  4179,
+  4201,  4223,  4245,  4267,  4289,  4311,  4333,  4355,  4377,  4399,
+  4421,  4443,  4465,  4487,  4509,  4531,  4553,  4575,  4597,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1413,-32768,-32768,
+-32768,   423,    58,  1720,  1602,  1605,    14,-32768,  1607, 11096,
+     8,-32768,-32768,-32768,-32768,   -76,-32768,  1626,-32768,  1628,
+-32768,-32768,  1447,   527,  2529,  4619,  1629,  1630,  1632,  1720,
+  1720,  1720,  1720,  1633,  1636,  1637,  1638,  1642,  1643,  1651,
+-32768,  2394,  3235, 12156,   702,   486,   -76,  1661,   -76,  1663,
+   -76,  1665,  1667,  1669,  1671,  1698,  1720,  1720,-32768,-32768,
+  1699,   423,   423,  1603,   423,  1961,   390, 12179,  1720,    21,
+  1706,  1720,   423,  1704,  1708,  1707,  1526,  1709,   415,  1710,
+  1715,  1720,  1714,  1718,  1716,  1719,  1723,   415,  1720,  1720,
+  1720,   423,  1721,  1725,   415,  1720,  1750,  1751,  1749,  1720,
+   484,-32768,-32768,  1720,  1720,  1720,  1720,  1720,  1720,  1720,
+  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,
+  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1754,
+  1753,  1755,  1806,-32768,  1756,  1776,-32768,  1559,-32768,    24,
+-32768,-32768,-32768,  1562,  1720,-32768,-32768,-32768,  4641,  4663,
+  1919,  2256,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  2271,
+  1777,  1586,-32768,  1720,-32768,  1595,   -40,-32768,  1597,    85,
+-32768,  1598,   172,-32768,  1599,-32768,-32768,-32768,-32768,  4685,
+  4707,    -8,   328,-32768,   528,  1600,  1705,  1720,-32768,  1720,
+-32768,-32768,  4729,    21,  1608,  4751,  1606,-32768,  1610,-32768,
+  1611,-32768,  1612,-32768,  1614, 12202,-32768,  1615,-32768,-32768,
+  1613,  1617, 12225,  4773, 12248,  1616,-32768,  1622,  1644,  4795,
+  1640,  1648,-32768,  4817,  1645,  4839,  4861,  4883,  4905,  4927,
+  4949,  4971,  4993,  5015,  5037,  5059,  5081,  5103,  5125,  5147,
+  5169,  5191,  5213,  5235,  5257,  5279,  5301,  5323,  5345,  5367,
+  5389,  1649,-32768,-32768,-32768,     8,-32768,  1701,-32768,-32768,
+  5411,  1720,  1720,-32768,-32768,-32768,-32768,   486,  2330,-32768,
+  1515,    29,  1515,    29,  1515,    29,  1720,  1720,  1744,-32768,
+   423,-32768,   423,  1720,  3267,  3291,   423,    21,  1869,    -8,
+   415,  1874,  1720,  1892,   415,  1893,  1905,  1903,  1904,  1907,
+  1720,  1908,   423,  1909,  1910,  1720,  1915,  1913,  1720,  1906,
+  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,
+  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,
+  1720,  1720,  1720,  1720,  1720,  1720,-32768,  1914,-32768,  1916,
+ 12271, 12294,  1722,  1720,-32768,  1515,  1515,  1720,  3315,   194,
+  1917,  1724,   -35,-32768,  3339,   199,   -27,  3363,   201,   -25,
+  3387,  3411,  1740,-32768,  1742,  2362,-32768,-32768,  1741,  1759,
+-32768,  1745,  1746,  1747,  5433,-32768,  1728,-32768,  1757,-32768,
+-32768,-32768, 12317,-32768,  1748,-32768,-32768, 12340,  1758,-32768,
+ 12363,  1760, 12386, 12409, 12432,  5455,  5477,  5499,  5521,  5543,
+  5565,  5587,  5609,  5631,  5653,  5675,  5697,  5719,  5741,  5763,
+  5785,  5807,  5829,  5851,  5873,  5895, 12455,  5917,-32768,  1784,
+   423,   423,-32768,  3435,  3579,  1941,  1720,-32768,   423,  1947,
+-32768,  1948,  1720,  1951,  1952,  1720,  1953,  1954,  1955,   423,
+   423,-32768,  1956,    21,   415,   415,   415,   415,  1991,  1992,
+  1993,   415,  1994,  1995,  1997,  1999,-32768,-32768,-32768,  1720,
+  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,
+  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,
+-32768,  1720,  2001,   423,   423,-32768,-32768,  1804,  3459,  1807,
+-32768,-32768,  1822,  3483,-32768,-32768,  1825,  3507,-32768,-32768,
+-32768,  1827,  1826,-32768,    21,  1829,  1831,  1837,  1838,-32768,
+-32768,-32768,  1834,-32768,-32768,-32768,  1836,  1840,  1842,  1843,
+  5939,  5961,  5983,  6005,  6027,  6049,  6071,  6093,  6115,  6137,
+  6159,  6181,  6203,  6225,  6247,  6269,  6291,  6313,  6335,  6357,
+  6379,  1844, 12478,  1839,  2034,  2035,    29,  2039,   423,    29,
+  2043,    29,  2044,   423,  1949,    21,   415,   415,  2046,  2047,
+   415,  2049,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,
+  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,
+  1720,  1720,  1720,  1720,  1720,  1720,    58,-32768,  2059,-32768,
+-32768,    -6,-32768,  1861,   548,    -5,-32768,  1862,    -4,-32768,
+  1863,  1864,  1866,  1911,  1865,  1868,-32768,-32768,  1875,  1876,
+   557,  2529,   558,  2529,   561,  2529,  6401,  6423,  6445,  6467,
+  6489,  6511,  6533,  6555,  6577,  6599,  6621,  6643,  6665,  6687,
+  6709,  6731,  6753,  6775,  6797,  6819,  6841,   573,-32768,  1871,
+  1867,  2071,    29,   423,  2072,  2073,    29,  2094,    29,  2008,
+  1720,    21,   415,   423,  2105,  2106,  1720,  2107,  1720,  2108,
+  1720,  2111,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,
+  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,
+  1720,  1720,  1720,    58,  2113,    58,  2115,-32768,    -2,  1918,
+-32768,-32768,    11,-32768,    12,  1921,  6863,    21,  1924,  1939,
+-32768,-32768,  2529,-32768,  2529,-32768,  2529,-32768, 12501, 12524,
+ 12547,  6885,  6907,  6929,  6951,  6973,  6995,  7017,  7039,  7061,
+  7083,  7105,  7127,  7149,  7171,  7193,  7215,  7237,  7259,-32768,
+-32768,   576,-32768,-32768,  2146,  2147,  2148,  2149,  1720,  1720,
+    21,   415,   423,-32768,-32768,-32768,  1720,  1720,  1720,  1720,
+  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,
+  1720,  1720,  1720,  1720,    58,  2150,-32768,-32768,-32768,-32768,
+  7281,  3531,  1998,  1962,  1964,  1965,  1966,  1967,  7303,  7325,
+  7347,  7369,  7391,  7413,  7435,  7457,  7479,  7501,  7523,  7545,
+  7567,  7589,  7611,  7633,  7655,  7677,-32768,-32768,  1720,  2166,
+  2002,   423,   415,  1720,  1720,  1720,  1720,  1720,  1720,  1720,
+  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,
+  1720,  1720,  1720,  1720,  3555,-32768,-32768,  1971,  1977,   577,
+  2529,   580,  2529,   587,  2529,  7699,  7721,  7743,  7765,  7787,
+  7809,  7831,  7853,  7875,  7897,  7919,  7941,  7963,  7985,  8007,
+  8029,  8051,  8073,  2179,   423,  2180,  1720,  2181,  1720,  2182,
+  1720,  2183,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,
+  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,
+-32768,  1987,-32768,  2529,-32768,  2529,-32768,  2529,-32768, 12570,
+ 12593, 12616,  8095,  8117,  8139,  8161,  8183,  8205,  8227,  8249,
+  8271,  8293,  8315,  8337,  8359,  8381,  8403,   423,-32768,-32768,
+-32768,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,
+  1720,  1720,  1720,  1720,  1720,  1720,  1988,  1989,  1990,  2000,
+  8425,  8447,  8469,  8491,  8513,  8535,  8557,  8579,  8601,  8623,
+  8645,  8667,  8689,  8711,  8733,   423,  1720,  1720,  1720,  1720,
+  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,
+  1720,  1720,  1720,  1720,  2003,   604,  2529,   607,  2529,   610,
+  2529,  8755,  8777,  8799,  8821,  8843,  8865,  8887,  8909,  8931,
+  8953,  8975,  8997,  9019,  9041,  9063,   415,  1720,  2186,  1720,
+  2189,  1720,  2190,  1720,  1720,  1720,  1720,  1720,  1720,  1720,
+  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  2010,  2529,
+-32768,  2529,-32768,  2529,-32768, 12639, 12662, 12685, 12708, 12731,
+ 12754,  9085,  9107,  9129,  9151,  9173,  9195,  9217,  9239,  9261,
+  2203,-32768,-32768,-32768,-32768,-32768,-32768,  1720,  1720,  1720,
+  1720,  1720,  1720,  1720,  1720,  1720,-32768,  2006,  2007,  2012,
+  2015,  2016,  2020,  9283,  9305,  9327,  9349,  9371,  9393,  9415,
+  9437,  9459,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,
+  1720,  1720,  1720,  1720,  1720,  1720,  1720,   615,  2529,   663,
+  2529,   666,  2529,   670,  2529,   691,  2529,   696,  2529,  9481,
+  9503,  9525,  9547,  9569,  9591,  9613,  9635,  9657,  1720,  2208,
+  1720,  2219,  1720,  2220,  1720,  2221,  1720,  2222,  1720,  2223,
+  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  1720,  2529,
+-32768,  2529,-32768,  2529,-32768,  2529,-32768,  2529,-32768,  2529,
+-32768,  9679,  9701,  9723,  9745,  9767,  9789, 12777, 12800, 12823,
+  1720,  1720,  1720,  1720,  1720,  1720,-32768,-32768,-32768,  9811,
+  9833,  9855,  9877,  9899,  9921,  2026,  2027,  2028,  1720,  1720,
+  1720,  1720,  1720,  1720,  1720,  1720,  1720,  9943,  9965,  9987,
+ 10009, 10031, 10053,   697,  2529,   701,  2529,   705,  2529,  1720,
+  1720,  1720,  1720,  1720,  1720,  1720,  2233,  1720,  2234,  1720,
+  2235, 10075, 10097, 10119, 12846, 12869, 12892,  2529,-32768,  2529,
+-32768,  2529,-32768,  1720,  1720,  1720,-32768,-32768,-32768, 10141,
+ 10163, 10185,  2038,  2040,  2041,  1720,  1720,  1720,  1720,  1720,
+  1720, 10207, 10229, 10251,   706,  2529,   714,  2529,   717,  2529,
+  1720,  1720,  1720,  1720,  2237,  1720,  2240,  1720,  2241, 10273,
+ 10295, 10317,  2529,-32768,  2529,-32768,  2529,-32768,  1720,  1720,
+  1720, 10339, 10361, 10383,  1720,  1720,  1720, 10405, 10427, 10449,
+  1720,  1720,  1720, 12915, 12938, 12961,-32768,-32768,-32768,  2048,
+  2050,  2052,  1720,  1720,  1720,   718,  2529,   721,  2529,   722,
+  2529,  1720,  2251,  1720,  2252,  1720,  2253,  2529,-32768,  2529,
+-32768,  2529,-32768,  2263,  2265,-32768
 };
 
 static const short yypgoto[] = {-32768,
-   -32,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,  1669,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+  -177,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,  1641,-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,
@@ -1436,2463 +1438,2467 @@ static const short yypgoto[] = {-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,
-  -304,   -19,-32768,  2285,    -4,  -364,  -176,    -2,-32768,-32768,
--32768,-32768,-32768,  2316,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768, -1270, -1229,-32768,-32768, -1101,   -23,-32768,
-   -29,-32768,   -94,-32768, -1164,  1231,  1452,  -211,  -332,  -734,
-  1255,-32768,   -21
+-32768,  -297,   -19,-32768,  2267,    -3,  -368,  -168,     1,-32768,
+-32768,-32768,-32768,-32768,  2272,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768, -1282, -1236,-32768,-32768, -1109,   -23,
+-32768,   -29,-32768,   -90,-32768, -1185,  1166,  1462,  -201,  -334,
+  -732,  1228,-32768,   -21
 };
 
 
-#define	YYLAST		13111
-
-
-static const short yytable[] = {   143,
-   246,   496,    75,   142,    76,   557,   897,   376,   531,   183,
-   380,   186,  1237,   197,   176,   178,   251,   740,   386,   207,
-   151,  1246,   200,    85,   532,   151,   207,   195,  1253,  1383,
-   378,   397,  1383,   399,  1384,  1051,  1389,  1384,  1392,  1050,
-  1383,   483,   207,     9,   153,  1384,   209,   211,   125,   126,
-   127,  1312,   207,    88,   213,   125,   126,   127,   367,   368,
-   135,   136,   517,   306,   367,   368,   248,   518,   249,  1383,
-     8,   125,   126,   127,  1384,  1082,  1109,  1083,  1052,   367,
-   368,   125,   126,   127,   888,   367,   368,    89,  1383,   207,
-   367,   368,   492,  1384,   367,   368,  1084,   253,  1085,   254,
-   190,  1293,  1086,   191,  1087,   172,   173,   548,   299,   300,
-   301,   558,   387,   302,   305,    90,   174,   310,   125,   126,
-   127,   367,   368,   175,   330,   331,   332,   620,   334,   492,
-   336,   337,   621,   348,   367,   368,   255,  1383,   256,   369,
-  1383,   362,  1384,   364,    91,  1384,  1118,    94,  1383,   371,
-   365,   366,   152,  1384,   100,  1462,   148,   152,  1404,  1462,
-  1045,    92,  1462,   787,   788,   307,   308,   153,  1461,   384,
-   385,  1465,   388,    93,   390,   100,  1383,   393,   394,  1468,
-   401,  1384,   196,   789,   155,   746,   889,   890,   257,   734,
-   258,   790,   313,   314,   315,   316,   317,   759,   318,   319,
-   320,   321,   322,   323,   324,   325,   326,    86,  1670,   184,
-   147,   187,   327,   198,   582,   201,   252,   741,   208,   367,
-   368,   439,  1405,   379,   437,   210,  1409,  1674,    95,   441,
-   442,   443,   444,   445,   446,   447,   448,   449,   450,   451,
-   452,   453,   454,   455,   456,   457,   458,   459,   460,   461,
-   462,   463,   464,   465,   466,   467,   468,   469,   470,   471,
-   472,   473,   474,   475,   476,   477,   478,   479,   480,   481,
-   482,  1224,    96,   484,   485,   486,  1676,   135,   136,  1763,
-   491,   367,   368,   725,   146,   840,   497,  1765,   726,   502,
-   503,   504,   505,   506,   507,   508,   509,   510,   511,   512,
-   513,   514,   515,   516,   148,  1620,   492,   156,  1624,   522,
-  1627,   524,  1174,   495,   149,  1766,   300,   491,   492,   128,
-   129,   130,   131,   158,   901,   535,   536,   537,   538,   731,
-   540,   541,   542,   543,   544,   545,   546,   551,   552,  1036,
-   128,   129,   130,   131,   731,   150,   135,   136,   559,   560,
-   561,   562,   367,   368,   840,   571,   367,   368,   259,   922,
-   260,   135,   136,   578,   553,   553,   556,   556,   154,   733,
-   370,   155,   586,   932,  1536,  1537,  1538,  1539,   367,   368,
-   157,  1543,   367,   368,  1097,  1039,   367,   368,   367,   368,
-  1462,  1098,   159,   881,  1462,   165,   627,  1462,   160,  1304,
-  1717,   135,   136,  1306,  1721,  1308,  1723,   487,   923,   249,
-   569,   570,   367,   368,   135,   136,   956,   261,   626,   262,
-   527,   180,   249,   910,   181,   182,    10,   316,   317,  1458,
-   318,   319,   320,   321,   322,   323,   324,   325,   326,   313,
-   314,   315,   316,   317,   327,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,   940,   941,   942,   943,   161,   327,
-   367,   368,  1313,   729,   135,   136,   300,  1314,  1225,   367,
-   368,  1383,   737,   736,   735,   584,  1384,  1464,   128,   129,
-   130,   131,  1067,  1068,  1633,  1634,  1467,  1462,  1637,   135,
-   136,  1462,   170,  1462,   491,   758,   263,   249,   264,   135,
-   136,  1076,  1077,   729,   757,   171,   491,   166,   761,   762,
-   167,   168,   179,   169,   492,   768,   185,   188,   777,   886,
-   324,   325,   326,   189,   192,   778,   779,   193,   327,   313,
-   314,   315,   316,   317,   782,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,   492,   265,   791,   266,   204,   327,
-   128,   129,   130,   131,   267,  1371,   268,   801,   194,   803,
-   804,    11,    12,    13,    14,    15,    16,    17,    18,   202,
-   203,   135,   136,   206,   205,   492,   492,   492,   492,  1727,
-  1060,   212,  1038,  1040,   313,   314,   315,   316,   317,   244,
-   318,   319,   320,   321,   322,   323,   324,   325,   326,   269,
-   271,   270,   272,   842,   327,   841,   957,   322,   323,   324,
-   325,   326,   247,    97,   338,   162,   163,   327,   164,   101,
+#define	YYLAST		13159
+
+
+static const short yytable[] = {   141,
+    75,   559,   245,   140,    76,   532,   181,   497,   184,  1243,
+   900,   195,   250,   376,   174,   176,   380,   742,  1252,   205,
+   198,   378,   149,   210,  1054,  1259,    98,   205,   193,  1299,
+  1391,  1397,   151,  1400,   402,  1392,  1319,   397,  1391,   399,
+  1391,   386,  1055,  1392,   351,  1392,   207,   209,   123,   124,
+   125,   352,   252,   149,   253,   305,   123,   124,   125,  1391,
+  1391,  1391,   205,  1391,  1392,  1392,  1392,   146,  1392,   367,
+   368,     5,   484,   205,   790,    85,  1391,  1391,   891,   367,
+   368,  1392,  1392,   367,   368,  1056,  1087,   205,  1088,   133,
+   134,   123,   124,   125,  1391,   247,  1089,   248,  1090,  1392,
+   550,   493,   123,   124,   125,    86,   298,   299,   300,   170,
+   171,   301,   304,   367,   368,   309,   123,   124,   125,   254,
+   172,   255,   329,   330,   331,    92,   333,   173,   335,   336,
+  1091,   347,  1092,   367,   368,   387,   367,   368,   493,   362,
+    87,   364,   367,   368,  1412,   367,   368,   371,   365,   366,
+   518,   369,    88,   560,   150,   519,  1471,   306,   307,   936,
+  1471,   791,  1311,  1471,   151,  1049,   153,   384,   385,  1470,
+   388,   792,   390,   793,    98,   393,   394,  1474,    89,  1477,
+   892,   893,   622,   194,   748,   150,    90,   623,  1102,   367,
+   368,   126,   127,   128,   129,  1103,   761,   736,  1682,  1686,
+  1688,  1114,  1775,    91,   367,   368,   182,   211,   185,   367,
+   368,   196,   251,   199,   379,  1777,  1778,   743,   206,   145,
+   440,  1413,   584,   438,   591,  1417,   208,    93,   442,   443,
+   444,   445,   446,   447,   448,   449,   450,   451,   452,   453,
+   454,   455,   456,   457,   458,   459,   460,   461,   462,   463,
+   464,   465,   466,   467,   468,   469,   470,   471,   472,   473,
+   474,   475,   476,   477,   478,   479,   480,   481,   482,   483,
+   367,   368,   485,   486,   487,   133,   134,   188,   164,   492,
+   189,   165,   166,   843,   167,   498,    94,  1313,   503,   504,
+   505,   506,   507,   508,   509,   510,   511,   512,   513,   514,
+   515,   516,   517,   144,  1632,   367,   368,  1636,   523,  1639,
+   525,   133,   134,   133,   134,   299,   492,   493,  1179,   488,
+   256,   248,   257,   370,   536,   537,   538,   539,   540,   493,
+   542,   543,   544,   545,   546,   547,   548,   553,   554,   126,
+   127,   128,   129,   154,   367,   368,   496,   146,   561,   562,
+   563,   564,   367,   368,   727,   573,  1043,   367,   368,   728,
+   133,   134,   629,   580,  1123,   555,   555,   147,   735,   558,
+   558,   258,   588,   259,  1315,  1546,  1547,  1548,  1549,   367,
+   368,   260,  1553,   261,   367,   368,   367,   368,   321,   322,
+   323,   324,   325,   884,   156,  1471,  1467,  1230,   326,  1471,
+  1729,  1473,  1471,  1476,  1733,   148,  1735,   315,   316,   152,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,   628,
+   323,   324,   325,   913,   326,    95,   337,   262,   326,   263,
+   153,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+   108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+   118,   119,   120,   121,   122,   944,   945,   946,   947,   155,
+   338,    10,   133,   134,   731,   571,   572,   299,   528,   157,
+   248,   133,   134,   739,   738,   737,   264,   760,   265,   248,
+   158,    43,    44,    45,    46,    47,    48,  1645,  1646,   533,
+   159,  1649,  1471,   133,   134,   492,  1471,   904,  1471,  1072,
+  1073,   843,   733,  1040,   731,   759,   163,   492,   733,   763,
+   764,   126,   127,   128,   129,   178,   168,   771,   179,   180,
+   780,   126,   127,   128,   129,  1320,   493,   781,   782,   169,
+  1321,   889,   133,   134,  1081,  1082,   785,   987,   988,   989,
+   990,   991,   133,   134,    43,    44,    45,    46,   794,    48,
+     6,     7,   177,     8,   160,   161,   493,   162,   266,   804,
+   267,   806,   807,  1378,   186,   312,   313,   314,   315,   316,
+   187,   317,   318,   319,   320,   321,   322,   323,   324,   325,
+   268,  1064,   269,  1739,   725,   326,   726,   183,   493,   493,
+   493,   493,  1042,  1044,  1231,   190,    11,    12,    13,    14,
+    15,    16,    17,    18,   270,   845,   271,   844,   130,   339,
+   272,   201,   273,   274,   132,   275,   276,   191,   277,   135,
+   192,    95,   297,   278,   138,   279,   340,    99,   100,   101,
+   102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+   112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+   122,   280,   282,   281,   283,   202,   203,   312,   313,   314,
+   315,   316,   200,   317,   318,   319,   320,   321,   322,   323,
+   324,   325,  1814,   284,   204,   285,   286,   326,   287,   926,
+   243,   874,   875,   288,   290,   289,   291,   292,   246,   293,
+   294,   733,   733,   734,   762,   876,   877,   878,   879,   880,
+   881,   882,   295,   733,   492,   917,  1051,   885,  1052,   888,
+   308,   733,   894,  1063,   493,   310,   296,  1206,   733,   905,
+  1093,   733,   903,  1094,   733,   733,  1095,  1096,   927,   733,
+  1321,  1184,  1322,  1869,   492,   327,   731,   314,   315,   316,
+   328,   317,   318,   319,   320,   321,   322,   323,   324,   325,
+  1684,  1000,  1685,   348,   354,   326,   940,   941,   942,  1697,
+  1699,  1698,  1700,  1701,   332,  1702,   492,   492,   492,   492,
+   334,   349,   950,   951,   960,  1724,   954,  1725,  1805,  1897,
+  1806,  1898,  1899,   967,  1900,   350,   355,   965,   966,  1901,
+   356,  1902,   976,   317,   318,   319,   320,   321,   322,   323,
+   324,   325,   361,   372,   130,   131,  2028,   326,  2029,  2030,
+   132,  2031,  2032,   357,  2033,   135,   358,  2139,   302,  2140,
+   138,   359,   303,  1004,  1005,  1006,  1007,  1008,  1009,  1010,
+  1011,  1012,  1013,  1014,  1015,  1016,  1017,  1018,  1019,  1020,
+  1021,  1022,  1023,  1024,  1025,  1026,  1027,  1028,  1029,   312,
+   313,   314,   315,   316,   360,   317,   318,   319,   320,   321,
+   322,   323,   324,   325,   373,  2141,   844,  2142,  2143,   326,
+  2144,  1045,  2145,   375,  2146,  1050,   374,   312,   313,   314,
+   315,   316,   383,   317,   318,   319,   320,   321,   322,   323,
+   324,   325,   492,  2147,  1065,  2148,  1066,   326,  2149,  2226,
+  2150,  2227,   391,  2228,  1204,  2229,  1205,  2230,  2274,  2231,
+  2275,   389,  1083,  1084,  1085,   392,  2276,  2049,  2277,  2278,
+  2322,  2279,  2323,  2324,  2326,  2325,  2327,   395,   396,   398,
+   400,   401,  1234,   403,  1106,  1107,  1108,   404,   405,  1383,
+   406,   407,   312,   313,   314,   315,   316,   408,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,   409,   410,   411,
+   412,   413,   326,   433,   961,   414,   415,   416,   417,   418,
+   419,   420,   421,   422,   423,   424,    95,   297,   425,   426,
+   427,  1142,    99,   100,   101,   102,   103,   104,   105,   106,
+   107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
+   117,   118,   119,   120,   121,   122,   428,   429,   430,   431,
+   432,   435,   436,   311,   439,   326,   490,   499,   437,   500,
+  1173,  1172,   501,   534,   529,   541,  1180,   549,   575,   576,
+   579,   312,   313,   314,   315,   316,   582,   317,   318,   319,
+   320,   321,   322,   323,   324,   325,  1189,  1190,  1191,  1192,
+  1265,   326,   585,   592,   593,   495,  1328,  1207,  1200,  1210,
+  1201,  1213,   594,   595,   596,   597,   598,   599,   600,   601,
+   602,   603,   604,  1220,  1221,   605,   606,   607,   608,   609,
+   610,   611,   555,   612,   613,  1233,   558,   614,  1236,   615,
+   616,   729,   502,   617,   618,   619,   620,   621,  1246,   624,
+   730,   625,   626,   741,   740,  1253,  1254,  1255,   745,   747,
+   779,   749,  1260,   750,   751,   753,  1264,   755,   756,   765,
+  1266,  1267,  1268,  1269,  1270,  1271,  1272,  1273,  1274,  1275,
+  1276,  1277,  1278,  1279,  1280,  1281,  1282,  1283,  1284,  1285,
+  1286,  1287,  1288,  1289,  1290,  1291,   783,   784,   796,   797,
+  1410,   798,   799,   800,   802,   803,   809,   840,   810,   130,
+   131,  1301,   811,   812,   813,   132,   814,   815,   816,   817,
+   135,   818,   819,   757,   820,   138,   873,   758,   821,   822,
+  1309,   823,   824,   312,   313,   314,   315,   316,   825,   317,
+   318,   319,   320,   321,   322,   323,   324,   325,   897,   826,
+   827,    95,   297,   326,  1325,   828,  1326,    99,   100,   101,
+   102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+   112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+   122,    95,   530,   829,   830,   831,   832,    99,   100,   101,
    102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
    112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-   122,   123,   124,   313,   314,   315,   316,   317,   339,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,   295,    43,
-    44,    45,    46,   327,    48,   273,   311,   274,  1802,    43,
-    44,    45,    46,    47,    48,   275,   312,   276,   296,   871,
-   872,   983,   984,   985,   986,   987,   277,   279,   278,   280,
-   281,   297,   282,   873,   874,   875,   876,   877,   878,   879,
-   309,   492,   491,   328,   501,   882,   283,   885,   284,   285,
-   891,   286,   287,   289,   288,   290,  1200,   902,   329,   291,
-   900,   292,   293,   723,   294,   724,   731,   333,   732,  1856,
-   335,   731,   491,   760,   729,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,   996,   731,  1047,   914,  1048,   327,
-   731,   361,  1059,   936,   937,   938,   349,   731,   731,  1088,
-  1089,   354,   350,   491,   491,   491,   491,   894,   351,   946,
-   947,   355,   731,   950,  1090,   731,   731,  1091,  1179,  1314,
-   963,  1315,   916,   352,   961,   962,  1672,   356,  1673,   972,
-  1685,  1687,  1686,  1688,   357,   358,   132,   340,  1689,  1712,
-  1690,  1713,   134,   372,  1793,   359,  1794,   137,  1884,  1886,
-  1885,  1887,   140,   360,   341,  1888,  2015,  1889,  2016,   373,
-  1000,  1001,  1002,  1003,  1004,  1005,  1006,  1007,  1008,  1009,
-  1010,  1011,  1012,  1013,  1014,  1015,  1016,  1017,  1018,  1019,
-  1020,  1021,  1022,  1023,  1024,  1025,   313,   314,   315,   316,
-   317,   374,   318,   319,   320,   321,   322,   323,   324,   325,
-   326,   383,  2017,   841,  2018,  2019,   327,  2020,  1041,  2126,
-   375,  2127,  1046,   389,   313,   314,   315,   316,   317,   391,
-   318,   319,   320,   321,   322,   323,   324,   325,   326,   491,
-  2128,  1061,  2129,  1062,   327,   315,   316,   317,   392,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,  1078,  1079,
-  1080,   395,  2036,   327,  2130,  2132,  2131,  2133,  2134,  2136,
-  2135,  2137,  2213,  2215,  2214,  2216,  1105,  2217,   396,  2218,
-  1101,  1102,  1103,  2261,   398,  2262,  1375,   313,   314,   315,
-   316,   317,   400,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,   313,   314,   315,   316,   317,   327,   318,   319,
-   320,   321,   322,   323,   324,   325,   326,  2263,  2265,  2264,
-  2266,   944,   327,   432,    97,   298,  2309,  1137,  2310,   402,
+   122,   883,   312,   313,   314,   315,   316,   841,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,   847,  1381,  1382,
+   833,  1390,   326,  1396,   919,  1399,   834,  1389,   848,  1395,
+   835,  1398,   887,  1401,  1402,   895,   896,   902,   849,   836,
+  1406,   898,   850,   837,   555,   838,  1545,   908,   558,  1415,
+   910,   851,   839,   852,   853,   854,   842,  1423,   855,   856,
+   857,   858,  1428,   859,   860,  1431,   861,  1433,  1434,  1435,
+  1436,  1437,  1438,  1439,  1440,  1441,  1442,  1443,  1444,  1445,
+  1446,  1447,  1448,  1449,  1450,  1451,  1452,  1453,  1454,  1455,
+  1456,  1457,  1458,   862,   863,   864,   865,   364,   866,   867,
+  1464,   868,   298,   299,  1465,   869,   870,  1596,   312,   313,
+   314,   315,   316,   871,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,   872,   130,   131,   899,   586,   326,   890,
+   132,   921,   920,   922,   923,   135,   924,   925,   915,   928,
+   138,   929,   916,   930,   931,   932,   933,   934,   935,   943,
+   963,   949,   957,   955,   130,   131,   962,   964,  1644,   968,
+   132,   969,   970,   971,   972,   135,   975,   977,   978,   981,
+   138,   982,   531,   983,   984,   985,   994,  1039,  1041,   995,
+   996,   997,   998,  1529,  1046,  1070,   948,   999,  1001,  1534,
+  1047,  1002,  1538,  1053,   312,   313,   314,   315,   316,  1057,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,  1059,
+  1061,  1062,  1071,  1086,   326,  1099,  1561,  1562,  1563,  1564,
+  1565,  1566,  1567,  1568,  1569,  1570,  1571,  1572,  1573,  1574,
+  1575,  1576,  1577,  1578,  1579,  1580,  1581,  1100,  1583,   312,
+   313,   314,   315,   316,  1110,   317,   318,   319,   320,   321,
+   322,   323,   324,   325,  1738,  1105,  1109,    95,   297,   326,
+  1111,   489,  1115,    99,   100,   101,   102,   103,   104,   105,
+   106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+   116,   117,   118,   119,   120,   121,   122,  1116,  1117,  1118,
+  1119,  1120,  1125,  1121,  1126,   312,   313,   314,   315,   316,
+  1781,   317,   318,   319,   320,   321,   322,   323,   324,   325,
+  1122,  1124,  1127,  1128,  1129,   326,  1130,  1131,  1132,  1652,
+  1654,  1656,  1657,  1658,  1659,  1660,  1661,  1662,  1663,  1664,
+  1665,  1666,  1667,  1668,  1669,  1670,  1671,  1672,  1673,  1674,
+  1675,  1676,  1677,  1813,  1134,  1679,  1143,  1174,  1175,  1133,
+  1135,  1139,  1177,  1170,  1048,   345,   312,   313,   314,   315,
+   316,   353,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,  1181,  1136,  1182,  1186,  1187,   326,  1188,  1193,  1137,
+  1138,  1194,  1195,  1196,   377,  1140,  1183,  1197,  1198,   381,
+   382,   312,   313,   314,   315,   316,  1199,   317,   318,   319,
+   320,   321,   322,   323,   324,   325,  1208,  1737,  1211,  1141,
+  1214,   326,  1216,  1743,  1217,  1745,  1218,  1747,   551,  1749,
+  1750,  1751,  1752,  1753,  1754,  1755,  1756,  1757,  1758,  1759,
+  1760,  1761,  1762,  1763,  1764,  1765,  1766,  1767,  1768,  1769,
+  1386,  1387,  1770,  1219,  1773,  1222,   132,  1226,  1235,  1238,
+  1239,  1388,  1240,  1241,  1242,  1244,   138,  1245,   173,  1247,
+  1248,  1249,    95,   297,  1250,  1251,  1257,  1258,    99,   100,
    101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
    111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-   121,   122,   123,   124,  2311,  2313,  2312,  2314,   403,  1044,
-   404,   405,   406,   407,   408,   409,  1168,  1167,   410,   411,
-   412,   413,  1175,   414,   415,   313,   314,   315,   316,   317,
-   416,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-   417,  1259,  1184,  1185,  1186,   327,   435,   418,   419,   494,
-   420,   421,  1201,  1194,  1204,  1195,  1207,   422,   423,   424,
-   425,   426,   427,   428,   429,   430,   431,   438,  1214,  1215,
-   327,   489,  1228,   434,   436,   499,   553,   498,   556,   500,
-  1227,   528,   533,  1230,   539,   547,   573,  1289,   577,   574,
-   583,   580,   589,  1240,   590,   591,   592,   593,   594,   595,
-  1247,  1248,  1249,   596,   597,   598,   599,  1254,   600,   601,
-   602,  1258,   603,   604,   605,  1260,  1261,  1262,  1263,  1264,
-  1265,  1266,  1267,  1268,  1269,  1270,  1271,  1272,  1273,  1274,
-  1275,  1276,  1277,  1278,  1279,  1280,  1281,  1282,  1283,  1284,
-  1285,   313,   314,   315,   316,   317,   606,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,  1295,   132,   133,   607,
-   608,   327,   609,   134,   610,   611,   612,   613,   137,   614,
-   615,   303,   616,   140,  1302,   304,   617,   618,   619,   313,
-   314,   315,   316,   317,   622,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,  1297,  1321,    97,   298,  1318,   327,
-  1319,   623,   101,   102,   103,   104,   105,   106,   107,   108,
-   109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-   119,   120,   121,   122,   123,   124,    97,   298,   727,   624,
-   728,   738,   101,   102,   103,   104,   105,   106,   107,   108,
-   109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-   119,   120,   121,   122,   123,   124,   739,   313,   314,   315,
-   316,   317,   743,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,  1374,   745,  1382,  1298,  1388,   327,  1391,   747,
-  1381,   748,  1387,   749,  1390,   751,  1393,  1394,   753,   754,
-   763,   780,   781,  1398,   795,   796,   553,   776,   556,   793,
-   799,   794,  1407,   797,   806,   807,   837,   880,   870,   844,
-  1415,   800,   884,   838,   808,  1420,   809,   810,  1423,   811,
-  1425,  1426,  1427,  1428,  1429,  1430,  1431,  1432,  1433,  1434,
-  1435,  1436,  1437,  1438,  1439,  1440,  1441,  1442,  1443,  1444,
-  1445,  1446,  1447,  1448,  1449,  1450,   812,   813,   814,   364,
-   815,   816,  1455,   817,   299,   300,  1456,   892,   893,   818,
-   845,   819,   887,   846,   313,   314,   315,   316,   317,  1475,
-   318,   319,   320,   321,   322,   323,   324,   325,   326,   132,
-   133,   820,   895,   821,   327,   134,   822,   823,   824,   825,
-   137,   847,   826,   755,   827,   140,   899,   756,   905,   828,
-   829,   830,   831,   832,   833,   834,   835,   836,   839,   132,
-   133,   848,   849,   850,   851,   134,   852,   853,   854,   855,
-   137,   907,   917,   912,   856,   140,   857,   913,   858,   859,
-   860,   861,   862,   863,  1519,   864,   865,   866,  1299,   867,
-  1524,   868,  1535,  1528,   869,   313,   314,   315,   316,   317,
-   896,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-   918,   919,   920,   921,   924,   327,   925,  1551,  1552,  1553,
-  1554,  1555,  1556,  1557,  1558,  1559,  1560,  1561,  1562,  1563,
-  1564,  1565,  1566,  1567,  1568,  1569,  1570,  1571,   926,  1573,
-   927,   928,   929,   930,   931,   939,   959,   945,   953,   951,
-   958,   960,  1585,   964,   965,    97,   529,   966,   967,   968,
-   971,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+   121,   122,  1261,  1262,  1263,  1811,  1812,  1292,  1293,  1298,
+  1294,  1300,  1296,  1819,  1820,  1821,  1822,  1823,  1824,  1825,
+  1826,  1827,  1828,  1829,  1830,  1831,  1832,  1833,  1834,  1835,
+  1836,  1297,  1307,  1837,   312,   313,   314,   315,   316,  1308,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,  1310,
+  1312,  1314,  1316,  1323,   326,  1329,  1324,  1379,  1331,  1334,
+  1338,  1295,  1332,  1333,  1339,  1865,  1335,  1337,  1343,  1344,
+  1871,  1873,  1875,  1876,  1877,  1878,  1879,  1880,  1881,  1882,
+  1883,  1884,  1885,  1886,  1887,  1888,  1889,  1890,  1891,  1892,
+  1893,  1345,  1347,    95,   337,  1348,  1377,  1350,  1403,    99,
+   100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
    110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-   120,   121,   122,   123,   124,    97,   298,   973,   974,   977,
-   978,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+   120,   121,   122,  1924,  1411,  1926,  1414,  1928,   338,  1930,
+  1931,  1932,  1933,  1934,  1935,  1936,  1937,  1938,  1939,  1940,
+  1941,  1942,  1943,  1944,  1945,  1946,  1947,  1416,  1418,    43,
+    44,    45,    46,    47,    48,   130,   131,  1419,  1420,  1421,
+  1432,   132,  1422,  1424,  1426,  1427,   135,  1429,  1430,  1459,
+  1460,   138,  1468,  1484,  1304,  1489,  1463,  1469,  1971,  1972,
+  1973,  1974,  1975,  1976,  1977,  1978,  1979,  1980,  1981,  1982,
+  1983,  1984,  1985,  1480,  1481,  1483,  1527,  1485,  1486,  1487,
+  1492,   732,  1531,  1532,  1490,  1494,  1535,  1536,  1539,  1540,
+  1541,  1544,  1496,  2007,  2009,  2011,  2012,  2013,  2014,  2015,
+  2016,  2017,  2018,  2019,  2020,  2021,  2022,  2023,  2024,  2025,
+  2026,   312,   313,   314,   315,   316,  1523,   317,   318,   319,
+   320,   321,   322,   323,   324,   325,  1550,  1551,  1552,  1554,
+  1555,   326,  1556,  1557,  2050,  1584,  2052,  1587,  2054,  1589,
+  2056,  2057,  2058,  2059,  2060,  2061,  2062,  2063,  2064,  2065,
+  2066,  2067,  2068,  2069,  2070,  1590,   130,   491,  1592,  1594,
+  1595,  1597,   132,  1598,  1599,  1600,  1601,   135,  1602,  1630,
+  1631,  1629,   138,  1603,  1633,  1604,  1605,  1627,  1637,  1640,
+  1643,  1647,  1648,  1650,  2094,  2095,  2096,  2097,  2098,  2099,
+  2100,  2101,  2102,  1681,  1683,  1687,  1689,  1693,  1690,  1691,
+  1694,  1727,  1695,  1696,  1726,  1692,  1728,  1731,  1732,  2119,
+  2121,  2123,  2125,  2127,  2129,  2130,  2131,  2132,  2133,  2134,
+  2135,  2136,  2137,  2138,   312,   313,   314,   315,   316,  1734,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,  1736,
+  1741,  1742,  1744,  1746,   326,  2160,  1748,  2162,  1771,  2164,
+  1774,  2166,  1776,  2168,  1779,  2170,  1782,  2172,  2173,  2174,
+  2175,  2176,  2177,  2178,  2179,  2180,   312,   313,   314,   315,
+   316,  1783,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,  1807,  1808,  1809,  1810,  1838,   326,  2190,  2191,  2192,
+  2193,  2194,  2195,  1228,  1842,  1229,  1843,  1841,  1844,  1845,
+  1846,  1866,  1867,  1895,  1896,  2208,  2209,  2210,  2211,  2212,
+  2213,  2215,  2217,  2219,  1921,  1923,  1925,  1927,  1929,  1948,
+  1986,  2051,  1987,  1988,  2053,  2055,  2232,  2233,  2234,  2235,
+  2236,  2237,  2238,  1989,  2240,  2027,  2242,  2071,  2087,  2103,
+  2104,   906,   907,  2161,   909,  2105,   911,   912,  2106,  2107,
+  2250,  2251,  2252,  2108,  2163,  2165,  2167,  2169,  2171,  2205,
+  2206,  2207,  2262,  2263,  2264,  2266,  2268,  2270,  2239,  2241,
+  2243,  2259,  2284,  2260,  2261,  2286,  2288,  2280,  2281,  2282,
+  2283,  2313,  2285,  2314,  2287,  2315,  2329,  2331,  2333,   952,
+   953,  1305,  2335,   956,  2336,  2292,  2293,  2294,  1225,   846,
+    74,  2298,  2299,  2300,  1176,    82,  1306,  2304,  2305,  2306,
+   973,   974,     0,     0,     0,     0,   979,   980,     0,  2317,
+  2319,  2321,     0,   986,     0,   993,     0,     0,  2328,     0,
+  2330,     0,  2332,    95,    96,    97,     0,    98,     0,    99,
+   100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
    110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-   120,   121,   122,   123,   124,   979,   980,   981,  1640,  1642,
-  1644,  1645,  1646,  1647,  1648,  1649,  1650,  1651,  1652,  1653,
-  1654,  1655,  1656,  1657,  1658,  1659,  1660,  1661,  1662,  1663,
-  1664,  1665,   990,   991,  1667,   992,   993,   994,   995,  1680,
-  1035,   997,  1473,  1037,   998,  1042,  1043,   346,   313,   314,
-   315,   316,   317,   353,   318,   319,   320,   321,   322,   323,
-   324,   325,   326,  1049,  1053,  1055,  1057,  1058,   327,  1081,
-  1066,  1094,  1095,  1100,  1104,  1111,   377,  1106,  1110,  1112,
-  1113,   381,   382,  1114,  1115,  1138,  1116,  1726,  1117,  1169,
-  1119,  1122,  1123,  1124,  1170,  1725,  1120,  1172,  1121,  1176,
-  1128,  1731,  1134,  1733,  1125,  1735,  1126,  1737,  1738,  1739,
-  1740,  1741,  1742,  1743,  1744,  1745,  1746,  1747,  1748,  1749,
-  1750,  1751,  1752,  1753,  1754,  1755,  1756,  1757,   132,   133,
-  1758,  1127,  1761,  1769,   134,  1177,  1181,  1165,  1129,   137,
-  1130,  1182,  1131,  1178,   140,  1183,   530,  1132,  1187,  1188,
-  1189,  1133,  1135,  1136,  1190,  1191,  1192,  1193,  1378,  1379,
-  1202,  1205,  1208,  1286,   134,   744,  1210,  1211,  1212,  1380,
-  1213,  1229,  1216,  1220,   140,  1232,   175,  1233,  1234,  1235,
-  1239,  1236,  1238,  1799,  1800,  1241,  1242,  1243,  1244,  1245,
-  1251,  1807,  1808,  1809,  1810,  1811,  1812,  1813,  1814,  1815,
-  1816,  1817,  1818,  1819,  1820,  1821,  1822,  1823,  1824,  1252,
-  1255,  1825,   313,   314,   315,   316,   317,  1256,   318,   319,
-   320,   321,   322,   323,   324,   325,   326,  1257,  1287,  1288,
-  1301,  1290,   327,  1291,  1300,  1305,  1292,  1403,  1317,  1372,
-   915,  1294,  1322,  1853,  1327,  1303,  1307,  1309,  1858,  1860,
-  1862,  1863,  1864,  1865,  1866,  1867,  1868,  1869,  1870,  1871,
-  1872,  1873,  1874,  1875,  1876,  1877,  1878,  1879,  1880,  1402,
-    97,   338,  1331,  1316,  1324,  1325,   101,   102,   103,   104,
-   105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-   115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-  1911,  1326,  1913,  1328,  1915,   339,  1917,  1918,  1919,  1920,
-  1921,  1922,  1923,  1924,  1925,  1926,  1927,  1928,  1929,  1930,
-  1931,  1932,  1933,  1934,  1330,  1332,    43,    44,    45,    46,
-    47,    48,  1337,   313,   314,   315,   316,   317,  1338,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,  1336,  1340,
-  1341,  1370,  1395,   327,  1406,  1958,  1959,  1960,  1961,  1962,
-  1963,  1964,  1965,  1966,  1967,  1968,  1969,  1970,  1971,  1972,
-  1343,  1408,  1410,  1411,  1412,  1413,  1454,  1414,  1416,  1418,
-   730,  1419,  1421,  1422,  1451,  1424,  1452,  1480,  1459,  1460,
-  1994,  1996,  1998,  1999,  2000,  2001,  2002,  2003,  2004,  2005,
-  2006,  2007,  2008,  2009,  2010,  2011,  2012,  2013,   313,   314,
-   315,   316,   317,  1471,   318,   319,   320,   321,   322,   323,
-   324,   325,   326,  1472,  1474,  1517,  1521,  1522,   327,  1476,
-  1525,  2037,  1477,  2039,  1481,  2041,  1478,  2043,  2044,  2045,
-  2046,  2047,  2048,  2049,  2050,  2051,  2052,  2053,  2054,  2055,
-  2056,  2057,  1483,   132,   490,  1485,  1487,  1514,  1526,   134,
-  1529,  1530,  1531,  1534,   137,  1540,  1541,  1542,  1544,   140,
-  1545,  1546,  1547,  1574,  1576,  1578,  1584,  1579,  1581,  1583,
-  1586,  2081,  2082,  2083,  2084,  2085,  2086,  2087,  2088,  2089,
-  1587,  1588,  1589,  1590,  1591,  1619,  1592,  1621,  1625,  1593,
-  1594,  1616,  1618,  1628,  1631,  1632,  2106,  2108,  2110,  2112,
-  2114,  2116,  2117,  2118,  2119,  2120,  2121,  2122,  2123,  2124,
-  2125,   313,   314,   315,   316,   317,  1635,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,  1636,  1638,  1669,  1671,
-  1675,   327,  2147,  1677,  2149,   625,  2151,  1678,  2153,  1681,
-  2155,  1679,  2157,  1682,  2159,  2160,  2161,  2162,  2163,  2164,
-  2165,  2166,  2167,   313,   314,   315,   316,   317,  1714,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,  1716,  1715,
-  1719,  1683,  1684,   327,  2177,  2178,  2179,  2180,  2181,  2182,
-  1198,  1720,  1199,  1722,  1729,  1724,  1730,  1732,  1734,  1736,
-  1759,  1762,  2195,  2196,  2197,  2198,  2199,  2200,  2202,  2204,
-  2206,  1764,  1767,  1770,  1771,  1795,  1796,  1797,  1798,  1801,
-  1826,  1829,  1832,  2219,  2220,  2221,  2222,  2223,  2224,  2225,
-  1830,  2227,  1831,  2229,  1833,  1834,  1854,  1882,  1883,   903,
-   904,  1908,   906,  1910,   908,   909,  1912,  2237,  2238,  2239,
-  1914,  1916,  1974,  2038,  1935,  2040,  1973,  2042,  2074,  2249,
-  2250,  2251,  2253,  2255,  2257,  2148,  2150,  1975,  2058,  2152,
-  1976,  2154,  2014,  2156,  2267,  2268,  2269,  2270,  2090,  2272,
-  2091,  2274,  2092,  2093,  2094,  2095,   948,   949,  2158,  2192,
-   952,  2193,  2279,  2280,  2281,  2226,  2228,  2230,  2285,  2286,
-  2287,  2271,  2194,  2246,  2291,  2292,  2293,   969,   970,  2247,
-  2248,  2273,  2275,   975,   976,  2300,  2304,  2306,  2308,  2301,
-   982,  2302,   989,  2316,  2318,  2315,  2320,  2317,  2322,  2319,
-  2323,    74,    97,    98,    99,   843,   100,  1171,   101,   102,
-   103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-   113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-   123,   124,    82,   125,   126,   127,    97,   298,  1219,     0,
-     0,     0,   101,   102,   103,   104,   105,   106,   107,   108,
-   109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-   119,   120,   121,   122,   123,   124,  1054,     0,  1056,   955,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,  1063,
-  1064,  1065,     0,     0,     0,  1069,  1070,  1071,  1072,  1073,
-  1074,  1075,    97,   298,   207,     0,     0,     0,   101,   102,
-   103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-   113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-   123,   124,     0,   125,   126,   127,    97,   529,     0,     0,
-     0,     0,   101,   102,   103,   104,   105,   106,   107,   108,
-   109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-   119,   120,   121,   122,   123,   124,   313,   314,   315,   316,
-   317,     0,   318,   319,   320,   321,   322,   323,   324,   325,
-   326,   128,   129,   130,   131,     0,   327,     0,   488,     0,
-     0,     0,     0,   549,     0,   132,   133,     0,     0,     0,
-     0,   134,   135,   136,     0,     0,   137,     0,   138,  1166,
-   139,   140,   313,   314,   315,   316,   317,     0,   318,   319,
-   320,   321,   322,   323,   324,   325,   326,     0,     0,   132,
-   133,     0,   327,     0,     0,   134,     0,     0,     0,  1222,
-   137,  1223,     0,     0,     0,   140,     0,   313,   314,   315,
-   316,   317,     0,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,     0,
-     0,  1221,     0,     0,     0,     0,     0,     0,     0,  1231,
-     0,     0,     0,     0,     0,   132,   133,     0,     0,     0,
-     0,   134,     0,     0,     0,     0,   137,     0,  1250,     0,
-     0,   140,   563,    27,    28,   564,   565,    31,   566,    33,
-     0,    34,     0,    36,    37,    38,     0,    40,    41,   132,
-   133,     0,     0,     0,     0,   134,     0,     0,     0,     0,
-   137,     0,     0,     0,    53,   140,   563,    27,    28,   564,
-   565,    31,   566,    33,     0,    34,     0,    36,    37,    38,
+   120,   121,   122,     0,   123,   124,   125,    95,   530,     0,
+     0,     0,     0,    99,   100,   101,   102,   103,   104,   105,
+   106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+   116,   117,   118,   119,   120,   121,   122,  1482,     0,  1058,
+     0,  1060,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,  1067,  1068,  1069,     0,     0,     0,     0,  1074,
+  1075,  1076,  1077,  1078,  1079,  1080,    95,   297,   205,     0,
+     0,     0,    99,   100,   101,   102,   103,   104,   105,   106,
+   107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
+   117,   118,   119,   120,   121,   122,     0,   123,   124,   125,
+   746,   312,   313,   314,   315,   316,     0,   317,   318,   319,
+   320,   321,   322,   323,   324,   325,   312,   313,   314,   315,
+   316,   326,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,   918,     0,     0,     0,     0,   326,     0,     0,     0,
+     0,     0,   126,   127,   128,   129,   959,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   130,   131,     0,     0,
+     0,     0,   132,   133,   134,     0,     0,   135,     0,   136,
+     0,   137,   138,  1171,     0,   312,   313,   314,   315,   316,
+     0,   317,   318,   319,   320,   321,   322,   323,   324,   325,
+   130,   131,     0,     0,     0,   326,   132,     0,     0,     0,
+     0,   135,  1384,     0,  1385,     0,   138,   312,   313,   314,
+   315,   316,     0,   317,   318,   319,   320,   321,   322,   323,
+   324,   325,     0,     0,     0,     0,     0,   326,     0,     0,
+     0,     0,     0,     0,     0,     0,  1227,     0,     0,     0,
+     0,     0,     0,     0,  1237,     0,     0,     0,     0,   130,
+   131,     0,     0,     0,     0,   132,     0,     0,     0,     0,
+   135,     0,     0,  1256,     0,   138,     0,     0,   312,   313,
+   314,   315,   316,     0,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   312,
+   313,   314,   315,   316,     0,   317,   318,   319,   320,   321,
+   322,   323,   324,   325,   312,   313,   314,   315,   316,   326,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,   565,    27,    28,   566,   567,
+    31,   568,    33,     0,    34,     0,    36,    37,    38,     0,
+    40,    41,     0,     0,     0,     0,     0,   565,    27,    28,
+   566,   567,    31,   568,    33,     0,    34,    53,    36,    37,
+    38,     0,    40,    41,   312,   313,   314,   315,   316,     0,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,    53,
+     0,     0,     0,     0,   326,     0,    55,    56,    57,     0,
+   565,    27,    28,   566,   567,    31,   568,    33,     0,    34,
+     0,    36,    37,    38,    67,    40,    41,     0,    55,    56,
+    57,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,    53,     0,     0,     0,    67,   312,   313,   314,
+   315,   316,     0,   317,   318,   319,   320,   321,   322,   323,
+   324,   325,  1404,     0,  1405,     0,     0,   326,  1409,     0,
+     0,    55,    56,    57,     0,     0,   766,     0,     0,     0,
+     0,     0,     0,     0,  1425,     0,     0,     0,     0,    67,
+   565,    27,    28,   566,   567,    31,   568,    33,     0,    34,
+     0,    36,    37,    38,     0,    40,    41,     0,     0,     0,
+     0,     0,   569,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,    53,     0,     0,     0,   565,    27,    28,   566,
+   567,    31,   568,    33,   574,    34,     0,    36,    37,    38,
      0,    40,    41,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,    55,    56,    57,     0,     0,    53,     0,
-     0,   563,    27,    28,   564,   565,    31,   566,    33,     0,
-    34,    67,    36,    37,    38,     0,    40,    41,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    55,    56,    57,
-     0,     0,     0,    53,     0,   563,    27,    28,   564,   565,
-    31,   566,    33,     0,    34,    67,    36,    37,    38,     0,
-    40,    41,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,    55,    56,    57,     0,     0,    53,     0,     0,
-     0,     0,     0,     0,     0,   313,   314,   315,   316,   317,
-    67,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,    55,    56,    57,   567,
-     0,     0,  1376,     0,  1377,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,    67,  1396,     0,  1397,     0,     0,
-     0,  1401,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   572,     0,     0,     0,  1417,   563,    27,
-    28,   564,   565,    31,   566,    33,     0,    34,     0,    36,
-    37,    38,     0,    40,    41,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   587,     0,
-    53,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   -10,     1,     0,   -10,   -53,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,    55,
-    56,    57,   588,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   -53,     0,     0,    67,   -53,   -53,
-   -53,   -53,   -53,   -53,   -53,   -53,   -53,     0,   -53,   -53,
-   -53,   -53,   -53,   -53,   -53,   -53,     0,     0,     0,   -53,
-   -53,   -53,   -53,   -53,   -53,   -53,     0,   -53,   -53,   -53,
-   -53,   -53,     0,     0,  1515,     0,   313,   314,   315,   316,
-   317,  1520,   318,   319,   320,   321,   322,   323,   324,   325,
-   326,     0,  1532,  1533,     0,     0,   327,     0,     0,   -53,
-   -53,   -53,   -53,     0,     0,   764,     0,   -53,     0,   -53,
-     0,   -53,   -53,   -53,   -53,   -53,   -53,   -53,   -53,   -53,
-   -53,     0,     0,     0,     0,   802,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,  1575,     0,     0,   -10,
-   -10,   -10,   -10,   -10,   -10,   -10,   -10,     0,     0,     0,
-     0,     0,   214,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     2,     3,     0,     4,   628,   629,
-   630,   631,   632,   633,   634,   635,   636,   637,   638,   639,
-   640,   641,   642,   643,   644,   645,   646,   647,   648,   649,
-   650,   651,   652,   653,     0,     0,     0,     0,     0,  1623,
-     0,     0,     0,     0,  1630,   628,   629,   630,   631,   632,
-   633,   634,   635,   636,   637,   638,   639,   640,   641,   642,
-   643,   644,   645,   646,   647,   648,   649,   650,   651,   652,
-   653,   215,   216,   217,     0,     0,     0,     0,     0,   218,
-   219,   220,   221,   222,   223,   224,   225,   226,   227,     0,
-     0,     0,     0,     0,     0,     0,     0,   228,   229,   230,
-   231,   232,   233,   234,   235,   236,   237,     0,   238,   239,
-   240,   241,   242,   243,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    23,     0,     0,
-     0,     0,     0,  1718,     0,     0,     0,     0,     0,     0,
-     0,   654,     0,  1728,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,    24,     0,     0,     0,
-    25,    26,    27,    28,    29,    30,    31,    32,    33,     0,
-    34,    35,    36,    37,    38,    39,    40,    41,   999,     0,
-     0,    42,    43,    44,    45,    46,    47,    48,     0,    49,
-    50,    51,    52,    53,   563,    27,    28,   564,   565,    31,
-   566,    33,     0,    34,     0,    36,    37,    38,     0,    40,
-    41,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,    54,    55,    56,    57,     0,    53,     0,     0,    58,
-     0,    59,  1803,    60,    61,    62,    63,    64,    65,    66,
-    67,    68,    69,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,    55,    56,    57,   313,   314,
-   315,   316,   317,     0,   318,   319,   320,   321,   322,   323,
-   324,   325,   326,    67,     0,     0,     0,     0,   327,     0,
-     0,     0,     0,     0,     0,     0,     0,   769,     0,     0,
-     0,  1855,   313,   314,   315,   316,   317,     0,   318,   319,
-   320,   321,   322,   323,   324,   325,   326,     0,     0,     0,
-     0,     0,   327,     0,     0,     0,   313,   314,   315,   316,
-   317,   770,   318,   319,   320,   321,   322,   323,   324,   325,
-   326,     0,     0,     0,     0,     0,   327,     0,     0,     0,
-     0,     0,     0,  1909,     0,   911,   313,   314,   315,   316,
-   317,     0,   318,   319,   320,   321,   322,   323,   324,   325,
-   326,     0,     0,     0,     0,     0,   327,     0,     0,     0,
-   313,   314,   315,   316,   317,   935,   318,   319,   320,   321,
-   322,   323,   324,   325,   326,     0,     0,     0,     0,     0,
-   327,     0,     0,     0,     0,     0,  1954,     0,     0,  1196,
-   313,   314,   315,   316,   317,     0,   318,   319,   320,   321,
-   322,   323,   324,   325,   326,     0,     0,     0,     0,     0,
-   327,     0,     0,     0,     0,     0,     0,     0,     0,  1399,
-     0,     0,     0,     0,  1992,   313,   314,   315,   316,   317,
-     0,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,     0,     0,   313,
-   314,   315,   316,   317,  1400,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,     0,     0,   313,   314,   315,   316,   317,  1457,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,     0,     0,   313,   314,   315,
-   316,   317,  1463,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,     0,
-     0,   313,   314,   315,   316,   317,  1466,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,     0,     0,   313,   314,   315,   316,   317,
-  1469,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,     0,     0,   313,
-   314,   315,   316,   317,  1470,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,     0,     0,   313,   314,   315,   316,   317,  1516,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,     0,     0,   313,   314,   315,
-   316,   317,  1577,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,     0,
-     0,   313,   314,   315,   316,   317,  1580,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,     0,     0,   313,   314,   315,   316,   317,
-  1582,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,     0,     0,   313,
-   314,   315,   316,   317,  1828,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,     0,     0,   313,   314,   315,   316,   317,  1881,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-   549,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,   550,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,   581,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,   703,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,   704,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-   717,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,   718,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,   719,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,   720,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,   721,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-   722,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,   783,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,   784,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,   785,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,   933,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-   934,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,   954,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1092,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1093,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1107,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1108,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1139,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1140,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1141,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1142,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1143,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1144,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1145,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1146,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1147,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1148,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1149,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1150,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1151,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1152,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1153,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1154,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1155,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1156,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1157,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1158,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1159,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1160,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1161,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1162,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1163,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1164,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1180,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1296,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1310,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1311,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1320,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1323,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1334,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1339,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1342,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1344,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1345,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1346,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1347,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1348,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1349,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1350,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1351,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1352,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1353,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1354,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1355,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1356,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1357,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1358,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1359,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1360,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1361,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1362,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1363,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1364,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1365,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1366,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1367,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1368,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1369,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1373,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1479,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1491,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1492,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1493,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1494,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1495,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1496,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1497,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1498,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1499,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1500,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1501,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1502,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1503,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1504,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1505,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1506,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1507,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1508,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1509,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1510,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1511,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1513,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1595,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1596,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1597,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1598,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1599,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1600,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1601,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1602,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1603,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1604,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1605,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1606,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1607,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1608,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1609,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1610,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1611,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1612,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1613,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1614,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1615,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1691,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1692,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1693,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1694,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1695,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1696,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1697,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1698,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1699,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1700,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1701,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1702,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1703,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1704,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1705,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1706,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1707,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1708,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1709,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1710,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1711,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1768,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1775,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1776,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1777,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1778,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1779,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1780,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1781,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1782,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1783,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1784,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1785,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1786,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1787,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1788,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1789,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1790,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1791,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1792,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1827,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1835,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1836,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1837,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1838,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1839,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1840,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1841,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1842,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1843,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1844,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1845,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1846,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1847,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1848,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1849,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1850,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1851,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1852,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1890,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1891,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1892,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1893,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1894,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1895,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1896,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1897,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1898,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1899,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1900,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1901,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1902,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1903,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1904,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1905,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1906,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1907,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1939,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1940,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1941,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1942,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1943,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1944,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1945,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1946,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1947,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1948,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1949,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1950,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1951,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1952,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1953,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1977,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1978,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1979,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1980,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1981,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1982,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1983,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1984,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1985,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1986,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  1987,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  1988,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  1989,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  1990,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  1991,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  2021,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  2022,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  2023,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  2024,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  2025,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  2026,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  2027,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  2028,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  2029,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  2030,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  2031,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  2032,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  2033,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  2034,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  2035,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  2065,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  2066,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  2067,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  2068,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  2069,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  2070,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  2071,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  2072,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  2073,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  2096,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  2097,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  2098,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  2099,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  2100,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  2101,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  2102,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  2103,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  2104,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  2138,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  2139,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  2140,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  2141,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  2142,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  2143,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  2144,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  2145,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  2146,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  2168,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  2169,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  2170,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  2171,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  2172,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  2173,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  2186,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  2187,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  2188,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  2189,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  2190,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  2191,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  2207,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  2208,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  2209,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  2210,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  2211,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  2212,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  2231,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  2232,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  2233,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  2243,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  2244,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  2245,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  2258,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  2259,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  2260,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  2276,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  2277,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  2278,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  2282,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   313,
-   314,   315,   316,   317,  2283,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   313,   314,   315,   316,   317,  2284,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   313,   314,   315,   316,   317,  2288,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   313,   314,   315,   316,   317,
-  2289,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   313,   314,   315,
-   316,   317,  2290,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,     0,
-     0,   682,   313,   314,   315,   316,   317,     0,   318,   319,
-   320,   321,   322,   323,   324,   325,   326,     0,     0,     0,
-     0,     0,   327,     0,     0,     0,   684,   313,   314,   315,
-   316,   317,     0,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,     0,
-     0,   686,   313,   314,   315,   316,   317,     0,   318,   319,
-   320,   321,   322,   323,   324,   325,   326,     0,     0,     0,
-     0,     0,   327,     0,     0,     0,   688,   313,   314,   315,
-   316,   317,     0,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,     0,
-     0,   690,   313,   314,   315,   316,   317,     0,   318,   319,
-   320,   321,   322,   323,   324,   325,   326,     0,     0,     0,
-     0,     0,   327,     0,     0,     0,   692,   313,   314,   315,
-   316,   317,     0,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,     0,
-     0,   694,   313,   314,   315,   316,   317,     0,   318,   319,
-   320,   321,   322,   323,   324,   325,   326,     0,     0,     0,
-     0,     0,   327,     0,     0,     0,   696,   313,   314,   315,
-   316,   317,     0,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,     0,
-     0,   698,   313,   314,   315,   316,   317,     0,   318,   319,
-   320,   321,   322,   323,   324,   325,   326,     0,     0,     0,
-     0,     0,   327,     0,     0,     0,   700,   313,   314,   315,
-   316,   317,     0,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,     0,
-     0,   702,   313,   314,   315,   316,   317,     0,   318,   319,
-   320,   321,   322,   323,   324,   325,   326,     0,     0,     0,
-     0,     0,   327,     0,     0,     0,   706,   313,   314,   315,
-   316,   317,     0,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,     0,
-     0,   708,   313,   314,   315,   316,   317,     0,   318,   319,
-   320,   321,   322,   323,   324,   325,   326,     0,     0,     0,
-     0,     0,   327,     0,     0,     0,   710,   313,   314,   315,
-   316,   317,     0,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,     0,
-     0,   712,   313,   314,   315,   316,   317,     0,   318,   319,
-   320,   321,   322,   323,   324,   325,   326,     0,     0,     0,
-     0,     0,   327,     0,     0,     0,   714,   313,   314,   315,
-   316,   317,     0,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,     0,
-     0,   716,   313,   314,   315,   316,   317,     0,   318,   319,
-   320,   321,   322,   323,   324,   325,   326,     0,     0,     0,
-     0,     0,   327,     0,     0,     0,   786,   313,   314,   315,
-   316,   317,     0,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,     0,
-     0,   792,   313,   314,   315,   316,   317,     0,   318,   319,
-   320,   321,   322,   323,   324,   325,   326,     0,     0,     0,
-     0,     0,   327,     0,     0,     0,   883,   313,   314,   315,
-   316,   317,     0,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,     0,
-     0,  1027,   313,   314,   315,   316,   317,     0,   318,   319,
-   320,   321,   322,   323,   324,   325,   326,     0,     0,     0,
-     0,     0,   327,     0,     0,     0,  1029,   313,   314,   315,
-   316,   317,     0,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,     0,
-     0,  1031,   313,   314,   315,   316,   317,     0,   318,   319,
-   320,   321,   322,   323,   324,   325,   326,     0,     0,     0,
-     0,     0,   327,     0,     0,     0,  1033,   313,   314,   315,
-   316,   317,     0,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,     0,
-     0,  1034,   313,   314,   315,   316,   317,     0,   318,   319,
-   320,   321,   322,   323,   324,   325,   326,     0,     0,     0,
-     0,     0,   327,     0,     0,     0,  1173,   313,   314,   315,
-   316,   317,     0,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   488,
-   313,   314,   315,   316,   317,     0,   318,   319,   320,   321,
-   322,   323,   324,   325,   326,     0,     0,     0,     0,     0,
-   327,     0,   519,   313,   314,   315,   316,   317,     0,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   520,   313,   314,   315,   316,
-   317,     0,   318,   319,   320,   321,   322,   323,   324,   325,
-   326,     0,     0,     0,     0,     0,   327,     0,   521,   313,
-   314,   315,   316,   317,     0,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   523,   313,   314,   315,   316,   317,     0,   318,   319,
-   320,   321,   322,   323,   324,   325,   326,     0,     0,     0,
-     0,     0,   327,     0,   525,   313,   314,   315,   316,   317,
-     0,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   526,   313,   314,
-   315,   316,   317,     0,   318,   319,   320,   321,   322,   323,
-   324,   325,   326,     0,     0,     0,     0,     0,   327,     0,
-   534,   313,   314,   315,   316,   317,     0,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   575,   313,   314,   315,   316,   317,     0,
-   318,   319,   320,   321,   322,   323,   324,   325,   326,     0,
-     0,     0,     0,     0,   327,     0,   576,   313,   314,   315,
-   316,   317,     0,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   579,
-   313,   314,   315,   316,   317,     0,   318,   319,   320,   321,
-   322,   323,   324,   325,   326,     0,     0,     0,     0,     0,
-   327,     0,   585,   313,   314,   315,   316,   317,     0,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   681,   313,   314,   315,   316,
-   317,     0,   318,   319,   320,   321,   322,   323,   324,   325,
-   326,     0,     0,     0,     0,     0,   327,     0,   683,   313,
-   314,   315,   316,   317,     0,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   685,   313,   314,   315,   316,   317,     0,   318,   319,
-   320,   321,   322,   323,   324,   325,   326,     0,     0,     0,
-     0,     0,   327,     0,   687,   313,   314,   315,   316,   317,
-     0,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   689,   313,   314,
-   315,   316,   317,     0,   318,   319,   320,   321,   322,   323,
-   324,   325,   326,     0,     0,     0,     0,     0,   327,     0,
-   691,   313,   314,   315,   316,   317,     0,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   693,   313,   314,   315,   316,   317,     0,
-   318,   319,   320,   321,   322,   323,   324,   325,   326,     0,
-     0,     0,     0,     0,   327,     0,   695,   313,   314,   315,
-   316,   317,     0,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   697,
-   313,   314,   315,   316,   317,     0,   318,   319,   320,   321,
-   322,   323,   324,   325,   326,     0,     0,     0,     0,     0,
-   327,     0,   699,   313,   314,   315,   316,   317,     0,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   701,   313,   314,   315,   316,
-   317,     0,   318,   319,   320,   321,   322,   323,   324,   325,
-   326,     0,     0,     0,     0,     0,   327,     0,   705,   313,
-   314,   315,   316,   317,     0,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   707,   313,   314,   315,   316,   317,     0,   318,   319,
-   320,   321,   322,   323,   324,   325,   326,     0,     0,     0,
-     0,     0,   327,     0,   709,   313,   314,   315,   316,   317,
-     0,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   711,   313,   314,
-   315,   316,   317,     0,   318,   319,   320,   321,   322,   323,
-   324,   325,   326,     0,     0,     0,     0,     0,   327,     0,
-   713,   313,   314,   315,   316,   317,     0,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   715,   313,   314,   315,   316,   317,     0,
-   318,   319,   320,   321,   322,   323,   324,   325,   326,     0,
-     0,     0,     0,     0,   327,     0,   750,   313,   314,   315,
-   316,   317,     0,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   752,
-   313,   314,   315,   316,   317,     0,   318,   319,   320,   321,
-   322,   323,   324,   325,   326,     0,     0,     0,     0,     0,
-   327,     0,   765,   313,   314,   315,   316,   317,     0,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,   766,   313,   314,   315,   316,
-   317,     0,   318,   319,   320,   321,   322,   323,   324,   325,
-   326,     0,     0,     0,     0,     0,   327,     0,   767,   313,
-   314,   315,   316,   317,     0,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,   771,   313,   314,   315,   316,   317,     0,   318,   319,
-   320,   321,   322,   323,   324,   325,   326,     0,     0,     0,
-     0,     0,   327,     0,   772,   313,   314,   315,   316,   317,
-     0,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,   773,   313,   314,
-   315,   316,   317,     0,   318,   319,   320,   321,   322,   323,
-   324,   325,   326,     0,     0,     0,     0,     0,   327,     0,
-   774,   313,   314,   315,   316,   317,     0,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,   775,   313,   314,   315,   316,   317,     0,
-   318,   319,   320,   321,   322,   323,   324,   325,   326,     0,
-     0,     0,     0,     0,   327,     0,   798,   313,   314,   315,
-   316,   317,     0,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,   805,
-   313,   314,   315,   316,   317,     0,   318,   319,   320,   321,
-   322,   323,   324,   325,   326,     0,     0,     0,     0,     0,
-   327,     0,  1026,   313,   314,   315,   316,   317,     0,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,  1028,   313,   314,   315,   316,
-   317,     0,   318,   319,   320,   321,   322,   323,   324,   325,
-   326,     0,     0,     0,     0,     0,   327,     0,  1030,   313,
-   314,   315,   316,   317,     0,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,  1032,   313,   314,   315,   316,   317,     0,   318,   319,
-   320,   321,   322,   323,   324,   325,   326,     0,     0,     0,
-     0,     0,   327,     0,  1096,   313,   314,   315,   316,   317,
-     0,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,  1197,   313,   314,
-   315,   316,   317,     0,   318,   319,   320,   321,   322,   323,
-   324,   325,   326,     0,     0,     0,     0,     0,   327,     0,
-  1226,   313,   314,   315,   316,   317,     0,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,  1329,   313,   314,   315,   316,   317,     0,
-   318,   319,   320,   321,   322,   323,   324,   325,   326,     0,
-     0,     0,     0,     0,   327,     0,  1333,   313,   314,   315,
-   316,   317,     0,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,  1335,
-   313,   314,   315,   316,   317,     0,   318,   319,   320,   321,
-   322,   323,   324,   325,   326,     0,     0,     0,     0,     0,
-   327,     0,  1453,   313,   314,   315,   316,   317,     0,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,  1482,   313,   314,   315,   316,
-   317,     0,   318,   319,   320,   321,   322,   323,   324,   325,
-   326,     0,     0,     0,     0,     0,   327,     0,  1484,   313,
-   314,   315,   316,   317,     0,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,  1486,   313,   314,   315,   316,   317,     0,   318,   319,
-   320,   321,   322,   323,   324,   325,   326,     0,     0,     0,
-     0,     0,   327,     0,  1488,   313,   314,   315,   316,   317,
-     0,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,  1489,   313,   314,
-   315,   316,   317,     0,   318,   319,   320,   321,   322,   323,
-   324,   325,   326,     0,     0,     0,     0,     0,   327,     0,
-  1490,   313,   314,   315,   316,   317,     0,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,  1512,   313,   314,   315,   316,   317,     0,
-   318,   319,   320,   321,   322,   323,   324,   325,   326,     0,
-     0,     0,     0,     0,   327,     0,  1617,   313,   314,   315,
-   316,   317,     0,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,  1772,
-   313,   314,   315,   316,   317,     0,   318,   319,   320,   321,
-   322,   323,   324,   325,   326,     0,     0,     0,     0,     0,
-   327,     0,  1773,   313,   314,   315,   316,   317,     0,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,  1774,   313,   314,   315,   316,
-   317,     0,   318,   319,   320,   321,   322,   323,   324,   325,
-   326,     0,     0,     0,     0,     0,   327,     0,  1936,   313,
-   314,   315,   316,   317,     0,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,  1937,   313,   314,   315,   316,   317,     0,   318,   319,
-   320,   321,   322,   323,   324,   325,   326,     0,     0,     0,
-     0,     0,   327,     0,  1938,   313,   314,   315,   316,   317,
-     0,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,  2059,   313,   314,
-   315,   316,   317,     0,   318,   319,   320,   321,   322,   323,
-   324,   325,   326,     0,     0,     0,     0,     0,   327,     0,
-  2060,   313,   314,   315,   316,   317,     0,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,  2061,   313,   314,   315,   316,   317,     0,
-   318,   319,   320,   321,   322,   323,   324,   325,   326,     0,
-     0,     0,     0,     0,   327,     0,  2062,   313,   314,   315,
-   316,   317,     0,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,  2063,
-   313,   314,   315,   316,   317,     0,   318,   319,   320,   321,
-   322,   323,   324,   325,   326,     0,     0,     0,     0,     0,
-   327,     0,  2064,   313,   314,   315,   316,   317,     0,   318,
-   319,   320,   321,   322,   323,   324,   325,   326,     0,     0,
-     0,     0,     0,   327,     0,  2174,   313,   314,   315,   316,
-   317,     0,   318,   319,   320,   321,   322,   323,   324,   325,
-   326,     0,     0,     0,     0,     0,   327,     0,  2175,   313,
-   314,   315,   316,   317,     0,   318,   319,   320,   321,   322,
-   323,   324,   325,   326,     0,     0,     0,     0,     0,   327,
-     0,  2176,   313,   314,   315,   316,   317,     0,   318,   319,
-   320,   321,   322,   323,   324,   325,   326,     0,     0,     0,
-     0,     0,   327,     0,  2234,   313,   314,   315,   316,   317,
-     0,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     0,     0,     0,     0,     0,   327,     0,  2235,   313,   314,
-   315,   316,   317,     0,   318,   319,   320,   321,   322,   323,
-   324,   325,   326,     0,     0,     0,     0,     0,   327,     0,
-  2236,   313,   314,   315,   316,   317,     0,   318,   319,   320,
-   321,   322,   323,   324,   325,   326,     0,     0,     0,     0,
-     0,   327,     0,  2294,   313,   314,   315,   316,   317,     0,
-   318,   319,   320,   321,   322,   323,   324,   325,   326,     0,
-     0,     0,     0,     0,   327,     0,  2295,   313,   314,   315,
-   316,   317,     0,   318,   319,   320,   321,   322,   323,   324,
-   325,   326,     0,     0,     0,     0,     0,   327,     0,  2296,
-   313,   314,   315,   316,   317,     0,   318,   319,   320,   321,
-   322,   323,   324,   325,   326,     0,     0,     0,     0,     0,
-   327
+     0,    55,    56,    57,     0,     0,     0,     0,    53,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,    67,
+     0,     0,   312,   313,   314,   315,   316,   589,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,    55,    56,    57,
+     0,     0,   326,     0,     0,     0,     0,     0,     0,     0,
+     0,   770,  1524,  1525,     0,    67,     0,     0,     0,     0,
+  1530,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,  1542,  1543,   312,   313,   314,   315,   316,     0,   317,
+   318,   319,   320,   321,   322,   323,   324,   325,    -7,     1,
+     0,   -12,   -55,   326,     0,     0,     0,     0,     0,     0,
+     0,     0,   772,     0,     0,     0,     0,   590,     0,     0,
+     0,     0,     0,     0,     0,  1585,  1586,     0,     0,     0,
+     0,   -55,     0,     0,     0,   -55,   -55,   -55,   -55,   -55,
+   -55,   -55,   -55,   -55,     0,   -55,   -55,   -55,   -55,   -55,
+   -55,   -55,   -55,   805,     0,     0,   -55,   -55,   -55,   -55,
+   -55,   -55,   -55,     0,   -55,   -55,   -55,   -55,   -55,   565,
+    27,    28,   566,   567,    31,   568,    33,     0,    34,     0,
+    36,    37,    38,     0,    40,    41,     0,     0,     0,     0,
+  1635,     0,     0,     0,     0,  1642,   -55,   -55,   -55,   -55,
+     0,    53,     0,     0,   -55,     0,   -55,     0,   -55,   -55,
+   -55,   -55,   -55,   -55,   -55,   -55,   -55,   -55,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    55,    56,    57,     0,     0,     0,   -12,   -12,   -12,   -12,
+   -12,   -12,   -12,   -12,     0,     0,     0,     0,    67,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,    -7,    -7,     0,    -7,     0,     0,     0,     0,   213,
+   312,   313,   314,   315,   316,     0,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,  1730,     0,     0,     0,     0,
+   326,     0,     0,     0,   627,  1740,   630,   631,   632,   633,
+   634,   635,   636,   637,   638,   639,   640,   641,   642,   643,
+   644,   645,   646,   647,   648,   649,   650,   651,   652,   653,
+   654,   655,   630,   631,   632,   633,   634,   635,   636,   637,
+   638,   639,   640,   641,   642,   643,   644,   645,   646,   647,
+   648,   649,   650,   651,   652,   653,   654,   655,   214,   215,
+   216,     0,     0,     0,     0,     0,   217,   218,   219,   220,
+   221,   222,   223,   224,   225,   226,     0,     0,    23,     0,
+     0,     0,     0,     0,   227,   228,   229,   230,   231,   232,
+   233,   234,   235,   236,  1815,   237,   238,   239,   240,   241,
+   242,     0,     0,     0,     0,     0,     0,    24,     0,     0,
+     0,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+     0,    34,    35,    36,    37,    38,    39,    40,    41,     0,
+     0,     0,    42,    43,    44,    45,    46,    47,    48,   656,
+    49,    50,    51,    52,    53,     0,     0,     0,   312,   313,
+   314,   315,   316,  1868,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,  1003,     0,     0,   326,     0,
+     0,     0,    54,    55,    56,    57,     0,   773,     0,     0,
+    58,     0,    59,     0,    60,    61,    62,    63,    64,    65,
+    66,    67,    68,    69,     0,     0,     0,     0,     0,     0,
+     0,   312,   313,   314,   315,   316,  1922,   317,   318,   319,
+   320,   321,   322,   323,   324,   325,     0,     0,     0,     0,
+     0,   326,     0,     0,     0,   312,   313,   314,   315,   316,
+   914,   317,   318,   319,   320,   321,   322,   323,   324,   325,
+     0,     0,     0,     0,     0,   326,     0,     0,     0,     0,
+     0,     0,     0,     0,   939,     0,     0,     0,     0,  1967,
+   312,   313,   314,   315,   316,     0,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,     0,     0,     0,     0,     0,     0,     0,  1202,
+     0,     0,   312,   313,   314,   315,   316,  2005,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,     0,     0,   312,   313,   314,   315,
+   316,  1407,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,     0,     0,
+   312,   313,   314,   315,   316,  1408,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,     0,     0,   312,   313,   314,   315,   316,  1466,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,     0,     0,   312,   313,
+   314,   315,   316,  1472,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+     0,     0,   312,   313,   314,   315,   316,  1475,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,     0,     0,   312,   313,   314,   315,
+   316,  1478,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,     0,     0,
+   312,   313,   314,   315,   316,  1479,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,     0,     0,   312,   313,   314,   315,   316,  1526,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,     0,     0,   312,   313,
+   314,   315,   316,  1588,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+     0,     0,   312,   313,   314,   315,   316,  1591,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,     0,     0,   312,   313,   314,   315,
+   316,  1593,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,     0,     0,
+   312,   313,   314,   315,   316,  1840,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,     0,     0,   312,   313,   314,   315,   316,  1894,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   489,     0,     0,     0,
+     0,   551,   312,   313,   314,   315,   316,     0,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,   552,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,   583,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,   705,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,   706,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,   719,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,   720,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,   721,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,   722,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,   723,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,   724,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,   786,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,   787,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,   788,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,   937,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,   938,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,   958,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1097,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1098,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1112,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1113,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1144,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1145,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1146,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1147,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1148,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1149,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1150,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1151,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1152,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1153,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1154,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1155,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1156,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1157,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1158,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1159,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1160,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1161,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1162,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1163,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1164,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1165,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1166,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1167,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1168,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1169,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1185,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1302,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1303,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1317,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1318,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1327,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1330,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1341,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1346,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1349,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1351,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1352,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1353,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1354,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1355,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1356,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1357,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1358,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1359,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1360,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1361,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1362,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1363,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1364,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1365,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1366,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1367,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1368,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1369,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1370,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1371,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1372,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1373,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1374,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1375,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1376,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1380,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1488,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1500,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1501,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1502,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1503,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1504,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1505,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1506,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1507,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1508,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1509,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1510,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1511,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1512,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1513,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1514,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1515,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1516,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1517,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1518,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1519,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1520,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1522,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1606,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1607,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1608,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1609,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1610,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1611,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1612,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1613,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1614,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1615,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1616,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1617,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1618,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1619,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1620,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1621,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1622,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1623,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1624,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1625,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1626,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1703,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1704,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1705,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1706,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1707,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1708,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1709,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1710,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1711,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1712,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1713,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1714,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1715,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1716,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1717,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1718,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1719,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1720,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1721,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1722,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1723,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1780,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1787,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1788,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1789,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1790,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1791,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1792,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1793,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1794,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1795,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1796,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1797,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1798,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1799,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1800,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1801,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1802,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1803,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1804,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1839,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1847,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1848,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1849,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1850,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1851,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1852,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1853,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1854,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1855,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1856,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1857,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1858,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1859,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1860,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1861,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1862,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1863,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1864,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1903,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1904,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1905,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1906,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1907,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1908,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1909,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1910,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1911,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1912,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1913,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1914,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1915,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1916,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1917,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1918,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1919,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1920,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1952,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1953,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1954,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1955,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1956,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1957,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1958,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1959,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1960,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1961,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1962,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1963,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1964,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1965,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1966,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1990,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1991,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1992,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1993,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1994,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  1995,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  1996,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  1997,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  1998,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  1999,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  2000,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  2001,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  2002,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  2003,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  2004,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  2034,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  2035,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  2036,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  2037,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  2038,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  2039,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  2040,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  2041,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  2042,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  2043,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  2044,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  2045,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  2046,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  2047,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  2048,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  2078,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  2079,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  2080,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  2081,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  2082,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  2083,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  2084,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  2085,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  2086,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  2109,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  2110,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  2111,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  2112,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  2113,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  2114,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  2115,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  2116,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  2117,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  2151,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  2152,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  2153,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  2154,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  2155,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  2156,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  2157,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  2158,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  2159,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  2181,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  2182,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  2183,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  2184,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  2185,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  2186,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  2199,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  2200,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  2201,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  2202,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  2203,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  2204,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  2220,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  2221,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  2222,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  2223,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  2224,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  2225,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  2244,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  2245,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  2246,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  2256,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  2257,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  2258,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  2271,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  2272,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  2273,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  2289,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  2290,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  2291,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  2295,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   312,   313,
+   314,   315,   316,  2296,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   312,   313,   314,   315,   316,  2297,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   312,   313,   314,   315,   316,  2301,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   312,   313,   314,   315,   316,  2302,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   312,   313,   314,   315,
+   316,  2303,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,     0,     0,
+   684,   312,   313,   314,   315,   316,     0,   317,   318,   319,
+   320,   321,   322,   323,   324,   325,     0,     0,     0,     0,
+     0,   326,     0,     0,     0,   686,   312,   313,   314,   315,
+   316,     0,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,     0,     0,
+   688,   312,   313,   314,   315,   316,     0,   317,   318,   319,
+   320,   321,   322,   323,   324,   325,     0,     0,     0,     0,
+     0,   326,     0,     0,     0,   690,   312,   313,   314,   315,
+   316,     0,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,     0,     0,
+   692,   312,   313,   314,   315,   316,     0,   317,   318,   319,
+   320,   321,   322,   323,   324,   325,     0,     0,     0,     0,
+     0,   326,     0,     0,     0,   694,   312,   313,   314,   315,
+   316,     0,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,     0,     0,
+   696,   312,   313,   314,   315,   316,     0,   317,   318,   319,
+   320,   321,   322,   323,   324,   325,     0,     0,     0,     0,
+     0,   326,     0,     0,     0,   698,   312,   313,   314,   315,
+   316,     0,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,     0,     0,
+   700,   312,   313,   314,   315,   316,     0,   317,   318,   319,
+   320,   321,   322,   323,   324,   325,     0,     0,     0,     0,
+     0,   326,     0,     0,     0,   702,   312,   313,   314,   315,
+   316,     0,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,     0,     0,
+   704,   312,   313,   314,   315,   316,     0,   317,   318,   319,
+   320,   321,   322,   323,   324,   325,     0,     0,     0,     0,
+     0,   326,     0,     0,     0,   708,   312,   313,   314,   315,
+   316,     0,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,     0,     0,
+   710,   312,   313,   314,   315,   316,     0,   317,   318,   319,
+   320,   321,   322,   323,   324,   325,     0,     0,     0,     0,
+     0,   326,     0,     0,     0,   712,   312,   313,   314,   315,
+   316,     0,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,     0,     0,
+   714,   312,   313,   314,   315,   316,     0,   317,   318,   319,
+   320,   321,   322,   323,   324,   325,     0,     0,     0,     0,
+     0,   326,     0,     0,     0,   716,   312,   313,   314,   315,
+   316,     0,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,     0,     0,
+   718,   312,   313,   314,   315,   316,     0,   317,   318,   319,
+   320,   321,   322,   323,   324,   325,     0,     0,     0,     0,
+     0,   326,     0,     0,     0,   789,   312,   313,   314,   315,
+   316,     0,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,     0,     0,
+   795,   312,   313,   314,   315,   316,     0,   317,   318,   319,
+   320,   321,   322,   323,   324,   325,     0,     0,     0,     0,
+     0,   326,     0,     0,     0,   886,   312,   313,   314,   315,
+   316,     0,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,     0,     0,
+  1031,   312,   313,   314,   315,   316,     0,   317,   318,   319,
+   320,   321,   322,   323,   324,   325,     0,     0,     0,     0,
+     0,   326,     0,     0,     0,  1033,   312,   313,   314,   315,
+   316,     0,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,     0,     0,
+  1035,   312,   313,   314,   315,   316,     0,   317,   318,   319,
+   320,   321,   322,   323,   324,   325,     0,     0,     0,     0,
+     0,   326,     0,     0,     0,  1037,   312,   313,   314,   315,
+   316,     0,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,     0,     0,
+  1038,   312,   313,   314,   315,   316,     0,   317,   318,   319,
+   320,   321,   322,   323,   324,   325,     0,     0,     0,     0,
+     0,   326,     0,     0,     0,  1178,   312,   313,   314,   315,
+   316,     0,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   520,   312,
+   313,   314,   315,   316,     0,   317,   318,   319,   320,   321,
+   322,   323,   324,   325,     0,     0,     0,     0,     0,   326,
+     0,   521,   312,   313,   314,   315,   316,     0,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   522,   312,   313,   314,   315,   316,
+     0,   317,   318,   319,   320,   321,   322,   323,   324,   325,
+     0,     0,     0,     0,     0,   326,     0,   524,   312,   313,
+   314,   315,   316,     0,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   526,   312,   313,   314,   315,   316,     0,   317,   318,   319,
+   320,   321,   322,   323,   324,   325,     0,     0,     0,     0,
+     0,   326,     0,   527,   312,   313,   314,   315,   316,     0,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   535,   312,   313,   314,
+   315,   316,     0,   317,   318,   319,   320,   321,   322,   323,
+   324,   325,     0,     0,     0,     0,     0,   326,     0,   577,
+   312,   313,   314,   315,   316,     0,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   578,   312,   313,   314,   315,   316,     0,   317,
+   318,   319,   320,   321,   322,   323,   324,   325,     0,     0,
+     0,     0,     0,   326,     0,   581,   312,   313,   314,   315,
+   316,     0,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   587,   312,
+   313,   314,   315,   316,     0,   317,   318,   319,   320,   321,
+   322,   323,   324,   325,     0,     0,     0,     0,     0,   326,
+     0,   683,   312,   313,   314,   315,   316,     0,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   685,   312,   313,   314,   315,   316,
+     0,   317,   318,   319,   320,   321,   322,   323,   324,   325,
+     0,     0,     0,     0,     0,   326,     0,   687,   312,   313,
+   314,   315,   316,     0,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   689,   312,   313,   314,   315,   316,     0,   317,   318,   319,
+   320,   321,   322,   323,   324,   325,     0,     0,     0,     0,
+     0,   326,     0,   691,   312,   313,   314,   315,   316,     0,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   693,   312,   313,   314,
+   315,   316,     0,   317,   318,   319,   320,   321,   322,   323,
+   324,   325,     0,     0,     0,     0,     0,   326,     0,   695,
+   312,   313,   314,   315,   316,     0,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   697,   312,   313,   314,   315,   316,     0,   317,
+   318,   319,   320,   321,   322,   323,   324,   325,     0,     0,
+     0,     0,     0,   326,     0,   699,   312,   313,   314,   315,
+   316,     0,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   701,   312,
+   313,   314,   315,   316,     0,   317,   318,   319,   320,   321,
+   322,   323,   324,   325,     0,     0,     0,     0,     0,   326,
+     0,   703,   312,   313,   314,   315,   316,     0,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   707,   312,   313,   314,   315,   316,
+     0,   317,   318,   319,   320,   321,   322,   323,   324,   325,
+     0,     0,     0,     0,     0,   326,     0,   709,   312,   313,
+   314,   315,   316,     0,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   711,   312,   313,   314,   315,   316,     0,   317,   318,   319,
+   320,   321,   322,   323,   324,   325,     0,     0,     0,     0,
+     0,   326,     0,   713,   312,   313,   314,   315,   316,     0,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   715,   312,   313,   314,
+   315,   316,     0,   317,   318,   319,   320,   321,   322,   323,
+   324,   325,     0,     0,     0,     0,     0,   326,     0,   717,
+   312,   313,   314,   315,   316,     0,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   752,   312,   313,   314,   315,   316,     0,   317,
+   318,   319,   320,   321,   322,   323,   324,   325,     0,     0,
+     0,     0,     0,   326,     0,   754,   312,   313,   314,   315,
+   316,     0,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,   767,   312,
+   313,   314,   315,   316,     0,   317,   318,   319,   320,   321,
+   322,   323,   324,   325,     0,     0,     0,     0,     0,   326,
+     0,   768,   312,   313,   314,   315,   316,     0,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,   769,   312,   313,   314,   315,   316,
+     0,   317,   318,   319,   320,   321,   322,   323,   324,   325,
+     0,     0,     0,     0,     0,   326,     0,   774,   312,   313,
+   314,   315,   316,     0,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+   775,   312,   313,   314,   315,   316,     0,   317,   318,   319,
+   320,   321,   322,   323,   324,   325,     0,     0,     0,     0,
+     0,   326,     0,   776,   312,   313,   314,   315,   316,     0,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,   777,   312,   313,   314,
+   315,   316,     0,   317,   318,   319,   320,   321,   322,   323,
+   324,   325,     0,     0,     0,     0,     0,   326,     0,   778,
+   312,   313,   314,   315,   316,     0,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,   801,   312,   313,   314,   315,   316,     0,   317,
+   318,   319,   320,   321,   322,   323,   324,   325,     0,     0,
+     0,     0,     0,   326,     0,   808,   312,   313,   314,   315,
+   316,     0,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,  1030,   312,
+   313,   314,   315,   316,     0,   317,   318,   319,   320,   321,
+   322,   323,   324,   325,     0,     0,     0,     0,     0,   326,
+     0,  1032,   312,   313,   314,   315,   316,     0,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,  1034,   312,   313,   314,   315,   316,
+     0,   317,   318,   319,   320,   321,   322,   323,   324,   325,
+     0,     0,     0,     0,     0,   326,     0,  1036,   312,   313,
+   314,   315,   316,     0,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+  1101,   312,   313,   314,   315,   316,     0,   317,   318,   319,
+   320,   321,   322,   323,   324,   325,     0,     0,     0,     0,
+     0,   326,     0,  1203,   312,   313,   314,   315,   316,     0,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,  1232,   312,   313,   314,
+   315,   316,     0,   317,   318,   319,   320,   321,   322,   323,
+   324,   325,     0,     0,     0,     0,     0,   326,     0,  1336,
+   312,   313,   314,   315,   316,     0,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,  1340,   312,   313,   314,   315,   316,     0,   317,
+   318,   319,   320,   321,   322,   323,   324,   325,     0,     0,
+     0,     0,     0,   326,     0,  1342,   312,   313,   314,   315,
+   316,     0,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,  1461,   312,
+   313,   314,   315,   316,     0,   317,   318,   319,   320,   321,
+   322,   323,   324,   325,     0,     0,     0,     0,     0,   326,
+     0,  1462,   312,   313,   314,   315,   316,     0,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,  1491,   312,   313,   314,   315,   316,
+     0,   317,   318,   319,   320,   321,   322,   323,   324,   325,
+     0,     0,     0,     0,     0,   326,     0,  1493,   312,   313,
+   314,   315,   316,     0,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+  1495,   312,   313,   314,   315,   316,     0,   317,   318,   319,
+   320,   321,   322,   323,   324,   325,     0,     0,     0,     0,
+     0,   326,     0,  1497,   312,   313,   314,   315,   316,     0,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,  1498,   312,   313,   314,
+   315,   316,     0,   317,   318,   319,   320,   321,   322,   323,
+   324,   325,     0,     0,     0,     0,     0,   326,     0,  1499,
+   312,   313,   314,   315,   316,     0,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,  1521,   312,   313,   314,   315,   316,     0,   317,
+   318,   319,   320,   321,   322,   323,   324,   325,     0,     0,
+     0,     0,     0,   326,     0,  1628,   312,   313,   314,   315,
+   316,     0,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,  1784,   312,
+   313,   314,   315,   316,     0,   317,   318,   319,   320,   321,
+   322,   323,   324,   325,     0,     0,     0,     0,     0,   326,
+     0,  1785,   312,   313,   314,   315,   316,     0,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,  1786,   312,   313,   314,   315,   316,
+     0,   317,   318,   319,   320,   321,   322,   323,   324,   325,
+     0,     0,     0,     0,     0,   326,     0,  1949,   312,   313,
+   314,   315,   316,     0,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+  1950,   312,   313,   314,   315,   316,     0,   317,   318,   319,
+   320,   321,   322,   323,   324,   325,     0,     0,     0,     0,
+     0,   326,     0,  1951,   312,   313,   314,   315,   316,     0,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,  2072,   312,   313,   314,
+   315,   316,     0,   317,   318,   319,   320,   321,   322,   323,
+   324,   325,     0,     0,     0,     0,     0,   326,     0,  2073,
+   312,   313,   314,   315,   316,     0,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,  2074,   312,   313,   314,   315,   316,     0,   317,
+   318,   319,   320,   321,   322,   323,   324,   325,     0,     0,
+     0,     0,     0,   326,     0,  2075,   312,   313,   314,   315,
+   316,     0,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,  2076,   312,
+   313,   314,   315,   316,     0,   317,   318,   319,   320,   321,
+   322,   323,   324,   325,     0,     0,     0,     0,     0,   326,
+     0,  2077,   312,   313,   314,   315,   316,     0,   317,   318,
+   319,   320,   321,   322,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,     0,  2187,   312,   313,   314,   315,   316,
+     0,   317,   318,   319,   320,   321,   322,   323,   324,   325,
+     0,     0,     0,     0,     0,   326,     0,  2188,   312,   313,
+   314,   315,   316,     0,   317,   318,   319,   320,   321,   322,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,     0,
+  2189,   312,   313,   314,   315,   316,     0,   317,   318,   319,
+   320,   321,   322,   323,   324,   325,     0,     0,     0,     0,
+     0,   326,     0,  2247,   312,   313,   314,   315,   316,     0,
+   317,   318,   319,   320,   321,   322,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,     0,  2248,   312,   313,   314,
+   315,   316,     0,   317,   318,   319,   320,   321,   322,   323,
+   324,   325,     0,     0,     0,     0,     0,   326,     0,  2249,
+   312,   313,   314,   315,   316,     0,   317,   318,   319,   320,
+   321,   322,   323,   324,   325,     0,     0,     0,     0,     0,
+   326,     0,  2307,   312,   313,   314,   315,   316,     0,   317,
+   318,   319,   320,   321,   322,   323,   324,   325,     0,     0,
+     0,     0,     0,   326,     0,  2308,   312,   313,   314,   315,
+   316,     0,   317,   318,   319,   320,   321,   322,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,     0,  2309
 };
 
 static const short yycheck[] = {    23,
-    95,   306,     7,    23,     7,   370,   741,   184,   341,     4,
-   187,     4,  1114,     4,    44,    45,     4,     4,   103,     5,
-    65,  1123,     4,     3,     8,    65,     5,    42,  1130,    66,
-     6,   208,    66,   210,    71,     6,  1307,    71,  1309,     6,
-    66,     4,     5,   167,    65,    71,    68,    69,    34,    35,
-    36,  1216,     5,     7,    87,    34,    35,    36,   186,   187,
-   193,   194,   198,     4,   186,   187,   199,   203,   201,    66,
-     6,    34,    35,    36,    71,   203,   198,   205,    49,   186,
-   187,    34,    35,    36,     4,   186,   187,     6,    66,     5,
-   186,   187,   304,    71,   186,   187,   203,   197,   205,   199,
-    38,     6,   203,    41,   205,   186,   187,   203,   132,   133,
-   134,   203,   197,   137,   138,     6,   197,   141,    34,    35,
-    36,   186,   187,   204,   148,   149,   150,   198,   152,   341,
-   154,   155,   203,   157,   186,   187,   197,    66,   199,   204,
-    66,   171,    71,   173,     6,    71,   198,   197,    66,   179,
-   174,   175,   197,    71,     7,  1385,   197,   197,  1323,  1389,
-   895,     6,  1392,   204,   204,   106,   107,    65,   205,   193,
-   194,   205,   196,     6,   198,     7,    66,   201,   202,   205,
-   213,    71,   197,   204,   197,   518,   106,   107,   197,   494,
-   199,   204,   176,   177,   178,   179,   180,   530,   182,   183,
-   184,   185,   186,   187,   188,   189,   190,   187,   205,   204,
-     6,   204,   196,   204,   391,   197,   204,   204,   204,   186,
-   187,   251,  1324,   199,   248,   204,  1328,   205,   197,   253,
+     4,   370,    93,    23,     4,   340,     4,   305,     4,  1119,
+   743,     4,     4,   182,    44,    45,   185,     4,  1128,     5,
+     4,     6,    65,     3,     6,  1135,     7,     5,    42,     6,
+    66,  1314,    65,  1316,   212,    71,  1222,   206,    66,   208,
+    66,   103,     6,    71,   197,    71,    68,    69,    34,    35,
+    36,   204,   197,    65,   199,     4,    34,    35,    36,    66,
+    66,    66,     5,    66,    71,    71,    71,   197,    71,   186,
+   187,     6,     4,     5,   204,   167,    66,    66,     4,   186,
+   187,    71,    71,   186,   187,    49,   203,     5,   205,   193,
+   194,    34,    35,    36,    66,   199,   203,   201,   205,    71,
+   203,   303,    34,    35,    36,     7,   130,   131,   132,   186,
+   187,   135,   136,   186,   187,   139,    34,    35,    36,   197,
+   197,   199,   146,   147,   148,   197,   150,   204,   152,   153,
+   203,   155,   205,   186,   187,   197,   186,   187,   340,   169,
+     6,   171,   186,   187,  1330,   186,   187,   177,   172,   173,
+   198,   204,     6,   203,   197,   203,  1393,   106,   107,   203,
+  1397,   204,   203,  1400,    65,   898,   197,   191,   192,   205,
+   194,   204,   196,   204,     7,   199,   200,   205,     6,   205,
+   106,   107,   198,   197,   519,   197,     6,   203,   197,   186,
+   187,   172,   173,   174,   175,   204,   531,   495,   205,   205,
+   205,   198,   205,     6,   186,   187,   204,   187,   204,   186,
+   187,   204,   204,   197,   199,   205,   205,   204,   204,     6,
+   250,  1331,   391,   247,   402,  1335,   204,   197,   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,   280,   281,   282,   283,
    284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
-   294,     8,   197,   295,   296,   297,   205,   193,   194,   205,
-   304,   186,   187,   198,   197,   201,   306,   205,   203,   313,
+   186,   187,   294,   295,   296,   193,   194,    38,    38,   303,
+    41,    41,    42,   201,    44,   305,   197,   203,   312,   313,
    314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
-   324,   325,   326,   327,   197,  1576,   518,    46,  1579,   333,
-  1581,   335,  1047,     7,   197,   205,   340,   341,   530,   172,
-   173,   174,   175,    42,   198,   349,   350,   351,   352,   203,
-   354,   355,   356,   357,   358,   359,   360,   367,   368,   198,
-   172,   173,   174,   175,   203,   197,   193,   194,   372,   373,
-   374,   375,   186,   187,   201,   379,   186,   187,   197,     6,
-   199,   193,   194,   387,   369,   370,   369,   370,   197,   201,
-   204,   197,   396,   203,  1476,  1477,  1478,  1479,   186,   187,
-   197,  1483,   186,   187,   197,     7,   186,   187,   186,   187,
-  1620,   204,    42,   726,  1624,    44,   204,  1627,    42,   203,
-  1671,   193,   194,   203,  1675,   203,  1677,   199,    55,   201,
-     6,     7,   186,   187,   193,   194,     8,   197,   438,   199,
-   199,    38,   201,   756,    41,    42,     3,   179,   180,   203,
-   182,   183,   184,   185,   186,   187,   188,   189,   190,   176,
-   177,   178,   179,   180,   196,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,   787,   788,   789,   790,    42,   196,
-   186,   187,   198,   487,   193,   194,   490,   203,   205,   186,
-   187,    66,   496,   495,   494,     8,    71,   203,   172,   173,
-   174,   175,    56,    57,  1586,  1587,   203,  1717,  1590,   193,
-   194,  1721,   197,  1723,   518,   199,   197,   201,   199,   193,
-   194,     6,     7,   527,   528,   204,   530,    38,   532,   533,
-    41,    42,   204,    44,   726,   539,    42,     6,   548,   731,
-   188,   189,   190,     6,     4,   549,   550,   197,   196,   176,
-   177,   178,   179,   180,   558,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,   756,   197,   570,   199,     4,   196,
-   172,   173,   174,   175,   197,  1290,   199,   581,   197,   583,
-   584,   138,   139,   140,   141,   142,   143,   144,   145,   197,
-     6,   193,   194,    42,     4,   787,   788,   789,   790,  1681,
-   913,     3,   887,   888,   176,   177,   178,   179,   180,   197,
-   182,   183,   184,   185,   186,   187,   188,   189,   190,   197,
-   197,   199,   199,   625,   196,   625,   198,   186,   187,   188,
-   189,   190,     5,     3,     4,    41,    42,   196,    44,     9,
-    10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-    20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-    30,    31,    32,   176,   177,   178,   179,   180,    38,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,   197,    59,
-    60,    61,    62,   196,    64,   197,     6,   199,  1770,    59,
-    60,    61,    62,    63,    64,   197,     6,   199,   197,   703,
-   704,   123,   124,   125,   126,   127,   197,   197,   199,   199,
-   197,   197,   199,   717,   718,   719,   720,   721,   722,   723,
-     4,   913,   726,     6,     6,   727,   197,   731,   199,   197,
-   734,   199,   197,   197,   199,   199,  1081,   747,     5,   197,
-   744,   199,   197,   199,   199,   201,   203,   197,   205,  1831,
-   197,   203,   756,   205,   758,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,   839,   203,   203,   205,   205,   196,
-   203,     4,   205,   783,   784,   785,   204,   203,   203,   205,
-   205,   204,   197,   787,   788,   789,   790,     6,   197,   793,
-   794,   204,   203,   797,   205,   203,   203,   205,   205,   203,
-   810,   205,     6,   197,   808,   809,   203,   197,   205,   819,
-   203,   203,   205,   205,   197,   197,   186,   187,   203,   203,
-   205,   205,   192,   204,   203,   197,   205,   197,   203,   203,
-   205,   205,   202,   197,   204,   203,   203,   205,   205,   204,
-   844,   845,   846,   847,   848,   849,   850,   851,   852,   853,
+   324,   325,   326,   197,  1587,   186,   187,  1590,   332,  1592,
+   334,   193,   194,   193,   194,   339,   340,   519,  1051,   199,
+   197,   201,   199,   204,   348,   349,   350,   351,   352,   531,
+   354,   355,   356,   357,   358,   359,   360,   367,   368,   172,
+   173,   174,   175,    46,   186,   187,     7,   197,   372,   373,
+   374,   375,   186,   187,   198,   379,     7,   186,   187,   203,
+   193,   194,   204,   387,   198,   369,   370,   197,   201,   369,
+   370,   197,   396,   199,   203,  1485,  1486,  1487,  1488,   186,
+   187,   197,  1492,   199,   186,   187,   186,   187,   186,   187,
+   188,   189,   190,   728,    42,  1632,   203,     8,   196,  1636,
+  1683,   203,  1639,   203,  1687,   197,  1689,   179,   180,   197,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,   439,
+   188,   189,   190,   758,   196,     3,     4,   197,   196,   199,
+   197,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+    18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+    28,    29,    30,    31,    32,   790,   791,   792,   793,   197,
+    38,     3,   193,   194,   488,     6,     7,   491,   199,    42,
+   201,   193,   194,   497,   496,   495,   197,   199,   199,   201,
+    42,    59,    60,    61,    62,    63,    64,  1597,  1598,     8,
+    42,  1601,  1729,   193,   194,   519,  1733,   198,  1735,    56,
+    57,   201,   203,   198,   528,   529,    44,   531,   203,   533,
+   534,   172,   173,   174,   175,    38,   197,   541,    41,    42,
+   550,   172,   173,   174,   175,   198,   728,   551,   552,   204,
+   203,   733,   193,   194,     6,     7,   560,   123,   124,   125,
+   126,   127,   193,   194,    59,    60,    61,    62,   572,    64,
+   163,   164,   204,   166,    41,    42,   758,    44,   197,   583,
+   199,   585,   586,  1296,     6,   176,   177,   178,   179,   180,
+     6,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+   197,   916,   199,  1693,   199,   196,   201,    42,   790,   791,
+   792,   793,   890,   891,   205,     4,   138,   139,   140,   141,
+   142,   143,   144,   145,   197,   627,   199,   627,   186,   187,
+   197,     6,   199,   197,   192,   199,   197,   197,   199,   197,
+   197,     3,     4,   197,   202,   199,   204,     9,    10,    11,
+    12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+    22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+    32,   197,   197,   199,   199,     4,     4,   176,   177,   178,
+   179,   180,   197,   182,   183,   184,   185,   186,   187,   188,
+   189,   190,  1782,   197,    42,   199,   197,   196,   199,     6,
+   197,   705,   706,   197,   197,   199,   199,   197,     5,   199,
+   197,   203,   203,   205,   205,   719,   720,   721,   722,   723,
+   724,   725,   197,   203,   728,   205,   203,   729,   205,   733,
+     4,   203,   736,   205,   916,     6,   197,  1086,   203,   749,
+   205,   203,   746,   205,   203,   203,   205,   205,    55,   203,
+   203,   205,   205,  1843,   758,     6,   760,   178,   179,   180,
+     5,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+   203,   842,   205,   204,   204,   196,   786,   787,   788,   203,
+   203,   205,   205,   203,   197,   205,   790,   791,   792,   793,
+   197,   197,   796,   797,     8,   203,   800,   205,   203,   203,
+   205,   205,   203,   813,   205,   197,   204,   811,   812,   203,
+   197,   205,   822,   182,   183,   184,   185,   186,   187,   188,
+   189,   190,     4,   204,   186,   187,   203,   196,   205,   203,
+   192,   205,   203,   197,   205,   197,   197,   203,   200,   205,
+   202,   197,   204,   847,   848,   849,   850,   851,   852,   853,
    854,   855,   856,   857,   858,   859,   860,   861,   862,   863,
-   864,   865,   866,   867,   868,   869,   176,   177,   178,   179,
-   180,   204,   182,   183,   184,   185,   186,   187,   188,   189,
-   190,     6,   203,   883,   205,   203,   196,   205,   888,   203,
-   199,   205,   896,   201,   176,   177,   178,   179,   180,   204,
-   182,   183,   184,   185,   186,   187,   188,   189,   190,   913,
-   203,   915,   205,   917,   196,   178,   179,   180,   109,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,   932,   933,
-   934,     6,  2014,   196,   203,   203,   205,   205,   203,   203,
-   205,   205,   203,   203,   205,   205,   959,   203,   197,   205,
-   954,   955,   956,   203,     6,   205,  1301,   176,   177,   178,
+   864,   865,   866,   867,   868,   869,   870,   871,   872,   176,
+   177,   178,   179,   180,   197,   182,   183,   184,   185,   186,
+   187,   188,   189,   190,   204,   203,   886,   205,   203,   196,
+   205,   891,   203,   199,   205,   899,   204,   176,   177,   178,
    179,   180,     6,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,   176,   177,   178,   179,   180,   196,   182,   183,
-   184,   185,   186,   187,   188,   189,   190,   203,   203,   205,
-   205,     6,   196,     5,     3,     4,   203,   997,   205,   197,
-     9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-    19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-    29,    30,    31,    32,   203,   203,   205,   205,   197,     6,
-   197,   197,   197,   197,   197,   197,  1040,  1039,   197,   197,
-   197,   197,  1052,   197,   197,   176,   177,   178,   179,   180,
-   197,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-   197,  1136,  1066,  1067,  1068,   196,   198,   197,   197,   200,
-   197,   197,  1082,  1077,  1084,  1077,  1086,   197,   197,   197,
-   197,   197,   197,   197,   197,   197,   197,     4,  1092,  1093,
-   196,     7,  1105,   203,   203,     7,  1081,   201,  1081,   199,
-  1104,   204,     7,  1107,     7,   198,     7,     6,   104,     7,
-   204,   106,   168,  1117,     5,     5,     5,     5,     5,     5,
-  1124,  1125,  1126,     5,     5,     5,     5,  1131,     5,     5,
-     5,  1135,     5,     5,     5,  1139,  1140,  1141,  1142,  1143,
+   189,   190,   916,   203,   918,   205,   920,   196,   203,   203,
+   205,   205,   204,   203,   203,   205,   205,   203,   203,   205,
+   205,   201,   936,   937,   938,   109,   203,  2027,   205,   203,
+   203,   205,   205,   203,   203,   205,   205,     6,   197,     6,
+     6,     3,  1110,   197,   958,   959,   960,   197,   197,  1308,
+   197,   197,   176,   177,   178,   179,   180,   197,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,   197,   197,   197,
+   197,   197,   196,     5,   198,   197,   197,   197,   197,   197,
+   197,   197,   197,   197,   197,   197,     3,     4,   197,   197,
+   197,  1001,     9,    10,    11,    12,    13,    14,    15,    16,
+    17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+    27,    28,    29,    30,    31,    32,   197,   197,   197,   197,
+   197,   203,   198,     6,     4,   196,     7,   201,   203,     7,
+  1044,  1043,   199,     7,   204,     7,  1056,   198,     7,     7,
+   104,   176,   177,   178,   179,   180,   106,   182,   183,   184,
+   185,   186,   187,   188,   189,   190,  1070,  1071,  1072,  1073,
+  1141,   196,   204,     5,     5,   200,  1234,  1087,  1082,  1089,
+  1082,  1091,     5,     5,     5,     5,     5,     5,     5,     5,
+     5,     5,     5,  1097,  1098,     5,     5,     5,     5,     5,
+     5,     5,  1086,     5,     5,  1109,  1086,     5,  1112,   156,
+     5,   203,     6,     5,     5,     5,     3,     5,  1122,     5,
+   198,     6,     5,     4,     6,  1129,  1130,  1131,   200,     6,
+   201,     7,  1136,     7,     7,     7,  1140,     7,     7,     7,
   1144,  1145,  1146,  1147,  1148,  1149,  1150,  1151,  1152,  1153,
   1154,  1155,  1156,  1157,  1158,  1159,  1160,  1161,  1162,  1163,
-  1164,   176,   177,   178,   179,   180,     5,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,  1180,   186,   187,     5,
-     5,   196,     5,   192,     5,     5,     5,   156,   197,     5,
-     5,   200,     5,   202,  1198,   204,     5,     3,     5,   176,
-   177,   178,   179,   180,     5,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,     6,  1228,     3,     4,  1222,   196,
-  1224,     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,     3,     4,   203,     5,
-   198,     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,     4,   176,   177,   178,
-   179,   180,   200,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,  1296,     6,  1304,     6,  1306,   196,  1308,     7,
-  1304,     7,  1306,     7,  1308,     7,  1310,  1311,     7,     7,
-     7,   205,   205,  1317,     7,     7,  1301,   201,  1301,   204,
-     7,   204,  1326,   197,   169,   203,     5,     4,     6,   197,
-  1334,   201,     6,   198,   203,  1339,   203,   203,  1342,   203,
-  1344,  1345,  1346,  1347,  1348,  1349,  1350,  1351,  1352,  1353,
+  1164,  1165,  1166,  1167,  1168,  1169,   205,   205,   204,   204,
+  1328,     7,     7,   197,     7,   201,   168,     5,   203,   186,
+   187,  1185,   203,   203,   203,   192,   203,   203,   203,   203,
+   197,   203,   203,   200,   203,   202,     6,   204,   203,   203,
+  1204,   203,   203,   176,   177,   178,   179,   180,   203,   182,
+   183,   184,   185,   186,   187,   188,   189,   190,     6,   203,
+   203,     3,     4,   196,  1228,   203,  1230,     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,   203,   203,   203,   203,     9,    10,    11,
+    12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+    22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+    32,     4,   176,   177,   178,   179,   180,   198,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,   197,  1302,  1303,
+   203,  1311,   196,  1313,     6,  1315,   203,  1311,   197,  1313,
+   203,  1315,     6,  1317,  1318,     6,     6,     6,   197,   203,
+  1324,     7,   197,   203,  1308,   203,  1484,     7,  1308,  1333,
+     7,   197,   203,   197,   197,   197,   203,  1341,   197,   197,
+   197,   197,  1346,   197,   197,  1349,   197,  1351,  1352,  1353,
   1354,  1355,  1356,  1357,  1358,  1359,  1360,  1361,  1362,  1363,
-  1364,  1365,  1366,  1367,  1368,  1369,   203,   203,   203,  1379,
-   203,   203,  1376,   203,  1378,  1379,  1380,     6,     6,   203,
-   197,   203,   200,   197,   176,   177,   178,   179,   180,  1402,
-   182,   183,   184,   185,   186,   187,   188,   189,   190,   186,
-   187,   203,     7,   203,   196,   192,   203,   203,   203,   203,
-   197,   197,   203,   200,   203,   202,     6,   204,     7,   203,
-   203,   203,   203,   203,   203,   203,   203,   203,   203,   186,
-   187,   197,   197,   197,   197,   192,   197,   197,   197,   197,
-   197,     7,   204,   200,   197,   202,   197,   204,   197,   197,
-   197,   197,   197,   197,  1458,   197,   197,   197,     6,   197,
-  1464,   197,  1475,  1467,   197,   176,   177,   178,   179,   180,
-   199,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     7,     7,     7,     7,     7,   196,     7,  1491,  1492,  1493,
-  1494,  1495,  1496,  1497,  1498,  1499,  1500,  1501,  1502,  1503,
-  1504,  1505,  1506,  1507,  1508,  1509,  1510,  1511,     7,  1513,
-     7,     7,     7,     7,     4,     6,   165,     6,     4,     7,
-     7,     3,  1535,     3,     3,     3,     4,   188,     3,     3,
-     3,     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,     3,     3,     3,
-     3,     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,     3,     3,  1592,  1593,
-  1594,  1595,  1596,  1597,  1598,  1599,  1600,  1601,  1602,  1603,
+  1364,  1365,  1366,  1367,  1368,  1369,  1370,  1371,  1372,  1373,
+  1374,  1375,  1376,   197,   197,   197,   197,  1387,   197,   197,
+  1384,   197,  1386,  1387,  1388,   197,   197,  1545,   176,   177,
+   178,   179,   180,   197,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,   197,   186,   187,   199,     8,   196,   200,
+   192,     7,   204,     7,     7,   197,     7,     7,   200,     7,
+   202,     7,   204,     7,     7,     7,     7,     7,     4,     6,
+   169,     6,     4,     7,   186,   187,     7,     3,  1596,     3,
+   192,     3,   188,     3,     3,   197,     3,     3,     3,     3,
+   202,     3,   204,     3,     3,     3,     3,   198,   198,     5,
+     5,     3,     3,  1467,   201,   197,     6,     6,     4,  1473,
+     7,     6,  1476,     6,   176,   177,   178,   179,   180,     6,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,     6,
+     6,     6,   197,   204,   196,     6,  1500,  1501,  1502,  1503,
+  1504,  1505,  1506,  1507,  1508,  1509,  1510,  1511,  1512,  1513,
+  1514,  1515,  1516,  1517,  1518,  1519,  1520,     6,  1522,   176,
+   177,   178,   179,   180,   165,   182,   183,   184,   185,   186,
+   187,   188,   189,   190,  1692,   105,   204,     3,     4,   196,
+   203,   198,   203,     9,    10,    11,    12,    13,    14,    15,
+    16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+    26,    27,    28,    29,    30,    31,    32,   198,   203,   198,
+   203,   198,   198,   203,   198,   176,   177,   178,   179,   180,
+  1738,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+   203,   203,   203,   203,   203,   196,   203,   203,   203,  1603,
   1604,  1605,  1606,  1607,  1608,  1609,  1610,  1611,  1612,  1613,
-  1614,  1615,     3,     5,  1616,     5,     3,     3,     6,  1632,
-   198,     4,     6,   198,     6,   201,     7,   156,   176,   177,
-   178,   179,   180,   162,   182,   183,   184,   185,   186,   187,
-   188,   189,   190,     6,     6,     6,     6,     6,   196,   204,
-   197,     6,     6,   105,   204,   198,   185,   203,   203,   203,
-   198,   190,   191,   203,   198,     6,   203,  1680,   203,     6,
-   203,   203,   203,   203,     4,  1679,   198,     6,   198,     6,
-   198,  1685,   198,  1687,   203,  1689,   203,  1691,  1692,  1693,
-  1694,  1695,  1696,  1697,  1698,  1699,  1700,  1701,  1702,  1703,
-  1704,  1705,  1706,  1707,  1708,  1709,  1710,  1711,   186,   187,
-  1712,   203,  1714,  1726,   192,     6,     6,   201,   203,   197,
-   203,     6,   203,   200,   202,     6,   204,   203,     6,     6,
-     6,   203,   203,   203,     6,     6,     6,     6,   186,   187,
-     6,     6,     6,     4,   192,     8,     6,     6,     6,   197,
-     6,     3,     7,   105,   202,     6,   204,     3,     6,   188,
-     3,     6,     6,  1767,  1768,     6,     3,     6,     6,     3,
-     6,  1775,  1776,  1777,  1778,  1779,  1780,  1781,  1782,  1783,
-  1784,  1785,  1786,  1787,  1788,  1789,  1790,  1791,  1792,     3,
-     3,  1793,   176,   177,   178,   179,   180,     3,   182,   183,
-   184,   185,   186,   187,   188,   189,   190,     6,     6,     6,
-   204,     7,   196,     6,     6,   204,   201,     6,   102,   107,
-     8,   200,   198,  1827,   198,   205,   204,   204,  1832,  1833,
-  1834,  1835,  1836,  1837,  1838,  1839,  1840,  1841,  1842,  1843,
-  1844,  1845,  1846,  1847,  1848,  1849,  1850,  1851,  1852,   165,
-     3,     4,   198,   204,   203,   203,     9,    10,    11,    12,
-    13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-    23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-  1884,   203,  1886,   203,  1888,    38,  1890,  1891,  1892,  1893,
-  1894,  1895,  1896,  1897,  1898,  1899,  1900,  1901,  1902,  1903,
-  1904,  1905,  1906,  1907,   203,   198,    59,    60,    61,    62,
-    63,    64,   198,   176,   177,   178,   179,   180,   198,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,   203,   203,
-   198,   198,   105,   196,     3,  1939,  1940,  1941,  1942,  1943,
-  1944,  1945,  1946,  1947,  1948,  1949,  1950,  1951,  1952,  1953,
-   203,     6,     6,     3,     6,     6,   205,     6,     6,     6,
-   489,     6,     3,     6,     6,     5,     5,   198,     6,   204,
-  1974,  1975,  1976,  1977,  1978,  1979,  1980,  1981,  1982,  1983,
-  1984,  1985,  1986,  1987,  1988,  1989,  1990,  1991,   176,   177,
-   178,   179,   180,   204,   182,   183,   184,   185,   186,   187,
-   188,   189,   190,   203,   205,     6,     6,     6,   196,   203,
-     6,  2015,   203,  2017,   198,  2019,   203,  2021,  2022,  2023,
-  2024,  2025,  2026,  2027,  2028,  2029,  2030,  2031,  2032,  2033,
-  2034,  2035,   203,   186,   187,   198,   203,   203,     6,   192,
-     6,     6,     6,     6,   197,     6,     6,     6,     6,   202,
-     6,     6,     5,     5,   204,   203,   205,   204,   204,   203,
-   203,  2065,  2066,  2067,  2068,  2069,  2070,  2071,  2072,  2073,
-   203,   198,   198,   203,   203,     6,   204,     6,     6,   204,
-   204,   204,   203,     6,   102,   165,  2090,  2091,  2092,  2093,
-  2094,  2095,  2096,  2097,  2098,  2099,  2100,  2101,  2102,  2103,
-  2104,   176,   177,   178,   179,   180,     6,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,     6,     5,     5,   204,
-   204,   196,  2126,   204,  2128,   200,  2130,   205,  2132,   203,
-  2134,   204,  2136,   203,  2138,  2139,  2140,  2141,  2142,  2143,
-  2144,  2145,  2146,   176,   177,   178,   179,   180,   204,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,     6,   205,
-     6,   198,   198,   196,  2168,  2169,  2170,  2171,  2172,  2173,
-   203,     6,   205,     6,     6,   102,     6,     6,     6,     6,
-     6,     6,  2186,  2187,  2188,  2189,  2190,  2191,  2192,  2193,
-  2194,   205,   204,   203,   203,     6,     6,     6,     6,   170,
-     6,   171,   204,  2207,  2208,  2209,  2210,  2211,  2212,  2213,
-   203,  2215,   203,  2217,   204,   204,     6,   203,   198,   748,
-   749,     6,   751,     6,   753,   754,     6,  2231,  2232,  2233,
-     6,     6,   204,     6,   203,     6,   203,     6,     6,  2243,
-  2244,  2245,  2246,  2247,  2248,     6,     6,   204,   198,     6,
-   204,     6,   203,     6,  2258,  2259,  2260,  2261,   204,  2263,
-   204,  2265,   204,   204,   204,   204,   795,   796,     6,   204,
-   799,   204,  2276,  2277,  2278,     6,     6,     6,  2282,  2283,
-  2284,     6,   204,   204,  2288,  2289,  2290,   816,   817,   204,
-   204,     6,     6,   822,   823,   204,  2300,  2301,  2302,   204,
-   829,   204,   831,     6,     6,  2309,     6,  2311,     0,  2313,
-     0,     7,     3,     4,     5,   627,     7,  1043,     9,    10,
+  1614,  1615,  1616,  1617,  1618,  1619,  1620,  1621,  1622,  1623,
+  1624,  1625,  1626,  1781,   203,  1627,     6,     6,     4,   198,
+   203,   198,     6,   201,     6,   154,   176,   177,   178,   179,
+   180,   160,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,     6,   203,     6,     6,     6,   196,     6,     6,   203,
+   203,     6,     6,     6,   183,   203,   200,     6,     6,   188,
+   189,   176,   177,   178,   179,   180,     6,   182,   183,   184,
+   185,   186,   187,   188,   189,   190,     6,  1691,     6,   203,
+     6,   196,     6,  1697,     6,  1699,     6,  1701,   203,  1703,
+  1704,  1705,  1706,  1707,  1708,  1709,  1710,  1711,  1712,  1713,
+  1714,  1715,  1716,  1717,  1718,  1719,  1720,  1721,  1722,  1723,
+   186,   187,  1724,     6,  1726,     7,   192,   105,     3,     6,
+     3,   197,     6,   188,     6,     6,   202,     3,   204,     6,
+     3,     6,     3,     4,     6,     3,     6,     3,     9,    10,
     11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-    31,    32,     7,    34,    35,    36,     3,     4,  1098,    -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,   905,    -1,   907,     8,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   918,
-   919,   920,    -1,    -1,    -1,   924,   925,   926,   927,   928,
-   929,   930,     3,     4,     5,    -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,    34,    35,    36,     3,     4,    -1,    -1,
+    31,    32,     3,     3,     6,  1779,  1780,     4,     6,   201,
+     6,   200,     7,  1787,  1788,  1789,  1790,  1791,  1792,  1793,
+  1794,  1795,  1796,  1797,  1798,  1799,  1800,  1801,  1802,  1803,
+  1804,     6,     6,  1805,   176,   177,   178,   179,   180,   204,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,   205,
+   204,   204,   204,   204,   196,   198,   102,   107,   203,   198,
+   198,     6,   203,   203,   198,  1839,   203,   203,   203,   198,
+  1844,  1845,  1846,  1847,  1848,  1849,  1850,  1851,  1852,  1853,
+  1854,  1855,  1856,  1857,  1858,  1859,  1860,  1861,  1862,  1863,
+  1864,   198,   203,     3,     4,   198,   198,   203,   105,     9,
+    10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+    20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+    30,    31,    32,  1897,     6,  1899,     3,  1901,    38,  1903,
+  1904,  1905,  1906,  1907,  1908,  1909,  1910,  1911,  1912,  1913,
+  1914,  1915,  1916,  1917,  1918,  1919,  1920,     6,     6,    59,
+    60,    61,    62,    63,    64,   186,   187,     3,     6,     6,
+     5,   192,     6,     6,     6,     6,   197,     3,     6,     6,
+     5,   202,     6,   165,     6,   198,   205,   204,  1952,  1953,
+  1954,  1955,  1956,  1957,  1958,  1959,  1960,  1961,  1962,  1963,
+  1964,  1965,  1966,   204,   203,   205,     6,   203,   203,   203,
+   203,   490,     6,     6,   198,   198,     6,     6,     6,     6,
+     6,     6,   203,  1987,  1988,  1989,  1990,  1991,  1992,  1993,
+  1994,  1995,  1996,  1997,  1998,  1999,  2000,  2001,  2002,  2003,
+  2004,   176,   177,   178,   179,   180,   203,   182,   183,   184,
+   185,   186,   187,   188,   189,   190,     6,     6,     6,     6,
+     6,   196,     6,     5,  2028,     5,  2030,   204,  2032,   203,
+  2034,  2035,  2036,  2037,  2038,  2039,  2040,  2041,  2042,  2043,
+  2044,  2045,  2046,  2047,  2048,   204,   186,   187,   204,   203,
+   205,   203,   192,   203,   198,   198,   203,   197,   203,     6,
+     6,   203,   202,   204,     6,   204,   204,   204,     6,     6,
+   102,     6,     6,     5,  2078,  2079,  2080,  2081,  2082,  2083,
+  2084,  2085,  2086,     5,   204,   204,   204,   203,   205,   204,
+   203,   205,   198,   198,   204,   165,     6,     6,     6,  2103,
+  2104,  2105,  2106,  2107,  2108,  2109,  2110,  2111,  2112,  2113,
+  2114,  2115,  2116,  2117,   176,   177,   178,   179,   180,     6,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,   102,
+     6,     6,     6,     6,   196,  2139,     6,  2141,     6,  2143,
+     6,  2145,   205,  2147,   204,  2149,   203,  2151,  2152,  2153,
+  2154,  2155,  2156,  2157,  2158,  2159,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,     6,     6,     6,     6,     6,   196,  2181,  2182,  2183,
+  2184,  2185,  2186,   203,   203,   205,   203,   170,   204,   204,
+   204,     6,   171,   203,   198,  2199,  2200,  2201,  2202,  2203,
+  2204,  2205,  2206,  2207,     6,     6,     6,     6,     6,   203,
+   203,     6,   204,   204,     6,     6,  2220,  2221,  2222,  2223,
+  2224,  2225,  2226,   204,  2228,   203,  2230,   198,     6,   204,
+   204,   750,   751,     6,   753,   204,   755,   756,   204,   204,
+  2244,  2245,  2246,   204,     6,     6,     6,     6,     6,   204,
+   204,   204,  2256,  2257,  2258,  2259,  2260,  2261,     6,     6,
+     6,   204,     6,   204,   204,     6,     6,  2271,  2272,  2273,
+  2274,   204,  2276,   204,  2278,   204,     6,     6,     6,   798,
+   799,     6,     0,   802,     0,  2289,  2290,  2291,  1103,   629,
+     4,  2295,  2296,  2297,  1047,     4,     6,  2301,  2302,  2303,
+   819,   820,    -1,    -1,    -1,    -1,   825,   826,    -1,  2313,
+  2314,  2315,    -1,   832,    -1,   834,    -1,    -1,  2322,    -1,
+  2324,    -1,  2326,     3,     4,     5,    -1,     7,    -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,    34,    35,    36,     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,    -1,   908,
+    -1,   910,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   921,   922,   923,    -1,    -1,    -1,    -1,   928,
+   929,   930,   931,   932,   933,   934,     3,     4,     5,    -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,   176,   177,   178,   179,
-   180,    -1,   182,   183,   184,   185,   186,   187,   188,   189,
-   190,   172,   173,   174,   175,    -1,   196,    -1,   198,    -1,
-    -1,    -1,    -1,   203,    -1,   186,   187,    -1,    -1,    -1,
-    -1,   192,   193,   194,    -1,    -1,   197,    -1,   199,  1038,
-   201,   202,   176,   177,   178,   179,   180,    -1,   182,   183,
-   184,   185,   186,   187,   188,   189,   190,    -1,    -1,   186,
-   187,    -1,   196,    -1,    -1,   192,    -1,    -1,    -1,   203,
-   197,   205,    -1,    -1,    -1,   202,    -1,   176,   177,   178,
+    27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+     8,   176,   177,   178,   179,   180,    -1,   182,   183,   184,
+   185,   186,   187,   188,   189,   190,   176,   177,   178,   179,
+   180,   196,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,     8,    -1,    -1,    -1,    -1,   196,    -1,    -1,    -1,
+    -1,    -1,   172,   173,   174,   175,     8,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   186,   187,    -1,    -1,
+    -1,    -1,   192,   193,   194,    -1,    -1,   197,    -1,   199,
+    -1,   201,   202,  1042,    -1,   176,   177,   178,   179,   180,
+    -1,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+   186,   187,    -1,    -1,    -1,   196,   192,    -1,    -1,    -1,
+    -1,   197,   203,    -1,   205,    -1,   202,   176,   177,   178,
    179,   180,    -1,   182,   183,   184,   185,   186,   187,   188,
    189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,
-    -1,  1100,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1108,
-    -1,    -1,    -1,    -1,    -1,   186,   187,    -1,    -1,    -1,
-    -1,   192,    -1,    -1,    -1,    -1,   197,    -1,  1127,    -1,
-    -1,   202,    38,    39,    40,    41,    42,    43,    44,    45,
-    -1,    47,    -1,    49,    50,    51,    -1,    53,    54,   186,
+    -1,    -1,    -1,    -1,    -1,    -1,  1105,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,  1113,    -1,    -1,    -1,    -1,   186,
    187,    -1,    -1,    -1,    -1,   192,    -1,    -1,    -1,    -1,
-   197,    -1,    -1,    -1,    70,   202,    38,    39,    40,    41,
-    42,    43,    44,    45,    -1,    47,    -1,    49,    50,    51,
-    -1,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    99,   100,   101,    -1,    -1,    70,    -1,
-    -1,    38,    39,    40,    41,    42,    43,    44,    45,    -1,
-    47,   117,    49,    50,    51,    -1,    53,    54,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    99,   100,   101,
-    -1,    -1,    -1,    70,    -1,    38,    39,    40,    41,    42,
-    43,    44,    45,    -1,    47,   117,    49,    50,    51,    -1,
-    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    99,   100,   101,    -1,    -1,    70,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   176,   177,   178,   179,   180,
-   117,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    99,   100,   101,   205,
-    -1,    -1,   203,    -1,   205,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   117,  1314,    -1,  1316,    -1,    -1,
-    -1,  1320,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   205,    -1,    -1,    -1,  1336,    38,    39,
-    40,    41,    42,    43,    44,    45,    -1,    47,    -1,    49,
-    50,    51,    -1,    53,    54,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   205,    -1,
-    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,     0,     1,    -1,     3,     4,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    99,
-   100,   101,   205,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    33,    -1,    -1,   117,    37,    38,
-    39,    40,    41,    42,    43,    44,    45,    -1,    47,    48,
-    49,    50,    51,    52,    53,    54,    -1,    -1,    -1,    58,
-    59,    60,    61,    62,    63,    64,    -1,    66,    67,    68,
-    69,    70,    -1,    -1,  1453,    -1,   176,   177,   178,   179,
-   180,  1460,   182,   183,   184,   185,   186,   187,   188,   189,
-   190,    -1,  1471,  1472,    -1,    -1,   196,    -1,    -1,    98,
-    99,   100,   101,    -1,    -1,   205,    -1,   106,    -1,   108,
-    -1,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-   119,    -1,    -1,    -1,    -1,   205,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,  1515,    -1,    -1,   138,
-   139,   140,   141,   142,   143,   144,   145,    -1,    -1,    -1,
-    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   163,   164,    -1,   166,    72,    73,
-    74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-    84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-    94,    95,    96,    97,    -1,    -1,    -1,    -1,    -1,  1578,
-    -1,    -1,    -1,    -1,  1583,    72,    73,    74,    75,    76,
-    77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-    87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-    97,   120,   121,   122,    -1,    -1,    -1,    -1,    -1,   128,
-   129,   130,   131,   132,   133,   134,   135,   136,   137,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   146,   147,   148,
-   149,   150,   151,   152,   153,   154,   155,    -1,   157,   158,
-   159,   160,   161,   162,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,     4,    -1,    -1,
-    -1,    -1,    -1,  1672,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   205,    -1,  1682,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    33,    -1,    -1,    -1,
-    37,    38,    39,    40,    41,    42,    43,    44,    45,    -1,
-    47,    48,    49,    50,    51,    52,    53,    54,   205,    -1,
-    -1,    58,    59,    60,    61,    62,    63,    64,    -1,    66,
-    67,    68,    69,    70,    38,    39,    40,    41,    42,    43,
-    44,    45,    -1,    47,    -1,    49,    50,    51,    -1,    53,
-    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    98,    99,   100,   101,    -1,    70,    -1,    -1,   106,
-    -1,   108,  1771,   110,   111,   112,   113,   114,   115,   116,
-   117,   118,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    99,   100,   101,   176,   177,
+   197,    -1,    -1,  1132,    -1,   202,    -1,    -1,   176,   177,
    178,   179,   180,    -1,   182,   183,   184,   185,   186,   187,
-   188,   189,   190,   117,    -1,    -1,    -1,    -1,   196,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   205,    -1,    -1,
-    -1,  1830,   176,   177,   178,   179,   180,    -1,   182,   183,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   176,
+   177,   178,   179,   180,    -1,   182,   183,   184,   185,   186,
+   187,   188,   189,   190,   176,   177,   178,   179,   180,   196,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    38,    39,    40,    41,    42,
+    43,    44,    45,    -1,    47,    -1,    49,    50,    51,    -1,
+    53,    54,    -1,    -1,    -1,    -1,    -1,    38,    39,    40,
+    41,    42,    43,    44,    45,    -1,    47,    70,    49,    50,
+    51,    -1,    53,    54,   176,   177,   178,   179,   180,    -1,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    70,
+    -1,    -1,    -1,    -1,   196,    -1,    99,   100,   101,    -1,
+    38,    39,    40,    41,    42,    43,    44,    45,    -1,    47,
+    -1,    49,    50,    51,   117,    53,    54,    -1,    99,   100,
+   101,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    70,    -1,    -1,    -1,   117,   176,   177,   178,
+   179,   180,    -1,   182,   183,   184,   185,   186,   187,   188,
+   189,   190,  1321,    -1,  1323,    -1,    -1,   196,  1327,    -1,
+    -1,    99,   100,   101,    -1,    -1,   205,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,  1343,    -1,    -1,    -1,    -1,   117,
+    38,    39,    40,    41,    42,    43,    44,    45,    -1,    47,
+    -1,    49,    50,    51,    -1,    53,    54,    -1,    -1,    -1,
+    -1,    -1,   205,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    70,    -1,    -1,    -1,    38,    39,    40,    41,
+    42,    43,    44,    45,   205,    47,    -1,    49,    50,    51,
+    -1,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    99,   100,   101,    -1,    -1,    -1,    -1,    70,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   117,
+    -1,    -1,   176,   177,   178,   179,   180,   205,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    99,   100,   101,
+    -1,    -1,   196,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   205,  1461,  1462,    -1,   117,    -1,    -1,    -1,    -1,
+  1469,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,  1480,  1481,   176,   177,   178,   179,   180,    -1,   182,
+   183,   184,   185,   186,   187,   188,   189,   190,     0,     1,
+    -1,     3,     4,   196,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   205,    -1,    -1,    -1,    -1,   205,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,  1524,  1525,    -1,    -1,    -1,
+    -1,    33,    -1,    -1,    -1,    37,    38,    39,    40,    41,
+    42,    43,    44,    45,    -1,    47,    48,    49,    50,    51,
+    52,    53,    54,   205,    -1,    -1,    58,    59,    60,    61,
+    62,    63,    64,    -1,    66,    67,    68,    69,    70,    38,
+    39,    40,    41,    42,    43,    44,    45,    -1,    47,    -1,
+    49,    50,    51,    -1,    53,    54,    -1,    -1,    -1,    -1,
+  1589,    -1,    -1,    -1,    -1,  1594,    98,    99,   100,   101,
+    -1,    70,    -1,    -1,   106,    -1,   108,    -1,   110,   111,
+   112,   113,   114,   115,   116,   117,   118,   119,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    99,   100,   101,    -1,    -1,    -1,   138,   139,   140,   141,
+   142,   143,   144,   145,    -1,    -1,    -1,    -1,   117,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   163,   164,    -1,   166,    -1,    -1,    -1,    -1,    41,
+   176,   177,   178,   179,   180,    -1,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,  1684,    -1,    -1,    -1,    -1,
+   196,    -1,    -1,    -1,   200,  1694,    72,    73,    74,    75,
+    76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+    86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+    96,    97,    72,    73,    74,    75,    76,    77,    78,    79,
+    80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+    90,    91,    92,    93,    94,    95,    96,    97,   120,   121,
+   122,    -1,    -1,    -1,    -1,    -1,   128,   129,   130,   131,
+   132,   133,   134,   135,   136,   137,    -1,    -1,     4,    -1,
+    -1,    -1,    -1,    -1,   146,   147,   148,   149,   150,   151,
+   152,   153,   154,   155,  1783,   157,   158,   159,   160,   161,
+   162,    -1,    -1,    -1,    -1,    -1,    -1,    33,    -1,    -1,
+    -1,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+    -1,    47,    48,    49,    50,    51,    52,    53,    54,    -1,
+    -1,    -1,    58,    59,    60,    61,    62,    63,    64,   205,
+    66,    67,    68,    69,    70,    -1,    -1,    -1,   176,   177,
+   178,   179,   180,  1842,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,   205,    -1,    -1,   196,    -1,
+    -1,    -1,    98,    99,   100,   101,    -1,   205,    -1,    -1,
+   106,    -1,   108,    -1,   110,   111,   112,   113,   114,   115,
+   116,   117,   118,   119,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   176,   177,   178,   179,   180,  1895,   182,   183,   184,
+   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
+    -1,   196,    -1,    -1,    -1,   176,   177,   178,   179,   180,
+   205,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   205,    -1,    -1,    -1,    -1,  1948,
+   176,   177,   178,   179,   180,    -1,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   205,
+    -1,    -1,   176,   177,   178,   179,   180,  1986,   182,   183,
    184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
     -1,    -1,   196,    -1,    -1,    -1,   176,   177,   178,   179,
    180,   205,   182,   183,   184,   185,   186,   187,   188,   189,
    190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,    -1,
-    -1,    -1,    -1,  1882,    -1,   205,   176,   177,   178,   179,
-   180,    -1,   182,   183,   184,   185,   186,   187,   188,   189,
+   176,   177,   178,   179,   180,   205,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,    -1,    -1,   176,   177,   178,   179,   180,   205,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,    -1,    -1,   176,   177,
+   178,   179,   180,   205,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+    -1,    -1,   176,   177,   178,   179,   180,   205,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,    -1,    -1,   176,   177,   178,   179,
+   180,   205,   182,   183,   184,   185,   186,   187,   188,   189,
    190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,    -1,
    176,   177,   178,   179,   180,   205,   182,   183,   184,   185,
    186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
-   196,    -1,    -1,    -1,    -1,    -1,  1935,    -1,    -1,   205,
-   176,   177,   178,   179,   180,    -1,   182,   183,   184,   185,
+   196,    -1,    -1,    -1,   176,   177,   178,   179,   180,   205,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,    -1,    -1,   176,   177,
+   178,   179,   180,   205,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+    -1,    -1,   176,   177,   178,   179,   180,   205,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,    -1,    -1,   176,   177,   178,   179,
+   180,   205,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,    -1,
+   176,   177,   178,   179,   180,   205,   182,   183,   184,   185,
    186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
-   196,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   205,
-    -1,    -1,    -1,    -1,  1973,   176,   177,   178,   179,   180,
-    -1,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,    -1,   176,
-   177,   178,   179,   180,   205,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,    -1,    -1,   176,   177,   178,   179,   180,   205,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,    -1,    -1,   176,   177,   178,
-   179,   180,   205,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,
-    -1,   176,   177,   178,   179,   180,   205,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,    -1,    -1,   176,   177,   178,   179,   180,
-   205,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,    -1,   176,
-   177,   178,   179,   180,   205,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,    -1,    -1,   176,   177,   178,   179,   180,   205,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,    -1,    -1,   176,   177,   178,
-   179,   180,   205,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,
-    -1,   176,   177,   178,   179,   180,   205,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,    -1,    -1,   176,   177,   178,   179,   180,
-   205,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,    -1,   176,
-   177,   178,   179,   180,   205,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,    -1,    -1,   176,   177,   178,   179,   180,   205,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,
-   177,   178,   179,   180,   203,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,
-    -1,   176,   177,   178,   179,   180,   203,   182,   183,   184,
-   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
-    -1,   196,    -1,   176,   177,   178,   179,   180,   203,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,
-   203,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,
-   179,   180,   203,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,
-    -1,   200,   176,   177,   178,   179,   180,    -1,   182,   183,
+   196,    -1,    -1,    -1,   176,   177,   178,   179,   180,   205,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   198,    -1,    -1,    -1,
+    -1,   203,   176,   177,   178,   179,   180,    -1,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
    184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
-    -1,    -1,   196,    -1,    -1,    -1,   200,   176,   177,   178,
-   179,   180,    -1,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,
-    -1,   200,   176,   177,   178,   179,   180,    -1,   182,   183,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
    184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
-    -1,    -1,   196,    -1,    -1,    -1,   200,   176,   177,   178,
-   179,   180,    -1,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,
-    -1,   200,   176,   177,   178,   179,   180,    -1,   182,   183,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
    184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
-    -1,    -1,   196,    -1,    -1,    -1,   200,   176,   177,   178,
-   179,   180,    -1,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,
-    -1,   200,   176,   177,   178,   179,   180,    -1,   182,   183,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
    184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
-    -1,    -1,   196,    -1,    -1,    -1,   200,   176,   177,   178,
-   179,   180,    -1,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,
-    -1,   200,   176,   177,   178,   179,   180,    -1,   182,   183,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
    184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
-    -1,    -1,   196,    -1,    -1,    -1,   200,   176,   177,   178,
-   179,   180,    -1,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,
-    -1,   200,   176,   177,   178,   179,   180,    -1,   182,   183,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
    184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
-    -1,    -1,   196,    -1,    -1,    -1,   200,   176,   177,   178,
-   179,   180,    -1,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,
-    -1,   200,   176,   177,   178,   179,   180,    -1,   182,   183,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
    184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
-    -1,    -1,   196,    -1,    -1,    -1,   200,   176,   177,   178,
-   179,   180,    -1,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,
-    -1,   200,   176,   177,   178,   179,   180,    -1,   182,   183,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
    184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
-    -1,    -1,   196,    -1,    -1,    -1,   200,   176,   177,   178,
-   179,   180,    -1,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,
-    -1,   200,   176,   177,   178,   179,   180,    -1,   182,   183,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
    184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
-    -1,    -1,   196,    -1,    -1,    -1,   200,   176,   177,   178,
-   179,   180,    -1,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,
-    -1,   200,   176,   177,   178,   179,   180,    -1,   182,   183,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
    184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
-    -1,    -1,   196,    -1,    -1,    -1,   200,   176,   177,   178,
-   179,   180,    -1,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,
-    -1,   200,   176,   177,   178,   179,   180,    -1,   182,   183,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
    184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
-    -1,    -1,   196,    -1,    -1,    -1,   200,   176,   177,   178,
-   179,   180,    -1,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,
-    -1,   200,   176,   177,   178,   179,   180,    -1,   182,   183,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
    184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
-    -1,    -1,   196,    -1,    -1,    -1,   200,   176,   177,   178,
-   179,   180,    -1,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,
-    -1,   200,   176,   177,   178,   179,   180,    -1,   182,   183,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
    184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
-    -1,    -1,   196,    -1,    -1,    -1,   200,   176,   177,   178,
-   179,   180,    -1,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   198,
-   176,   177,   178,   179,   180,    -1,   182,   183,   184,   185,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
    186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
-   196,    -1,   198,   176,   177,   178,   179,   180,    -1,   182,
-   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
-    -1,    -1,    -1,   196,    -1,   198,   176,   177,   178,   179,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   176,   177,
+   178,   179,   180,   203,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+   176,   177,   178,   179,   180,   203,   182,   183,   184,   185,
+   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
+   196,    -1,   176,   177,   178,   179,   180,   203,   182,   183,
+   184,   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,
+    -1,    -1,   196,    -1,   176,   177,   178,   179,   180,   203,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,    -1,
+    -1,    -1,    -1,    -1,   196,    -1,   176,   177,   178,   179,
+   180,   203,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,    -1,
+   200,   176,   177,   178,   179,   180,    -1,   182,   183,   184,
+   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
+    -1,   196,    -1,    -1,    -1,   200,   176,   177,   178,   179,
+   180,    -1,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,    -1,
+   200,   176,   177,   178,   179,   180,    -1,   182,   183,   184,
+   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
+    -1,   196,    -1,    -1,    -1,   200,   176,   177,   178,   179,
+   180,    -1,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,    -1,
+   200,   176,   177,   178,   179,   180,    -1,   182,   183,   184,
+   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
+    -1,   196,    -1,    -1,    -1,   200,   176,   177,   178,   179,
+   180,    -1,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,    -1,
+   200,   176,   177,   178,   179,   180,    -1,   182,   183,   184,
+   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
+    -1,   196,    -1,    -1,    -1,   200,   176,   177,   178,   179,
+   180,    -1,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,    -1,
+   200,   176,   177,   178,   179,   180,    -1,   182,   183,   184,
+   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
+    -1,   196,    -1,    -1,    -1,   200,   176,   177,   178,   179,
+   180,    -1,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,    -1,
+   200,   176,   177,   178,   179,   180,    -1,   182,   183,   184,
+   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
+    -1,   196,    -1,    -1,    -1,   200,   176,   177,   178,   179,
+   180,    -1,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,    -1,
+   200,   176,   177,   178,   179,   180,    -1,   182,   183,   184,
+   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
+    -1,   196,    -1,    -1,    -1,   200,   176,   177,   178,   179,
+   180,    -1,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,    -1,
+   200,   176,   177,   178,   179,   180,    -1,   182,   183,   184,
+   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
+    -1,   196,    -1,    -1,    -1,   200,   176,   177,   178,   179,
+   180,    -1,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,    -1,
+   200,   176,   177,   178,   179,   180,    -1,   182,   183,   184,
+   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
+    -1,   196,    -1,    -1,    -1,   200,   176,   177,   178,   179,
+   180,    -1,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,    -1,
+   200,   176,   177,   178,   179,   180,    -1,   182,   183,   184,
+   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
+    -1,   196,    -1,    -1,    -1,   200,   176,   177,   178,   179,
+   180,    -1,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,    -1,
+   200,   176,   177,   178,   179,   180,    -1,   182,   183,   184,
+   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
+    -1,   196,    -1,    -1,    -1,   200,   176,   177,   178,   179,
+   180,    -1,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,    -1,
+   200,   176,   177,   178,   179,   180,    -1,   182,   183,   184,
+   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
+    -1,   196,    -1,    -1,    -1,   200,   176,   177,   178,   179,
+   180,    -1,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,    -1,
+   200,   176,   177,   178,   179,   180,    -1,   182,   183,   184,
+   185,   186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,
+    -1,   196,    -1,    -1,    -1,   200,   176,   177,   178,   179,
    180,    -1,   182,   183,   184,   185,   186,   187,   188,   189,
    190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   198,   176,
    177,   178,   179,   180,    -1,   182,   183,   184,   185,   186,
@@ -4074,7 +4080,11 @@ static const short yycheck[] = {    23,
    189,   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   198,
    176,   177,   178,   179,   180,    -1,   182,   183,   184,   185,
    186,   187,   188,   189,   190,    -1,    -1,    -1,    -1,    -1,
-   196
+   196,    -1,   198,   176,   177,   178,   179,   180,    -1,   182,
+   183,   184,   185,   186,   187,   188,   189,   190,    -1,    -1,
+    -1,    -1,    -1,   196,    -1,   198,   176,   177,   178,   179,
+   180,    -1,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,    -1,    -1,    -1,    -1,    -1,   196,    -1,   198
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
 #line 3 "/usr/share/bison.simple"
@@ -4620,250 +4630,247 @@ yyreduce:
   switch (yyn) {
 
 case 4:
-#line 171 "Gmsh.y"
-{ yyerrok ; return 1; ;
+#line 165 "Gmsh.y"
+{ yyerrok; return 1; ;
     break;}
 case 5:
-#line 177 "Gmsh.y"
+#line 171 "Gmsh.y"
 { yyval.d = yyvsp[0].d; ;
     break;}
 case 6:
-#line 178 "Gmsh.y"
+#line 172 "Gmsh.y"
 { yyval.d = -yyvsp[0].d; ;
     break;}
-case 7:
-#line 183 "Gmsh.y"
+case 9:
+#line 182 "Gmsh.y"
 {
-      yymsg(INFO, "STL file format");
-      STL_Surf = Create_Surface(1, MSH_SURF_STL);
+      yymsg(INFO, "Reading STL solid");
+      STL_Surf = Create_Surface(NEWSURFACE(), MSH_SURF_STL);
       STL_Surf->STL = new STL_Data;
       return 1;
     ;
     break;}
-case 8:
-#line 197 "Gmsh.y"
+case 10:
+#line 196 "Gmsh.y"
 {
       STL_Surf->STL->Add_Facet(yyvsp[-12].d, yyvsp[-11].d, yyvsp[-10].d,
 			       yyvsp[-8].d, yyvsp[-7].d, yyvsp[-6].d,
-			       yyvsp[-4].d, yyvsp[-3].d, yyvsp[-2].d);
+			       yyvsp[-4].d, yyvsp[-3].d, yyvsp[-2].d, CTX.geom.stl_create_elementary);
       return 1;
     ;
     break;}
-case 9:
-#line 204 "Gmsh.y"
+case 11:
+#line 203 "Gmsh.y"
 {
-      yymsg(INFO, "STL file format read");
-      Tree_Add(THEM->Surfaces, &STL_Surf);
+      if(CTX.geom.stl_create_elementary){
+	STL_Surf->STL->ReplaceDuplicate();
+	if(CTX.geom.stl_create_physical)
+	  STL_Surf->STL->CreatePhysicalSurface();
+      }
+      else{
+	Tree_Add(THEM->Surfaces, &STL_Surf);
+      }
+      yymsg(INFO, "Read STL solid");
       return 1;
     ;
     break;}
-case 12:
-#line 219 "Gmsh.y"
+case 14:
+#line 225 "Gmsh.y"
 { return 1; ;
     break;}
-case 13:
-#line 220 "Gmsh.y"
+case 15:
+#line 226 "Gmsh.y"
 { return 1; ;
     break;}
-case 14:
-#line 221 "Gmsh.y"
+case 16:
+#line 227 "Gmsh.y"
 { return 1; ;
     break;}
-case 15:
-#line 226 "Gmsh.y"
+case 17:
+#line 232 "Gmsh.y"
 {
-      yymsg(INFO, "Step Iso-10303-21 file format");
+      yymsg(INFO, "Reading Step Iso-10303-21 data");
       Create_Step_Solid_BRep();
     ;
     break;}
-case 16:
-#line 231 "Gmsh.y"
+case 18:
+#line 237 "Gmsh.y"
 {
-      yymsg(INFO, "Step Iso-10303-21 file format read");
       Resolve_BREP ();
+      yymsg(INFO, "Read Step Iso-10303-21 data");
     ;
     break;}
-case 20:
-#line 242 "Gmsh.y"
+case 22:
+#line 248 "Gmsh.y"
 {
     ;
     break;}
-case 21:
-#line 245 "Gmsh.y"
+case 23:
+#line 251 "Gmsh.y"
 {
     ;
     break;}
-case 22:
-#line 249 "Gmsh.y"
+case 24:
+#line 255 "Gmsh.y"
 {
    ;
     break;}
-case 23:
-#line 255 "Gmsh.y"
+case 25:
+#line 261 "Gmsh.y"
 {
         Add_Cartesian_Point((int)yyvsp[-8].d, yyvsp[-4].c, yyvsp[-2].v[0], yyvsp[-2].v[1], yyvsp[-2].v[2]);
     ;
     break;}
-case 24:
-#line 261 "Gmsh.y"
+case 26:
+#line 267 "Gmsh.y"
 {
        Add_BSpline_Curve_With_Knots ((int)yyvsp[-22].d, yyvsp[-18].c, (int) yyvsp[-16].d, yyvsp[-14].l,	yyvsp[-6].l, yyvsp[-4].l, 0., 1.);
     ;
     break;}
-case 25:
-#line 268 "Gmsh.y"
+case 27:
+#line 274 "Gmsh.y"
 {
       Add_BSpline_Surface_With_Knots ((int)yyvsp[-30].d, yyvsp[-26].c, (int) yyvsp[-24].d, (int) yyvsp[-22].d, yyvsp[-20].l, yyvsp[-10].l,
 				      yyvsp[-8].l, yyvsp[-6].l, yyvsp[-4].l, 0., 1., 0., 1. );
     ;
     break;}
-case 26:
-#line 274 "Gmsh.y"
+case 28:
+#line 280 "Gmsh.y"
 {
       Add_Edge_Curve ((int)yyvsp[-14].d, yyvsp[-10].c , (int)yyvsp[-8].d , (int)yyvsp[-6].d, (int)yyvsp[-4].d);
     ;
     break;}
-case 27:
-#line 278 "Gmsh.y"
+case 29:
+#line 284 "Gmsh.y"
 {
       Add_Face_Outer_Bound((int)yyvsp[-10].d, yyvsp[-6].c, (int)yyvsp[-4].d, yyvsp[-2].i, 1);
     ;
     break;}
-case 28:
-#line 282 "Gmsh.y"
+case 30:
+#line 288 "Gmsh.y"
 {
       // check the norm! Face_Bound : hole outside surface!
       yymsg(INFO, "Found a face bound");
       Add_Face_Outer_Bound((int)yyvsp[-10].d, yyvsp[-6].c, (int)yyvsp[-4].d, yyvsp[-2].i, 0);
     ;
     break;}
-case 29:
-#line 289 "Gmsh.y"
-{
-      Add_Oriented_Edge((int)yyvsp[-14].d, yyvsp[-10].c, (int)yyvsp[-4].d, yyvsp[-2].i);
-    ;
-    break;}
-case 30:
-#line 293 "Gmsh.y"
-{
-      Add_Edge_Loop((int)yyvsp[-8].d, yyvsp[-4].c, yyvsp[-2].l);
-    ;
-    break;}
 case 31:
-#line 298 "Gmsh.y"
+#line 295 "Gmsh.y"
 {
-      Add_Advanced_Face((int)yyvsp[-12].d, yyvsp[-8].c, yyvsp[-6].l, (int)yyvsp[-4].d, yyvsp[-2].i);
+      Add_Oriented_Edge((int)yyvsp[-14].d, yyvsp[-10].c, (int)yyvsp[-4].d, yyvsp[-2].i);
     ;
     break;}
 case 32:
-#line 302 "Gmsh.y"
+#line 299 "Gmsh.y"
 {
-      Add_Vertex_Point((int)yyvsp[-8].d, yyvsp[-4].c, (int)yyvsp[-2].d);
+      Add_Edge_Loop((int)yyvsp[-8].d, yyvsp[-4].c, yyvsp[-2].l);
     ;
     break;}
 case 33:
-#line 306 "Gmsh.y"
+#line 304 "Gmsh.y"
 {
+      Add_Advanced_Face((int)yyvsp[-12].d, yyvsp[-8].c, yyvsp[-6].l, (int)yyvsp[-4].d, yyvsp[-2].i);
     ;
     break;}
 case 34:
-#line 310 "Gmsh.y"
+#line 308 "Gmsh.y"
 {
-      Add_Axis2_Placement3D  ((int)yyvsp[-12].d, (int)yyvsp[-4].d, (int)yyvsp[-2].d, (int)yyvsp[-6].d);
+      Add_Vertex_Point((int)yyvsp[-8].d, yyvsp[-4].c, (int)yyvsp[-2].d);
     ;
     break;}
 case 35:
-#line 314 "Gmsh.y"
+#line 312 "Gmsh.y"
 {
-      Add_Direction((int)yyvsp[-8].d , yyvsp[-4].c, yyvsp[-2].v[0], yyvsp[-2].v[1], yyvsp[-2].v[2]);
     ;
     break;}
 case 36:
-#line 318 "Gmsh.y"
+#line 316 "Gmsh.y"
 {
-      Add_Plane((int)yyvsp[-8].d, yyvsp[-4].c, (int)yyvsp[-2].d);
+      Add_Axis2_Placement3D  ((int)yyvsp[-12].d, (int)yyvsp[-4].d, (int)yyvsp[-2].d, (int)yyvsp[-6].d);
     ;
     break;}
 case 37:
-#line 322 "Gmsh.y"
+#line 320 "Gmsh.y"
 {
-      Add_Line ((int)yyvsp[-10].d, yyvsp[-6].c , (int) yyvsp[-4].d, (int)yyvsp[-2].d);
+      Add_Direction((int)yyvsp[-8].d , yyvsp[-4].c, yyvsp[-2].v[0], yyvsp[-2].v[1], yyvsp[-2].v[2]);
     ;
     break;}
 case 38:
-#line 326 "Gmsh.y"
+#line 324 "Gmsh.y"
 {
-      yymsg(INFO, "Found a closed shell");
-      Add_Closed_Shell((int)yyvsp[-8].d, yyvsp[-4].c , yyvsp[-2].l);
+      Add_Plane((int)yyvsp[-8].d, yyvsp[-4].c, (int)yyvsp[-2].d);
     ;
     break;}
 case 39:
-#line 332 "Gmsh.y"
+#line 328 "Gmsh.y"
 {
+      Add_Line ((int)yyvsp[-10].d, yyvsp[-6].c , (int) yyvsp[-4].d, (int)yyvsp[-2].d);
     ;
     break;}
 case 40:
-#line 335 "Gmsh.y"
+#line 332 "Gmsh.y"
 {
+      yymsg(INFO, "Found a closed shell");
+      Add_Closed_Shell((int)yyvsp[-8].d, yyvsp[-4].c , yyvsp[-2].l);
     ;
     break;}
 case 41:
 #line 338 "Gmsh.y"
 {
-      Add_Cylinder ((int)yyvsp[-10].d, yyvsp[-6].c , (int)yyvsp[-4].d, yyvsp[-2].d);
     ;
     break;}
 case 42:
-#line 342 "Gmsh.y"
+#line 341 "Gmsh.y"
 {
-      Add_Cone ((int)yyvsp[-12].d, yyvsp[-8].c , (int)yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d);
     ;
     break;}
 case 43:
-#line 346 "Gmsh.y"
+#line 344 "Gmsh.y"
 {
-      Add_Torus ((int)yyvsp[-12].d, yyvsp[-8].c , (int)yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d);
+      Add_Cylinder ((int)yyvsp[-10].d, yyvsp[-6].c , (int)yyvsp[-4].d, yyvsp[-2].d);
     ;
     break;}
 case 44:
-#line 350 "Gmsh.y"
+#line 348 "Gmsh.y"
 {
-      Add_Circle((int) yyvsp[-10].d, yyvsp[-6].c, (int) yyvsp[-4].d, yyvsp[-2].d);
+      Add_Cone ((int)yyvsp[-12].d, yyvsp[-8].c , (int)yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d);
     ;
     break;}
 case 45:
-#line 354 "Gmsh.y"
+#line 352 "Gmsh.y"
 {
-      Add_Ellipse((int) yyvsp[-12].d, yyvsp[-8].c, (int) yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d);
+      Add_Torus ((int)yyvsp[-12].d, yyvsp[-8].c , (int)yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d);
     ;
     break;}
 case 46:
-#line 359 "Gmsh.y"
+#line 356 "Gmsh.y"
 {
+      Add_Circle((int) yyvsp[-10].d, yyvsp[-6].c, (int) yyvsp[-4].d, yyvsp[-2].d);
     ;
     break;}
 case 47:
-#line 362 "Gmsh.y"
+#line 360 "Gmsh.y"
 {
+      Add_Ellipse((int) yyvsp[-12].d, yyvsp[-8].c, (int) yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d);
     ;
     break;}
 case 48:
-#line 366 "Gmsh.y"
+#line 365 "Gmsh.y"
 {
     ;
     break;}
 case 49:
-#line 369 "Gmsh.y"
+#line 368 "Gmsh.y"
 {
     ;
     break;}
 case 50:
-#line 373 "Gmsh.y"
+#line 372 "Gmsh.y"
 {
     ;
     break;}
 case 51:
-#line 376 "Gmsh.y"
+#line 375 "Gmsh.y"
 {
     ;
     break;}
@@ -4873,82 +4880,82 @@ case 52:
     ;
     break;}
 case 53:
-#line 387 "Gmsh.y"
+#line 382 "Gmsh.y"
 {
-  ;
+    ;
     break;}
 case 54:
-#line 390 "Gmsh.y"
+#line 385 "Gmsh.y"
 {
-    yymsg(INFO, "Gmsh file format read");
-  ;
-    break;}
-case 55:
-#line 396 "Gmsh.y"
-{ return 1; ;
+    ;
     break;}
-case 56:
+case 57:
 #line 397 "Gmsh.y"
 { return 1; ;
     break;}
-case 57:
+case 58:
 #line 398 "Gmsh.y"
 { return 1; ;
     break;}
-case 58:
+case 59:
 #line 399 "Gmsh.y"
 { return 1; ;
     break;}
-case 59:
+case 60:
 #line 400 "Gmsh.y"
 { return 1; ;
     break;}
-case 60:
+case 61:
 #line 401 "Gmsh.y"
-{ return 1; ;
+{ List_Delete(yyvsp[0].l); return 1; ;
     break;}
-case 61:
+case 62:
 #line 402 "Gmsh.y"
-{ return 1; ;
+{ List_Delete(yyvsp[0].l); return 1; ;
     break;}
-case 62:
+case 63:
 #line 403 "Gmsh.y"
 { return 1; ;
     break;}
-case 63:
+case 64:
 #line 404 "Gmsh.y"
 { return 1; ;
     break;}
-case 64:
+case 65:
 #line 405 "Gmsh.y"
 { return 1; ;
     break;}
-case 65:
+case 66:
 #line 406 "Gmsh.y"
-{ return 1; ;
+{ List_Delete(yyvsp[0].l); return 1; ;
     break;}
-case 66:
+case 67:
 #line 407 "Gmsh.y"
 { return 1; ;
     break;}
-case 67:
+case 68:
 #line 408 "Gmsh.y"
 { return 1; ;
     break;}
-case 68:
+case 69:
 #line 409 "Gmsh.y"
 { return 1; ;
     break;}
-case 69:
-#line 414 "Gmsh.y"
+case 70:
+#line 410 "Gmsh.y"
+{ return 1; ;
+    break;}
+case 71:
+#line 415 "Gmsh.y"
 {
       Msg(DIRECT, yyvsp[-2].c);
     ;
     break;}
-case 70:
-#line 418 "Gmsh.y"
+case 72:
+#line 419 "Gmsh.y"
 {
-      i = PrintListOfDouble(yyvsp[-4].c, yyvsp[-2].l, tmpstring);
+      char tmpstring[1024];
+      int i = PrintListOfDouble(yyvsp[-4].c, yyvsp[-2].l, tmpstring);
       if(i < 0) 
 	yymsg(GERROR, "Too few arguments in Printf");
       else if(i > 0)
@@ -4958,163 +4965,163 @@ case 70:
       List_Delete(yyvsp[-2].l);
     ;
     break;}
-case 71:
-#line 434 "Gmsh.y"
+case 73:
+#line 436 "Gmsh.y"
 { 
       if(!strcmp(yyvsp[-5].c, "View")) EndView(View, 1, yyname, yyvsp[-4].c); 
     ;
     break;}
-case 72:
-#line 438 "Gmsh.y"
+case 74:
+#line 440 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-7].c, "View")) EndView(View, 1, yyname, yyvsp[-6].c);
     ;
     break;}
-case 73:
-#line 445 "Gmsh.y"
+case 75:
+#line 447 "Gmsh.y"
 {
       View = BeginView(1); 
     ;
     break;}
-case 100:
-#line 478 "Gmsh.y"
-{ List_Add(View->SP, &yyvsp[0].d) ; ;
-    break;}
-case 101:
+case 102:
 #line 480 "Gmsh.y"
-{ List_Add(View->SP, &yyvsp[0].d) ; ;
+{ List_Add(View->SP, &yyvsp[0].d); ;
     break;}
-case 102:
-#line 485 "Gmsh.y"
+case 103:
+#line 482 "Gmsh.y"
+{ List_Add(View->SP, &yyvsp[0].d); ;
+    break;}
+case 104:
+#line 487 "Gmsh.y"
 { 
       List_Add(View->SP, &yyvsp[-5].d); List_Add(View->SP, &yyvsp[-3].d);
       List_Add(View->SP, &yyvsp[-1].d);
     ;
     break;}
-case 103:
-#line 490 "Gmsh.y"
+case 105:
+#line 492 "Gmsh.y"
 {
-      View->NbSP++ ;
+      View->NbSP++;
     ;
     break;}
-case 104:
-#line 497 "Gmsh.y"
-{ List_Add(View->VP, &yyvsp[0].d) ; ;
-    break;}
-case 105:
+case 106:
 #line 499 "Gmsh.y"
-{ List_Add(View->VP, &yyvsp[0].d) ; ;
+{ List_Add(View->VP, &yyvsp[0].d); ;
     break;}
-case 106:
-#line 504 "Gmsh.y"
+case 107:
+#line 501 "Gmsh.y"
+{ List_Add(View->VP, &yyvsp[0].d); ;
+    break;}
+case 108:
+#line 506 "Gmsh.y"
 { 
       List_Add(View->VP, &yyvsp[-5].d); List_Add(View->VP, &yyvsp[-3].d);
       List_Add(View->VP, &yyvsp[-1].d); 
     ;
     break;}
-case 107:
-#line 509 "Gmsh.y"
+case 109:
+#line 511 "Gmsh.y"
 {
-      View->NbVP++ ;
+      View->NbVP++;
     ;
     break;}
-case 108:
-#line 516 "Gmsh.y"
-{ List_Add(View->TP, &yyvsp[0].d) ; ;
-    break;}
-case 109:
+case 110:
 #line 518 "Gmsh.y"
-{ List_Add(View->TP, &yyvsp[0].d) ; ;
+{ List_Add(View->TP, &yyvsp[0].d); ;
     break;}
-case 110:
-#line 523 "Gmsh.y"
+case 111:
+#line 520 "Gmsh.y"
+{ List_Add(View->TP, &yyvsp[0].d); ;
+    break;}
+case 112:
+#line 525 "Gmsh.y"
 { 
       List_Add(View->TP, &yyvsp[-5].d); List_Add(View->TP, &yyvsp[-3].d);
       List_Add(View->TP, &yyvsp[-1].d);
     ;
     break;}
-case 111:
-#line 528 "Gmsh.y"
+case 113:
+#line 530 "Gmsh.y"
 {
-      View->NbTP++ ;
+      View->NbTP++;
     ;
     break;}
-case 112:
-#line 535 "Gmsh.y"
-{ List_Add(View->SL, &yyvsp[0].d) ; ;
-    break;}
-case 113:
+case 114:
 #line 537 "Gmsh.y"
-{ List_Add(View->SL, &yyvsp[0].d) ; ;
+{ List_Add(View->SL, &yyvsp[0].d); ;
     break;}
-case 114:
-#line 543 "Gmsh.y"
+case 115:
+#line 539 "Gmsh.y"
+{ List_Add(View->SL, &yyvsp[0].d); ;
+    break;}
+case 116:
+#line 545 "Gmsh.y"
 { 
       List_Add(View->SL, &yyvsp[-11].d); List_Add(View->SL, &yyvsp[-5].d);
       List_Add(View->SL, &yyvsp[-9].d); List_Add(View->SL, &yyvsp[-3].d);
       List_Add(View->SL, &yyvsp[-7].d); List_Add(View->SL, &yyvsp[-1].d);
     ;
     break;}
-case 115:
-#line 549 "Gmsh.y"
+case 117:
+#line 551 "Gmsh.y"
 {
-      View->NbSL++ ;
+      View->NbSL++;
     ;
     break;}
-case 116:
-#line 556 "Gmsh.y"
-{ List_Add(View->VL, &yyvsp[0].d) ; ;
-    break;}
-case 117:
+case 118:
 #line 558 "Gmsh.y"
-{ List_Add(View->VL, &yyvsp[0].d) ; ;
+{ List_Add(View->VL, &yyvsp[0].d); ;
     break;}
-case 118:
-#line 564 "Gmsh.y"
+case 119:
+#line 560 "Gmsh.y"
+{ List_Add(View->VL, &yyvsp[0].d); ;
+    break;}
+case 120:
+#line 566 "Gmsh.y"
 { 
       List_Add(View->VL, &yyvsp[-11].d); List_Add(View->VL, &yyvsp[-5].d);
       List_Add(View->VL, &yyvsp[-9].d); List_Add(View->VL, &yyvsp[-3].d);
       List_Add(View->VL, &yyvsp[-7].d); List_Add(View->VL, &yyvsp[-1].d);
     ;
     break;}
-case 119:
-#line 570 "Gmsh.y"
+case 121:
+#line 572 "Gmsh.y"
 {
-      View->NbVL++ ;
+      View->NbVL++;
     ;
     break;}
-case 120:
-#line 577 "Gmsh.y"
-{ List_Add(View->TL, &yyvsp[0].d) ; ;
-    break;}
-case 121:
+case 122:
 #line 579 "Gmsh.y"
-{ List_Add(View->TL, &yyvsp[0].d) ; ;
+{ List_Add(View->TL, &yyvsp[0].d); ;
     break;}
-case 122:
-#line 585 "Gmsh.y"
+case 123:
+#line 581 "Gmsh.y"
+{ List_Add(View->TL, &yyvsp[0].d); ;
+    break;}
+case 124:
+#line 587 "Gmsh.y"
 { 
       List_Add(View->TL, &yyvsp[-11].d); List_Add(View->TL, &yyvsp[-5].d);
       List_Add(View->TL, &yyvsp[-9].d); List_Add(View->TL, &yyvsp[-3].d);
       List_Add(View->TL, &yyvsp[-7].d); List_Add(View->TL, &yyvsp[-1].d);
     ;
     break;}
-case 123:
-#line 591 "Gmsh.y"
+case 125:
+#line 593 "Gmsh.y"
 {
-      View->NbTL++ ;
+      View->NbTL++;
     ;
     break;}
-case 124:
-#line 598 "Gmsh.y"
-{ List_Add(View->ST, &yyvsp[0].d) ; ;
-    break;}
-case 125:
+case 126:
 #line 600 "Gmsh.y"
-{ List_Add(View->ST, &yyvsp[0].d) ; ;
+{ List_Add(View->ST, &yyvsp[0].d); ;
     break;}
-case 126:
-#line 607 "Gmsh.y"
+case 127:
+#line 602 "Gmsh.y"
+{ List_Add(View->ST, &yyvsp[0].d); ;
+    break;}
+case 128:
+#line 609 "Gmsh.y"
 { 
       List_Add(View->ST, &yyvsp[-17].d); List_Add(View->ST, &yyvsp[-11].d);
       List_Add(View->ST, &yyvsp[-5].d);
@@ -5124,22 +5131,22 @@ case 126:
       List_Add(View->ST, &yyvsp[-1].d);
     ;
     break;}
-case 127:
-#line 616 "Gmsh.y"
+case 129:
+#line 618 "Gmsh.y"
 {
-      View->NbST++ ;
+      View->NbST++;
     ;
     break;}
-case 128:
-#line 623 "Gmsh.y"
-{ List_Add(View->VT, &yyvsp[0].d) ; ;
-    break;}
-case 129:
+case 130:
 #line 625 "Gmsh.y"
-{ List_Add(View->VT, &yyvsp[0].d) ; ;
+{ List_Add(View->VT, &yyvsp[0].d); ;
     break;}
-case 130:
-#line 632 "Gmsh.y"
+case 131:
+#line 627 "Gmsh.y"
+{ List_Add(View->VT, &yyvsp[0].d); ;
+    break;}
+case 132:
+#line 634 "Gmsh.y"
 { 
       List_Add(View->VT, &yyvsp[-17].d); List_Add(View->VT, &yyvsp[-11].d);
       List_Add(View->VT, &yyvsp[-5].d);
@@ -5149,22 +5156,22 @@ case 130:
       List_Add(View->VT, &yyvsp[-1].d);
     ;
     break;}
-case 131:
-#line 641 "Gmsh.y"
+case 133:
+#line 643 "Gmsh.y"
 {
-      View->NbVT++ ;
+      View->NbVT++;
     ;
     break;}
-case 132:
-#line 648 "Gmsh.y"
-{ List_Add(View->TT, &yyvsp[0].d) ; ;
-    break;}
-case 133:
+case 134:
 #line 650 "Gmsh.y"
-{ List_Add(View->TT, &yyvsp[0].d) ; ;
+{ List_Add(View->TT, &yyvsp[0].d); ;
     break;}
-case 134:
-#line 657 "Gmsh.y"
+case 135:
+#line 652 "Gmsh.y"
+{ List_Add(View->TT, &yyvsp[0].d); ;
+    break;}
+case 136:
+#line 659 "Gmsh.y"
 { 
       List_Add(View->TT, &yyvsp[-17].d); List_Add(View->TT, &yyvsp[-11].d);
       List_Add(View->TT, &yyvsp[-5].d);
@@ -5174,22 +5181,22 @@ case 134:
       List_Add(View->TT, &yyvsp[-1].d);
     ;
     break;}
-case 135:
-#line 666 "Gmsh.y"
+case 137:
+#line 668 "Gmsh.y"
 {
-      View->NbTT++ ;
+      View->NbTT++;
     ;
     break;}
-case 136:
-#line 673 "Gmsh.y"
-{ List_Add(View->SQ, &yyvsp[0].d) ; ;
-    break;}
-case 137:
+case 138:
 #line 675 "Gmsh.y"
-{ List_Add(View->SQ, &yyvsp[0].d) ; ;
+{ List_Add(View->SQ, &yyvsp[0].d); ;
     break;}
-case 138:
-#line 683 "Gmsh.y"
+case 139:
+#line 677 "Gmsh.y"
+{ List_Add(View->SQ, &yyvsp[0].d); ;
+    break;}
+case 140:
+#line 685 "Gmsh.y"
 { 
       List_Add(View->SQ, &yyvsp[-23].d);  List_Add(View->SQ, &yyvsp[-17].d);
       List_Add(View->SQ, &yyvsp[-11].d); List_Add(View->SQ, &yyvsp[-5].d);
@@ -5199,22 +5206,22 @@ case 138:
       List_Add(View->SQ, &yyvsp[-7].d); List_Add(View->SQ, &yyvsp[-1].d);
     ;
     break;}
-case 139:
-#line 692 "Gmsh.y"
+case 141:
+#line 694 "Gmsh.y"
 {
-      View->NbSQ++ ;
+      View->NbSQ++;
     ;
     break;}
-case 140:
-#line 699 "Gmsh.y"
-{ List_Add(View->VQ, &yyvsp[0].d) ; ;
-    break;}
-case 141:
+case 142:
 #line 701 "Gmsh.y"
-{ List_Add(View->VQ, &yyvsp[0].d) ; ;
+{ List_Add(View->VQ, &yyvsp[0].d); ;
     break;}
-case 142:
-#line 709 "Gmsh.y"
+case 143:
+#line 703 "Gmsh.y"
+{ List_Add(View->VQ, &yyvsp[0].d); ;
+    break;}
+case 144:
+#line 711 "Gmsh.y"
 { 
       List_Add(View->VQ, &yyvsp[-23].d);  List_Add(View->VQ, &yyvsp[-17].d);
       List_Add(View->VQ, &yyvsp[-11].d); List_Add(View->VQ, &yyvsp[-5].d);
@@ -5224,22 +5231,22 @@ case 142:
       List_Add(View->VQ, &yyvsp[-7].d); List_Add(View->VQ, &yyvsp[-1].d);
     ;
     break;}
-case 143:
-#line 718 "Gmsh.y"
+case 145:
+#line 720 "Gmsh.y"
 {
-      View->NbVQ++ ;
+      View->NbVQ++;
     ;
     break;}
-case 144:
-#line 725 "Gmsh.y"
-{ List_Add(View->TQ, &yyvsp[0].d) ; ;
-    break;}
-case 145:
+case 146:
 #line 727 "Gmsh.y"
-{ List_Add(View->TQ, &yyvsp[0].d) ; ;
+{ List_Add(View->TQ, &yyvsp[0].d); ;
     break;}
-case 146:
-#line 735 "Gmsh.y"
+case 147:
+#line 729 "Gmsh.y"
+{ List_Add(View->TQ, &yyvsp[0].d); ;
+    break;}
+case 148:
+#line 737 "Gmsh.y"
 { 
       List_Add(View->TQ, &yyvsp[-23].d);  List_Add(View->TQ, &yyvsp[-17].d);
       List_Add(View->TQ, &yyvsp[-11].d); List_Add(View->TQ, &yyvsp[-5].d);
@@ -5249,22 +5256,22 @@ case 146:
       List_Add(View->TQ, &yyvsp[-7].d); List_Add(View->TQ, &yyvsp[-1].d);
     ;
     break;}
-case 147:
-#line 744 "Gmsh.y"
+case 149:
+#line 746 "Gmsh.y"
 {
-      View->NbTQ++ ;
+      View->NbTQ++;
     ;
     break;}
-case 148:
-#line 751 "Gmsh.y"
-{ List_Add(View->SS, &yyvsp[0].d) ; ;
-    break;}
-case 149:
+case 150:
 #line 753 "Gmsh.y"
-{ List_Add(View->SS, &yyvsp[0].d) ; ;
+{ List_Add(View->SS, &yyvsp[0].d); ;
     break;}
-case 150:
-#line 761 "Gmsh.y"
+case 151:
+#line 755 "Gmsh.y"
+{ List_Add(View->SS, &yyvsp[0].d); ;
+    break;}
+case 152:
+#line 763 "Gmsh.y"
 { 
       List_Add(View->SS, &yyvsp[-23].d);  List_Add(View->SS, &yyvsp[-17].d);
       List_Add(View->SS, &yyvsp[-11].d); List_Add(View->SS, &yyvsp[-5].d);
@@ -5274,22 +5281,22 @@ case 150:
       List_Add(View->SS, &yyvsp[-7].d); List_Add(View->SS, &yyvsp[-1].d);
     ;
     break;}
-case 151:
-#line 770 "Gmsh.y"
+case 153:
+#line 772 "Gmsh.y"
 {
-      View->NbSS++ ;
+      View->NbSS++;
     ;
     break;}
-case 152:
-#line 777 "Gmsh.y"
-{ List_Add(View->VS, &yyvsp[0].d) ; ;
-    break;}
-case 153:
+case 154:
 #line 779 "Gmsh.y"
-{ List_Add(View->VS, &yyvsp[0].d) ; ;
+{ List_Add(View->VS, &yyvsp[0].d); ;
     break;}
-case 154:
-#line 787 "Gmsh.y"
+case 155:
+#line 781 "Gmsh.y"
+{ List_Add(View->VS, &yyvsp[0].d); ;
+    break;}
+case 156:
+#line 789 "Gmsh.y"
 { 
       List_Add(View->VS, &yyvsp[-23].d);  List_Add(View->VS, &yyvsp[-17].d);
       List_Add(View->VS, &yyvsp[-11].d); List_Add(View->VS, &yyvsp[-5].d);
@@ -5299,22 +5306,22 @@ case 154:
       List_Add(View->VS, &yyvsp[-7].d); List_Add(View->VS, &yyvsp[-1].d);
     ;
     break;}
-case 155:
-#line 796 "Gmsh.y"
+case 157:
+#line 798 "Gmsh.y"
 {
-      View->NbVS++ ;
+      View->NbVS++;
     ;
     break;}
-case 156:
-#line 803 "Gmsh.y"
-{ List_Add(View->TS, &yyvsp[0].d) ; ;
-    break;}
-case 157:
+case 158:
 #line 805 "Gmsh.y"
-{ List_Add(View->TS, &yyvsp[0].d) ; ;
+{ List_Add(View->TS, &yyvsp[0].d); ;
     break;}
-case 158:
-#line 813 "Gmsh.y"
+case 159:
+#line 807 "Gmsh.y"
+{ List_Add(View->TS, &yyvsp[0].d); ;
+    break;}
+case 160:
+#line 815 "Gmsh.y"
 { 
       List_Add(View->TS, &yyvsp[-23].d);  List_Add(View->TS, &yyvsp[-17].d);
       List_Add(View->TS, &yyvsp[-11].d); List_Add(View->TS, &yyvsp[-5].d);
@@ -5324,22 +5331,22 @@ case 158:
       List_Add(View->TS, &yyvsp[-7].d); List_Add(View->TS, &yyvsp[-1].d);
     ;
     break;}
-case 159:
-#line 822 "Gmsh.y"
+case 161:
+#line 824 "Gmsh.y"
 {
-      View->NbTS++ ;
+      View->NbTS++;
     ;
     break;}
-case 160:
-#line 829 "Gmsh.y"
-{ List_Add(View->SH, &yyvsp[0].d) ; ;
-    break;}
-case 161:
+case 162:
 #line 831 "Gmsh.y"
-{ List_Add(View->SH, &yyvsp[0].d) ; ;
+{ List_Add(View->SH, &yyvsp[0].d); ;
     break;}
-case 162:
-#line 843 "Gmsh.y"
+case 163:
+#line 833 "Gmsh.y"
+{ List_Add(View->SH, &yyvsp[0].d); ;
+    break;}
+case 164:
+#line 845 "Gmsh.y"
 { 
       List_Add(View->SH, &yyvsp[-47].d);  List_Add(View->SH, &yyvsp[-41].d);
       List_Add(View->SH, &yyvsp[-35].d); List_Add(View->SH, &yyvsp[-29].d);
@@ -5355,22 +5362,22 @@ case 162:
       List_Add(View->SH, &yyvsp[-7].d); List_Add(View->SH, &yyvsp[-1].d);
     ;
     break;}
-case 163:
-#line 858 "Gmsh.y"
+case 165:
+#line 860 "Gmsh.y"
 {
-      View->NbSH++ ;
+      View->NbSH++;
     ;
     break;}
-case 164:
-#line 865 "Gmsh.y"
-{ List_Add(View->VH, &yyvsp[0].d) ; ;
-    break;}
-case 165:
+case 166:
 #line 867 "Gmsh.y"
-{ List_Add(View->VH, &yyvsp[0].d) ; ;
+{ List_Add(View->VH, &yyvsp[0].d); ;
     break;}
-case 166:
-#line 879 "Gmsh.y"
+case 167:
+#line 869 "Gmsh.y"
+{ List_Add(View->VH, &yyvsp[0].d); ;
+    break;}
+case 168:
+#line 881 "Gmsh.y"
 { 
       List_Add(View->VH, &yyvsp[-47].d);  List_Add(View->VH, &yyvsp[-41].d);
       List_Add(View->VH, &yyvsp[-35].d); List_Add(View->VH, &yyvsp[-29].d);
@@ -5386,22 +5393,22 @@ case 166:
       List_Add(View->VH, &yyvsp[-7].d); List_Add(View->VH, &yyvsp[-1].d);
     ;
     break;}
-case 167:
-#line 894 "Gmsh.y"
+case 169:
+#line 896 "Gmsh.y"
 {
-      View->NbVH++ ;
+      View->NbVH++;
     ;
     break;}
-case 168:
-#line 901 "Gmsh.y"
-{ List_Add(View->TH, &yyvsp[0].d) ; ;
-    break;}
-case 169:
+case 170:
 #line 903 "Gmsh.y"
-{ List_Add(View->TH, &yyvsp[0].d) ; ;
+{ List_Add(View->TH, &yyvsp[0].d); ;
     break;}
-case 170:
-#line 915 "Gmsh.y"
+case 171:
+#line 905 "Gmsh.y"
+{ List_Add(View->TH, &yyvsp[0].d); ;
+    break;}
+case 172:
+#line 917 "Gmsh.y"
 { 
       List_Add(View->TH, &yyvsp[-47].d);  List_Add(View->TH, &yyvsp[-41].d);
       List_Add(View->TH, &yyvsp[-35].d); List_Add(View->TH, &yyvsp[-29].d);
@@ -5417,22 +5424,22 @@ case 170:
       List_Add(View->TH, &yyvsp[-7].d); List_Add(View->TH, &yyvsp[-1].d);
     ;
     break;}
-case 171:
-#line 930 "Gmsh.y"
+case 173:
+#line 932 "Gmsh.y"
 {
-      View->NbTH++ ;
+      View->NbTH++;
     ;
     break;}
-case 172:
-#line 937 "Gmsh.y"
-{ List_Add(View->SI, &yyvsp[0].d) ; ;
-    break;}
-case 173:
+case 174:
 #line 939 "Gmsh.y"
-{ List_Add(View->SI, &yyvsp[0].d) ; ;
+{ List_Add(View->SI, &yyvsp[0].d); ;
     break;}
-case 174:
-#line 949 "Gmsh.y"
+case 175:
+#line 941 "Gmsh.y"
+{ List_Add(View->SI, &yyvsp[0].d); ;
+    break;}
+case 176:
+#line 951 "Gmsh.y"
 { 
       List_Add(View->SI, &yyvsp[-35].d);  List_Add(View->SI, &yyvsp[-29].d);
       List_Add(View->SI, &yyvsp[-23].d); List_Add(View->SI, &yyvsp[-17].d);
@@ -5445,22 +5452,22 @@ case 174:
       List_Add(View->SI, &yyvsp[-7].d); List_Add(View->SI, &yyvsp[-1].d);
     ;
     break;}
-case 175:
-#line 961 "Gmsh.y"
+case 177:
+#line 963 "Gmsh.y"
 {
-      View->NbSI++ ;
+      View->NbSI++;
     ;
     break;}
-case 176:
-#line 968 "Gmsh.y"
-{ List_Add(View->VI, &yyvsp[0].d) ; ;
-    break;}
-case 177:
+case 178:
 #line 970 "Gmsh.y"
-{ List_Add(View->VI, &yyvsp[0].d) ; ;
+{ List_Add(View->VI, &yyvsp[0].d); ;
     break;}
-case 178:
-#line 980 "Gmsh.y"
+case 179:
+#line 972 "Gmsh.y"
+{ List_Add(View->VI, &yyvsp[0].d); ;
+    break;}
+case 180:
+#line 982 "Gmsh.y"
 { 
       List_Add(View->VI, &yyvsp[-35].d);  List_Add(View->VI, &yyvsp[-29].d);
       List_Add(View->VI, &yyvsp[-23].d); List_Add(View->VI, &yyvsp[-17].d);
@@ -5473,22 +5480,22 @@ case 178:
       List_Add(View->VI, &yyvsp[-7].d); List_Add(View->VI, &yyvsp[-1].d);
     ;
     break;}
-case 179:
-#line 992 "Gmsh.y"
+case 181:
+#line 994 "Gmsh.y"
 {
-      View->NbVI++ ;
+      View->NbVI++;
     ;
     break;}
-case 180:
-#line 999 "Gmsh.y"
-{ List_Add(View->TI, &yyvsp[0].d) ; ;
-    break;}
-case 181:
+case 182:
 #line 1001 "Gmsh.y"
-{ List_Add(View->TI, &yyvsp[0].d) ; ;
+{ List_Add(View->TI, &yyvsp[0].d); ;
     break;}
-case 182:
-#line 1011 "Gmsh.y"
+case 183:
+#line 1003 "Gmsh.y"
+{ List_Add(View->TI, &yyvsp[0].d); ;
+    break;}
+case 184:
+#line 1013 "Gmsh.y"
 { 
       List_Add(View->TI, &yyvsp[-35].d);  List_Add(View->TI, &yyvsp[-29].d);
       List_Add(View->TI, &yyvsp[-23].d); List_Add(View->TI, &yyvsp[-17].d);
@@ -5501,22 +5508,22 @@ case 182:
       List_Add(View->TI, &yyvsp[-7].d); List_Add(View->TI, &yyvsp[-1].d);
     ;
     break;}
-case 183:
-#line 1023 "Gmsh.y"
+case 185:
+#line 1025 "Gmsh.y"
 {
-      View->NbTI++ ;
+      View->NbTI++;
     ;
     break;}
-case 184:
-#line 1030 "Gmsh.y"
-{ List_Add(View->SY, &yyvsp[0].d) ; ;
-    break;}
-case 185:
+case 186:
 #line 1032 "Gmsh.y"
-{ List_Add(View->SY, &yyvsp[0].d) ; ;
+{ List_Add(View->SY, &yyvsp[0].d); ;
     break;}
-case 186:
-#line 1041 "Gmsh.y"
+case 187:
+#line 1034 "Gmsh.y"
+{ List_Add(View->SY, &yyvsp[0].d); ;
+    break;}
+case 188:
+#line 1043 "Gmsh.y"
 { 
       List_Add(View->SY, &yyvsp[-29].d);  List_Add(View->SY, &yyvsp[-23].d);
       List_Add(View->SY, &yyvsp[-17].d); List_Add(View->SY, &yyvsp[-11].d);
@@ -5529,22 +5536,22 @@ case 186:
       List_Add(View->SY, &yyvsp[-1].d);
     ;
     break;}
-case 187:
-#line 1053 "Gmsh.y"
+case 189:
+#line 1055 "Gmsh.y"
 {
-      View->NbSY++ ;
+      View->NbSY++;
     ;
     break;}
-case 188:
-#line 1060 "Gmsh.y"
-{ List_Add(View->VY, &yyvsp[0].d) ; ;
-    break;}
-case 189:
+case 190:
 #line 1062 "Gmsh.y"
-{ List_Add(View->VY, &yyvsp[0].d) ; ;
+{ List_Add(View->VY, &yyvsp[0].d); ;
     break;}
-case 190:
-#line 1071 "Gmsh.y"
+case 191:
+#line 1064 "Gmsh.y"
+{ List_Add(View->VY, &yyvsp[0].d); ;
+    break;}
+case 192:
+#line 1073 "Gmsh.y"
 { 
       List_Add(View->VY, &yyvsp[-29].d);  List_Add(View->VY, &yyvsp[-23].d);
       List_Add(View->VY, &yyvsp[-17].d); List_Add(View->VY, &yyvsp[-11].d);
@@ -5557,22 +5564,22 @@ case 190:
       List_Add(View->VY, &yyvsp[-1].d);
     ;
     break;}
-case 191:
-#line 1083 "Gmsh.y"
+case 193:
+#line 1085 "Gmsh.y"
 {
-      View->NbVY++ ;
+      View->NbVY++;
     ;
     break;}
-case 192:
-#line 1090 "Gmsh.y"
-{ List_Add(View->TY, &yyvsp[0].d) ; ;
-    break;}
-case 193:
+case 194:
 #line 1092 "Gmsh.y"
-{ List_Add(View->TY, &yyvsp[0].d) ; ;
+{ List_Add(View->TY, &yyvsp[0].d); ;
     break;}
-case 194:
-#line 1101 "Gmsh.y"
+case 195:
+#line 1094 "Gmsh.y"
+{ List_Add(View->TY, &yyvsp[0].d); ;
+    break;}
+case 196:
+#line 1103 "Gmsh.y"
 { 
       List_Add(View->TY, &yyvsp[-29].d);  List_Add(View->TY, &yyvsp[-23].d);
       List_Add(View->TY, &yyvsp[-17].d); List_Add(View->TY, &yyvsp[-11].d);
@@ -5585,102 +5592,104 @@ case 194:
       List_Add(View->TY, &yyvsp[-1].d);
     ;
     break;}
-case 195:
-#line 1113 "Gmsh.y"
+case 197:
+#line 1115 "Gmsh.y"
 {
-      View->NbTY++ ;
+      View->NbTY++;
     ;
     break;}
-case 196:
-#line 1120 "Gmsh.y"
+case 198:
+#line 1122 "Gmsh.y"
 { 
-      for(i = 0; i < (int)strlen(yyvsp[0].c)+1; i++) List_Add(View->T2C, &yyvsp[0].c[i]) ; 
+      for(int i = 0; i < (int)strlen(yyvsp[0].c)+1; i++) List_Add(View->T2C, &yyvsp[0].c[i]); 
       Free(yyvsp[0].c);
     ;
     break;}
-case 197:
-#line 1125 "Gmsh.y"
+case 199:
+#line 1127 "Gmsh.y"
 { 
-      for(i = 0; i < (int)strlen(yyvsp[0].c)+1; i++) List_Add(View->T2C, &yyvsp[0].c[i]) ; 
+      for(int i = 0; i < (int)strlen(yyvsp[0].c)+1; i++) List_Add(View->T2C, &yyvsp[0].c[i]); 
       Free(yyvsp[0].c);
     ;
     break;}
-case 198:
-#line 1133 "Gmsh.y"
+case 200:
+#line 1135 "Gmsh.y"
 { 
       List_Add(View->T2D, &yyvsp[-5].d); List_Add(View->T2D, &yyvsp[-3].d);
       List_Add(View->T2D, &yyvsp[-1].d); 
-      d = List_Nbr(View->T2C);
+      double d = List_Nbr(View->T2C);
       List_Add(View->T2D, &d); 
     ;
     break;}
-case 199:
-#line 1140 "Gmsh.y"
+case 201:
+#line 1142 "Gmsh.y"
 {
-      View->NbT2++ ;
+      View->NbT2++;
     ;
     break;}
-case 200:
-#line 1147 "Gmsh.y"
+case 202:
+#line 1149 "Gmsh.y"
 { 
-      for(i = 0; i < (int)strlen(yyvsp[0].c)+1; i++) List_Add(View->T3C, &yyvsp[0].c[i]) ; 
+      for(int i = 0; i < (int)strlen(yyvsp[0].c)+1; i++) List_Add(View->T3C, &yyvsp[0].c[i]); 
       Free(yyvsp[0].c);
     ;
     break;}
-case 201:
-#line 1152 "Gmsh.y"
+case 203:
+#line 1154 "Gmsh.y"
 { 
-      for(i = 0; i < (int)strlen(yyvsp[0].c)+1; i++) List_Add(View->T3C, &yyvsp[0].c[i]) ; 
+      for(int i = 0; i < (int)strlen(yyvsp[0].c)+1; i++) List_Add(View->T3C, &yyvsp[0].c[i]); 
       Free(yyvsp[0].c);
     ;
     break;}
-case 202:
-#line 1160 "Gmsh.y"
+case 204:
+#line 1162 "Gmsh.y"
 { 
       List_Add(View->T3D, &yyvsp[-7].d); List_Add(View->T3D, &yyvsp[-5].d);
       List_Add(View->T3D, &yyvsp[-3].d); List_Add(View->T3D, &yyvsp[-1].d); 
-      d = List_Nbr(View->T3C);
+      double d = List_Nbr(View->T3C);
       List_Add(View->T3D, &d); 
     ;
     break;}
-case 203:
-#line 1167 "Gmsh.y"
+case 205:
+#line 1169 "Gmsh.y"
 {
-      View->NbT3++ ;
+      View->NbT3++;
     ;
     break;}
-case 204:
-#line 1176 "Gmsh.y"
-{ yyval.i = 0 ; ;
-    break;}
-case 205:
-#line 1177 "Gmsh.y"
-{ yyval.i = 1 ; ;
-    break;}
 case 206:
 #line 1178 "Gmsh.y"
-{ yyval.i = 2 ; ;
+{ yyval.i = 0; ;
     break;}
 case 207:
 #line 1179 "Gmsh.y"
-{ yyval.i = 3 ; ;
+{ yyval.i = 1; ;
     break;}
 case 208:
 #line 1180 "Gmsh.y"
-{ yyval.i = 4 ; ;
+{ yyval.i = 2; ;
     break;}
 case 209:
-#line 1184 "Gmsh.y"
-{ yyval.i = 1 ; ;
+#line 1181 "Gmsh.y"
+{ yyval.i = 3; ;
     break;}
 case 210:
-#line 1185 "Gmsh.y"
-{ yyval.i = -1 ; ;
+#line 1182 "Gmsh.y"
+{ yyval.i = 4; ;
     break;}
 case 211:
-#line 1193 "Gmsh.y"
+#line 1186 "Gmsh.y"
+{ yyval.i = 1; ;
+    break;}
+case 212:
+#line 1187 "Gmsh.y"
+{ yyval.i = -1; ;
+    break;}
+case 213:
+#line 1195 "Gmsh.y"
 {
+      Symbol TheSymbol;
       TheSymbol.Name = yyvsp[-3].c;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){
 	TheSymbol.val = List_Create(1, 1, sizeof(double));
 	if(!yyvsp[-2].i){
@@ -5688,27 +5697,29 @@ case 211:
 	  Tree_Add(Symbol_T, &TheSymbol);
 	}
 	else
-	  yymsg(GERROR, "Unknown variable '%s'", yyvsp[-3].c) ;
+	  yymsg(GERROR, "Unknown variable '%s'", yyvsp[-3].c);
       }
       else{
-	pd = (double*)List_Pointer_Fast(pSymbol->val, 0) ; 
+	double *pd = (double*)List_Pointer_Fast(pSymbol->val, 0); 
 	switch(yyvsp[-2].i){
-	case 0 : *pd = yyvsp[-1].d; break ;
-	case 1 : *pd += yyvsp[-1].d ; break ;
-	case 2 : *pd -= yyvsp[-1].d ; break ;
-	case 3 : *pd *= yyvsp[-1].d ; break ;
+	case 0 : *pd = yyvsp[-1].d; break;
+	case 1 : *pd += yyvsp[-1].d; break;
+	case 2 : *pd -= yyvsp[-1].d; break;
+	case 3 : *pd *= yyvsp[-1].d; break;
 	case 4 : 
-	  if(yyvsp[-1].d) *pd /= yyvsp[-1].d ; 
+	  if(yyvsp[-1].d) *pd /= yyvsp[-1].d; 
 	  else yymsg(GERROR, "Division by zero in '%s /= %g'", yyvsp[-3].c, yyvsp[-1].d);
 	  break;
 	}
       }
     ;
     break;}
-case 212:
-#line 1220 "Gmsh.y"
+case 214:
+#line 1223 "Gmsh.y"
 {
+      Symbol TheSymbol;
       TheSymbol.Name = yyvsp[-6].c;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){
 	TheSymbol.val = List_Create(5, 5, sizeof(double));
 	if(!yyvsp[-2].i){
@@ -5716,17 +5727,18 @@ case 212:
 	  Tree_Add(Symbol_T, &TheSymbol);
 	}
 	else
-	  yymsg(GERROR, "Unknown variable '%s'", yyvsp[-6].c) ;
+	  yymsg(GERROR, "Unknown variable '%s'", yyvsp[-6].c);
       }
       else{
+	double *pd;
 	if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)yyvsp[-4].d))){
 	  switch(yyvsp[-2].i){
-	  case 0 : *pd = yyvsp[-1].d; break ;
-	  case 1 : *pd += yyvsp[-1].d ; break ;
-	  case 2 : *pd -= yyvsp[-1].d ; break ;
-	  case 3 : *pd *= yyvsp[-1].d ; break ;
+	  case 0 : *pd = yyvsp[-1].d; break;
+	  case 1 : *pd += yyvsp[-1].d; break;
+	  case 2 : *pd -= yyvsp[-1].d; break;
+	  case 3 : *pd *= yyvsp[-1].d; break;
 	  case 4 : 
-	    if(yyvsp[-1].d) *pd /= yyvsp[-1].d ; 
+	    if(yyvsp[-1].d) *pd /= yyvsp[-1].d; 
 	    else yymsg(GERROR, "Division by zero in '%s[%d] /= %g'", yyvsp[-6].c, (int)yyvsp[-4].d, yyvsp[-1].d);
 	    break;
 	  }
@@ -5735,42 +5747,45 @@ case 212:
 	  if(!yyvsp[-2].i)
 	    List_Put(pSymbol->val, (int)yyvsp[-4].d, &yyvsp[-1].d);
 	  else
-	    yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-6].c, (int)yyvsp[-4].d) ;
+	    yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-6].c, (int)yyvsp[-4].d);
 	}
       }
     ;
     break;}
-case 213:
-#line 1254 "Gmsh.y"
+case 215:
+#line 1259 "Gmsh.y"
 {
       if(List_Nbr(yyvsp[-5].l) != List_Nbr(yyvsp[-1].l))
 	yymsg(GERROR, "Incompatible array dimensions in affectation");
       else{
+	Symbol TheSymbol;
 	TheSymbol.Name = yyvsp[-8].c;
+	Symbol *pSymbol;
 	if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){
 	  TheSymbol.val = List_Create(5, 5, sizeof(double));
 	  if(!yyvsp[-2].i){
-	    for(i = 0; i < List_Nbr(yyvsp[-5].l); i++){
+	    for(int i = 0; i < List_Nbr(yyvsp[-5].l); i++){
 	      List_Put(TheSymbol.val, (int)(*(double*)List_Pointer(yyvsp[-5].l, i)),
 		       (double*)List_Pointer(yyvsp[-1].l, i));
 	    }
 	    Tree_Add(Symbol_T, &TheSymbol);
 	  }
 	  else
-	    yymsg(GERROR, "Unknown variable '%s'", yyvsp[-8].c) ;
+	    yymsg(GERROR, "Unknown variable '%s'", yyvsp[-8].c);
 	}
 	else{
-	  for(i = 0; i < List_Nbr(yyvsp[-5].l); i++){
-	    j = (int)(*(double*)List_Pointer(yyvsp[-5].l, i)) ;
-	    d = *(double*)List_Pointer(yyvsp[-1].l, i) ;
+	  for(int i = 0; i < List_Nbr(yyvsp[-5].l); i++){
+	    int j = (int)(*(double*)List_Pointer(yyvsp[-5].l, i));
+	    double d = *(double*)List_Pointer(yyvsp[-1].l, i);
+	    double *pd;
 	    if((pd = (double*)List_Pointer_Test(pSymbol->val, j))){
 	      switch(yyvsp[-2].i){
-	      case 0 : *pd = d; break ;
-	      case 1 : *pd += d ; break ;
-	      case 2 : *pd -= d ; break ;
-	      case 3 : *pd *= d ; break ;
+	      case 0 : *pd = d; break;
+	      case 1 : *pd += d; break;
+	      case 2 : *pd -= d; break;
+	      case 3 : *pd *= d; break;
 	      case 4 : 
-		if(yyvsp[-1].l) *pd /= d ; 
+		if(yyvsp[-1].l) *pd /= d; 
 		else yymsg(GERROR, "Division by zero in '%s[%d] /= %g'", yyvsp[-8].c, j, d);
 		break;
 	      }
@@ -5779,7 +5794,7 @@ case 213:
 	      if(!yyvsp[-2].i)
 		List_Put(pSymbol->val, j, &d);
 	      else
-		yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-8].c, j) ;	  
+		yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-8].c, j);	  
 	    }
 	  }
 	}
@@ -5788,10 +5803,12 @@ case 213:
       List_Delete(yyvsp[-1].l);
     ;
     break;}
-case 214:
-#line 1301 "Gmsh.y"
+case 216:
+#line 1308 "Gmsh.y"
 {
+      Symbol TheSymbol;
       TheSymbol.Name = yyvsp[-5].c;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){
 	TheSymbol.val = List_Create(5, 5, sizeof(double));
 	List_Copy(yyvsp[-1].l, TheSymbol.val);
@@ -5804,159 +5821,182 @@ case 214:
       List_Delete(yyvsp[-1].l);
     ;
     break;}
-case 215:
-#line 1316 "Gmsh.y"
+case 217:
+#line 1324 "Gmsh.y"
 {
+      Symbol TheSymbol;
       TheSymbol.Name = yyvsp[-2].c;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol)))
-	yymsg(GERROR, "Unknown variable '%s'", yyvsp[-2].c) ; 
+	yymsg(GERROR, "Unknown variable '%s'", yyvsp[-2].c); 
       else
 	*(double*)List_Pointer_Fast(pSymbol->val, 0) += yyvsp[-1].i; 
     ;
     break;}
-case 216:
-#line 1325 "Gmsh.y"
+case 218:
+#line 1334 "Gmsh.y"
 {
-      TheSymbol.Name = yyvsp[-5].c ;
+      Symbol TheSymbol;
+      TheSymbol.Name = yyvsp[-5].c;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol)))
-	yymsg(GERROR, "Unknown variable '%s'", yyvsp[-5].c) ; 
+	yymsg(GERROR, "Unknown variable '%s'", yyvsp[-5].c); 
       else{
+	double *pd;
 	if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)yyvsp[-3].d)))
-	  *pd += yyvsp[-1].i ;
+	  *pd += yyvsp[-1].i;
 	else
-	  yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-5].c, (int)yyvsp[-3].d) ;
+	  yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-5].c, (int)yyvsp[-3].d);
       }
     ;
     break;}
-case 217:
-#line 1340 "Gmsh.y"
+case 219:
+#line 1352 "Gmsh.y"
 { 
+      char* (*pStrOpt)(int num, int action, char *value);
+      StringXString *pStrCat;
       if(!(pStrCat = Get_StringOptionCategory(yyvsp[-5].c)))
 	yymsg(GERROR, "Unknown string option class '%s'", yyvsp[-5].c);
       else{
 	if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption(yyvsp[-3].c, pStrCat)))
 	  yymsg(GERROR, "Unknown string option '%s.%s'", yyvsp[-5].c, yyvsp[-3].c);
 	else
-	  pStrOpt(0, GMSH_SET|GMSH_GUI, yyvsp[-1].c) ;
+	  pStrOpt(0, GMSH_SET|GMSH_GUI, yyvsp[-1].c);
       }
     ;
     break;}
-case 218:
-#line 1352 "Gmsh.y"
+case 220:
+#line 1365 "Gmsh.y"
 { 
+      char* (*pStrOpt)(int num, int action, char *value);
+      StringXString *pStrCat;
       if(!(pStrCat = Get_StringOptionCategory(yyvsp[-8].c)))
 	yymsg(GERROR, "Unknown string option class '%s'", yyvsp[-8].c);
       else{
 	if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption(yyvsp[-3].c, pStrCat)))
 	  yymsg(GERROR, "Unknown string option '%s[%d].%s'", yyvsp[-8].c, (int)yyvsp[-6].d, yyvsp[-3].c);
 	else
-	  pStrOpt((int)yyvsp[-6].d, GMSH_SET|GMSH_GUI, yyvsp[-1].c) ;
+	  pStrOpt((int)yyvsp[-6].d, GMSH_SET|GMSH_GUI, yyvsp[-1].c);
       }
     ;
     break;}
-case 219:
-#line 1366 "Gmsh.y"
+case 221:
+#line 1381 "Gmsh.y"
 {
+      double (*pNumOpt)(int num, int action, double value);
+      StringXNumber *pNumCat;
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-5].c)))
 	yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-5].c);
       else{
 	if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption(yyvsp[-3].c, pNumCat)))
 	  yymsg(GERROR, "Unknown numeric option '%s.%s'", yyvsp[-5].c, yyvsp[-3].c);
 	else{
+	  double d = 0;
 	  switch(yyvsp[-2].i){
-	  case 0 : d = yyvsp[-1].d ; break ;
-	  case 1 : d = pNumOpt(0, GMSH_GET, 0) + yyvsp[-1].d ; break ;
-	  case 2 : d = pNumOpt(0, GMSH_GET, 0) - yyvsp[-1].d ; break ;
-	  case 3 : d = pNumOpt(0, GMSH_GET, 0) * yyvsp[-1].d ; break ;
+	  case 0 : d = yyvsp[-1].d; break;
+	  case 1 : d = pNumOpt(0, GMSH_GET, 0) + yyvsp[-1].d; break;
+	  case 2 : d = pNumOpt(0, GMSH_GET, 0) - yyvsp[-1].d; break;
+	  case 3 : d = pNumOpt(0, GMSH_GET, 0) * yyvsp[-1].d; break;
 	  case 4 : 
-	    if(yyvsp[-1].d) d = pNumOpt(0, GMSH_GET, 0) / yyvsp[-1].d ; 
+	    if(yyvsp[-1].d) d = pNumOpt(0, GMSH_GET, 0) / yyvsp[-1].d; 
 	    else yymsg(GERROR, "Division by zero in '%s.%s /= %g'", yyvsp[-5].c, yyvsp[-3].c, yyvsp[-1].d);
 	    break;
 	  }
-	  pNumOpt(0, GMSH_SET|GMSH_GUI, d) ;
+	  pNumOpt(0, GMSH_SET|GMSH_GUI, d);
 	}
       }
     ;
     break;}
-case 220:
-#line 1389 "Gmsh.y"
+case 222:
+#line 1406 "Gmsh.y"
 {
+      double (*pNumOpt)(int num, int action, double value);
+      StringXNumber *pNumCat;
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-8].c)))
 	yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-8].c);
       else{
 	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption(yyvsp[-3].c, pNumCat)))
 	  yymsg(GERROR, "Unknown numeric option '%s[%d].%s'", yyvsp[-8].c, (int)yyvsp[-6].d, yyvsp[-3].c);
 	else{
+	  double d = 0;
 	  switch(yyvsp[-2].i){
-	  case 0 : d = yyvsp[-1].d; break ;
-	  case 1 : d = pNumOpt((int)yyvsp[-6].d, GMSH_GET, 0) + yyvsp[-1].d ; break ;
-	  case 2 : d = pNumOpt((int)yyvsp[-6].d, GMSH_GET, 0) - yyvsp[-1].d ; break ;
-	  case 3 : d = pNumOpt((int)yyvsp[-6].d, GMSH_GET, 0) * yyvsp[-1].d ; break ;
+	  case 0 : d = yyvsp[-1].d; break;
+	  case 1 : d = pNumOpt((int)yyvsp[-6].d, GMSH_GET, 0) + yyvsp[-1].d; break;
+	  case 2 : d = pNumOpt((int)yyvsp[-6].d, GMSH_GET, 0) - yyvsp[-1].d; break;
+	  case 3 : d = pNumOpt((int)yyvsp[-6].d, GMSH_GET, 0) * yyvsp[-1].d; break;
 	  case 4 : 
-	    if(yyvsp[-1].d) d = pNumOpt((int)yyvsp[-6].d, GMSH_GET, 0) / yyvsp[-1].d ;
+	    if(yyvsp[-1].d) d = pNumOpt((int)yyvsp[-6].d, GMSH_GET, 0) / yyvsp[-1].d;
 	    else yymsg(GERROR, "Division by zero in '%s[%d].%s /= %g'", 
 		       yyvsp[-8].c, (int)yyvsp[-6].d, yyvsp[-3].c, yyvsp[-1].d);
 	    break;
 	  }
-	  pNumOpt((int)yyvsp[-6].d, GMSH_SET|GMSH_GUI, d) ;
+	  pNumOpt((int)yyvsp[-6].d, GMSH_SET|GMSH_GUI, d);
 	}
       }
     ;
     break;}
-case 221:
-#line 1413 "Gmsh.y"
+case 223:
+#line 1432 "Gmsh.y"
 {
+      double (*pNumOpt)(int num, int action, double value);
+      StringXNumber *pNumCat;
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-4].c)))
 	yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-4].c);
       else{
 	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption(yyvsp[-2].c, pNumCat)))
 	  yymsg(GERROR, "Unknown numeric option '%s.%s'", yyvsp[-4].c, yyvsp[-2].c);
 	else
-	  pNumOpt(0, GMSH_SET|GMSH_GUI, pNumOpt(0, GMSH_GET, 0)+yyvsp[-1].i) ;
+	  pNumOpt(0, GMSH_SET|GMSH_GUI, pNumOpt(0, GMSH_GET, 0)+yyvsp[-1].i);
       }
     ;
     break;}
-case 222:
-#line 1425 "Gmsh.y"
+case 224:
+#line 1445 "Gmsh.y"
 {
+      double (*pNumOpt)(int num, int action, double value);
+      StringXNumber *pNumCat;
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-7].c)))
 	yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-7].c);
       else{
 	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption(yyvsp[-2].c, pNumCat)))
 	  yymsg(GERROR, "Unknown numeric option '%s[%d].%s'", yyvsp[-7].c, (int)yyvsp[-5].d, yyvsp[-2].c);
 	else
-	  pNumOpt((int)yyvsp[-5].d, GMSH_SET|GMSH_GUI, pNumOpt((int)yyvsp[-5].d, GMSH_GET, 0)+yyvsp[-1].i) ;
+	  pNumOpt((int)yyvsp[-5].d, GMSH_SET|GMSH_GUI, pNumOpt((int)yyvsp[-5].d, GMSH_GET, 0)+yyvsp[-1].i);
       }
     ;
     break;}
-case 223:
-#line 1439 "Gmsh.y"
+case 225:
+#line 1461 "Gmsh.y"
 {
+      unsigned int (*pColOpt)(int num, int action, unsigned int value);
+      StringXColor *pColCat;
       if(!(pColCat = Get_ColorOptionCategory(yyvsp[-7].c)))
 	yymsg(GERROR, "Unknown color option class '%s'", yyvsp[-7].c);
       else{
 	if(!(pColOpt =  (unsigned int (*) (int, int, unsigned int))Get_ColorOption(yyvsp[-3].c, pColCat)))
 	  yymsg(GERROR, "Unknown color option '%s.Color.%s'", yyvsp[-7].c, yyvsp[-3].c);
 	else
-	  pColOpt(0, GMSH_SET|GMSH_GUI, yyvsp[-1].u) ;
+	  pColOpt(0, GMSH_SET|GMSH_GUI, yyvsp[-1].u);
       }
     ;
     break;}
-case 224:
-#line 1451 "Gmsh.y"
+case 226:
+#line 1474 "Gmsh.y"
 {
+      unsigned int (*pColOpt)(int num, int action, unsigned int value);
+      StringXColor *pColCat;
       if(!(pColCat = Get_ColorOptionCategory(yyvsp[-10].c)))
 	yymsg(GERROR, "Unknown color option class '%s'", yyvsp[-10].c);
       else{
 	if(!(pColOpt =  (unsigned int (*) (int, int, unsigned int))Get_ColorOption(yyvsp[-3].c, pColCat)))
 	  yymsg(GERROR, "Unknown color option '%s[%d].Color.%s'", yyvsp[-10].c, (int)yyvsp[-8].d, yyvsp[-3].c);
 	else
-	  pColOpt((int)yyvsp[-8].d, GMSH_SET|GMSH_GUI, yyvsp[-1].u) ;
+	  pColOpt((int)yyvsp[-8].d, GMSH_SET|GMSH_GUI, yyvsp[-1].u);
       }
     ;
     break;}
-case 225:
-#line 1465 "Gmsh.y"
+case 227:
+#line 1490 "Gmsh.y"
 {
       GmshColorTable *ct = Get_ColorTable(0);
       if(!ct)
@@ -5967,7 +6007,7 @@ case 225:
 	  yymsg(GERROR, "Too many (%d>%d) colors in View[%d].ColorTable", 
 		ct->size, COLORTABLE_NBMAX_COLOR, 0);
 	else
-	  for(i = 0; i < ct->size; i++) List_Read(yyvsp[-1].l, i, &ct->table[i]);
+	  for(int i = 0; i < ct->size; i++) List_Read(yyvsp[-1].l, i, &ct->table[i]);
 	if(ct->size == 1){
 	  ct->size = 2;
 	  ct->table[1] = ct->table[0];
@@ -5976,8 +6016,8 @@ case 225:
       List_Delete(yyvsp[-1].l);
     ;
     break;}
-case 226:
-#line 1485 "Gmsh.y"
+case 228:
+#line 1509 "Gmsh.y"
 {
       GmshColorTable *ct = Get_ColorTable((int)yyvsp[-6].d);
       if(!ct)
@@ -5988,7 +6028,7 @@ case 226:
 	  yymsg(GERROR, "Too many (%d>%d) colors in View[%d].ColorTable", 
 		   ct->size, COLORTABLE_NBMAX_COLOR, (int)yyvsp[-6].d);
 	else
-	  for(i = 0; i < ct->size; i++) List_Read(yyvsp[-1].l, i, &ct->table[i]);
+	  for(int i = 0; i < ct->size; i++) List_Read(yyvsp[-1].l, i, &ct->table[i]);
 	if(ct->size == 1){
 	  ct->size = 2;
 	  ct->table[1] = ct->table[0];
@@ -5997,8 +6037,8 @@ case 226:
       List_Delete(yyvsp[-1].l);
     ;
     break;}
-case 227:
-#line 1507 "Gmsh.y"
+case 229:
+#line 1531 "Gmsh.y"
 {
       try {
 	GMSH_PluginManager::instance()->setPluginOption(yyvsp[-6].c, yyvsp[-3].c, yyvsp[-1].d); 
@@ -6008,8 +6048,8 @@ case 227:
       }
     ;
     break;}
-case 228:
-#line 1517 "Gmsh.y"
+case 230:
+#line 1540 "Gmsh.y"
 {
       try {
 	GMSH_PluginManager::instance()->setPluginOption(yyvsp[-6].c, yyvsp[-3].c, yyvsp[-1].c); 
@@ -6019,47 +6059,68 @@ case 228:
       }
     ;
     break;}
-case 229:
-#line 1535 "Gmsh.y"
+case 231:
+#line 1558 "Gmsh.y"
 {
-      Cdbpts101((int)yyvsp[-4].d, yyvsp[-1].v[0], yyvsp[-1].v[1], yyvsp[-1].v[2], yyvsp[-1].v[3], yyvsp[-1].v[4]);
+      int num = (int)yyvsp[-4].d;
+      if(FindPoint(num, THEM)){
+	yymsg(GERROR, "Point %d already exists", num);
+      }
+      else{
+	Vertex *v = Create_Vertex(num, CTX.geom.scaling_factor * yyvsp[-1].v[0],
+				  CTX.geom.scaling_factor * yyvsp[-1].v[1],
+				  CTX.geom.scaling_factor * yyvsp[-1].v[2],
+				  CTX.geom.scaling_factor * yyvsp[-1].v[3], 1.0);
+	Tree_Add(THEM->Points, &v);
+      }
       yyval.s.Type = MSH_POINT;
-      yyval.s.Num  = (int)yyvsp[-4].d;
+      yyval.s.Num = num;
     ;
     break;}
-case 230:
-#line 1542 "Gmsh.y"
+case 232:
+#line 1574 "Gmsh.y"
 {
-      Cdbz101((int)yyvsp[-4].d, MSH_PHYSICAL_POINT, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL);
+      int num = (int)yyvsp[-4].d;
+      if(FindPhysicalGroup(num, MSH_PHYSICAL_POINT, THEM)){
+	yymsg(GERROR, "Physical point %d already exists", num);
+      }
+      else{
+	List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l);
+	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_POINT, temp);
+	List_Delete(temp);
+	List_Add(THEM->PhysicalGroups, &p);
+      }
+      List_Delete(yyvsp[-1].l);
       yyval.s.Type = MSH_PHYSICAL_POINT;
-      yyval.s.Num  = (int)yyvsp[-4].d;
+      yyval.s.Num = num;
     ;
     break;}
-case 231:
-#line 1548 "Gmsh.y"
+case 233:
+#line 1590 "Gmsh.y"
 {
-      Vertex *v;
-      Attractor *a;
-      double p;
-      int ip;
       for(int i = 0; i < List_Nbr(yyvsp[-9].l); i++){
+	double p;
       	List_Read(yyvsp[-9].l, i, &p);
-        ip = (int)p;
-        v = FindPoint(ip, THEM);
+        Vertex *v = FindPoint((int)p, THEM);
         if(!v)
-	  yymsg(WARNING, "Unknown Point %d", ip);
+	  yymsg(WARNING, "Unknown Point %d", (int)p);
 	else{
-	  a = Create_Attractor(List_Nbr(THEM->Metric->Attractors)+1,
-			       yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d, v, NULL, NULL);
+	  Attractor *a = Create_Attractor(List_Nbr(THEM->Metric->Attractors)+1,
+					  yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d, v, NULL, NULL);
 	  List_Add(THEM->Metric->Attractors, &a);
         }
       }
+      List_Delete(yyvsp[-9].l);
+      // dummy values
+      yyval.s.Type = 0;
+      yyval.s.Num = 0;
     ;
     break;}
-case 232:
-#line 1567 "Gmsh.y"
+case 234:
+#line 1609 "Gmsh.y"
 {
-      for(i = 0; i < List_Nbr(yyvsp[-3].l); i++){
+      for(int i = 0; i < List_Nbr(yyvsp[-3].l); i++){
+	double d;
 	List_Read(yyvsp[-3].l, i, &d);
 	Vertex *v = FindPoint((int)d, THEM);
 	if(!v)
@@ -6067,323 +6128,593 @@ case 232:
 	else
 	  v->lc = yyvsp[-1].d;
       }
-    ;
-    break;}
-case 233:
-#line 1581 "Gmsh.y"
-{
-      Cdbseg101((int)yyvsp[-4].d, MSH_SEGM_LINE, 1, yyvsp[-1].l, NULL, -1, -1, 0., 1., NULL, NULL, NULL);
-      yyval.s.Type = MSH_SEGM_LINE;
-      yyval.s.Num  = (int)yyvsp[-4].d;
-    ;
-    break;}
-case 234:
-#line 1587 "Gmsh.y"
-{
-      Cdbseg101((int)yyvsp[-4].d, MSH_SEGM_SPLN, 3, yyvsp[-1].l, NULL, -1, -1, 0., 1., NULL, NULL, NULL);
-      yyval.s.Type = MSH_SEGM_SPLN;
-      yyval.s.Num  = (int)yyvsp[-4].d;
+      List_Delete(yyvsp[-3].l);
+      // dummy values
+      yyval.s.Type = 0;
+      yyval.s.Num = 0;
     ;
     break;}
 case 235:
-#line 1593 "Gmsh.y"
+#line 1628 "Gmsh.y"
 {
-      Curve *c;
-      Attractor *a;
-      double p;
-      int ip;
-      for(int i = 0; i < List_Nbr(yyvsp[-9].l); i++){
-      	List_Read(yyvsp[-9].l, i, &p);
-        ip = (int)p;
-        c = FindCurve(ip, THEM);
-        if(!c)
-	  yymsg(WARNING, "Unknown Curve %d", ip);
-	else{
-	  a = Create_Attractor(List_Nbr(THEM->Metric->Attractors)+1,
-			       yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d, NULL, c, NULL);
-	  List_Add(THEM->Metric->Attractors, &a);
-        }
+      int num = (int)yyvsp[-4].d;
+      if(FindCurve(num, THEM)){
+	yymsg(GERROR, "Curve %d already exists", num);
       }
+      else{
+	List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l);
+	Curve *c = Create_Curve(num, MSH_SEGM_LINE, 1, temp, NULL,
+				-1, -1, 0., 1.);
+	Tree_Add(THEM->Curves, &c);
+	CreateReversedCurve(THEM, c);
+	List_Delete(temp);
+      }
+      List_Delete(yyvsp[-1].l);
+      yyval.s.Type = MSH_SEGM_LINE;
+      yyval.s.Num = num;
     ;
     break;}
 case 236:
-#line 1612 "Gmsh.y"
+#line 1646 "Gmsh.y"
 {
-      Cdbseg101((int)yyvsp[-4].d, MSH_SEGM_CIRC, 2, yyvsp[-1].l, NULL, -1, -1, 0., 1., NULL, NULL, NULL);
-      yyval.s.Type = MSH_SEGM_CIRC ;
-      yyval.s.Num  = (int)yyvsp[-4].d;
+      int num = (int)yyvsp[-4].d;
+      if(FindCurve(num, THEM)){
+	yymsg(GERROR, "Curve %d already exists", num);
+      }
+      else{
+	List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l);
+	Curve *c = Create_Curve(num, MSH_SEGM_SPLN, 3, temp, NULL,
+				-1, -1, 0., 1.);
+	Tree_Add(THEM->Curves, &c);
+	CreateReversedCurve(THEM, c);
+	List_Delete(temp);
+      }
+      List_Delete(yyvsp[-1].l);
+      yyval.s.Type = MSH_SEGM_SPLN;
+      yyval.s.Num = num;
     ;
     break;}
 case 237:
-#line 1618 "Gmsh.y"
+#line 1664 "Gmsh.y"
 {
-      Cdbseg101((int)yyvsp[-4].d, MSH_SEGM_ELLI, 2, yyvsp[-1].l, NULL, -1, -1, 0., 1., NULL, NULL, NULL);
-      yyval.s.Type = MSH_SEGM_ELLI ;
-      yyval.s.Num  = (int)yyvsp[-4].d;
+      int num = (int)yyvsp[-4].d;
+      if(FindCurve(num, THEM)){
+	yymsg(GERROR, "Curve %d already exists", num);
+      }
+      else{
+	List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l);
+	Curve *c = Create_Curve(num, MSH_SEGM_CIRC, 2, temp, NULL,
+				-1, -1, 0., 1.);
+	Tree_Add(THEM->Curves, &c);
+	CreateReversedCurve(THEM, c);
+	List_Delete(temp);
+      }
+      List_Delete(yyvsp[-1].l);
+      yyval.s.Type = MSH_SEGM_CIRC;
+      yyval.s.Num = num;
     ;
     break;}
 case 238:
-#line 1624 "Gmsh.y"
+#line 1682 "Gmsh.y"
 {
-      List_T *temp;
-      int i, j;
-      double d;
-      temp = List_Create(List_Nbr(yyvsp[-3].l), 1, sizeof(int));
-      for(i = 0; i < List_Nbr(yyvsp[-3].l); i++){
-      	List_Read(yyvsp[-3].l, i, &d);
-        j = (int)d;
-        List_Add(temp, &j);
+      int num = (int)yyvsp[-6].d;
+      if(FindCurve(num, THEM)){
+	yymsg(GERROR, "Curve %d already exists", num);
+      }
+      else{
+	List_T *temp = ListOfDouble2ListOfInt(yyvsp[-3].l);
+	Curve *c = Create_Curve(num, MSH_SEGM_CIRC, 2, temp, NULL,
+				-1, -1, 0., 1.);
+	c->Circle.n[0] = yyvsp[-1].v[0];
+	c->Circle.n[1] = yyvsp[-1].v[1];
+	c->Circle.n[2] = yyvsp[-1].v[2];
+	End_Curve(c);
+	Tree_Add(THEM->Curves, &c);
+	Curve *rc = CreateReversedCurve(THEM, c);
+	rc->Circle.n[0] = yyvsp[-1].v[0];
+	rc->Circle.n[1] = yyvsp[-1].v[1];
+	rc->Circle.n[2] = yyvsp[-1].v[2];
+	End_Curve(rc);
+	List_Delete(temp);
       }
-      AddCircleInDataBase ((int) yyvsp[-6].d, MSH_SEGM_CIRC, temp, yyvsp[-1].v);
-      List_Delete(temp);
-      yyval.s.Type = MSH_SEGM_CIRC ;
-      yyval.s.Num  = (int)yyvsp[-6].d;
+      List_Delete(yyvsp[-3].l);
+      yyval.s.Type = MSH_SEGM_CIRC;
+      yyval.s.Num = num;
     ;
     break;}
 case 239:
-#line 1641 "Gmsh.y"
+#line 1708 "Gmsh.y"
 {
-      Cdbseg101((int)yyvsp[-14].d, MSH_SEGM_PARAMETRIC, 2, NULL, NULL, -1, -1, yyvsp[-10].d, yyvsp[-8].d, yyvsp[-6].c, yyvsp[-4].c, yyvsp[-2].c);
-      yyval.s.Type = MSH_SEGM_PARAMETRIC ;
-      yyval.s.Num  = (int)yyvsp[-14].d;
+      int num = (int)yyvsp[-4].d;
+      if(FindCurve(num, THEM)){
+	yymsg(GERROR, "Curve %d already exists", num);
+      }
+      else{
+	List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l);
+	Curve *c = Create_Curve(num, MSH_SEGM_ELLI, 2, temp, NULL,
+				-1, -1, 0., 1.);
+	Tree_Add(THEM->Curves, &c);
+	CreateReversedCurve(THEM, c);
+	List_Delete(temp);
+      }
+      List_Delete(yyvsp[-1].l);
+      yyval.s.Type = MSH_SEGM_ELLI;
+      yyval.s.Num = num;
     ;
     break;}
 case 240:
-#line 1647 "Gmsh.y"
+#line 1727 "Gmsh.y"
 {
-      Cdbz101((int)yyvsp[-4].d, MSH_PHYSICAL_LINE, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL);
-      yyval.s.Type = MSH_PHYSICAL_LINE;
-      yyval.s.Num  = (int)yyvsp[-4].d;
+      int num = (int)yyvsp[-14].d;
+      if(FindCurve(num, THEM)){
+	yymsg(GERROR, "Curve %d already exists", num);
+      }
+      else{
+	Curve *c = Create_Curve(num, MSH_SEGM_PARAMETRIC, 2, NULL, NULL,
+				-1, -1, yyvsp[-10].d, yyvsp[-8].d);
+	strcpy(c->functu, yyvsp[-6].c);
+	strcpy(c->functv, yyvsp[-4].c);
+	strcpy(c->functw, yyvsp[-2].c);
+	Tree_Add(THEM->Curves, &c);
+	CreateReversedCurve(THEM, c);
+      }
+      yyval.s.Type = MSH_SEGM_PARAMETRIC;
+      yyval.s.Num = num;
     ;
     break;}
 case 241:
-#line 1653 "Gmsh.y"
+#line 1745 "Gmsh.y"
 {
-      yyval.s.Type = MSH_SEGM_LOOP;
-      Cdbz101((int)yyvsp[-4].d, yyval.s.Type, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL);
-      yyval.s.Num = (int)yyvsp[-4].d;
+      int num = (int)yyvsp[-4].d;
+      if(List_Nbr(yyvsp[-1].l) < 4){
+	yymsg(GERROR, "Too few control points for BSpline %d (%d < 4)", num,
+	      List_Nbr(yyvsp[-1].l));
+      }
+      else{
+	if(FindCurve(num, THEM)){
+	  yymsg(GERROR, "Curve %d already exists", num);
+	}
+	else{
+	  List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l);
+	  Curve *c = Create_Curve(num, MSH_SEGM_BSPLN, 2, temp, NULL,
+				  -1, -1, 0., 1.);
+	  Tree_Add(THEM->Curves, &c);
+	  CreateReversedCurve(THEM, c);
+	  List_Delete(temp);
+	}
+      }
+      List_Delete(yyvsp[-1].l);
+      yyval.s.Type = MSH_SEGM_BSPLN;
+      yyval.s.Num = num;
     ;
     break;}
 case 242:
-#line 1659 "Gmsh.y"
+#line 1769 "Gmsh.y"
 {
-      if(List_Nbr(yyvsp[-1].l) > 3){
-	Cdbseg101((int)yyvsp[-4].d, MSH_SEGM_BSPLN, 2, yyvsp[-1].l, NULL, -1, -1, 0., 1., NULL, NULL, NULL);
-	yyval.s.Type = MSH_SEGM_BSPLN;
-	yyval.s.Num  = (int)yyvsp[-4].d;
-      }
-      else
-	yymsg(GERROR, "Too few control points for BSpline %d (%d < 4)", (int)yyvsp[-4].d, 
+      int num = (int)yyvsp[-4].d;
+      if(List_Nbr(yyvsp[-1].l) < 4){
+	yymsg(GERROR, "Too few control points for Bezier curve %d (%d < 4)", num,
 	      List_Nbr(yyvsp[-1].l));
+      }
+      else{
+	if(FindCurve(num, THEM)){
+	  yymsg(GERROR, "Curve %d already exists", num);
+	}
+	else{
+	  List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l);
+	  Curve *c = Create_Curve(num, MSH_SEGM_BEZIER, 2, temp, NULL,
+				  -1, -1, 0., 1.);
+	  Tree_Add(THEM->Curves, &c);
+	  CreateReversedCurve(THEM, c);
+	  List_Delete(temp);
+	}
+      }
+      List_Delete(yyvsp[-1].l);
+      yyval.s.Type = MSH_SEGM_BEZIER;
+      yyval.s.Num = num;
     ;
     break;}
 case 243:
-#line 1670 "Gmsh.y"
+#line 1793 "Gmsh.y"
 {
-      if(List_Nbr(yyvsp[-1].l) > 3){
-	Cdbseg101((int)yyvsp[-4].d, MSH_SEGM_BEZIER, 2, yyvsp[-1].l, NULL, -1, -1, 0., 1., NULL, NULL, NULL);
-	yyval.s.Type = MSH_SEGM_BSPLN;
-	yyval.s.Num  = (int)yyvsp[-4].d;
+      int num = (int)yyvsp[-8].d;
+      if(List_Nbr(yyvsp[-5].l) + (int)yyvsp[-1].d + 1 != List_Nbr(yyvsp[-3].l)){
+	yymsg(GERROR, "Wrong definition of Nurbs Curve %d: "
+	      "got %d knots, need N + D + 1 = %d + %d + 1 = %d",
+	      (int)yyvsp[-8].d, List_Nbr(yyvsp[-3].l), List_Nbr(yyvsp[-5].l), (int)yyvsp[-1].d, List_Nbr(yyvsp[-5].l) + (int)yyvsp[-1].d + 1);
       }
-      else
-	yymsg(GERROR, "Too few control points for Bezier %d (%d < 4)", (int)yyvsp[-4].d, 
-	      List_Nbr(yyvsp[-1].l));
+      else{
+	if(FindCurve(num, THEM)){
+	  yymsg(GERROR, "Curve %d already exists", num);
+	}
+	else{
+	  List_T *temp = ListOfDouble2ListOfInt(yyvsp[-5].l);
+	  Curve *c = Create_Curve(num, MSH_SEGM_NURBS, (int)yyvsp[-1].d, temp, yyvsp[-3].l,
+				  -1, -1, 0., 1.);
+	  Tree_Add(THEM->Curves, &c);
+	  CreateReversedCurve(THEM, c);
+	  List_Delete(temp);
+	}
+      }
+      List_Delete(yyvsp[-5].l);
+      List_Delete(yyvsp[-3].l);
+      yyval.s.Type = MSH_SEGM_NURBS;
+      yyval.s.Num = num;
     ;
     break;}
 case 244:
-#line 1681 "Gmsh.y"
+#line 1819 "Gmsh.y"
 {
-      List_T *Temp;
-      int i;
-      double d;
-      if(List_Nbr(yyvsp[-5].l) + (int)yyvsp[-1].d + 1 != List_Nbr(yyvsp[-3].l)){
-	yymsg(GERROR, "Wrong definition of Nurbs Curve %d: "
-	      "got %d Knots, need N + D + 1 = %d + %d + 1 = %d",
-	      (int)yyvsp[-8].d, 
-	      List_Nbr(yyvsp[-3].l), List_Nbr(yyvsp[-5].l), (int)yyvsp[-1].d, List_Nbr(yyvsp[-5].l) + (int)yyvsp[-1].d + 1);
+      int num = (int)yyvsp[-4].d;
+      if(FindEdgeLoop(num, THEM)){
+	yymsg(GERROR, "Line loop %d already exists", num);
       }
       else{
-	Temp = List_Create(List_Nbr(yyvsp[-5].l), 1, sizeof(int));
-	for(i = 0; i < List_Nbr(yyvsp[-5].l); i++) {
-	  List_Read(yyvsp[-5].l, i, &d);
-	  j = (int)d;
-	  List_Add(Temp, &j);
-	}
-	AddCurveInDataBase ((int)yyvsp[-8].d, MSH_SEGM_NURBS, (int)yyvsp[-1].d, Temp, yyvsp[-3].l, -1, -1, 0., 1.);
-	List_Delete(Temp);
+	List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l);
+	sortEdgesInLoop(num, temp);
+	EdgeLoop *l = Create_EdgeLoop(num, temp);
+	Tree_Add(THEM->EdgeLoops, &l);
+	List_Delete(temp);
       }
+      List_Delete(yyvsp[-1].l);
+      yyval.s.Type = MSH_SEGM_LOOP;
+      yyval.s.Num = num;
     ;
     break;}
 case 245:
-#line 1706 "Gmsh.y"
+#line 1836 "Gmsh.y"
 {
-      Cdbz101((int)yyvsp[-4].d, MSH_SURF_PLAN, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL);
-      yyval.s.Type = MSH_SURF_PLAN;
-      yyval.s.Num  = (int)yyvsp[-4].d;
+      for(int i = 0; i < List_Nbr(yyvsp[-9].l); i++){
+	double p;
+      	List_Read(yyvsp[-9].l, i, &p);
+	Curve *c = FindCurve((int)p, THEM);
+        if(!c)
+	  yymsg(WARNING, "Unknown Curve %d", (int)p);
+	else{
+	  Attractor *a = Create_Attractor(List_Nbr(THEM->Metric->Attractors)+1,
+					  yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d, NULL, c, NULL);
+	  List_Add(THEM->Metric->Attractors, &a);
+        }
+      }
+      // dummy values
+      yyval.s.Type = 0;
+      yyval.s.Num = 0;
     ;
     break;}
 case 246:
-#line 1712 "Gmsh.y"
+#line 1854 "Gmsh.y"
 {
-      Surface *s,*support;
-      support = FindSurface((int)yyvsp[-4].d, THEM);
-      if(!support)
-	yymsg(GERROR, "Unknown Surface %d", (int)yyvsp[-4].d);
+      int num = (int)yyvsp[-4].d;
+      if(FindPhysicalGroup(num, MSH_PHYSICAL_LINE, THEM)){
+	yymsg(GERROR, "Physical line %d already exists", num);
+      }
       else{
-	Cdbz101((int)yyvsp[-8].d, MSH_SURF_PLAN, 0, 0, 0, 0, 0, NULL, yyvsp[-2].l, NULL);
-	s = FindSurface((int)yyvsp[-8].d, THEM);
-	if(!s)
-	  yymsg(GERROR, "Unknown Surface %d", (int)yyvsp[-8].d);
+	List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l);
+	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_LINE, temp);
+	List_Delete(temp);
+	List_Add(THEM->PhysicalGroups, &p);
+      }
+      List_Delete(yyvsp[-1].l);
+      yyval.s.Type = MSH_PHYSICAL_LINE;
+      yyval.s.Num = num;
+    ;
+    break;}
+case 247:
+#line 1873 "Gmsh.y"
+{
+      int num = (int)yyvsp[-4].d;
+      if(FindSurface(num, THEM)){
+	yymsg(GERROR, "Surface %d already exists", num);
+      }
+      else{
+	Surface *s = Create_Surface(num, MSH_SURF_PLAN);
+	List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l);
+	setSurfaceGeneratrices(s, temp);
+	List_Delete(temp);
+	s->Support = s;
+	End_Surface(s);
+	Tree_Add(THEM->Surfaces, &s);
+      }
+      List_Delete(yyvsp[-1].l);
+      yyval.s.Type = MSH_SURF_PLAN;
+      yyval.s.Num = num;
+    ;
+    break;}
+case 248:
+#line 1892 "Gmsh.y"
+{
+      int num = (int)yyvsp[-4].d, type = 0;
+      if(FindSurface(num, THEM)){
+	yymsg(GERROR, "Surface %d already exists", num);
+      }
+      else{
+	double d;
+	List_Read(yyvsp[-1].l, 0, &d);
+	EdgeLoop *el = FindEdgeLoop((int)d, THEM);
+	if(!el){
+	  yymsg(GERROR, "Unknown Line Loop %d", (int)d);
+	}
+	else{
+	  int j = List_Nbr(el->Curves);
+	  if(j == 4){
+	    type = MSH_SURF_REGL;
+	  }
+	  else if(j == 3){
+	    type = MSH_SURF_TRIC;
+	  }
+	  else{
+	    yymsg(GERROR, "Wrong definition of Ruled Surface %d: "
+		  "%d borders instead of 3 or 4", num, j);
+	    type = MSH_SURF_PLAN;
+	  }
+	  Surface *s = Create_Surface(num, type);
+	  List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l);
+	  setSurfaceGeneratrices(s, temp);
+	  List_Delete(temp);
+	  s->Support = s;
+	  End_Surface(s);
+	  Tree_Add(THEM->Surfaces, &s);
+	}
+      }
+      List_Delete(yyvsp[-1].l);
+      yyval.s.Type = type;
+      yyval.s.Num = num;
+    ;
+    break;}
+case 249:
+#line 1931 "Gmsh.y"
+{
+      int num = (int)yyvsp[-8].d;
+      Surface *support = FindSurface((int)yyvsp[-4].d, THEM);
+      if(!support){
+	yymsg(GERROR, "Unknown support surface %d", (int)yyvsp[-4].d);
+      }
+      else{
+	if(FindSurface(num, THEM)){
+	  yymsg(GERROR, "Surface %d already exists", num);
+	}
 	else{
-	  s->Typ =  MSH_SURF_TRIMMED;
+	  Surface *s = Create_Surface(num, MSH_SURF_TRIMMED);
+	  List_T *temp = ListOfDouble2ListOfInt(yyvsp[-2].l);
+	  setSurfaceGeneratrices(s, temp);
+	  List_Delete(temp);
 	  s->Support = support;
-	  yyval.s.Type = MSH_SURF_TRIMMED;
-	  yyval.s.Num  = (int)yyvsp[-8].d;
+	  End_Surface(s);
+	  Tree_Add(THEM->Surfaces, &s);
 	}
       }
+      List_Delete(yyvsp[-2].l);
+      yyval.s.Type = MSH_SURF_TRIMMED;
+      yyval.s.Num = num;
+    ;
+    break;}
+case 250:
+#line 1957 "Gmsh.y"
+{
+      int num = (int)yyvsp[-10].d, type = 0;
+      Surface *s = FindSurface(num, THEM);
+      if(!s) {
+	yymsg(GERROR, "Unknown surface %d", num);
+      }
+      else{
+	// FIXME: parameters not used; undocumented
+	POLY_rep *rep = new POLY_rep(yyvsp[-2].l, yyvsp[-1].l);
+	s->thePolyRep = rep;
+	type = s->Typ;
+      }
+      //FIXME: do you copy the data?
+      //List_Delete($12);
+      //List_Delete($13);
+      yyval.s.Type = type;
+      yyval.s.Num = (int)yyvsp[-10].d;
     ;
     break;}
-case 247:
-#line 1731 "Gmsh.y"
+case 251:
+#line 1979 "Gmsh.y"
 {
-      List_Read(yyvsp[-1].l, 0, &d);
-      i = (int)d;
-      EdgeLoop *el = FindEdgeLoop(i, THEM);
-      if(!el)
-	yymsg(GERROR, "Unknown Line Loop %d", i);
+      int num = (int)yyvsp[-10].d, type = 0;
+      Surface *s = FindSurface(num, THEM);
+      if(!s) {
+	yymsg(GERROR, "Unknown surface %d", num);
+      }
       else{
-	j = List_Nbr(el->Curves);
-	if(j==4)
-	  yyval.s.Type = MSH_SURF_REGL;
-	else if(j==3)
-	  yyval.s.Type = MSH_SURF_TRIC;
-	else
-	  yymsg(GERROR, "Wrong definition of Ruled Surface %d: "
-		   "%d borders instead of 3 or 4", 
-		   (int)yyvsp[-4].d, j);
-	Cdbz101((int)yyvsp[-4].d, yyval.s.Type, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL);
-	yyval.s.Num = (int)yyvsp[-4].d;
+	POLY_rep *rep = new POLY_rep(yyvsp[-2].l, yyvsp[-1].l);
+	s->thePolyRep = rep;
+	type = s->Typ;
       }
+      yyval.s.Type = type;
+      yyval.s.Num = (int)yyvsp[-10].d;
     ;
     break;}
-case 248:
-#line 1753 "Gmsh.y"
-{
-    AddTriangulationToSurface ((int) yyvsp[-10].d, (int) yyvsp[-6].d, (int) yyvsp[-4].d, yyvsp[-2].l, yyvsp[-1].l);
-    yyval.s.Num = (int)yyvsp[-10].d;
-  ;
-    break;}
-case 249:
-#line 1761 "Gmsh.y"
+case 252:
+#line 1996 "Gmsh.y"
 {
-      CreateNurbsSurface ((int) yyvsp[-16].d , (int)yyvsp[-4].d , (int)yyvsp[-2].d  , yyvsp[-13].l, yyvsp[-10].l, yyvsp[-8].l);
+      int num = (int)yyvsp[-16].d;
+      if(FindSurface(num, THEM)){
+	yymsg(GERROR, "Surface %d already exists", num);
+      }
+      else{
+	CreateNurbsSurface(num, (int)yyvsp[-4].d, (int)yyvsp[-2].d, yyvsp[-13].l, yyvsp[-10].l, yyvsp[-8].l);
+      }
+      for(int i = 0; i < List_Nbr(yyvsp[-13].l); i++)
+	List_Delete((List_T*)List_Pointer(yyvsp[-13].l, i));
+      List_Delete(yyvsp[-13].l);
+      List_Delete(yyvsp[-10].l);
+      List_Delete(yyvsp[-8].l);
       yyval.s.Type = MSH_SURF_NURBS;
-      yyval.s.Num = (int)yyvsp[-16].d;
+      yyval.s.Num = num;
     ;
     break;}
-case 250:
-#line 1769 "Gmsh.y"
+case 253:
+#line 2015 "Gmsh.y"
 {
-      CreateNurbsSurfaceSupport ((int)yyvsp[-16].d, (int) yyvsp[-4].d , (int) yyvsp[-2].d , yyvsp[-13].l, yyvsp[-10].l, yyvsp[-8].l);
+      int num = (int)yyvsp[-16].d;
+      if(FindSurface(num, THEM)){
+	yymsg(GERROR, "Surface %d already exists", num);
+      }
+      else{
+	CreateNurbsSurfaceSupport(num, (int)yyvsp[-4].d, (int)yyvsp[-2].d, yyvsp[-13].l, yyvsp[-10].l, yyvsp[-8].l);
+      }
+      for(int i = 0; i < List_Nbr(yyvsp[-13].l); i++)
+	List_Delete((List_T*)List_Pointer(yyvsp[-13].l, i));
+      List_Delete(yyvsp[-13].l);
+      List_Delete(yyvsp[-10].l);
+      List_Delete(yyvsp[-8].l);
+      yyval.s.Type = MSH_SURF_NURBS;
+      yyval.s.Num = num;
     ;
     break;}
-case 251:
-#line 1773 "Gmsh.y"
+case 254:
+#line 2032 "Gmsh.y"
 {
-      Cdbz101((int)yyvsp[-4].d, MSH_PHYSICAL_SURFACE, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL);
-      yyval.s.Type = MSH_PHYSICAL_SURFACE;
-      yyval.s.Num  = (int)yyvsp[-4].d;
+      int num = (int)yyvsp[-4].d;
+      if(FindSurfaceLoop(num, THEM)){
+	yymsg(GERROR, "Surface loop %d already exists", num);
+      }
+      else{
+	List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l);
+	SurfaceLoop *l = Create_SurfaceLoop(num, temp);
+	Tree_Add(THEM->SurfaceLoops, &l);
+	List_Delete(temp);
+      }
+      List_Delete(yyvsp[-1].l);
+      yyval.s.Type = MSH_SURF_LOOP;
+      yyval.s.Num = num;
     ;
     break;}
-case 252:
-#line 1779 "Gmsh.y"
+case 255:
+#line 2048 "Gmsh.y"
 {
-      Cdbz101((int)yyvsp[-4].d, MSH_SURF_LOOP, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL);
-      yyval.s.Type = MSH_SURF_LOOP;
-      yyval.s.Num  = (int)yyvsp[-4].d;
+      int num = (int)yyvsp[-4].d;
+      if(FindPhysicalGroup(num, MSH_PHYSICAL_SURFACE, THEM)){
+	yymsg(GERROR, "Physical surface %d already exists", num);
+      }
+      else{
+	List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l);
+	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_SURFACE, temp);
+	List_Delete(temp);
+	List_Add(THEM->PhysicalGroups, &p);
+      }
+      List_Delete(yyvsp[-1].l);
+      yyval.s.Type = MSH_PHYSICAL_SURFACE;
+      yyval.s.Num = num;
     ;
     break;}
-case 253:
-#line 1788 "Gmsh.y"
+case 256:
+#line 2067 "Gmsh.y"
 {
-      Cdbz101((int)yyvsp[-4].d, MSH_VOLUME, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL);
+      int num = (int)yyvsp[-4].d;
+      if(FindVolume(num, THEM)){
+	yymsg(GERROR, "Volume %d already exists", num);
+      }
+      else{
+	Volume *v = Create_Volume(num, MSH_VOLUME);
+	List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l);
+	setVolumeSurfaces(v, temp);
+	List_Delete(temp);
+	Tree_Add(THEM->Volumes, &v);
+      }
+      List_Delete(yyvsp[-1].l);
       yyval.s.Type = MSH_VOLUME;
-      yyval.s.Num  = (int)yyvsp[-4].d;      
+      yyval.s.Num = num;
     ;
     break;}
-case 254:
-#line 1794 "Gmsh.y"
+case 257:
+#line 2084 "Gmsh.y"
 {
-      Cdbz101((int)yyvsp[-4].d, MSH_VOLUME, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL);
+      int num = (int)yyvsp[-4].d;
+      if(FindVolume(num, THEM)){
+	yymsg(GERROR, "Volume %d already exists", num);
+      }
+      else{
+	Volume *v = Create_Volume(num, MSH_VOLUME);
+	List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l);
+	setVolumeSurfaces(v, temp);
+	List_Delete(temp);
+	Tree_Add(THEM->Volumes, &v);
+      }
+      List_Delete(yyvsp[-1].l);
       yyval.s.Type = MSH_VOLUME;
-      yyval.s.Num  = (int)yyvsp[-4].d;
+      yyval.s.Num = num;
     ;
     break;}
-case 255:
-#line 1800 "Gmsh.y"
+case 258:
+#line 2101 "Gmsh.y"
 {
-      Cdbz101((int)yyvsp[-4].d, MSH_PHYSICAL_VOLUME, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL);
+      int num = (int)yyvsp[-4].d;
+      if(FindPhysicalGroup(num, MSH_PHYSICAL_VOLUME, THEM)){
+	yymsg(GERROR, "Physical volume %d already exists", num);
+      }
+      else{
+	List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l);
+	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_VOLUME, temp);
+	List_Delete(temp);
+	List_Add(THEM->PhysicalGroups, &p);
+      }
+      List_Delete(yyvsp[-1].l);
       yyval.s.Type = MSH_PHYSICAL_VOLUME;
-      yyval.s.Num  = (int)yyvsp[-4].d;
+      yyval.s.Num = num;
     ;
     break;}
-case 256:
-#line 1811 "Gmsh.y"
+case 259:
+#line 2122 "Gmsh.y"
 {
-      TranslateShapes (yyvsp[-3].v[0], yyvsp[-3].v[1], yyvsp[-3].v[2], yyvsp[-1].l, 1);
+      TranslateShapes(yyvsp[-3].v[0], yyvsp[-3].v[1], yyvsp[-3].v[2], yyvsp[-1].l, 1);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
-case 257:
-#line 1816 "Gmsh.y"
+case 260:
+#line 2127 "Gmsh.y"
 {
       RotateShapes(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].d, yyvsp[-1].l, 1);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
-case 258:
-#line 1821 "Gmsh.y"
+case 261:
+#line 2132 "Gmsh.y"
 {
       SymmetryShapes(yyvsp[-3].v[0], yyvsp[-3].v[1], yyvsp[-3].v[2], yyvsp[-3].v[3], yyvsp[-1].l, 1);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
-case 259:
-#line 1826 "Gmsh.y"
+case 262:
+#line 2137 "Gmsh.y"
 {
       DilatShapes(yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], yyvsp[-4].d, yyvsp[-1].l, 1);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
-case 260:
-#line 1833 "Gmsh.y"
+case 263:
+#line 2144 "Gmsh.y"
 { yyval.l = yyvsp[0].l; ;
     break;}
-case 261:
-#line 1834 "Gmsh.y"
+case 264:
+#line 2145 "Gmsh.y"
 { yyval.l = yyvsp[0].l; ;
     break;}
-case 262:
-#line 1835 "Gmsh.y"
+case 265:
+#line 2146 "Gmsh.y"
 { yyval.l = yyvsp[0].l; ;
     break;}
-case 263:
-#line 1840 "Gmsh.y"
+case 266:
+#line 2151 "Gmsh.y"
 {
       yyval.l = List_Create(3, 3, sizeof(Shape));
     ;
     break;}
-case 264:
-#line 1844 "Gmsh.y"
+case 267:
+#line 2155 "Gmsh.y"
 {
       List_Add(yyval.l, &yyvsp[0].s);
     ;
     break;}
-case 265:
-#line 1848 "Gmsh.y"
+case 268:
+#line 2159 "Gmsh.y"
 {
-      for(i = 0; i < List_Nbr(yyvsp[-2].l); i++){
+      for(int i = 0; i < List_Nbr(yyvsp[-2].l); i++){
+	double d;
 	List_Read(yyvsp[-2].l, i, &d);
+	Shape TheShape;
 	TheShape.Num = (int)d;
 	Vertex *v = FindPoint(TheShape.Num, THEM);
 	if(!v)
@@ -6395,11 +6726,13 @@ case 265:
       }
     ;
     break;}
-case 266:
-#line 1862 "Gmsh.y"
+case 269:
+#line 2175 "Gmsh.y"
 {
-      for(i = 0; i < List_Nbr(yyvsp[-2].l); i++){
+      for(int i = 0; i < List_Nbr(yyvsp[-2].l); i++){
+	double d;
 	List_Read(yyvsp[-2].l, i, &d);
+	Shape TheShape;
 	TheShape.Num = (int)d;
 	Curve *c = FindCurve(TheShape.Num, THEM);
 	if(!c)
@@ -6411,11 +6744,13 @@ case 266:
       }
     ;
     break;}
-case 267:
-#line 1876 "Gmsh.y"
+case 270:
+#line 2191 "Gmsh.y"
 {
-      for(i = 0; i < List_Nbr(yyvsp[-2].l); i++){
+      for(int i = 0; i < List_Nbr(yyvsp[-2].l); i++){
+	double d;
 	List_Read(yyvsp[-2].l, i, &d);
+	Shape TheShape;
 	TheShape.Num = (int)d;
 	Surface *s = FindSurface(TheShape.Num, THEM);
 	if(!s)
@@ -6427,11 +6762,13 @@ case 267:
       }
     ;
     break;}
-case 268:
-#line 1890 "Gmsh.y"
+case 271:
+#line 2207 "Gmsh.y"
 {
-      for(i = 0; i < List_Nbr(yyvsp[-2].l); i++){
+      for(int i = 0; i < List_Nbr(yyvsp[-2].l); i++){
+	double d;
 	List_Read(yyvsp[-2].l, i, &d);
+	Shape TheShape;
 	TheShape.Num = (int)d;
 	Volume *v = FindVolume(TheShape.Num, THEM);
 	if(!v)
@@ -6443,102 +6780,119 @@ case 268:
       }
     ;
     break;}
-case 269:
-#line 1909 "Gmsh.y"
+case 272:
+#line 2228 "Gmsh.y"
 {
       yyval.l = List_Create(3, 3, sizeof(Shape));
-      for(i = 0; i < List_Nbr(yyvsp[-1].l); i++){
-	List_Read (yyvsp[-1].l, i, &TheShape);
+      for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){
+	Shape TheShape;
+	List_Read(yyvsp[-1].l, i, &TheShape);
+	int j;
 	CopyShape(TheShape.Type, TheShape.Num, &j);
 	TheShape.Num = j;
 	List_Add(yyval.l, &TheShape);
       }
+      List_Delete(yyvsp[-1].l);
     ;
     break;}
-case 270:
-#line 1919 "Gmsh.y"
+case 273:
+#line 2241 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-4].c, "View")) DuplicateView((int)yyvsp[-2].d, 0);
       yyval.l = NULL;
     ;
     break;}
-case 271:
-#line 1930 "Gmsh.y"
+case 274:
+#line 2252 "Gmsh.y"
 {
-      for(i = 0; i < List_Nbr(yyvsp[-1].l); i++){
-	List_Read (yyvsp[-1].l, i, &TheShape);
+      for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){
+	Shape TheShape;
+	List_Read(yyvsp[-1].l, i, &TheShape);
 	DeleteShape(TheShape.Type, TheShape.Num);
       }
+      List_Delete(yyvsp[-1].l);
     ;
     break;}
-case 272:
-#line 1937 "Gmsh.y"
+case 275:
+#line 2261 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-4].c, "View")) RemoveViewByIndex((int)yyvsp[-2].d);
     ;
     break;}
-case 273:
-#line 1941 "Gmsh.y"
+case 276:
+#line 2265 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-1].c, "Meshes") || !strcmp(yyvsp[-1].c, "All"))
 	Init_Mesh(THEM);
     ;
     break;}
-case 274:
-#line 1951 "Gmsh.y"
+case 277:
+#line 2275 "Gmsh.y"
 {
-      for(i = 0; i < List_Nbr(yyvsp[-1].l); i++){
-	List_Read (yyvsp[-1].l, i, &TheShape);
+      for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){
+	Shape TheShape;
+	List_Read(yyvsp[-1].l, i, &TheShape);
 	ColorShape(TheShape.Type, TheShape.Num, yyvsp[-3].u);
       }
+      List_Delete(yyvsp[-1].l);      
     ;
     break;}
-case 275:
-#line 1963 "Gmsh.y"
+case 278:
+#line 2289 "Gmsh.y"
 {
       int m = (CTX.visibility_mode == 2) ? VIS_MESH : 
 	((CTX.visibility_mode == 1) ? VIS_GEOM : VIS_GEOM|VIS_MESH);
-      for(i = 2; i < 6; i++)
+      for(int i = 2; i < 6; i++)
 	SetVisibilityByNumber(yyvsp[-1].c, i, m);
     ;
     break;}
-case 276:
-#line 1970 "Gmsh.y"
+case 279:
+#line 2296 "Gmsh.y"
 {
-      for(i = 2; i < 6; i++)
+      for(int i = 2; i < 6; i++)
 	SetVisibilityByNumber(yyvsp[-1].c, i, 0);
     ;
     break;}
-case 277:
-#line 1975 "Gmsh.y"
+case 280:
+#line 2301 "Gmsh.y"
 {
       int m = (CTX.visibility_mode == 2) ? VIS_MESH :
 	((CTX.visibility_mode == 1) ? VIS_GEOM : VIS_GEOM|VIS_MESH);
-      for(i = 0; i < List_Nbr(yyvsp[-1].l); i++){
-	List_Read (yyvsp[-1].l, i, &TheShape);
+      for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){
+	Shape TheShape;
+	List_Read(yyvsp[-1].l, i, &TheShape);
 	VisibilityShape(TheShape.Type, TheShape.Num, m);
       }
+      List_Delete(yyvsp[-1].l);
     ;
     break;}
-case 278:
-#line 1984 "Gmsh.y"
+case 281:
+#line 2312 "Gmsh.y"
 {
-      for(i = 0; i < List_Nbr(yyvsp[-1].l); i++){
-	List_Read (yyvsp[-1].l, i, &TheShape);
+      for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){
+	Shape TheShape;
+	List_Read(yyvsp[-1].l, i, &TheShape);
 	VisibilityShape(TheShape.Type, TheShape.Num, 0);
       }
+      List_Delete(yyvsp[-1].l);
     ;
     break;}
-case 279:
-#line 1996 "Gmsh.y"
+case 282:
+#line 2326 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-2].c, "Include")){
+	char tmpstring[1024];
 	FixRelativePath(yyvsp[-1].c, tmpstring);
+	// Warning: we *don't* close included files. If you need to
+	// include many files, use "Merge" instead: some OSes limit
+	// the number of files a process can open simultaneously (500
+	// for OS X)
 	ParseFile(tmpstring, 0, 0);
       }
       else if(!strcmp(yyvsp[-2].c, "Print")){
 #if defined(HAVE_FLTK)
 	if(!CTX.batch){
+	  char tmpstring[1024];
 	  FixRelativePath(yyvsp[-1].c, tmpstring);
 	  CreateOutputFile(tmpstring, CTX.print.format);
 	}
@@ -6546,15 +6900,18 @@ case 279:
       }
       else if(!strcmp(yyvsp[-2].c, "Save")){
 #if defined(HAVE_FLTK)
+	char tmpstring[1024];
 	FixRelativePath(yyvsp[-1].c, tmpstring);
 	CreateOutputFile(tmpstring, CTX.mesh.format);
 #endif
       }
       else if(!strcmp(yyvsp[-2].c, "Merge")){
+	char tmpstring[1024];
 	FixRelativePath(yyvsp[-1].c, tmpstring);
 	MergeProblem(tmpstring);
       }
       else if(!strcmp(yyvsp[-2].c, "MergeWithBoundingBox")){
+	char tmpstring[1024];
 	FixRelativePath(yyvsp[-1].c, tmpstring);
 	MergeProblemWithBoundingBox(tmpstring);
       }
@@ -6566,12 +6923,13 @@ case 279:
       }
     ;
     break;}
-case 280:
-#line 2031 "Gmsh.y"
+case 283:
+#line 2370 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-6].c, "Save") && !strcmp(yyvsp[-5].c, "View")){
 	Post_View *v = (Post_View *)List_Pointer_Test(CTX.post.list, (int)yyvsp[-3].d);
 	if(v){
+	  char tmpstring[1024];
 	  FixRelativePath(yyvsp[-1].c, tmpstring);
 	  WriteView(v, tmpstring, 0, 0);
 	}
@@ -6581,8 +6939,8 @@ case 280:
       }
     ;
     break;}
-case 281:
-#line 2044 "Gmsh.y"
+case 284:
+#line 2384 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-2].c, "Sleep")){
 	long sleep_time = GetTime();
@@ -6591,8 +6949,6 @@ case 281:
 	}
       }
       else if(!strcmp(yyvsp[-2].c, "Mesh")){
-	//Maillage_Dimension_0(THEM);
-	//mai3d(THEM, (int)$2);
 	yymsg(GERROR, "Mesh directives are not (yet) allowed in scripts");
       }
       else{
@@ -6600,19 +6956,19 @@ case 281:
       }
     ;
     break;}
-case 282:
-#line 2061 "Gmsh.y"
+case 285:
+#line 2399 "Gmsh.y"
 {
       try {
 	GMSH_PluginManager::instance()->action(yyvsp[-4].c, yyvsp[-1].c, 0);
       }
-      catch (...) {
+      catch(...) {
 	yymsg(WARNING, "Unknown action '%s' or plugin '%s'", yyvsp[-1].c, yyvsp[-4].c);
       }
    ;
     break;}
-case 283:
-#line 2070 "Gmsh.y"
+case 286:
+#line 2408 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-1].c, "Views"))
 	CombineViews(1, 0);
@@ -6622,14 +6978,14 @@ case 283:
 	yymsg(GERROR, "Unknown Combine command");
     ;
     break;}
-case 284:
-#line 2079 "Gmsh.y"
+case 287:
+#line 2417 "Gmsh.y"
 {
       exit(0);
     ;
     break;}
-case 285:
-#line 2083 "Gmsh.y"
+case 288:
+#line 2421 "Gmsh.y"
 {
 #if defined(HAVE_FLTK)
       if(!CTX.batch){ // we're in interactive mode
@@ -6646,39 +7002,48 @@ case 285:
 #endif
     ;
     break;}
-case 286:
-#line 2105 "Gmsh.y"
+case 289:
+#line 2443 "Gmsh.y"
 {
-      LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-3].d ;
-      LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-1].d ;
-      LoopControlVariablesTab[ImbricatedLoop][2] = 1.0 ;
-      LoopControlVariablesNameTab[ImbricatedLoop] = "" ;
+      LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-3].d;
+      LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-1].d;
+      LoopControlVariablesTab[ImbricatedLoop][2] = 1.0;
+      LoopControlVariablesNameTab[ImbricatedLoop] = "";
       fgetpos(yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]);
       yylinenoImbricatedLoopsTab[ImbricatedLoop] = yylineno;
       ImbricatedLoop++;
+      if(ImbricatedLoop > MAX_RECUR_LOOPS-1){
+	yymsg(GERROR, "Reached maximum number of imbricated loops");
+	ImbricatedLoop = MAX_RECUR_LOOPS-1;
+      }
     ;
     break;}
-case 287:
-#line 2115 "Gmsh.y"
+case 290:
+#line 2457 "Gmsh.y"
 {
-      LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-5].d ;
-      LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-3].d ;
-      LoopControlVariablesTab[ImbricatedLoop][2] = yyvsp[-1].d ;
-      LoopControlVariablesNameTab[ImbricatedLoop] = "" ;
+      LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-5].d;
+      LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-3].d;
+      LoopControlVariablesTab[ImbricatedLoop][2] = yyvsp[-1].d;
+      LoopControlVariablesNameTab[ImbricatedLoop] = "";
       fgetpos(yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]);
       yylinenoImbricatedLoopsTab[ImbricatedLoop] = yylineno;
       ImbricatedLoop++;
+      if(ImbricatedLoop > MAX_RECUR_LOOPS-1){
+	yymsg(GERROR, "Reached maximum number of imbricated loops");
+	ImbricatedLoop = MAX_RECUR_LOOPS-1;
+      }
     ;
     break;}
-case 288:
-#line 2125 "Gmsh.y"
+case 291:
+#line 2471 "Gmsh.y"
 {
-      LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-3].d ;
-      LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-1].d ;
-      LoopControlVariablesTab[ImbricatedLoop][2] = 1.0 ;
-      LoopControlVariablesNameTab[ImbricatedLoop] = yyvsp[-6].c ;
-      
+      LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-3].d;
+      LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-1].d;
+      LoopControlVariablesTab[ImbricatedLoop][2] = 1.0;
+      LoopControlVariablesNameTab[ImbricatedLoop] = yyvsp[-6].c;
+      Symbol TheSymbol;      
       TheSymbol.Name = yyvsp[-6].c;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){
 	TheSymbol.val = List_Create(1, 1, sizeof(double));
 	List_Put(TheSymbol.val, 0, &yyvsp[-3].d);
@@ -6687,21 +7052,25 @@ case 288:
       else{
 	List_Write(pSymbol->val, 0, &yyvsp[-3].d);
       }
-      
       fgetpos(yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]);
       yylinenoImbricatedLoopsTab[ImbricatedLoop] = yylineno;
       ImbricatedLoop++;
+      if(ImbricatedLoop > MAX_RECUR_LOOPS-1){
+	yymsg(GERROR, "Reached maximum number of imbricated loops");
+	ImbricatedLoop = MAX_RECUR_LOOPS-1;
+      }
     ;
     break;}
-case 289:
-#line 2146 "Gmsh.y"
+case 292:
+#line 2496 "Gmsh.y"
 {
-      LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-5].d ;
-      LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-3].d ;
-      LoopControlVariablesTab[ImbricatedLoop][2] = yyvsp[-1].d ;
-      LoopControlVariablesNameTab[ImbricatedLoop] = yyvsp[-8].c ;
-
+      LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-5].d;
+      LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-3].d;
+      LoopControlVariablesTab[ImbricatedLoop][2] = yyvsp[-1].d;
+      LoopControlVariablesNameTab[ImbricatedLoop] = yyvsp[-8].c;
+      Symbol TheSymbol;
       TheSymbol.Name = yyvsp[-8].c;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){
 	TheSymbol.val = List_Create(1, 1, sizeof(double));
 	List_Put(TheSymbol.val, 0, &yyvsp[-5].d);
@@ -6710,72 +7079,82 @@ case 289:
       else{
 	List_Write(pSymbol->val, 0, &yyvsp[-5].d);
       }
-      
       fgetpos(yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]);
       yylinenoImbricatedLoopsTab[ImbricatedLoop] = yylineno;
       ImbricatedLoop++;
+      if(ImbricatedLoop > MAX_RECUR_LOOPS-1){
+	yymsg(GERROR, "Reached maximum number of imbricated loops");
+	ImbricatedLoop = MAX_RECUR_LOOPS-1;
+      }
     ;
     break;}
-case 290:
-#line 2167 "Gmsh.y"
+case 293:
+#line 2521 "Gmsh.y"
 {
       if(LoopControlVariablesTab[ImbricatedLoop-1][1] >  
 	 LoopControlVariablesTab[ImbricatedLoop-1][0]){
 	LoopControlVariablesTab[ImbricatedLoop-1][0] +=
 	  LoopControlVariablesTab[ImbricatedLoop-1][2];
-	
 	if(strlen(LoopControlVariablesNameTab[ImbricatedLoop-1])){
+	  Symbol TheSymbol;
 	  TheSymbol.Name = LoopControlVariablesNameTab[ImbricatedLoop-1];
-	  pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol);
-	  *(double*)List_Pointer_Fast(pSymbol->val, 0) += 
-	    LoopControlVariablesTab[ImbricatedLoop-1][2] ;
+	  Symbol *pSymbol;
+	  if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol)))
+	    yymsg(GERROR, "Unknown loop variable");
+	  else
+	    *(double*)List_Pointer_Fast(pSymbol->val, 0) += 
+	      LoopControlVariablesTab[ImbricatedLoop-1][2];
 	}
-	
 	fsetpos(yyin, &yyposImbricatedLoopsTab[ImbricatedLoop-1]);
 	yylineno = yylinenoImbricatedLoopsTab[ImbricatedLoop-1];
       }
       else{
 	ImbricatedLoop--;
+	if(ImbricatedLoop < 0){
+	  yymsg(GERROR, "Problem with imbricated loops");
+	  ImbricatedLoop = 0;
+	}
       }
     ;
     break;}
-case 291:
-#line 2188 "Gmsh.y"
+case 294:
+#line 2548 "Gmsh.y"
 {
       if(!FunctionManager::Instance()->createFunction(yyvsp[0].c, yyin, yyname, yylineno))
 	yymsg(GERROR, "Redefinition of function %s", yyvsp[0].c);
       skip_until(NULL, "Return");
     ;
     break;}
-case 292:
-#line 2194 "Gmsh.y"
+case 295:
+#line 2554 "Gmsh.y"
 {
       if(!FunctionManager::Instance()->leaveFunction(&yyin, yyname, yylineno))
 	yymsg(GERROR, "Error while exiting function");
     ;
     break;}
-case 293:
-#line 2199 "Gmsh.y"
+case 296:
+#line 2559 "Gmsh.y"
 {
       if(!FunctionManager::Instance()->enterFunction(yyvsp[-1].c, &yyin, yyname, yylineno))
 	yymsg(GERROR, "Unknown function %s", yyvsp[-1].c);
     ;
     break;}
-case 294:
-#line 2204 "Gmsh.y"
+case 297:
+#line 2564 "Gmsh.y"
 {
       if(!yyvsp[-1].d) skip_until("If", "EndIf");
     ;
     break;}
-case 295:
-#line 2208 "Gmsh.y"
+case 298:
+#line 2568 "Gmsh.y"
 {
     ;
     break;}
-case 296:
-#line 2219 "Gmsh.y"
+case 299:
+#line 2579 "Gmsh.y"
 {
       Curve *pc, *prc;
+      Shape TheShape;
       TheShape.Num = 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, 1, NULL);
@@ -6784,10 +7163,11 @@ case 296:
       List_Add(yyval.l, &TheShape);
     ;
     break;}
-case 297:
-#line 2229 "Gmsh.y"
+case 300:
+#line 2590 "Gmsh.y"
 {
       Curve *pc, *prc;
+      Shape TheShape;
       TheShape.Num = 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, 1, NULL);
@@ -6796,10 +7176,11 @@ case 297:
       List_Add(yyval.l, &TheShape);
     ;
     break;}
-case 298:
-#line 2239 "Gmsh.y"
+case 301:
+#line 2601 "Gmsh.y"
 {
       Curve *pc, *prc;
+      Shape TheShape;
       TheShape.Num = 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, 1, NULL);
@@ -6808,17 +7189,18 @@ case 298:
       List_Add(yyval.l, &TheShape);
     ;
     break;}
-case 299:
-#line 2249 "Gmsh.y"
+case 302:
+#line 2612 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
-case 300:
-#line 2254 "Gmsh.y"
+case 303:
+#line 2617 "Gmsh.y"
 {
       Curve *pc, *prc;
+      Shape TheShape;
       TheShape.Num = Extrude_ProtudePoint(TRANSLATE, (int)yyvsp[-8].d, yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2],
 					  0., 0., 0., 0., 0., 0., 0.,
 					  &pc, &prc, 1, &extr);
@@ -6827,17 +7209,18 @@ case 300:
       List_Add(yyval.l, &TheShape);
     ;
     break;}
-case 301:
-#line 2264 "Gmsh.y"
+case 304:
+#line 2628 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
-case 302:
-#line 2269 "Gmsh.y"
+case 305:
+#line 2633 "Gmsh.y"
 {
       Curve *pc, *prc;
+      Shape TheShape;
       TheShape.Num = Extrude_ProtudePoint(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,
 					  &pc, &prc, 1, &extr);
@@ -6846,17 +7229,18 @@ case 302:
       List_Add(yyval.l, &TheShape);
     ;
     break;}
-case 303:
-#line 2279 "Gmsh.y"
+case 306:
+#line 2644 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
-case 304:
-#line 2284 "Gmsh.y"
+case 307:
+#line 2649 "Gmsh.y"
 {
       Curve *pc, *prc;
+      Shape TheShape;
       TheShape.Num = Extrude_ProtudePoint(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,
 					  &pc, &prc, 1, &extr);
@@ -6865,10 +7249,11 @@ case 304:
       List_Add(yyval.l, &TheShape);
     ;
     break;}
-case 305:
-#line 2296 "Gmsh.y"
+case 308:
+#line 2662 "Gmsh.y"
 {
       Surface *ps;
+      Shape TheShape;
       TheShape.Num = 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., 
 					  &ps, 1, NULL);
@@ -6884,10 +7269,11 @@ case 305:
       List_Add(yyval.l, &TheShape);
     ;
     break;}
-case 306:
-#line 2313 "Gmsh.y"
+case 309:
+#line 2680 "Gmsh.y"
 {
       Surface *ps;
+      Shape TheShape;
       TheShape.Num = 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, 
 					  &ps, 1, NULL);
@@ -6903,10 +7289,11 @@ case 306:
       List_Add(yyval.l, &TheShape);
     ;
     break;}
-case 307:
-#line 2330 "Gmsh.y"
+case 310:
+#line 2698 "Gmsh.y"
 {
       Surface *ps;
+      Shape TheShape;
       TheShape.Num = 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, 
 					  &ps, 1, NULL);
@@ -6922,17 +7309,18 @@ case 307:
       List_Add(yyval.l, &TheShape);
     ;
     break;}
-case 308:
-#line 2347 "Gmsh.y"
+case 311:
+#line 2716 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
-case 309:
-#line 2352 "Gmsh.y"
+case 312:
+#line 2721 "Gmsh.y"
 {
       Surface *ps;
+      Shape TheShape;
       TheShape.Num = 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., 
 					  &ps, 1, &extr);
@@ -6948,17 +7336,18 @@ case 309:
       List_Add(yyval.l, &TheShape);
     ;
     break;}
-case 310:
-#line 2369 "Gmsh.y"
+case 313:
+#line 2739 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
-case 311:
-#line 2374 "Gmsh.y"
+case 314:
+#line 2744 "Gmsh.y"
 {
       Surface *ps;
+      Shape TheShape;
       TheShape.Num = 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, 
 					  &ps, 1, &extr);
@@ -6974,17 +7363,18 @@ case 311:
       List_Add(yyval.l, &TheShape);
     ;
     break;}
-case 312:
-#line 2391 "Gmsh.y"
+case 315:
+#line 2762 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
-case 313:
-#line 2396 "Gmsh.y"
+case 316:
+#line 2767 "Gmsh.y"
 {
       Surface *ps;
+      Shape TheShape;
       TheShape.Num = 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, 
 					  &ps, 1, &extr);
@@ -7000,9 +7390,10 @@ case 313:
       List_Add(yyval.l, &TheShape);
     ;
     break;}
-case 314:
-#line 2416 "Gmsh.y"
+case 317:
+#line 2788 "Gmsh.y"
 {
+      Shape TheShape;
       TheShape.Num = 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);
@@ -7018,9 +7409,10 @@ case 314:
       List_Add(yyval.l, &TheShape);
     ;
     break;}
-case 315:
-#line 2432 "Gmsh.y"
+case 318:
+#line 2805 "Gmsh.y"
 {
+      Shape TheShape;
       TheShape.Num = 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);
@@ -7036,9 +7428,10 @@ case 315:
       List_Add(yyval.l, &TheShape);
     ;
     break;}
-case 316:
-#line 2448 "Gmsh.y"
+case 319:
+#line 2822 "Gmsh.y"
 {
+      Shape TheShape;
       TheShape.Num = 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);
@@ -7054,20 +7447,20 @@ case 316:
       List_Add(yyval.l, &TheShape);
     ;
     break;}
-case 317:
-#line 2464 "Gmsh.y"
+case 320:
+#line 2839 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
-case 318:
-#line 2469 "Gmsh.y"
+case 321:
+#line 2844 "Gmsh.y"
 {
-      int vol = NEWREG();
+      Shape TheShape;
       TheShape.Num = 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);
+					    NEWREG(), &extr);
       Surface *s = FindSurface(TheShape.Num, THEM);
       if(!s){
 	//yymsg(WARNING, "Unknown Surface %d", TheShape.Num);
@@ -7080,20 +7473,20 @@ case 318:
       List_Add(yyval.l, &TheShape);
     ;
     break;}
-case 319:
-#line 2486 "Gmsh.y"
+case 322:
+#line 2861 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
-case 320:
-#line 2492 "Gmsh.y"
+case 323:
+#line 2867 "Gmsh.y"
 {
-      int vol = NEWREG();
+      Shape TheShape;
       TheShape.Num = 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);
+					    NEWREG(), &extr);
       Surface *s = FindSurface(TheShape.Num, THEM);
       if(!s){
 	//yymsg(WARNING, "Unknown Surface %d", TheShape.Num);
@@ -7106,20 +7499,20 @@ case 320:
       List_Add(yyval.l, &TheShape);
     ;
     break;}
-case 321:
-#line 2509 "Gmsh.y"
+case 324:
+#line 2884 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
-case 322:
-#line 2515 "Gmsh.y"
+case 325:
+#line 2890 "Gmsh.y"
 {
-      int vol = NEWREG();
+      Shape TheShape;
       TheShape.Num = 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);
+					    NEWREG(), &extr);
       Surface *s = FindSurface(TheShape.Num, THEM);
       if(!s){
 	//yymsg(WARNING, "Unknown Surface %d", TheShape.Num);
@@ -7132,18 +7525,18 @@ case 322:
       List_Add(yyval.l, &TheShape);
     ;
     break;}
-case 323:
-#line 2535 "Gmsh.y"
+case 326:
+#line 2910 "Gmsh.y"
 {
     ;
     break;}
-case 324:
-#line 2538 "Gmsh.y"
+case 327:
+#line 2913 "Gmsh.y"
 {
     ;
     break;}
-case 325:
-#line 2544 "Gmsh.y"
+case 328:
+#line 2919 "Gmsh.y"
 {
       double d;
       extr.mesh.ExtrudeMesh = true;
@@ -7170,8 +7563,8 @@ case 325:
       List_Delete(yyvsp[-2].l);
     ;
     break;}
-case 326:
-#line 2570 "Gmsh.y"
+case 329:
+#line 2945 "Gmsh.y"
 {
       double d;
       extr.mesh.ExtrudeMesh = true;
@@ -7196,20 +7589,20 @@ case 326:
       List_Delete(yyvsp[-2].l);
     ;
     break;}
-case 327:
-#line 2594 "Gmsh.y"
+case 330:
+#line 2969 "Gmsh.y"
 {
       extr.mesh.Recombine = true;
     ;
     break;}
-case 328:
-#line 2603 "Gmsh.y"
+case 331:
+#line 2978 "Gmsh.y"
 {
-      Curve *c;
-      for(i = 0; i < List_Nbr(yyvsp[-3].l); i++){
+      for(int i = 0; i < List_Nbr(yyvsp[-3].l); i++){
+	double d;
 	List_Read(yyvsp[-3].l, i, &d);
-	j = (int)fabs(d);
-        c = FindCurve(j, THEM);
+	int j = (int)fabs(d);
+        Curve *c = FindCurve(j, THEM);
 	if(!c)
 	  yymsg(WARNING, "Unknown Curve %d", j);
 	else{
@@ -7222,14 +7615,14 @@ case 328:
       List_Delete(yyvsp[-3].l);
     ;
     break;}
-case 329:
-#line 2621 "Gmsh.y"
+case 332:
+#line 2996 "Gmsh.y"
 {
-      Curve *c;
-      for(i = 0; i < List_Nbr(yyvsp[-6].l); i++){
+      for(int i = 0; i < List_Nbr(yyvsp[-6].l); i++){
+	double d;
 	List_Read(yyvsp[-6].l, i, &d);
-	j = (int)fabs(d);
-        c = FindCurve(j, THEM);
+	int j = (int)fabs(d);
+        Curve *c = FindCurve(j, THEM);
 	if(!c)
 	  yymsg(WARNING, "Unknown Curve %d", j);
 	else{
@@ -7242,14 +7635,14 @@ case 329:
       List_Delete(yyvsp[-6].l);
     ;
     break;}
-case 330:
-#line 2639 "Gmsh.y"
+case 333:
+#line 3014 "Gmsh.y"
 {
-      Curve *c;
-      for(i = 0; i < List_Nbr(yyvsp[-6].l); i++){
+      for(int i = 0; i < List_Nbr(yyvsp[-6].l); i++){
+	double d;
 	List_Read(yyvsp[-6].l, i, &d);
-	j = (int)fabs(d);
-        c = FindCurve(j, THEM);
+	int j = (int)fabs(d);
+        Curve *c = FindCurve(j, THEM);
 	if(!c)
 	  yymsg(WARNING, "Unknown Curve %d", j);
 	else{
@@ -7262,23 +7655,24 @@ case 330:
       List_Delete(yyvsp[-6].l);
     ;
     break;}
-case 331:
-#line 2657 "Gmsh.y"
+case 334:
+#line 3032 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-4].d, THEM);
       if(!s)
 	yymsg(WARNING, "Unknown Surface %d", (int)yyvsp[-4].d);
       else{
 	s->Method = TRANSFINI;
-	k = List_Nbr(yyvsp[-1].l);
-	if(k!=3 && k!=4){
+	int k = List_Nbr(yyvsp[-1].l);
+	if(k != 3 && k != 4){
 	  yymsg(GERROR, "Wrong definition of Transfinite Surface %d: "
-		"%d points instead of 3 or 4" , yyvsp[-4].d, k) ;
+		"%d points instead of 3 or 4" , yyvsp[-4].d, k);
 	}
 	else{
-	  for(i = 0; i < k; i++){
+	  for(int i = 0; i < k; i++){
+	    double d;
 	    List_Read(yyvsp[-1].l, i, &d);
-	    j = (int)fabs(d);
+	    int j = (int)fabs(d);
 	    s->ipar[i] = j;
 	  }
 	}
@@ -7286,22 +7680,23 @@ case 331:
       List_Delete(yyvsp[-1].l);
     ;
     break;}
-case 332:
-#line 2679 "Gmsh.y"
+case 335:
+#line 3055 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-4].d, THEM);
       if(!s)
 	yymsg(WARNING, "Unknown Surface %d", (int)yyvsp[-4].d);
       else{
         s->Method = ELLIPTIC;
-        k = List_Nbr(yyvsp[-1].l);
+        int k = List_Nbr(yyvsp[-1].l);
         if(k != 4)
 	  yymsg(GERROR, "Wrong definition of Elliptic Surface %d: "
-		"%d points instead of 4" , yyvsp[-4].d, k) ;
+		"%d points instead of 4" , yyvsp[-4].d, k);
         else{
-	  for(i = 0; i < k; i++){
+	  for(int i = 0; i < k; i++){
+	    double d;
 	    List_Read(yyvsp[-1].l, i, &d);
-	    j = (int)fabs(d);
+	    int j = (int)fabs(d);
 	    s->ipar[i] = j;
 	  }
 	}
@@ -7309,22 +7704,23 @@ case 332:
       List_Delete(yyvsp[-1].l);
     ;
     break;}
-case 333:
-#line 2700 "Gmsh.y"
+case 336:
+#line 3077 "Gmsh.y"
 {
       Volume *v = FindVolume((int)yyvsp[-4].d, THEM);
       if(!v)
 	yymsg(WARNING, "Unknown Volume %d", (int)yyvsp[-4].d);
       else{
 	v->Method = TRANSFINI;
-	k = List_Nbr(yyvsp[-1].l);
+	int k = List_Nbr(yyvsp[-1].l);
 	if(k != 6 && k != 8)
 	  yymsg(GERROR, "Wrong definition of Transfinite Volume %d: "
-		"%d points instead of 6 or 8" , yyvsp[-4].d, k) ;
+		"%d points instead of 6 or 8" , yyvsp[-4].d, k);
 	else{
-	  for(i = 0; i < k; i++){
+	  for(int i = 0; i < k; i++){
+	    double d;
 	    List_Read(yyvsp[-1].l, i, &d);
-	    j = (int)fabs(d);
+	    int j = (int)fabs(d);
 	    v->ipar[i] = j;
 	  }
 	}
@@ -7332,14 +7728,14 @@ case 333:
       List_Delete(yyvsp[-1].l);
     ;
     break;}
-case 334:
-#line 2721 "Gmsh.y"
+case 337:
+#line 3099 "Gmsh.y"
 {
-      Surface *s;
-      for(i = 0; i < List_Nbr(yyvsp[-3].l); i++){
+      for(int i = 0; i < List_Nbr(yyvsp[-3].l); i++){
+	double d;
 	List_Read(yyvsp[-3].l, i, &d);
-	j = (int)d;
-	s = FindSurface(j, THEM);
+	int j = (int)d;
+	Surface *s = FindSurface(j, THEM);
 	if(s){
 	  s->Recombine = 1;
 	  s->RecombineAngle = (yyvsp[-1].d > 0 && yyvsp[-1].d < 90) ? yyvsp[-1].d : 90;
@@ -7348,14 +7744,14 @@ case 334:
       List_Delete(yyvsp[-3].l);
     ;
     break;}
-case 335:
-#line 2735 "Gmsh.y"
+case 338:
+#line 3113 "Gmsh.y"
 {
-      Surface *s;
-      for(i = 0; i < List_Nbr(yyvsp[-1].l); i++){
+      for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){
+	double d;
 	List_Read(yyvsp[-1].l, i, &d);
-	j = (int)d;
-        s = FindSurface(j, THEM);
+	int j = (int)d;
+        Surface *s = FindSurface(j, THEM);
 	if(s){
 	  s->Recombine = 1;
 	  s->RecombineAngle = 30.;
@@ -7364,857 +7760,896 @@ case 335:
       List_Delete(yyvsp[-1].l);
     ;
     break;}
-case 336:
-#line 2755 "Gmsh.y"
+case 339:
+#line 3133 "Gmsh.y"
 { 
       ReplaceAllDuplicates(THEM);
     ;
     break;}
-case 337:
-#line 2759 "Gmsh.y"
+case 340:
+#line 3137 "Gmsh.y"
 { 
       IntersectAllSegmentsTogether();
     ;
     break;}
-case 338:
-#line 2768 "Gmsh.y"
-{yyval.i = 1;;
-    break;}
-case 339:
-#line 2769 "Gmsh.y"
-{yyval.i = 0;;
-    break;}
-case 340:
-#line 2770 "Gmsh.y"
-{yyval.i = -1;;
-    break;}
 case 341:
-#line 2771 "Gmsh.y"
-{yyval.i = -1;;
+#line 3146 "Gmsh.y"
+{yyval.i = 1;;
     break;}
 case 342:
-#line 2772 "Gmsh.y"
-{yyval.i = -1;;
+#line 3147 "Gmsh.y"
+{yyval.i = 0;;
     break;}
 case 343:
-#line 2776 "Gmsh.y"
-{ yyval.d = yyvsp[0].d;           ;
+#line 3148 "Gmsh.y"
+{yyval.i = -1;;
     break;}
 case 344:
-#line 2777 "Gmsh.y"
-{ yyval.d = yyvsp[-1].d ;          ;
+#line 3149 "Gmsh.y"
+{yyval.i = -1;;
     break;}
 case 345:
-#line 2778 "Gmsh.y"
-{ yyval.d = -yyvsp[0].d ;         ;
+#line 3150 "Gmsh.y"
+{yyval.i = -1;;
     break;}
 case 346:
-#line 2779 "Gmsh.y"
+#line 3154 "Gmsh.y"
 { yyval.d = yyvsp[0].d;           ;
     break;}
 case 347:
-#line 2780 "Gmsh.y"
-{ yyval.d = !yyvsp[0].d ;         ;
+#line 3155 "Gmsh.y"
+{ yyval.d = yyvsp[-1].d;           ;
     break;}
 case 348:
-#line 2781 "Gmsh.y"
-{ yyval.d = yyvsp[-2].d - yyvsp[0].d ;     ;
+#line 3156 "Gmsh.y"
+{ yyval.d = -yyvsp[0].d;          ;
     break;}
 case 349:
-#line 2782 "Gmsh.y"
-{ yyval.d = yyvsp[-2].d + yyvsp[0].d ;     ;
+#line 3157 "Gmsh.y"
+{ yyval.d = yyvsp[0].d;           ;
     break;}
 case 350:
-#line 2783 "Gmsh.y"
-{ yyval.d = yyvsp[-2].d * yyvsp[0].d ;     ;
+#line 3158 "Gmsh.y"
+{ yyval.d = !yyvsp[0].d;          ;
     break;}
 case 351:
-#line 2785 "Gmsh.y"
-{ 
-      if(!yyvsp[0].d)
-	yymsg(GERROR, "Division by zero in '%g / %g'", yyvsp[-2].d, yyvsp[0].d);
-      else
-	yyval.d = yyvsp[-2].d / yyvsp[0].d ;     
-    ;
+#line 3159 "Gmsh.y"
+{ yyval.d = yyvsp[-2].d - yyvsp[0].d;      ;
     break;}
 case 352:
-#line 2791 "Gmsh.y"
-{ yyval.d = (int)yyvsp[-2].d % (int)yyvsp[0].d ;  ;
+#line 3160 "Gmsh.y"
+{ yyval.d = yyvsp[-2].d + yyvsp[0].d;      ;
     break;}
 case 353:
-#line 2792 "Gmsh.y"
-{ yyval.d = pow(yyvsp[-2].d, yyvsp[0].d) ;  ;
+#line 3161 "Gmsh.y"
+{ yyval.d = yyvsp[-2].d * yyvsp[0].d;      ;
     break;}
 case 354:
-#line 2793 "Gmsh.y"
-{ yyval.d = yyvsp[-2].d < yyvsp[0].d ;     ;
+#line 3163 "Gmsh.y"
+{ 
+      if(!yyvsp[0].d)
+	yymsg(GERROR, "Division by zero in '%g / %g'", yyvsp[-2].d, yyvsp[0].d);
+      else
+	yyval.d = yyvsp[-2].d / yyvsp[0].d;     
+    ;
     break;}
 case 355:
-#line 2794 "Gmsh.y"
-{ yyval.d = yyvsp[-2].d > yyvsp[0].d ;     ;
+#line 3169 "Gmsh.y"
+{ yyval.d = (int)yyvsp[-2].d % (int)yyvsp[0].d;  ;
     break;}
 case 356:
-#line 2795 "Gmsh.y"
-{ yyval.d = yyvsp[-2].d <= yyvsp[0].d ;    ;
+#line 3170 "Gmsh.y"
+{ yyval.d = pow(yyvsp[-2].d, yyvsp[0].d);  ;
     break;}
 case 357:
-#line 2796 "Gmsh.y"
-{ yyval.d = yyvsp[-2].d >= yyvsp[0].d ;    ;
+#line 3171 "Gmsh.y"
+{ yyval.d = yyvsp[-2].d < yyvsp[0].d;      ;
     break;}
 case 358:
-#line 2797 "Gmsh.y"
-{ yyval.d = yyvsp[-2].d == yyvsp[0].d ;    ;
+#line 3172 "Gmsh.y"
+{ yyval.d = yyvsp[-2].d > yyvsp[0].d;      ;
     break;}
 case 359:
-#line 2798 "Gmsh.y"
-{ yyval.d = yyvsp[-2].d != yyvsp[0].d ;    ;
+#line 3173 "Gmsh.y"
+{ yyval.d = yyvsp[-2].d <= yyvsp[0].d;     ;
     break;}
 case 360:
-#line 2799 "Gmsh.y"
-{ yyval.d = yyvsp[-2].d && yyvsp[0].d ;    ;
+#line 3174 "Gmsh.y"
+{ yyval.d = yyvsp[-2].d >= yyvsp[0].d;     ;
     break;}
 case 361:
-#line 2800 "Gmsh.y"
-{ yyval.d = yyvsp[-2].d || yyvsp[0].d ;    ;
+#line 3175 "Gmsh.y"
+{ yyval.d = yyvsp[-2].d == yyvsp[0].d;     ;
     break;}
 case 362:
-#line 2801 "Gmsh.y"
-{ yyval.d = yyvsp[-4].d? yyvsp[-2].d : yyvsp[0].d ; ;
+#line 3176 "Gmsh.y"
+{ yyval.d = yyvsp[-2].d != yyvsp[0].d;     ;
     break;}
 case 363:
-#line 2802 "Gmsh.y"
-{ yyval.d = exp(yyvsp[-1].d);      ;
+#line 3177 "Gmsh.y"
+{ yyval.d = yyvsp[-2].d && yyvsp[0].d;     ;
     break;}
 case 364:
-#line 2803 "Gmsh.y"
-{ yyval.d = log(yyvsp[-1].d);      ;
+#line 3178 "Gmsh.y"
+{ yyval.d = yyvsp[-2].d || yyvsp[0].d;     ;
     break;}
 case 365:
-#line 2804 "Gmsh.y"
-{ yyval.d = log10(yyvsp[-1].d);    ;
+#line 3179 "Gmsh.y"
+{ yyval.d = yyvsp[-4].d? yyvsp[-2].d : yyvsp[0].d;  ;
     break;}
 case 366:
-#line 2805 "Gmsh.y"
-{ yyval.d = sqrt(yyvsp[-1].d);     ;
+#line 3180 "Gmsh.y"
+{ yyval.d = exp(yyvsp[-1].d);      ;
     break;}
 case 367:
-#line 2806 "Gmsh.y"
-{ yyval.d = sin(yyvsp[-1].d);      ;
+#line 3181 "Gmsh.y"
+{ yyval.d = log(yyvsp[-1].d);      ;
     break;}
 case 368:
-#line 2807 "Gmsh.y"
-{ yyval.d = asin(yyvsp[-1].d);     ;
+#line 3182 "Gmsh.y"
+{ yyval.d = log10(yyvsp[-1].d);    ;
     break;}
 case 369:
-#line 2808 "Gmsh.y"
-{ yyval.d = cos(yyvsp[-1].d);      ;
+#line 3183 "Gmsh.y"
+{ yyval.d = sqrt(yyvsp[-1].d);     ;
     break;}
 case 370:
-#line 2809 "Gmsh.y"
-{ yyval.d = acos(yyvsp[-1].d);     ;
+#line 3184 "Gmsh.y"
+{ yyval.d = sin(yyvsp[-1].d);      ;
     break;}
 case 371:
-#line 2810 "Gmsh.y"
-{ yyval.d = tan(yyvsp[-1].d);      ;
+#line 3185 "Gmsh.y"
+{ yyval.d = asin(yyvsp[-1].d);     ;
     break;}
 case 372:
-#line 2811 "Gmsh.y"
-{ yyval.d = atan(yyvsp[-1].d);     ;
+#line 3186 "Gmsh.y"
+{ yyval.d = cos(yyvsp[-1].d);      ;
     break;}
 case 373:
-#line 2812 "Gmsh.y"
-{ yyval.d = atan2(yyvsp[-3].d, yyvsp[-1].d); ;
+#line 3187 "Gmsh.y"
+{ yyval.d = acos(yyvsp[-1].d);     ;
     break;}
 case 374:
-#line 2813 "Gmsh.y"
-{ yyval.d = sinh(yyvsp[-1].d);     ;
+#line 3188 "Gmsh.y"
+{ yyval.d = tan(yyvsp[-1].d);      ;
     break;}
 case 375:
-#line 2814 "Gmsh.y"
-{ yyval.d = cosh(yyvsp[-1].d);     ;
+#line 3189 "Gmsh.y"
+{ yyval.d = atan(yyvsp[-1].d);     ;
     break;}
 case 376:
-#line 2815 "Gmsh.y"
-{ yyval.d = tanh(yyvsp[-1].d);     ;
+#line 3190 "Gmsh.y"
+{ yyval.d = atan2(yyvsp[-3].d, yyvsp[-1].d);;
     break;}
 case 377:
-#line 2816 "Gmsh.y"
-{ yyval.d = fabs(yyvsp[-1].d);     ;
+#line 3191 "Gmsh.y"
+{ yyval.d = sinh(yyvsp[-1].d);     ;
     break;}
 case 378:
-#line 2817 "Gmsh.y"
-{ yyval.d = floor(yyvsp[-1].d);    ;
+#line 3192 "Gmsh.y"
+{ yyval.d = cosh(yyvsp[-1].d);     ;
     break;}
 case 379:
-#line 2818 "Gmsh.y"
-{ yyval.d = ceil(yyvsp[-1].d);     ;
+#line 3193 "Gmsh.y"
+{ yyval.d = tanh(yyvsp[-1].d);     ;
     break;}
 case 380:
-#line 2819 "Gmsh.y"
-{ yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d);  ;
+#line 3194 "Gmsh.y"
+{ yyval.d = fabs(yyvsp[-1].d);     ;
     break;}
 case 381:
-#line 2820 "Gmsh.y"
-{ yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d);  ;
+#line 3195 "Gmsh.y"
+{ yyval.d = floor(yyvsp[-1].d);    ;
     break;}
 case 382:
-#line 2821 "Gmsh.y"
-{ yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ;
+#line 3196 "Gmsh.y"
+{ yyval.d = ceil(yyvsp[-1].d);     ;
     break;}
 case 383:
-#line 2822 "Gmsh.y"
-{ yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ;
+#line 3197 "Gmsh.y"
+{ yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ;
     break;}
 case 384:
-#line 2824 "Gmsh.y"
-{ yyval.d = exp(yyvsp[-1].d);      ;
+#line 3198 "Gmsh.y"
+{ yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ;
     break;}
 case 385:
-#line 2825 "Gmsh.y"
-{ yyval.d = log(yyvsp[-1].d);      ;
+#line 3199 "Gmsh.y"
+{ yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ;
     break;}
 case 386:
-#line 2826 "Gmsh.y"
-{ yyval.d = log10(yyvsp[-1].d);    ;
+#line 3200 "Gmsh.y"
+{ yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ;
     break;}
 case 387:
-#line 2827 "Gmsh.y"
-{ yyval.d = sqrt(yyvsp[-1].d);     ;
+#line 3202 "Gmsh.y"
+{ yyval.d = exp(yyvsp[-1].d);      ;
     break;}
 case 388:
-#line 2828 "Gmsh.y"
-{ yyval.d = sin(yyvsp[-1].d);      ;
+#line 3203 "Gmsh.y"
+{ yyval.d = log(yyvsp[-1].d);      ;
     break;}
 case 389:
-#line 2829 "Gmsh.y"
-{ yyval.d = asin(yyvsp[-1].d);     ;
+#line 3204 "Gmsh.y"
+{ yyval.d = log10(yyvsp[-1].d);    ;
     break;}
 case 390:
-#line 2830 "Gmsh.y"
-{ yyval.d = cos(yyvsp[-1].d);      ;
+#line 3205 "Gmsh.y"
+{ yyval.d = sqrt(yyvsp[-1].d);     ;
     break;}
 case 391:
-#line 2831 "Gmsh.y"
-{ yyval.d = acos(yyvsp[-1].d);     ;
+#line 3206 "Gmsh.y"
+{ yyval.d = sin(yyvsp[-1].d);      ;
     break;}
 case 392:
-#line 2832 "Gmsh.y"
-{ yyval.d = tan(yyvsp[-1].d);      ;
+#line 3207 "Gmsh.y"
+{ yyval.d = asin(yyvsp[-1].d);     ;
     break;}
 case 393:
-#line 2833 "Gmsh.y"
-{ yyval.d = atan(yyvsp[-1].d);     ;
+#line 3208 "Gmsh.y"
+{ yyval.d = cos(yyvsp[-1].d);      ;
     break;}
 case 394:
-#line 2834 "Gmsh.y"
-{ yyval.d = atan2(yyvsp[-3].d, yyvsp[-1].d); ;
+#line 3209 "Gmsh.y"
+{ yyval.d = acos(yyvsp[-1].d);     ;
     break;}
 case 395:
-#line 2835 "Gmsh.y"
-{ yyval.d = sinh(yyvsp[-1].d);     ;
+#line 3210 "Gmsh.y"
+{ yyval.d = tan(yyvsp[-1].d);      ;
     break;}
 case 396:
-#line 2836 "Gmsh.y"
-{ yyval.d = cosh(yyvsp[-1].d);     ;
+#line 3211 "Gmsh.y"
+{ yyval.d = atan(yyvsp[-1].d);     ;
     break;}
 case 397:
-#line 2837 "Gmsh.y"
-{ yyval.d = tanh(yyvsp[-1].d);     ;
+#line 3212 "Gmsh.y"
+{ yyval.d = atan2(yyvsp[-3].d, yyvsp[-1].d);;
     break;}
 case 398:
-#line 2838 "Gmsh.y"
-{ yyval.d = fabs(yyvsp[-1].d);     ;
+#line 3213 "Gmsh.y"
+{ yyval.d = sinh(yyvsp[-1].d);     ;
     break;}
 case 399:
-#line 2839 "Gmsh.y"
-{ yyval.d = floor(yyvsp[-1].d);    ;
+#line 3214 "Gmsh.y"
+{ yyval.d = cosh(yyvsp[-1].d);     ;
     break;}
 case 400:
-#line 2840 "Gmsh.y"
-{ yyval.d = ceil(yyvsp[-1].d);     ;
+#line 3215 "Gmsh.y"
+{ yyval.d = tanh(yyvsp[-1].d);     ;
     break;}
 case 401:
-#line 2841 "Gmsh.y"
-{ yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d);  ;
+#line 3216 "Gmsh.y"
+{ yyval.d = fabs(yyvsp[-1].d);     ;
     break;}
 case 402:
-#line 2842 "Gmsh.y"
-{ yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d);  ;
+#line 3217 "Gmsh.y"
+{ yyval.d = floor(yyvsp[-1].d);    ;
     break;}
 case 403:
-#line 2843 "Gmsh.y"
-{ yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ;
+#line 3218 "Gmsh.y"
+{ yyval.d = ceil(yyvsp[-1].d);     ;
     break;}
 case 404:
-#line 2844 "Gmsh.y"
-{ yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ;
+#line 3219 "Gmsh.y"
+{ yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ;
     break;}
 case 405:
-#line 2853 "Gmsh.y"
-{ yyval.d = yyvsp[0].d; ;
+#line 3220 "Gmsh.y"
+{ yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ;
     break;}
 case 406:
-#line 2854 "Gmsh.y"
-{ yyval.d = 3.141592653589793; ;
+#line 3221 "Gmsh.y"
+{ yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ;
     break;}
 case 407:
-#line 2855 "Gmsh.y"
-{ yyval.d = ParUtil::Instance()->rank(); ;
+#line 3222 "Gmsh.y"
+{ yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ;
     break;}
 case 408:
-#line 2856 "Gmsh.y"
-{ yyval.d = ParUtil::Instance()->size(); ;
+#line 3231 "Gmsh.y"
+{ yyval.d = yyvsp[0].d; ;
     break;}
 case 409:
-#line 2861 "Gmsh.y"
+#line 3232 "Gmsh.y"
+{ yyval.d = 3.141592653589793; ;
+    break;}
+case 410:
+#line 3233 "Gmsh.y"
+{ yyval.d = ParUtil::Instance()->rank(); ;
+    break;}
+case 411:
+#line 3234 "Gmsh.y"
+{ yyval.d = ParUtil::Instance()->size(); ;
+    break;}
+case 412:
+#line 3239 "Gmsh.y"
 {
-      TheSymbol.Name = yyvsp[0].c ;
+      Symbol TheSymbol;
+      TheSymbol.Name = yyvsp[0].c;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
-	yymsg(GERROR, "Unknown variable '%s'", yyvsp[0].c) ;
-	yyval.d = 0. ;
+	yymsg(GERROR, "Unknown variable '%s'", yyvsp[0].c);
+	yyval.d = 0.;
       }
       else
-	yyval.d = *(double*)List_Pointer_Fast(pSymbol->val, 0) ;
+	yyval.d = *(double*)List_Pointer_Fast(pSymbol->val, 0);
     ;
     break;}
-case 410:
-#line 2872 "Gmsh.y"
+case 413:
+#line 3251 "Gmsh.y"
 {
-      TheSymbol.Name = yyvsp[-3].c ;
+      Symbol TheSymbol;
+      TheSymbol.Name = yyvsp[-3].c;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
-	yymsg(GERROR, "Unknown variable '%s'", yyvsp[-3].c) ;
-	yyval.d = 0. ;
+	yymsg(GERROR, "Unknown variable '%s'", yyvsp[-3].c);
+	yyval.d = 0.;
       }
       else{
+	double *pd;
 	if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)yyvsp[-1].d)))
-	  yyval.d = *pd ;
+	  yyval.d = *pd;
 	else{
-	  yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-3].c, (int)yyvsp[-1].d) ;
-	  yyval.d = 0. ;
+	  yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-3].c, (int)yyvsp[-1].d);
+	  yyval.d = 0.;
 	}
       }
     ;
     break;}
-case 411:
-#line 2889 "Gmsh.y"
+case 414:
+#line 3270 "Gmsh.y"
 {
-      TheSymbol.Name = yyvsp[-2].c ;
+      Symbol TheSymbol;
+      TheSymbol.Name = yyvsp[-2].c;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
-	yymsg(GERROR, "Unknown variable '%s'", yyvsp[-2].c) ;
-	yyval.d = 0. ;
+	yymsg(GERROR, "Unknown variable '%s'", yyvsp[-2].c);
+	yyval.d = 0.;
       }
       else{
 	yyval.d = List_Nbr(pSymbol->val);
       }
     ;
     break;}
-case 412:
-#line 2901 "Gmsh.y"
+case 415:
+#line 3283 "Gmsh.y"
 {
-      TheSymbol.Name = yyvsp[-1].c ;
+      Symbol TheSymbol;
+      TheSymbol.Name = yyvsp[-1].c;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
-	yymsg(GERROR, "Unknown variable '%s'", yyvsp[-1].c) ;
-	yyval.d = 0. ;
+	yymsg(GERROR, "Unknown variable '%s'", yyvsp[-1].c);
+	yyval.d = 0.;
       }
       else
-	yyval.d = (*(double*)List_Pointer_Fast(pSymbol->val, 0) += yyvsp[0].i) ;
+	yyval.d = (*(double*)List_Pointer_Fast(pSymbol->val, 0) += yyvsp[0].i);
     ;
     break;}
-case 413:
-#line 2912 "Gmsh.y"
+case 416:
+#line 3295 "Gmsh.y"
 {
-      TheSymbol.Name = yyvsp[-4].c ;
+      Symbol TheSymbol;
+      TheSymbol.Name = yyvsp[-4].c;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
-	yymsg(GERROR, "Unknown variable '%s'", yyvsp[-4].c) ;
-	yyval.d = 0. ;
+	yymsg(GERROR, "Unknown variable '%s'", yyvsp[-4].c);
+	yyval.d = 0.;
       }
       else{
+	double *pd;
 	if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)yyvsp[-2].d)))
-	  yyval.d = (*pd += yyvsp[0].i) ;
+	  yyval.d = (*pd += yyvsp[0].i);
 	else{
-	  yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-4].c, (int)yyvsp[-2].d) ;
-	  yyval.d = 0. ;
+	  yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-4].c, (int)yyvsp[-2].d);
+	  yyval.d = 0.;
 	}
       }
     ;
     break;}
-case 414:
-#line 2931 "Gmsh.y"
+case 417:
+#line 3317 "Gmsh.y"
 {
+      double (*pNumOpt)(int num, int action, double value);
+      StringXNumber *pNumCat;
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-2].c))){
 	yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-2].c);
-	yyval.d = 0. ;
+	yyval.d = 0.;
       }
       else{
 	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption(yyvsp[0].c, pNumCat))){
 	  yymsg(GERROR, "Unknown numeric option '%s.%s'", yyvsp[-2].c, yyvsp[0].c);
-	  yyval.d = 0. ;
+	  yyval.d = 0.;
 	}
 	else
 	  yyval.d = pNumOpt(0, GMSH_GET, 0);
       }
     ;
     break;}
-case 415:
-#line 2947 "Gmsh.y"
+case 418:
+#line 3334 "Gmsh.y"
 {
+      double (*pNumOpt)(int num, int action, double value);
+      StringXNumber *pNumCat;
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-5].c))){
 	yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-5].c);
-	yyval.d = 0. ;
+	yyval.d = 0.;
       }
       else{
 	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption(yyvsp[0].c, pNumCat))){
 	  yymsg(GERROR, "Unknown numeric option '%s[%d].%s'", yyvsp[-5].c, (int)yyvsp[-3].d, yyvsp[0].c);
-	  yyval.d = 0. ;
+	  yyval.d = 0.;
 	}
 	else
 	  yyval.d = pNumOpt((int)yyvsp[-3].d, GMSH_GET, 0);
       }
     ;
     break;}
-case 416:
-#line 2963 "Gmsh.y"
+case 419:
+#line 3351 "Gmsh.y"
 {
+      double (*pNumOpt)(int num, int action, double value);
+      StringXNumber *pNumCat;
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-3].c))){
 	yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-3].c);
-	yyval.d = 0. ;
+	yyval.d = 0.;
       }
       else{
 	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption(yyvsp[-1].c, pNumCat))){
 	  yymsg(GERROR, "Unknown numeric option '%s.%s'", yyvsp[-3].c, yyvsp[-1].c);
-	  yyval.d = 0. ;
+	  yyval.d = 0.;
 	}
 	else
 	  yyval.d = pNumOpt(0, GMSH_SET|GMSH_GUI, pNumOpt(0, GMSH_GET, 0)+yyvsp[0].i);
       }
     ;
     break;}
-case 417:
-#line 2979 "Gmsh.y"
+case 420:
+#line 3368 "Gmsh.y"
 {
+      double (*pNumOpt)(int num, int action, double value);
+      StringXNumber *pNumCat;
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-6].c))){
 	yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-6].c);
-	yyval.d = 0. ;
+	yyval.d = 0.;
       }
       else{
 	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption(yyvsp[-1].c, pNumCat))){
 	  yymsg(GERROR, "Unknown numeric option '%s[%d].%s'", yyvsp[-6].c, (int)yyvsp[-4].d, yyvsp[-1].c);
-	  yyval.d = 0. ;
+	  yyval.d = 0.;
 	}
 	else
 	  yyval.d = pNumOpt((int)yyvsp[-4].d, GMSH_SET|GMSH_GUI, pNumOpt((int)yyvsp[-4].d, GMSH_GET, 0)+yyvsp[0].i);
       }
     ;
     break;}
-case 418:
-#line 2997 "Gmsh.y"
-{
-      memcpy(yyval.v, yyvsp[0].v, 5*sizeof(double)) ;
-    ;
-    break;}
-case 419:
-#line 3001 "Gmsh.y"
-{
-      for(i = 0; i < 5; i++) yyval.v[i] = -yyvsp[0].v[i] ;
-    ;
-    break;}
-case 420:
-#line 3005 "Gmsh.y"
-{ 
-      for(i = 0; i < 5; i++) yyval.v[i] = yyvsp[0].v[i];
-    ;
-    break;}
 case 421:
-#line 3009 "Gmsh.y"
-{ 
-      for(i = 0; i < 5; i++) yyval.v[i] = yyvsp[-2].v[i] - yyvsp[0].v[i] ;
+#line 3388 "Gmsh.y"
+{
+      memcpy(yyval.v, yyvsp[0].v, 5*sizeof(double));
     ;
     break;}
 case 422:
-#line 3013 "Gmsh.y"
+#line 3392 "Gmsh.y"
 {
-      for(i = 0; i < 5; i++) yyval.v[i] = yyvsp[-2].v[i] + yyvsp[0].v[i] ;
+      for(int i = 0; i < 5; i++) yyval.v[i] = -yyvsp[0].v[i];
     ;
     break;}
 case 423:
-#line 3020 "Gmsh.y"
+#line 3396 "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;
+      for(int i = 0; i < 5; i++) yyval.v[i] = yyvsp[0].v[i];
     ;
     break;}
 case 424:
-#line 3024 "Gmsh.y"
+#line 3400 "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;
+      for(int i = 0; i < 5; i++) yyval.v[i] = yyvsp[-2].v[i] - yyvsp[0].v[i];
     ;
     break;}
 case 425:
-#line 3028 "Gmsh.y"
+#line 3404 "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;
+      for(int i = 0; i < 5; i++) yyval.v[i] = yyvsp[-2].v[i] + yyvsp[0].v[i];
     ;
     break;}
 case 426:
-#line 3032 "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;
+#line 3411 "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 427:
-#line 3039 "Gmsh.y"
-{
+#line 3415 "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 428:
-#line 3042 "Gmsh.y"
+#line 3419 "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 429:
-#line 3048 "Gmsh.y"
+#line 3423 "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 430:
-#line 3051 "Gmsh.y"
+#line 3430 "Gmsh.y"
 {
     ;
     break;}
 case 431:
-#line 3057 "Gmsh.y"
+#line 3433 "Gmsh.y"
 {
     ;
     break;}
 case 432:
-#line 3060 "Gmsh.y"
+#line 3439 "Gmsh.y"
 {
-       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 433:
-#line 3064 "Gmsh.y"
+#line 3442 "Gmsh.y"
 {
-       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 434:
-#line 3071 "Gmsh.y"
+#line 3448 "Gmsh.y"
 {
-      yyval.l = List_Create(2, 1, sizeof(List_T*)) ;
-      List_Add(yyval.l, &(yyvsp[0].l)) ;
     ;
     break;}
 case 435:
-#line 3076 "Gmsh.y"
+#line 3451 "Gmsh.y"
 {
-      List_Add(yyval.l, &(yyvsp[0].l)) ;
+       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 436:
-#line 3084 "Gmsh.y"
+#line 3455 "Gmsh.y"
 {
-      yyval.l = List_Create(2, 1, sizeof(double)) ;
-      List_Add(yyval.l, &(yyvsp[0].d)) ;
+       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 437:
-#line 3089 "Gmsh.y"
+#line 3462 "Gmsh.y"
 {
-      yyval.l = yyvsp[0].l ;
+      yyval.l = List_Create(2, 1, sizeof(List_T*));
+      List_Add(yyval.l, &(yyvsp[0].l));
     ;
     break;}
 case 438:
-#line 3093 "Gmsh.y"
+#line 3467 "Gmsh.y"
 {
-      yyval.l = yyvsp[-1].l;
+      List_Add(yyval.l, &(yyvsp[0].l));
     ;
     break;}
 case 439:
-#line 3097 "Gmsh.y"
+#line 3475 "Gmsh.y"
+{
+      yyval.l = List_Create(2, 1, sizeof(double));
+      List_Add(yyval.l, &(yyvsp[0].d));
+    ;
+    break;}
+case 440:
+#line 3480 "Gmsh.y"
+{
+      yyval.l = yyvsp[0].l;
+    ;
+    break;}
+case 441:
+#line 3484 "Gmsh.y"
+{
+      yyval.l = yyvsp[-1].l;
+    ;
+    break;}
+case 442:
+#line 3488 "Gmsh.y"
 {
       yyval.l = yyvsp[-1].l;
-      for(i = 0; i < List_Nbr(yyval.l); i++){
+      double *pd;
+      for(int i = 0; i < List_Nbr(yyval.l); i++){
 	pd = (double*)List_Pointer(yyval.l, i);
 	(*pd) = - (*pd);
       }
     ;
     break;}
-case 440:
-#line 3108 "Gmsh.y"
+case 443:
+#line 3500 "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) ;
+      yyval.l = List_Create(2, 1, sizeof(double)); 
+      for(double 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 441:
-#line 3114 "Gmsh.y"
+case 444:
+#line 3506 "Gmsh.y"
 {
-      yyval.l = List_Create(2, 1, sizeof(double)) ; 
+      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)){
-        yymsg(GERROR, "Wrong increment in '%g:%g:%g'", yyvsp[-4].d, yyvsp[-2].d, yyvsp[0].d) ;
-	List_Add(yyval.l, &(yyvsp[-4].d)) ;
+        yymsg(GERROR, "Wrong increment in '%g:%g:%g'", yyvsp[-4].d, yyvsp[-2].d, yyvsp[0].d);
+	List_Add(yyval.l, &(yyvsp[-4].d));
       }
       else
-	for(d = yyvsp[-4].d; (yyvsp[0].d > 0) ? (d <= yyvsp[-2].d) : (d >= yyvsp[-2].d); d += yyvsp[0].d)
-	  List_Add(yyval.l, &d) ;
+	for(double d = yyvsp[-4].d; (yyvsp[0].d > 0) ? (d <= yyvsp[-2].d) : (d >= yyvsp[-2].d); d += yyvsp[0].d)
+	  List_Add(yyval.l, &d);
    ;
     break;}
-case 442:
-#line 3125 "Gmsh.y"
+case 445:
+#line 3517 "Gmsh.y"
 {
       // Returns the coordinates of a point and fills a list with it.
       // This allows to ensure e.g. that relative point positions are
       // always conserved
       Vertex *v = FindPoint((int)yyvsp[-1].d, THEM);
-      yyval.l = List_Create(3, 1, sizeof(double)) ;      
+      yyval.l = List_Create(3, 1, sizeof(double));      
       if(!v) {
-	yymsg(GERROR, "Unknown point '%d'", (int) yyvsp[-1].d) ;
-	double d = 0.0 ;
+	yymsg(GERROR, "Unknown point '%d'", (int) yyvsp[-1].d);
+	double d = 0.0;
 	List_Add(yyval.l, &d);
 	List_Add(yyval.l, &d);
 	List_Add(yyval.l, &d);
       }
       else{
-	List_Add(yyval.l, &v->Pos.X) ;
-	List_Add(yyval.l, &v->Pos.Y) ;
-	List_Add(yyval.l, &v->Pos.Z) ;
+	List_Add(yyval.l, &v->Pos.X);
+	List_Add(yyval.l, &v->Pos.Y);
+	List_Add(yyval.l, &v->Pos.Z);
       }
     ;
     break;}
-case 443:
-#line 3145 "Gmsh.y"
+case 446:
+#line 3537 "Gmsh.y"
 {
-      yyval.l = List_Create(List_Nbr(yyvsp[0].l), 1, sizeof(double)) ;
+      yyval.l = List_Create(List_Nbr(yyvsp[0].l), 1, sizeof(double));
       for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){
 	Shape *s = (Shape*) List_Pointer(yyvsp[0].l, i);
 	double d = s->Num;
 	List_Add(yyval.l, &d);
       }
+      List_Delete(yyvsp[0].l);
     ;
     break;}
-case 444:
-#line 3154 "Gmsh.y"
+case 447:
+#line 3547 "Gmsh.y"
 {
-      yyval.l = List_Create(List_Nbr(yyvsp[0].l), 1, sizeof(double)) ;
+      yyval.l = List_Create(List_Nbr(yyvsp[0].l), 1, sizeof(double));
       for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){
 	Shape *s = (Shape*) List_Pointer(yyvsp[0].l, i);
 	double d = s->Num;
 	List_Add(yyval.l, &d);
       }
+      List_Delete(yyvsp[0].l);
     ;
     break;}
-case 445:
-#line 3163 "Gmsh.y"
+case 448:
+#line 3557 "Gmsh.y"
 {
       // FIXME: The syntax for this is ugly: we get double semi-colons
       // at the end of the line
-      yyval.l = List_Create(List_Nbr(yyvsp[0].l), 1, sizeof(double)) ;
+      yyval.l = List_Create(List_Nbr(yyvsp[0].l), 1, sizeof(double));
       for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){
 	Shape *s = (Shape*) List_Pointer(yyvsp[0].l, i);
 	double d = s->Num;
 	List_Add(yyval.l, &d);
       }
+      List_Delete(yyvsp[0].l);
     ;
     break;}
-case 446:
-#line 3174 "Gmsh.y"
+case 449:
+#line 3569 "Gmsh.y"
 {
-      yyval.l = List_Create(2, 1, sizeof(double)) ;
-      TheSymbol.Name = yyvsp[-2].c ;
+      yyval.l = List_Create(2, 1, sizeof(double));
+      Symbol TheSymbol;
+      TheSymbol.Name = yyvsp[-2].c;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
-	yymsg(GERROR, "Unknown variable '%s'", yyvsp[-2].c) ;
-	d = 0.0 ;
+	yymsg(GERROR, "Unknown variable '%s'", yyvsp[-2].c);
+	double d = 0.0;
 	List_Add(yyval.l, &d);
       }
       else{
-	for(i = 0; i < List_Nbr(pSymbol->val); i++)
-	  List_Add(yyval.l, (double*)List_Pointer_Fast(pSymbol->val, i)) ;
+	for(int i = 0; i < List_Nbr(pSymbol->val); i++)
+	  List_Add(yyval.l, (double*)List_Pointer_Fast(pSymbol->val, i));
       }
     ;
     break;}
-case 447:
-#line 3188 "Gmsh.y"
+case 450:
+#line 3585 "Gmsh.y"
 {
-      yyval.l = List_Create(2, 1, sizeof(double)) ;
-      TheSymbol.Name = yyvsp[-2].c ;
+      yyval.l = List_Create(2, 1, sizeof(double));
+      Symbol TheSymbol;
+      TheSymbol.Name = yyvsp[-2].c;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
-	yymsg(GERROR, "Unknown variable '%s'", yyvsp[-2].c) ;
-	d = 0.0 ;
+	yymsg(GERROR, "Unknown variable '%s'", yyvsp[-2].c);
+	double d = 0.0;
 	List_Add(yyval.l, &d);
       }
       else{
-	for(i = 0; i < List_Nbr(pSymbol->val); i++){
-	  d = - *(double*)List_Pointer_Fast(pSymbol->val, i);
-	  List_Add(yyval.l, &d) ;
+	for(int i = 0; i < List_Nbr(pSymbol->val); i++){
+	  double d = - *(double*)List_Pointer_Fast(pSymbol->val, i);
+	  List_Add(yyval.l, &d);
 	}
       }
     ;
     break;}
-case 448:
-#line 3204 "Gmsh.y"
+case 451:
+#line 3603 "Gmsh.y"
 {
-      yyval.l = List_Create(2, 1, sizeof(double)) ;
-      TheSymbol.Name = yyvsp[-5].c ;
+      yyval.l = List_Create(2, 1, sizeof(double));
+      Symbol TheSymbol;
+      TheSymbol.Name = yyvsp[-5].c;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
-	yymsg(GERROR, "Unknown variable '%s'", yyvsp[-5].c) ;
-	d = 0.0 ;
+	yymsg(GERROR, "Unknown variable '%s'", yyvsp[-5].c);
+	double d = 0.0;
 	List_Add(yyval.l, &d);
       }
       else{
-	for(i = 0; i < List_Nbr(yyvsp[-2].l); i++){
-	  j = (int)(*(double*)List_Pointer_Fast(yyvsp[-2].l, i));
+	for(int i = 0; i < List_Nbr(yyvsp[-2].l); i++){
+	  int j = (int)(*(double*)List_Pointer_Fast(yyvsp[-2].l, i));
+	  double *pd;
 	  if((pd = (double*)List_Pointer_Test(pSymbol->val, j)))
-	    List_Add(yyval.l, pd) ;
+	    List_Add(yyval.l, pd);
 	  else
-	    yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-5].c, j) ;	  
+	    yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-5].c, j);	  
 	}
       }
       List_Delete(yyvsp[-2].l);
     ;
     break;}
-case 449:
-#line 3224 "Gmsh.y"
+case 452:
+#line 3626 "Gmsh.y"
 {
-      yyval.l = List_Create(2, 1, sizeof(double)) ;
-      TheSymbol.Name = yyvsp[-5].c ;
+      yyval.l = List_Create(2, 1, sizeof(double));
+      Symbol TheSymbol;
+      TheSymbol.Name = yyvsp[-5].c;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
-	yymsg(GERROR, "Unknown variable '%s'", yyvsp[-5].c) ;
-	d = 0.0 ;
+	yymsg(GERROR, "Unknown variable '%s'", yyvsp[-5].c);
+	double d = 0.0;
 	List_Add(yyval.l, &d);
       }
       else{
-	for(i = 0; i < List_Nbr(yyvsp[-2].l); i++){
-	  j = (int)(*(double*)List_Pointer_Fast(yyvsp[-2].l, i));
+	for(int i = 0; i < List_Nbr(yyvsp[-2].l); i++){
+	  int j = (int)(*(double*)List_Pointer_Fast(yyvsp[-2].l, i));
+	  double *pd;
 	  if((pd = (double*)List_Pointer_Test(pSymbol->val, j))){
-	    d = - *pd;
-	    List_Add(yyval.l, &d) ;
+	    double d = - *pd;
+	    List_Add(yyval.l, &d);
 	  }
 	  else
-	    yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-5].c, j) ;	  
+	    yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-5].c, j);	  
 	}
       }
       List_Delete(yyvsp[-2].l);
     ;
     break;}
-case 450:
-#line 3249 "Gmsh.y"
+case 453:
+#line 3654 "Gmsh.y"
 {
-      yyval.l = List_Create(2, 1, sizeof(double)) ;
-      List_Add(yyval.l, &(yyvsp[0].d)) ;
+      yyval.l = List_Create(2, 1, sizeof(double));
+      List_Add(yyval.l, &(yyvsp[0].d));
     ;
     break;}
-case 451:
-#line 3254 "Gmsh.y"
+case 454:
+#line 3659 "Gmsh.y"
 {
-      yyval.l = yyvsp[0].l ;
+      yyval.l = yyvsp[0].l;
     ;
     break;}
-case 452:
-#line 3258 "Gmsh.y"
+case 455:
+#line 3663 "Gmsh.y"
 {
-      List_Add(yyval.l, &(yyvsp[0].d)) ;
+      List_Add(yyval.l, &(yyvsp[0].d));
     ;
     break;}
-case 453:
-#line 3262 "Gmsh.y"
+case 456:
+#line 3667 "Gmsh.y"
 {
-      for(i = 0; i < List_Nbr(yyvsp[0].l); i++){
-	List_Read(yyvsp[0].l, i, &d) ;
-	List_Add(yyval.l, &d) ;
+      for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){
+	double d;
+	List_Read(yyvsp[0].l, i, &d);
+	List_Add(yyval.l, &d);
       }
       List_Delete(yyvsp[0].l);
     ;
     break;}
-case 454:
-#line 3274 "Gmsh.y"
+case 457:
+#line 3680 "Gmsh.y"
 {
       yyval.u = PACK_COLOR((int)yyvsp[-7].d, (int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d);
     ;
     break;}
-case 455:
-#line 3278 "Gmsh.y"
+case 458:
+#line 3684 "Gmsh.y"
 {
       yyval.u = PACK_COLOR((int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d, 255);
     ;
     break;}
-case 456:
-#line 3289 "Gmsh.y"
+case 459:
+#line 3696 "Gmsh.y"
 {
+      int flag;
       yyval.u = Get_ColorForString(ColorString, -1, yyvsp[0].c, &flag);
       if(flag) yymsg(GERROR, "Unknown color '%s'", yyvsp[0].c);
     ;
     break;}
-case 457:
-#line 3294 "Gmsh.y"
+case 460:
+#line 3702 "Gmsh.y"
 {
+      unsigned int (*pColOpt)(int num, int action, unsigned int value);
+      StringXColor *pColCat;
       if(!(pColCat = Get_ColorOptionCategory(yyvsp[-4].c))){
 	yymsg(GERROR, "Unknown color option class '%s'", yyvsp[-4].c);
-	yyval.u = 0 ;
+	yyval.u = 0;
       }
       else{
 	if(!(pColOpt =  (unsigned int (*) (int, int, unsigned int))Get_ColorOption(yyvsp[0].c, pColCat))){
 	  yymsg(GERROR, "Unknown color option '%s.Color.%s'", yyvsp[-4].c, yyvsp[0].c);
-	  yyval.u = 0 ;
+	  yyval.u = 0;
 	}
 	else{
-	  yyval.u = pColOpt(0, GMSH_GET, 0) ;
+	  yyval.u = pColOpt(0, GMSH_GET, 0);
 	}
       }
     ;
     break;}
-case 458:
-#line 3313 "Gmsh.y"
+case 461:
+#line 3723 "Gmsh.y"
 {
       yyval.l = yyvsp[-1].l;
     ;
     break;}
-case 459:
-#line 3317 "Gmsh.y"
+case 462:
+#line 3727 "Gmsh.y"
 {
-      yyval.l = List_Create(256, 10, sizeof(unsigned int)) ;
+      yyval.l = List_Create(256, 10, sizeof(unsigned int));
       GmshColorTable *ct = Get_ColorTable((int)yyvsp[-3].d);
       if(!ct)
 	yymsg(GERROR, "View[%d] does not exist", (int)yyvsp[-3].d);
       else{
-	for(i = 0; i < ct->size; i++) 
+	for(int i = 0; i < ct->size; i++) 
 	  List_Add(yyval.l, &ct->table[i]);
       }
     ;
     break;}
-case 460:
-#line 3331 "Gmsh.y"
+case 463:
+#line 3741 "Gmsh.y"
 {
-      yyval.l = List_Create(256, 10, sizeof(unsigned int)) ;
-      List_Add(yyval.l, &(yyvsp[0].u)) ;
+      yyval.l = List_Create(256, 10, sizeof(unsigned int));
+      List_Add(yyval.l, &(yyvsp[0].u));
     ;
     break;}
-case 461:
-#line 3336 "Gmsh.y"
+case 464:
+#line 3746 "Gmsh.y"
 {
-      List_Add(yyval.l, &(yyvsp[0].u)) ;
+      List_Add(yyval.l, &(yyvsp[0].u));
     ;
     break;}
-case 462:
-#line 3343 "Gmsh.y"
+case 465:
+#line 3753 "Gmsh.y"
 {
       yyval.c = yyvsp[0].c;
     ;
     break;}
-case 463:
-#line 3347 "Gmsh.y"
+case 466:
+#line 3757 "Gmsh.y"
 {
-      yyval.c = (char *)Malloc((strlen(yyvsp[-3].c)+strlen(yyvsp[-1].c)+1)*sizeof(char)) ;
-      strcpy(yyval.c, yyvsp[-3].c) ;  
-      strcat(yyval.c, yyvsp[-1].c) ;
+      yyval.c = (char *)Malloc((strlen(yyvsp[-3].c)+strlen(yyvsp[-1].c)+1)*sizeof(char));
+      strcpy(yyval.c, yyvsp[-3].c);  
+      strcat(yyval.c, yyvsp[-1].c);
       Free(yyvsp[-3].c);
       Free(yyvsp[-1].c);
     ;
     break;}
-case 464:
-#line 3355 "Gmsh.y"
+case 467:
+#line 3765 "Gmsh.y"
 {
-      yyval.c = (char *)Malloc((strlen(yyvsp[-1].c)+1)*sizeof(char)) ;
+      yyval.c = (char *)Malloc((strlen(yyvsp[-1].c)+1)*sizeof(char));
+      int i;
       for(i = strlen(yyvsp[-1].c)-1; i >= 0; i--){
 	if(yyvsp[-1].c[i] == '.'){
 	  strncpy(yyval.c, yyvsp[-1].c, i);
@@ -8226,16 +8661,17 @@ case 464:
       Free(yyvsp[-1].c);
     ;
     break;}
-case 465:
-#line 3368 "Gmsh.y"
+case 468:
+#line 3779 "Gmsh.y"
 {
       yyval.c = yyvsp[-1].c;
     ;
     break;}
-case 466:
-#line 3372 "Gmsh.y"
+case 469:
+#line 3783 "Gmsh.y"
 {
-      i = PrintListOfDouble(yyvsp[-3].c, yyvsp[-1].l, tmpstring);
+      char tmpstring[1024];
+      int i = PrintListOfDouble(yyvsp[-3].c, yyvsp[-1].l, tmpstring);
       if(i < 0){
 	yymsg(GERROR, "Too few arguments in Sprintf");
 	yyval.c = yyvsp[-3].c;
@@ -8252,32 +8688,36 @@ case 466:
       List_Delete(yyvsp[-1].l);
     ;
     break;}
-case 467:
-#line 3390 "Gmsh.y"
+case 470:
+#line 3802 "Gmsh.y"
 { 
+      char* (*pStrOpt)(int num, int action, char *value);
+      StringXString *pStrCat;
       if(!(pStrCat = Get_StringOptionCategory(yyvsp[-3].c)))
 	yymsg(GERROR, "Unknown string option class '%s'", yyvsp[-3].c);
       else{
 	if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption(yyvsp[-1].c, pStrCat)))
 	  yymsg(GERROR, "Unknown string option '%s.%s'", yyvsp[-3].c, yyvsp[-1].c);
 	else{
-	  str = pStrOpt(0, GMSH_GET, NULL) ;
+	  char *str = pStrOpt(0, GMSH_GET, NULL);
 	  yyval.c = (char*)Malloc((strlen(str)+1)*sizeof(char));
 	  strcpy(yyval.c, str);
 	}
       }
     ;
     break;}
-case 468:
-#line 3404 "Gmsh.y"
+case 471:
+#line 3818 "Gmsh.y"
 { 
+      char* (*pStrOpt)(int num, int action, char *value);
+      StringXString *pStrCat;
       if(!(pStrCat = Get_StringOptionCategory(yyvsp[-6].c)))
 	yymsg(GERROR, "Unknown string option class '%s'", yyvsp[-6].c);
       else{
 	if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption(yyvsp[-1].c, pStrCat)))
 	  yymsg(GERROR, "Unknown string option '%s[%d].%s'", yyvsp[-6].c, (int)yyvsp[-4].d, yyvsp[-1].c);
 	else{
-	  str = pStrOpt((int)yyvsp[-4].d, GMSH_GET, NULL) ;
+	  char *str = pStrOpt((int)yyvsp[-4].d, GMSH_GET, NULL);
 	  yyval.c = (char*)Malloc((strlen(str)+1)*sizeof(char));
 	  strcpy(yyval.c, str);
 	}
@@ -8506,7 +8946,7 @@ yyerrhandle:
     }
   return 1;
 }
-#line 3419 "Gmsh.y"
+#line 3835 "Gmsh.y"
 
 
 void DeleteSymbol(void *a, void *b){
@@ -8528,14 +8968,14 @@ void InitSymbols(void){
 }
 
 int PrintListOfDouble(char *format, List_T *list, char *buffer){
-  int i, j, k;
+  int j, k;
   char tmp1[256], tmp2[256];
 
-  j=0;
+  j = 0;
   while(j < (int)strlen(format) && format[j]!='%') j++;
   strncpy(buffer, format, j); 
   buffer[j]='\0'; 
-  for(i = 0; i < List_Nbr(list); i++){
+  for(int i = 0; i < List_Nbr(list); i++){
     k = j;
     j++;
     if(j < (int)strlen(format)){
@@ -8577,5 +9017,3 @@ void yymsg(int type, char *fmt, ...){
 
   if(type == GERROR) yyerrorstate=1;
 }
-
-
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index d7a9993904a575180fa7ca3b1c1b8c418cfb7941..b67061ef82f8f6681efd268ecaeafc1f3ba69ca7 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -1,5 +1,5 @@
-%{ 
-// $Id: Gmsh.y,v 1.160 2004-02-07 01:40:23 geuzaine Exp $
+%{
+// $Id: Gmsh.y,v 1.161 2004-02-28 00:48:52 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -27,8 +27,9 @@
 #include "Numeric.h"
 #include "Context.h"
 #include "Geo.h"
+#include "GeoUtils.h"
+#include "Nurbs.h"
 #include "CAD.h"
-#include "DataBase.h"
 #include "Mesh.h"
 #include "Draw.h"
 #include "Create.h"
@@ -46,32 +47,25 @@
 #include "STL.h"
 #include "Visibility.h"
 
+// FIXME: most tSTRING and tBIGSTRING are leaked: Free() them!
+
 Tree_T *Symbol_T = NULL;
 
 extern Context_T CTX;
 extern Mesh *THEM;
 
-static fpos_t yyposImbricatedLoopsTab[MAX_OPEN_FILES];
-static int yylinenoImbricatedLoopsTab[MAX_OPEN_FILES];
-static double LoopControlVariablesTab[MAX_OPEN_FILES][3];
-static char *LoopControlVariablesNameTab[MAX_OPEN_FILES];
-static char tmpstring[1024];
-static Symbol TheSymbol, *pSymbol;
-static Surface *STL_Surf;
-static Shape TheShape;
-static int i, j, k, flag, ImbricatedLoop = 0;
 static int Last_NumberOfPoints = 0;
-static double d, *pd;
+static Surface *STL_Surf;
 static ExtrudeParams extr;
-static char *str;
-static StringXString *pStrCat;
-static StringXNumber *pNumCat;
-static StringXColor *pColCat;
-static double (*pNumOpt)(int num, int action, double value);
-static char* (*pStrOpt)(int num, int action, char *value);
-static unsigned int (*pColOpt)(int num, int action, unsigned int value);
 static Post_View *View;
 
+#define MAX_RECUR_LOOPS 100
+static int ImbricatedLoop = 0;
+static fpos_t yyposImbricatedLoopsTab[MAX_RECUR_LOOPS];
+static int yylinenoImbricatedLoopsTab[MAX_RECUR_LOOPS];
+static double LoopControlVariablesTab[MAX_RECUR_LOOPS][3];
+static char *LoopControlVariablesNameTab[MAX_RECUR_LOOPS];
+
 char *strsave (char *ptr);
 void yyerror (char *s);
 void yymsg (int type, char *fmt, ...);
@@ -166,9 +160,9 @@ int PrintListOfDouble (char *format, List_T *list, char *buffer);
 
 All : 
     StepFormatItems
-  | STLFormatItem
-  | GeomFormatList
-  | error tEND { yyerrok ; return 1; }
+  | StlFormatItems
+  | GeoFormatItems
+  | error tEND { yyerrok; return 1; }
 ;
 
 //  S T E R E O L I T H O G R A P H Y  ( S T L )
@@ -178,11 +172,16 @@ SignedDouble :
   | '-' tDOUBLE { $$ = -$2; }
 ;
 
-STLFormatItem : 
+StlFormatItems : 
+    // nothing
+  | StlFormatItems StlFormatItem
+;
+
+StlFormatItem : 
     tSolid
     {
-      yymsg(INFO, "STL file format");
-      STL_Surf = Create_Surface(1, MSH_SURF_STL);
+      yymsg(INFO, "Reading STL solid");
+      STL_Surf = Create_Surface(NEWSURFACE(), MSH_SURF_STL);
       STL_Surf->STL = new STL_Data;
       return 1;
     }
@@ -197,21 +196,28 @@ STLFormatItem :
     {
       STL_Surf->STL->Add_Facet($9, $10, $11,
 			       $13, $14, $15,
-			       $17, $18, $19);
+			       $17, $18, $19, CTX.geom.stl_create_elementary);
       return 1;
     }
   | tEndSolid
     {
-      yymsg(INFO, "STL file format read");
-      Tree_Add(THEM->Surfaces, &STL_Surf);
+      if(CTX.geom.stl_create_elementary){
+	STL_Surf->STL->ReplaceDuplicate();
+	if(CTX.geom.stl_create_physical)
+	  STL_Surf->STL->CreatePhysicalSurface();
+      }
+      else{
+	Tree_Add(THEM->Surfaces, &STL_Surf);
+      }
+      yymsg(INFO, "Read STL solid");
       return 1;
     }
 ;
 
-//  S T E P   I S O - 1 0 3 0 3 - 2 1   F I L E   F O R M A T
+// S T E P   I S O - 1 0 3 0 3 - 2 1   F I L E   F O R M A T
 
 StepFormatItems :
-    /* nothing */
+    // nothing
   | StepFormatItems StepFormatItem
 ;
 
@@ -224,13 +230,13 @@ StepFormatItem :
 StepSpecial :
     tISO tEND
     {
-      yymsg(INFO, "Step Iso-10303-21 file format");
+      yymsg(INFO, "Reading Step Iso-10303-21 data");
       Create_Step_Solid_BRep();
     }
   | tENDISO tEND
     {
-      yymsg(INFO, "Step Iso-10303-21 file format read");
       Resolve_BREP ();
+      yymsg(INFO, "Read Step Iso-10303-21 data");
     }
   | tDATA tEND
   | tENDSEC tEND
@@ -382,28 +388,23 @@ StepDataItem  :
 
 //  G E O   F I L E   F O R M A T
 
-GeomFormatList : 
-    /* none*/
-  {
-  }  
-  | GeomFormatList GeomFormat
-  {
-    yymsg(INFO, "Gmsh file format read");
-  }
+GeoFormatItems : 
+    // nothing
+  | GeoFormatItems GeoFormatItem
 ;
 
-GeomFormat :
+GeoFormatItem :
     View        { return 1; }
   | Printf      { return 1; }
   | Affectation { return 1; }
   | Shape       { return 1; }
-  | Transform   { return 1; }
-  | Duplicata   { return 1; }
+  | Transform   { List_Delete($1); return 1; }
+  | Duplicata   { List_Delete($1); return 1; }
   | Delete      { return 1; }
   | Colorify    { return 1; }
   | Visibility  { return 1; }
-  | Extrude     { return 1; }
-  | Transfini   { return 1; }
+  | Extrude     { List_Delete($1); return 1; }
+  | Transfinite { return 1; }
   | Coherence   { return 1; }
   | Loop        { return 1; }
   | Command     { return 1; }
@@ -416,7 +417,8 @@ Printf :
     }
   | tPrintf '(' tBIGSTR ',' RecursiveListOfDouble ')' tEND
     {
-      i = PrintListOfDouble($3, $5, tmpstring);
+      char tmpstring[1024];
+      int i = PrintListOfDouble($3, $5, tmpstring);
       if(i < 0) 
 	yymsg(GERROR, "Too few arguments in Printf");
       else if(i > 0)
@@ -441,7 +443,7 @@ View :
 ;
 
 Views :
-    /* none */
+    // nothing
     {
       View = BeginView(1); 
     }
@@ -475,10 +477,10 @@ Views :
 
 ScalarPointValues :
     FExpr
-    { List_Add(View->SP, &$1) ; }
+    { List_Add(View->SP, &$1); }
   | ScalarPointValues ',' FExpr
-    { List_Add(View->SP, &$3) ; }
-  ;
+    { List_Add(View->SP, &$3); }
+;
 
 ScalarPoint : 
     tScalarPoint '(' FExpr ',' FExpr ',' FExpr ')'
@@ -488,16 +490,16 @@ ScalarPoint :
     }
     '{' ScalarPointValues '}' tEND
     {
-      View->NbSP++ ;
+      View->NbSP++;
     }
 ;
 
 VectorPointValues :
     FExpr
-    { List_Add(View->VP, &$1) ; }
+    { List_Add(View->VP, &$1); }
   | VectorPointValues ',' FExpr
-    { List_Add(View->VP, &$3) ; }
-  ;
+    { List_Add(View->VP, &$3); }
+;
 
 VectorPoint : 
     tVectorPoint '(' FExpr ',' FExpr ',' FExpr ')' 
@@ -507,16 +509,16 @@ VectorPoint :
     }
     '{' VectorPointValues '}' tEND
     {
-      View->NbVP++ ;
+      View->NbVP++;
     }
 ;
 
 TensorPointValues :
     FExpr
-    { List_Add(View->TP, &$1) ; }
+    { List_Add(View->TP, &$1); }
   | TensorPointValues ',' FExpr
-    { List_Add(View->TP, &$3) ; }
-  ;
+    { List_Add(View->TP, &$3); }
+;
 
 TensorPoint :
     tTensorPoint '(' FExpr ',' FExpr ',' FExpr ')' 
@@ -526,16 +528,16 @@ TensorPoint :
     }
     '{' TensorPointValues '}' tEND
     {
-      View->NbTP++ ;
+      View->NbTP++;
     }
 ;
 
 ScalarLineValues :
     FExpr
-    { List_Add(View->SL, &$1) ; }
+    { List_Add(View->SL, &$1); }
   | ScalarLineValues ',' FExpr
-    { List_Add(View->SL, &$3) ; }
-  ;
+    { List_Add(View->SL, &$3); }
+;
 
 ScalarLine : 
     tScalarLine '(' FExpr ',' FExpr ',' FExpr ',' 
@@ -547,16 +549,16 @@ ScalarLine :
     }
     '{' ScalarLineValues '}' tEND
     {
-      View->NbSL++ ;
+      View->NbSL++;
     }
 ;
 
 VectorLineValues :
     FExpr
-    { List_Add(View->VL, &$1) ; }
+    { List_Add(View->VL, &$1); }
   | VectorLineValues ',' FExpr
-    { List_Add(View->VL, &$3) ; }
-  ;
+    { List_Add(View->VL, &$3); }
+;
 
 VectorLine : 
     tVectorLine '(' FExpr ',' FExpr ',' FExpr ',' 
@@ -568,16 +570,16 @@ VectorLine :
     }
     '{' VectorLineValues '}' tEND
     {
-      View->NbVL++ ;
+      View->NbVL++;
     }
 ;
 
 TensorLineValues :
     FExpr
-    { List_Add(View->TL, &$1) ; }
+    { List_Add(View->TL, &$1); }
   | TensorLineValues ',' FExpr
-    { List_Add(View->TL, &$3) ; }
-  ;
+    { List_Add(View->TL, &$3); }
+;
 
 TensorLine :
     tTensorLine '(' FExpr ',' FExpr ',' FExpr ',' 
@@ -589,16 +591,16 @@ TensorLine :
     }
     '{' TensorLineValues '}' tEND
     {
-      View->NbTL++ ;
+      View->NbTL++;
     }
 ;
 
 ScalarTriangleValues :
     FExpr
-    { List_Add(View->ST, &$1) ; }
+    { List_Add(View->ST, &$1); }
   | ScalarTriangleValues ',' FExpr
-    { List_Add(View->ST, &$3) ; }
-  ;
+    { List_Add(View->ST, &$3); }
+;
 
 ScalarTriangle : 
     tScalarTriangle '(' FExpr ',' FExpr ',' FExpr ',' 
@@ -614,16 +616,16 @@ ScalarTriangle :
     }
     '{' ScalarTriangleValues '}' tEND
     {
-      View->NbST++ ;
+      View->NbST++;
     }
 ;
 
 VectorTriangleValues :
     FExpr
-    { List_Add(View->VT, &$1) ; }
+    { List_Add(View->VT, &$1); }
   | VectorTriangleValues ',' FExpr
-    { List_Add(View->VT, &$3) ; }
-  ;
+    { List_Add(View->VT, &$3); }
+;
 
 VectorTriangle : 
     tVectorTriangle '(' FExpr ',' FExpr ',' FExpr ',' 
@@ -639,16 +641,16 @@ VectorTriangle :
     }
     '{' VectorTriangleValues '}' tEND
     {
-      View->NbVT++ ;
+      View->NbVT++;
     }
 ;
 
 TensorTriangleValues :
     FExpr
-    { List_Add(View->TT, &$1) ; }
+    { List_Add(View->TT, &$1); }
   | TensorTriangleValues ',' FExpr
-    { List_Add(View->TT, &$3) ; }
-  ;
+    { List_Add(View->TT, &$3); }
+;
 
 TensorTriangle :
     tTensorTriangle '(' FExpr ',' FExpr ',' FExpr ',' 
@@ -664,16 +666,16 @@ TensorTriangle :
     }
     '{' TensorTriangleValues '}' tEND
     {
-      View->NbTT++ ;
+      View->NbTT++;
     }
 ;
 
 ScalarQuadrangleValues :
     FExpr
-    { List_Add(View->SQ, &$1) ; }
+    { List_Add(View->SQ, &$1); }
   | ScalarQuadrangleValues ',' FExpr
-    { List_Add(View->SQ, &$3) ; }
-  ;
+    { List_Add(View->SQ, &$3); }
+;
 
 ScalarQuadrangle : 
     tScalarQuadrangle '(' FExpr ',' FExpr ',' FExpr ',' 
@@ -690,16 +692,16 @@ ScalarQuadrangle :
     }
     '{' ScalarQuadrangleValues '}' tEND
     {
-      View->NbSQ++ ;
+      View->NbSQ++;
     }
 ;
 
 VectorQuadrangleValues :
     FExpr
-    { List_Add(View->VQ, &$1) ; }
+    { List_Add(View->VQ, &$1); }
   | VectorQuadrangleValues ',' FExpr
-    { List_Add(View->VQ, &$3) ; }
-  ;
+    { List_Add(View->VQ, &$3); }
+;
 
 VectorQuadrangle : 
     tVectorQuadrangle '(' FExpr ',' FExpr ',' FExpr ',' 
@@ -716,16 +718,16 @@ VectorQuadrangle :
     }
     '{' VectorQuadrangleValues '}' tEND
     {
-      View->NbVQ++ ;
+      View->NbVQ++;
     }
 ;
 
 TensorQuadrangleValues :
     FExpr
-    { List_Add(View->TQ, &$1) ; }
+    { List_Add(View->TQ, &$1); }
   | TensorQuadrangleValues ',' FExpr
-    { List_Add(View->TQ, &$3) ; }
-  ;
+    { List_Add(View->TQ, &$3); }
+;
 
 TensorQuadrangle :
     tTensorQuadrangle '(' FExpr ',' FExpr ',' FExpr ',' 
@@ -742,16 +744,16 @@ TensorQuadrangle :
     }
     '{' TensorQuadrangleValues '}' tEND
     {
-      View->NbTQ++ ;
+      View->NbTQ++;
     }
 ;
 
 ScalarTetrahedronValues :
     FExpr
-    { List_Add(View->SS, &$1) ; }
+    { List_Add(View->SS, &$1); }
   | ScalarTetrahedronValues ',' FExpr
-    { List_Add(View->SS, &$3) ; }
-  ;
+    { List_Add(View->SS, &$3); }
+;
 
 ScalarTetrahedron : 
     tScalarTetrahedron '(' FExpr ',' FExpr ',' FExpr ',' 
@@ -768,16 +770,16 @@ ScalarTetrahedron :
     }
     '{' ScalarTetrahedronValues '}' tEND
     {
-      View->NbSS++ ;
+      View->NbSS++;
     }
 ;
 
 VectorTetrahedronValues :
     FExpr
-    { List_Add(View->VS, &$1) ; }
+    { List_Add(View->VS, &$1); }
   | VectorTetrahedronValues ',' FExpr
-    { List_Add(View->VS, &$3) ; }
-  ;
+    { List_Add(View->VS, &$3); }
+;
 
 VectorTetrahedron : 
     tVectorTetrahedron '(' FExpr ',' FExpr ',' FExpr ',' 
@@ -794,16 +796,16 @@ VectorTetrahedron :
     }
     '{' VectorTetrahedronValues '}' tEND
     {
-      View->NbVS++ ;
+      View->NbVS++;
     }
 ;
 
 TensorTetrahedronValues :
     FExpr
-    { List_Add(View->TS, &$1) ; }
+    { List_Add(View->TS, &$1); }
   | TensorTetrahedronValues ',' FExpr
-    { List_Add(View->TS, &$3) ; }
-  ;
+    { List_Add(View->TS, &$3); }
+;
 
 TensorTetrahedron :
     tTensorTetrahedron '(' FExpr ',' FExpr ',' FExpr ',' 
@@ -820,16 +822,16 @@ TensorTetrahedron :
     }
     '{' TensorTetrahedronValues '}' tEND
     {
-      View->NbTS++ ;
+      View->NbTS++;
     }
 ;
 
 ScalarHexahedronValues :
     FExpr
-    { List_Add(View->SH, &$1) ; }
+    { List_Add(View->SH, &$1); }
   | ScalarHexahedronValues ',' FExpr
-    { List_Add(View->SH, &$3) ; }
-  ;
+    { List_Add(View->SH, &$3); }
+;
 
 ScalarHexahedron : 
     tScalarHexahedron '(' FExpr ',' FExpr ',' FExpr ',' 
@@ -856,16 +858,16 @@ ScalarHexahedron :
     }
     '{' ScalarHexahedronValues '}' tEND
     {
-      View->NbSH++ ;
+      View->NbSH++;
     }
 ;
 
 VectorHexahedronValues :
     FExpr
-    { List_Add(View->VH, &$1) ; }
+    { List_Add(View->VH, &$1); }
   | VectorHexahedronValues ',' FExpr
-    { List_Add(View->VH, &$3) ; }
-  ;
+    { List_Add(View->VH, &$3); }
+;
 
 VectorHexahedron : 
     tVectorHexahedron '(' FExpr ',' FExpr ',' FExpr ',' 
@@ -892,16 +894,16 @@ VectorHexahedron :
     }
     '{' VectorHexahedronValues '}' tEND
     {
-      View->NbVH++ ;
+      View->NbVH++;
     }
 ;
 
 TensorHexahedronValues :
     FExpr
-    { List_Add(View->TH, &$1) ; }
+    { List_Add(View->TH, &$1); }
   | TensorHexahedronValues ',' FExpr
-    { List_Add(View->TH, &$3) ; }
-  ;
+    { List_Add(View->TH, &$3); }
+;
 
 TensorHexahedron :
     tTensorHexahedron '(' FExpr ',' FExpr ',' FExpr ',' 
@@ -928,16 +930,16 @@ TensorHexahedron :
     }
     '{' TensorHexahedronValues '}' tEND
     {
-      View->NbTH++ ;
+      View->NbTH++;
     }
 ;
 
 ScalarPrismValues :
     FExpr
-    { List_Add(View->SI, &$1) ; }
+    { List_Add(View->SI, &$1); }
   | ScalarPrismValues ',' FExpr
-    { List_Add(View->SI, &$3) ; }
-  ;
+    { List_Add(View->SI, &$3); }
+;
 
 ScalarPrism : 
     tScalarPrism '(' FExpr ',' FExpr ',' FExpr ',' 
@@ -959,16 +961,16 @@ ScalarPrism :
     }
     '{' ScalarPrismValues '}' tEND
     {
-      View->NbSI++ ;
+      View->NbSI++;
     }
 ;
 
 VectorPrismValues :
     FExpr
-    { List_Add(View->VI, &$1) ; }
+    { List_Add(View->VI, &$1); }
   | VectorPrismValues ',' FExpr
-    { List_Add(View->VI, &$3) ; }
-  ;
+    { List_Add(View->VI, &$3); }
+;
 
 VectorPrism : 
     tVectorPrism '(' FExpr ',' FExpr ',' FExpr ',' 
@@ -990,16 +992,16 @@ VectorPrism :
     }
     '{' VectorPrismValues '}' tEND
     {
-      View->NbVI++ ;
+      View->NbVI++;
     }
 ;
 
 TensorPrismValues :
     FExpr
-    { List_Add(View->TI, &$1) ; }
+    { List_Add(View->TI, &$1); }
   | TensorPrismValues ',' FExpr
-    { List_Add(View->TI, &$3) ; }
-  ;
+    { List_Add(View->TI, &$3); }
+;
 
 TensorPrism :
     tTensorPrism '(' FExpr ',' FExpr ',' FExpr ',' 
@@ -1021,16 +1023,16 @@ TensorPrism :
     }
     '{' TensorPrismValues '}' tEND
     {
-      View->NbTI++ ;
+      View->NbTI++;
     }
 ;
 
 ScalarPyramidValues :
     FExpr
-    { List_Add(View->SY, &$1) ; }
+    { List_Add(View->SY, &$1); }
   | ScalarPyramidValues ',' FExpr
-    { List_Add(View->SY, &$3) ; }
-  ;
+    { List_Add(View->SY, &$3); }
+;
 
 ScalarPyramid : 
     tScalarPyramid '(' FExpr ',' FExpr ',' FExpr ',' 
@@ -1051,16 +1053,16 @@ ScalarPyramid :
     }
     '{' ScalarPyramidValues '}' tEND
     {
-      View->NbSY++ ;
+      View->NbSY++;
     }
 ;
 
 VectorPyramidValues :
     FExpr
-    { List_Add(View->VY, &$1) ; }
+    { List_Add(View->VY, &$1); }
   | VectorPyramidValues ',' FExpr
-    { List_Add(View->VY, &$3) ; }
-  ;
+    { List_Add(View->VY, &$3); }
+;
 
 VectorPyramid : 
     tVectorPyramid '(' FExpr ',' FExpr ',' FExpr ',' 
@@ -1081,16 +1083,16 @@ VectorPyramid :
     }
     '{' VectorPyramidValues '}' tEND
     {
-      View->NbVY++ ;
+      View->NbVY++;
     }
 ;
 
 TensorPyramidValues :
     FExpr
-    { List_Add(View->TY, &$1) ; }
+    { List_Add(View->TY, &$1); }
   | TensorPyramidValues ',' FExpr
-    { List_Add(View->TY, &$3) ; }
-  ;
+    { List_Add(View->TY, &$3); }
+;
 
 TensorPyramid :
     tTensorPyramid '(' FExpr ',' FExpr ',' FExpr ',' 
@@ -1111,61 +1113,61 @@ TensorPyramid :
     }
     '{' TensorPyramidValues '}' tEND
     {
-      View->NbTY++ ;
+      View->NbTY++;
     }
 ;
 
 Text2DValues :
     StringExpr
     { 
-      for(i = 0; i < (int)strlen($1)+1; i++) List_Add(View->T2C, &$1[i]) ; 
+      for(int i = 0; i < (int)strlen($1)+1; i++) List_Add(View->T2C, &$1[i]); 
       Free($1);
     }
   | Text2DValues ',' StringExpr
     { 
-      for(i = 0; i < (int)strlen($3)+1; i++) List_Add(View->T2C, &$3[i]) ; 
+      for(int i = 0; i < (int)strlen($3)+1; i++) List_Add(View->T2C, &$3[i]); 
       Free($3);
     }
-  ;
+;
 
 Text2D : 
     tText2D '(' FExpr ',' FExpr ',' FExpr ')'
     { 
       List_Add(View->T2D, &$3); List_Add(View->T2D, &$5);
       List_Add(View->T2D, &$7); 
-      d = List_Nbr(View->T2C);
+      double d = List_Nbr(View->T2C);
       List_Add(View->T2D, &d); 
     }
     '{' Text2DValues '}' tEND
     {
-      View->NbT2++ ;
+      View->NbT2++;
     }
 ;
 
 Text3DValues :
     StringExpr
     { 
-      for(i = 0; i < (int)strlen($1)+1; i++) List_Add(View->T3C, &$1[i]) ; 
+      for(int i = 0; i < (int)strlen($1)+1; i++) List_Add(View->T3C, &$1[i]); 
       Free($1);
     }
   | Text3DValues ',' StringExpr
     { 
-      for(i = 0; i < (int)strlen($3)+1; i++) List_Add(View->T3C, &$3[i]) ; 
+      for(int i = 0; i < (int)strlen($3)+1; i++) List_Add(View->T3C, &$3[i]); 
       Free($3);
     }
-  ;
+;
 
 Text3D : 
     tText3D '(' FExpr ',' FExpr ',' FExpr ',' FExpr ')'
     { 
       List_Add(View->T3D, &$3); List_Add(View->T3D, &$5);
       List_Add(View->T3D, &$7); List_Add(View->T3D, &$9); 
-      d = List_Nbr(View->T3C);
+      double d = List_Nbr(View->T3C);
       List_Add(View->T3D, &d); 
     }
     '{' Text3DValues '}' tEND
     {
-      View->NbT3++ ;
+      View->NbT3++;
     }
 ;
 
@@ -1173,16 +1175,16 @@ Text3D :
 //  A F F E C T A T I O N
 
 NumericAffectation :
-    tAFFECT        { $$ = 0 ; }
-  | tAFFECTPLUS    { $$ = 1 ; }
-  | tAFFECTMINUS   { $$ = 2 ; }
-  | tAFFECTTIMES   { $$ = 3 ; }
-  | tAFFECTDIVIDE  { $$ = 4 ; }
+    tAFFECT        { $$ = 0; }
+  | tAFFECTPLUS    { $$ = 1; }
+  | tAFFECTMINUS   { $$ = 2; }
+  | tAFFECTTIMES   { $$ = 3; }
+  | tAFFECTDIVIDE  { $$ = 4; }
 ;
 
 NumericIncrement :
-    tPLUSPLUS      { $$ = 1 ; }
-  | tMINUSMINUS    { $$ = -1 ; }
+    tPLUSPLUS      { $$ = 1; }
+  | tMINUSMINUS    { $$ = -1; }
 ;
 
 Affectation :
@@ -1191,7 +1193,9 @@ Affectation :
 
     tSTRING NumericAffectation FExpr tEND
     {
+      Symbol TheSymbol;
       TheSymbol.Name = $1;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){
 	TheSymbol.val = List_Create(1, 1, sizeof(double));
 	if(!$2){
@@ -1199,26 +1203,27 @@ Affectation :
 	  Tree_Add(Symbol_T, &TheSymbol);
 	}
 	else
-	  yymsg(GERROR, "Unknown variable '%s'", $1) ;
+	  yymsg(GERROR, "Unknown variable '%s'", $1);
       }
       else{
-	pd = (double*)List_Pointer_Fast(pSymbol->val, 0) ; 
+	double *pd = (double*)List_Pointer_Fast(pSymbol->val, 0); 
 	switch($2){
-	case 0 : *pd = $3; break ;
-	case 1 : *pd += $3 ; break ;
-	case 2 : *pd -= $3 ; break ;
-	case 3 : *pd *= $3 ; break ;
+	case 0 : *pd = $3; break;
+	case 1 : *pd += $3; break;
+	case 2 : *pd -= $3; break;
+	case 3 : *pd *= $3; break;
 	case 4 : 
-	  if($3) *pd /= $3 ; 
+	  if($3) *pd /= $3; 
 	  else yymsg(GERROR, "Division by zero in '%s /= %g'", $1, $3);
 	  break;
 	}
       }
     }
-
   | tSTRING '[' FExpr ']' NumericAffectation FExpr tEND
     {
+      Symbol TheSymbol;
       TheSymbol.Name = $1;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){
 	TheSymbol.val = List_Create(5, 5, sizeof(double));
 	if(!$5){
@@ -1226,17 +1231,18 @@ Affectation :
 	  Tree_Add(Symbol_T, &TheSymbol);
 	}
 	else
-	  yymsg(GERROR, "Unknown variable '%s'", $1) ;
+	  yymsg(GERROR, "Unknown variable '%s'", $1);
       }
       else{
+	double *pd;
 	if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)$3))){
 	  switch($5){
-	  case 0 : *pd = $6; break ;
-	  case 1 : *pd += $6 ; break ;
-	  case 2 : *pd -= $6 ; break ;
-	  case 3 : *pd *= $6 ; break ;
+	  case 0 : *pd = $6; break;
+	  case 1 : *pd += $6; break;
+	  case 2 : *pd -= $6; break;
+	  case 3 : *pd *= $6; break;
 	  case 4 : 
-	    if($6) *pd /= $6 ; 
+	    if($6) *pd /= $6; 
 	    else yymsg(GERROR, "Division by zero in '%s[%d] /= %g'", $1, (int)$3, $6);
 	    break;
 	  }
@@ -1245,41 +1251,43 @@ Affectation :
 	  if(!$5)
 	    List_Put(pSymbol->val, (int)$3, &$6);
 	  else
-	    yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, (int)$3) ;
+	    yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, (int)$3);
 	}
       }
     }
-
   | tSTRING '[' '{' RecursiveListOfDouble '}' ']' NumericAffectation ListOfDouble tEND
     {
       if(List_Nbr($4) != List_Nbr($8))
 	yymsg(GERROR, "Incompatible array dimensions in affectation");
       else{
+	Symbol TheSymbol;
 	TheSymbol.Name = $1;
+	Symbol *pSymbol;
 	if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){
 	  TheSymbol.val = List_Create(5, 5, sizeof(double));
 	  if(!$7){
-	    for(i = 0; i < List_Nbr($4); i++){
+	    for(int i = 0; i < List_Nbr($4); i++){
 	      List_Put(TheSymbol.val, (int)(*(double*)List_Pointer($4, i)),
 		       (double*)List_Pointer($8, i));
 	    }
 	    Tree_Add(Symbol_T, &TheSymbol);
 	  }
 	  else
-	    yymsg(GERROR, "Unknown variable '%s'", $1) ;
+	    yymsg(GERROR, "Unknown variable '%s'", $1);
 	}
 	else{
-	  for(i = 0; i < List_Nbr($4); i++){
-	    j = (int)(*(double*)List_Pointer($4, i)) ;
-	    d = *(double*)List_Pointer($8, i) ;
+	  for(int i = 0; i < List_Nbr($4); i++){
+	    int j = (int)(*(double*)List_Pointer($4, i));
+	    double d = *(double*)List_Pointer($8, i);
+	    double *pd;
 	    if((pd = (double*)List_Pointer_Test(pSymbol->val, j))){
 	      switch($7){
-	      case 0 : *pd = d; break ;
-	      case 1 : *pd += d ; break ;
-	      case 2 : *pd -= d ; break ;
-	      case 3 : *pd *= d ; break ;
+	      case 0 : *pd = d; break;
+	      case 1 : *pd += d; break;
+	      case 2 : *pd -= d; break;
+	      case 3 : *pd *= d; break;
 	      case 4 : 
-		if($8) *pd /= d ; 
+		if($8) *pd /= d; 
 		else yymsg(GERROR, "Division by zero in '%s[%d] /= %g'", $1, j, d);
 		break;
 	      }
@@ -1288,7 +1296,7 @@ Affectation :
 	      if(!$7)
 		List_Put(pSymbol->val, j, &d);
 	      else
-		yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, j) ;	  
+		yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, j);	  
 	    }
 	  }
 	}
@@ -1296,10 +1304,11 @@ Affectation :
       List_Delete($4);
       List_Delete($8);
     }
-
   | tSTRING '[' ']' tAFFECT ListOfDouble tEND
     {
+      Symbol TheSymbol;
       TheSymbol.Name = $1;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){
 	TheSymbol.val = List_Create(5, 5, sizeof(double));
 	List_Copy($5, TheSymbol.val);
@@ -1311,26 +1320,29 @@ Affectation :
       }
       List_Delete($5);
     }
-
   | tSTRING NumericIncrement tEND
     {
+      Symbol TheSymbol;
       TheSymbol.Name = $1;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol)))
-	yymsg(GERROR, "Unknown variable '%s'", $1) ; 
+	yymsg(GERROR, "Unknown variable '%s'", $1); 
       else
 	*(double*)List_Pointer_Fast(pSymbol->val, 0) += $2; 
     }
-
   | tSTRING '[' FExpr ']' NumericIncrement tEND
     {
-      TheSymbol.Name = $1 ;
+      Symbol TheSymbol;
+      TheSymbol.Name = $1;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol)))
-	yymsg(GERROR, "Unknown variable '%s'", $1) ; 
+	yymsg(GERROR, "Unknown variable '%s'", $1); 
       else{
+	double *pd;
 	if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)$3)))
-	  *pd += $5 ;
+	  *pd += $5;
 	else
-	  yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, (int)$3) ;
+	  yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, (int)$3);
       }
     }
 
@@ -1338,25 +1350,28 @@ Affectation :
 
   | tSTRING '.' tSTRING tAFFECT StringExpr tEND 
     { 
+      char* (*pStrOpt)(int num, int action, char *value);
+      StringXString *pStrCat;
       if(!(pStrCat = Get_StringOptionCategory($1)))
 	yymsg(GERROR, "Unknown string option class '%s'", $1);
       else{
 	if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption($3, pStrCat)))
 	  yymsg(GERROR, "Unknown string option '%s.%s'", $1, $3);
 	else
-	  pStrOpt(0, GMSH_SET|GMSH_GUI, $5) ;
+	  pStrOpt(0, GMSH_SET|GMSH_GUI, $5);
       }
     }
-
   | tSTRING '[' FExpr ']' '.' tSTRING tAFFECT StringExpr tEND 
     { 
+      char* (*pStrOpt)(int num, int action, char *value);
+      StringXString *pStrCat;
       if(!(pStrCat = Get_StringOptionCategory($1)))
 	yymsg(GERROR, "Unknown string option class '%s'", $1);
       else{
 	if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption($6, pStrCat)))
 	  yymsg(GERROR, "Unknown string option '%s[%d].%s'", $1, (int)$3, $6);
 	else
-	  pStrOpt((int)$3, GMSH_SET|GMSH_GUI, $8) ;
+	  pStrOpt((int)$3, GMSH_SET|GMSH_GUI, $8);
       }
     }
 
@@ -1364,72 +1379,79 @@ Affectation :
 
   | tSTRING '.' tSTRING NumericAffectation FExpr tEND 
     {
+      double (*pNumOpt)(int num, int action, double value);
+      StringXNumber *pNumCat;
       if(!(pNumCat = Get_NumberOptionCategory($1)))
 	yymsg(GERROR, "Unknown numeric option class '%s'", $1);
       else{
 	if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption($3, pNumCat)))
 	  yymsg(GERROR, "Unknown numeric option '%s.%s'", $1, $3);
 	else{
+	  double d = 0;
 	  switch($4){
-	  case 0 : d = $5 ; break ;
-	  case 1 : d = pNumOpt(0, GMSH_GET, 0) + $5 ; break ;
-	  case 2 : d = pNumOpt(0, GMSH_GET, 0) - $5 ; break ;
-	  case 3 : d = pNumOpt(0, GMSH_GET, 0) * $5 ; break ;
+	  case 0 : d = $5; break;
+	  case 1 : d = pNumOpt(0, GMSH_GET, 0) + $5; break;
+	  case 2 : d = pNumOpt(0, GMSH_GET, 0) - $5; break;
+	  case 3 : d = pNumOpt(0, GMSH_GET, 0) * $5; break;
 	  case 4 : 
-	    if($5) d = pNumOpt(0, GMSH_GET, 0) / $5 ; 
+	    if($5) d = pNumOpt(0, GMSH_GET, 0) / $5; 
 	    else yymsg(GERROR, "Division by zero in '%s.%s /= %g'", $1, $3, $5);
 	    break;
 	  }
-	  pNumOpt(0, GMSH_SET|GMSH_GUI, d) ;
+	  pNumOpt(0, GMSH_SET|GMSH_GUI, d);
 	}
       }
     }
-
   | tSTRING '[' FExpr ']' '.' tSTRING NumericAffectation FExpr tEND 
     {
+      double (*pNumOpt)(int num, int action, double value);
+      StringXNumber *pNumCat;
       if(!(pNumCat = Get_NumberOptionCategory($1)))
 	yymsg(GERROR, "Unknown numeric option class '%s'", $1);
       else{
 	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption($6, pNumCat)))
 	  yymsg(GERROR, "Unknown numeric option '%s[%d].%s'", $1, (int)$3, $6);
 	else{
+	  double d = 0;
 	  switch($7){
-	  case 0 : d = $8; break ;
-	  case 1 : d = pNumOpt((int)$3, GMSH_GET, 0) + $8 ; break ;
-	  case 2 : d = pNumOpt((int)$3, GMSH_GET, 0) - $8 ; break ;
-	  case 3 : d = pNumOpt((int)$3, GMSH_GET, 0) * $8 ; break ;
+	  case 0 : d = $8; break;
+	  case 1 : d = pNumOpt((int)$3, GMSH_GET, 0) + $8; break;
+	  case 2 : d = pNumOpt((int)$3, GMSH_GET, 0) - $8; break;
+	  case 3 : d = pNumOpt((int)$3, GMSH_GET, 0) * $8; break;
 	  case 4 : 
-	    if($8) d = pNumOpt((int)$3, GMSH_GET, 0) / $8 ;
+	    if($8) d = pNumOpt((int)$3, GMSH_GET, 0) / $8;
 	    else yymsg(GERROR, "Division by zero in '%s[%d].%s /= %g'", 
 		       $1, (int)$3, $6, $8);
 	    break;
 	  }
-	  pNumOpt((int)$3, GMSH_SET|GMSH_GUI, d) ;
+	  pNumOpt((int)$3, GMSH_SET|GMSH_GUI, d);
 	}
       }
     }
-
   | tSTRING '.' tSTRING NumericIncrement tEND 
     {
+      double (*pNumOpt)(int num, int action, double value);
+      StringXNumber *pNumCat;
       if(!(pNumCat = Get_NumberOptionCategory($1)))
 	yymsg(GERROR, "Unknown numeric option class '%s'", $1);
       else{
 	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption($3, pNumCat)))
 	  yymsg(GERROR, "Unknown numeric option '%s.%s'", $1, $3);
 	else
-	  pNumOpt(0, GMSH_SET|GMSH_GUI, pNumOpt(0, GMSH_GET, 0)+$4) ;
+	  pNumOpt(0, GMSH_SET|GMSH_GUI, pNumOpt(0, GMSH_GET, 0)+$4);
       }
     }
-
   | tSTRING '[' FExpr ']' '.' tSTRING NumericIncrement tEND 
     {
+      double (*pNumOpt)(int num, int action, double value);
+      StringXNumber *pNumCat;
       if(!(pNumCat = Get_NumberOptionCategory($1)))
 	yymsg(GERROR, "Unknown numeric option class '%s'", $1);
       else{
 	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption($6, pNumCat)))
 	  yymsg(GERROR, "Unknown numeric option '%s[%d].%s'", $1, (int)$3, $6);
 	else
-	  pNumOpt((int)$3, GMSH_SET|GMSH_GUI, pNumOpt((int)$3, GMSH_GET, 0)+$7) ;
+	  pNumOpt((int)$3, GMSH_SET|GMSH_GUI, pNumOpt((int)$3, GMSH_GET, 0)+$7);
       }
     }
 
@@ -1437,25 +1459,28 @@ Affectation :
 
   | tSTRING '.' tColor '.' tSTRING tAFFECT ColorExpr tEND 
     {
+      unsigned int (*pColOpt)(int num, int action, unsigned int value);
+      StringXColor *pColCat;
       if(!(pColCat = Get_ColorOptionCategory($1)))
 	yymsg(GERROR, "Unknown color option class '%s'", $1);
       else{
 	if(!(pColOpt =  (unsigned int (*) (int, int, unsigned int))Get_ColorOption($5, pColCat)))
 	  yymsg(GERROR, "Unknown color option '%s.Color.%s'", $1, $5);
 	else
-	  pColOpt(0, GMSH_SET|GMSH_GUI, $7) ;
+	  pColOpt(0, GMSH_SET|GMSH_GUI, $7);
       }
     }
-
   | tSTRING '[' FExpr ']' '.' tColor '.' tSTRING tAFFECT ColorExpr tEND 
     {
+      unsigned int (*pColOpt)(int num, int action, unsigned int value);
+      StringXColor *pColCat;
       if(!(pColCat = Get_ColorOptionCategory($1)))
 	yymsg(GERROR, "Unknown color option class '%s'", $1);
       else{
 	if(!(pColOpt =  (unsigned int (*) (int, int, unsigned int))Get_ColorOption($8, pColCat)))
 	  yymsg(GERROR, "Unknown color option '%s[%d].Color.%s'", $1, (int)$3, $8);
 	else
-	  pColOpt((int)$3, GMSH_SET|GMSH_GUI, $10) ;
+	  pColOpt((int)$3, GMSH_SET|GMSH_GUI, $10);
       }
     }
 
@@ -1472,7 +1497,7 @@ Affectation :
 	  yymsg(GERROR, "Too many (%d>%d) colors in View[%d].ColorTable", 
 		ct->size, COLORTABLE_NBMAX_COLOR, 0);
 	else
-	  for(i = 0; i < ct->size; i++) List_Read($5, i, &ct->table[i]);
+	  for(int i = 0; i < ct->size; i++) List_Read($5, i, &ct->table[i]);
 	if(ct->size == 1){
 	  ct->size = 2;
 	  ct->table[1] = ct->table[0];
@@ -1480,7 +1505,6 @@ Affectation :
       }
       List_Delete($5);
     }
-
   | tSTRING '[' FExpr ']' '.' tColorTable tAFFECT ListOfColor tEND 
     {
       GmshColorTable *ct = Get_ColorTable((int)$3);
@@ -1492,7 +1516,7 @@ Affectation :
 	  yymsg(GERROR, "Too many (%d>%d) colors in View[%d].ColorTable", 
 		   ct->size, COLORTABLE_NBMAX_COLOR, (int)$3);
 	else
-	  for(i = 0; i < ct->size; i++) List_Read($8, i, &ct->table[i]);
+	  for(int i = 0; i < ct->size; i++) List_Read($8, i, &ct->table[i]);
 	if(ct->size == 1){
 	  ct->size = 2;
 	  ct->table[1] = ct->table[0];
@@ -1512,7 +1536,6 @@ Affectation :
 	yymsg(WARNING, "Unknown option '%s' or plugin '%s'", $6, $3);
       }
     }
-
   | tPlugin '(' tSTRING ')' '.' tSTRING tAFFECT StringExpr tEND 
     {
       try {
@@ -1533,39 +1556,59 @@ Shape :
 
     tPoint '(' FExpr ')' tAFFECT VExpr tEND
     {
-      Cdbpts101((int)$3, $6[0], $6[1], $6[2], $6[3], $6[4]);
+      int num = (int)$3;
+      if(FindPoint(num, THEM)){
+	yymsg(GERROR, "Point %d already exists", num);
+      }
+      else{
+	Vertex *v = Create_Vertex(num, CTX.geom.scaling_factor * $6[0],
+				  CTX.geom.scaling_factor * $6[1],
+				  CTX.geom.scaling_factor * $6[2],
+				  CTX.geom.scaling_factor * $6[3], 1.0);
+	Tree_Add(THEM->Points, &v);
+      }
       $$.Type = MSH_POINT;
-      $$.Num  = (int)$3;
+      $$.Num = num;
     }
-
   | tPhysical tPoint '(' FExpr ')' tAFFECT ListOfDouble tEND
     {
-      Cdbz101((int)$4, MSH_PHYSICAL_POINT, 0, 0, 0, 0, 0, NULL, $7, NULL);
+      int num = (int)$4;
+      if(FindPhysicalGroup(num, MSH_PHYSICAL_POINT, THEM)){
+	yymsg(GERROR, "Physical point %d already exists", num);
+      }
+      else{
+	List_T *temp = ListOfDouble2ListOfInt($7);
+	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_POINT, temp);
+	List_Delete(temp);
+	List_Add(THEM->PhysicalGroups, &p);
+      }
+      List_Delete($7);
       $$.Type = MSH_PHYSICAL_POINT;
-      $$.Num  = (int)$4;
+      $$.Num = num;
     }
   | tAttractor tPoint ListOfDouble tAFFECT '{' FExpr ',' FExpr ',' FExpr '}'  tEND
     {
-      Vertex *v;
-      Attractor *a;
-      double p;
-      int ip;
       for(int i = 0; i < List_Nbr($3); i++){
+	double p;
       	List_Read($3, i, &p);
-        ip = (int)p;
-        v = FindPoint(ip, THEM);
+        Vertex *v = FindPoint((int)p, THEM);
         if(!v)
-	  yymsg(WARNING, "Unknown Point %d", ip);
+	  yymsg(WARNING, "Unknown Point %d", (int)p);
 	else{
-	  a = Create_Attractor(List_Nbr(THEM->Metric->Attractors)+1,
-			       $6, $8, $10, v, NULL, NULL);
+	  Attractor *a = Create_Attractor(List_Nbr(THEM->Metric->Attractors)+1,
+					  $6, $8, $10, v, NULL, NULL);
 	  List_Add(THEM->Metric->Attractors, &a);
         }
       }
+      List_Delete($3);
+      // dummy values
+      $$.Type = 0;
+      $$.Num = 0;
     }
   | tCharacteristic tLength ListOfDouble tAFFECT FExpr tEND
     {
-      for(i = 0; i < List_Nbr($3); i++){
+      for(int i = 0; i < List_Nbr($3); i++){
+	double d;
 	List_Read($3, i, &d);
 	Vertex *v = FindPoint((int)d, THEM);
 	if(!v)
@@ -1573,234 +1616,502 @@ Shape :
 	else
 	  v->lc = $5;
       }
+      List_Delete($3);
+      // dummy values
+      $$.Type = 0;
+      $$.Num = 0;
     }  
 
   // Lines
 
   | tLine '(' FExpr ')' tAFFECT ListOfDouble tEND
     {
-      Cdbseg101((int)$3, MSH_SEGM_LINE, 1, $6, NULL, -1, -1, 0., 1., NULL, NULL, NULL);
+      int num = (int)$3;
+      if(FindCurve(num, THEM)){
+	yymsg(GERROR, "Curve %d already exists", num);
+      }
+      else{
+	List_T *temp = ListOfDouble2ListOfInt($6);
+	Curve *c = Create_Curve(num, MSH_SEGM_LINE, 1, temp, NULL,
+				-1, -1, 0., 1.);
+	Tree_Add(THEM->Curves, &c);
+	CreateReversedCurve(THEM, c);
+	List_Delete(temp);
+      }
+      List_Delete($6);
       $$.Type = MSH_SEGM_LINE;
-      $$.Num  = (int)$3;
+      $$.Num = num;
     }
   | tSpline '(' FExpr ')' tAFFECT ListOfDouble tEND
     {
-      Cdbseg101((int)$3, MSH_SEGM_SPLN, 3, $6, NULL, -1, -1, 0., 1., NULL, NULL, NULL);
+      int num = (int)$3;
+      if(FindCurve(num, THEM)){
+	yymsg(GERROR, "Curve %d already exists", num);
+      }
+      else{
+	List_T *temp = ListOfDouble2ListOfInt($6);
+	Curve *c = Create_Curve(num, MSH_SEGM_SPLN, 3, temp, NULL,
+				-1, -1, 0., 1.);
+	Tree_Add(THEM->Curves, &c);
+	CreateReversedCurve(THEM, c);
+	List_Delete(temp);
+      }
+      List_Delete($6);
       $$.Type = MSH_SEGM_SPLN;
-      $$.Num  = (int)$3;
+      $$.Num = num;
     }
-  | tAttractor tLine ListOfDouble tAFFECT '{' FExpr ',' FExpr ',' FExpr '}'  tEND
+  | tCircle '(' FExpr ')'  tAFFECT ListOfDouble tEND
     {
-      Curve *c;
-      Attractor *a;
-      double p;
-      int ip;
-      for(int i = 0; i < List_Nbr($3); i++){
-      	List_Read($3, i, &p);
-        ip = (int)p;
-        c = FindCurve(ip, THEM);
-        if(!c)
-	  yymsg(WARNING, "Unknown Curve %d", ip);
-	else{
-	  a = Create_Attractor(List_Nbr(THEM->Metric->Attractors)+1,
-			       $6, $8, $10, NULL, c, NULL);
-	  List_Add(THEM->Metric->Attractors, &a);
-        }
+      int num = (int)$3;
+      if(FindCurve(num, THEM)){
+	yymsg(GERROR, "Curve %d already exists", num);
+      }
+      else{
+	List_T *temp = ListOfDouble2ListOfInt($6);
+	Curve *c = Create_Curve(num, MSH_SEGM_CIRC, 2, temp, NULL,
+				-1, -1, 0., 1.);
+	Tree_Add(THEM->Curves, &c);
+	CreateReversedCurve(THEM, c);
+	List_Delete(temp);
       }
+      List_Delete($6);
+      $$.Type = MSH_SEGM_CIRC;
+      $$.Num = num;
     }
-  | tCircle '(' FExpr ')'  tAFFECT ListOfDouble tEND
+  | tCircle '(' FExpr ')'  tAFFECT ListOfDouble tPlane VExpr tEND
     {
-      Cdbseg101((int)$3, MSH_SEGM_CIRC, 2, $6, NULL, -1, -1, 0., 1., NULL, NULL, NULL);
-      $$.Type = MSH_SEGM_CIRC ;
-      $$.Num  = (int)$3;
+      int num = (int)$3;
+      if(FindCurve(num, THEM)){
+	yymsg(GERROR, "Curve %d already exists", num);
+      }
+      else{
+	List_T *temp = ListOfDouble2ListOfInt($6);
+	Curve *c = Create_Curve(num, MSH_SEGM_CIRC, 2, temp, NULL,
+				-1, -1, 0., 1.);
+	c->Circle.n[0] = $8[0];
+	c->Circle.n[1] = $8[1];
+	c->Circle.n[2] = $8[2];
+	End_Curve(c);
+	Tree_Add(THEM->Curves, &c);
+	Curve *rc = CreateReversedCurve(THEM, c);
+	rc->Circle.n[0] = $8[0];
+	rc->Circle.n[1] = $8[1];
+	rc->Circle.n[2] = $8[2];
+	End_Curve(rc);
+	List_Delete(temp);
+      }
+      List_Delete($6);
+      $$.Type = MSH_SEGM_CIRC;
+      $$.Num = num;
     }
   | tEllipse '(' FExpr ')'  tAFFECT ListOfDouble tEND
     {
-      Cdbseg101((int)$3, MSH_SEGM_ELLI, 2, $6, NULL, -1, -1, 0., 1., NULL, NULL, NULL);
-      $$.Type = MSH_SEGM_ELLI ;
-      $$.Num  = (int)$3;
-    }
-  | tCircle '(' FExpr ')'  tAFFECT ListOfDouble tPlane VExpr tEND
-    {
-      List_T *temp;
-      int i, j;
-      double d;
-      temp = List_Create(List_Nbr($6), 1, sizeof(int));
-      for(i = 0; i < List_Nbr($6); i++){
-      	List_Read($6, i, &d);
-        j = (int)d;
-        List_Add(temp, &j);
+      int num = (int)$3;
+      if(FindCurve(num, THEM)){
+	yymsg(GERROR, "Curve %d already exists", num);
+      }
+      else{
+	List_T *temp = ListOfDouble2ListOfInt($6);
+	Curve *c = Create_Curve(num, MSH_SEGM_ELLI, 2, temp, NULL,
+				-1, -1, 0., 1.);
+	Tree_Add(THEM->Curves, &c);
+	CreateReversedCurve(THEM, c);
+	List_Delete(temp);
       }
-      AddCircleInDataBase ((int) $3, MSH_SEGM_CIRC, temp, $8);
-      List_Delete(temp);
-      $$.Type = MSH_SEGM_CIRC ;
-      $$.Num  = (int)$3;
+      List_Delete($6);
+      $$.Type = MSH_SEGM_ELLI;
+      $$.Num = num;
     }
   | tParametric '(' FExpr ')' tAFFECT 
       '{' FExpr ',' FExpr ',' tBIGSTR ',' tBIGSTR ',' tBIGSTR '}' tEND
     {
-      Cdbseg101((int)$3, MSH_SEGM_PARAMETRIC, 2, NULL, NULL, -1, -1, $7, $9, $11, $13, $15);
-      $$.Type = MSH_SEGM_PARAMETRIC ;
-      $$.Num  = (int)$3;
-    }
-  | tPhysical tLine '(' FExpr ')' tAFFECT ListOfDouble tEND
-    {
-      Cdbz101((int)$4, MSH_PHYSICAL_LINE, 0, 0, 0, 0, 0, NULL, $7, NULL);
-      $$.Type = MSH_PHYSICAL_LINE;
-      $$.Num  = (int)$4;
-    }
-  | tLine tLoop '(' FExpr ')' tAFFECT ListOfDouble tEND
-    {
-      $$.Type = MSH_SEGM_LOOP;
-      Cdbz101((int)$4, $$.Type, 0, 0, 0, 0, 0, NULL, $7, NULL);
-      $$.Num = (int)$4;
+      int num = (int)$3;
+      if(FindCurve(num, THEM)){
+	yymsg(GERROR, "Curve %d already exists", num);
+      }
+      else{
+	Curve *c = Create_Curve(num, MSH_SEGM_PARAMETRIC, 2, NULL, NULL,
+				-1, -1, $7, $9);
+	strcpy(c->functu, $11);
+	strcpy(c->functv, $13);
+	strcpy(c->functw, $15);
+	Tree_Add(THEM->Curves, &c);
+	CreateReversedCurve(THEM, c);
+      }
+      $$.Type = MSH_SEGM_PARAMETRIC;
+      $$.Num = num;
     }
   | tBSpline '(' FExpr ')' tAFFECT ListOfDouble tEND
     {
-      if(List_Nbr($6) > 3){
-	Cdbseg101((int)$3, MSH_SEGM_BSPLN, 2, $6, NULL, -1, -1, 0., 1., NULL, NULL, NULL);
-	$$.Type = MSH_SEGM_BSPLN;
-	$$.Num  = (int)$3;
-      }
-      else
-	yymsg(GERROR, "Too few control points for BSpline %d (%d < 4)", (int)$3, 
+      int num = (int)$3;
+      if(List_Nbr($6) < 4){
+	yymsg(GERROR, "Too few control points for BSpline %d (%d < 4)", num,
 	      List_Nbr($6));
+      }
+      else{
+	if(FindCurve(num, THEM)){
+	  yymsg(GERROR, "Curve %d already exists", num);
+	}
+	else{
+	  List_T *temp = ListOfDouble2ListOfInt($6);
+	  Curve *c = Create_Curve(num, MSH_SEGM_BSPLN, 2, temp, NULL,
+				  -1, -1, 0., 1.);
+	  Tree_Add(THEM->Curves, &c);
+	  CreateReversedCurve(THEM, c);
+	  List_Delete(temp);
+	}
+      }
+      List_Delete($6);
+      $$.Type = MSH_SEGM_BSPLN;
+      $$.Num = num;
     }
   | tBezier '(' FExpr ')' tAFFECT ListOfDouble tEND
     {
-      if(List_Nbr($6) > 3){
-	Cdbseg101((int)$3, MSH_SEGM_BEZIER, 2, $6, NULL, -1, -1, 0., 1., NULL, NULL, NULL);
-	$$.Type = MSH_SEGM_BSPLN;
-	$$.Num  = (int)$3;
-      }
-      else
-	yymsg(GERROR, "Too few control points for Bezier %d (%d < 4)", (int)$3, 
+      int num = (int)$3;
+      if(List_Nbr($6) < 4){
+	yymsg(GERROR, "Too few control points for Bezier curve %d (%d < 4)", num,
 	      List_Nbr($6));
+      }
+      else{
+	if(FindCurve(num, THEM)){
+	  yymsg(GERROR, "Curve %d already exists", num);
+	}
+	else{
+	  List_T *temp = ListOfDouble2ListOfInt($6);
+	  Curve *c = Create_Curve(num, MSH_SEGM_BEZIER, 2, temp, NULL,
+				  -1, -1, 0., 1.);
+	  Tree_Add(THEM->Curves, &c);
+	  CreateReversedCurve(THEM, c);
+	  List_Delete(temp);
+	}
+      }
+      List_Delete($6);
+      $$.Type = MSH_SEGM_BEZIER;
+      $$.Num = num;
     }
   | tNurbs  '(' FExpr ')' tAFFECT ListOfDouble tKnots ListOfDouble tOrder FExpr tEND
     {
-      List_T *Temp;
-      int i;
-      double d;
+      int num = (int)$3;
       if(List_Nbr($6) + (int)$10 + 1 != List_Nbr($8)){
 	yymsg(GERROR, "Wrong definition of Nurbs Curve %d: "
-	      "got %d Knots, need N + D + 1 = %d + %d + 1 = %d",
-	      (int)$3, 
-	      List_Nbr($8), List_Nbr($6), (int)$10, List_Nbr($6) + (int)$10 + 1);
+	      "got %d knots, need N + D + 1 = %d + %d + 1 = %d",
+	      (int)$3, List_Nbr($8), List_Nbr($6), (int)$10, List_Nbr($6) + (int)$10 + 1);
       }
       else{
-	Temp = List_Create(List_Nbr($6), 1, sizeof(int));
-	for(i = 0; i < List_Nbr($6); i++) {
-	  List_Read($6, i, &d);
-	  j = (int)d;
-	  List_Add(Temp, &j);
+	if(FindCurve(num, THEM)){
+	  yymsg(GERROR, "Curve %d already exists", num);
+	}
+	else{
+	  List_T *temp = ListOfDouble2ListOfInt($6);
+	  Curve *c = Create_Curve(num, MSH_SEGM_NURBS, (int)$10, temp, $8,
+				  -1, -1, 0., 1.);
+	  Tree_Add(THEM->Curves, &c);
+	  CreateReversedCurve(THEM, c);
+	  List_Delete(temp);
 	}
-	AddCurveInDataBase ((int)$3, MSH_SEGM_NURBS, (int)$10, Temp, $8, -1, -1, 0., 1.);
-	List_Delete(Temp);
       }
+      List_Delete($6);
+      List_Delete($8);
+      $$.Type = MSH_SEGM_NURBS;
+      $$.Num = num;
+    }
+  | tLine tLoop '(' FExpr ')' tAFFECT ListOfDouble tEND
+    {
+      int num = (int)$4;
+      if(FindEdgeLoop(num, THEM)){
+	yymsg(GERROR, "Line loop %d already exists", num);
+      }
+      else{
+	List_T *temp = ListOfDouble2ListOfInt($7);
+	sortEdgesInLoop(num, temp);
+	EdgeLoop *l = Create_EdgeLoop(num, temp);
+	Tree_Add(THEM->EdgeLoops, &l);
+	List_Delete(temp);
+      }
+      List_Delete($7);
+      $$.Type = MSH_SEGM_LOOP;
+      $$.Num = num;
+    }
+  | tAttractor tLine ListOfDouble tAFFECT '{' FExpr ',' FExpr ',' FExpr '}'  tEND
+    {
+      for(int i = 0; i < List_Nbr($3); i++){
+	double p;
+      	List_Read($3, i, &p);
+	Curve *c = FindCurve((int)p, THEM);
+        if(!c)
+	  yymsg(WARNING, "Unknown Curve %d", (int)p);
+	else{
+	  Attractor *a = Create_Attractor(List_Nbr(THEM->Metric->Attractors)+1,
+					  $6, $8, $10, NULL, c, NULL);
+	  List_Add(THEM->Metric->Attractors, &a);
+        }
+      }
+      // dummy values
+      $$.Type = 0;
+      $$.Num = 0;
+    }
+  | tPhysical tLine '(' FExpr ')' tAFFECT ListOfDouble tEND
+    {
+      int num = (int)$4;
+      if(FindPhysicalGroup(num, MSH_PHYSICAL_LINE, THEM)){
+	yymsg(GERROR, "Physical line %d already exists", num);
+      }
+      else{
+	List_T *temp = ListOfDouble2ListOfInt($7);
+	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_LINE, temp);
+	List_Delete(temp);
+	List_Add(THEM->PhysicalGroups, &p);
+      }
+      List_Delete($7);
+      $$.Type = MSH_PHYSICAL_LINE;
+      $$.Num = num;
     }
 
   // Surfaces
 
   | tPlane tSurface '(' FExpr ')' tAFFECT ListOfDouble tEND
     {
-      Cdbz101((int)$4, MSH_SURF_PLAN, 0, 0, 0, 0, 0, NULL, $7, NULL);
+      int num = (int)$4;
+      if(FindSurface(num, THEM)){
+	yymsg(GERROR, "Surface %d already exists", num);
+      }
+      else{
+	Surface *s = Create_Surface(num, MSH_SURF_PLAN);
+	List_T *temp = ListOfDouble2ListOfInt($7);
+	setSurfaceGeneratrices(s, temp);
+	List_Delete(temp);
+	s->Support = s;
+	End_Surface(s);
+	Tree_Add(THEM->Surfaces, &s);
+      }
+      List_Delete($7);
       $$.Type = MSH_SURF_PLAN;
-      $$.Num  = (int)$4;
+      $$.Num = num;
+    }
+  | tRuled tSurface '(' FExpr ')' tAFFECT ListOfDouble tEND
+    {
+      int num = (int)$4, type = 0;
+      if(FindSurface(num, THEM)){
+	yymsg(GERROR, "Surface %d already exists", num);
+      }
+      else{
+	double d;
+	List_Read($7, 0, &d);
+	EdgeLoop *el = FindEdgeLoop((int)d, THEM);
+	if(!el){
+	  yymsg(GERROR, "Unknown Line Loop %d", (int)d);
+	}
+	else{
+	  int j = List_Nbr(el->Curves);
+	  if(j == 4){
+	    type = MSH_SURF_REGL;
+	  }
+	  else if(j == 3){
+	    type = MSH_SURF_TRIC;
+	  }
+	  else{
+	    yymsg(GERROR, "Wrong definition of Ruled Surface %d: "
+		  "%d borders instead of 3 or 4", num, j);
+	    type = MSH_SURF_PLAN;
+	  }
+	  Surface *s = Create_Surface(num, type);
+	  List_T *temp = ListOfDouble2ListOfInt($7);
+	  setSurfaceGeneratrices(s, temp);
+	  List_Delete(temp);
+	  s->Support = s;
+	  End_Surface(s);
+	  Tree_Add(THEM->Surfaces, &s);
+	}
+      }
+      List_Delete($7);
+      $$.Type = type;
+      $$.Num = num;
     }
   | tTrimmed tSurface '(' FExpr ')' tAFFECT '{' FExpr ',' ListOfDouble '}' tEND
     {
-      Surface *s,*support;
-      support = FindSurface((int)$8, THEM);
-      if(!support)
-	yymsg(GERROR, "Unknown Surface %d", (int)$8);
+      int num = (int)$4;
+      Surface *support = FindSurface((int)$8, THEM);
+      if(!support){
+	yymsg(GERROR, "Unknown support surface %d", (int)$8);
+      }
       else{
-	Cdbz101((int)$4, MSH_SURF_PLAN, 0, 0, 0, 0, 0, NULL, $10, NULL);
-	s = FindSurface((int)$4, THEM);
-	if(!s)
-	  yymsg(GERROR, "Unknown Surface %d", (int)$4);
+	if(FindSurface(num, THEM)){
+	  yymsg(GERROR, "Surface %d already exists", num);
+	}
 	else{
-	  s->Typ =  MSH_SURF_TRIMMED;
+	  Surface *s = Create_Surface(num, MSH_SURF_TRIMMED);
+	  List_T *temp = ListOfDouble2ListOfInt($10);
+	  setSurfaceGeneratrices(s, temp);
+	  List_Delete(temp);
 	  s->Support = support;
-	  $$.Type = MSH_SURF_TRIMMED;
-	  $$.Num  = (int)$4;
+	  End_Surface(s);
+	  Tree_Add(THEM->Surfaces, &s);
 	}
       }
+      List_Delete($10);
+      $$.Type = MSH_SURF_TRIMMED;
+      $$.Num = num;
     }
-  | tRuled tSurface '(' FExpr ')' tAFFECT ListOfDouble tEND
+  | tTriangulation tSurface '{' FExpr '}' tAFFECT '(' FExpr ',' FExpr ')' 
+       ListOfDouble ListOfDouble tEND
     {
-      List_Read($7, 0, &d);
-      i = (int)d;
-      EdgeLoop *el = FindEdgeLoop(i, THEM);
-      if(!el)
-	yymsg(GERROR, "Unknown Line Loop %d", i);
-      else{
-	j = List_Nbr(el->Curves);
-	if(j==4)
-	  $$.Type = MSH_SURF_REGL;
-	else if(j==3)
-	  $$.Type = MSH_SURF_TRIC;
-	else
-	  yymsg(GERROR, "Wrong definition of Ruled Surface %d: "
-		   "%d borders instead of 3 or 4", 
-		   (int)$4, j);
-	Cdbz101((int)$4, $$.Type, 0, 0, 0, 0, 0, NULL, $7, NULL);
-	$$.Num = (int)$4;
+      int num = (int)$4, type = 0;
+      Surface *s = FindSurface(num, THEM);
+      if(!s) {
+	yymsg(GERROR, "Unknown surface %d", num);
       }
+      else{
+	// FIXME: parameters not used; undocumented
+	POLY_rep *rep = new POLY_rep($12, $13);
+	s->thePolyRep = rep;
+	type = s->Typ;
+      }
+      //FIXME: do you copy the data?
+      //List_Delete($12);
+      //List_Delete($13);
+      $$.Type = type;
+      $$.Num = (int)$4;
+    }
+  // for backward compatibility only: when we don't create a new entity,
+  // we should use braces (and not parentheses)
+  | tTriangulation tSurface '(' FExpr ')' tAFFECT '(' FExpr ',' FExpr ')' 
+       ListOfDouble ListOfDouble tEND
+    {
+      int num = (int)$4, type = 0;
+      Surface *s = FindSurface(num, THEM);
+      if(!s) {
+	yymsg(GERROR, "Unknown surface %d", num);
+      }
+      else{
+	POLY_rep *rep = new POLY_rep($12, $13);
+	s->thePolyRep = rep;
+	type = s->Typ;
+      }
+      $$.Type = type;
+      $$.Num = (int)$4;
     }
-
-  | tTriangulation tSurface '(' FExpr ')' tAFFECT '(' FExpr ',' FExpr ')' ListOfDouble ListOfDouble tEND
-  {
-    AddTriangulationToSurface ((int) $4, (int) $8, (int) $10, $12, $13);
-    $$.Num = (int)$4;
-  }
-
   | tNurbs tSurface tWith tBounds '(' FExpr ')' tAFFECT 
-    ListOfListOfDouble tKnots  '{' ListOfDouble ',' ListOfDouble '}'
-    tOrder '{' FExpr ',' FExpr '}' tEND
+       ListOfListOfDouble tKnots  '{' ListOfDouble ',' ListOfDouble '}'
+       tOrder '{' FExpr ',' FExpr '}' tEND
     {
-      CreateNurbsSurface ((int) $6 , (int)$18 , (int)$20  , $9, $12, $14);
+      int num = (int)$6;
+      if(FindSurface(num, THEM)){
+	yymsg(GERROR, "Surface %d already exists", num);
+      }
+      else{
+	CreateNurbsSurface(num, (int)$18, (int)$20, $9, $12, $14);
+      }
+      for(int i = 0; i < List_Nbr($9); i++)
+	List_Delete((List_T*)List_Pointer($9, i));
+      List_Delete($9);
+      List_Delete($12);
+      List_Delete($14);
       $$.Type = MSH_SURF_NURBS;
-      $$.Num = (int)$6;
+      $$.Num = num;
     }
   | tNurbs  tSurface '(' FExpr ')' tAFFECT 
-    ListOfListOfDouble tKnots  '{' ListOfDouble ',' ListOfDouble '}'
-    tOrder '{' FExpr ',' FExpr '}' tEND
-    {
-      CreateNurbsSurfaceSupport ((int)$4, (int) $16 , (int) $18 , $7, $10, $12);
-    }
-  | tPhysical tSurface '(' FExpr ')' tAFFECT ListOfDouble tEND
+       ListOfListOfDouble tKnots  '{' ListOfDouble ',' ListOfDouble '}'
+       tOrder '{' FExpr ',' FExpr '}' tEND
     {
-      Cdbz101((int)$4, MSH_PHYSICAL_SURFACE, 0, 0, 0, 0, 0, NULL, $7, NULL);
-      $$.Type = MSH_PHYSICAL_SURFACE;
-      $$.Num  = (int)$4;
+      int num = (int)$4;
+      if(FindSurface(num, THEM)){
+	yymsg(GERROR, "Surface %d already exists", num);
+      }
+      else{
+	CreateNurbsSurfaceSupport(num, (int)$16, (int)$18, $7, $10, $12);
+      }
+      for(int i = 0; i < List_Nbr($7); i++)
+	List_Delete((List_T*)List_Pointer($7, i));
+      List_Delete($7);
+      List_Delete($10);
+      List_Delete($12);
+      $$.Type = MSH_SURF_NURBS;
+      $$.Num = num;
     }
   | tSurface tLoop '(' FExpr ')' tAFFECT ListOfDouble tEND
     {
-      Cdbz101((int)$4, MSH_SURF_LOOP, 0, 0, 0, 0, 0, NULL, $7, NULL);
+      int num = (int)$4;
+      if(FindSurfaceLoop(num, THEM)){
+	yymsg(GERROR, "Surface loop %d already exists", num);
+      }
+      else{
+	List_T *temp = ListOfDouble2ListOfInt($7);
+	SurfaceLoop *l = Create_SurfaceLoop(num, temp);
+	Tree_Add(THEM->SurfaceLoops, &l);
+	List_Delete(temp);
+      }
+      List_Delete($7);
       $$.Type = MSH_SURF_LOOP;
-      $$.Num  = (int)$4;
+      $$.Num = num;
+    }
+  | tPhysical tSurface '(' FExpr ')' tAFFECT ListOfDouble tEND
+    {
+      int num = (int)$4;
+      if(FindPhysicalGroup(num, MSH_PHYSICAL_SURFACE, THEM)){
+	yymsg(GERROR, "Physical surface %d already exists", num);
+      }
+      else{
+	List_T *temp = ListOfDouble2ListOfInt($7);
+	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_SURFACE, temp);
+	List_Delete(temp);
+	List_Add(THEM->PhysicalGroups, &p);
+      }
+      List_Delete($7);
+      $$.Type = MSH_PHYSICAL_SURFACE;
+      $$.Num = num;
     }
 
   // Volumes
 
   | tComplex tVolume '(' FExpr ')' tAFFECT ListOfDouble tEND
     {
-      Cdbz101((int)$4, MSH_VOLUME, 0, 0, 0, 0, 0, NULL, $7, NULL);
+      int num = (int)$4;
+      if(FindVolume(num, THEM)){
+	yymsg(GERROR, "Volume %d already exists", num);
+      }
+      else{
+	Volume *v = Create_Volume(num, MSH_VOLUME);
+	List_T *temp = ListOfDouble2ListOfInt($7);
+	setVolumeSurfaces(v, temp);
+	List_Delete(temp);
+	Tree_Add(THEM->Volumes, &v);
+      }
+      List_Delete($7);
       $$.Type = MSH_VOLUME;
-      $$.Num  = (int)$4;      
+      $$.Num = num;
     }
   | tVolume '(' FExpr ')' tAFFECT ListOfDouble tEND
     {
-      Cdbz101((int)$3, MSH_VOLUME, 0, 0, 0, 0, 0, NULL, $6, NULL);
+      int num = (int)$3;
+      if(FindVolume(num, THEM)){
+	yymsg(GERROR, "Volume %d already exists", num);
+      }
+      else{
+	Volume *v = Create_Volume(num, MSH_VOLUME);
+	List_T *temp = ListOfDouble2ListOfInt($6);
+	setVolumeSurfaces(v, temp);
+	List_Delete(temp);
+	Tree_Add(THEM->Volumes, &v);
+      }
+      List_Delete($6);
       $$.Type = MSH_VOLUME;
-      $$.Num  = (int)$3;
+      $$.Num = num;
     }
   | tPhysical tVolume '(' FExpr ')' tAFFECT ListOfDouble tEND
     {
-      Cdbz101((int)$4, MSH_PHYSICAL_VOLUME, 0, 0, 0, 0, 0, NULL, $7, NULL);
+      int num = (int)$4;
+      if(FindPhysicalGroup(num, MSH_PHYSICAL_VOLUME, THEM)){
+	yymsg(GERROR, "Physical volume %d already exists", num);
+      }
+      else{
+	List_T *temp = ListOfDouble2ListOfInt($7);
+	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_VOLUME, temp);
+	List_Delete(temp);
+	List_Add(THEM->PhysicalGroups, &p);
+      }
+      List_Delete($7);
       $$.Type = MSH_PHYSICAL_VOLUME;
-      $$.Num  = (int)$4;
+      $$.Num = num;
     }
 ;
 
@@ -1809,7 +2120,7 @@ Shape :
 Transform :
     tTranslate VExpr '{' MultipleShape '}'
     {
-      TranslateShapes ($2[0], $2[1], $2[2], $4, 1);
+      TranslateShapes($2[0], $2[1], $2[2], $4, 1);
       $$ = $4;
     }
   | tRotate '{' VExpr ',' VExpr ',' FExpr '}' '{' MultipleShape '}'
@@ -1836,7 +2147,7 @@ MultipleShape :
 ;
 
 ListOfShapes : 
-    /* none */
+    // nothing
     {
       $$ = List_Create(3, 3, sizeof(Shape));
     }   
@@ -1846,8 +2157,10 @@ ListOfShapes :
     }
   | ListOfShapes tPoint '{' RecursiveListOfDouble '}' tEND
     {
-      for(i = 0; i < List_Nbr($4); i++){
+      for(int i = 0; i < List_Nbr($4); i++){
+	double d;
 	List_Read($4, i, &d);
+	Shape TheShape;
 	TheShape.Num = (int)d;
 	Vertex *v = FindPoint(TheShape.Num, THEM);
 	if(!v)
@@ -1860,8 +2173,10 @@ ListOfShapes :
     }
   | ListOfShapes tLine '{' RecursiveListOfDouble '}' tEND
     {
-      for(i = 0; i < List_Nbr($4); i++){
+      for(int i = 0; i < List_Nbr($4); i++){
+	double d;
 	List_Read($4, i, &d);
+	Shape TheShape;
 	TheShape.Num = (int)d;
 	Curve *c = FindCurve(TheShape.Num, THEM);
 	if(!c)
@@ -1874,8 +2189,10 @@ ListOfShapes :
     }
   | ListOfShapes tSurface '{' RecursiveListOfDouble '}' tEND
     {
-      for(i = 0; i < List_Nbr($4); i++){
+      for(int i = 0; i < List_Nbr($4); i++){
+	double d;
 	List_Read($4, i, &d);
+	Shape TheShape;
 	TheShape.Num = (int)d;
 	Surface *s = FindSurface(TheShape.Num, THEM);
 	if(!s)
@@ -1888,8 +2205,10 @@ ListOfShapes :
     }
   | ListOfShapes tVolume '{' RecursiveListOfDouble '}' tEND
     {
-      for(i = 0; i < List_Nbr($4); i++){
+      for(int i = 0; i < List_Nbr($4); i++){
+	double d;
 	List_Read($4, i, &d);
+	Shape TheShape;
 	TheShape.Num = (int)d;
 	Volume *v = FindVolume(TheShape.Num, THEM);
 	if(!v)
@@ -1908,12 +2227,15 @@ Duplicata :
     tDuplicata '{' ListOfShapes '}'
     {
       $$ = List_Create(3, 3, sizeof(Shape));
-      for(i = 0; i < List_Nbr($3); i++){
-	List_Read ($3, i, &TheShape);
+      for(int i = 0; i < List_Nbr($3); i++){
+	Shape TheShape;
+	List_Read($3, i, &TheShape);
+	int j;
 	CopyShape(TheShape.Type, TheShape.Num, &j);
 	TheShape.Num = j;
 	List_Add($$, &TheShape);
       }
+      List_Delete($3);
     }
   | tDuplicata tSTRING '[' FExpr ']' tEND
     {
@@ -1928,10 +2250,12 @@ Duplicata :
 Delete :
     tDelete '{' ListOfShapes '}'
     {
-      for(i = 0; i < List_Nbr($3); i++){
-	List_Read ($3, i, &TheShape);
+      for(int i = 0; i < List_Nbr($3); i++){
+	Shape TheShape;
+	List_Read($3, i, &TheShape);
 	DeleteShape(TheShape.Type, TheShape.Num);
       }
+      List_Delete($3);
     }
     | tDelete tSTRING '[' FExpr ']' tEND
     {
@@ -1949,10 +2273,12 @@ Delete :
 Colorify :
     tColor ColorExpr '{' ListOfShapes '}'
     {
-      for(i = 0; i < List_Nbr($4); i++){
-	List_Read ($4, i, &TheShape);
+      for(int i = 0; i < List_Nbr($4); i++){
+	Shape TheShape;
+	List_Read($4, i, &TheShape);
 	ColorShape(TheShape.Type, TheShape.Num, $2);
       }
+      List_Delete($4);      
     }
 ;
 
@@ -1963,29 +2289,33 @@ Visibility :
     {
       int m = (CTX.visibility_mode == 2) ? VIS_MESH : 
 	((CTX.visibility_mode == 1) ? VIS_GEOM : VIS_GEOM|VIS_MESH);
-      for(i = 2; i < 6; i++)
+      for(int i = 2; i < 6; i++)
 	SetVisibilityByNumber($2, i, m);
     }
   | tHide StringExpr tEND
     {
-      for(i = 2; i < 6; i++)
+      for(int i = 2; i < 6; i++)
 	SetVisibilityByNumber($2, i, 0);
     }
   | tShow '{' ListOfShapes '}'
     {
       int m = (CTX.visibility_mode == 2) ? VIS_MESH :
 	((CTX.visibility_mode == 1) ? VIS_GEOM : VIS_GEOM|VIS_MESH);
-      for(i = 0; i < List_Nbr($3); i++){
-	List_Read ($3, i, &TheShape);
+      for(int i = 0; i < List_Nbr($3); i++){
+	Shape TheShape;
+	List_Read($3, i, &TheShape);
 	VisibilityShape(TheShape.Type, TheShape.Num, m);
       }
+      List_Delete($3);
     }
   | tHide '{' ListOfShapes '}'
     {
-      for(i = 0; i < List_Nbr($3); i++){
-	List_Read ($3, i, &TheShape);
+      for(int i = 0; i < List_Nbr($3); i++){
+	Shape TheShape;
+	List_Read($3, i, &TheShape);
 	VisibilityShape(TheShape.Type, TheShape.Num, 0);
       }
+      List_Delete($3);
     }
 ;
 
@@ -1995,12 +2325,18 @@ Command :
     tSTRING StringExpr tEND
     {
       if(!strcmp($1, "Include")){
+	char tmpstring[1024];
 	FixRelativePath($2, tmpstring);
+	// Warning: we *don't* close included files. If you need to
+	// include many files, use "Merge" instead: some OSes limit
+	// the number of files a process can open simultaneously (500
+	// for OS X)
 	ParseFile(tmpstring, 0, 0);
       }
       else if(!strcmp($1, "Print")){
 #if defined(HAVE_FLTK)
 	if(!CTX.batch){
+	  char tmpstring[1024];
 	  FixRelativePath($2, tmpstring);
 	  CreateOutputFile(tmpstring, CTX.print.format);
 	}
@@ -2008,15 +2344,18 @@ Command :
       }
       else if(!strcmp($1, "Save")){
 #if defined(HAVE_FLTK)
+	char tmpstring[1024];
 	FixRelativePath($2, tmpstring);
 	CreateOutputFile(tmpstring, CTX.mesh.format);
 #endif
       }
       else if(!strcmp($1, "Merge")){
+	char tmpstring[1024];
 	FixRelativePath($2, tmpstring);
 	MergeProblem(tmpstring);
       }
       else if(!strcmp($1, "MergeWithBoundingBox")){
+	char tmpstring[1024];
 	FixRelativePath($2, tmpstring);
 	MergeProblemWithBoundingBox(tmpstring);
       }
@@ -2032,6 +2371,7 @@ Command :
       if(!strcmp($1, "Save") && !strcmp($2, "View")){
 	Post_View *v = (Post_View *)List_Pointer_Test(CTX.post.list, (int)$4);
 	if(v){
+	  char tmpstring[1024];
 	  FixRelativePath($6, tmpstring);
 	  WriteView(v, tmpstring, 0, 0);
 	}
@@ -2049,8 +2389,6 @@ Command :
 	}
       }
       else if(!strcmp($1, "Mesh")){
-	//Maillage_Dimension_0(THEM);
-	//mai3d(THEM, (int)$2);
 	yymsg(GERROR, "Mesh directives are not (yet) allowed in scripts");
       }
       else{
@@ -2062,7 +2400,7 @@ Command :
       try {
 	GMSH_PluginManager::instance()->action($3, $6, 0);
       }
-      catch (...) {
+      catch(...) {
 	yymsg(WARNING, "Unknown action '%s' or plugin '%s'", $6, $3);
       }
    }
@@ -2103,32 +2441,41 @@ Loop :
 
     tFor '(' FExpr tDOTS FExpr ')'
     {
-      LoopControlVariablesTab[ImbricatedLoop][0] = $3 ;
-      LoopControlVariablesTab[ImbricatedLoop][1] = $5 ;
-      LoopControlVariablesTab[ImbricatedLoop][2] = 1.0 ;
-      LoopControlVariablesNameTab[ImbricatedLoop] = "" ;
+      LoopControlVariablesTab[ImbricatedLoop][0] = $3;
+      LoopControlVariablesTab[ImbricatedLoop][1] = $5;
+      LoopControlVariablesTab[ImbricatedLoop][2] = 1.0;
+      LoopControlVariablesNameTab[ImbricatedLoop] = "";
       fgetpos(yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]);
       yylinenoImbricatedLoopsTab[ImbricatedLoop] = yylineno;
       ImbricatedLoop++;
+      if(ImbricatedLoop > MAX_RECUR_LOOPS-1){
+	yymsg(GERROR, "Reached maximum number of imbricated loops");
+	ImbricatedLoop = MAX_RECUR_LOOPS-1;
+      }
     }
   | tFor '(' FExpr tDOTS FExpr tDOTS FExpr ')'
     {
-      LoopControlVariablesTab[ImbricatedLoop][0] = $3 ;
-      LoopControlVariablesTab[ImbricatedLoop][1] = $5 ;
-      LoopControlVariablesTab[ImbricatedLoop][2] = $7 ;
-      LoopControlVariablesNameTab[ImbricatedLoop] = "" ;
+      LoopControlVariablesTab[ImbricatedLoop][0] = $3;
+      LoopControlVariablesTab[ImbricatedLoop][1] = $5;
+      LoopControlVariablesTab[ImbricatedLoop][2] = $7;
+      LoopControlVariablesNameTab[ImbricatedLoop] = "";
       fgetpos(yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]);
       yylinenoImbricatedLoopsTab[ImbricatedLoop] = yylineno;
       ImbricatedLoop++;
+      if(ImbricatedLoop > MAX_RECUR_LOOPS-1){
+	yymsg(GERROR, "Reached maximum number of imbricated loops");
+	ImbricatedLoop = MAX_RECUR_LOOPS-1;
+      }
     }
   | tFor tSTRING tIn '{' FExpr tDOTS FExpr '}' 
     {
-      LoopControlVariablesTab[ImbricatedLoop][0] = $5 ;
-      LoopControlVariablesTab[ImbricatedLoop][1] = $7 ;
-      LoopControlVariablesTab[ImbricatedLoop][2] = 1.0 ;
-      LoopControlVariablesNameTab[ImbricatedLoop] = $2 ;
-      
+      LoopControlVariablesTab[ImbricatedLoop][0] = $5;
+      LoopControlVariablesTab[ImbricatedLoop][1] = $7;
+      LoopControlVariablesTab[ImbricatedLoop][2] = 1.0;
+      LoopControlVariablesNameTab[ImbricatedLoop] = $2;
+      Symbol TheSymbol;      
       TheSymbol.Name = $2;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){
 	TheSymbol.val = List_Create(1, 1, sizeof(double));
 	List_Put(TheSymbol.val, 0, &$5);
@@ -2137,19 +2484,23 @@ Loop :
       else{
 	List_Write(pSymbol->val, 0, &$5);
       }
-      
       fgetpos(yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]);
       yylinenoImbricatedLoopsTab[ImbricatedLoop] = yylineno;
       ImbricatedLoop++;
+      if(ImbricatedLoop > MAX_RECUR_LOOPS-1){
+	yymsg(GERROR, "Reached maximum number of imbricated loops");
+	ImbricatedLoop = MAX_RECUR_LOOPS-1;
+      }
     }
   | tFor tSTRING tIn '{' FExpr tDOTS FExpr tDOTS FExpr '}' 
     {
-      LoopControlVariablesTab[ImbricatedLoop][0] = $5 ;
-      LoopControlVariablesTab[ImbricatedLoop][1] = $7 ;
-      LoopControlVariablesTab[ImbricatedLoop][2] = $9 ;
-      LoopControlVariablesNameTab[ImbricatedLoop] = $2 ;
-
+      LoopControlVariablesTab[ImbricatedLoop][0] = $5;
+      LoopControlVariablesTab[ImbricatedLoop][1] = $7;
+      LoopControlVariablesTab[ImbricatedLoop][2] = $9;
+      LoopControlVariablesNameTab[ImbricatedLoop] = $2;
+      Symbol TheSymbol;
       TheSymbol.Name = $2;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){
 	TheSymbol.val = List_Create(1, 1, sizeof(double));
 	List_Put(TheSymbol.val, 0, &$5);
@@ -2158,10 +2509,13 @@ Loop :
       else{
 	List_Write(pSymbol->val, 0, &$5);
       }
-      
       fgetpos(yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]);
       yylinenoImbricatedLoopsTab[ImbricatedLoop] = yylineno;
       ImbricatedLoop++;
+      if(ImbricatedLoop > MAX_RECUR_LOOPS-1){
+	yymsg(GERROR, "Reached maximum number of imbricated loops");
+	ImbricatedLoop = MAX_RECUR_LOOPS-1;
+      }
     }
   | tEndFor 
     {
@@ -2169,19 +2523,25 @@ Loop :
 	 LoopControlVariablesTab[ImbricatedLoop-1][0]){
 	LoopControlVariablesTab[ImbricatedLoop-1][0] +=
 	  LoopControlVariablesTab[ImbricatedLoop-1][2];
-	
 	if(strlen(LoopControlVariablesNameTab[ImbricatedLoop-1])){
+	  Symbol TheSymbol;
 	  TheSymbol.Name = LoopControlVariablesNameTab[ImbricatedLoop-1];
-	  pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol);
-	  *(double*)List_Pointer_Fast(pSymbol->val, 0) += 
-	    LoopControlVariablesTab[ImbricatedLoop-1][2] ;
+	  Symbol *pSymbol;
+	  if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol)))
+	    yymsg(GERROR, "Unknown loop variable");
+	  else
+	    *(double*)List_Pointer_Fast(pSymbol->val, 0) += 
+	      LoopControlVariablesTab[ImbricatedLoop-1][2];
 	}
-	
 	fsetpos(yyin, &yyposImbricatedLoopsTab[ImbricatedLoop-1]);
 	yylineno = yylinenoImbricatedLoopsTab[ImbricatedLoop-1];
       }
       else{
 	ImbricatedLoop--;
+	if(ImbricatedLoop < 0){
+	  yymsg(GERROR, "Problem with imbricated loops");
+	  ImbricatedLoop = 0;
+	}
       }
     }
   | tFunction tSTRING
@@ -2218,6 +2578,7 @@ Extrude :
     tExtrude tPoint '{' FExpr ',' VExpr '}' tEND
     {
       Curve *pc, *prc;
+      Shape TheShape;
       TheShape.Num = Extrude_ProtudePoint(TRANSLATE, (int)$4, $6[0], $6[1], $6[2],
 					  0., 0., 0., 0., 0., 0., 0.,
 					  &pc, &prc, 1, NULL);
@@ -2228,6 +2589,7 @@ Extrude :
   | tExtrude tPoint '{' FExpr ',' VExpr ',' VExpr ',' FExpr '}'  tEND
     {
       Curve *pc, *prc;
+      Shape TheShape;
       TheShape.Num = Extrude_ProtudePoint(ROTATE, (int)$4, 0., 0., 0.,
 					  $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10,
 					  &pc, &prc, 1, NULL);
@@ -2238,6 +2600,7 @@ Extrude :
   | tExtrude tPoint '{' FExpr ',' VExpr ',' VExpr ',' VExpr ',' FExpr'}'  tEND
     {
       Curve *pc, *prc;
+      Shape TheShape;
       TheShape.Num = 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, 1, NULL);
@@ -2253,6 +2616,7 @@ Extrude :
                    '{' ExtrudeParameters '}' tEND
     {
       Curve *pc, *prc;
+      Shape TheShape;
       TheShape.Num = Extrude_ProtudePoint(TRANSLATE, (int)$4, $6[0], $6[1], $6[2],
 					  0., 0., 0., 0., 0., 0., 0.,
 					  &pc, &prc, 1, &extr);
@@ -2268,6 +2632,7 @@ Extrude :
                    '{' ExtrudeParameters '}' tEND
     {
       Curve *pc, *prc;
+      Shape TheShape;
       TheShape.Num = Extrude_ProtudePoint(ROTATE, (int)$4, 0., 0., 0.,
 					  $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10,
 					  &pc, &prc, 1, &extr);
@@ -2283,6 +2648,7 @@ Extrude :
                    '{' ExtrudeParameters '}' tEND
     {
       Curve *pc, *prc;
+      Shape TheShape;
       TheShape.Num = 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, 1, &extr);
@@ -2295,6 +2661,7 @@ Extrude :
   | tExtrude tLine '{' FExpr ',' VExpr '}' tEND
     {
       Surface *ps;
+      Shape TheShape;
       TheShape.Num = Extrude_ProtudeCurve(TRANSLATE, (int)$4, $6[0], $6[1], $6[2],
 					  0., 0., 0., 0., 0., 0., 0., 
 					  &ps, 1, NULL);
@@ -2312,6 +2679,7 @@ Extrude :
   | tExtrude tLine '{' FExpr ',' VExpr ',' VExpr ',' FExpr '}' tEND
     {
       Surface *ps;
+      Shape TheShape;
       TheShape.Num = Extrude_ProtudeCurve(ROTATE, (int)$4, 0., 0., 0.,
 					  $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10, 
 					  &ps, 1, NULL);
@@ -2329,6 +2697,7 @@ Extrude :
   | tExtrude tLine '{' FExpr ',' VExpr ',' VExpr ',' VExpr ',' FExpr '}' tEND
     {
       Surface *ps;
+      Shape TheShape;
       TheShape.Num = 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, 
 					  &ps, 1, NULL);
@@ -2351,6 +2720,7 @@ Extrude :
                    '{' ExtrudeParameters '}' tEND
     {
       Surface *ps;
+      Shape TheShape;
       TheShape.Num = Extrude_ProtudeCurve(TRANSLATE, (int)$4, $6[0], $6[1], $6[2],
 					  0., 0., 0., 0., 0., 0., 0., 
 					  &ps, 1, &extr);
@@ -2373,6 +2743,7 @@ Extrude :
                    '{' ExtrudeParameters '}' tEND
     {
       Surface *ps;
+      Shape TheShape;
       TheShape.Num = Extrude_ProtudeCurve(ROTATE, (int)$4, 0., 0., 0.,
 					  $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10, 
 					  &ps, 1, &extr);
@@ -2395,6 +2766,7 @@ Extrude :
                    '{' ExtrudeParameters '}' tEND
     {
       Surface *ps;
+      Shape TheShape;
       TheShape.Num = 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, 
 					  &ps, 1, &extr);
@@ -2414,6 +2786,7 @@ Extrude :
 
   | tExtrude tSurface '{' FExpr ',' VExpr '}' tEND
     {
+      Shape TheShape;
       TheShape.Num = Extrude_ProtudeSurface(TRANSLATE, (int)$4, $6[0], $6[1], $6[2],
 					    0., 0., 0., 0., 0., 0., 0., 
 					    0, NULL);
@@ -2430,6 +2803,7 @@ Extrude :
     }
   | tExtrude tSurface '{' FExpr ',' VExpr ',' VExpr ',' FExpr '}' tEND
     {
+      Shape TheShape;
       TheShape.Num = Extrude_ProtudeSurface(ROTATE, (int)$4, 0., 0., 0.,
 					    $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10,
 					    0, NULL);
@@ -2446,6 +2820,7 @@ Extrude :
     }
   | tExtrude tSurface '{' FExpr ',' VExpr ',' VExpr ',' VExpr ',' FExpr '}' tEND
     {
+      Shape TheShape;
       TheShape.Num = 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);
@@ -2467,10 +2842,10 @@ Extrude :
     }
                       '{' ExtrudeParameters '}' tEND
     {
-      int vol = NEWREG();
+      Shape TheShape;
       TheShape.Num = Extrude_ProtudeSurface(TRANSLATE, (int)$4, $6[0], $6[1], $6[2],
 					    0., 0., 0., 0., 0., 0., 0., 
-					    vol, &extr);
+					    NEWREG(), &extr);
       Surface *s = FindSurface(TheShape.Num, THEM);
       if(!s){
 	//yymsg(WARNING, "Unknown Surface %d", TheShape.Num);
@@ -2490,10 +2865,10 @@ Extrude :
   
                       '{' ExtrudeParameters '}' tEND
     {
-      int vol = NEWREG();
+      Shape TheShape;
       TheShape.Num = Extrude_ProtudeSurface(ROTATE, (int)$4, 0., 0., 0.,
 					    $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10, 
-					    vol, &extr);
+					    NEWREG(), &extr);
       Surface *s = FindSurface(TheShape.Num, THEM);
       if(!s){
 	//yymsg(WARNING, "Unknown Surface %d", TheShape.Num);
@@ -2513,10 +2888,10 @@ Extrude :
   
                       '{' ExtrudeParameters '}' tEND
     {
-      int vol = NEWREG();
+      Shape TheShape;
       TheShape.Num = 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);
+					    NEWREG(), &extr);
       Surface *s = FindSurface(TheShape.Num, THEM);
       if(!s){
 	//yymsg(WARNING, "Unknown Surface %d", TheShape.Num);
@@ -2596,16 +2971,16 @@ ExtrudeParameter :
     }
 ;
 
-//  T R A N S F I N I
+//  T R A N S F I N I T E
 
-Transfini : 
+Transfinite : 
     tTransfinite tLine ListOfDouble tAFFECT FExpr tEND
     {
-      Curve *c;
-      for(i = 0; i < List_Nbr($3); i++){
+      for(int i = 0; i < List_Nbr($3); i++){
+	double d;
 	List_Read($3, i, &d);
-	j = (int)fabs(d);
-        c = FindCurve(j, THEM);
+	int j = (int)fabs(d);
+        Curve *c = FindCurve(j, THEM);
 	if(!c)
 	  yymsg(WARNING, "Unknown Curve %d", j);
 	else{
@@ -2619,11 +2994,11 @@ Transfini :
     }
   | tTransfinite tLine ListOfDouble tAFFECT FExpr tUsing tProgression FExpr tEND
     {
-      Curve *c;
-      for(i = 0; i < List_Nbr($3); i++){
+      for(int i = 0; i < List_Nbr($3); i++){
+	double d;
 	List_Read($3, i, &d);
-	j = (int)fabs(d);
-        c = FindCurve(j, THEM);
+	int j = (int)fabs(d);
+        Curve *c = FindCurve(j, THEM);
 	if(!c)
 	  yymsg(WARNING, "Unknown Curve %d", j);
 	else{
@@ -2637,11 +3012,11 @@ Transfini :
     }
   | tTransfinite tLine ListOfDouble tAFFECT FExpr tUsing tBump FExpr tEND
     {
-      Curve *c;
-      for(i = 0; i < List_Nbr($3); i++){
+      for(int i = 0; i < List_Nbr($3); i++){
+	double d;
 	List_Read($3, i, &d);
-	j = (int)fabs(d);
-        c = FindCurve(j, THEM);
+	int j = (int)fabs(d);
+        Curve *c = FindCurve(j, THEM);
 	if(!c)
 	  yymsg(WARNING, "Unknown Curve %d", j);
 	else{
@@ -2660,15 +3035,16 @@ Transfini :
 	yymsg(WARNING, "Unknown Surface %d", (int)$4);
       else{
 	s->Method = TRANSFINI;
-	k = List_Nbr($7);
-	if(k!=3 && k!=4){
+	int k = List_Nbr($7);
+	if(k != 3 && k != 4){
 	  yymsg(GERROR, "Wrong definition of Transfinite Surface %d: "
-		"%d points instead of 3 or 4" , $4, k) ;
+		"%d points instead of 3 or 4" , $4, k);
 	}
 	else{
-	  for(i = 0; i < k; i++){
+	  for(int i = 0; i < k; i++){
+	    double d;
 	    List_Read($7, i, &d);
-	    j = (int)fabs(d);
+	    int j = (int)fabs(d);
 	    s->ipar[i] = j;
 	  }
 	}
@@ -2682,14 +3058,15 @@ Transfini :
 	yymsg(WARNING, "Unknown Surface %d", (int)$4);
       else{
         s->Method = ELLIPTIC;
-        k = List_Nbr($7);
+        int k = List_Nbr($7);
         if(k != 4)
 	  yymsg(GERROR, "Wrong definition of Elliptic Surface %d: "
-		"%d points instead of 4" , $4, k) ;
+		"%d points instead of 4" , $4, k);
         else{
-	  for(i = 0; i < k; i++){
+	  for(int i = 0; i < k; i++){
+	    double d;
 	    List_Read($7, i, &d);
-	    j = (int)fabs(d);
+	    int j = (int)fabs(d);
 	    s->ipar[i] = j;
 	  }
 	}
@@ -2703,14 +3080,15 @@ Transfini :
 	yymsg(WARNING, "Unknown Volume %d", (int)$4);
       else{
 	v->Method = TRANSFINI;
-	k = List_Nbr($7);
+	int k = List_Nbr($7);
 	if(k != 6 && k != 8)
 	  yymsg(GERROR, "Wrong definition of Transfinite Volume %d: "
-		"%d points instead of 6 or 8" , $4, k) ;
+		"%d points instead of 6 or 8" , $4, k);
 	else{
-	  for(i = 0; i < k; i++){
+	  for(int i = 0; i < k; i++){
+	    double d;
 	    List_Read($7, i, &d);
-	    j = (int)fabs(d);
+	    int j = (int)fabs(d);
 	    v->ipar[i] = j;
 	  }
 	}
@@ -2719,11 +3097,11 @@ Transfini :
     }
   | tRecombine tSurface ListOfDouble tAFFECT FExpr tEND
     {
-      Surface *s;
-      for(i = 0; i < List_Nbr($3); i++){
+      for(int i = 0; i < List_Nbr($3); i++){
+	double d;
 	List_Read($3, i, &d);
-	j = (int)d;
-	s = FindSurface(j, THEM);
+	int j = (int)d;
+	Surface *s = FindSurface(j, THEM);
 	if(s){
 	  s->Recombine = 1;
 	  s->RecombineAngle = ($5 > 0 && $5 < 90) ? $5 : 90;
@@ -2733,11 +3111,11 @@ Transfini :
     }
   | tRecombine tSurface ListOfDouble tEND
     {
-      Surface *s;
-      for(i = 0; i < List_Nbr($3); i++){
+      for(int i = 0; i < List_Nbr($3); i++){
+	double d;
 	List_Read($3, i, &d);
-	j = (int)d;
-        s = FindSurface(j, THEM);
+	int j = (int)d;
+        Surface *s = FindSurface(j, THEM);
 	if(s){
 	  s->Recombine = 1;
 	  s->RecombineAngle = 30.;
@@ -2770,35 +3148,35 @@ BoolExpr :
   | tUNSPECIFIED {$$ = -1;}
   | tU {$$ = -1;}
   | tV {$$ = -1;}
-  ;
+;
 
 FExpr :
     FExpr_Single                     { $$ = $1;           }
-  | '(' FExpr ')'                    { $$ = $2 ;          }
-  | '-' FExpr %prec UNARYPREC        { $$ = -$2 ;         }
+  | '(' FExpr ')'                    { $$ = $2;           }
+  | '-' FExpr %prec UNARYPREC        { $$ = -$2;          }
   | '+' FExpr %prec UNARYPREC        { $$ = $2;           }
-  | '!' FExpr                        { $$ = !$2 ;         }
-  | FExpr '-' FExpr                  { $$ = $1 - $3 ;     }
-  | FExpr '+' FExpr                  { $$ = $1 + $3 ;     }
-  | FExpr '*' FExpr                  { $$ = $1 * $3 ;     }
+  | '!' FExpr                        { $$ = !$2;          }
+  | FExpr '-' FExpr                  { $$ = $1 - $3;      }
+  | FExpr '+' FExpr                  { $$ = $1 + $3;      }
+  | FExpr '*' FExpr                  { $$ = $1 * $3;      }
   | FExpr '/' FExpr
     { 
       if(!$3)
 	yymsg(GERROR, "Division by zero in '%g / %g'", $1, $3);
       else
-	$$ = $1 / $3 ;     
-    }
-  | FExpr '%' FExpr                  { $$ = (int)$1 % (int)$3 ;  }
-  | FExpr '^' FExpr                  { $$ = pow($1, $3) ;  }
-  | FExpr '<' FExpr                  { $$ = $1 < $3 ;     }
-  | FExpr '>' FExpr                  { $$ = $1 > $3 ;     }
-  | FExpr tLESSOREQUAL FExpr         { $$ = $1 <= $3 ;    }
-  | FExpr tGREATEROREQUAL FExpr      { $$ = $1 >= $3 ;    }
-  | FExpr tEQUAL FExpr               { $$ = $1 == $3 ;    }
-  | FExpr tNOTEQUAL FExpr            { $$ = $1 != $3 ;    }
-  | FExpr tAND FExpr                 { $$ = $1 && $3 ;    }
-  | FExpr tOR FExpr                  { $$ = $1 || $3 ;    }
-  | FExpr '?' FExpr tDOTS FExpr      { $$ = $1? $3 : $5 ; }
+	$$ = $1 / $3;     
+    }
+  | FExpr '%' FExpr                  { $$ = (int)$1 % (int)$3;  }
+  | FExpr '^' FExpr                  { $$ = pow($1, $3);  }
+  | FExpr '<' FExpr                  { $$ = $1 < $3;      }
+  | FExpr '>' FExpr                  { $$ = $1 > $3;      }
+  | FExpr tLESSOREQUAL FExpr         { $$ = $1 <= $3;     }
+  | FExpr tGREATEROREQUAL FExpr      { $$ = $1 >= $3;     }
+  | FExpr tEQUAL FExpr               { $$ = $1 == $3;     }
+  | FExpr tNOTEQUAL FExpr            { $$ = $1 != $3;     }
+  | FExpr tAND FExpr                 { $$ = $1 && $3;     }
+  | FExpr tOR FExpr                  { $$ = $1 || $3;     }
+  | FExpr '?' FExpr tDOTS FExpr      { $$ = $1? $3 : $5;  }
   | tExp    '(' FExpr ')'            { $$ = exp($3);      }
   | tLog    '(' FExpr ')'            { $$ = log($3);      }
   | tLog10  '(' FExpr ')'            { $$ = log10($3);    }
@@ -2809,15 +3187,15 @@ FExpr :
   | tAcos   '(' FExpr ')'            { $$ = acos($3);     }
   | tTan    '(' FExpr ')'            { $$ = tan($3);      }
   | tAtan   '(' FExpr ')'            { $$ = atan($3);     }
-  | tAtan2  '(' FExpr ',' FExpr ')'  { $$ = atan2($3, $5); }
+  | tAtan2  '(' FExpr ',' FExpr ')'  { $$ = atan2($3, $5);}
   | tSinh   '(' FExpr ')'            { $$ = sinh($3);     }
   | tCosh   '(' FExpr ')'            { $$ = cosh($3);     }
   | tTanh   '(' FExpr ')'            { $$ = tanh($3);     }
   | tFabs   '(' FExpr ')'            { $$ = fabs($3);     }
   | tFloor  '(' FExpr ')'            { $$ = floor($3);    }
   | tCeil   '(' FExpr ')'            { $$ = ceil($3);     }
-  | tFmod   '(' FExpr ',' FExpr ')'  { $$ = fmod($3, $5);  }
-  | tModulo '(' FExpr ',' FExpr ')'  { $$ = fmod($3, $5);  }
+  | tFmod   '(' FExpr ',' FExpr ')'  { $$ = fmod($3, $5); }
+  | tModulo '(' FExpr ',' FExpr ')'  { $$ = fmod($3, $5); }
   | tHypot  '(' FExpr ',' FExpr ')'  { $$ = sqrt($3*$3+$5*$5); }
   | tRand   '(' FExpr ')'            { $$ = $3*(double)rand()/(double)RAND_MAX; }
   // The following is for GetDP compatibility
@@ -2831,15 +3209,15 @@ FExpr :
   | tAcos   '[' FExpr ']'            { $$ = acos($3);     }
   | tTan    '[' FExpr ']'            { $$ = tan($3);      }
   | tAtan   '[' FExpr ']'            { $$ = atan($3);     }
-  | tAtan2  '[' FExpr ',' FExpr ']'  { $$ = atan2($3, $5); }
+  | tAtan2  '[' FExpr ',' FExpr ']'  { $$ = atan2($3, $5);}
   | tSinh   '[' FExpr ']'            { $$ = sinh($3);     }
   | tCosh   '[' FExpr ']'            { $$ = cosh($3);     }
   | tTanh   '[' FExpr ']'            { $$ = tanh($3);     }
   | tFabs   '[' FExpr ']'            { $$ = fabs($3);     }
   | tFloor  '[' FExpr ']'            { $$ = floor($3);    }
   | tCeil   '[' FExpr ']'            { $$ = ceil($3);     }
-  | tFmod   '[' FExpr ',' FExpr ']'  { $$ = fmod($3, $5);  }
-  | tModulo '[' FExpr ',' FExpr ']'  { $$ = fmod($3, $5);  }
+  | tFmod   '[' FExpr ',' FExpr ']'  { $$ = fmod($3, $5); }
+  | tModulo '[' FExpr ',' FExpr ']'  { $$ = fmod($3, $5); }
   | tHypot  '[' FExpr ',' FExpr ']'  { $$ = sqrt($3*$3+$5*$5); }
   | tRand   '[' FExpr ']'            { $$ = $3*(double)rand()/(double)RAND_MAX; }
 ;
@@ -2859,68 +3237,76 @@ FExpr_Single :
 
   | tSTRING
     {
-      TheSymbol.Name = $1 ;
+      Symbol TheSymbol;
+      TheSymbol.Name = $1;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
-	yymsg(GERROR, "Unknown variable '%s'", $1) ;
-	$$ = 0. ;
+	yymsg(GERROR, "Unknown variable '%s'", $1);
+	$$ = 0.;
       }
       else
-	$$ = *(double*)List_Pointer_Fast(pSymbol->val, 0) ;
+	$$ = *(double*)List_Pointer_Fast(pSymbol->val, 0);
     }
-
   | tSTRING '[' FExpr ']'
     {
-      TheSymbol.Name = $1 ;
+      Symbol TheSymbol;
+      TheSymbol.Name = $1;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
-	yymsg(GERROR, "Unknown variable '%s'", $1) ;
-	$$ = 0. ;
+	yymsg(GERROR, "Unknown variable '%s'", $1);
+	$$ = 0.;
       }
       else{
+	double *pd;
 	if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)$3)))
-	  $$ = *pd ;
+	  $$ = *pd;
 	else{
-	  yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, (int)$3) ;
-	  $$ = 0. ;
+	  yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, (int)$3);
+	  $$ = 0.;
 	}
       }
     }
-
   | '#' tSTRING '[' ']'
     {
-      TheSymbol.Name = $2 ;
+      Symbol TheSymbol;
+      TheSymbol.Name = $2;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
-	yymsg(GERROR, "Unknown variable '%s'", $2) ;
-	$$ = 0. ;
+	yymsg(GERROR, "Unknown variable '%s'", $2);
+	$$ = 0.;
       }
       else{
 	$$ = List_Nbr(pSymbol->val);
       }
     }
-
   | tSTRING NumericIncrement
     {
-      TheSymbol.Name = $1 ;
+      Symbol TheSymbol;
+      TheSymbol.Name = $1;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
-	yymsg(GERROR, "Unknown variable '%s'", $1) ;
-	$$ = 0. ;
+	yymsg(GERROR, "Unknown variable '%s'", $1);
+	$$ = 0.;
       }
       else
-	$$ = (*(double*)List_Pointer_Fast(pSymbol->val, 0) += $2) ;
+	$$ = (*(double*)List_Pointer_Fast(pSymbol->val, 0) += $2);
     }
-
   | tSTRING '[' FExpr ']' NumericIncrement
     {
-      TheSymbol.Name = $1 ;
+      Symbol TheSymbol;
+      TheSymbol.Name = $1;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
-	yymsg(GERROR, "Unknown variable '%s'", $1) ;
-	$$ = 0. ;
+	yymsg(GERROR, "Unknown variable '%s'", $1);
+	$$ = 0.;
       }
       else{
+	double *pd;
 	if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)$3)))
-	  $$ = (*pd += $5) ;
+	  $$ = (*pd += $5);
 	else{
-	  yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, (int)$3) ;
-	  $$ = 0. ;
+	  yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, (int)$3);
+	  $$ = 0.;
 	}
       }
     }
@@ -2929,62 +3315,67 @@ FExpr_Single :
 
   | tSTRING '.' tSTRING 
     {
+      double (*pNumOpt)(int num, int action, double value);
+      StringXNumber *pNumCat;
       if(!(pNumCat = Get_NumberOptionCategory($1))){
 	yymsg(GERROR, "Unknown numeric option class '%s'", $1);
-	$$ = 0. ;
+	$$ = 0.;
       }
       else{
 	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption($3, pNumCat))){
 	  yymsg(GERROR, "Unknown numeric option '%s.%s'", $1, $3);
-	  $$ = 0. ;
+	  $$ = 0.;
 	}
 	else
 	  $$ = pNumOpt(0, GMSH_GET, 0);
       }
     }
-
   | tSTRING '[' FExpr ']' '.' tSTRING 
     {
+      double (*pNumOpt)(int num, int action, double value);
+      StringXNumber *pNumCat;
       if(!(pNumCat = Get_NumberOptionCategory($1))){
 	yymsg(GERROR, "Unknown numeric option class '%s'", $1);
-	$$ = 0. ;
+	$$ = 0.;
       }
       else{
 	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption($6, pNumCat))){
 	  yymsg(GERROR, "Unknown numeric option '%s[%d].%s'", $1, (int)$3, $6);
-	  $$ = 0. ;
+	  $$ = 0.;
 	}
 	else
 	  $$ = pNumOpt((int)$3, GMSH_GET, 0);
       }
     }
-
   | tSTRING '.' tSTRING NumericIncrement
     {
+      double (*pNumOpt)(int num, int action, double value);
+      StringXNumber *pNumCat;
       if(!(pNumCat = Get_NumberOptionCategory($1))){
 	yymsg(GERROR, "Unknown numeric option class '%s'", $1);
-	$$ = 0. ;
+	$$ = 0.;
       }
       else{
 	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption($3, pNumCat))){
 	  yymsg(GERROR, "Unknown numeric option '%s.%s'", $1, $3);
-	  $$ = 0. ;
+	  $$ = 0.;
 	}
 	else
 	  $$ = pNumOpt(0, GMSH_SET|GMSH_GUI, pNumOpt(0, GMSH_GET, 0)+$4);
       }
     }
-
   | tSTRING '[' FExpr ']' '.' tSTRING NumericIncrement
     {
+      double (*pNumOpt)(int num, int action, double value);
+      StringXNumber *pNumCat;
       if(!(pNumCat = Get_NumberOptionCategory($1))){
 	yymsg(GERROR, "Unknown numeric option class '%s'", $1);
-	$$ = 0. ;
+	$$ = 0.;
       }
       else{
 	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption($6, pNumCat))){
 	  yymsg(GERROR, "Unknown numeric option '%s[%d].%s'", $1, (int)$3, $6);
-	  $$ = 0. ;
+	  $$ = 0.;
 	}
 	else
 	  $$ = pNumOpt((int)$3, GMSH_SET|GMSH_GUI, pNumOpt((int)$3, GMSH_GET, 0)+$7);
@@ -2995,23 +3386,23 @@ FExpr_Single :
 VExpr :
     VExpr_Single
     {
-      memcpy($$, $1, 5*sizeof(double)) ;
+      memcpy($$, $1, 5*sizeof(double));
     }
   | '-' VExpr %prec UNARYPREC
     {
-      for(i = 0; i < 5; i++) $$[i] = -$2[i] ;
+      for(int i = 0; i < 5; i++) $$[i] = -$2[i];
     }
   | '+' VExpr %prec UNARYPREC
     { 
-      for(i = 0; i < 5; i++) $$[i] = $2[i];
+      for(int i = 0; i < 5; i++) $$[i] = $2[i];
     }
   | VExpr '-' VExpr
     { 
-      for(i = 0; i < 5; i++) $$[i] = $1[i] - $3[i] ;
+      for(int i = 0; i < 5; i++) $$[i] = $1[i] - $3[i];
     }
   | VExpr '+' VExpr
     {
-      for(i = 0; i < 5; i++) $$[i] = $1[i] + $3[i] ;
+      for(int i = 0; i < 5; i++) $$[i] = $1[i] + $3[i];
     }
 ;
 
@@ -3035,7 +3426,7 @@ VExpr_Single :
 ;
 
 ListOfStrings :
-    /* none */
+    // nothing
     {
     }
   | '(' RecursiveListOfStrings ')'
@@ -3053,7 +3444,7 @@ RecursiveListOfStrings :
 ;
 
 ListOfListOfDouble :
-    /* none */
+    // nothing
     {
     }
   | '{' RecursiveListOfListOfDouble '}'
@@ -3069,12 +3460,12 @@ ListOfListOfDouble :
 RecursiveListOfListOfDouble :
     ListOfDouble
     {
-      $$ = List_Create(2, 1, sizeof(List_T*)) ;
-      List_Add($$, &($1)) ;
+      $$ = List_Create(2, 1, sizeof(List_T*));
+      List_Add($$, &($1));
     }
   | RecursiveListOfListOfDouble ',' ListOfDouble
     {
-      List_Add($$, &($3)) ;
+      List_Add($$, &($3));
     }
 ;
 
@@ -3082,12 +3473,12 @@ RecursiveListOfListOfDouble :
 ListOfDouble :
     FExpr
     {
-      $$ = List_Create(2, 1, sizeof(double)) ;
-      List_Add($$, &($1)) ;
+      $$ = List_Create(2, 1, sizeof(double));
+      List_Add($$, &($1));
     }
   | FExpr_Multi
     {
-      $$ = $1 ;
+      $$ = $1;
     }
   | '{' RecursiveListOfDouble '}'
     {
@@ -3096,7 +3487,8 @@ ListOfDouble :
   | '-' '{' RecursiveListOfDouble '}'
     {
       $$ = $3;
-      for(i = 0; i < List_Nbr($$); i++){
+      double *pd;
+      for(int i = 0; i < List_Nbr($$); i++){
 	pd = (double*)List_Pointer($$, i);
 	(*pd) = - (*pd);
       }
@@ -3106,20 +3498,20 @@ ListOfDouble :
 FExpr_Multi :
     FExpr tDOTS FExpr
     { 
-      $$ = List_Create(2, 1, sizeof(double)) ; 
-      for(d = $1; ($1 < $3) ? (d <= $3) : (d >= $3); ($1 < $3) ? (d += 1.) : (d -= 1.)) 
-	List_Add($$, &d) ;
+      $$ = List_Create(2, 1, sizeof(double)); 
+      for(double d = $1; ($1 < $3) ? (d <= $3) : (d >= $3); ($1 < $3) ? (d += 1.) : (d -= 1.)) 
+	List_Add($$, &d);
     }
   | FExpr tDOTS FExpr tDOTS FExpr
     {
-      $$ = List_Create(2, 1, sizeof(double)) ; 
+      $$ = List_Create(2, 1, sizeof(double)); 
       if(!$5 || ($1 < $3 && $5 < 0) || ($1 > $3 && $5 > 0)){
-        yymsg(GERROR, "Wrong increment in '%g:%g:%g'", $1, $3, $5) ;
-	List_Add($$, &($1)) ;
+        yymsg(GERROR, "Wrong increment in '%g:%g:%g'", $1, $3, $5);
+	List_Add($$, &($1));
       }
       else
-	for(d = $1; ($5 > 0) ? (d <= $3) : (d >= $3); d += $5)
-	  List_Add($$, &d) ;
+	for(double d = $1; ($5 > 0) ? (d <= $3) : (d >= $3); d += $5)
+	  List_Add($$, &d);
    }
   | tPoint '{' FExpr '}'
     {
@@ -3127,117 +3519,130 @@ FExpr_Multi :
       // This allows to ensure e.g. that relative point positions are
       // always conserved
       Vertex *v = FindPoint((int)$3, THEM);
-      $$ = List_Create(3, 1, sizeof(double)) ;      
+      $$ = List_Create(3, 1, sizeof(double));      
       if(!v) {
-	yymsg(GERROR, "Unknown point '%d'", (int) $3) ;
-	double d = 0.0 ;
+	yymsg(GERROR, "Unknown point '%d'", (int) $3);
+	double d = 0.0;
 	List_Add($$, &d);
 	List_Add($$, &d);
 	List_Add($$, &d);
       }
       else{
-	List_Add($$, &v->Pos.X) ;
-	List_Add($$, &v->Pos.Y) ;
-	List_Add($$, &v->Pos.Z) ;
+	List_Add($$, &v->Pos.X);
+	List_Add($$, &v->Pos.Y);
+	List_Add($$, &v->Pos.Z);
       }
     }
   | Transform
     {
-      $$ = List_Create(List_Nbr($1), 1, sizeof(double)) ;
+      $$ = List_Create(List_Nbr($1), 1, sizeof(double));
       for(int i = 0; i < List_Nbr($1); i++){
 	Shape *s = (Shape*) List_Pointer($1, i);
 	double d = s->Num;
 	List_Add($$, &d);
       }
+      List_Delete($1);
     }
   | Duplicata
     {
-      $$ = List_Create(List_Nbr($1), 1, sizeof(double)) ;
+      $$ = List_Create(List_Nbr($1), 1, sizeof(double));
       for(int i = 0; i < List_Nbr($1); i++){
 	Shape *s = (Shape*) List_Pointer($1, i);
 	double d = s->Num;
 	List_Add($$, &d);
       }
+      List_Delete($1);
     }
   | Extrude
     {
       // FIXME: The syntax for this is ugly: we get double semi-colons
       // at the end of the line
-      $$ = List_Create(List_Nbr($1), 1, sizeof(double)) ;
+      $$ = List_Create(List_Nbr($1), 1, sizeof(double));
       for(int i = 0; i < List_Nbr($1); i++){
 	Shape *s = (Shape*) List_Pointer($1, i);
 	double d = s->Num;
 	List_Add($$, &d);
       }
+      List_Delete($1);
     }
   | tSTRING '[' ']'
     {
-      $$ = List_Create(2, 1, sizeof(double)) ;
-      TheSymbol.Name = $1 ;
+      $$ = List_Create(2, 1, sizeof(double));
+      Symbol TheSymbol;
+      TheSymbol.Name = $1;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
-	yymsg(GERROR, "Unknown variable '%s'", $1) ;
-	d = 0.0 ;
+	yymsg(GERROR, "Unknown variable '%s'", $1);
+	double d = 0.0;
 	List_Add($$, &d);
       }
       else{
-	for(i = 0; i < List_Nbr(pSymbol->val); i++)
-	  List_Add($$, (double*)List_Pointer_Fast(pSymbol->val, i)) ;
+	for(int i = 0; i < List_Nbr(pSymbol->val); i++)
+	  List_Add($$, (double*)List_Pointer_Fast(pSymbol->val, i));
       }
     }
   | '-' tSTRING '[' ']'
     {
-      $$ = List_Create(2, 1, sizeof(double)) ;
-      TheSymbol.Name = $2 ;
+      $$ = List_Create(2, 1, sizeof(double));
+      Symbol TheSymbol;
+      TheSymbol.Name = $2;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
-	yymsg(GERROR, "Unknown variable '%s'", $2) ;
-	d = 0.0 ;
+	yymsg(GERROR, "Unknown variable '%s'", $2);
+	double d = 0.0;
 	List_Add($$, &d);
       }
       else{
-	for(i = 0; i < List_Nbr(pSymbol->val); i++){
-	  d = - *(double*)List_Pointer_Fast(pSymbol->val, i);
-	  List_Add($$, &d) ;
+	for(int i = 0; i < List_Nbr(pSymbol->val); i++){
+	  double d = - *(double*)List_Pointer_Fast(pSymbol->val, i);
+	  List_Add($$, &d);
 	}
       }
     }
   | tSTRING '[' '{' RecursiveListOfDouble '}' ']'
     {
-      $$ = List_Create(2, 1, sizeof(double)) ;
-      TheSymbol.Name = $1 ;
+      $$ = List_Create(2, 1, sizeof(double));
+      Symbol TheSymbol;
+      TheSymbol.Name = $1;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
-	yymsg(GERROR, "Unknown variable '%s'", $1) ;
-	d = 0.0 ;
+	yymsg(GERROR, "Unknown variable '%s'", $1);
+	double d = 0.0;
 	List_Add($$, &d);
       }
       else{
-	for(i = 0; i < List_Nbr($4); i++){
-	  j = (int)(*(double*)List_Pointer_Fast($4, i));
+	for(int i = 0; i < List_Nbr($4); i++){
+	  int j = (int)(*(double*)List_Pointer_Fast($4, i));
+	  double *pd;
 	  if((pd = (double*)List_Pointer_Test(pSymbol->val, j)))
-	    List_Add($$, pd) ;
+	    List_Add($$, pd);
 	  else
-	    yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, j) ;	  
+	    yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, j);	  
 	}
       }
       List_Delete($4);
     }
   | '-' tSTRING '[' '{' RecursiveListOfDouble '}' ']'
     {
-      $$ = List_Create(2, 1, sizeof(double)) ;
-      TheSymbol.Name = $2 ;
+      $$ = List_Create(2, 1, sizeof(double));
+      Symbol TheSymbol;
+      TheSymbol.Name = $2;
+      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
-	yymsg(GERROR, "Unknown variable '%s'", $2) ;
-	d = 0.0 ;
+	yymsg(GERROR, "Unknown variable '%s'", $2);
+	double d = 0.0;
 	List_Add($$, &d);
       }
       else{
-	for(i = 0; i < List_Nbr($5); i++){
-	  j = (int)(*(double*)List_Pointer_Fast($5, i));
+	for(int i = 0; i < List_Nbr($5); i++){
+	  int j = (int)(*(double*)List_Pointer_Fast($5, i));
+	  double *pd;
 	  if((pd = (double*)List_Pointer_Test(pSymbol->val, j))){
-	    d = - *pd;
-	    List_Add($$, &d) ;
+	    double d = - *pd;
+	    List_Add($$, &d);
 	  }
 	  else
-	    yymsg(GERROR, "Uninitialized variable '%s[%d]'", $2, j) ;	  
+	    yymsg(GERROR, "Uninitialized variable '%s[%d]'", $2, j);	  
 	}
       }
       List_Delete($5);
@@ -3247,22 +3652,23 @@ FExpr_Multi :
 RecursiveListOfDouble :
     FExpr
     {
-      $$ = List_Create(2, 1, sizeof(double)) ;
-      List_Add($$, &($1)) ;
+      $$ = List_Create(2, 1, sizeof(double));
+      List_Add($$, &($1));
     }
   | FExpr_Multi
     {
-      $$ = $1 ;
+      $$ = $1;
     }
   | RecursiveListOfDouble ',' FExpr
     {
-      List_Add($$, &($3)) ;
+      List_Add($$, &($3));
     }
   | RecursiveListOfDouble ',' FExpr_Multi
     {
-      for(i = 0; i < List_Nbr($3); i++){
-	List_Read($3, i, &d) ;
-	List_Add($$, &d) ;
+      for(int i = 0; i < List_Nbr($3); i++){
+	double d;
+	List_Read($3, i, &d);
+	List_Add($$, &d);
       }
       List_Delete($3);
     }
@@ -3281,28 +3687,32 @@ ColorExpr :
 /* shift/reduce conflict
   | '{' tSTRING ',' FExpr '}'
     {
+      int flag;
       $$ = Get_ColorForString(ColorString, (int)$4, $2, &flag);
       if(flag) yymsg(GERROR, "Unknown color '%s'", $2);
     }
 */
   | tSTRING
     {
+      int flag;
       $$ = Get_ColorForString(ColorString, -1, $1, &flag);
       if(flag) yymsg(GERROR, "Unknown color '%s'", $1);
     }
   | tSTRING '.' tColor '.' tSTRING 
     {
+      unsigned int (*pColOpt)(int num, int action, unsigned int value);
+      StringXColor *pColCat;
       if(!(pColCat = Get_ColorOptionCategory($1))){
 	yymsg(GERROR, "Unknown color option class '%s'", $1);
-	$$ = 0 ;
+	$$ = 0;
       }
       else{
 	if(!(pColOpt =  (unsigned int (*) (int, int, unsigned int))Get_ColorOption($5, pColCat))){
 	  yymsg(GERROR, "Unknown color option '%s.Color.%s'", $1, $5);
-	  $$ = 0 ;
+	  $$ = 0;
 	}
 	else{
-	  $$ = pColOpt(0, GMSH_GET, 0) ;
+	  $$ = pColOpt(0, GMSH_GET, 0);
 	}
       }
     }
@@ -3315,12 +3725,12 @@ ListOfColor :
     }
   | tSTRING '[' FExpr ']' '.' tColorTable
     {
-      $$ = List_Create(256, 10, sizeof(unsigned int)) ;
+      $$ = List_Create(256, 10, sizeof(unsigned int));
       GmshColorTable *ct = Get_ColorTable((int)$3);
       if(!ct)
 	yymsg(GERROR, "View[%d] does not exist", (int)$3);
       else{
-	for(i = 0; i < ct->size; i++) 
+	for(int i = 0; i < ct->size; i++) 
 	  List_Add($$, &ct->table[i]);
       }
     }
@@ -3329,12 +3739,12 @@ ListOfColor :
 RecursiveListOfColor :
     ColorExpr
     {
-      $$ = List_Create(256, 10, sizeof(unsigned int)) ;
-      List_Add($$, &($1)) ;
+      $$ = List_Create(256, 10, sizeof(unsigned int));
+      List_Add($$, &($1));
     }
   | RecursiveListOfColor ',' ColorExpr
     {
-      List_Add($$, &($3)) ;
+      List_Add($$, &($3));
     }
 ;
 
@@ -3345,15 +3755,16 @@ StringExpr :
     }
   | tStrCat '(' StringExpr ',' StringExpr ')'
     {
-      $$ = (char *)Malloc((strlen($3)+strlen($5)+1)*sizeof(char)) ;
-      strcpy($$, $3) ;  
-      strcat($$, $5) ;
+      $$ = (char *)Malloc((strlen($3)+strlen($5)+1)*sizeof(char));
+      strcpy($$, $3);  
+      strcat($$, $5);
       Free($3);
       Free($5);
     }
   | tStrPrefix '(' StringExpr ')'
     {
-      $$ = (char *)Malloc((strlen($3)+1)*sizeof(char)) ;
+      $$ = (char *)Malloc((strlen($3)+1)*sizeof(char));
+      int i;
       for(i = strlen($3)-1; i >= 0; i--){
 	if($3[i] == '.'){
 	  strncpy($$, $3, i);
@@ -3370,7 +3781,8 @@ StringExpr :
     }
   | tSprintf '(' StringExpr ',' RecursiveListOfDouble ')'
     {
-      i = PrintListOfDouble($3, $5, tmpstring);
+      char tmpstring[1024];
+      int i = PrintListOfDouble($3, $5, tmpstring);
       if(i < 0){
 	yymsg(GERROR, "Too few arguments in Sprintf");
 	$$ = $3;
@@ -3388,13 +3800,15 @@ StringExpr :
     }
   | tSprintf '(' tSTRING '.' tSTRING ')'
     { 
+      char* (*pStrOpt)(int num, int action, char *value);
+      StringXString *pStrCat;
       if(!(pStrCat = Get_StringOptionCategory($3)))
 	yymsg(GERROR, "Unknown string option class '%s'", $3);
       else{
 	if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption($5, pStrCat)))
 	  yymsg(GERROR, "Unknown string option '%s.%s'", $3, $5);
 	else{
-	  str = pStrOpt(0, GMSH_GET, NULL) ;
+	  char *str = pStrOpt(0, GMSH_GET, NULL);
 	  $$ = (char*)Malloc((strlen(str)+1)*sizeof(char));
 	  strcpy($$, str);
 	}
@@ -3402,13 +3816,15 @@ StringExpr :
     }
   | tSprintf '('  tSTRING '[' FExpr ']' '.' tSTRING   ')'
     { 
+      char* (*pStrOpt)(int num, int action, char *value);
+      StringXString *pStrCat;
       if(!(pStrCat = Get_StringOptionCategory($3)))
 	yymsg(GERROR, "Unknown string option class '%s'", $3);
       else{
 	if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption($8, pStrCat)))
 	  yymsg(GERROR, "Unknown string option '%s[%d].%s'", $3, (int)$5, $8);
 	else{
-	  str = pStrOpt((int)$5, GMSH_GET, NULL) ;
+	  char *str = pStrOpt((int)$5, GMSH_GET, NULL);
 	  $$ = (char*)Malloc((strlen(str)+1)*sizeof(char));
 	  strcpy($$, str);
 	}
@@ -3437,14 +3853,14 @@ void InitSymbols(void){
 }
 
 int PrintListOfDouble(char *format, List_T *list, char *buffer){
-  int i, j, k;
+  int j, k;
   char tmp1[256], tmp2[256];
 
-  j=0;
+  j = 0;
   while(j < (int)strlen(format) && format[j]!='%') j++;
   strncpy(buffer, format, j); 
   buffer[j]='\0'; 
-  for(i = 0; i < List_Nbr(list); i++){
+  for(int i = 0; i < List_Nbr(list); i++){
     k = j;
     j++;
     if(j < (int)strlen(format)){
@@ -3486,5 +3902,3 @@ void yymsg(int type, char *fmt, ...){
 
   if(type == GERROR) yyerrorstate=1;
 }
-
-
diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp
index 3fe55afa1b8f4aa693803f854d93f7a1f52a7ba7..f65103ed55a00ef907b0208ae22488b43a22783f 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.180 2004-02-07 01:40:26 geuzaine Exp $
+ * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.181 2004-02-28 00:48:55 geuzaine Exp $
  */
 
 #define FLEX_SCANNER
@@ -1014,8 +1014,7 @@ char *yytext;
 #line 1 "Gmsh.l"
 #define INITIAL 0
 #line 2 "Gmsh.l"
-
-// $Id: Gmsh.yy.cpp,v 1.180 2004-02-07 01:40:26 geuzaine Exp $
+// $Id: Gmsh.yy.cpp,v 1.181 2004-02-28 00:48:55 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -1077,7 +1076,7 @@ void   skipline(void);
 	     && ferror( yyin ) )					\
      YY_FATAL_ERROR( "input in flex scanner failed" );
 
-#line 1081 "Gmsh.yy.cpp"
+#line 1080 "Gmsh.yy.cpp"
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -1228,10 +1227,10 @@ YY_DECL
 	register char *yy_cp, *yy_bp;
 	register int yy_act;
 
-#line 82 "Gmsh.l"
+#line 81 "Gmsh.l"
 
 
-#line 1235 "Gmsh.yy.cpp"
+#line 1234 "Gmsh.yy.cpp"
 
 	if ( yy_init )
 		{
@@ -1316,1036 +1315,1036 @@ do_action:	/* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 84 "Gmsh.l"
+#line 83 "Gmsh.l"
 /* none */;
 	YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 85 "Gmsh.l"
+#line 84 "Gmsh.l"
 return tEND;
 	YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 86 "Gmsh.l"
+#line 85 "Gmsh.l"
 skipcomments();
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 87 "Gmsh.l"
+#line 86 "Gmsh.l"
 skipline();
 	YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 88 "Gmsh.l"
+#line 87 "Gmsh.l"
 {parsestring('\"'); return tBIGSTR;}
 	YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 89 "Gmsh.l"
+#line 88 "Gmsh.l"
 {parsestring('\''); return tBIGSTR;}
 	YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 90 "Gmsh.l"
+#line 89 "Gmsh.l"
 {yylval.d = NEWREG(); return tDOUBLE;}
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 91 "Gmsh.l"
+#line 90 "Gmsh.l"
 {yylval.d = NEWPOINT(); return tDOUBLE;}
 	YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 92 "Gmsh.l"
+#line 91 "Gmsh.l"
 {yylval.d = NEWLINE(); return tDOUBLE;}
 	YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 93 "Gmsh.l"
+#line 92 "Gmsh.l"
 {yylval.d = NEWLINE(); return tDOUBLE;}
 	YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 94 "Gmsh.l"
+#line 93 "Gmsh.l"
 {yylval.d = NEWSURFACE(); return tDOUBLE;}
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 95 "Gmsh.l"
+#line 94 "Gmsh.l"
 {yylval.d = NEWVOLUME(); return tDOUBLE;}
 	YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 96 "Gmsh.l"
+#line 95 "Gmsh.l"
 return tAFFECT;
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 97 "Gmsh.l"
+#line 96 "Gmsh.l"
 return tAFFECTPLUS;
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 98 "Gmsh.l"
+#line 97 "Gmsh.l"
 return tAFFECTMINUS;
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 99 "Gmsh.l"
+#line 98 "Gmsh.l"
 return tAFFECTTIMES;
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 100 "Gmsh.l"
+#line 99 "Gmsh.l"
 return tAFFECTDIVIDE;
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 101 "Gmsh.l"
+#line 100 "Gmsh.l"
 return tDOTS;
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 102 "Gmsh.l"
+#line 101 "Gmsh.l"
 return tDOTS;
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 103 "Gmsh.l"
+#line 102 "Gmsh.l"
 return tCROSSPRODUCT;
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 104 "Gmsh.l"
+#line 103 "Gmsh.l"
 return tOR;
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 105 "Gmsh.l"
+#line 104 "Gmsh.l"
 return tAND;
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 106 "Gmsh.l"
+#line 105 "Gmsh.l"
 return tPLUSPLUS;
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 107 "Gmsh.l"
+#line 106 "Gmsh.l"
 return tMINUSMINUS;
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 108 "Gmsh.l"
+#line 107 "Gmsh.l"
 return tEQUAL;
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 109 "Gmsh.l"
+#line 108 "Gmsh.l"
 return tNOTEQUAL;
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 110 "Gmsh.l"
+#line 109 "Gmsh.l"
 return tAPPROXEQUAL;
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 111 "Gmsh.l"
+#line 110 "Gmsh.l"
 return tLESSOREQUAL;
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 112 "Gmsh.l"
+#line 111 "Gmsh.l"
 return tGREATEROREQUAL;
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 114 "Gmsh.l"
+#line 113 "Gmsh.l"
 return tAcos;
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 115 "Gmsh.l"
+#line 114 "Gmsh.l"
 return tAcos;
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 116 "Gmsh.l"
+#line 115 "Gmsh.l"
 return tAsin;
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 117 "Gmsh.l"
+#line 116 "Gmsh.l"
 return tAsin;
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 118 "Gmsh.l"
+#line 117 "Gmsh.l"
 return tAtan;
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 119 "Gmsh.l"
+#line 118 "Gmsh.l"
 return tAtan;
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 120 "Gmsh.l"
+#line 119 "Gmsh.l"
 return tAtan2;
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 121 "Gmsh.l"
+#line 120 "Gmsh.l"
 return tAtan2;
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 122 "Gmsh.l"
+#line 121 "Gmsh.l"
 return tAttractor;
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 124 "Gmsh.l"
+#line 123 "Gmsh.l"
 return tBezier;
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 125 "Gmsh.l"
+#line 124 "Gmsh.l"
 return tBump;
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 126 "Gmsh.l"
+#line 125 "Gmsh.l"
 return tBSpline;
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 127 "Gmsh.l"
+#line 126 "Gmsh.l"
 return tBounds;
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 129 "Gmsh.l"
+#line 128 "Gmsh.l"
 return tCeil;
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 130 "Gmsh.l"
+#line 129 "Gmsh.l"
 return tCombine;
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 131 "Gmsh.l"
+#line 130 "Gmsh.l"
 return tCosh;
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 132 "Gmsh.l"
+#line 131 "Gmsh.l"
 return tCos;
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 133 "Gmsh.l"
+#line 132 "Gmsh.l"
 return tCharacteristic;
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 134 "Gmsh.l"
+#line 133 "Gmsh.l"
 return tCircle;
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 135 "Gmsh.l"
+#line 134 "Gmsh.l"
 return tCoherence;
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 136 "Gmsh.l"
+#line 135 "Gmsh.l"
 return tComplex;
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 137 "Gmsh.l"
+#line 136 "Gmsh.l"
 return tColor;
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 138 "Gmsh.l"
+#line 137 "Gmsh.l"
 return tColorTable;
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 139 "Gmsh.l"
+#line 138 "Gmsh.l"
 return tSpline;
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 140 "Gmsh.l"
+#line 139 "Gmsh.l"
 return tCall;
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 142 "Gmsh.l"
+#line 141 "Gmsh.l"
 return tDelete;
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 143 "Gmsh.l"
+#line 142 "Gmsh.l"
 return tDilate;
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 144 "Gmsh.l"
+#line 143 "Gmsh.l"
 return tDuplicata;
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 145 "Gmsh.l"
+#line 144 "Gmsh.l"
 return tDraw;
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 147 "Gmsh.l"
+#line 146 "Gmsh.l"
 return tExp;
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 148 "Gmsh.l"
+#line 147 "Gmsh.l"
 return tEllipse;
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 149 "Gmsh.l"
+#line 148 "Gmsh.l"
 return tEllipse;
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 150 "Gmsh.l"
+#line 149 "Gmsh.l"
 return tExtrude;
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 151 "Gmsh.l"
+#line 150 "Gmsh.l"
 return tElliptic;
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 152 "Gmsh.l"
+#line 151 "Gmsh.l"
 return tEndFor;
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 153 "Gmsh.l"
+#line 152 "Gmsh.l"
 return tEndIf;
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 154 "Gmsh.l"
+#line 153 "Gmsh.l"
 return tExit;
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 156 "Gmsh.l"
+#line 155 "Gmsh.l"
 return tFabs;
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 157 "Gmsh.l"
+#line 156 "Gmsh.l"
 return tFloor;
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 158 "Gmsh.l"
+#line 157 "Gmsh.l"
 return tFmod;
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 159 "Gmsh.l"
+#line 158 "Gmsh.l"
 return tFor;
 	YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 160 "Gmsh.l"
+#line 159 "Gmsh.l"
 return tFunction;
 	YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 162 "Gmsh.l"
+#line 161 "Gmsh.l"
 return tHide;
 	YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 163 "Gmsh.l"
+#line 162 "Gmsh.l"
 return tHypot;
 	YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 165 "Gmsh.l"
+#line 164 "Gmsh.l"
 return tIn;
 	YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 166 "Gmsh.l"
+#line 165 "Gmsh.l"
 return tIf;
 	YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 167 "Gmsh.l"
+#line 166 "Gmsh.l"
 return tIntersect;
 	YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 169 "Gmsh.l"
+#line 168 "Gmsh.l"
 return tKnots;
 	YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 171 "Gmsh.l"
+#line 170 "Gmsh.l"
 return tLength;
 	YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 172 "Gmsh.l"
+#line 171 "Gmsh.l"
 return tLine;
 	YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 173 "Gmsh.l"
+#line 172 "Gmsh.l"
 return tLoop;
 	YY_BREAK
 case 81:
 YY_RULE_SETUP
-#line 174 "Gmsh.l"
+#line 173 "Gmsh.l"
 return tLog;
 	YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 175 "Gmsh.l"
+#line 174 "Gmsh.l"
 return tLog10;
 	YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 176 "Gmsh.l"
+#line 175 "Gmsh.l"
 return tLayers;
 	YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 178 "Gmsh.l"
+#line 177 "Gmsh.l"
 return tModulo;
 	YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 179 "Gmsh.l"
+#line 178 "Gmsh.l"
 return tMPI_Rank;
 	YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 180 "Gmsh.l"
+#line 179 "Gmsh.l"
 return tMPI_Size;
 	YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 182 "Gmsh.l"
+#line 181 "Gmsh.l"
 return tNurbs;
 	YY_BREAK
 case 88:
 YY_RULE_SETUP
-#line 184 "Gmsh.l"
+#line 183 "Gmsh.l"
 return tOrder;
 	YY_BREAK
 case 89:
 YY_RULE_SETUP
-#line 186 "Gmsh.l"
+#line 185 "Gmsh.l"
 return tPhysical;
 	YY_BREAK
 case 90:
 YY_RULE_SETUP
-#line 187 "Gmsh.l"
+#line 186 "Gmsh.l"
 return tPi;
 	YY_BREAK
 case 91:
 YY_RULE_SETUP
-#line 188 "Gmsh.l"
+#line 187 "Gmsh.l"
 return tPlane;
 	YY_BREAK
 case 92:
 YY_RULE_SETUP
-#line 189 "Gmsh.l"
+#line 188 "Gmsh.l"
 return tPoint;
 	YY_BREAK
 case 93:
 YY_RULE_SETUP
-#line 190 "Gmsh.l"
+#line 189 "Gmsh.l"
 return tProgression;
 	YY_BREAK
 case 94:
 YY_RULE_SETUP
-#line 191 "Gmsh.l"
+#line 190 "Gmsh.l"
 return tProgression;
 	YY_BREAK
 case 95:
 YY_RULE_SETUP
-#line 192 "Gmsh.l"
+#line 191 "Gmsh.l"
 return tParametric;
 	YY_BREAK
 case 96:
 YY_RULE_SETUP
-#line 193 "Gmsh.l"
+#line 192 "Gmsh.l"
 return tPrintf;
 	YY_BREAK
 case 97:
 YY_RULE_SETUP
-#line 194 "Gmsh.l"
+#line 193 "Gmsh.l"
 return tPlugin;
 	YY_BREAK
 case 98:
 YY_RULE_SETUP
-#line 196 "Gmsh.l"
+#line 195 "Gmsh.l"
 return tRecombine;
 	YY_BREAK
 case 99:
 YY_RULE_SETUP
-#line 197 "Gmsh.l"
+#line 196 "Gmsh.l"
 return tRotate;
 	YY_BREAK
 case 100:
 YY_RULE_SETUP
-#line 198 "Gmsh.l"
+#line 197 "Gmsh.l"
 return tRuled;
 	YY_BREAK
 case 101:
 YY_RULE_SETUP
-#line 199 "Gmsh.l"
+#line 198 "Gmsh.l"
 return tRand;
 	YY_BREAK
 case 102:
 YY_RULE_SETUP
-#line 200 "Gmsh.l"
+#line 199 "Gmsh.l"
 return tReturn;
 	YY_BREAK
 case 103:
 YY_RULE_SETUP
-#line 202 "Gmsh.l"
+#line 201 "Gmsh.l"
 return tSqrt;
 	YY_BREAK
 case 104:
 YY_RULE_SETUP
-#line 203 "Gmsh.l"
+#line 202 "Gmsh.l"
 return tSin;
 	YY_BREAK
 case 105:
 YY_RULE_SETUP
-#line 204 "Gmsh.l"
+#line 203 "Gmsh.l"
 return tSinh;
 	YY_BREAK
 case 106:
 YY_RULE_SETUP
-#line 205 "Gmsh.l"
+#line 204 "Gmsh.l"
 return tSpline;
 	YY_BREAK
 case 107:
 YY_RULE_SETUP
-#line 206 "Gmsh.l"
+#line 205 "Gmsh.l"
 return tSurface;
 	YY_BREAK
 case 108:
 YY_RULE_SETUP
-#line 207 "Gmsh.l"
+#line 206 "Gmsh.l"
 return tSymmetry;
 	YY_BREAK
 case 109:
 YY_RULE_SETUP
-#line 208 "Gmsh.l"
+#line 207 "Gmsh.l"
 return tSprintf;
 	YY_BREAK
 case 110:
 YY_RULE_SETUP
-#line 209 "Gmsh.l"
+#line 208 "Gmsh.l"
 return tStrCat;
 	YY_BREAK
 case 111:
 YY_RULE_SETUP
-#line 210 "Gmsh.l"
+#line 209 "Gmsh.l"
 return tStrPrefix;
 	YY_BREAK
 case 112:
 YY_RULE_SETUP
-#line 211 "Gmsh.l"
+#line 210 "Gmsh.l"
 return tShow;
 	YY_BREAK
 case 113:
 YY_RULE_SETUP
-#line 213 "Gmsh.l"
+#line 212 "Gmsh.l"
 return tTriangulation;
 	YY_BREAK
 case 114:
 YY_RULE_SETUP
-#line 214 "Gmsh.l"
+#line 213 "Gmsh.l"
 return tTransfinite;
 	YY_BREAK
 case 115:
 YY_RULE_SETUP
-#line 215 "Gmsh.l"
+#line 214 "Gmsh.l"
 return tTranslate;
 	YY_BREAK
 case 116:
 YY_RULE_SETUP
-#line 216 "Gmsh.l"
+#line 215 "Gmsh.l"
 return tTanh;
 	YY_BREAK
 case 117:
 YY_RULE_SETUP
-#line 217 "Gmsh.l"
+#line 216 "Gmsh.l"
 return tTan;
 	YY_BREAK
 case 118:
 YY_RULE_SETUP
-#line 218 "Gmsh.l"
+#line 217 "Gmsh.l"
 return tTrimmed;
 	YY_BREAK
 case 119:
 YY_RULE_SETUP
-#line 220 "Gmsh.l"
+#line 219 "Gmsh.l"
 return tUsing;
 	YY_BREAK
 case 120:
 YY_RULE_SETUP
-#line 222 "Gmsh.l"
+#line 221 "Gmsh.l"
 return tVolume;
 	YY_BREAK
 case 121:
 YY_RULE_SETUP
-#line 224 "Gmsh.l"
+#line 223 "Gmsh.l"
 return tWith;
 	YY_BREAK
 case 122:
 YY_RULE_SETUP
-#line 226 "Gmsh.l"
+#line 225 "Gmsh.l"
 return tScalarPoint;
 	YY_BREAK
 case 123:
 YY_RULE_SETUP
-#line 227 "Gmsh.l"
+#line 226 "Gmsh.l"
 return tVectorPoint;
 	YY_BREAK
 case 124:
 YY_RULE_SETUP
-#line 228 "Gmsh.l"
+#line 227 "Gmsh.l"
 return tTensorPoint;
 	YY_BREAK
 case 125:
 YY_RULE_SETUP
-#line 229 "Gmsh.l"
+#line 228 "Gmsh.l"
 return tScalarLine;
 	YY_BREAK
 case 126:
 YY_RULE_SETUP
-#line 230 "Gmsh.l"
+#line 229 "Gmsh.l"
 return tVectorLine;
 	YY_BREAK
 case 127:
 YY_RULE_SETUP
-#line 231 "Gmsh.l"
+#line 230 "Gmsh.l"
 return tTensorLine;
 	YY_BREAK
 case 128:
 YY_RULE_SETUP
-#line 232 "Gmsh.l"
+#line 231 "Gmsh.l"
 return tScalarTriangle;
 	YY_BREAK
 case 129:
 YY_RULE_SETUP
-#line 233 "Gmsh.l"
+#line 232 "Gmsh.l"
 return tVectorTriangle;
 	YY_BREAK
 case 130:
 YY_RULE_SETUP
-#line 234 "Gmsh.l"
+#line 233 "Gmsh.l"
 return tTensorTriangle;
 	YY_BREAK
 case 131:
 YY_RULE_SETUP
-#line 235 "Gmsh.l"
+#line 234 "Gmsh.l"
 return tScalarQuadrangle;
 	YY_BREAK
 case 132:
 YY_RULE_SETUP
-#line 236 "Gmsh.l"
+#line 235 "Gmsh.l"
 return tVectorQuadrangle;
 	YY_BREAK
 case 133:
 YY_RULE_SETUP
-#line 237 "Gmsh.l"
+#line 236 "Gmsh.l"
 return tTensorQuadrangle;
 	YY_BREAK
 case 134:
 YY_RULE_SETUP
-#line 238 "Gmsh.l"
+#line 237 "Gmsh.l"
 return tScalarTetrahedron;
 	YY_BREAK
 case 135:
 YY_RULE_SETUP
-#line 239 "Gmsh.l"
+#line 238 "Gmsh.l"
 return tVectorTetrahedron;
 	YY_BREAK
 case 136:
 YY_RULE_SETUP
-#line 240 "Gmsh.l"
+#line 239 "Gmsh.l"
 return tTensorTetrahedron;
 	YY_BREAK
 case 137:
 YY_RULE_SETUP
-#line 241 "Gmsh.l"
+#line 240 "Gmsh.l"
 return tScalarHexahedron;
 	YY_BREAK
 case 138:
 YY_RULE_SETUP
-#line 242 "Gmsh.l"
+#line 241 "Gmsh.l"
 return tVectorHexahedron;
 	YY_BREAK
 case 139:
 YY_RULE_SETUP
-#line 243 "Gmsh.l"
+#line 242 "Gmsh.l"
 return tTensorHexahedron;
 	YY_BREAK
 case 140:
 YY_RULE_SETUP
-#line 244 "Gmsh.l"
+#line 243 "Gmsh.l"
 return tScalarPrism;
 	YY_BREAK
 case 141:
 YY_RULE_SETUP
-#line 245 "Gmsh.l"
+#line 244 "Gmsh.l"
 return tVectorPrism;
 	YY_BREAK
 case 142:
 YY_RULE_SETUP
-#line 246 "Gmsh.l"
+#line 245 "Gmsh.l"
 return tTensorPrism;
 	YY_BREAK
 case 143:
 YY_RULE_SETUP
-#line 247 "Gmsh.l"
+#line 246 "Gmsh.l"
 return tScalarPyramid;
 	YY_BREAK
 case 144:
 YY_RULE_SETUP
-#line 248 "Gmsh.l"
+#line 247 "Gmsh.l"
 return tVectorPyramid;
 	YY_BREAK
 case 145:
 YY_RULE_SETUP
-#line 249 "Gmsh.l"
+#line 248 "Gmsh.l"
 return tTensorPyramid;
 	YY_BREAK
 case 146:
 YY_RULE_SETUP
-#line 250 "Gmsh.l"
+#line 249 "Gmsh.l"
 return tText2D;
 	YY_BREAK
 case 147:
 YY_RULE_SETUP
-#line 251 "Gmsh.l"
+#line 250 "Gmsh.l"
 return tText3D;
 	YY_BREAK
 case 148:
 YY_RULE_SETUP
-#line 254 "Gmsh.l"
+#line 253 "Gmsh.l"
 return tCARTESIAN_POINT;
 	YY_BREAK
 case 149:
 YY_RULE_SETUP
-#line 255 "Gmsh.l"
+#line 254 "Gmsh.l"
 return tB_SPLINE_SURFACE_WITH_KNOTS;
 	YY_BREAK
 case 150:
 YY_RULE_SETUP
-#line 256 "Gmsh.l"
+#line 255 "Gmsh.l"
 return tB_SPLINE_CURVE_WITH_KNOTS;
 	YY_BREAK
 case 151:
 YY_RULE_SETUP
-#line 257 "Gmsh.l"
+#line 256 "Gmsh.l"
 return tUNSPECIFIED;
 	YY_BREAK
 case 152:
 YY_RULE_SETUP
-#line 258 "Gmsh.l"
+#line 257 "Gmsh.l"
 return tCONTINUOUS;
 	YY_BREAK
 case 153:
 YY_RULE_SETUP
-#line 259 "Gmsh.l"
+#line 258 "Gmsh.l"
 return tFALSE;
 	YY_BREAK
 case 154:
 YY_RULE_SETUP
-#line 260 "Gmsh.l"
+#line 259 "Gmsh.l"
 return tTRUE;
 	YY_BREAK
 case 155:
 YY_RULE_SETUP
-#line 261 "Gmsh.l"
+#line 260 "Gmsh.l"
 return tU;
 	YY_BREAK
 case 156:
 YY_RULE_SETUP
-#line 262 "Gmsh.l"
+#line 261 "Gmsh.l"
 return tV;
 	YY_BREAK
 case 157:
 YY_RULE_SETUP
-#line 263 "Gmsh.l"
+#line 262 "Gmsh.l"
 return tORIENTED_EDGE;
 	YY_BREAK
 case 158:
 YY_RULE_SETUP
-#line 264 "Gmsh.l"
+#line 263 "Gmsh.l"
 return tEDGE_CURVE;
 	YY_BREAK
 case 159:
 YY_RULE_SETUP
-#line 265 "Gmsh.l"
+#line 264 "Gmsh.l"
 return tEDGE_LOOP;
 	YY_BREAK
 case 160:
 YY_RULE_SETUP
-#line 266 "Gmsh.l"
+#line 265 "Gmsh.l"
 return tELLIPSE;
 	YY_BREAK
 case 161:
 YY_RULE_SETUP
-#line 267 "Gmsh.l"
+#line 266 "Gmsh.l"
 return tVERTEX_POINT;
 	YY_BREAK
 case 162:
 YY_RULE_SETUP
-#line 268 "Gmsh.l"
+#line 267 "Gmsh.l"
 return tFACE_OUTER_BOUND;
 	YY_BREAK
 case 163:
 YY_RULE_SETUP
-#line 269 "Gmsh.l"
+#line 268 "Gmsh.l"
 return tFACE_BOUND;
 	YY_BREAK
 case 164:
 YY_RULE_SETUP
-#line 270 "Gmsh.l"
+#line 269 "Gmsh.l"
 return tADVANCED_FACE;
 	YY_BREAK
 case 165:
 YY_RULE_SETUP
-#line 271 "Gmsh.l"
+#line 270 "Gmsh.l"
 return tLine;
 	YY_BREAK
 case 166:
 YY_RULE_SETUP
-#line 272 "Gmsh.l"
+#line 271 "Gmsh.l"
 return tVECTOR;
 	YY_BREAK
 case 167:
 YY_RULE_SETUP
-#line 273 "Gmsh.l"
+#line 272 "Gmsh.l"
 return tDIRECTION;
 	YY_BREAK
 case 168:
 YY_RULE_SETUP
-#line 274 "Gmsh.l"
+#line 273 "Gmsh.l"
 return tAXIS2_PLACEMENT_3D;
 	YY_BREAK
 case 169:
 YY_RULE_SETUP
-#line 275 "Gmsh.l"
+#line 274 "Gmsh.l"
 return tPLANE;
 	YY_BREAK
 case 170:
 YY_RULE_SETUP
-#line 276 "Gmsh.l"
+#line 275 "Gmsh.l"
 return tHEADER;
 	YY_BREAK
 case 171:
 YY_RULE_SETUP
-#line 277 "Gmsh.l"
+#line 276 "Gmsh.l"
 return tDATA;
 	YY_BREAK
 case 172:
 YY_RULE_SETUP
-#line 278 "Gmsh.l"
+#line 277 "Gmsh.l"
 return tFILE_SCHEMA;
 	YY_BREAK
 case 173:
 YY_RULE_SETUP
-#line 279 "Gmsh.l"
+#line 278 "Gmsh.l"
 return tFILE_NAME;
 	YY_BREAK
 case 174:
 YY_RULE_SETUP
-#line 280 "Gmsh.l"
+#line 279 "Gmsh.l"
 return tFILE_DESCRIPTION;
 	YY_BREAK
 case 175:
 YY_RULE_SETUP
-#line 281 "Gmsh.l"
+#line 280 "Gmsh.l"
 return tISO;
 	YY_BREAK
 case 176:
 YY_RULE_SETUP
-#line 282 "Gmsh.l"
+#line 281 "Gmsh.l"
 return tENDISO;
 	YY_BREAK
 case 177:
 YY_RULE_SETUP
-#line 283 "Gmsh.l"
+#line 282 "Gmsh.l"
 return tENDSEC;
 	YY_BREAK
 case 178:
 YY_RULE_SETUP
-#line 284 "Gmsh.l"
+#line 283 "Gmsh.l"
 return tCLOSED_SHELL;
 	YY_BREAK
 case 179:
 YY_RULE_SETUP
-#line 285 "Gmsh.l"
+#line 284 "Gmsh.l"
 return  tADVANCED_BREP_SHAPE_REPRESENTATION;
 	YY_BREAK
 case 180:
 YY_RULE_SETUP
-#line 286 "Gmsh.l"
+#line 285 "Gmsh.l"
 return tMANIFOLD_SOLID_BREP;
 	YY_BREAK
 case 181:
 YY_RULE_SETUP
-#line 287 "Gmsh.l"
+#line 286 "Gmsh.l"
 return tCYLINDRICAL_SURFACE;
 	YY_BREAK
 case 182:
 YY_RULE_SETUP
-#line 288 "Gmsh.l"
+#line 287 "Gmsh.l"
 return tCONICAL_SURFACE;
 	YY_BREAK
 case 183:
 YY_RULE_SETUP
-#line 289 "Gmsh.l"
+#line 288 "Gmsh.l"
 return tTOROIDAL_SURFACE;
 	YY_BREAK
 case 184:
 YY_RULE_SETUP
-#line 290 "Gmsh.l"
+#line 289 "Gmsh.l"
 return tCIRCLE;
 	YY_BREAK
 case 185:
 YY_RULE_SETUP
-#line 291 "Gmsh.l"
+#line 290 "Gmsh.l"
 return tTRIMMED_CURVE;
 	YY_BREAK
 case 186:
 YY_RULE_SETUP
-#line 292 "Gmsh.l"
+#line 291 "Gmsh.l"
 return tGEOMETRIC_SET;
 	YY_BREAK
 case 187:
 YY_RULE_SETUP
-#line 293 "Gmsh.l"
+#line 292 "Gmsh.l"
 return tCOMPOSITE_CURVE_SEGMENT;
 	YY_BREAK
 case 188:
 YY_RULE_SETUP
-#line 294 "Gmsh.l"
+#line 293 "Gmsh.l"
 return tCOMPOSITE_CURVE;
 	YY_BREAK
 case 189:
 YY_RULE_SETUP
-#line 295 "Gmsh.l"
+#line 294 "Gmsh.l"
 return tPRODUCT_DEFINITION;
 	YY_BREAK
 case 190:
 YY_RULE_SETUP
-#line 296 "Gmsh.l"
+#line 295 "Gmsh.l"
 return tPRODUCT_DEFINITION_SHAPE;
 	YY_BREAK
 case 191:
 YY_RULE_SETUP
-#line 297 "Gmsh.l"
+#line 296 "Gmsh.l"
 return tSHAPE_DEFINITION_REPRESENTATION;
 	YY_BREAK
 case 192:
 YY_RULE_SETUP
-#line 299 "Gmsh.l"
+#line 298 "Gmsh.l"
 return tVertex;
 	YY_BREAK
 case 193:
 YY_RULE_SETUP
-#line 300 "Gmsh.l"
+#line 299 "Gmsh.l"
 return tFacet;
 	YY_BREAK
 case 194:
 YY_RULE_SETUP
-#line 301 "Gmsh.l"
+#line 300 "Gmsh.l"
 return tNormal;
 	YY_BREAK
 case 195:
 YY_RULE_SETUP
-#line 302 "Gmsh.l"
+#line 301 "Gmsh.l"
 return tOuter;
 	YY_BREAK
 case 196:
 YY_RULE_SETUP
-#line 303 "Gmsh.l"
+#line 302 "Gmsh.l"
 return tLoopSTL;
 	YY_BREAK
 case 197:
 YY_RULE_SETUP
-#line 304 "Gmsh.l"
+#line 303 "Gmsh.l"
 return tEndLoop;
 	YY_BREAK
 case 198:
 YY_RULE_SETUP
-#line 305 "Gmsh.l"
+#line 304 "Gmsh.l"
 return tEndFacet;
 	YY_BREAK
 case 199:
 YY_RULE_SETUP
-#line 306 "Gmsh.l"
+#line 305 "Gmsh.l"
 {skipline();return tEndSolid;}
 	YY_BREAK
 case 200:
 YY_RULE_SETUP
-#line 307 "Gmsh.l"
+#line 306 "Gmsh.l"
 {skipline();return tSolid;}
 	YY_BREAK
 case 201:
 YY_RULE_SETUP
-#line 309 "Gmsh.l"
+#line 308 "Gmsh.l"
 {yylval.d = (double)atoi((char*)(yytext+1)); return tDOUBLE;}
 	YY_BREAK
 case 202:
-#line 312 "Gmsh.l"
+#line 311 "Gmsh.l"
 case 203:
-#line 313 "Gmsh.l"
+#line 312 "Gmsh.l"
 case 204:
-#line 314 "Gmsh.l"
+#line 313 "Gmsh.l"
 case 205:
 YY_RULE_SETUP
-#line 314 "Gmsh.l"
+#line 313 "Gmsh.l"
 {yylval.d = atof((char *)yytext); return tDOUBLE;}
 	YY_BREAK
 case 206:
 YY_RULE_SETUP
-#line 316 "Gmsh.l"
+#line 315 "Gmsh.l"
 {yylval.c = strsave((char*)yytext); return tSTRING;}
 	YY_BREAK
 case 207:
 YY_RULE_SETUP
-#line 318 "Gmsh.l"
+#line 317 "Gmsh.l"
 return yytext[0];
 	YY_BREAK
 case 208:
 YY_RULE_SETUP
-#line 320 "Gmsh.l"
+#line 319 "Gmsh.l"
 ECHO;
 	YY_BREAK
-#line 2349 "Gmsh.yy.cpp"
+#line 2348 "Gmsh.yy.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -3231,7 +3230,7 @@ int main()
 	return 0;
 	}
 #endif
-#line 320 "Gmsh.l"
+#line 319 "Gmsh.l"
 
 
 #undef yywrap
diff --git a/Parser/Makefile b/Parser/Makefile
index 92f568f36062242a78b529aafe15c3356f24e9d7..15ace3f2790415abd5601d049401817aa3d7f6f4 100644
--- a/Parser/Makefile
+++ b/Parser/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.54 2004-02-07 01:40:26 geuzaine Exp $
+# $Id: Makefile,v 1.55 2004-02-28 00:48:55 geuzaine Exp $
 #
 # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 #
@@ -73,12 +73,13 @@ Gmsh.tab.o: Gmsh.tab.cpp ../Plugin/PluginManager.h ../Plugin/Plugin.h \
   ../Common/ColorTable.h ../DataStr/List.h ../Parallel/ParUtil.h \
   ../Common/Gmsh.h ../DataStr/Malloc.h ../DataStr/Tree.h ../DataStr/avl.h \
   ../DataStr/Tools.h ../Numeric/Numeric.h ../Common/Context.h \
-  ../Geo/Geo.h ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h \
+  ../Geo/Geo.h ../Geo/GeoUtils.h ../Mesh/Mesh.h ../Mesh/Vertex.h \
   ../Mesh/Simplex.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \
-  ../Mesh/Metric.h ../Mesh/Matrix.h ../Geo/DataBase.h ../Graphics/Draw.h \
-  ../Mesh/Create.h ../Geo/StepGeomDatabase.h ../Common/Colors.h Parser.h \
-  OpenFile.h ../Common/CommandLine.h FunctionManager.h ../Common/Timer.h \
-  ../Graphics/CreateFile.h ../Common/Visibility.h
+  ../Mesh/Metric.h ../Mesh/Matrix.h ../Mesh/Nurbs.h ../Geo/CAD.h \
+  ../Graphics/Draw.h ../Mesh/Create.h ../Geo/StepGeomDatabase.h \
+  ../Common/Colors.h Parser.h OpenFile.h ../Common/CommandLine.h \
+  FunctionManager.h ../Common/Timer.h ../Graphics/CreateFile.h \
+  ../Common/Visibility.h
 OpenFile.o: OpenFile.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h \
diff --git a/TODO b/TODO
index 46254647dce4dee73adc450e15f9cb6c89244440..e6c819dc861fd972594c4a1030507f79e8c59b63 100644
--- a/TODO
+++ b/TODO
@@ -1,4 +1,9 @@
-$Id: TODO,v 1.32 2004-02-20 17:57:58 geuzaine Exp $
+$Id: TODO,v 1.33 2004-02-28 00:48:47 geuzaine Exp $
+
+should save only those options that differ from the default values (or
+at least make this behaviour optional)
+
+********************************************************************
 
 degre2: remove from after each 1d/2d/3d step, and add a global
 "add_degre2_nodes" and "remove_degre2_nodes" menu
@@ -39,20 +44,16 @@ The "Symmetry" operation should be renamed "Reflection"
 
 ********************************************************************
 
-We sould somehow keep track (or compute) the min/max for each time
-step.
-
-********************************************************************
-
 Memory leaks, memory leaks
 
 - start with mesh_domain() and the parser
 
 - check all calls to Tree_Replace: we shouldn't use it with trees of
-pointers, since we loose the original pointer when we actually do a
-'replace'
+  pointers, since we loose the original pointer when we actually do a
+  'replace'
 
-- check all calls to Tree_Insert, and test the return value
+- check all calls to Tree_Insert, and test the return value (if we
+  don't do the insert, free the data!)
 
 ********************************************************************
 
diff --git a/benchmarks/2d/machine/Rotor.geo b/benchmarks/2d/machine/Rotor.geo
index ed8c11cdd10bad164e70048ebad847483d6886a9..24fbe473cb1f9cb6b1c742489abf6080ef4166f5 100644
--- a/benchmarks/2d/machine/Rotor.geo
+++ b/benchmarks/2d/machine/Rotor.geo
@@ -5,8 +5,8 @@ NbrSect_ = NbrSect; NbrLine_ = NbrLine; L_[]=L[];
 Printf("Copy lines");
 Call CopyLines;
 
-LineLoop_[] = LineLoop3[] ; NbrLines_ = NbrLines3; PhysNum_ = RotorSlotOpening; dPhysNum_ = 0; 
-Printf("Rotor slot openings : physical surface %g", PhysNum_);
+LineLoop_[] = LineLoop3[] ; NbrLines_ = NbrLines3; PhysNum_ = RotorSlotOpening; dPhysNum_ = 1; 
+Printf("Rotor slot openings");
 Call CopySlot;
 
 geuz1[{0:NbrSect_-1}] = geuz[{0:NbrSect_-1}];
diff --git a/benchmarks/2d/machine/Rotor3kW.geo b/benchmarks/2d/machine/Rotor3kW.geo
index a064cfa4ea095140eb74383e8e0f917b5ad94705..9b62c472626be50fcf7fadc9cc37eca44b7014a1 100644
--- a/benchmarks/2d/machine/Rotor3kW.geo
+++ b/benchmarks/2d/machine/Rotor3kW.geo
@@ -49,8 +49,7 @@ RR = (h2-Rsl*(1+1/Sin(Pi/NbrSect)))/(1-1/Sin(Pi/NbrSect));
 RX2 = RR*Cos(Pi/NbrSect) ;
 RY2 = RR*Sin(Pi/NbrSect) ;
 
-
-Point(0)  = {0,0,0,p};
+//Point(0)  = {0,0,0,p};
 
 dP=newp-1;
 Point(dP+1)  = {d1/2,Y1,0,pslo};
diff --git a/benchmarks/2d/machine/Stator.geo b/benchmarks/2d/machine/Stator.geo
index 06b1cb8135fd519881e55d0b763ea3c05ca1b8b6..c64f7749588e40f7f50fe55fbd75bec7fb9f11ad 100644
--- a/benchmarks/2d/machine/Stator.geo
+++ b/benchmarks/2d/machine/Stator.geo
@@ -10,8 +10,8 @@ Printf("Stator conductors : physical ssurfaces %g to %g", PhysNum_, PhysNum_+(Nb
 Call CopySlot;
 
 
-LineLoop_[] = LineLoop3[] ; NbrLines_ = NbrLines3; PhysNum_ = StatorSlotOpening; dPhysNum_ = 0; 
-Printf("Stator slot openings : physical surface %g", PhysNum_);
+LineLoop_[] = LineLoop3[] ; NbrLines_ = NbrLines3; PhysNum_ = StatorSlotOpening; dPhysNum_ = 1; 
+Printf("Stator slot openings");
 Call CopySlot;
 
 
diff --git a/benchmarks/2d/machine2/Stator1.geo b/benchmarks/2d/machine2/Stator1.geo
index ccc87ef7f566b21442c9fcf1e6b143149361dae8..887cc0b36473a51d2598dbba55fabd305b386d60 100644
--- a/benchmarks/2d/machine2/Stator1.geo
+++ b/benchmarks/2d/machine2/Stator1.geo
@@ -36,7 +36,7 @@ R_=54.9;
 //R_=54.3;
 
 
-Point(0)  = {0,0,0,psl};
+//Point(0)  = {0,0,0,psl};
 
 For i In {0:NbrSect-1}
 For j In {0:1}
diff --git a/benchmarks/3d/p19.geo b/benchmarks/3d/p19.geo
index e8946cf4d66dbe6c34a6b22fbc53a0c33084ea17..ac2e2e30d75552adc616309dff69cf5cd52c1cea 100644
--- a/benchmarks/3d/p19.geo
+++ b/benchmarks/3d/p19.geo
@@ -1,6 +1,6 @@
 // This factor has to be modified in
 // order to control mesh size
-fact     = .1 ;
+fact     = 0.5 ;
 
 rondelle = fact * 0.01;
 iris     = fact * 0.004;
@@ -108,7 +108,7 @@ Coherence;
 
 //Characteristic Length {58,71} = 0.01; 
 
-Point(85) = {0.0,0.0,0.0,1.0};
+//Point(85) = {0.0,0.0,0.0,1.0};
 Surface Loop(158) = {67,27,43,47,51,55,59,63,68};
 Volume(159) = {158};
 Surface Loop(159) = {112,29,84,67,125,92,96,100,104,108,116,120,124};
diff --git a/benchmarks/3d/solid1.geo b/benchmarks/3d/solid1.geo
index 4f90879d24b4602e0b735ca8372b401687ce216e..9d223ba2f76464824110de10fc156f971d0a6644 100644
--- a/benchmarks/3d/solid1.geo
+++ b/benchmarks/3d/solid1.geo
@@ -2761,7 +2761,7 @@ Line Loop (72) = {5353,5348,-5352,-5368};
 Plane Surface (5316) = {72};
 Line Loop (73) = {5364,5349,-5353,-5369};
 Plane Surface (5321) = {73};
-Triangulation Surface (6477) = (120,40) 
+Triangulation Surface {6477} = (120,40) 
 {
 -1.04534E+00, 6.28618E-02, 1.20650E+00,-0.00000E+00,-0.00000E+00,-1.00000E+00,
 -9.70797E-01, 1.37391E-01, 1.20650E+00,-0.00000E+00,-0.00000E+00,-1.00000E+00,
@@ -2926,7 +2926,7 @@ Triangulation Surface (6477) = (120,40)
 3,114,115,116,
 3,117,118,119
 };
-Triangulation Surface (6487) = (237,79) 
+Triangulation Surface {6487} = (237,79) 
 {
 -1.12851E+00, 1.93246E-01, 9.93140E-01, 1.04528E-01,-9.94522E-01,-0.00000E+00,
 -1.10820E+00, 1.94310E-01, 9.93140E-01,-0.00000E+00,-1.00000E+00,-0.00000E+00,
@@ -3247,7 +3247,7 @@ Triangulation Surface (6487) = (237,79)
 3,231,232,233,
 3,234,235,236
 };
-Triangulation Surface (6338) = (216,72) 
+Triangulation Surface {6338} = (216,72) 
 {
 -1.19710E+00, 2.77556E-17, 1.20650E+00, 1.00000E+00,-0.00000E+00,-0.00000E+00,
 -1.19033E+00, 3.40206E-02, 1.20650E+00, 9.23880E-01,-3.82683E-01,-0.00000E+00,
@@ -3540,7 +3540,7 @@ Triangulation Surface (6338) = (216,72)
 3,210,211,212,
 3,213,214,215
 };
-Triangulation Surface (6207) = (240,80) 
+Triangulation Surface {6207} = (240,80) 
 {
 -2.07293E-01, 1.42240E-01, 1.12395E+00,-0.00000E+00,-0.00000E+00, 1.00000E+00,
  1.27000E-01, 1.42240E-01, 1.12395E+00,-0.00000E+00,-0.00000E+00, 1.00000E+00,
@@ -3865,7 +3865,7 @@ Triangulation Surface (6207) = (240,80)
 3,234,235,236,
 3,237,238,239
 };
-Triangulation Surface (6200) = (168,56) 
+Triangulation Surface {6200} = (168,56) 
 {
 -9.14406E-01, 1.09649E-01, 1.22805E+00,-1.88488E-16, 5.70204E-01,-8.21503E-01,
 -9.33188E-01, 8.44194E-02, 1.20650E+00,-2.39940E-01, 7.89082E-01,-5.65489E-01,
@@ -4094,7 +4094,7 @@ Triangulation Surface (6200) = (168,56)
 3,162,163,164,
 3,165,166,167
 };
-Triangulation Surface (6204) = (42,14) 
+Triangulation Surface {6204} = (42,14) 
 {
  1.27000E-01, 1.64110E-01, 1.12830E+00,-1.00000E+00, 0.00000E+00, 0.00000E+00,
  1.27000E-01, 8.94403E-02, 1.20297E+00,-1.00000E+00, 0.00000E+00, 0.00000E+00,
@@ -4155,7 +4155,7 @@ Triangulation Surface (6204) = (42,14)
 3,36,37,38,
 3,39,40,41
 };
-Triangulation Surface (5444) = (498,166) 
+Triangulation Surface {5444} = (498,166) 
 {
 -1.35255E-01, 0.00000E+00, 7.93064E-02, 1.00000E+00,-0.00000E+00,-0.00000E+00,
 -1.35255E-01, 0.00000E+00, 0.00000E+00, 1.00000E+00,-0.00000E+00,-0.00000E+00,
@@ -4824,7 +4824,7 @@ Triangulation Surface (5444) = (498,166)
 3,492,493,494,
 3,495,496,497
 };
-Triangulation Surface (6158) = (204,68) 
+Triangulation Surface {6158} = (204,68) 
 {
 -7.11640E-01,-2.92913E-02, 1.29383E+00,-3.11752E-01, 7.81831E-01,-5.39954E-01,
 -7.27489E-01,-3.65257E-02, 1.26638E+00, 1.11263E-01, 9.74928E-01, 1.92707E-01,
@@ -5101,7 +5101,7 @@ Triangulation Surface (6158) = (204,68)
 3,198,199,200,
 3,201,202,203
 };
-Triangulation Surface (6111) = (120,40) 
+Triangulation Surface {6111} = (120,40) 
 {
 -1.51714E+00,-6.81022E-17, 9.93140E-01,-0.00000E+00,-0.00000E+00,-1.00000E+00,
 -1.30251E+00,-3.23591E-17, 9.93140E-01,-0.00000E+00,-0.00000E+00,-1.00000E+00,
@@ -5266,7 +5266,7 @@ Triangulation Surface (6111) = (120,40)
 3,114,115,116,
 3,117,118,119
 };
-Triangulation Surface (6117) = (216,72) 
+Triangulation Surface {6117} = (216,72) 
 {
 -6.99262E-01, 0.00000E+00, 9.93140E-01,-1.00000E+00,-0.00000E+00,-0.00000E+00,
 -7.15827E-01, 1.15212E-01, 9.93140E-01,-9.59493E-01,-2.81733E-01,-0.00000E+00,
@@ -5559,7 +5559,7 @@ Triangulation Surface (6117) = (216,72)
 3,210,211,212,
 3,213,214,215
 };
-Triangulation Surface (6078) = (96,32) 
+Triangulation Surface {6078} = (96,32) 
 {
 -1.02655E+00, 1.97119E-01, 1.63830E+00,-0.00000E+00,-0.00000E+00, 1.00000E+00,
 -1.07418E+00, 8.21329E-02, 1.63830E+00,-0.00000E+00,-0.00000E+00, 1.00000E+00,
@@ -5692,7 +5692,7 @@ Triangulation Surface (6078) = (96,32)
 3,90,91,92,
 3,93,94,95
 };
-Triangulation Surface (6084) = (96,32) 
+Triangulation Surface {6084} = (96,32) 
 {
 -1.32156E+00, 0.00000E+00, 1.63830E+00, 1.00000E+00,-0.00000E+00,-0.00000E+00,
 -1.30532E+00, 8.16493E-02, 1.63830E+00, 9.23880E-01,-3.82683E-01,-0.00000E+00,
@@ -5825,7 +5825,7 @@ Triangulation Surface (6084) = (96,32)
 3,90,91,92,
 3,93,94,95
 };
-Triangulation Surface (5499) = (96,32) 
+Triangulation Surface {5499} = (96,32) 
 {
 -1.89551E-01, 7.85146E-02, 1.49352E+00,-0.00000E+00,-0.00000E+00, 1.00000E+00,
 -1.24959E-01, 5.17598E-02, 1.49352E+00,-0.00000E+00,-0.00000E+00, 1.00000E+00,
@@ -5958,7 +5958,7 @@ Triangulation Surface (5499) = (96,32)
 3,90,91,92,
 3,93,94,95
 };
-Triangulation Surface (5505) = (192,64) 
+Triangulation Surface {5505} = (192,64) 
 {
 -2.05169E-01, 0.00000E+00, 1.49352E+00, 1.00000E+00,-0.00000E+00,-0.00000E+00,
 -1.89551E-01, 7.85146E-02, 1.49352E+00, 9.23880E-01,-3.82683E-01,-0.00000E+00,
@@ -6219,7 +6219,7 @@ Triangulation Surface (5505) = (192,64)
 3,186,187,188,
 3,189,190,191
 };
-Triangulation Surface (1) = (138,46) 
+Triangulation Surface {1} = (138,46) 
 {
  2.81940E-01,-6.37540E-01, 1.45034E+00, 0.00000E+00, 0.00000E+00, 1.00000E+00,
  4.53523E-01,-4.73034E-01, 1.45034E+00, 0.00000E+00, 0.00000E+00, 1.00000E+00,
@@ -6408,7 +6408,7 @@ Triangulation Surface (1) = (138,46)
 3,132,133,134,
 3,135,136,137
 };
-Triangulation Surface (114) = (75,25) 
+Triangulation Surface {114} = (75,25) 
 {
 -5.49570E-01,-3.56956E-01, 8.50900E-01,-8.38628E-01,-5.44705E-01, 0.00000E+00,
 -4.53523E-01,-4.73034E-01, 8.50900E-01,-6.92064E-01,-7.21836E-01,-0.00000E+00,
@@ -6513,7 +6513,7 @@ Triangulation Surface (114) = (75,25)
 3,69,70,71,
 3,72,73,74
 };
-Triangulation Surface (374) = (318,106) 
+Triangulation Surface {374} = (318,106) 
 {
 -3.11150E-01, 0.00000E+00, 2.71272E+00,-1.00000E+00, 0.00000E+00, 0.00000E+00,
 -2.94291E-01, 1.01030E-01, 2.71272E+00,-9.45817E-01, 3.24699E-01, 0.00000E+00,
@@ -6942,7 +6942,7 @@ Triangulation Surface (374) = (318,106)
 3,312,313,314,
 3,315,316,317
 };
-Triangulation Surface (380) = (96,32) 
+Triangulation Surface {380} = (96,32) 
 {
  8.63615E-17,-3.11150E-01, 2.71272E+00, 0.00000E+00, 0.00000E+00, 1.00000E+00,
  1.19072E-01,-2.87465E-01, 2.71272E+00, 0.00000E+00, 0.00000E+00, 1.00000E+00,
@@ -7075,7 +7075,7 @@ Triangulation Surface (380) = (96,32)
 3,90,91,92,
 3,93,94,95
 };
-Triangulation Surface (333) = (96,32) 
+Triangulation Surface {333} = (96,32) 
 {
  2.42018E-01, 2.42018E-01, 1.60274E+00, 0.00000E+00, 0.00000E+00, 1.00000E+00,
  2.20016E-01, 2.20016E-01, 1.60274E+00, 0.00000E+00, 0.00000E+00, 1.00000E+00,
@@ -7208,7 +7208,7 @@ Triangulation Surface (333) = (96,32)
 3,90,91,92,
 3,93,94,95
 };
-Triangulation Surface (327) = (192,64) 
+Triangulation Surface {327} = (192,64) 
 {
 -3.42265E-01, 0.00000E+00, 1.60274E+00,-1.00000E+00, 0.00000E+00, 0.00000E+00,
 -3.25513E-01, 1.05766E-01, 1.60274E+00,-9.51057E-01, 3.09017E-01, 0.00000E+00,
@@ -7469,7 +7469,7 @@ Triangulation Surface (327) = (192,64)
 3,186,187,188,
 3,189,190,191
 };
-Triangulation Surface (283) = (120,40) 
+Triangulation Surface {283} = (120,40) 
 {
 -3.79571E-01, 1.57224E-01, 5.46100E-01, 0.00000E+00, 0.00000E+00, 1.00000E+00,
 -3.12880E-01, 2.57034E-01, 5.46100E-01, 0.00000E+00, 0.00000E+00, 1.00000E+00,
@@ -7634,7 +7634,7 @@ Triangulation Surface (283) = (120,40)
 3,114,115,116,
 3,117,118,119
 };
-Triangulation Surface (272) = (120,40) 
+Triangulation Surface {272} = (120,40) 
 {
 -4.07731E-01,-1.68888E-01, 0.00000E+00,-0.00000E+00,-0.00000E+00,-1.00000E+00,
 -1.24959E-01,-5.17598E-02, 0.00000E+00,-0.00000E+00,-0.00000E+00,-1.00000E+00,
@@ -7799,7 +7799,7 @@ Triangulation Surface (272) = (120,40)
 3,114,115,116,
 3,117,118,119
 };
-Triangulation Surface (277) = (228,76) 
+Triangulation Surface {277} = (228,76) 
 {
 -4.41325E-01, 0.00000E+00, 5.46100E-01,-1.00000E+00, 0.00000E+00, 0.00000E+00,
 -4.24959E-01, 1.19068E-01, 5.46100E-01,-9.62917E-01, 2.69797E-01, 0.00000E+00,
@@ -8108,7 +8108,7 @@ Triangulation Surface (277) = (228,76)
 3,222,223,224,
 3,225,226,227
 };
-Triangulation Surface (76) = (114,38) 
+Triangulation Surface {76} = (114,38) 
 {
  6.46815E-01, 1.05239E-01, 8.50900E-01,-0.00000E+00,-0.00000E+00,-1.00000E+00,
  3.97007E-01, 6.95668E-02, 8.50900E-01,-0.00000E+00,-0.00000E+00,-1.00000E+00,
@@ -8265,7 +8265,7 @@ Triangulation Surface (76) = (114,38)
 3,108,109,110,
 3,111,112,113
 };
-Triangulation Surface (132) = (6,2) 
+Triangulation Surface {132} = (6,2) 
 {
 -2.81940E-01,-6.37540E-01, 1.45034E+00, 0.00000E+00,-1.00000E+00, 0.00000E+00,
 -2.81940E-01,-6.37540E-01, 8.50900E-01, 0.00000E+00,-1.00000E+00, 0.00000E+00,
@@ -8278,7 +8278,7 @@ Triangulation Surface (132) = (6,2)
 3,0,1,2,
 3,3,4,5
 };
-Triangulation Surface (129) = (6,2) 
+Triangulation Surface {129} = (6,2) 
 {
  2.81940E-01,-6.37540E-01, 8.50900E-01, 6.92064E-01,-7.21836E-01, 0.00000E+00,
  4.53523E-01,-4.73034E-01, 8.50900E-01, 6.92064E-01,-7.21836E-01, 0.00000E+00,
@@ -8291,7 +8291,7 @@ Triangulation Surface (129) = (6,2)
 3,0,1,2,
 3,3,4,5
 };
-Triangulation Surface (126) = (66,22) 
+Triangulation Surface {126} = (66,22) 
 {
  4.53523E-01, 4.73034E-01, 1.45034E+00, 6.92064E-01, 7.21836E-01, 0.00000E+00,
  5.49570E-01, 3.56956E-01, 1.45034E+00, 8.38628E-01, 5.44705E-01, 0.00000E+00,
@@ -8384,7 +8384,7 @@ Triangulation Surface (126) = (66,22)
 3,60,61,62,
 3,63,64,65
 };
-Triangulation Surface (123) = (6,2) 
+Triangulation Surface {123} = (6,2) 
 {
  4.53523E-01, 4.73034E-01, 8.50900E-01, 6.92064E-01, 7.21836E-01, 0.00000E+00,
  2.81940E-01, 6.37540E-01, 8.50900E-01, 6.92064E-01, 7.21836E-01, 0.00000E+00,
@@ -8397,7 +8397,7 @@ Triangulation Surface (123) = (6,2)
 3,0,1,2,
 3,3,4,5
 };
-Triangulation Surface (120) = (6,2) 
+Triangulation Surface {120} = (6,2) 
 {
 -2.81940E-01, 6.37540E-01, 8.50900E-01, 0.00000E+00, 1.00000E+00, 0.00000E+00,
 -2.81940E-01, 6.37540E-01, 1.45034E+00, 0.00000E+00, 1.00000E+00, 0.00000E+00,
@@ -8410,7 +8410,7 @@ Triangulation Surface (120) = (6,2)
 3,0,1,2,
 3,3,4,5
 };
-Triangulation Surface (117) = (6,2) 
+Triangulation Surface {117} = (6,2) 
 {
 -2.81940E-01, 6.37540E-01, 8.50900E-01,-6.92064E-01, 7.21836E-01, 0.00000E+00,
 -4.53523E-01, 4.73034E-01, 8.50900E-01,-6.92064E-01, 7.21836E-01, 0.00000E+00,
@@ -8423,7 +8423,7 @@ Triangulation Surface (117) = (6,2)
 3,0,1,2,
 3,3,4,5
 };
-Triangulation Surface (71) = (6,2) 
+Triangulation Surface {71} = (6,2) 
 {
 -4.53523E-01,-4.73034E-01, 8.50900E-01,-6.92064E-01,-7.21836E-01, 0.00000E+00,
 -2.81940E-01,-6.37540E-01, 8.50900E-01,-6.92064E-01,-7.21836E-01, 0.00000E+00,
@@ -8436,7 +8436,7 @@ Triangulation Surface (71) = (6,2)
 3,0,1,2,
 3,3,4,5
 };
-Triangulation Surface (229) = (216,72) 
+Triangulation Surface {229} = (216,72) 
 {
 -4.10845E-01, 0.00000E+00, 8.50900E-01,-1.00000E+00, 0.00000E+00, 0.00000E+00,
 -3.94203E-01, 1.15748E-01, 8.50900E-01,-9.59493E-01, 2.81733E-01, 0.00000E+00,
@@ -8729,7 +8729,7 @@ Triangulation Surface (229) = (216,72)
 3,210,211,212,
 3,213,214,215
 };
-Triangulation Surface (5266) = (105,35) 
+Triangulation Surface {5266} = (105,35) 
 {
 -1.06301E+00, 4.26720E-01, 9.01700E-01,-0.00000E+00,-0.00000E+00,-1.00000E+00,
 -4.97347E-01, 4.26720E-01, 9.01700E-01,-0.00000E+00,-0.00000E+00,-1.00000E+00,
@@ -8874,7 +8874,7 @@ Triangulation Surface (5266) = (105,35)
 3,99,100,101,
 3,102,103,104
 };
-Triangulation Surface (5271) = (6,2) 
+Triangulation Surface {5271} = (6,2) 
 {
 -4.95300E-01,-4.26720E-01, 1.45034E+00, 9.51597E-01,-3.07347E-01, 0.00000E+00,
 -4.49983E-01,-2.86411E-01, 1.45034E+00, 9.51597E-01,-3.07347E-01, 0.00000E+00,
@@ -8887,7 +8887,7 @@ Triangulation Surface (5271) = (6,2)
 3,0,1,2,
 3,3,4,5
 };
-Triangulation Surface (5276) = (6,2) 
+Triangulation Surface {5276} = (6,2) 
 {
 -4.49983E-01, 2.86411E-01, 1.45034E+00, 9.51597E-01, 3.07347E-01, 0.00000E+00,
 -4.95300E-01, 4.26720E-01, 1.45034E+00, 9.51597E-01, 3.07347E-01, 0.00000E+00,
@@ -8900,7 +8900,7 @@ Triangulation Surface (5276) = (6,2)
 3,0,1,2,
 3,3,4,5
 };
-Triangulation Surface (5281) = (42,14) 
+Triangulation Surface {5281} = (42,14) 
 {
 -4.49983E-01,-2.86411E-01, 1.45034E+00, 8.43612E-01, 5.36953E-01, 0.00000E+00,
 -5.02849E-01,-1.77928E-01, 1.45034E+00, 9.42724E-01, 3.33574E-01,-0.00000E+00,
@@ -8961,7 +8961,7 @@ Triangulation Surface (5281) = (42,14)
 3,36,37,38,
 3,39,40,41
 };
-Triangulation Surface (5286) = (30,10) 
+Triangulation Surface {5286} = (30,10) 
 {
 -5.45113E-01,-4.26720E-01, 9.01700E-01,-0.00000E+00,-1.00000E+00,-0.00000E+00,
 -5.45113E-01,-4.26720E-01, 1.40970E+00,-0.00000E+00,-1.00000E+00,-0.00000E+00,
@@ -9006,7 +9006,7 @@ Triangulation Surface (5286) = (30,10)
 3,24,25,26,
 3,27,28,29
 };
-Triangulation Surface (5291) = (30,10) 
+Triangulation Surface {5291} = (30,10) 
 {
 -5.45113E-01, 4.26720E-01, 1.91770E+00,-0.00000E+00, 1.00000E+00,-0.00000E+00,
 -5.45113E-01, 4.26720E-01, 1.40970E+00,-0.00000E+00, 1.00000E+00,-0.00000E+00,
@@ -9051,7 +9051,7 @@ Triangulation Surface (5291) = (30,10)
 3,24,25,26,
 3,27,28,29
 };
-Triangulation Surface (5296) = (108,36) 
+Triangulation Surface {5296} = (108,36) 
 {
 -4.95300E-01,-4.26720E-01, 1.91770E+00, 0.00000E+00, 0.00000E+00, 1.00000E+00,
 -9.57334E-01,-1.50868E-01, 1.91770E+00, 0.00000E+00, 0.00000E+00, 1.00000E+00,
@@ -9200,7 +9200,7 @@ Triangulation Surface (5296) = (108,36)
 3,102,103,104,
 3,105,106,107
 };
-Triangulation Surface (5301) = (12,4) 
+Triangulation Surface {5301} = (12,4) 
 {
 -1.25222E+00,-4.26720E-01, 9.01700E-01, 1.00000E+00,-0.00000E+00,-0.00000E+00,
 -1.25222E+00,-4.26720E-01, 1.40970E+00, 1.00000E+00,-0.00000E+00,-0.00000E+00,
@@ -9221,7 +9221,7 @@ Triangulation Surface (5301) = (12,4)
 3,6,7,8,
 3,9,10,11
 };
-Triangulation Surface (5306) = (12,4) 
+Triangulation Surface {5306} = (12,4) 
 {
 -1.25222E+00,-5.35940E-01, 9.01700E-01,-0.00000E+00,-1.00000E+00,-0.00000E+00,
 -1.25222E+00,-5.35940E-01, 1.40970E+00,-0.00000E+00,-1.00000E+00,-0.00000E+00,
@@ -9242,7 +9242,7 @@ Triangulation Surface (5306) = (12,4)
 3,6,7,8,
 3,9,10,11
 };
-Triangulation Surface (5311) = (24,8) 
+Triangulation Surface {5311} = (24,8) 
 {
 -1.63551E+00, 5.35940E-01, 1.91770E+00,-1.00000E+00,-0.00000E+00,-0.00000E+00,
 -1.63551E+00, 5.35940E-01, 1.40970E+00,-1.00000E+00,-0.00000E+00,-0.00000E+00,
@@ -9279,7 +9279,7 @@ Triangulation Surface (5311) = (24,8)
 3,18,19,20,
 3,21,22,23
 };
-Triangulation Surface (5316) = (12,4) 
+Triangulation Surface {5316} = (12,4) 
 {
 -1.25222E+00, 5.35940E-01, 1.91770E+00,-0.00000E+00, 1.00000E+00,-0.00000E+00,
 -1.25222E+00, 5.35940E-01, 1.40970E+00,-0.00000E+00, 1.00000E+00,-0.00000E+00,
@@ -9300,7 +9300,7 @@ Triangulation Surface (5316) = (12,4)
 3,6,7,8,
 3,9,10,11
 };
-Triangulation Surface (5321) = (12,4) 
+Triangulation Surface {5321} = (12,4) 
 {
 -1.25222E+00, 5.35940E-01, 9.01700E-01, 1.00000E+00,-0.00000E+00,-0.00000E+00,
 -1.25222E+00, 5.35940E-01, 1.40970E+00, 1.00000E+00,-0.00000E+00,-0.00000E+00,
diff --git a/benchmarks/3d/solid2.geo b/benchmarks/3d/solid2.geo
index 8a9496ff81009eb81686c06c1dacef1c78f46ca6..568524e23d9d2bccae820f6fb4881d0ed6c71899 100644
--- a/benchmarks/3d/solid2.geo
+++ b/benchmarks/3d/solid2.geo
@@ -359,7 +359,7 @@ Plane Surface (92) = {13,14};
 Line Loop (15) = {61};
 Line Loop (16) = {62};
 Plane Surface (104) = {15,16};
-Triangulation Surface (2) = (11592,3864) 
+Triangulation Surface {2} = (11592,3864) 
 {
  4.53788E-01, 2.09945E-01,-6.12303E-17,-9.07575E-01,-4.19889E-01,-1.22461E-16,
  4.28429E-01, 2.57777E-01,-6.12303E-17,-8.56857E-01,-5.15554E-01,-1.22461E-16,
@@ -15820,7 +15820,7 @@ Triangulation Surface (2) = (11592,3864)
 3,11586,11587,11588,
 3,11589,11590,11591
 };
-Triangulation Surface (122) = (303,101) 
+Triangulation Surface {122} = (303,101) 
 {
  1.15853E+00,-1.98904E-01, 2.09057E-02,-0.00000E+00, 9.94522E-01,-1.04528E-01,
  1.15853E+00,-1.90211E-01,-6.18034E-02,-0.00000E+00, 9.51057E-01, 3.09017E-01,
@@ -16229,7 +16229,7 @@ Triangulation Surface (122) = (303,101)
 3,297,298,299,
 3,300,301,302
 };
-Triangulation Surface (116) = (360,120) 
+Triangulation Surface {116} = (360,120) 
 {
 -2.20717E-01, 1.09959E+00,-2.03184E-01, 7.35724E-01,-0.00000E+00, 6.77282E-01,
 -1.83178E-01, 5.29249E-01,-2.37583E-01, 6.10593E-01,-0.00000E+00, 7.91944E-01,
@@ -16714,7 +16714,7 @@ Triangulation Surface (116) = (360,120)
 3,354,355,356,
 3,357,358,359
 };
-Triangulation Surface (92) = (360,120) 
+Triangulation Surface {92} = (360,120) 
 {
 -1.42784E-01,-7.69678E-01,-2.63842E-01, 4.75947E-01,-0.00000E+00, 8.79474E-01,
 -1.26073E-01,-1.41379E+00,-2.72223E-01, 4.20245E-01,-0.00000E+00, 9.07411E-01,
@@ -17199,7 +17199,7 @@ Triangulation Surface (92) = (360,120)
 3,354,355,356,
 3,357,358,359
 };
-Triangulation Surface (104) = (303,101) 
+Triangulation Surface {104} = (303,101) 
 {
 -7.85971E-01,-1.90211E-01,-6.18034E-02,-0.00000E+00, 9.51057E-01, 3.09017E-01,
 -7.85971E-01,-1.48629E-01,-1.33826E-01,-0.00000E+00, 7.43145E-01, 6.69131E-01,
diff --git a/benchmarks/3d/surface3113.geo b/benchmarks/3d/surface3113.geo
index e57c0588d5a9c82407606530772053ee430a7476..b28d8680fd88f47024dc1d2de610adc2bfad7ec5 100644
--- a/benchmarks/3d/surface3113.geo
+++ b/benchmarks/3d/surface3113.geo
@@ -108,5 +108,3 @@ Circle (2214) = {2213,2211,2214} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00};
 Circle (2215) = {2214,2211,2215} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00};
 Line Loop (1003113) = {-26, -6, 25, 16,216,213,214,215,416,413,414,415,616,613,614,615,816,813,814,815,1016,1013,1014,1015,1216,1213,1214,1215,1416,1413,1414,1415,1616,1613,1614,1615,1816,1813,1814,1815,2016,2013,2014,2015,2216,2213,2214,2215};
 Plane Surface (3113) = {1003113};
-Line Loop (1003113) = {-26, -6, 25, 16,216,213,214,215,416,413,414,415,616,613,614,615,816,813,814,815,1016,1013,1014,1015,1216,1213,1214,1215,1416,1413,1414,1415,1616,1613,1614,1615,1816,1813,1814,1815,2016,2013,2014,2015,2216,2213,2214,2215};
-Plane Surface (3113) = {1003113};
diff --git a/benchmarks/misc/500views.geo b/benchmarks/misc/500views.geo
index 233757d77883777d5ec498a3ccdbf5238e5e0299..e1601849ba2eada29b69310441facffd4efb903b 100644
--- a/benchmarks/misc/500views.geo
+++ b/benchmarks/misc/500views.geo
@@ -6,7 +6,8 @@ View.Visible = 0;
 
 For i In {1:250}
 
-Include "../../tutorial/view1.pos" ;
-Include "../../tutorial/view2.pos" ;
+Printf("i=%g", i);
+Merge "../../tutorial/view1.pos" ;
+Merge "../../tutorial/view2.pos" ;
 
 EndFor
diff --git a/benchmarks/stl/Coupe.stl.gz b/benchmarks/stl/Coupe.stl.gz
new file mode 100644
index 0000000000000000000000000000000000000000..8a93b20ce0a723107282f8ece9adf44ac27aa52b
Binary files /dev/null and b/benchmarks/stl/Coupe.stl.gz differ
diff --git a/benchmarks/stl/TwoObjects.stl.gz b/benchmarks/stl/TwoObjects.stl.gz
new file mode 100644
index 0000000000000000000000000000000000000000..510ba10412c285527e3c4aa213cf2b4ab4a1e523
Binary files /dev/null and b/benchmarks/stl/TwoObjects.stl.gz differ
diff --git a/doc/CREDITS b/doc/CREDITS
index 2d89cbd527c8065ef5d2b27e3a7a65c0ae6168a9..bc8b93bcfb480665d63b68fef6bdee81b71f4636 100644
--- a/doc/CREDITS
+++ b/doc/CREDITS
@@ -1,4 +1,4 @@
-$Id: CREDITS,v 1.10 2004-02-20 17:58:01 geuzaine Exp $
+$Id: CREDITS,v 1.11 2004-02-28 00:48:57 geuzaine Exp $
 
              Gmsh is copyright (C) 1997-2004 
 
@@ -54,9 +54,10 @@ Special thanks to David Colignon <David.Colignon at univ.u-3mrs.fr>
 for new colormaps; Patrick Dular <patrick.dular at ulg.ac.be> for
 transfinite mesh bug fixes; Laurent Stainier <l.stainier at ulg.ac.be>
 for the Mac OS port and the tensor display code; Nicolas Tardieu
-<nicolas.tardieu at edf.fr> and Pierre Badel <badel at freesurf.fr>
-for help with the GSL integration and Marc Ume <Marc.Ume at
-digitalgraphics.be> for the original list code.
+<nicolas.tardieu at edf.fr> for help with the GSL integration and the
+new STL to elementary geometry interface; Pierre Badel <badel at
+freesurf.fr> for help with the GSL integration; and Marc Ume <Marc.Ume
+at digitalgraphics.be> for the original list code.
 
 Special thanks also to Bill Spitzak <spitzak at
 users.sourceforge.net>, Michael Sweet <easysw at
diff --git a/doc/VERSIONS b/doc/VERSIONS
index b347d4a3a6241a16b2f83d1e636c1f49292ec029..c6040da26c6909ccff2bac66278d7dfdde5740ed 100644
--- a/doc/VERSIONS
+++ b/doc/VERSIONS
@@ -1,4 +1,4 @@
-$Id: VERSIONS,v 1.185 2004-02-20 17:58:01 geuzaine Exp $
+$Id: VERSIONS,v 1.186 2004-02-28 00:48:57 geuzaine Exp $
 
 New in 1.51: initial support for visualizing mesh partitions;
 integrated version 2.0 of the MSH mesh file format; new option to
@@ -6,8 +6,11 @@ compute post-processing ranges (min/max) per time step; Multiple views
 can now be combined into multi time step ones (e.g. for programs that
 generate data one time step at a time); new syntax: #var[] returns the
 size of the list var[]; enhanced "gmsh -convert"; temporary and error
-files are now created in home directory to avoid file permission
-issues; new 3D arrows; better lighting support;
+files are now created in the home directory to avoid file permission
+issues; new 3D arrows; better lighting support; STL facets can now be
+converted into individual geometrical surfaces; many other small
+improvements and bug fixes (multi timestep tensors, color by physical
+entity, parser cleanup, etc.);
 
 New in 1.50: small changes to the visibility browser + made visibility
 scriptable (new Show/Hide commands); fixed (rare) crash when deleting
diff --git a/doc/texinfo/gmsh.texi b/doc/texinfo/gmsh.texi
index 5a8ebd42b04e2dc0ffd5d81d66e233bfdeee15a7..1b1878704ea3b5a72115a5c37c42060c80991b56 100644
--- a/doc/texinfo/gmsh.texi
+++ b/doc/texinfo/gmsh.texi
@@ -1,5 +1,5 @@
 \input texinfo.tex @c -*-texinfo-*-
-@c $Id: gmsh.texi,v 1.98 2004-02-07 01:40:34 geuzaine Exp $
+@c $Id: gmsh.texi,v 1.99 2004-02-28 00:48:57 geuzaine Exp $
 @c
 @c Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 @c
@@ -1512,12 +1512,8 @@ the ruled surface's identification number; the @var{expression-list} on the
 right hand side should the identification number of a single line loop,
 composed of either three or four elementary lines.
 
-@c todo:
-@c @item Triangulation Surface ( @var{expression} ) = ( @var{expression}, @var{expression} ) @{ @var{expression-list} @} @{ @var{expression-list} @};
-
 @c todo:
 @c @item Trimmed Surface ( @var{expression} ) = @{ @var{expression}, @{ @var{expression-list} @} @};
-
 @item Surface Loop ( @var{expression} ) = @{ @var{expression-list} @};
 Creates a surface loop (a shell). The @var{expression} inside the
 parentheses is the surface loop's identification number; the
@@ -1704,6 +1700,12 @@ Show the entity @var{char-expression}, if @code{General.VisibilityMode} is
 set to @code{0} or @code{1} (@var{char-expression} can for example be
 @code{"*"}).
 
+@c @item Triangulation Surface @{ @var{expression} @} = ( @var{expression}, @var{expression} ) @{ @var{expression-list} @} @{ @var{expression-list} @};
+@c Adds a triangulation to the surface @var{expression}, originally defined by
+@c a list of edge loops (see @ref{Surfaces}; the surface may be planar or
+@c anything else). The triangulation is used to represent the shape of the
+@c surface.
+
 @c todo:
 @c @item Intersect;
 @c Intersects all lines.
diff --git a/doc/texinfo/opt_geometry.texi b/doc/texinfo/opt_geometry.texi
index 4f84c1600c66ea65814dcb61a869f9b51da86d06..67a8e3a2982a34ad9b689e119b4c65083ed96c7a 100644
--- a/doc/texinfo/opt_geometry.texi
+++ b/doc/texinfo/opt_geometry.texi
@@ -104,6 +104,16 @@ Global geometry scaling factor@*
 Default value: @code{1}@*
 Saved in: @code{General.OptionsFileName}
 
+@item Geometry.StlCreateElementary
+Treat each STL input face as a new geometrical surface@*
+Default value: @code{1}@*
+Saved in: @code{General.OptionsFileName}
+
+@item Geometry.StlCreatePhysical
+Automatically create physical entities when importing STL faces as geometrical surfaces@*
+Default value: @code{1}@*
+Saved in: @code{General.OptionsFileName}
+
 @item Geometry.Surfaces
 Display geometry surfaces?@*
 Default value: @code{0}@*
diff --git a/doc/texinfo/opt_mesh.texi b/doc/texinfo/opt_mesh.texi
index 2d4d75f6dc28da30ca013299aadff437077957ba..496096198627ce047b8c1d19b95b5fc6a4f1f595 100644
--- a/doc/texinfo/opt_mesh.texi
+++ b/doc/texinfo/opt_mesh.texi
@@ -20,7 +20,7 @@ Default value: @code{1}@*
 Saved in: @code{General.OptionsFileName}
 
 @item Mesh.ColorCarousel
-Use a `color by region' coloring scheme (0=no, 1=by geometrical entity, 2=by partition)@*
+Color mesh by region? (0=no, 1=by elementary entity, 2=by physical entity, 3=by partition)@*
 Default value: @code{1}@*
 Saved in: @code{General.OptionsFileName}