From a9c3f6a13b815161e537d51ec3054927a889eeaf Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Sat, 14 Jan 2006 22:32:58 +0000
Subject: [PATCH] fixed ugly extrusion syntax (finally!)

extrusions are now specified in the same way as all other transformations
(the old syntax is still available, but is deprecated)
---
 Fltk/Callbacks.cpp               |   34 +-
 Geo/CAD.cpp                      |  119 +-
 Geo/CAD.h                        |   53 +-
 Geo/Geo.cpp                      |   16 +-
 Geo/Geo.h                        |    4 +-
 Parser/Gmsh.tab.cpp              | 4490 +++++++++++++++---------------
 Parser/Gmsh.y                    |  477 +---
 Parser/Gmsh.yy.cpp               |    4 +-
 TODO                             |    9 +-
 benchmarks/extrude/point_new.geo |   26 +
 demos/cone.geo                   |    8 +-
 demos/cube.geo                   |    4 +-
 demos/hex.geo                    |   26 +-
 demos/piece-extr-rec.geo         |   22 +-
 demos/piece-extr.geo             |   21 +-
 demos/piece.geo                  |   13 +-
 doc/VERSIONS                     |    5 +-
 doc/texinfo/gmsh.texi            |   63 +-
 tutorial/t2.geo                  |    2 +-
 tutorial/t3.geo                  |   18 +-
 20 files changed, 2623 insertions(+), 2791 deletions(-)
 create mode 100644 benchmarks/extrude/point_new.geo

diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index dc71d93688..a4808555df 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -1,4 +1,4 @@
-// $Id: Callbacks.cpp,v 1.396 2006-01-14 17:13:14 geuzaine Exp $
+// $Id: Callbacks.cpp,v 1.397 2006-01-14 22:32:58 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -2456,28 +2456,20 @@ static void _action_point_line_surface_volume(int action, int mode, char *what)
 		   (char*)WID->context_geometry_input[23]->value());
 	  break;
 	case 4:
-	  for(int i = 0; i < List_Nbr(List1); i++){
-	    int num;
-	    List_Read(List1, i, &num);
-	    extrude(num, CTX.filename, what,
-		    (char*)WID->context_geometry_input[6]->value(),
-		    (char*)WID->context_geometry_input[7]->value(),
-		    (char*)WID->context_geometry_input[8]->value());
-	  }
+	  extrude(List1, CTX.filename, what,
+		  (char*)WID->context_geometry_input[6]->value(),
+		  (char*)WID->context_geometry_input[7]->value(),
+		  (char*)WID->context_geometry_input[8]->value());
 	  break;
 	case 5:
-	  for(int i = 0; i < List_Nbr(List1); i++){
-	    int num;
-	    List_Read(List1, i, &num);
-	    protude(num, CTX.filename, what,
-		    (char*)WID->context_geometry_input[12]->value(),
-		    (char*)WID->context_geometry_input[13]->value(),
-		    (char*)WID->context_geometry_input[14]->value(),
-		    (char*)WID->context_geometry_input[9]->value(),
-		    (char*)WID->context_geometry_input[10]->value(),
-		    (char*)WID->context_geometry_input[11]->value(),
-		    (char*)WID->context_geometry_input[15]->value());
-	  }
+	  protude(List1, CTX.filename, what,
+		  (char*)WID->context_geometry_input[12]->value(),
+		  (char*)WID->context_geometry_input[13]->value(),
+		  (char*)WID->context_geometry_input[14]->value(),
+		  (char*)WID->context_geometry_input[9]->value(),
+		  (char*)WID->context_geometry_input[10]->value(),
+		  (char*)WID->context_geometry_input[11]->value(),
+		  (char*)WID->context_geometry_input[15]->value());
 	  break;
 	case 6:
 	  delet(List1, CTX.filename, what);
diff --git a/Geo/CAD.cpp b/Geo/CAD.cpp
index 1ff2da4bcd..eba11165f8 100644
--- a/Geo/CAD.cpp
+++ b/Geo/CAD.cpp
@@ -1,4 +1,4 @@
-// $Id: CAD.cpp,v 1.92 2006-01-08 14:32:46 geuzaine Exp $
+// $Id: CAD.cpp,v 1.93 2006-01-14 22:32:58 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -1659,13 +1659,118 @@ int Extrude_ProtudeSurface(int type, int is,
   return chapeau->Num;
 }
 
+void ExtrudeShape(int extrude_type, int shape_type, int shape_num,
+		  double T0, double T1, double T2,
+		  double A0, double A1, double A2,
+		  double X0, double X1, double X2, double alpha,
+		  ExtrudeParams *e,
+		  List_T *out)
+{
+  Shape shape;
+  shape.Type = shape_type;
+  shape.Num = shape_num;
+  List_T *tmp = List_Create(1, 1, sizeof(Shape));
+  List_Add(tmp, &shape);
+  ExtrudeShapes(extrude_type, tmp,
+		T0, T1, T2,
+		A0, A1, A2,
+		X0, X1, X2, alpha,
+		e,
+		out);
+  List_Delete(tmp);
+}
+
+void ExtrudeShapes(int type, List_T *in, 
+		   double T0, double T1, double T2,
+		   double A0, double A1, double A2,
+		   double X0, double X1, double X2, double alpha,
+		   ExtrudeParams *e,
+		   List_T *out)
+{
+  Shape O, TheShape;
+  Curve *pc, *prc;
+  Surface *ps;
+  Volume *pv;
+      
+  for(int i = 0; i < List_Nbr(in); i++){
+    List_Read(in, i, &O);
+    switch(O.Type){
+    case MSH_POINT:
+      TheShape.Num = Extrude_ProtudePoint(type, O.Num, T0, T1, T2,
+					  A0, A1, A2, X0, X1, X2, alpha,
+					  &pc, &prc, 1, e);
+      TheShape.Type = MSH_POINT;
+      List_Add(out, &TheShape);
+      if(pc){
+	TheShape.Num = pc->Num;
+	TheShape.Type = pc->Typ;
+	List_Add(out, &TheShape);
+      }
+      break;
+    case MSH_SEGM_LINE:
+    case MSH_SEGM_SPLN:
+    case MSH_SEGM_BSPLN:
+    case MSH_SEGM_BEZIER:
+    case MSH_SEGM_CIRC:
+    case MSH_SEGM_CIRC_INV:
+    case MSH_SEGM_ELLI:
+    case MSH_SEGM_ELLI_INV:
+    case MSH_SEGM_NURBS:
+    case MSH_SEGM_PARAMETRIC:
+      TheShape.Num = Extrude_ProtudeCurve(type, O.Num, T0, T1, T2,
+					  A0, A1, A2, X0, X1, X2, alpha,
+					  &ps, 1, e);
+      pc = FindCurve(TheShape.Num, THEM);
+      if(!pc){
+	//Msg(WARNING, "Unknown curve %d", TheShape.Num);
+	TheShape.Type = 0;
+      }
+      else{
+	TheShape.Type = pc->Typ;
+      }
+      List_Add(out, &TheShape);
+      if(ps){
+	TheShape.Num = ps->Num;
+	TheShape.Type = ps->Typ;
+	List_Add(out, &TheShape);
+      }
+      break;
+    case MSH_SURF_NURBS:
+    case MSH_SURF_REGL:
+    case MSH_SURF_TRIC:
+    case MSH_SURF_PLAN:
+      TheShape.Num = Extrude_ProtudeSurface(type, O.Num, T0, T1, T2,
+					    A0, A1, A2, X0, X1, X2, alpha,
+					    &pv, e);
+      ps = FindSurface(TheShape.Num, THEM);
+      if(!ps){
+	//Msg(WARNING, "Unknown surface %d", TheShape.Num);
+	TheShape.Type = 0;
+      }
+      else{
+	TheShape.Type = ps->Typ;
+      }
+      List_Add(out, &TheShape);
+      if(pv){
+	TheShape.Num = pv->Num;
+	TheShape.Type = pv->Typ;
+	List_Add(out, &TheShape);
+      }
+      break;
+    default:
+      Msg(GERROR, "Impossible to extrude entity %d (of type %d)", O.Num,
+          O.Type);
+      break;
+    }
+  }
+}
+
 // Duplicate removal
 
 int compareTwoCurves(const void *a, const void *b)
 {
-  Curve *c1, *c2;
-  c1 = *(Curve **) a;
-  c2 = *(Curve **) b;
+  Curve *c1 = *(Curve **) a;
+  Curve *c2 = *(Curve **) b;
   int comp;
 
   if(c1->Typ != c2->Typ){
@@ -1710,9 +1815,8 @@ int compareTwoCurves(const void *a, const void *b)
 
 int compareTwoSurfaces(const void *a, const void *b)
 {
-  Surface *s1, *s2;
-  s1 = *(Surface **) a;
-  s2 = *(Surface **) b;
+  Surface *s1 = *(Surface **) a;
+  Surface *s2 = *(Surface **) b;
   return compare2Lists(s1->Generatrices, s2->Generatrices, compareAbsCurve);
 }
 
@@ -2317,7 +2421,6 @@ bool IntersectCurveSurface(Curve * c, Surface * s)
   return true;
 }
 
-
 void DivideCurve(Curve * c, double u, Vertex * v, Curve ** c1, Curve ** c2)
 {
   (*c1) = Create_Curve(NEWLINE(), c->Typ, 1, NULL, NULL, -1, -1, 0., 1.);
diff --git a/Geo/CAD.h b/Geo/CAD.h
index 87f8c13074..c610853f93 100644
--- a/Geo/CAD.h
+++ b/Geo/CAD.h
@@ -34,7 +34,6 @@ int NEWVOLUME(void);
 int NEWPHYSICAL(void);
 int NEWREG(void);
 
-
 Vertex *FindPoint(int inum, Mesh *M);
 Vertex *FindVertex(int inum, Mesh *M);
 Curve *FindCurve(int inum, Mesh *M);
@@ -42,13 +41,11 @@ 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);
-
+PhysicalGroup *FindPhysicalGroup(int inum, int type, Mesh *M);
 
-Curve * CreateReversedCurve (Mesh *M,Curve *c);
+Curve *CreateReversedCurve(Mesh *M, Curve *c);
 void ModifyLcPoint(int ip, double lc);
 
-
 void TranslateShapes(double X,double Y,double Z,
                      List_T *ListShapes, int final);
 void DilatShapes(double X,double Y,double Z, double A,
@@ -62,40 +59,30 @@ void CopyShape(int Type, int Num, int *New);
 void DeleteShape(int Type, int Num);
 void ColorShape(int Type, int Num, unsigned int Color);
 void VisibilityShape(int Type, int Num, int Mode);
-
+void ExtrudeShape(int extrude_type, int shape_type, int shape_num,
+		  double T0, double T1, double T2,
+		  double A0, double A1, double A2,
+		  double X0, double X1, double X2, double alpha,
+		  ExtrudeParams *e,
+		  List_T *out);
+void ExtrudeShapes(int extrude_type, List_T *in,
+		   double T0, double T1, double T2,
+		   double A0, double A1, double A2,
+		   double X0, double X1, double X2, double alpha,
+		   ExtrudeParams *e,
+		   List_T *out);
 
 void ProtudeXYZ(double &x, double &y, double &z, ExtrudeParams *e);
-int Extrude_ProtudePoint(int type, int ip, 
-			 double T0, double T1, double T2,
-			 double A0, double A1, double A2,
-			 double X0, double X1, double X2, double alpha,
-			 Curve **pc, Curve **prc, int final,
-			 ExtrudeParams *e);
-int Extrude_ProtudeCurve(int type, int ic,
-			 double T0, double T1, double T2,
-			 double A0, double A1, double A2,
-			 double X0, double X1, double X2, double alpha,
-			 Surface **ps, int final, 
-			 ExtrudeParams *e);
-int Extrude_ProtudeSurface(int type, int is,
-			   double T0, double T1, double T2,
-			   double A0, double A1, double A2,
-			   double X0, double X1, double X2, double alpha,
-			   Volume **pv, ExtrudeParams *e);
-
 
 void ReplaceAllDuplicates(Mesh *m);
 
-
-bool ProjectPointOnCurve (Curve *c, Vertex *v, Vertex *RES, Vertex *DER);
-bool ProjectPointOnSurface (Surface *s, Vertex &p);
-bool ProjectPointOnSurface (Surface *s, Vertex *p,double *u, double *v);
+bool ProjectPointOnCurve(Curve *c, Vertex *v, Vertex *RES, Vertex *DER);
+bool ProjectPointOnSurface(Surface *s, Vertex &p);
+bool ProjectPointOnSurface(Surface *s, Vertex *p,double *u, double *v);
 bool IntersectAllSegmentsTogether(void);
 
-
-int recognize_seg(int typ, List_T * liste, int *seg);
-int recognize_loop(List_T * liste, int *loop);
-int recognize_surfloop(List_T * liste, int *loop);
-
+int recognize_seg(int typ, List_T *liste, int *seg);
+int recognize_loop(List_T *liste, int *loop);
+int recognize_surfloop(List_T *liste, int *loop);
 
 #endif
diff --git a/Geo/Geo.cpp b/Geo/Geo.cpp
index d0c242748e..f82020d6ed 100644
--- a/Geo/Geo.cpp
+++ b/Geo/Geo.cpp
@@ -1,4 +1,4 @@
-// $Id: Geo.cpp,v 1.49 2006-01-08 14:10:38 geuzaine Exp $
+// $Id: Geo.cpp,v 1.50 2006-01-14 22:32:58 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -513,20 +513,24 @@ void symmetry(int add, List_T *list, char *fich, char *what, char *sa, char *sb,
   add_infile(text, fich);
 }
 
-void extrude(int s, char *fich, char *what, char *tx, char *ty, char *tz)
+void extrude(List_T *list, char *fich, char *what, char *tx, char *ty, char *tz)
 {
   char text[BUFFSIZE];
 
-  snprintf(text, BUFFSIZE, "Extrude %s {%d, {%s,%s,%s}};", what, s, tx, ty, tz);
+  snprintf(text, BUFFSIZE, "Extrude {%s,%s,%s} {\n  %s{", tx, ty, tz, what);
+  strncat_list(text, list);
+  strncat(text, "};\n}", BUFFSIZE-strlen(text));
   add_infile(text, fich);
 }
 
-void protude(int s, char *fich, char *what, char *ax, char *ay, char *az,
+void protude(List_T *list, char *fich, char *what, char *ax, char *ay, char *az,
 	     char *px, char *py, char *pz, char *angle)
 {
   char text[BUFFSIZE];
 
-  snprintf(text, BUFFSIZE, "Extrude %s {%d, {%s,%s,%s}, {%s,%s,%s}, %s};",
-           what, s, ax, ay, az, px, py, pz, angle);
+  snprintf(text, BUFFSIZE, "Extrude {{%s,%s,%s}, {%s,%s,%s}, %s} {\n  %s{",
+           ax, ay, az, px, py, pz, angle, what);
+  strncat_list(text, list);
+  strncat(text, "};\n}", BUFFSIZE-strlen(text));
   add_infile(text, fich);
 }
diff --git a/Geo/Geo.h b/Geo/Geo.h
index aae259b756..2471da338e 100644
--- a/Geo/Geo.h
+++ b/Geo/Geo.h
@@ -127,8 +127,8 @@ void dilate(int add, List_T *list, char *fich, char *what,
 	    char *dx, char *dy, char *dz, char *df);
 void symmetry(int add, List_T *list, char *fich, char *what, 
 	      char *sa, char *sb, char *sc, char *sd);
-void extrude(int s, char *fich, char *what, char *tx, char *ty, char *tz);
-void protude(int s, char *fich, char *what, char *ax, char *ay, char *az,
+void extrude(List_T *list, char *fich, char *what, char *tx, char *ty, char *tz);
+void protude(List_T *list, char *fich, char *what, char *ax, char *ay, char *az,
 	     char *px, char *py, char *pz, char *angle);
 
 #endif
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index 8149cd3ced..8c624c3eac 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -168,7 +168,7 @@
 
 #line 1 "Gmsh.y"
 
-// $Id: Gmsh.tab.cpp,v 1.248 2006-01-06 00:35:43 geuzaine Exp $
+// $Id: Gmsh.tab.cpp,v 1.249 2006-01-14 22:32:58 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -264,11 +264,11 @@ typedef union {
 
 
 
-#define	YYFINAL		1506
+#define	YYFINAL		1536
 #define	YYFLAG		-32768
 #define	YYNTBASE	183
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 417 ? yytranslate[x] : 251)
+#define YYTRANSLATE(x) ((unsigned)(x) <= 417 ? yytranslate[x] : 254)
 
 static const short yytranslate[] = {     0,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -335,261 +335,269 @@ static const short yyprhs[] = {     0,
   1116,  1119,  1126,  1133,  1140,  1147,  1152,  1159,  1166,  1173,
   1178,  1185,  1189,  1194,  1200,  1204,  1208,  1213,  1218,  1222,
   1230,  1234,  1242,  1246,  1249,  1252,  1268,  1271,  1278,  1287,
-  1296,  1307,  1309,  1312,  1314,  1318,  1323,  1325,  1334,  1347,
-  1362,  1363,  1376,  1377,  1394,  1395,  1414,  1423,  1436,  1451,
-  1452,  1465,  1466,  1483,  1484,  1503,  1512,  1525,  1540,  1541,
-  1554,  1555,  1572,  1573,  1592,  1594,  1597,  1607,  1615,  1618,
-  1625,  1635,  1645,  1654,  1664,  1673,  1682,  1689,  1694,  1697,
-  1700,  1702,  1704,  1706,  1708,  1710,  1712,  1716,  1719,  1722,
-  1725,  1729,  1733,  1737,  1741,  1745,  1749,  1753,  1757,  1761,
-  1765,  1769,  1773,  1777,  1781,  1787,  1792,  1797,  1802,  1807,
-  1812,  1817,  1822,  1827,  1832,  1837,  1844,  1849,  1854,  1859,
-  1864,  1869,  1874,  1881,  1888,  1895,  1900,  1905,  1910,  1915,
-  1920,  1925,  1930,  1935,  1940,  1945,  1950,  1957,  1962,  1967,
-  1972,  1977,  1982,  1987,  1994,  2001,  2008,  2013,  2015,  2017,
-  2019,  2021,  2023,  2025,  2027,  2029,  2034,  2039,  2042,  2048,
-  2052,  2059,  2064,  2072,  2079,  2081,  2084,  2087,  2091,  2095,
-  2107,  2117,  2125,  2133,  2134,  2138,  2140,  2144,  2145,  2149,
-  2153,  2155,  2159,  2161,  2163,  2167,  2172,  2176,  2182,  2187,
-  2189,  2191,  2193,  2197,  2202,  2209,  2217,  2219,  2221,  2225,
-  2229,  2239,  2247,  2249,  2255,  2259,  2266,  2268,  2272,  2274,
-  2276,  2283,  2288,  2293,  2298,  2305,  2312
+  1296,  1307,  1309,  1312,  1314,  1318,  1323,  1325,  1331,  1343,
+  1357,  1358,  1366,  1367,  1381,  1382,  1398,  1407,  1416,  1425,
+  1438,  1451,  1464,  1479,  1494,  1509,  1510,  1523,  1524,  1537,
+  1538,  1551,  1552,  1569,  1570,  1587,  1588,  1605,  1606,  1625,
+  1626,  1645,  1646,  1665,  1667,  1670,  1680,  1688,  1691,  1698,
+  1708,  1718,  1727,  1737,  1746,  1755,  1762,  1767,  1770,  1773,
+  1775,  1777,  1779,  1781,  1783,  1785,  1789,  1792,  1795,  1798,
+  1802,  1806,  1810,  1814,  1818,  1822,  1826,  1830,  1834,  1838,
+  1842,  1846,  1850,  1854,  1860,  1865,  1870,  1875,  1880,  1885,
+  1890,  1895,  1900,  1905,  1910,  1917,  1922,  1927,  1932,  1937,
+  1942,  1947,  1954,  1961,  1968,  1973,  1978,  1983,  1988,  1993,
+  1998,  2003,  2008,  2013,  2018,  2023,  2030,  2035,  2040,  2045,
+  2050,  2055,  2060,  2067,  2074,  2081,  2086,  2088,  2090,  2092,
+  2094,  2096,  2098,  2100,  2102,  2107,  2112,  2115,  2121,  2125,
+  2132,  2137,  2145,  2152,  2154,  2157,  2160,  2164,  2168,  2180,
+  2190,  2198,  2206,  2207,  2211,  2213,  2217,  2218,  2222,  2226,
+  2228,  2232,  2234,  2236,  2240,  2245,  2249,  2255,  2260,  2262,
+  2264,  2266,  2270,  2275,  2282,  2290,  2292,  2294,  2298,  2302,
+  2312,  2320,  2322,  2328,  2332,  2339,  2341,  2345,  2347,  2349,
+  2356,  2361,  2366,  2371,  2378,  2385
 };
 
 static const short yyrhs[] = {   184,
      0,   189,     0,     1,     6,     0,     0,   184,   185,     0,
    186,     0,   188,     0,   187,     0,   124,     6,     0,   125,
      6,     0,   127,     6,     0,   126,     6,     0,   128,     6,
-     0,   129,   174,   240,   180,     5,   175,     6,     0,   130,
-   174,   240,   175,     6,     0,   131,   174,     5,   180,     5,
-   180,   240,   180,   240,   180,     5,   180,     5,   180,     5,
-   175,     6,     0,     3,     7,   108,   174,     5,   180,   238,
-   175,     6,     0,     3,     7,   107,   174,     5,   180,   236,
-   180,   244,   180,   235,   180,   235,   180,   235,   180,   244,
-   180,   244,   180,   235,   175,     6,     0,     3,     7,   106,
-   174,     5,   180,   236,   180,   236,   180,   242,   180,   235,
-   180,   235,   180,   235,   180,   235,   180,   244,   180,   244,
-   180,   244,   180,   244,   180,   235,   175,     6,     0,     3,
+     0,   129,   174,   243,   180,     5,   175,     6,     0,   130,
+   174,   243,   175,     6,     0,   131,   174,     5,   180,     5,
+   180,   243,   180,   243,   180,     5,   180,     5,   180,     5,
+   175,     6,     0,     3,     7,   108,   174,     5,   180,   241,
+   175,     6,     0,     3,     7,   107,   174,     5,   180,   239,
+   180,   247,   180,   238,   180,   238,   180,   238,   180,   247,
+   180,   247,   180,   238,   175,     6,     0,     3,     7,   106,
+   174,     5,   180,   239,   180,   239,   180,   245,   180,   238,
+   180,   238,   180,   238,   180,   238,   180,   247,   180,   247,
+   180,   247,   180,   247,   180,   238,   175,     6,     0,     3,
      7,   114,   174,     5,   180,     3,   180,     3,   180,     3,
-   180,   235,   175,     6,     0,     3,     7,   118,   174,     5,
-   180,     3,   180,   235,   175,     6,     0,     3,     7,   135,
-   174,     5,   180,     3,   180,   235,   175,     6,     0,     3,
-     7,   116,   174,     5,   180,   165,   180,   165,   180,   236,
-   180,   235,   175,     6,     0,     3,     7,   119,   174,     5,
-   180,   244,   175,     6,     0,     3,     7,   120,   174,     5,
-   180,   244,   180,     3,   180,   235,   175,     6,     0,     3,
+   180,   238,   175,     6,     0,     3,     7,   118,   174,     5,
+   180,     3,   180,   238,   175,     6,     0,     3,     7,   135,
+   174,     5,   180,     3,   180,   238,   175,     6,     0,     3,
+     7,   116,   174,     5,   180,   165,   180,   165,   180,   239,
+   180,   238,   175,     6,     0,     3,     7,   119,   174,     5,
+   180,   247,   175,     6,     0,     3,     7,   120,   174,     5,
+   180,   247,   180,     3,   180,   238,   175,     6,     0,     3,
      7,   115,   174,     5,   180,     3,   175,     6,     0,     3,
-     7,   121,   174,     5,   180,     3,   180,   236,   175,     6,
+     7,   121,   174,     5,   180,     3,   180,   239,   175,     6,
      0,     3,     7,   123,   174,     5,   180,     3,   180,     3,
    180,     3,   175,     6,     0,     3,     7,   122,   174,     5,
-   180,   238,   175,     6,     0,     3,     7,   117,   174,     5,
+   180,   241,   175,     6,     0,     3,     7,   117,   174,     5,
    180,     3,   175,     6,     0,     3,     7,    44,   174,     5,
    180,     3,   180,     3,   175,     6,     0,     3,     7,   133,
-   174,     5,   180,   244,   175,     6,     0,     3,     7,   134,
-   174,     5,   180,   244,   180,     3,   175,     6,     0,     3,
+   174,     5,   180,   247,   175,     6,     0,     3,     7,   134,
+   174,     5,   180,   247,   180,     3,   175,     6,     0,     3,
      7,   132,   174,     5,   180,     3,   175,     6,     0,     3,
-     7,   136,   174,     5,   180,     3,   180,   236,   175,     6,
-     0,     3,     7,   137,   174,     5,   180,     3,   180,   236,
-   180,   236,   175,     6,     0,     3,     7,   144,   174,     5,
-   180,     3,   180,   236,   180,   236,   175,     6,     0,     3,
-     7,   138,   174,     5,   180,     3,   180,   236,   175,     6,
-     0,     3,     7,   148,   174,     5,   180,     3,   180,   236,
-   180,   236,   175,     6,     0,     3,     7,   139,   174,     5,
-   180,     3,   180,   244,   180,   244,   180,   235,   180,   235,
-   175,     6,     0,     3,     7,   140,   174,     5,   180,   244,
-   175,     6,     0,     3,     7,   141,   174,   142,   180,   235,
+     7,   136,   174,     5,   180,     3,   180,   239,   175,     6,
+     0,     3,     7,   137,   174,     5,   180,     3,   180,   239,
+   180,   239,   175,     6,     0,     3,     7,   144,   174,     5,
+   180,     3,   180,   239,   180,   239,   175,     6,     0,     3,
+     7,   138,   174,     5,   180,     3,   180,   239,   175,     6,
+     0,     3,     7,   148,   174,     5,   180,     3,   180,   239,
+   180,   239,   175,     6,     0,     3,     7,   139,   174,     5,
+   180,     3,   180,   247,   180,   247,   180,   238,   180,   238,
+   175,     6,     0,     3,     7,   140,   174,     5,   180,   247,
+   175,     6,     0,     3,     7,   141,   174,   142,   180,   238,
    180,     3,   175,     6,     0,     3,     7,   143,   174,     5,
-   180,   244,   180,   235,   175,     6,     0,     3,     7,   145,
+   180,   247,   180,   238,   175,     6,     0,     3,     7,   145,
    174,     5,   180,     5,   180,     3,   180,     3,   175,     6,
      0,     3,     7,   146,   174,     5,   180,     5,   180,     3,
    175,     6,     0,     3,     7,   147,   174,     3,   180,     3,
    175,     6,     0,     0,   189,   190,     0,   192,     0,   191,
      0,   210,     0,   211,     0,   212,     0,   215,     0,   216,
-     0,   217,     0,   218,     0,   221,     0,   233,     0,   234,
+     0,   217,     0,   218,     0,   221,     0,   236,     0,   237,
      0,   220,     0,   219,     0,    33,   174,     5,   175,     6,
-     0,    33,   174,     5,   180,   246,   175,     6,     0,     4,
-     5,   181,   193,   182,     6,     0,     4,     5,     4,   238,
+     0,    33,   174,     5,   180,   249,   175,     6,     0,     4,
+     5,   181,   193,   182,     6,     0,     4,     5,     4,   241,
    181,   193,   182,     6,     0,     0,   193,   196,     0,   193,
    200,     0,   193,   203,     0,   193,   205,     0,   193,   206,
-     0,   236,     0,   194,   180,   236,     0,   236,     0,   195,
-   180,   236,     0,     0,     0,     4,   197,   174,   194,   175,
-   198,   181,   195,   182,     6,     0,   250,     0,   199,   180,
-   250,     0,     0,    76,   174,   236,   180,   236,   180,   236,
-   175,   201,   181,   199,   182,     6,     0,   250,     0,   202,
-   180,   250,     0,     0,    77,   174,   236,   180,   236,   180,
-   236,   180,   236,   175,   204,   181,   202,   182,     6,     0,
-    78,   181,   243,   182,   181,   243,   182,     6,     0,     0,
+     0,   239,     0,   194,   180,   239,     0,   239,     0,   195,
+   180,   239,     0,     0,     0,     4,   197,   174,   194,   175,
+   198,   181,   195,   182,     6,     0,   253,     0,   199,   180,
+   253,     0,     0,    76,   174,   239,   180,   239,   180,   239,
+   175,   201,   181,   199,   182,     6,     0,   253,     0,   202,
+   180,   253,     0,     0,    77,   174,   239,   180,   239,   180,
+   239,   180,   239,   175,   204,   181,   202,   182,     6,     0,
+    78,   181,   246,   182,   181,   246,   182,     6,     0,     0,
     79,   207,   181,   195,   182,     6,     0,     7,     0,   149,
      0,   150,     0,   151,     0,   152,     0,   170,     0,   171,
-     0,     4,   208,   236,     6,     0,     4,   176,   236,   177,
-   208,   236,     6,     0,     4,   176,   181,   246,   182,   177,
-   208,   244,     6,     0,     4,   176,   177,     7,   244,     6,
-     0,     4,   209,     6,     0,     4,   176,   236,   177,   209,
-     6,     0,     4,   178,     4,     7,   250,     6,     0,     4,
-   176,   236,   177,   178,     4,     7,   250,     6,     0,     4,
-   178,     4,   208,   236,     6,     0,     4,   176,   236,   177,
-   178,     4,   208,   236,     6,     0,     4,   178,     4,   209,
-     6,     0,     4,   176,   236,   177,   178,     4,   209,     6,
-     0,     4,   178,    88,   178,     4,     7,   247,     6,     0,
-     4,   176,   236,   177,   178,    88,   178,     4,     7,   247,
-     6,     0,     4,   178,    89,     7,   248,     6,     0,     4,
-   176,   236,   177,   178,    89,     7,   248,     6,     0,    60,
-   174,     4,   175,   178,     4,     7,   236,     6,     0,    60,
-   174,     4,   175,   178,     4,     7,   250,     6,     0,    41,
-   174,   236,   175,     7,   238,     6,     0,    56,    41,   174,
-   236,   175,     7,   244,     6,     0,    72,    41,   244,     7,
-   181,   236,   180,   236,   180,   236,   182,     6,     0,    48,
-    49,   244,     7,   236,     6,     0,    44,   174,   236,   175,
-     7,   244,     6,     0,    46,   174,   236,   175,     7,   244,
-     6,     0,    42,   174,   236,   175,     7,   244,     6,     0,
-    42,   174,   236,   175,     7,   244,    52,   238,     6,     0,
-    43,   174,   236,   175,     7,   244,     6,     0,    43,   174,
-   236,   175,     7,   244,    52,   238,     6,     0,    50,   174,
-   236,   175,     7,   181,   236,   180,   236,   180,     5,   180,
-     5,   180,     5,   182,     6,     0,    81,   174,   236,   175,
-     7,   244,     6,     0,    82,   174,   236,   175,     7,   244,
-     6,     0,    83,   174,   236,   175,     7,   244,    87,   244,
-    84,   236,     6,     0,    44,    67,   174,   236,   175,     7,
-   244,     6,     0,    72,    44,   244,     7,   181,   236,   180,
-   236,   180,   236,   182,     6,     0,    56,    44,   174,   236,
-   175,     7,   244,     6,     0,    52,    45,   174,   236,   175,
-     7,   244,     6,     0,    53,    45,   174,   236,   175,     7,
-   244,     6,     0,    99,    45,   174,   236,   175,     7,   181,
-   236,   180,   244,   182,     6,     0,    83,    45,    85,    86,
-   174,   236,   175,     7,   242,    87,   181,   244,   180,   244,
-   182,    84,   181,   236,   180,   236,   182,     6,     0,    83,
-    45,   174,   236,   175,     7,   242,    87,   181,   244,   180,
-   244,   182,    84,   181,   236,   180,   236,   182,     6,     0,
-    45,    67,   174,   236,   175,     7,   244,     6,     0,    56,
-    45,   174,   236,   175,     7,   244,     6,     0,    55,    47,
-   174,   236,   175,     7,   244,     6,     0,    47,   174,   236,
-   175,     7,   244,     6,     0,    56,    47,   174,   236,   175,
-     7,   244,     6,     0,    62,   238,   181,   213,   182,     0,
-    61,   181,   238,   180,   238,   180,   236,   182,   181,   213,
-   182,     0,    63,   238,   181,   213,   182,     0,    64,   181,
-   238,   180,   236,   182,   181,   213,   182,     0,   215,     0,
+     0,     4,   208,   239,     6,     0,     4,   176,   239,   177,
+   208,   239,     6,     0,     4,   176,   181,   249,   182,   177,
+   208,   247,     6,     0,     4,   176,   177,     7,   247,     6,
+     0,     4,   209,     6,     0,     4,   176,   239,   177,   209,
+     6,     0,     4,   178,     4,     7,   253,     6,     0,     4,
+   176,   239,   177,   178,     4,     7,   253,     6,     0,     4,
+   178,     4,   208,   239,     6,     0,     4,   176,   239,   177,
+   178,     4,   208,   239,     6,     0,     4,   178,     4,   209,
+     6,     0,     4,   176,   239,   177,   178,     4,   209,     6,
+     0,     4,   178,    88,   178,     4,     7,   250,     6,     0,
+     4,   176,   239,   177,   178,    88,   178,     4,     7,   250,
+     6,     0,     4,   178,    89,     7,   251,     6,     0,     4,
+   176,   239,   177,   178,    89,     7,   251,     6,     0,    60,
+   174,     4,   175,   178,     4,     7,   239,     6,     0,    60,
+   174,     4,   175,   178,     4,     7,   253,     6,     0,    41,
+   174,   239,   175,     7,   241,     6,     0,    56,    41,   174,
+   239,   175,     7,   247,     6,     0,    72,    41,   247,     7,
+   181,   239,   180,   239,   180,   239,   182,     6,     0,    48,
+    49,   247,     7,   239,     6,     0,    44,   174,   239,   175,
+     7,   247,     6,     0,    46,   174,   239,   175,     7,   247,
+     6,     0,    42,   174,   239,   175,     7,   247,     6,     0,
+    42,   174,   239,   175,     7,   247,    52,   241,     6,     0,
+    43,   174,   239,   175,     7,   247,     6,     0,    43,   174,
+   239,   175,     7,   247,    52,   241,     6,     0,    50,   174,
+   239,   175,     7,   181,   239,   180,   239,   180,     5,   180,
+     5,   180,     5,   182,     6,     0,    81,   174,   239,   175,
+     7,   247,     6,     0,    82,   174,   239,   175,     7,   247,
+     6,     0,    83,   174,   239,   175,     7,   247,    87,   247,
+    84,   239,     6,     0,    44,    67,   174,   239,   175,     7,
+   247,     6,     0,    72,    44,   247,     7,   181,   239,   180,
+   239,   180,   239,   182,     6,     0,    56,    44,   174,   239,
+   175,     7,   247,     6,     0,    52,    45,   174,   239,   175,
+     7,   247,     6,     0,    53,    45,   174,   239,   175,     7,
+   247,     6,     0,    99,    45,   174,   239,   175,     7,   181,
+   239,   180,   247,   182,     6,     0,    83,    45,    85,    86,
+   174,   239,   175,     7,   245,    87,   181,   247,   180,   247,
+   182,    84,   181,   239,   180,   239,   182,     6,     0,    83,
+    45,   174,   239,   175,     7,   245,    87,   181,   247,   180,
+   247,   182,    84,   181,   239,   180,   239,   182,     6,     0,
+    45,    67,   174,   239,   175,     7,   247,     6,     0,    56,
+    45,   174,   239,   175,     7,   247,     6,     0,    55,    47,
+   174,   239,   175,     7,   247,     6,     0,    47,   174,   239,
+   175,     7,   247,     6,     0,    56,    47,   174,   239,   175,
+     7,   247,     6,     0,    62,   241,   181,   213,   182,     0,
+    61,   181,   241,   180,   241,   180,   239,   182,   181,   213,
+   182,     0,    63,   241,   181,   213,   182,     0,    64,   181,
+   241,   180,   239,   182,   181,   213,   182,     0,   215,     0,
    214,     0,   212,     0,     0,   214,   211,     0,   214,    41,
-   181,   246,   182,     6,     0,   214,    44,   181,   246,   182,
-     6,     0,   214,    45,   181,   246,   182,     6,     0,   214,
-    47,   181,   246,   182,     6,     0,    66,   181,   214,   182,
-     0,    66,     4,   176,   236,   177,     6,     0,    74,     4,
-   176,   236,   177,     6,     0,    75,     4,   176,   236,   177,
+   181,   249,   182,     6,     0,   214,    44,   181,   249,   182,
+     6,     0,   214,    45,   181,   249,   182,     6,     0,   214,
+    47,   181,   249,   182,     6,     0,    66,   181,   214,   182,
+     0,    66,     4,   176,   239,   177,     6,     0,    74,     4,
+   176,   239,   177,     6,     0,    75,     4,   176,   239,   177,
      6,     0,    69,   181,   214,   182,     0,    69,     4,   176,
-   236,   177,     6,     0,    69,     4,     6,     0,    69,     4,
-     4,     6,     0,    88,   247,   181,   214,   182,     0,   100,
-   250,     6,     0,   101,   250,     6,     0,   100,   181,   214,
-   182,     0,   101,   181,   214,   182,     0,     4,   250,     6,
-     0,     4,     4,   176,   236,   177,   250,     6,     0,     4,
-   236,     6,     0,    60,   174,     4,   175,   178,     4,     6,
+   239,   177,     6,     0,    69,     4,     6,     0,    69,     4,
+     4,     6,     0,    88,   250,   181,   214,   182,     0,   100,
+   253,     6,     0,   101,   253,     6,     0,   100,   181,   214,
+   182,     0,   101,   181,   214,   182,     0,     4,   253,     6,
+     0,     4,     4,   176,   239,   177,   253,     6,     0,     4,
+   239,     6,     0,    60,   174,     4,   175,   178,     4,     6,
      0,    80,     4,     6,     0,    95,     6,     0,    38,     6,
-     0,    38,   181,   236,   180,   236,   180,   236,   180,   236,
-   180,   236,   180,   236,   182,     6,     0,    39,     6,     0,
-    90,   174,   236,     8,   236,   175,     0,    90,   174,   236,
-     8,   236,     8,   236,   175,     0,    90,     4,    91,   181,
-   236,     8,   236,   182,     0,    90,     4,    91,   181,   236,
-     8,   236,     8,   236,   182,     0,    92,     0,    98,     4,
-     0,    96,     0,    97,     4,     6,     0,    93,   174,   236,
-   175,     0,    94,     0,    65,    41,   181,   236,   180,   238,
-   182,     6,     0,    65,    41,   181,   236,   180,   238,   180,
-   238,   180,   236,   182,     6,     0,    65,    41,   181,   236,
-   180,   238,   180,   238,   180,   238,   180,   236,   182,     6,
-     0,     0,    65,    41,   181,   236,   180,   238,   182,   222,
-   181,   231,   182,     6,     0,     0,    65,    41,   181,   236,
-   180,   238,   180,   238,   180,   236,   182,   223,   181,   231,
-   182,     6,     0,     0,    65,    41,   181,   236,   180,   238,
-   180,   238,   180,   238,   180,   236,   182,   224,   181,   231,
-   182,     6,     0,    65,    44,   181,   236,   180,   238,   182,
-     6,     0,    65,    44,   181,   236,   180,   238,   180,   238,
-   180,   236,   182,     6,     0,    65,    44,   181,   236,   180,
-   238,   180,   238,   180,   238,   180,   236,   182,     6,     0,
-     0,    65,    44,   181,   236,   180,   238,   182,   225,   181,
-   231,   182,     6,     0,     0,    65,    44,   181,   236,   180,
-   238,   180,   238,   180,   236,   182,   226,   181,   231,   182,
-     6,     0,     0,    65,    44,   181,   236,   180,   238,   180,
-   238,   180,   238,   180,   236,   182,   227,   181,   231,   182,
-     6,     0,    65,    45,   181,   236,   180,   238,   182,     6,
-     0,    65,    45,   181,   236,   180,   238,   180,   238,   180,
-   236,   182,     6,     0,    65,    45,   181,   236,   180,   238,
-   180,   238,   180,   238,   180,   236,   182,     6,     0,     0,
-    65,    45,   181,   236,   180,   238,   182,   228,   181,   231,
-   182,     6,     0,     0,    65,    45,   181,   236,   180,   238,
-   180,   238,   180,   236,   182,   229,   181,   231,   182,     6,
-     0,     0,    65,    45,   181,   236,   180,   238,   180,   238,
-   180,   238,   180,   236,   182,   230,   181,   231,   182,     6,
-     0,   232,     0,   231,   232,     0,    73,   181,   244,   180,
-   244,   180,   244,   182,     6,     0,    73,   181,   244,   180,
-   244,   182,     6,     0,    68,     6,     0,    54,    44,   244,
-     7,   236,     6,     0,    54,    44,   244,     7,   236,    57,
-    59,   236,     6,     0,    54,    44,   244,     7,   236,    57,
-    58,   236,     6,     0,    54,    45,   181,   236,   182,     7,
-   244,     6,     0,    54,    45,   181,   236,   182,     7,   244,
-     4,     6,     0,    51,    45,   181,   236,   182,     7,   244,
-     6,     0,    54,    47,   181,   236,   182,     7,   244,     6,
-     0,    68,    45,   244,     7,   236,     6,     0,    68,    45,
-   244,     6,     0,    70,     6,     0,    71,     6,     0,   109,
-     0,   110,     0,   111,     0,   112,     0,   113,     0,   237,
-     0,   174,   236,   175,     0,   164,   236,     0,   163,   236,
-     0,   169,   236,     0,   236,   164,   236,     0,   236,   163,
-   236,     0,   236,   165,   236,     0,   236,   166,   236,     0,
-   236,   167,   236,     0,   236,   173,   236,     0,   236,   159,
-   236,     0,   236,   161,   236,     0,   236,   160,   236,     0,
-   236,   162,   236,     0,   236,   156,   236,     0,   236,   157,
-   236,     0,   236,   155,   236,     0,   236,   154,   236,     0,
-   236,   153,   236,     8,   236,     0,    12,   174,   236,   175,
-     0,    13,   174,   236,   175,     0,    14,   174,   236,   175,
-     0,    15,   174,   236,   175,     0,    16,   174,   236,   175,
-     0,    17,   174,   236,   175,     0,    18,   174,   236,   175,
-     0,    19,   174,   236,   175,     0,    20,   174,   236,   175,
-     0,    22,   174,   236,   175,     0,    23,   174,   236,   180,
-   236,   175,     0,    24,   174,   236,   175,     0,    25,   174,
-   236,   175,     0,    26,   174,   236,   175,     0,    27,   174,
-   236,   175,     0,    28,   174,   236,   175,     0,    29,   174,
-   236,   175,     0,    30,   174,   236,   180,   236,   175,     0,
-    31,   174,   236,   180,   236,   175,     0,    32,   174,   236,
-   180,   236,   175,     0,    21,   174,   236,   175,     0,    12,
-   176,   236,   177,     0,    13,   176,   236,   177,     0,    14,
-   176,   236,   177,     0,    15,   176,   236,   177,     0,    16,
-   176,   236,   177,     0,    17,   176,   236,   177,     0,    18,
-   176,   236,   177,     0,    19,   176,   236,   177,     0,    20,
-   176,   236,   177,     0,    22,   176,   236,   177,     0,    23,
-   176,   236,   180,   236,   177,     0,    24,   176,   236,   177,
-     0,    25,   176,   236,   177,     0,    26,   176,   236,   177,
-     0,    27,   176,   236,   177,     0,    28,   176,   236,   177,
-     0,    29,   176,   236,   177,     0,    30,   176,   236,   180,
-   236,   177,     0,    31,   176,   236,   180,   236,   177,     0,
-    32,   176,   236,   180,   236,   177,     0,    21,   176,   236,
-   177,     0,     3,     0,     9,     0,    10,     0,    11,     0,
-   103,     0,   104,     0,   105,     0,     4,     0,     4,   176,
-   236,   177,     0,   179,     4,   176,   177,     0,     4,   209,
-     0,     4,   176,   236,   177,   209,     0,     4,   178,     4,
-     0,     4,   176,   236,   177,   178,     4,     0,     4,   178,
-     4,   209,     0,     4,   176,   236,   177,   178,     4,   209,
-     0,   102,   174,     5,   180,   236,   175,     0,   239,     0,
-   164,   238,     0,   163,   238,     0,   238,   164,   238,     0,
-   238,   163,   238,     0,   181,   236,   180,   236,   180,   236,
-   180,   236,   180,   236,   182,     0,   181,   236,   180,   236,
-   180,   236,   180,   236,   182,     0,   181,   236,   180,   236,
-   180,   236,   182,     0,   174,   236,   180,   236,   180,   236,
-   175,     0,     0,   174,   241,   175,     0,     5,     0,   241,
-   180,     5,     0,     0,   181,   243,   182,     0,   174,   243,
-   175,     0,   244,     0,   243,   180,   244,     0,   236,     0,
-   245,     0,   181,   246,   182,     0,   164,   181,   246,   182,
-     0,   236,     8,   236,     0,   236,     8,   236,     8,   236,
-     0,    41,   181,   236,   182,     0,   212,     0,   215,     0,
-   221,     0,     4,   176,   177,     0,   164,     4,   176,   177,
-     0,     4,   176,   181,   246,   182,   177,     0,   164,     4,
-   176,   181,   246,   182,   177,     0,   236,     0,   245,     0,
-   246,   180,   236,     0,   246,   180,   245,     0,   181,   236,
-   180,   236,   180,   236,   180,   236,   182,     0,   181,   236,
-   180,   236,   180,   236,   182,     0,     4,     0,     4,   178,
-    88,   178,     4,     0,   181,   249,   182,     0,     4,   176,
-   236,   177,   178,    89,     0,   247,     0,   249,   180,   247,
-     0,     5,     0,    40,     0,    35,   174,   250,   180,   250,
-   175,     0,    36,   174,   250,   175,     0,    37,   174,   250,
-   175,     0,    34,   174,   250,   175,     0,    34,   174,   250,
-   180,   246,   175,     0,    34,   174,     4,   178,     4,   175,
-     0,    34,   174,     4,   176,   236,   177,   178,     4,   175,
-     0
+     0,    38,   181,   239,   180,   239,   180,   239,   180,   239,
+   180,   239,   180,   239,   182,     6,     0,    39,     6,     0,
+    90,   174,   239,     8,   239,   175,     0,    90,   174,   239,
+     8,   239,     8,   239,   175,     0,    90,     4,    91,   181,
+   239,     8,   239,   182,     0,    90,     4,    91,   181,   239,
+     8,   239,     8,   239,   182,     0,    92,     0,    98,     4,
+     0,    96,     0,    97,     4,     6,     0,    93,   174,   239,
+   175,     0,    94,     0,    65,   241,   181,   214,   182,     0,
+    65,   181,   241,   180,   241,   180,   239,   182,   181,   214,
+   182,     0,    65,   181,   241,   180,   241,   180,   241,   180,
+   239,   182,   181,   214,   182,     0,     0,    65,   241,   181,
+   214,   222,   234,   182,     0,     0,    65,   181,   241,   180,
+   241,   180,   239,   182,   181,   214,   223,   234,   182,     0,
+     0,    65,   181,   241,   180,   241,   180,   241,   180,   239,
+   182,   181,   214,   224,   234,   182,     0,    65,    41,   181,
+   239,   180,   241,   182,     6,     0,    65,    44,   181,   239,
+   180,   241,   182,     6,     0,    65,    45,   181,   239,   180,
+   241,   182,     6,     0,    65,    41,   181,   239,   180,   241,
+   180,   241,   180,   239,   182,     6,     0,    65,    44,   181,
+   239,   180,   241,   180,   241,   180,   239,   182,     6,     0,
+    65,    45,   181,   239,   180,   241,   180,   241,   180,   239,
+   182,     6,     0,    65,    41,   181,   239,   180,   241,   180,
+   241,   180,   241,   180,   239,   182,     6,     0,    65,    44,
+   181,   239,   180,   241,   180,   241,   180,   241,   180,   239,
+   182,     6,     0,    65,    45,   181,   239,   180,   241,   180,
+   241,   180,   241,   180,   239,   182,     6,     0,     0,    65,
+    41,   181,   239,   180,   241,   182,   225,   181,   234,   182,
+     6,     0,     0,    65,    44,   181,   239,   180,   241,   182,
+   226,   181,   234,   182,     6,     0,     0,    65,    45,   181,
+   239,   180,   241,   182,   227,   181,   234,   182,     6,     0,
+     0,    65,    41,   181,   239,   180,   241,   180,   241,   180,
+   239,   182,   228,   181,   234,   182,     6,     0,     0,    65,
+    44,   181,   239,   180,   241,   180,   241,   180,   239,   182,
+   229,   181,   234,   182,     6,     0,     0,    65,    45,   181,
+   239,   180,   241,   180,   241,   180,   239,   182,   230,   181,
+   234,   182,     6,     0,     0,    65,    41,   181,   239,   180,
+   241,   180,   241,   180,   241,   180,   239,   182,   231,   181,
+   234,   182,     6,     0,     0,    65,    44,   181,   239,   180,
+   241,   180,   241,   180,   241,   180,   239,   182,   232,   181,
+   234,   182,     6,     0,     0,    65,    45,   181,   239,   180,
+   241,   180,   241,   180,   241,   180,   239,   182,   233,   181,
+   234,   182,     6,     0,   235,     0,   234,   235,     0,    73,
+   181,   247,   180,   247,   180,   247,   182,     6,     0,    73,
+   181,   247,   180,   247,   182,     6,     0,    68,     6,     0,
+    54,    44,   247,     7,   239,     6,     0,    54,    44,   247,
+     7,   239,    57,    59,   239,     6,     0,    54,    44,   247,
+     7,   239,    57,    58,   239,     6,     0,    54,    45,   181,
+   239,   182,     7,   247,     6,     0,    54,    45,   181,   239,
+   182,     7,   247,     4,     6,     0,    51,    45,   181,   239,
+   182,     7,   247,     6,     0,    54,    47,   181,   239,   182,
+     7,   247,     6,     0,    68,    45,   247,     7,   239,     6,
+     0,    68,    45,   247,     6,     0,    70,     6,     0,    71,
+     6,     0,   109,     0,   110,     0,   111,     0,   112,     0,
+   113,     0,   240,     0,   174,   239,   175,     0,   164,   239,
+     0,   163,   239,     0,   169,   239,     0,   239,   164,   239,
+     0,   239,   163,   239,     0,   239,   165,   239,     0,   239,
+   166,   239,     0,   239,   167,   239,     0,   239,   173,   239,
+     0,   239,   159,   239,     0,   239,   161,   239,     0,   239,
+   160,   239,     0,   239,   162,   239,     0,   239,   156,   239,
+     0,   239,   157,   239,     0,   239,   155,   239,     0,   239,
+   154,   239,     0,   239,   153,   239,     8,   239,     0,    12,
+   174,   239,   175,     0,    13,   174,   239,   175,     0,    14,
+   174,   239,   175,     0,    15,   174,   239,   175,     0,    16,
+   174,   239,   175,     0,    17,   174,   239,   175,     0,    18,
+   174,   239,   175,     0,    19,   174,   239,   175,     0,    20,
+   174,   239,   175,     0,    22,   174,   239,   175,     0,    23,
+   174,   239,   180,   239,   175,     0,    24,   174,   239,   175,
+     0,    25,   174,   239,   175,     0,    26,   174,   239,   175,
+     0,    27,   174,   239,   175,     0,    28,   174,   239,   175,
+     0,    29,   174,   239,   175,     0,    30,   174,   239,   180,
+   239,   175,     0,    31,   174,   239,   180,   239,   175,     0,
+    32,   174,   239,   180,   239,   175,     0,    21,   174,   239,
+   175,     0,    12,   176,   239,   177,     0,    13,   176,   239,
+   177,     0,    14,   176,   239,   177,     0,    15,   176,   239,
+   177,     0,    16,   176,   239,   177,     0,    17,   176,   239,
+   177,     0,    18,   176,   239,   177,     0,    19,   176,   239,
+   177,     0,    20,   176,   239,   177,     0,    22,   176,   239,
+   177,     0,    23,   176,   239,   180,   239,   177,     0,    24,
+   176,   239,   177,     0,    25,   176,   239,   177,     0,    26,
+   176,   239,   177,     0,    27,   176,   239,   177,     0,    28,
+   176,   239,   177,     0,    29,   176,   239,   177,     0,    30,
+   176,   239,   180,   239,   177,     0,    31,   176,   239,   180,
+   239,   177,     0,    32,   176,   239,   180,   239,   177,     0,
+    21,   176,   239,   177,     0,     3,     0,     9,     0,    10,
+     0,    11,     0,   103,     0,   104,     0,   105,     0,     4,
+     0,     4,   176,   239,   177,     0,   179,     4,   176,   177,
+     0,     4,   209,     0,     4,   176,   239,   177,   209,     0,
+     4,   178,     4,     0,     4,   176,   239,   177,   178,     4,
+     0,     4,   178,     4,   209,     0,     4,   176,   239,   177,
+   178,     4,   209,     0,   102,   174,     5,   180,   239,   175,
+     0,   242,     0,   164,   241,     0,   163,   241,     0,   241,
+   164,   241,     0,   241,   163,   241,     0,   181,   239,   180,
+   239,   180,   239,   180,   239,   180,   239,   182,     0,   181,
+   239,   180,   239,   180,   239,   180,   239,   182,     0,   181,
+   239,   180,   239,   180,   239,   182,     0,   174,   239,   180,
+   239,   180,   239,   175,     0,     0,   174,   244,   175,     0,
+     5,     0,   244,   180,     5,     0,     0,   181,   246,   182,
+     0,   174,   246,   175,     0,   247,     0,   246,   180,   247,
+     0,   239,     0,   248,     0,   181,   249,   182,     0,   164,
+   181,   249,   182,     0,   239,     8,   239,     0,   239,     8,
+   239,     8,   239,     0,    41,   181,   239,   182,     0,   212,
+     0,   215,     0,   221,     0,     4,   176,   177,     0,   164,
+     4,   176,   177,     0,     4,   176,   181,   249,   182,   177,
+     0,   164,     4,   176,   181,   249,   182,   177,     0,   239,
+     0,   248,     0,   249,   180,   239,     0,   249,   180,   248,
+     0,   181,   239,   180,   239,   180,   239,   180,   239,   182,
+     0,   181,   239,   180,   239,   180,   239,   182,     0,     4,
+     0,     4,   178,    88,   178,     4,     0,   181,   252,   182,
+     0,     4,   176,   239,   177,   178,    89,     0,   250,     0,
+   252,   180,   250,     0,     5,     0,    40,     0,    35,   174,
+   253,   180,   253,   175,     0,    36,   174,   253,   175,     0,
+    37,   174,   253,   175,     0,    34,   174,   253,   175,     0,
+    34,   174,   253,   180,   249,   175,     0,    34,   174,     4,
+   178,     4,   175,     0,    34,   174,     4,   176,   239,   177,
+   178,     4,   175,     0
 };
 
 #endif
@@ -614,25 +622,26 @@ static const short yyrline[] = { 0,
   1719,  1723,  1739,  1755,  1771,  1791,  1806,  1812,  1818,  1829,
   1839,  1849,  1863,  1881,  1895,  1904,  1910,  1921,  1934,  1979,
   1994,  2010,  2020,  2042,  2046,  2051,  2056,  2067,  2084,  2100,
-  2126,  2153,  2185,  2192,  2197,  2203,  2207,  2215,  2234,  2250,
-  2266,  2271,  2287,  2292,  2308,  2313,  2331,  2354,  2377,  2400,
-  2405,  2428,  2433,  2456,  2461,  2487,  2510,  2533,  2556,  2561,
-  2584,  2590,  2613,  2619,  2644,  2648,  2653,  2680,  2704,  2712,
-  2731,  2749,  2767,  2796,  2831,  2858,  2885,  2899,  2917,  2922,
-  2931,  2933,  2934,  2935,  2936,  2939,  2941,  2942,  2943,  2944,
-  2945,  2946,  2947,  2948,  2955,  2956,  2957,  2958,  2959,  2960,
-  2961,  2962,  2963,  2964,  2965,  2966,  2967,  2968,  2969,  2970,
-  2971,  2972,  2973,  2974,  2975,  2976,  2977,  2978,  2979,  2980,
-  2981,  2982,  2983,  2984,  2985,  2986,  2988,  2989,  2990,  2991,
-  2992,  2993,  2994,  2995,  2996,  2997,  2998,  2999,  3000,  3001,
-  3002,  3003,  3004,  3005,  3006,  3007,  3008,  3013,  3018,  3019,
-  3020,  3021,  3022,  3023,  3027,  3040,  3060,  3074,  3087,  3110,
-  3128,  3146,  3164,  3182,  3189,  3194,  3198,  3202,  3206,  3212,
-  3217,  3221,  3225,  3231,  3235,  3240,  3244,  3249,  3253,  3257,
-  3263,  3269,  3276,  3282,  3286,  3290,  3301,  3308,  3319,  3339,
-  3349,  3359,  3371,  3388,  3407,  3431,  3459,  3465,  3469,  3473,
-  3485,  3490,  3502,  3509,  3530,  3535,  3549,  3555,  3561,  3566,
-  3574,  3582,  3596,  3610,  3614,  3633,  3655
+  2126,  2153,  2185,  2192,  2197,  2203,  2207,  2215,  2224,  2232,
+  2240,  2245,  2253,  2258,  2266,  2271,  2281,  2288,  2295,  2302,
+  2309,  2316,  2323,  2330,  2337,  2344,  2349,  2356,  2361,  2368,
+  2373,  2380,  2385,  2392,  2397,  2404,  2409,  2416,  2421,  2428,
+  2433,  2440,  2445,  2455,  2459,  2464,  2491,  2515,  2523,  2542,
+  2560,  2578,  2607,  2642,  2669,  2696,  2710,  2728,  2733,  2742,
+  2744,  2745,  2746,  2747,  2750,  2752,  2753,  2754,  2755,  2756,
+  2757,  2758,  2759,  2766,  2767,  2768,  2769,  2770,  2771,  2772,
+  2773,  2774,  2775,  2776,  2777,  2778,  2779,  2780,  2781,  2782,
+  2783,  2784,  2785,  2786,  2787,  2788,  2789,  2790,  2791,  2792,
+  2793,  2794,  2795,  2796,  2797,  2799,  2800,  2801,  2802,  2803,
+  2804,  2805,  2806,  2807,  2808,  2809,  2810,  2811,  2812,  2813,
+  2814,  2815,  2816,  2817,  2818,  2819,  2824,  2829,  2830,  2831,
+  2832,  2833,  2834,  2838,  2851,  2871,  2885,  2898,  2921,  2939,
+  2957,  2975,  2993,  3000,  3005,  3009,  3013,  3017,  3023,  3028,
+  3032,  3036,  3042,  3046,  3051,  3055,  3060,  3064,  3068,  3074,
+  3080,  3087,  3093,  3097,  3101,  3112,  3119,  3130,  3150,  3160,
+  3170,  3180,  3197,  3216,  3240,  3268,  3274,  3278,  3282,  3294,
+  3299,  3311,  3318,  3339,  3344,  3358,  3364,  3370,  3375,  3383,
+  3391,  3405,  3419,  3423,  3442,  3464
 };
 #endif
 
@@ -671,11 +680,11 @@ static const char * const yytname[] = {   "$","error","$undefined.","tDOUBLE",
 "@3","Text3DValues","Text3D","@4","InterpolationMatrix","Time","@5","NumericAffectation",
 "NumericIncrement","Affectation","Shape","Transform","MultipleShape","ListOfShapes",
 "Duplicata","Delete","Colorify","Visibility","Command","Loop","Extrude","@6",
-"@7","@8","@9","@10","@11","@12","@13","@14","ExtrudeParameters","ExtrudeParameter",
-"Transfinite","Coherence","BoolExpr","FExpr","FExpr_Single","VExpr","VExpr_Single",
-"ListOfStrings","RecursiveListOfStrings","ListOfListOfDouble","RecursiveListOfListOfDouble",
-"ListOfDouble","FExpr_Multi","RecursiveListOfDouble","ColorExpr","ListOfColor",
-"RecursiveListOfColor","StringExpr", NULL
+"@7","@8","@9","@10","@11","@12","@13","@14","@15","@16","@17","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
 
@@ -699,24 +708,25 @@ static const short yyr1[] = {     0,
    216,   216,   216,   217,   218,   218,   218,   218,   219,   219,
    219,   219,   219,   219,   219,   219,   219,   220,   220,   220,
    220,   220,   220,   220,   220,   220,   220,   221,   221,   221,
-   222,   221,   223,   221,   224,   221,   221,   221,   221,   225,
-   221,   226,   221,   227,   221,   221,   221,   221,   228,   221,
-   229,   221,   230,   221,   231,   231,   232,   232,   232,   233,
-   233,   233,   233,   233,   233,   233,   233,   233,   234,   234,
-   235,   235,   235,   235,   235,   236,   236,   236,   236,   236,
-   236,   236,   236,   236,   236,   236,   236,   236,   236,   236,
-   236,   236,   236,   236,   236,   236,   236,   236,   236,   236,
-   236,   236,   236,   236,   236,   236,   236,   236,   236,   236,
-   236,   236,   236,   236,   236,   236,   236,   236,   236,   236,
-   236,   236,   236,   236,   236,   236,   236,   236,   236,   236,
-   236,   236,   236,   236,   236,   236,   236,   237,   237,   237,
-   237,   237,   237,   237,   237,   237,   237,   237,   237,   237,
-   237,   237,   237,   237,   238,   238,   238,   238,   238,   239,
-   239,   239,   239,   240,   240,   241,   241,   242,   242,   242,
-   243,   243,   244,   244,   244,   244,   245,   245,   245,   245,
-   245,   245,   245,   245,   245,   245,   246,   246,   246,   246,
-   247,   247,   247,   247,   248,   248,   249,   249,   250,   250,
-   250,   250,   250,   250,   250,   250,   250
+   222,   221,   223,   221,   224,   221,   221,   221,   221,   221,
+   221,   221,   221,   221,   221,   225,   221,   226,   221,   227,
+   221,   228,   221,   229,   221,   230,   221,   231,   221,   232,
+   221,   233,   221,   234,   234,   235,   235,   235,   236,   236,
+   236,   236,   236,   236,   236,   236,   236,   237,   237,   238,
+   238,   238,   238,   238,   239,   239,   239,   239,   239,   239,
+   239,   239,   239,   239,   239,   239,   239,   239,   239,   239,
+   239,   239,   239,   239,   239,   239,   239,   239,   239,   239,
+   239,   239,   239,   239,   239,   239,   239,   239,   239,   239,
+   239,   239,   239,   239,   239,   239,   239,   239,   239,   239,
+   239,   239,   239,   239,   239,   239,   239,   239,   239,   239,
+   239,   239,   239,   239,   239,   239,   240,   240,   240,   240,
+   240,   240,   240,   240,   240,   240,   240,   240,   240,   240,
+   240,   240,   240,   241,   241,   241,   241,   241,   242,   242,
+   242,   242,   243,   243,   244,   244,   245,   245,   245,   246,
+   246,   247,   247,   247,   247,   248,   248,   248,   248,   248,
+   248,   248,   248,   248,   248,   249,   249,   249,   249,   250,
+   250,   250,   250,   251,   251,   252,   252,   253,   253,   253,
+   253,   253,   253,   253,   253,   253
 };
 
 static const short yyr2[] = {     0,
@@ -738,25 +748,26 @@ static const short yyr2[] = {     0,
      2,     6,     6,     6,     6,     4,     6,     6,     6,     4,
      6,     3,     4,     5,     3,     3,     4,     4,     3,     7,
      3,     7,     3,     2,     2,    15,     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,     9,     8,     8,     6,     4,     2,     2,
-     1,     1,     1,     1,     1,     1,     3,     2,     2,     2,
+    10,     1,     2,     1,     3,     4,     1,     5,    11,    13,
+     0,     7,     0,    13,     0,    15,     8,     8,     8,    12,
+    12,    12,    14,    14,    14,     0,    12,     0,    12,     0,
+    12,     0,    16,     0,    16,     0,    16,     0,    18,     0,
+    18,     0,    18,     1,     2,     9,     7,     2,     6,     9,
+     9,     8,     9,     8,     8,     6,     4,     2,     2,     1,
+     1,     1,     1,     1,     1,     3,     2,     2,     2,     3,
      3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-     3,     3,     3,     3,     5,     4,     4,     4,     4,     4,
+     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,     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,     1,     1,     1,     4,     4,     2,     5,     3,
-     6,     4,     7,     6,     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,     1,
-     6,     4,     4,     4,     6,     6,     9
+     4,     4,     6,     6,     6,     4,     1,     1,     1,     1,
+     1,     1,     1,     1,     4,     4,     2,     5,     3,     6,
+     4,     7,     6,     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,     1,     6,
+     4,     4,     4,     6,     6,     9
 };
 
 static const short yydefact[] = {     0,
@@ -768,1453 +779,1490 @@ static const short yydefact[] = {     0,
      0,     0,     0,     0,     0,     0,   182,     0,   187,     0,
    184,     0,     0,     0,     0,     0,    48,    50,    49,    51,
     52,    53,    54,    55,    56,    57,    62,    61,    58,    59,
-    60,     0,     9,    10,    12,    11,    13,   324,   324,     0,
-   298,   305,   359,    91,   299,   300,   301,     0,     0,     0,
+    60,     0,     9,    10,    12,    11,    13,   333,   333,     0,
+   307,   314,   368,    91,   308,   309,   310,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   360,     0,   302,   303,   304,    92,    93,    94,
+     0,     0,   369,     0,   311,   312,   313,    92,    93,    94,
     95,     0,     0,     0,    96,    97,     0,     0,     0,     0,
-     0,     0,     0,   236,     0,     0,   175,     0,   177,     0,
+     0,     0,     0,   245,     0,     0,   175,     0,   177,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   315,     0,     0,
-     0,     0,     0,     0,   150,     0,     0,   150,   229,   230,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   353,
-     0,     0,     0,     0,     0,   174,     0,   183,     0,   359,
-   150,     0,   150,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   324,     0,     0,
+     0,     0,     0,     0,     0,     0,   150,     0,     0,   150,
+   238,   239,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   362,     0,     0,     0,     0,     0,   174,     0,   183,
+     0,   368,   150,     0,   150,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   308,     0,    67,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   317,     0,    67,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   305,   239,   238,   240,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   102,   171,     0,     0,     0,     0,     0,
+     0,     0,   314,   248,   247,   249,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   102,   171,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   169,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   305,     0,     0,     0,   340,   341,   342,   333,     0,
-   334,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   317,   316,     0,     0,     0,
-     0,   150,   150,     0,     0,     0,     0,     0,     0,     0,
-     0,   162,     0,     0,     0,     0,     0,     0,   173,     0,
-     0,     0,     0,     0,     0,     0,   150,     0,     0,     0,
-   185,     0,     0,   165,     0,   166,     0,     0,     0,     0,
+     0,     0,   169,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   314,     0,     0,     0,   349,   350,   351,
+   342,     0,   343,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   326,   325,     0,
+     0,     0,     0,   150,   150,     0,     0,     0,     0,     0,
+     0,     0,     0,   150,     0,     0,     0,     0,   162,     0,
+     0,     0,     0,     0,     0,   173,     0,     0,     0,     0,
+     0,     0,     0,   150,     0,     0,     0,   185,     0,     0,
+   165,     0,   166,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   326,     0,     0,     0,
-     0,     0,   310,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   335,     0,     0,     0,     0,     0,   319,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   237,     0,     0,   347,   348,     0,
-     0,    91,     0,     0,     0,     0,     0,    98,     0,   254,
-   253,   251,   252,   247,   249,   248,   250,   242,   241,   243,
-   244,   245,   246,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   305,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   319,   318,   149,
-     0,   148,   147,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   156,   151,   228,     0,   163,     0,   160,
+     0,   246,     0,     0,   356,   357,     0,     0,    91,     0,
+     0,     0,     0,     0,    98,     0,   263,   262,   260,   261,
+   256,   258,   257,   259,   251,   250,   252,   253,   254,   255,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   314,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   328,   327,   149,     0,   148,   147,
+     0,     0,     0,     0,     0,     0,     0,   191,     0,     0,
+     0,     0,     0,   156,   151,   237,     0,   163,     0,   160,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,   186,     0,   167,   168,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   325,     0,
-     0,    15,     0,   306,   312,    67,    77,     0,     0,     0,
-    89,     0,    68,    69,    70,    71,    72,   256,   277,   257,
-   278,   258,   279,   259,   280,   260,   281,   261,   282,   262,
-   283,   263,   284,   264,   285,   276,   297,   265,   286,     0,
-     0,   267,   288,   268,   289,   269,   290,   270,   291,   271,
-   292,   272,   293,     0,     0,     0,     0,     0,     0,     0,
-     0,   364,     0,     0,   362,   363,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   334,     0,
+     0,    15,     0,   315,   321,    67,    77,     0,     0,     0,
+    89,     0,    68,    69,    70,    71,    72,   265,   286,   266,
+   287,   267,   288,   268,   289,   269,   290,   270,   291,   271,
+   292,   272,   293,   273,   294,   285,   306,   274,   295,     0,
+     0,   276,   297,   277,   298,   278,   299,   279,   300,   280,
+   301,   281,   302,     0,     0,     0,     0,     0,     0,     0,
+     0,   373,     0,     0,   371,   372,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,   108,     0,     0,     0,
-     0,   307,     0,    63,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   343,     0,     0,     0,     0,   335,
-   337,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   316,     0,    63,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   352,     0,     0,     0,     0,   344,
+   346,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,   143,   145,
+     0,     0,     0,     0,     0,   188,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   164,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   164,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   327,     0,   324,     0,
-   309,     0,     0,     0,     0,     0,     0,     0,    65,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   306,   101,   349,   350,     0,     0,     0,     0,
-     0,   103,   104,   106,     0,     0,   357,     0,   112,   255,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   336,
+     0,   333,     0,   318,     0,     0,     0,     0,     0,     0,
+     0,    65,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   315,   101,   358,   359,     0,
+     0,     0,     0,     0,   103,   104,   106,     0,     0,   366,
+     0,   112,   264,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   348,   353,     0,   345,     0,   119,
+     0,     0,     0,     0,   229,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   339,   344,     0,   336,     0,   119,     0,     0,     0,
-     0,   220,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   157,     0,
-     0,     0,     0,   227,   161,     0,     0,   158,   159,     0,
-     0,     0,   328,     0,   354,     0,     0,     0,   178,     0,
+     0,     0,     0,     0,     0,   224,   157,     0,     0,     0,
+     0,   236,   161,     0,     0,   158,   159,     0,     0,     0,
+   337,     0,   363,     0,     0,     0,   178,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   231,   232,   233,   234,   235,     0,     0,
-     0,     0,     0,     0,     0,    14,     0,   311,   170,     0,
-     0,     0,     0,     0,   331,     0,   266,   287,   273,   294,
-   274,   295,   275,   296,     0,   366,   365,   361,   314,     0,
-    91,     0,     0,     0,     0,    99,     0,     0,     0,   355,
-    64,     0,   116,   122,     0,   124,     0,     0,   120,     0,
-   121,   141,     0,     0,   338,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   172,     0,
-     0,     0,     0,   150,     0,   191,     0,   200,     0,   209,
-     0,     0,     0,     0,     0,     0,   127,   128,     0,     0,
+     0,   240,   241,   242,   243,   244,     0,     0,     0,     0,
+     0,     0,     0,    14,     0,   320,   170,     0,     0,     0,
+     0,     0,   340,     0,   275,   296,   282,   303,   283,   304,
+   284,   305,     0,   375,   374,   370,   323,     0,    91,     0,
+     0,     0,     0,    99,     0,     0,     0,   364,    64,     0,
+   116,   122,     0,   124,     0,     0,   120,     0,   121,   141,
+     0,     0,   347,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   172,     0,     0,     0,
+     0,   150,     0,   206,     0,   208,     0,   210,     0,     0,
+   228,     0,   192,   225,     0,     0,     0,     0,     0,     0,
+   127,   128,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   324,   313,    66,
-     0,    73,     0,     0,     0,     0,     0,    75,     0,     0,
-     0,     0,   109,     0,     0,   110,     0,   358,     0,     0,
-     0,   130,   138,   345,     0,     0,   225,   133,   134,     0,
-     0,     0,   223,   226,   140,   117,   132,   139,   142,     0,
-     0,     0,   323,     0,   322,     0,     0,   188,     0,     0,
-   197,     0,     0,   206,     0,   152,   153,   154,   155,     0,
-     0,   328,     0,     0,     0,     0,     0,   352,     0,   180,
-   179,     0,     0,     0,     0,    17,     0,    26,     0,    30,
-     0,    24,     0,     0,    29,     0,    34,    32,     0,     0,
-     0,     0,     0,     0,    41,     0,     0,     0,     0,     0,
-    46,     0,     0,    78,     0,     0,     0,   332,     0,     0,
-     0,     0,   100,   105,   107,     0,   113,     0,     0,   123,
-   125,   346,     0,   222,   221,   224,   114,   115,   150,     0,
-   146,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   330,   329,     0,     0,     0,     0,     0,     0,   328,     0,
+     0,   333,   322,    66,     0,    73,     0,     0,     0,     0,
+     0,    75,     0,     0,     0,     0,   109,     0,     0,   110,
+     0,   367,     0,     0,     0,   130,   138,   354,     0,     0,
+   234,   133,   134,     0,     0,     0,   232,   235,   140,   117,
+   132,   139,   142,     0,     0,     0,   332,     0,   331,     0,
+     0,   197,     0,     0,   198,     0,     0,   199,     0,     0,
+     0,     0,   152,   153,   154,   155,     0,     0,   337,     0,
+     0,     0,     0,     0,   361,     0,   180,   179,     0,     0,
+     0,     0,    17,     0,    26,     0,    30,     0,    24,     0,
+     0,    29,     0,    34,    32,     0,     0,     0,     0,     0,
+     0,    41,     0,     0,     0,     0,     0,    46,     0,     0,
+    78,     0,     0,     0,   341,     0,     0,     0,     0,   100,
+   105,   107,     0,   113,     0,     0,   123,   125,   355,     0,
+   231,   230,   233,   114,   115,   150,     0,   146,     0,     0,
+     0,     0,     0,     0,   150,     0,     0,     0,     0,     0,
+   339,   338,     0,     0,     0,     0,     0,     0,   337,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    74,     0,     0,     0,    76,    90,   367,     0,   356,     0,
-     0,     0,     0,   321,     0,     0,     0,     0,     0,     0,
-     0,     0,   215,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   351,   181,     0,    31,     0,     0,
-     0,     0,    21,     0,    27,     0,    33,    22,    35,     0,
-    38,     0,    42,    43,     0,     0,    45,     0,     0,     0,
-     0,     0,     0,   111,     0,     0,   144,     0,     0,   193,
-     0,   219,     0,     0,   216,   202,     0,     0,   211,     0,
-     0,     0,     0,     0,     0,   129,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    82,     0,    88,     0,     0,   320,   189,     0,     0,     0,
-   192,   198,     0,     0,   201,   207,     0,     0,   210,   118,
-   131,     0,     0,   135,     0,     0,     0,     0,    25,    28,
-    36,     0,    37,    44,    39,     0,     0,     0,     0,     0,
-     0,     0,   195,     0,     0,   204,     0,   213,     0,     0,
-     0,     0,     0,     0,     0,     0,    79,     0,    86,     0,
-     0,     0,   190,     0,     0,     0,   199,     0,     0,   208,
-     0,     0,     0,     0,     0,    20,    23,     0,     0,     0,
-    80,     0,   176,     0,     0,     0,     0,     0,     0,     0,
+    74,     0,     0,     0,    76,    90,   376,     0,   365,     0,
+     0,     0,     0,   330,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   193,     0,     0,     0,     0,     0,     0,
+     0,   360,   181,     0,    31,     0,     0,     0,     0,    21,
+     0,    27,     0,    33,    22,    35,     0,    38,     0,    42,
+    43,     0,     0,    45,     0,     0,     0,     0,     0,     0,
+   111,     0,     0,   144,     0,   212,     0,     0,   214,     0,
+     0,   216,     0,     0,   189,     0,   150,     0,     0,     0,
+     0,     0,     0,   129,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,    82,     0,
+    88,     0,     0,   329,   200,     0,     0,   207,   201,     0,
+     0,   209,   202,     0,     0,   211,     0,   195,     0,   227,
+   118,   131,     0,     0,   135,     0,     0,     0,     0,    25,
+    28,    36,     0,    37,    44,    39,     0,     0,     0,     0,
+     0,     0,     0,   218,     0,   220,     0,   222,   194,   190,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   194,     0,     0,   218,   203,     0,   212,     0,
-     0,     0,     0,     0,    40,    16,    81,    83,     0,    84,
-   126,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   196,   217,   205,   214,     0,     0,     0,     0,    85,
+    79,     0,    86,     0,     0,     0,   203,     0,     0,   204,
+     0,     0,   205,     0,     0,   226,     0,     0,     0,     0,
+    20,    23,     0,     0,     0,    80,     0,   176,     0,     0,
+     0,     0,     0,     0,     0,   196,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   213,     0,   215,     0,
+   217,     0,     0,     0,     0,     0,    40,    16,    81,    83,
+     0,    84,   126,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   219,   221,   223,     0,     0,     0,     0,    85,
     87,     0,     0,     0,     0,     0,   137,     0,     0,     0,
      0,     0,   136,     0,    18,     0,     0,     0,     0,     0,
      0,     0,    19,     0,     0,     0
 };
 
-static const short yydefgoto[] = {  1504,
-     2,    14,    15,    16,    17,     3,    67,    68,    69,   445,
-  1071,  1077,   643,   814,  1240,  1420,   644,  1378,  1459,   645,
-  1422,   646,   647,   818,   141,   251,    70,   575,   346,   561,
-   562,   347,    74,    75,    76,    77,    78,   348,  1119,  1348,
-  1404,  1122,  1353,  1408,  1125,  1357,  1411,  1262,  1263,    80,
-    81,   939,   349,   144,   366,   178,   246,   438,  1032,   954,
-   955,   351,   500,   202,   711,   848,   145
+static const short yydefgoto[] = {  1534,
+     2,    14,    15,    16,    17,     3,    67,    68,    69,   452,
+  1095,  1101,   653,   827,  1270,  1455,   654,  1409,  1491,   655,
+  1457,   656,   657,   831,   141,   253,    70,   585,   348,   568,
+   569,   349,    74,    75,    76,    77,    78,   350,   767,  1346,
+  1421,  1143,  1146,  1149,  1376,  1380,  1384,  1438,  1441,  1444,
+   905,   906,    80,    81,   957,   351,   144,   368,   178,   248,
+   445,  1056,   972,   973,   353,   507,   204,   721,   861,   145
 };
 
-static const short yypact[] = {  2410,
-    53,   531,  2559,-32768,    36,    64,    73,    88,    92,   104,
-   -57,   -28,    -4,-32768,-32768,-32768,-32768,  1785,    18,     3,
-   136,    51,   116,   140,   -23,   124,   157,   172,   229,   178,
-   242,   311,   329,   169,   383,   183,   212,   282,   -77,   -77,
-   285,   288,    14,   426,    17,   468,   491,   185,   474,   497,
-   500,   342,   347,   -11,    21,    25,-32768,   356,-32768,   546,
--32768,   558,   567,   553,    15,    28,-32768,-32768,-32768,-32768,
+static const short yypact[] = {  2531,
+    37,    43,  2680,-32768,    50,    76,    91,   106,   115,   131,
+   -66,   -25,   -15,-32768,-32768,-32768,-32768,  1768,     5,     9,
+   185,    42,    54,    58,   -19,   145,   109,   125,   171,   153,
+   179,   235,   295,    27,   302,   458,   191,   194,   -96,   -96,
+   224,   396,     1,   367,    13,   414,   441,   102,   461,   478,
+   489,   334,   364,   -22,    16,    31,-32768,   369,-32768,   543,
+-32768,   558,   562,   537,    19,    26,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,  2439,-32768,-32768,-32768,-32768,-32768,   430,   430,   607,
--32768,   510,    23,-32768,-32768,-32768,-32768,   110,   190,   206,
-   274,   277,   283,   299,   324,   350,   355,   370,   381,   384,
-   389,   393,   398,   439,   449,   450,   472,   489,   442,   445,
-   453,   462,-32768,   490,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,  1888,  1888,  1888,-32768,-32768,  1888,   387,    65,   690,
-  1888,   667,   648,-32768,   692,   704,-32768,  1888,-32768,  1888,
-  1888,  1888,   544,  1888,   548,  1888,  1888,  1370,  1888,   556,
-   572,   596,  1370,   562,   597,   617,   625,   626,   632,   642,
-   763,   -77,   -77,   -77,  1888,  1888,   -63,-32768,   204,   -77,
-   645,   646,   663,   654,-32768,  1370,    34,-32768,-32768,-32768,
-  1370,  1370,   684,   685,   856,  1888,  1888,   -50,  1888,   694,
-  1888,   682,   791,  1888,  1888,-32768,   877,-32768,   710,-32768,
--32768,   879,-32768,   880,   717,   718,   719,   721,   722,   723,
-   724,   725,   726,   727,   728,   729,   730,   731,   732,   740,
-   750,   751,   752,   753,   754,   757,   761,   762,   765,   766,
-   767,   768,   769,   770,   889,   773,   755,   775,  1888,   933,
--32768,   -77,-32768,  1888,  1888,  1888,  1888,  1888,  1888,  1888,
-  1888,  1888,  1888,  1888,  1888,  1888,  1888,  1888,  1888,  1888,
-  1888,  1888,  1888,  1888,  1888,  1888,  1888,  1888,  1888,  1888,
-  1888,  1888,  1888,  1888,  1888,  1888,  1888,  1888,  1888,  1888,
-  1888,  1888,  1888,  1888,  1888,    91,   313,   313,   313,   940,
-   593,   774,   774,   774,  4767,   941,  1820,  4017,   344,   771,
-   943,   780,   714,-32768,-32768,  1888,  1888,  1888,  1888,  1888,
-  1888,  1888,  1888,  1888,  1888,  1888,  1888,  1888,  1888,  1888,
--32768,   -99,  3071,  4790,  4813,  4836,  1888,  4859,  1888,  4882,
-  4905,   618,   800,  1500,  1820,-32768,-32768,-32768,  1193,   978,
--32768,  4928,  1888,  1888,  1888,   979,  1888,  1888,  1888,  1888,
-  1888,  1888,  1888,   812,   191,-32768,-32768,  3093,  3115,   -77,
-   -77,   479,   479,   257,  1888,  1888,  1888,  1888,  2199,   643,
-   982,-32768,  1888,  2220,   983,   984,  1888,  1888,-32768,  4951,
-  4974,   903,  1888,  4997,   905,  3137,-32768,   815,  1945,  5020,
--32768,  1888,  2265,-32768,  2286,-32768,   993,   996,   997,   998,
-   999,  1000,  1001,  1004,  1005,  1006,  1007,  1008,  1012,  1015,
-  1017,  1018,  1019,  1020,  1021,  1022,  1023,  1024,  1025,   873,
-  1027,  1028,  1029,  1030,  1033,  1032,-32768,    -9,  1036,  1038,
-  1042,  4042,   513,   259,     6,  5043,  4067,  5066,  4092,  5089,
-  4117,  5112,  4142,  5135,  4167,  5158,  4192,  5181,  4217,  5204,
-  4242,  5227,  4267,  5250,  4292,  5273,  4317,  3159,  3181,  5296,
-  4342,  5319,  4367,  5342,  4392,  5365,  4417,  5388,  4442,  5411,
-  4467,  3203,  3225,  3247,  3269,  3291,  3313,   498,   113,   868,
-   882,   883,   874,  1888,-32768,  1370,  2060,  1193,-32768,   507,
-   451,   313,  1888,  1053,  1056,    24,   884,-32768,  1972,   592,
-   540,   569,   569,   444,   444,   444,   444,   222,   222,   774,
-   774,   774,   774,  1058,  1820,  1888,  1059,  1060,  1065,  5434,
-  1066,  5457,  1067,  1069,   948,  1888,   647,  1820,   534,  1888,
-  1888,  1077,  2591,  5480,  5503,  1888,  2615,  2639,  5526,  5549,
-  5572,  5595,  5618,   887,   -77,  1888,  1888,-32768,-32768,-32768,
-   912,  2620,-32768,   913,  1888,  3335,  3357,  3379,  4492,   -29,
-   -37,   -20,   -25,-32768,-32768,-32768,  1888,-32768,  4517,-32768,
-   916,   917,  4542,  4567,  1093,  1094,   928,  5641,  1096,   930,
-  1888,  2345,  1888,  1888,-32768,  5664,-32768,-32768,   924,   929,
-   934,   935,   936,   938,   944,   946,   951,   955,   956,   957,
-   958,   959,   960,   961,   963,   964,   968,   969,   980,   981,
-   988,  1002,  1009,  1013,  1014,  1026,  1031,  1034,-32768,  1105,
-   945,-32768,  1035,    37,-32768,-32768,-32768,   939,   949,   947,
--32768,  1152,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,  2560,-32768,-32768,-32768,-32768,-32768,   413,   413,   448,
+-32768,   280,    17,-32768,-32768,-32768,-32768,  -125,   -45,   182,
+   270,   352,   387,   447,   453,   482,   493,   499,   510,   514,
+   517,   526,   530,   541,   549,   550,   585,   586,   418,   428,
+   433,   457,-32768,   472,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,  2013,  2013,  2013,-32768,-32768,  2013,  1445,   141,   571,
+  2013,   629,   825,-32768,   643,   655,-32768,  2013,-32768,  2013,
+  2013,  2013,   487,  2013,   492,  2013,  2013,  1272,  2013,   471,
+   500,   513,  1272,   520,   531,   533,   545,   556,   557,   566,
+   690,   -96,   -96,   -96,  2013,  2013,   -87,-32768,   -57,   -96,
+   569,   575,   583,  1665,   -53,   591,-32768,  1272,    28,-32768,
+-32768,-32768,  1272,  1272,   608,   625,   765,  2013,  2013,   -48,
+  2013,   624,  2013,   640,   716,  2013,  2013,-32768,   829,-32768,
+   671,-32768,-32768,   847,-32768,   851,   686,   694,   702,   711,
+   731,   736,   737,   738,   739,   740,   741,   742,   743,   744,
+   745,   747,   748,   749,   750,   752,   753,   758,   759,   760,
+   761,   762,   763,   764,   766,   767,   859,   695,   770,   768,
+  2013,   861,-32768,   -96,-32768,  2013,  2013,  2013,  2013,  2013,
+  2013,  2013,  2013,  2013,  2013,  2013,  2013,  2013,  2013,  2013,
+  2013,  2013,  2013,  2013,  2013,  2013,  2013,  2013,  2013,  2013,
+  2013,  2013,  2013,  2013,  2013,  2013,  2013,  2013,  2013,  2013,
+  2013,  2013,  2013,  2013,  2013,  2013,  2013,   381,   476,   476,
+   476,   934,   463,   769,   769,   769,  4946,   939,  1945,  4196,
+   278,   771,   943,   777,   860,-32768,-32768,  2013,  2013,  2013,
+  2013,  2013,  2013,  2013,  2013,  2013,  2013,  2013,  2013,  2013,
+  2013,  2013,-32768,   -80,  3250,  4969,  4992,  5015,  2013,  5038,
+  2013,  5061,  5084,   477,   773,  1721,  1945,-32768,-32768,-32768,
+  1828,   948,-32768,  5107,  2013,  2013,  2013,   950,  2013,  2013,
+  2013,  2013,  2013,  2013,  2013,   783,   155,-32768,-32768,  3272,
+  3294,   -96,   -96,   647,   647,   327,  2013,  2013,  2013,  1665,
+  1665,  2013,   337,-32768,  2013,   848,   169,   953,-32768,  2013,
+  2236,   954,   955,  2013,  2013,-32768,  5130,  5153,   874,  2013,
+  5176,   875,  3316,-32768,   784,  1937,  5199,-32768,  2013,  2257,
+-32768,  2305,-32768,   961,   964,   965,   966,   968,   969,   970,
+   971,   972,   978,   988,   989,   990,   991,   992,   994,   998,
+   999,  1000,  1001,  1002,  1003,  1006,   870,  1013,  1023,  1024,
+  1029,  1032,  1034,-32768,    39,  1035,  1031,  1036,  4221,   217,
+   -16,    10,  5222,  4246,  5245,  4271,  5268,  4296,  5291,  4321,
+  5314,  4346,  5337,  4371,  5360,  4396,  5383,  4421,  5406,  4446,
+  5429,  4471,  5452,  4496,  3338,  3360,  5475,  4521,  5498,  4546,
+  5521,  4571,  5544,  4596,  5567,  4621,  5590,  4646,  3382,  3404,
+  3426,  3448,  3470,  3492,   379,   150,   787,   867,   872,   868,
+  2013,-32768,  1272,  2220,  1828,-32768,   590,   219,   476,  2013,
+  1043,  1046,    18,   876,-32768,  1972,   449,  1014,   582,   582,
+   685,   685,   685,   685,   258,   258,   769,   769,   769,   769,
+  1045,  1945,  2013,  1047,  1049,  1050,  5613,  1051,  5636,  1052,
+  1053,  1486,  2013,   494,  1945,   595,  2013,  2013,  1054,  2043,
+  5659,  5682,  2013,  2481,  2742,  5705,  5728,  5751,  5774,  5797,
+   887,   -96,  2013,  2013,-32768,-32768,-32768,   884,  2741,-32768,
+   885,  2013,  3514,  3536,  3558,  3222,   -96,  2326,  4671,   -21,
+   -39,   -37,    29,-32768,-32768,-32768,  2013,-32768,  4696,-32768,
+   871,   889,  4721,  4746,  1061,  1064,   898,  5820,  1068,   899,
+  2013,  2385,  2013,  2013,-32768,  5843,-32768,-32768,   901,   903,
+   904,   905,   906,   907,   909,   910,   911,   913,   914,   916,
+   917,   918,   919,   920,   921,   923,   924,   925,   926,   928,
+   929,   930,   931,   932,   933,   951,   952,   956,-32768,  1109,
+   959,-32768,   957,   317,-32768,-32768,-32768,   967,   980,   949,
+-32768,  1132,-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,  1888,
-  1888,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,  1888,  1888,  1888,  1888,  1888,  1888,  1888,
-  1155,-32768,  1820,   313,-32768,-32768,  1888,  4592,  1172,  1820,
-  1003,    76,  1888,  1173,  1175,   756,-32768,  1178,  1011,    21,
-  1186,-32768,  1888,-32768,   145,  3401,   -77,  1370,  1370,  1188,
-  1370,  1190,  1370,  1370,-32768,  1820,  2663,  1240,   535,-32768,
-  2022,   926,  1037,  1191,  1195,  1198,   478,  1200,  1201,  1202,
-  1203,  1206,  1209,  1212,  1196,   272,  3423,  3445,-32768,-32768,
-  2687,   -77,   -77,   -77,  1215,  1820,  1820,  1820,  1820,  1010,
-  1216,  1888,  1888,  1217,  1220,  1370,  1370,  1888,  1221,  1370,
-  1223,  3467,-32768,  2037,   620,  1222,  1227,  1888,  1888,   -77,
-  1228,  1230,  1071,  1231,  1237,  1370,  1370,  1238,   -77,  1239,
-  1242,  1370,  1370,  1244,  1245,  1270,  1271,  1272,  1370,   483,
-  1370,  1273,  1287,  1289,  1292,  1293,-32768,  1294,   430,  1297,
--32768,  1298,    12,  1129,  1888,  1888,  1370,  1117,-32768,  5687,
-  4617,  5710,  4642,  5733,  4667,  5756,  4692,  4717,  1130,   203,
-  1131,  5779,   -49,-32768,  1193,-32768,    68,   541,  1132,  1300,
-  1124,-32768,-32768,-32768,    21,  1888,-32768,   539,-32768,  2359,
-  1302,  1888,    11,    50,    54,  1370,  1305,  1370,  1306,  1307,
-   586,-32768,-32768,  1820,-32768,  1888,-32768,  1888,  1370,  1370,
-  1370,-32768,   619,  1370,  1370,  1370,  1370,  1370,  1370,  1370,
-   720,  1888,  1888,  1888,  1133,   -71,   133,   199,-32768,   610,
-   640,   649,   653,-32768,-32768,  3489,  3511,-32768,-32768,  1309,
-  1311,  5802,   142,  1232,-32768,  1888,  1888,  1888,-32768,  1137,
-  1140,  3533,  3555,  -118,  1141,  1147,  1143,  1150,  1148,  1154,
-  1151,  1153,   -97,  1156,  1157,  1162,  1159,  1161,  1181,  1182,
-  1183,  1184,  1192,-32768,-32768,-32768,-32768,-32768,  1185,  1189,
-  1225,  1235,  1243,  1233,  1246,-32768,  1247,   513,-32768,  1321,
-  1888,  3577,  3599,   656,-32768,  1888,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,  1229,-32768,-32768,-32768,-32768,  1370,
-   313,  1888,  1324,  1367,    24,-32768,  1372,  4742,    21,-32768,
--32768,  3621,-32768,-32768,   -77,-32768,   -77,  1404,-32768,  1406,
--32768,-32768,  1199,   657,  2359,  3643,  1412,  1414,  1416,  1888,
-  1888,   836,  1418,  1419,  1422,  1423,  1424,  1431,-32768,  1992,
-  2711,  5825,  1987,   479,   -77,  1432,   -77,  1433,   -77,  1434,
-  1435,  1436,  1437,  1440,  1888,  1888,-32768,-32768,  1443,  1370,
-  1370,  1360,  1370,  2524,   424,  5848,  1888,  1448,  1888,  1370,
-  1446,  1450,  1449,  1291,  1451,   483,  1452,  1456,  1888,  1454,
-  1458,  1457,  1459,  1463,   483,  1888,  1888,  1888,  1370,  1461,
-  1465,   483,  1888,  1466,  1467,  1470,  1888,   430,-32768,-32768,
-   253,  2359,  1888,  1888,  1370,  1281,   661,  2359,  1473,  1472,
-  1474,  1407,-32768,  1447,  1475,-32768,  1301,-32768,  1888,    26,
-    48,-32768,-32768,-32768,  1308,  1888,-32768,-32768,-32768,  1529,
-  1569,  1476,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1703,
-  1477,  1290,-32768,  1888,-32768,  1304,   292,-32768,  1303,   297,
--32768,  1310,   301,-32768,  1313,-32768,-32768,-32768,-32768,  3665,
-  3687,   142,   266,   665,  1314,  1403,  1888,-32768,  1888,-32768,
--32768,  3709,  1315,  3731,  1312,-32768,  1316,-32768,  1317,-32768,
-  1323,-32768,  1319,  5871,-32768,  1320,-32768,-32768,  1326,  1327,
-  5894,  3753,  5917,  1325,-32768,  1331,  1332,  3775,  1356,  1362,
--32768,  3797,  1358,-32768,  1888,  3819,  3841,-32768,  1370,  1888,
-  1482,  1365,-32768,-32768,-32768,    21,-32768,  1453,  3863,-32768,
--32768,-32768,  3885,-32768,-32768,-32768,-32768,-32768,   479,  2561,
--32768,  1612,    75,  1612,    75,  1612,    75,  1888,  1888,  1460,
--32768,-32768,  1370,  1888,  2735,  2759,  1370,  1535,   142,   483,
-  1540,  1888,  1539,   483,  1542,  1543,  1544,  1546,  1547,  1888,
-  1548,  1370,  1550,  1552,  1888,  1562,  1570,  1888,  1572,  1397,
-  2359,  1888,  1888,   669,  2359,-32768,-32768,  1573,-32768,  1888,
-  1576,  1400,  1888,-32768,  1612,  1612,  1888,  2783,   306,  1577,
-  1405,   -42,-32768,  2807,   319,   -32,  2831,   339,   -15,  2855,
-  2879,  1409,  1408,  1812,-32768,-32768,  1402,-32768,  1411,  1413,
-  1415,  3907,-32768,  1410,-32768,  1417,-32768,-32768,-32768,  5940,
--32768,  1426,-32768,-32768,  5963,  1421,-32768,  5986,  1427,  1888,
-  6009,  3929,  1581,-32768,  3951,  1428,-32768,  2903,  2052,  1588,
-  1888,-32768,  1370,  1591,-32768,  1592,  1888,  1593,  1604,  1888,
-  1605,  1606,  1607,  1370,  1370,-32768,  1608,   483,   483,   483,
-   483,  1611,  1613,  1614,   483,  1639,  1640,  1641,  1643,   672,
--32768,  1888,-32768,  1888,  1644,-32768,-32768,  1469,  2927,  1438,
--32768,-32768,  1471,  2951,-32768,-32768,  1478,  2975,-32768,-32768,
--32768,  1481,  1480,-32768,  1486,  1487,  1479,  1483,-32768,-32768,
--32768,  1488,-32768,-32768,-32768,  1490,  1645,  1491,  6032,  2999,
-  1493,    75,  1647,  1370,    75,  1649,    75,  1650,  1370,  1587,
-   483,   483,  1651,  1669,   483,  1671,-32768,   313,-32768,  1672,
-  1675,    39,-32768,  1496,   673,    40,-32768,  1506,   100,-32768,
-  1516,  1517,  1519,  1518,  1521,-32768,-32768,  1530,  1531,   676,
--32768,  1523,-32768,  1525,  1702,    75,  1370,  1704,  1705,    75,
-  1707,    75,  1634,  1888,   483,  1370,  1713,  1714,   313,  1715,
-   313,  1721,-32768,   109,  1555,-32768,-32768,   112,-32768,   249,
-  1557,  3973,  1559,  1560,-32768,-32768,-32768,-32768,   677,-32768,
--32768,  1735,  1737,  1738,  1740,  1888,  1888,   483,  1370,   313,
-  1741,-32768,-32768,-32768,-32768,  3995,  3023,  1568,  1571,-32768,
--32768,  1888,  1743,  1370,   483,  3047,-32768,  1574,  1575,  1746,
-  1370,  1747,-32768,  1578,-32768,  1370,  1579,  1370,  1582,   483,
-  1580,  1750,-32768,  1757,  1761,-32768
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  2013,
+  2013,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,  2013,  2013,  2013,  2013,  2013,  2013,  2013,
+  1135,-32768,  1945,   476,-32768,-32768,  2013,  4771,  1134,  1945,
+   987,   285,  2013,  1136,  1137,   962,-32768,  1138,  1007,    16,
+  1159,-32768,  2013,-32768,   151,  3580,   -96,  1272,  1272,  1160,
+  1272,  1161,  1272,  1272,-32768,  1945,  2766,  1542,   596,-32768,
+  2005,   996,   963,  1165,  1175,  1178,   626,  1179,  1181,  1183,
+  1184,  1185,  1187,  1188,  1162,   359,  3602,  3624,-32768,-32768,
+  2790,   -96,   -96,   -96,   368,-32768,   282,  1190,  1945,  1945,
+  1945,  1945,  1225,  1193,  2013,  2013,  1194,  1195,  1272,  1272,
+  2013,  1196,  1272,  1198,  3646,-32768,  2103,   663,  1197,  1202,
+  2013,  2013,   -96,  1203,  1204,  1044,  1205,  1207,  1272,  1272,
+  1209,   -96,  1211,  1213,  1272,  1272,  1214,  1215,  1216,  1219,
+  1220,  1272,   486,  1272,  1221,  1222,  1223,  1226,  1230,-32768,
+  1229,   413,  1232,-32768,  1231,    14,  1065,  2013,  2013,  1272,
+  1057,-32768,  5866,  4796,  5889,  4821,  5912,  4846,  5935,  4871,
+  4896,  1066,   228,  1069,  5958,   366,-32768,  1828,-32768,    12,
+   326,  1062,  1218,  1240,-32768,-32768,-32768,    16,  2013,-32768,
+   614,-32768,  6234,  1237,  2013,    23,    21,    46,  1272,  1239,
+  1272,  1242,  1243,   615,-32768,-32768,  1945,-32768,  2013,-32768,
+  2013,  1272,  1272,  1272,-32768,   475,  1272,  1272,  1272,  1272,
+  1272,  1272,  1272,   636,  2013,  2013,  2013,  1070,   220,   229,
+   275,  1665,  1246,  1072,   -32,-32768,-32768,   618,   632,   633,
+   660,-32768,-32768,  3668,  3690,-32768,-32768,  1250,  1251,  5981,
+   143,  1171,-32768,  2013,  2013,  2013,-32768,  1079,  1081,  3712,
+  3734,   231,  1083,  1089,  1086,  1094,  1091,  1098,  1097,  1099,
+   279,  1100,  1103,  1130,  1126,  1127,  1128,  1131,  1140,  1141,
+  1139,-32768,-32768,-32768,-32768,-32768,  1143,  1144,  1146,  1147,
+  1148,  1142,  1149,-32768,  1150,   217,-32768,  1304,  2013,  3756,
+  3778,   664,-32768,  2013,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,  1153,-32768,-32768,-32768,-32768,  1272,   476,  2013,
+  1306,  1312,    18,-32768,  1326,  4921,    16,-32768,-32768,  3800,
+-32768,-32768,   -96,-32768,   -96,  1333,-32768,  1334,-32768,-32768,
+  1164,   674,  6234,  3822,  1336,  1337,  1338,  2013,  2013,   802,
+  1342,  1343,  1344,  1345,  1347,  1349,-32768,  2048,  2814,  6004,
+  2645,   647,   -96,  1350,   -96,  1351,   -96,  1352,  2838,   378,
+-32768,  1272,-32768,-32768,  1354,  1355,  1356,  1357,  2013,  2013,
+-32768,-32768,  1311,  1272,  1272,  1277,  1272,  2682,   307,  6027,
+  2013,  1362,  2013,  1272,  1361,  1367,  1363,  1245,  1377,   486,
+  1402,  1409,  2013,  1413,  1426,  1424,  1425,  1429,   486,  2013,
+  2013,  2013,  1272,  1427,  1435,   486,  2013,  1436,  1437,  1438,
+  2013,   413,-32768,-32768,   304,  6234,  2013,  2013,  1272,  1262,
+   687,  6234,  1443,  1446,  1472,  1261,-32768,  1476,  1478,-32768,
+  1264,-32768,  2013,    38,    59,-32768,-32768,-32768,  1305,  2013,
+-32768,-32768,-32768,  1366,  1439,  1479,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,  1475,  1480,  1307,-32768,  2013,-32768,  1309,
+   401,-32768,  1353,   404,-32768,  1359,   408,-32768,  1360,  1394,
+  2013,  1313,-32768,-32768,-32768,-32768,  3844,  3866,   143,   329,
+   691,  1395,  1403,  2013,-32768,  2013,-32768,-32768,  3888,  1317,
+  3910,  1358,-32768,  1364,-32768,  1397,-32768,  1368,-32768,  1398,
+  6050,-32768,  1399,-32768,-32768,  1405,  1406,  6073,  3932,  6096,
+  1404,-32768,  1407,  1408,  3954,  1417,  1410,-32768,  3976,  1430,
+-32768,  2013,  3998,  4020,-32768,  1272,  2013,  1518,  1411,-32768,
+-32768,-32768,    16,-32768,  1447,  4042,-32768,-32768,-32768,  4064,
+-32768,-32768,-32768,-32768,-32768,   647,  2712,-32768,  1665,   282,
+  1665,   282,  1665,   282,-32768,  2862,  1272,  2013,  2013,  1448,
+-32768,-32768,  1272,  2013,  2886,  2910,  1272,  1531,   143,   486,
+  1539,  2013,  1581,   486,  1601,  1608,  1607,  1609,  1610,  2013,
+  1611,  1272,  1612,  1614,  2013,  1618,  1617,  2013,  1620,  1452,
+  6234,  2013,  2013,   692,  6234,-32768,-32768,  1621,-32768,  2013,
+  1638,  1469,  2013,-32768,  2934,   437,   -28,  2958,   456,   -26,
+  2982,   474,    -4,  2408,  1471,   700,  3006,  3030,  1473,  1477,
+  1694,-32768,-32768,  1474,-32768,  1481,  1482,  1484,  4086,-32768,
+  1483,-32768,  1491,-32768,-32768,-32768,  6119,-32768,  1490,-32768,
+-32768,  6142,  1496,-32768,  6165,  1492,  2013,  6188,  4108,  1647,
+-32768,  4130,  1493,-32768,  3054,  1653,  2013,  1692,  1693,  2013,
+  1695,  1696,  2013,  1697,-32768,   282,-32768,  1272,  1698,  1701,
+  1702,  1272,  1272,-32768,  1703,   486,   486,   486,   486,  1704,
+  1706,  1707,   486,  1708,  1709,  1711,  1713,   701,-32768,  2013,
+-32768,  2013,  1715,-32768,-32768,  1541,  3078,-32768,-32768,  1545,
+  3102,-32768,-32768,  1546,  3126,-32768,     2,  2469,  1547,-32768,
+-32768,-32768,  1548,  1572,-32768,  1575,  1576,  1582,  1583,-32768,
+-32768,-32768,  1579,-32768,-32768,-32768,  1580,  1755,  1584,  6211,
+  3150,  1586,   282,  1756,   282,  1757,   282,  1758,-32768,-32768,
+   282,  1770,  1272,  1690,   486,   486,  1795,  1800,   486,  1802,
+-32768,   476,-32768,  1803,  1805,    11,-32768,  1630,    36,-32768,
+  1631,    45,-32768,  1632,    49,-32768,  1633,  1635,  1634,  1637,
+-32768,-32768,  1643,  1644,   706,-32768,  1639,-32768,  1640,  1815,
+   282,  1821,   282,  1824,   282,-32768,  1747,  2013,   486,  1272,
+  1826,  1827,   476,  1829,   476,  1831,-32768,   138,-32768,   214,
+-32768,   225,  1657,  4152,  1660,  1661,-32768,-32768,-32768,-32768,
+   717,-32768,-32768,  1836,  1837,  1839,  2013,  2013,   486,  1272,
+   476,  1846,-32768,-32768,-32768,  4174,  3174,  1682,  1683,-32768,
+-32768,  2013,  1858,  1272,   486,  3198,-32768,  1685,  1691,  1862,
+  1272,  1863,-32768,  1699,-32768,  1272,  1700,  1272,  1712,   486,
+  1714,  1868,-32768,  1875,  1876,-32768
 };
 
 static const short yypgoto[] = {-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1127,
--32768,   464,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,  -301,   -14,-32768,  1762,     0,  -367,
-  -174,     4,-32768,-32768,-32768,-32768,-32768,  1763,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768, -1102, -1247,-32768,
--32768,  -886,   -18,-32768,   353,-32768,   -84,-32768, -1084, -1007,
-   276,  -246,  -332,  -698,   793,-32768,   -64
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1235,
+-32768,   551,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,  -299,   -14,-32768,  1874,     4,  -364,
+   -88,     6,-32768,-32768,-32768,-32768,-32768,  1879,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+ -1129,  -889,-32768,-32768,  -660,   -18,-32768,    41,-32768,   -83,
+-32768, -1109, -1029,  -155,  -251,  -337,  -707,   890,-32768,   -64
 };
 
 
-#define	YYLAST		6207
+#define	YYLAST		6407
 
 
 static const short yytable[] = {   143,
-   212,   214,    72,   142,   247,   564,    73,   503,   147,   637,
-   379,   847,   539,   384,  1315,   637,   983,   184,  1315,   210,
-   187,  1315,  1133,  1134,   200,  1260,   252,   709,   203,   153,
-  1261,  1190,   210,   198,   392,  1260,   403,   381,   405,   382,
-  1261,   210,    82,   153,   370,   371,   155,  1210,   119,   120,
-   121,   122,  1260,  1191,   123,   984,  1041,  1261,     4,   986,
-   499,   119,   120,   121,   122,   370,   371,   123,   309,    83,
-   119,   120,   121,   122,    94,   524,   123,  1050,    84,   838,
-   525,   638,   639,   640,   641,   173,   174,   638,   639,   640,
-   641,   370,   371,    85,   488,   210,   175,    86,   499,   370,
-   371,   985,  1266,   176,  1269,   987,  1260,  1260,  1015,    87,
-  1016,  1261,  1261,   302,   303,   304,    88,   372,   305,   308,
-   135,   136,   313,   393,   119,   120,   121,   122,   810,   333,
-   123,   334,   335,   336,  1279,   338,   154,   340,   341,  1314,
-   352,   149,  1260,   757,   150,    89,   977,  1261,   157,  1318,
-   154,   756,   310,   311,  1315,   759,   368,   369,  1315,  1151,
-   758,  1315,   199,   839,   840,   629,  1321,  1260,  1160,    90,
-   630,  1244,  1261,   370,   371,  1167,  1260,   390,   391,  1260,
-   394,  1261,   396,   148,  1261,   399,   400,   642,   370,   371,
-   155,   146,   715,   950,   185,   211,  1315,   188,   204,   703,
-  1315,   201,  1315,   253,   710,   729,   135,   136,   213,   383,
-   370,   371,   163,   164,   810,   165,   128,   129,   130,   131,
-  1425,  1429,   592,   167,   150,   191,   168,   169,   192,   170,
-   442,   489,   490,   491,   492,   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,   484,   485,   486,   487,   158,   499,  1402,
-  1088,  1431,  1406,   254,  1409,   255,   160,   692,   498,   151,
-  1462,   499,   693,  1464,   504,   370,   371,   509,   510,   511,
-   512,   513,   514,   515,   516,   517,   518,   519,   520,   521,
-   522,   523,  1017,   152,  1018,  1030,  1260,   210,   530,   851,
-   532,  1261,  1031,  1444,   700,   303,   498,  1448,   181,  1450,
-   156,   182,   183,  1280,   543,   544,   545,  1284,   547,   548,
-   549,   550,   551,   552,   553,   157,   119,   120,   121,   122,
-   502,   159,   123,   370,   371,   161,   566,   567,   568,   569,
-   830,   370,   371,   256,   579,   257,   370,   371,   583,   584,
-   555,   560,   560,   162,   588,   563,   563,   967,  1019,   258,
-  1020,   259,   700,   596,   373,   171,   327,   328,   329,    91,
-   301,   177,   179,   861,   330,    95,    96,    97,    98,    99,
-   100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-   110,   111,   112,   113,   114,   115,   116,   117,   118,   370,
-   371,   370,   371,   890,   891,   892,   893,  1174,   635,   166,
-  1465,  1139,  1175,   350,   370,   371,   565,   705,   356,   636,
-  1211,  1365,  1366,  1367,  1368,  1075,   499,   260,  1372,   261,
-   262,   882,   263,   836,   370,   371,   264,    94,   265,   370,
-   371,   380,   172,   370,   371,   180,   385,   386,   370,   371,
-   186,  1202,   266,   189,   267,   698,  1204,   193,   303,   499,
-  1206,   370,   371,   872,   706,  1311,   704,  1248,   124,   125,
-   126,   127,   128,   129,   130,   131,   190,   268,  1317,   269,
-   194,   370,   371,   195,  1414,  1415,   498,   716,  1418,   499,
-   499,   499,   499,   135,   136,   196,   698,   727,  1320,   498,
-   197,   731,   732,   270,   365,   271,   367,   737,   272,   205,
-   273,   994,   374,     5,   873,   970,   972,   747,   748,    38,
-    39,    40,    41,   274,    43,   275,   751,   971,  1453,   132,
-   133,   206,    49,    50,   276,   134,   277,   278,   760,   279,
-   137,   207,   280,   306,   281,   140,   282,   307,   283,   812,
-   208,   284,   772,   285,   774,   775,   316,   317,   318,   319,
-   320,  1478,   321,   322,   323,   324,   325,   326,   327,   328,
-   329,   934,   935,   936,   937,   938,   330,   209,  1489,   128,
-   129,   130,   131,   245,   444,  1140,   325,   326,   327,   328,
-   329,   248,   286,  1501,   287,   296,   330,   499,   297,   811,
-   135,   136,   288,   290,   289,   291,   298,   908,   702,   831,
-   316,   317,   318,   319,   320,   299,   321,   322,   323,   324,
-   325,   326,   327,   328,   329,   292,  1116,   293,   576,   577,
-   330,   820,   821,   315,     6,     7,     8,     9,    10,    11,
-    12,    13,   294,   300,   295,   822,   823,   824,   825,   826,
-   827,   828,   314,   690,   498,   691,  1000,  1001,   832,   135,
-   136,   835,   135,   136,   841,   249,   700,   250,   701,   128,
-   129,   130,   131,   312,   850,   319,   320,   331,   321,   322,
-   323,   324,   325,   326,   327,   328,   329,   498,   332,   698,
-   135,   136,   330,   700,   700,   730,   865,   337,   979,   508,
-   980,   339,   558,   559,   947,  1009,  1010,   321,   322,   323,
-   324,   325,   326,   327,   328,   329,   353,   498,   498,   498,
-   498,   330,   357,   896,   897,   354,   318,   319,   320,   902,
-   321,   322,   323,   324,   325,   326,   327,   328,   329,   912,
-   913,   844,   135,   136,   330,   700,   364,   993,   494,   355,
-   250,   699,   316,   317,   318,   319,   320,   358,   321,   322,
-   323,   324,   325,   326,   327,   328,   329,   135,   136,   700,
-   359,  1021,   330,   535,   909,   250,   952,   953,   360,   361,
-   316,   317,   318,   319,   320,   362,   321,   322,   323,   324,
-   325,   326,   327,   328,   329,   363,   135,   136,   811,   700,
-   330,  1022,   728,   973,   250,   375,   376,   978,   700,   378,
-  1023,  1252,   700,   982,  1024,  1075,   700,  1076,  1095,  1102,
-  1180,  1103,  1181,   377,  1075,   498,  1212,   995,  1075,   996,
-  1303,  1180,  1427,  1377,  1428,  1439,  1470,  1440,  1471,   387,
-   388,   389,   397,  1011,  1012,  1013,   316,   317,   318,   319,
-   320,   395,   321,   322,   323,   324,   325,   326,   327,   328,
-   329,   398,   401,   402,   404,   406,   330,  1034,  1035,  1036,
-   407,   408,   409,   437,   410,   411,   412,   413,   414,   415,
-   416,   417,   418,   419,   420,   421,  1081,   746,   316,   317,
-   318,   319,   320,   422,   321,   322,   323,   324,   325,   326,
-   327,   328,   329,   423,   424,   425,   426,   427,   330,   440,
-   428,   867,  1072,  1069,   429,   430,   443,  1078,   431,   432,
-   433,   434,   435,   436,   493,  1111,   330,   496,   505,   506,
-    91,   301,   439,  1082,   441,   507,    95,    96,    97,    98,
-    99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-   109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-   536,  1100,  1101,  1173,   541,   546,   554,   578,   587,   581,
-   582,  1110,   590,   854,   855,   593,   857,   599,   859,   860,
-   600,   601,   602,   603,   604,   605,  1130,  1131,   606,   607,
-   608,   609,   610,   560,   622,   894,   611,   563,  1142,   612,
-  1144,   613,   614,   615,   616,   617,   618,   619,   620,   621,
-  1154,   623,   624,   625,   626,   627,   628,  1161,  1162,  1163,
-   631,   900,   901,   632,  1168,   904,   633,   694,  1172,   124,
-   125,   126,   127,   697,  1176,  1177,   695,   696,   707,   708,
-   712,   920,   921,   714,   745,   717,   718,   926,   927,   853,
-  1189,   719,   721,   723,   933,   724,   940,  1193,   316,   317,
-   318,   319,   320,   733,   321,   322,   323,   324,   325,   326,
-   327,   328,   329,   749,   750,  1200,   762,   763,   330,   766,
-   767,   768,   770,   777,   886,   887,   888,   771,   778,   807,
-   132,   133,   815,   779,   780,   781,   134,   782,  1215,   808,
-  1216,   137,   816,   783,   725,   784,   140,   817,   726,   976,
-   785,   988,   914,   990,   786,   787,   788,   789,   790,   791,
-   792,   923,   793,   794,   997,   998,   999,   795,   796,  1002,
-  1003,  1004,  1005,  1006,  1007,  1008,  1241,   819,   829,   797,
-   798,  1245,   316,   317,   318,   319,   320,   799,   321,   322,
-   323,   324,   325,   326,   327,   328,   329,   834,   842,   837,
-   843,   800,   330,  1258,   845,  1264,   846,  1267,   801,  1270,
-  1271,   849,   802,   803,   856,  1274,   858,   869,   560,   881,
-   540,   870,   563,  1282,   871,   804,   874,   875,   876,   877,
-   805,  1290,   878,   806,   809,   879,  1295,   868,   880,  1298,
-   889,   895,   898,  1301,  1302,   899,   905,   903,   910,   911,
-   915,  1305,   916,   918,  1308,   917,   302,   303,  1309,   919,
-   922,   924,    91,   301,   925,  1080,   928,   929,    95,    96,
-    97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-   107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-   117,   118,   930,   931,   932,   941,   316,   317,   318,   319,
-   320,  1078,   321,   322,   323,   324,   325,   326,   327,   328,
-   329,   942,  1349,   943,   944,   945,   330,   956,  1354,   946,
-   948,  1358,   951,   949,   966,   968,   975,   981,  1136,   974,
-   989,   991,   992,  1014,  1027,  1145,  1028,  1037,  1033,  1038,
-  1042,  1043,  1044,  1379,  1045,  1380,  1070,  1046,  1047,  1083,
-  1048,  1052,  1049,  1421,  1164,  1051,  1053,  1090,  1054,  1091,
-  1055,   124,   125,   126,   127,   316,   317,   318,   319,   320,
-  1178,   321,   322,   323,   324,   325,   326,   327,   328,   329,
-  1056,  1057,  1058,  1059,  1061,   330,  1060,  1117,  1062,  1120,
-  1084,  1123,    91,   342,  1457,  1094,  1460,  1086,    95,    96,
-    97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-   107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-   117,   118,   132,   133,  1063,  1480,  1079,  1066,   134,  1092,
-   343,  1093,  1185,   137,  1064,  1452,   863,  1097,   140,  1098,
-   864,  1099,  1065,  1104,  1105,  1067,  1068,  1106,  1107,  1108,
-    38,    39,    40,    41,    42,    43,  1109,  1118,  1121,  1124,
-  1126,  1127,  1128,    49,    50,  1129,  1135,  1476,  1477,  1132,
-  1143,  1146,  1147,  1186,  1148,  1149,  1150,  1152,  1153,  1155,
-  1156,  1179,  1157,  1486,  1158,  1159,  1165,  1166,  1169,  1170,
-  1199,   124,   125,   126,   127,  1171,  1182,  1183,  1188,  1184,
-  1187,  1196,  1198,  1203,  1192,  1201,  1214,  1246,  1273,  1218,
-  1205,  1220,  1277,  1207,  1213,  1221,  1222,  1223,  1224,  1226,
-  1227,  1228,    91,   537,  1232,  1233,  1234,  1292,    95,    96,
-    97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-   107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-   117,   118,   132,   344,  1194,  1236,  1237,  1239,   134,  1247,
-  1278,  1249,  1281,   137,  1283,  1286,  1272,  1285,   140,  1287,
-   345,  1288,  1289,  1291,  1259,  1293,  1265,  1294,  1268,   316,
-   317,   318,   319,   320,  1296,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,  1195,  1297,  1299,  1300,  1304,   330,
-  1306,  1307,  1312,  1327,  1332,  1313,  1343,  1325,  1350,  1324,
-  1328,  1333,  1329,  1347,  1330,  1337,  1351,  1352,  1355,  1362,
-  1363,   124,   125,   126,   127,  1335,  1339,  1345,   367,  1356,
-  1359,  1360,  1361,  1364,    91,   301,  1369,  1384,  1370,  1371,
+   214,   216,   352,   142,   186,   249,    72,   358,    73,   546,
+   571,   510,   860,   647,   147,  1044,   189,   647,    94,   202,
+   254,   719,   200,   212,  1160,  1161,  1002,   153,  1001,   155,
+   212,   388,   387,   389,   205,   903,   399,   392,   393,   903,
+   904,   903,     4,  1217,   904,     5,   904,   153,   256,  1240,
+   257,  1004,   119,   120,   121,   122,    82,   506,   123,   119,
+   120,   121,   122,   903,  1218,   123,   173,   174,   904,   903,
+   163,   164,  1003,   165,   904,   372,   373,   175,   903,   177,
+   179,    83,   185,   904,   176,   648,   649,   650,   651,   648,
+   649,   650,   651,   374,   531,   506,    84,  1005,   386,   532,
+  1287,   391,  1290,   903,  1293,   372,   373,    88,   904,   372,
+   373,    85,   903,   304,   305,   306,   903,   904,   307,   310,
+    86,   904,   315,   375,   410,   400,   412,   384,   258,   335,
+   259,   336,   337,   338,   154,   340,    87,   342,   343,  1306,
+   354,   770,   193,   771,   311,   194,   372,   373,    89,  1043,
+   995,   201,   150,  1338,   154,  1341,   370,   371,    90,   769,
+   128,   129,   130,   131,   646,   371,     6,     7,     8,     9,
+    10,    11,    12,    13,   586,   587,  1274,  1344,   146,   397,
+   398,   187,   401,  1419,   403,   372,   373,   406,   407,   148,
+   149,   652,  1460,   190,   725,   968,   203,   255,   720,   213,
+   372,   373,   157,   390,   206,   903,   215,   739,   713,   772,
+   904,   155,   367,   639,   369,   150,  1387,  1462,   640,   158,
+   376,   372,   373,   160,   383,    94,  1464,   151,   312,   313,
+  1466,   152,   449,   496,   497,   498,   499,   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,   484,   485,
+   486,   487,   488,   489,   490,   491,   492,   493,   494,   161,
+   506,   903,   156,  1436,   509,  1439,   904,  1442,   851,  1112,
+   505,  1445,   903,   506,   451,   578,   511,   904,   157,   516,
+   517,   518,   519,   520,   521,   522,   523,   524,   525,   526,
+   527,   528,   529,   530,  1166,   602,  1054,   372,   373,  1494,
+   537,   212,   539,  1055,   702,   864,   159,   305,   505,   703,
+   710,  1478,   989,  1480,   562,  1482,   550,   551,   552,   162,
+   554,   555,   556,   557,   558,   559,   560,   709,   166,   903,
+   119,   120,   121,   122,   904,   260,   123,   261,   573,   574,
+   575,   304,   305,   576,   171,   843,   579,   128,   129,   130,
+   131,   589,   852,   853,   172,   593,   594,   567,   567,   570,
+   570,   598,   372,   373,   495,   212,   135,   136,   135,   136,
+   606,   372,   373,   372,   373,  1495,   712,  1044,   874,  1033,
+  1044,  1034,   985,  1044,   180,  1065,  1496,   710,  1035,  1178,
+  1036,   188,   565,   566,   119,   120,   121,   122,  1187,   191,
+   123,   369,   329,   330,   331,  1194,   128,   129,   130,   131,
+   332,   908,   909,   910,   911,   645,   181,   372,   373,   182,
+   183,   372,   373,   262,   715,   263,   192,   135,   136,   135,
+   136,   506,   250,  1074,  1037,   251,  1038,   252,   849,   318,
+   319,   320,   321,   322,   195,   323,   324,   325,   326,   327,
+   328,   329,   330,   331,   128,   129,   130,   131,  1201,   332,
+   212,   196,   708,  1202,   506,   305,   135,   136,  1167,   372,
+   373,   716,   197,   714,   823,   135,   136,  1044,   167,   372,
+   373,   168,   169,  1241,   170,  1278,   572,   198,  1099,   119,
+   120,   121,   122,   505,   726,   123,   577,   506,   506,   506,
+   506,   372,   373,   708,   737,   264,   505,   265,   741,   742,
+   372,   373,  1018,  1019,   747,   135,   136,   199,   895,  1012,
+   372,   373,   207,   823,   757,   758,  1044,   902,   208,  1044,
+   988,   990,  1044,   761,   700,  1044,   701,  1151,   173,   174,
+   266,   209,   267,   372,   373,   210,   372,   373,   773,   175,
+   372,   373,   867,   868,   314,   870,   184,   872,   873,   825,
+  1229,   211,   785,  1231,   787,   788,   247,  1233,  1044,  1307,
+  1044,   298,  1044,  1311,   952,   953,   954,   955,   956,   372,
+   373,   299,   756,   320,   321,   322,   300,   323,   324,   325,
+   326,   327,   328,   329,   330,   331,  1337,   765,   372,   373,
+   268,   332,   269,   918,   919,   506,   270,   922,   271,   824,
+   301,   885,   135,   136,   316,  1340,   372,   373,   501,   844,
+   252,  1027,  1028,   938,   939,   302,   135,   136,   333,   944,
+   945,   355,   542,  1343,   252,   272,   951,   273,   958,   334,
+   339,   833,   834,   135,   136,   341,   274,  1140,   275,   738,
+   926,   252,   276,   356,   277,   835,   836,   837,   838,   839,
+   840,   841,   886,   278,   505,   279,   357,   280,   845,   281,
+   282,   848,   283,   366,   854,  1396,  1397,  1398,  1399,   284,
+   359,   285,  1403,   286,   863,   287,   361,    38,    39,    40,
+    41,   360,    43,  1006,   288,  1008,   289,   505,   362,   708,
+    49,    50,   290,   292,   291,   293,  1015,  1016,  1017,   363,
+   364,  1020,  1021,  1022,  1023,  1024,  1025,  1026,   965,   365,
+   323,   324,   325,   326,   327,   328,   329,   330,   331,   377,
+   505,   505,   505,   505,   332,   378,   914,   915,   294,   296,
+   295,   297,   920,   379,  1449,  1450,   385,   866,  1453,   710,
+   396,   711,   930,   931,   710,   710,   740,   878,   318,   319,
+   320,   321,   322,   394,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,   997,   710,   998,  1011,   710,   332,  1045,
+   395,   402,   899,   900,   901,  1126,   405,  1127,  1485,   970,
+   971,   710,   710,  1046,  1047,   318,   319,   320,   321,   322,
+   404,   323,   324,   325,   326,   327,   328,   329,   330,   331,
+   317,   824,  1104,   932,   408,   332,   991,   927,  1508,   710,
+   996,  1048,   941,  1099,   409,  1100,  1000,   327,   328,   329,
+   330,   331,   411,   710,  1519,  1119,   413,   332,   505,   414,
+  1013,  1282,  1014,   444,   450,   515,  1207,   415,  1208,  1531,
+  1099,  1099,  1242,  1330,   446,   416,  1029,  1030,  1031,  1348,
+  1207,  1349,  1408,  1039,   417,  1473,  1152,  1474,   580,    23,
+    24,   581,   582,    27,   583,    29,  1501,    30,  1502,    32,
+    33,  1163,    35,    36,   418,  1058,  1059,  1060,  1172,   419,
+   420,   421,   422,   423,   424,   425,   426,   427,   428,    48,
+   429,   430,   431,   432,  1105,   433,   434,  1191,    52,    53,
+    54,   435,   436,   437,   438,   439,   440,   441,   500,   442,
+   443,   332,  1040,  1205,   447,   503,    64,   448,   512,   513,
+  1096,  1093,   514,   543,   548,  1102,   553,   561,   588,   597,
+   591,   592,   600,  1135,   603,   609,   704,   857,   610,   611,
+   612,  1106,   613,   614,   615,   616,   617,   318,   319,   320,
+   321,   322,   618,   323,   324,   325,   326,   327,   328,   329,
+   330,   331,   619,   620,   621,   622,   623,   332,   624,  1124,
+  1125,   880,   625,   626,   627,   628,   629,   630,  1200,  1134,
+   631,   632,   318,   319,   320,   321,   322,   633,   323,   324,
+   325,   326,   327,   328,   329,   330,   331,   634,   635,   584,
+  1157,  1158,   332,   636,   637,   567,   642,   570,   638,   641,
+   643,   705,  1169,  1114,  1171,  1115,   706,   707,   717,   718,
+   724,   775,   722,   727,  1181,   728,   729,   731,   733,   734,
+   743,  1188,  1189,  1190,   755,   759,   760,   779,  1195,   776,
+   780,   781,  1199,  1141,   783,  1144,   784,  1147,  1203,  1204,
+   790,  1296,   791,   792,   793,   794,   795,  1300,   796,   797,
+   798,  1304,   799,   800,  1216,   801,   802,   803,   804,   805,
+   806,  1220,   807,   808,   809,   810,  1319,   811,   812,   813,
+   814,   815,   816,   820,   318,   319,   320,   321,   322,  1227,
+   323,   324,   325,   326,   327,   328,   329,   330,   331,   830,
+   817,   818,  1236,   821,   332,   819,   822,   832,   842,   847,
+   828,   855,   856,   881,   858,  1245,  1294,  1246,   318,   319,
+   320,   321,   322,   829,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,   850,   862,   894,   869,   871,   332,   321,
+   322,   882,   323,   324,   325,   326,   327,   328,   329,   330,
+   331,   883,   859,  1271,   884,   887,   332,   888,  1275,   889,
+   890,   891,  1389,   892,   893,   907,  1393,  1394,   913,   916,
+   917,   923,   921,   928,   929,   933,   934,   936,   935,   937,
+  1285,   940,  1288,   942,  1291,   943,   946,   947,   948,  1297,
+  1298,   949,   950,   959,   993,  1301,   960,   961,   962,   567,
+   912,   570,   963,  1309,   964,   966,   967,   974,   969,   992,
+   984,  1317,   999,   986,  1007,   994,  1322,  1009,  1010,  1325,
+  1032,  1041,  1042,  1328,  1329,  1051,  1052,  1057,  1388,  1061,
+  1062,  1332,  1066,  1067,  1335,  1068,  1212,  1447,  1069,  1286,
+  1070,  1289,  1071,  1292,    91,   344,  1072,  1076,  1073,  1075,
     95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
    105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-   115,   116,   117,   118,  1373,  1374,  1375,  1376,  1381,  1382,
-  1397,  1385,  1403,  1393,  1407,  1410,  1416,  1394,  1387,  1405,
-  1389,  1390,   132,   133,  1412,  1391,  1392,  1395,   134,  1396,
-  1413,  1398,  1401,   137,  1417,  1419,  1426,  1423,   140,  1424,
-   538,   316,   317,   318,   319,   320,  1430,   321,   322,   323,
-   324,   325,   326,   327,   328,   329,  1432,  1435,  1433,  1434,
-  1436,   330,  1445,  1441,  1437,  1438,  1442,  1443,  1197,  1446,
-  1447,  1454,  1449,   124,   125,   126,   127,  1451,  1455,  1456,
-  1458,   316,   317,   318,   319,   320,  1461,   321,   322,   323,
-   324,   325,   326,   327,   328,   329,  1463,  1466,  1468,  1469,
-  1472,   330,  1473,  1474,  1479,  1475,  1481,  1484,  1487,  1492,
-  1485,  1493,  1495,  1491,  1502,  1503,  1505,  1496,  1498,  1488,
-  1506,  1500,   813,  1340,    71,    79,  1494,  1085,     0,     0,
-     0,  1497,     0,  1499,  1255,  1256,     0,     0,     0,     0,
-   134,     0,     0,     0,     0,  1257,     0,    91,    92,    93,
-   140,    94,   176,    95,    96,    97,    98,    99,   100,   101,
+   115,   116,   117,   118,  1077,  1078,  1079,  1080,  1102,  1094,
+  1081,  1107,   345,  1084,  1486,  1108,  1090,  1159,  1377,  1082,
+  1083,  1381,  1085,  1086,  1385,  1087,  1088,  1089,  1091,  1092,
+  1103,  1110,    38,    39,    40,    41,    42,    43,  1116,  1117,
+  1118,  1121,  1122,  1123,  1509,    49,    50,  1128,  1129,  1130,
+  1131,  1410,  1132,  1411,  1133,  1142,  1145,  1148,  1518,  1153,
+  1154,  1155,  1156,  1162,  1170,  1524,  1173,  1456,  1175,  1174,
+  1527,  1221,  1529,   124,   125,   126,   127,   318,   319,   320,
+   321,   322,  1177,   323,   324,   325,   326,   327,   328,   329,
+   330,   331,   318,   319,   320,   321,   322,   332,   323,   324,
+   325,   326,   327,   328,   329,   330,   331,  1179,  1489,  1176,
+  1492,  1180,   332,   318,   319,   320,   321,   322,  1182,   323,
+   324,   325,   326,   327,   328,   329,   330,   331,  1183,  1184,
+  1185,  1186,  1192,   332,   132,   346,  1510,  1193,  1196,  1197,
+   134,  1215,  1206,  1198,  1222,   137,  1209,    91,   303,  1484,
+   140,  1210,   347,    95,    96,    97,    98,    99,   100,   101,
    102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-   112,   113,   114,   115,   116,   117,   118,  1326,   119,   120,
-   121,   122,    91,   342,   123,     0,     0,     0,    95,    96,
-    97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-   107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-   117,   118,     0,     0,     0,   316,   317,   318,   319,   320,
-   343,   321,   322,   323,   324,   325,   326,   327,   328,   329,
-     0,     0,     0,     0,     0,   330,     0,     0,     0,     0,
-    38,    39,    40,    41,    42,    43,   124,   125,   126,   127,
-    91,   301,     0,    49,    50,     0,    95,    96,    97,    98,
-    99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-   109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     0,   124,   125,   126,   127,     0,     0,     0,     0,     0,
-     0,     0,     0,   128,   129,   130,   131,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   132,   133,     0,
-     0,     0,   594,   134,   135,   136,     0,     0,   137,     0,
-   138,     0,   139,   140,   316,   317,   318,   319,   320,     0,
-   321,   322,   323,   324,   325,   326,   327,   328,   329,   713,
-     0,     0,   132,   497,   330,     0,     0,     0,   134,   124,
-   125,   126,   127,   137,    91,   301,   210,     0,   140,     0,
+   112,   113,   114,   115,   116,   117,   118,  1211,  1506,  1507,
+  1224,  1219,  1213,  1214,  1223,  1225,  1244,  1226,    91,   303,
+  1228,  1248,  1237,  1516,    95,    96,    97,    98,    99,   100,
+   101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+   111,   112,   113,   114,   115,   116,   117,   118,   318,   319,
+   320,   321,   322,  1276,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,  1230,  1299,  1279,  1305,  1250,   332,  1232,
+  1234,  1308,  1253,  1251,    91,   303,   124,   125,   126,   127,
     95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
    105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-   115,   116,   117,   118,     0,   119,   120,   121,   122,   866,
-     0,   123,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   907,     0,     0,     0,     0,     0,
-   132,   133,     0,     0,     0,     0,   134,     0,     0,     0,
-     0,   137,    91,   537,     0,     0,   140,     0,    95,    96,
+   115,   116,   117,   118,  1235,  1243,  1252,  1254,  1256,  1257,
+  1258,  1263,  1264,  1262,  1267,  1277,  1310,   124,   125,   126,
+   127,   318,   319,   320,   321,   322,  1266,   323,   324,   325,
+   326,   327,   328,   329,   330,   331,  1312,   132,   133,  1269,
+  1313,   332,  1314,   134,  1315,  1316,  1318,  1320,   137,  1321,
+  1323,   308,  1324,   140,  1326,   309,  1331,   318,   319,   320,
+   321,   322,  1327,   323,   324,   325,   326,   327,   328,   329,
+   330,   331,  1333,   124,   125,   126,   127,   332,   132,   133,
+  1334,  1347,  1371,  1352,   134,  1355,  1353,  1360,  1375,   137,
+  1356,  1357,   735,  1358,   140,  1361,   736,    91,   303,  1363,
+  1365,  1367,  1373,    95,    96,    97,    98,    99,   100,   101,
+   102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+   112,   113,   114,   115,   116,   117,   118,  1378,  1379,  1354,
+  1382,  1383,  1386,  1390,   132,   133,  1391,  1392,  1395,  1400,
+   134,  1401,  1402,  1404,  1405,   137,  1406,  1407,   876,  1412,
+   140,  1413,   877,    91,   544,  1415,  1417,  1423,  1422,    95,
+    96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+   106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+   116,   117,   118,  1424,  1425,  1426,  1427,  1428,  1429,  1430,
+  1431,  1437,  1440,  1443,  1432,  1435,   124,   125,   126,   127,
+    91,    92,    93,  1448,    94,  1446,    95,    96,    97,    98,
+    99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+   109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+  1451,   119,   120,   121,   122,  1452,  1454,   123,  1458,  1459,
+  1461,  1463,  1465,  1469,  1467,  1468,  1470,  1471,  1472,  1475,
+  1477,  1476,   124,   125,   126,   127,  1479,   380,   381,  1481,
+  1483,  1487,  1488,   134,  1490,   547,  1493,  1497,   382,  1499,
+  1500,  1503,  1504,   140,  1505,   176,   318,   319,   320,   321,
+   322,  1511,   323,   324,   325,   326,   327,   328,   329,   330,
+   331,  1514,  1515,  1517,  1521,  1522,   332,  1523,  1525,   124,
+   125,   126,   127,  1533,  1535,  1536,    71,  1368,  1526,  1528,
+   826,    79,  1109,   132,   133,     0,     0,     0,  1532,   134,
+     0,  1530,     0,     0,   137,     0,     0,     0,     0,   140,
+     0,   545,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   128,   129,   130,   131,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   132,   133,     0,     0,     0,     0,   134,   135,   136,     0,
+     0,   137,     0,   138,   604,   139,   140,    91,   344,     0,
+     0,     0,     0,    95,    96,    97,    98,    99,   100,   101,
+   102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+   112,   113,   114,   115,   116,   117,   118,     0,     0,   723,
+   318,   319,   320,   321,   322,   345,   323,   324,   325,   326,
+   327,   328,   329,   330,   331,     0,     0,     0,     0,     0,
+   332,     0,     0,     0,     0,    38,    39,    40,    41,    42,
+    43,     0,   879,     0,     0,    91,   303,     0,    49,    50,
+     0,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+   104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+   114,   115,   116,   117,   118,     0,   124,   125,   126,   127,
+    91,   303,   212,     0,     0,     0,    95,    96,    97,    98,
+    99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+   109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     0,   119,   120,   121,   122,     0,     0,   123,     0,   318,
+   319,   320,   321,   322,     0,   323,   324,   325,   326,   327,
+   328,   329,   330,   331,     0,     0,     0,   132,   504,   332,
+   925,     0,     0,   134,   124,   125,   126,   127,   137,     0,
+     0,     0,     0,   140,   318,   319,   320,   321,   322,     0,
+   323,   324,   325,   326,   327,   328,   329,   330,   331,     0,
+     0,     0,     0,     0,   332,     0,     0,     0,     0,   124,
+   125,   126,   127,     0,     0,     0,     0,   318,   319,   320,
+   321,   322,     0,   323,   324,   325,   326,   327,   328,   329,
+   330,   331,     0,     0,     0,   132,   133,   332,     0,     0,
+     0,   134,     0,     0,     0,     0,   137,     0,     0,     0,
+     0,   140,     0,     0,     0,   318,   319,   320,   321,   322,
+     0,   323,   324,   325,   326,   327,   328,   329,   330,   331,
+   132,   133,     0,     0,     0,   332,   134,     0,     0,     0,
+     0,   137,    91,   544,   744,     0,   140,     0,    95,    96,
     97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
    107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-   117,   118,     0,   124,   125,   126,   127,   316,   317,   318,
-   319,   320,     0,   321,   322,   323,   324,   325,   326,   327,
-   328,   329,     0,     0,     0,     0,     0,   330,     0,     0,
-     0,     0,     0,     0,   316,   317,   318,   319,   320,     0,
-   321,   322,   323,   324,   325,   326,   327,   328,   329,   316,
-   317,   318,   319,   320,   330,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,   132,   133,     0,     0,     0,   330,
-   134,   124,   125,   126,   127,   137,  1114,     0,  1115,     0,
-   140,     0,     0,     0,   316,   317,   318,   319,   320,     0,
-   321,   322,   323,   324,   325,   326,   327,   328,   329,   316,
-   317,   318,   319,   320,   330,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,   316,   317,   318,   319,   320,   330,
-   321,   322,   323,   324,   325,   326,   327,   328,   329,     0,
-     0,     0,   132,   133,   330,     0,   495,     0,   134,     0,
-     0,   556,     0,   137,     0,     0,     0,     0,   140,   570,
-    23,    24,   571,   572,    27,   573,    29,     0,    30,     0,
+   117,   118,     0,     0,     0,   318,   319,   320,   321,   322,
+     0,   323,   324,   325,   326,   327,   328,   329,   330,   331,
+     0,     0,     0,     0,     0,   332,   580,    23,    24,   581,
+   582,    27,   583,    29,     0,    30,     0,    32,    33,     0,
+    35,    36,     0,     0,     0,     0,     0,   580,    23,    24,
+   581,   582,    27,   583,    29,     0,    30,    48,    32,    33,
+     0,    35,    36,     0,     0,     0,    52,    53,    54,     0,
+     0,   124,   125,   126,   127,     0,     0,     0,    48,     0,
+     0,     0,     0,     0,    64,     0,     0,    52,    53,    54,
+     0,     0,     0,     0,     0,   580,    23,    24,   581,   582,
+    27,   583,    29,     0,    30,    64,    32,    33,     0,    35,
+    36,     0,     0,     0,     0,     0,   580,    23,    24,   581,
+   582,    27,   583,    29,     0,    30,    48,    32,    33,     0,
+    35,    36,   132,   133,     0,    52,    53,    54,   134,     0,
+     0,     0,     0,   137,     0,     0,     0,    48,   140,     0,
+     0,     0,     0,    64,     0,     0,    52,    53,    54,     0,
+     0,     0,     0,     0,     0,     0,     0,   590,     0,     0,
+     0,     0,     0,     0,    64,   580,    23,    24,   581,   582,
+    27,   583,    29,     0,    30,     0,    32,    33,   607,    35,
+    36,     0,     0,     0,     0,     0,     0,     0,   580,    23,
+    24,   581,   582,    27,   583,    29,    48,    30,     0,    32,
+    33,     0,    35,    36,     0,    52,    53,    54,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,    48,
+     0,     0,     0,    64,     0,     0,   608,     0,    52,    53,
+    54,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,    64,   766,     0,   580,
+    23,    24,   581,   582,    27,   583,    29,     0,    30,     0,
     32,    33,     0,    35,    36,     0,     0,     0,     0,     0,
-   570,    23,    24,   571,   572,    27,   573,    29,     0,    30,
-    48,    32,    33,     0,    35,    36,     0,     0,     0,    52,
+    -4,     1,     0,    -4,   -47,     0,     0,     0,     0,     0,
+    48,     0,     0,     0,     0,     0,     0,     0,     0,    52,
     53,    54,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,    48,     0,     0,     0,     0,     0,    64,     0,     0,
-    52,    53,    54,     0,     0,   570,    23,    24,   571,   572,
-    27,   573,    29,     0,    30,     0,    32,    33,    64,    35,
-    36,     0,     0,     0,     0,     0,   570,    23,    24,   571,
-   572,    27,   573,    29,     0,    30,    48,    32,    33,     0,
-    35,    36,     0,     0,     0,    52,    53,    54,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    48,     0,     0,
-     0,     0,     0,    64,     0,     0,    52,    53,    54,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   574,     0,     0,     0,    64,   570,    23,    24,   571,   572,
-    27,   573,    29,     0,    30,     0,    32,    33,     0,    35,
-    36,   580,     0,     0,     0,     0,     0,     0,     0,    -4,
-     1,     0,    -4,   -47,     0,     0,    48,     0,     0,     0,
-     0,     0,     0,     0,     0,    52,    53,    54,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   -47,    64,     0,     0,   597,   -47,   -47,     0,
-   -47,   -47,   -47,   -47,   -47,   -47,   -47,   -47,     0,   -47,
-   -47,   -47,   -47,   -47,   -47,   -47,     0,   598,     0,   -47,
-   -47,   -47,   -47,   -47,   -47,   -47,     0,   -47,   -47,   -47,
-   -47,   -47,   215,   -47,   -47,     0,     0,     0,     0,   -47,
-   -47,   -47,   -47,     0,     0,     0,     0,   -47,     0,   -47,
-     0,   -47,   -47,   -47,   -47,   -47,   -47,   -47,   -47,   -47,
-   -47,   316,   317,   318,   319,   320,     0,   321,   322,   323,
-   324,   325,   326,   327,   328,   329,   773,     0,     0,     0,
-     0,   330,     0,    -4,    -4,    -4,    -4,    -4,    -4,    -4,
-    -4,     0,     0,     0,   216,   217,   218,     0,     0,     0,
-     0,     0,   219,   220,   221,   222,   223,   224,   225,   226,
-   227,   228,    18,     0,     0,     0,     0,     0,     0,     0,
-   229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
-     0,   239,   240,   241,   242,   243,   244,     0,     0,     0,
-     0,    19,     0,     0,     0,     0,    20,    21,     0,    22,
-    23,    24,    25,    26,    27,    28,    29,     0,    30,    31,
-    32,    33,    34,    35,    36,     0,     0,     0,    37,    38,
-    39,    40,    41,    42,    43,     0,    44,    45,    46,    47,
-    48,     0,    49,    50,     0,     0,     0,     0,    51,    52,
-    53,    54,     0,     0,     0,     0,    55,     0,    56,     0,
-    57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-   570,    23,    24,   571,   572,    27,   573,    29,     0,    30,
-     0,    32,    33,     0,    35,    36,   316,   317,   318,   319,
-   320,     0,   321,   322,   323,   324,   325,   326,   327,   328,
-   329,    48,     0,     0,     0,     0,   330,     0,     0,     0,
-    52,    53,    54,  1137,     0,  1138,     0,     0,     0,     0,
-     0,     0,     0,   316,   317,   318,   319,   320,    64,   321,
-   322,   323,   324,   325,   326,   327,   328,   329,     0,     0,
-     0,     0,     0,   330,     0,     0,     0,     0,     0,     0,
-  1253,     0,  1254,   316,   317,   318,   319,   320,     0,   321,
-   322,   323,   324,   325,   326,   327,   328,   329,     0,     0,
-     0,     0,     0,   330,     0,     0,     0,   316,   317,   318,
-   319,   320,   734,   321,   322,   323,   324,   325,   326,   327,
-   328,   329,     0,     0,     0,     0,     0,   330,     0,     0,
-     0,   316,   317,   318,   319,   320,   738,   321,   322,   323,
-   324,   325,   326,   327,   328,   329,     0,     0,     0,     0,
-     0,   330,     0,     0,     0,   316,   317,   318,   319,   320,
-   739,   321,   322,   323,   324,   325,   326,   327,   328,   329,
-     0,     0,     0,     0,     0,   330,     0,     0,     0,   316,
-   317,   318,   319,   320,   862,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,     0,     0,   316,   317,   318,   319,   320,   885,   321,
-   322,   323,   324,   325,   326,   327,   328,   329,     0,     0,
-     0,     0,     0,   330,     0,     0,     0,   316,   317,   318,
-   319,   320,  1112,   321,   322,   323,   324,   325,   326,   327,
-   328,   329,     0,     0,     0,     0,     0,   330,     0,     0,
-     0,   316,   317,   318,   319,   320,  1275,   321,   322,   323,
-   324,   325,   326,   327,   328,   329,     0,     0,     0,     0,
-     0,   330,     0,     0,     0,   316,   317,   318,   319,   320,
-  1276,   321,   322,   323,   324,   325,   326,   327,   328,   329,
-     0,     0,     0,     0,     0,   330,     0,     0,     0,   316,
-   317,   318,   319,   320,  1310,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,     0,     0,   316,   317,   318,   319,   320,  1316,   321,
-   322,   323,   324,   325,   326,   327,   328,   329,     0,     0,
-     0,     0,     0,   330,     0,     0,     0,   316,   317,   318,
-   319,   320,  1319,   321,   322,   323,   324,   325,   326,   327,
-   328,   329,     0,     0,     0,     0,     0,   330,     0,     0,
-     0,   316,   317,   318,   319,   320,  1322,   321,   322,   323,
-   324,   325,   326,   327,   328,   329,     0,     0,     0,     0,
-     0,   330,     0,     0,     0,   316,   317,   318,   319,   320,
-  1323,   321,   322,   323,   324,   325,   326,   327,   328,   329,
-     0,     0,     0,     0,     0,   330,     0,     0,     0,   316,
-   317,   318,   319,   320,  1346,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,     0,     0,   316,   317,   318,   319,   320,  1383,   321,
-   322,   323,   324,   325,   326,   327,   328,   329,     0,     0,
-     0,     0,     0,   330,     0,     0,     0,   316,   317,   318,
-   319,   320,  1386,   321,   322,   323,   324,   325,   326,   327,
-   328,   329,     0,     0,     0,     0,     0,   330,     0,     0,
-     0,   316,   317,   318,   319,   320,  1388,   321,   322,   323,
-   324,   325,   326,   327,   328,   329,     0,     0,     0,     0,
-     0,   330,     0,     0,     0,   316,   317,   318,   319,   320,
-  1400,   321,   322,   323,   324,   325,   326,   327,   328,   329,
-     0,     0,     0,     0,     0,   330,     0,     0,     0,   316,
-   317,   318,   319,   320,  1483,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,     0,     0,   316,   317,   318,   319,   320,  1490,   321,
-   322,   323,   324,   325,   326,   327,   328,   329,     0,     0,
-     0,     0,     0,   330,     0,   316,   317,   318,   319,   320,
-   526,   321,   322,   323,   324,   325,   326,   327,   328,   329,
-     0,     0,     0,     0,     0,   330,     0,   316,   317,   318,
-   319,   320,   556,   321,   322,   323,   324,   325,   326,   327,
-   328,   329,     0,     0,     0,     0,     0,   330,     0,   316,
-   317,   318,   319,   320,   557,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,   316,   317,   318,   319,   320,   591,   321,   322,   323,
-   324,   325,   326,   327,   328,   329,     0,     0,     0,     0,
-     0,   330,     0,   316,   317,   318,   319,   320,   670,   321,
-   322,   323,   324,   325,   326,   327,   328,   329,     0,     0,
-     0,     0,     0,   330,     0,   316,   317,   318,   319,   320,
-   671,   321,   322,   323,   324,   325,   326,   327,   328,   329,
-     0,     0,     0,     0,     0,   330,     0,   316,   317,   318,
-   319,   320,   684,   321,   322,   323,   324,   325,   326,   327,
-   328,   329,     0,     0,     0,     0,     0,   330,     0,   316,
-   317,   318,   319,   320,   685,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,   316,   317,   318,   319,   320,   686,   321,   322,   323,
-   324,   325,   326,   327,   328,   329,     0,     0,     0,     0,
-     0,   330,     0,   316,   317,   318,   319,   320,   687,   321,
-   322,   323,   324,   325,   326,   327,   328,   329,     0,     0,
-     0,     0,     0,   330,     0,   316,   317,   318,   319,   320,
-   688,   321,   322,   323,   324,   325,   326,   327,   328,   329,
-     0,     0,     0,     0,     0,   330,     0,   316,   317,   318,
-   319,   320,   689,   321,   322,   323,   324,   325,   326,   327,
-   328,   329,     0,     0,     0,     0,     0,   330,     0,   316,
-   317,   318,   319,   320,   752,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,   316,   317,   318,   319,   320,   753,   321,   322,   323,
-   324,   325,   326,   327,   328,   329,     0,     0,     0,     0,
-     0,   330,     0,   316,   317,   318,   319,   320,   754,   321,
-   322,   323,   324,   325,   326,   327,   328,   329,     0,     0,
-     0,     0,     0,   330,     0,   316,   317,   318,   319,   320,
-   852,   321,   322,   323,   324,   325,   326,   327,   328,   329,
-     0,     0,     0,     0,     0,   330,     0,   316,   317,   318,
-   319,   320,   883,   321,   322,   323,   324,   325,   326,   327,
-   328,   329,     0,     0,     0,     0,     0,   330,     0,   316,
-   317,   318,   319,   320,   884,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,   316,   317,   318,   319,   320,   906,   321,   322,   323,
-   324,   325,   326,   327,   328,   329,     0,     0,     0,     0,
-     0,   330,     0,   316,   317,   318,   319,   320,  1025,   321,
-   322,   323,   324,   325,   326,   327,   328,   329,     0,     0,
-     0,     0,     0,   330,     0,   316,   317,   318,   319,   320,
-  1026,   321,   322,   323,   324,   325,   326,   327,   328,   329,
-     0,     0,     0,     0,     0,   330,     0,   316,   317,   318,
-   319,   320,  1039,   321,   322,   323,   324,   325,   326,   327,
-   328,   329,     0,     0,     0,     0,     0,   330,     0,   316,
-   317,   318,   319,   320,  1040,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,   316,   317,   318,   319,   320,  1073,   321,   322,   323,
-   324,   325,   326,   327,   328,   329,     0,     0,     0,     0,
-     0,   330,     0,   316,   317,   318,   319,   320,  1074,   321,
-   322,   323,   324,   325,   326,   327,   328,   329,     0,     0,
-     0,     0,     0,   330,     0,   316,   317,   318,   319,   320,
-  1089,   321,   322,   323,   324,   325,   326,   327,   328,   329,
-     0,     0,     0,     0,     0,   330,     0,   316,   317,   318,
-   319,   320,  1096,   321,   322,   323,   324,   325,   326,   327,
-   328,   329,     0,     0,     0,     0,     0,   330,     0,   316,
-   317,   318,   319,   320,  1208,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,   316,   317,   318,   319,   320,  1209,   321,   322,   323,
-   324,   325,   326,   327,   328,   329,     0,     0,     0,     0,
-     0,   330,     0,   316,   317,   318,   319,   320,  1217,   321,
-   322,   323,   324,   325,   326,   327,   328,   329,     0,     0,
-     0,     0,     0,   330,     0,   316,   317,   318,   319,   320,
-  1219,   321,   322,   323,   324,   325,   326,   327,   328,   329,
-     0,     0,     0,     0,     0,   330,     0,   316,   317,   318,
-   319,   320,  1230,   321,   322,   323,   324,   325,   326,   327,
-   328,   329,     0,     0,     0,     0,     0,   330,     0,   316,
-   317,   318,   319,   320,  1235,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,   316,   317,   318,   319,   320,  1238,   321,   322,   323,
-   324,   325,   326,   327,   328,   329,     0,     0,     0,     0,
-     0,   330,     0,   316,   317,   318,   319,   320,  1242,   321,
-   322,   323,   324,   325,   326,   327,   328,   329,     0,     0,
-     0,     0,     0,   330,     0,   316,   317,   318,   319,   320,
-  1243,   321,   322,   323,   324,   325,   326,   327,   328,   329,
-     0,     0,     0,     0,     0,   330,     0,   316,   317,   318,
-   319,   320,  1250,   321,   322,   323,   324,   325,   326,   327,
-   328,   329,     0,     0,     0,     0,     0,   330,     0,   316,
-   317,   318,   319,   320,  1251,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,   316,   317,   318,   319,   320,  1331,   321,   322,   323,
-   324,   325,   326,   327,   328,   329,     0,     0,     0,     0,
-     0,   330,     0,   316,   317,   318,   319,   320,  1342,   321,
-   322,   323,   324,   325,   326,   327,   328,   329,     0,     0,
-     0,     0,     0,   330,     0,   316,   317,   318,   319,   320,
-  1344,   321,   322,   323,   324,   325,   326,   327,   328,   329,
-     0,     0,     0,     0,     0,   330,     0,   316,   317,   318,
-   319,   320,  1467,   321,   322,   323,   324,   325,   326,   327,
-   328,   329,     0,     0,     0,     0,     0,   330,     0,   316,
-   317,   318,   319,   320,  1482,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,     0,     0,   501,   316,   317,   318,   319,   320,     0,
-   321,   322,   323,   324,   325,   326,   327,   328,   329,     0,
-     0,     0,     0,     0,   330,     0,     0,     0,   634,   316,
-   317,   318,   319,   320,     0,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,     0,     0,   649,   316,   317,   318,   319,   320,     0,
-   321,   322,   323,   324,   325,   326,   327,   328,   329,     0,
-     0,     0,     0,     0,   330,     0,     0,     0,   651,   316,
-   317,   318,   319,   320,     0,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,     0,     0,   653,   316,   317,   318,   319,   320,     0,
-   321,   322,   323,   324,   325,   326,   327,   328,   329,     0,
-     0,     0,     0,     0,   330,     0,     0,     0,   655,   316,
-   317,   318,   319,   320,     0,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,     0,     0,   657,   316,   317,   318,   319,   320,     0,
-   321,   322,   323,   324,   325,   326,   327,   328,   329,     0,
-     0,     0,     0,     0,   330,     0,     0,     0,   659,   316,
-   317,   318,   319,   320,     0,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,     0,     0,   661,   316,   317,   318,   319,   320,     0,
-   321,   322,   323,   324,   325,   326,   327,   328,   329,     0,
-     0,     0,     0,     0,   330,     0,     0,     0,   663,   316,
-   317,   318,   319,   320,     0,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,     0,     0,   665,   316,   317,   318,   319,   320,     0,
-   321,   322,   323,   324,   325,   326,   327,   328,   329,     0,
-     0,     0,     0,     0,   330,     0,     0,     0,   667,   316,
-   317,   318,   319,   320,     0,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,     0,     0,   669,   316,   317,   318,   319,   320,     0,
-   321,   322,   323,   324,   325,   326,   327,   328,   329,     0,
-     0,     0,     0,     0,   330,     0,     0,     0,   673,   316,
-   317,   318,   319,   320,     0,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,     0,     0,   675,   316,   317,   318,   319,   320,     0,
-   321,   322,   323,   324,   325,   326,   327,   328,   329,     0,
-     0,     0,     0,     0,   330,     0,     0,     0,   677,   316,
-   317,   318,   319,   320,     0,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,     0,     0,   679,   316,   317,   318,   319,   320,     0,
-   321,   322,   323,   324,   325,   326,   327,   328,   329,     0,
-     0,     0,     0,     0,   330,     0,     0,     0,   681,   316,
-   317,   318,   319,   320,     0,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,     0,     0,   683,   316,   317,   318,   319,   320,     0,
-   321,   322,   323,   324,   325,   326,   327,   328,   329,     0,
-     0,     0,     0,     0,   330,     0,     0,     0,   755,   316,
-   317,   318,   319,   320,     0,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,     0,     0,   761,   316,   317,   318,   319,   320,     0,
-   321,   322,   323,   324,   325,   326,   327,   328,   329,     0,
-     0,     0,     0,     0,   330,     0,     0,     0,   764,   316,
-   317,   318,   319,   320,     0,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,     0,     0,   765,   316,   317,   318,   319,   320,     0,
-   321,   322,   323,   324,   325,   326,   327,   328,   329,     0,
-     0,     0,     0,     0,   330,     0,     0,     0,   833,   316,
-   317,   318,   319,   320,     0,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,     0,     0,   958,   316,   317,   318,   319,   320,     0,
-   321,   322,   323,   324,   325,   326,   327,   328,   329,     0,
-     0,     0,     0,     0,   330,     0,     0,     0,   960,   316,
-   317,   318,   319,   320,     0,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,     0,     0,   962,   316,   317,   318,   319,   320,     0,
-   321,   322,   323,   324,   325,   326,   327,   328,   329,     0,
-     0,     0,     0,     0,   330,     0,     0,     0,   964,   316,
-   317,   318,   319,   320,     0,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,     0,     0,   965,   316,   317,   318,   319,   320,     0,
-   321,   322,   323,   324,   325,   326,   327,   328,   329,     0,
-     0,     0,     0,     0,   330,     0,     0,     0,  1087,   316,
-   317,   318,   319,   320,     0,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,   495,   316,   317,   318,   319,   320,     0,   321,   322,
-   323,   324,   325,   326,   327,   328,   329,     0,     0,     0,
-     0,     0,   330,     0,   527,   316,   317,   318,   319,   320,
-     0,   321,   322,   323,   324,   325,   326,   327,   328,   329,
-     0,     0,     0,     0,     0,   330,     0,   528,   316,   317,
-   318,   319,   320,     0,   321,   322,   323,   324,   325,   326,
-   327,   328,   329,     0,     0,     0,     0,     0,   330,     0,
-   529,   316,   317,   318,   319,   320,     0,   321,   322,   323,
-   324,   325,   326,   327,   328,   329,     0,     0,     0,     0,
-     0,   330,     0,   531,   316,   317,   318,   319,   320,     0,
-   321,   322,   323,   324,   325,   326,   327,   328,   329,     0,
-     0,     0,     0,     0,   330,     0,   533,   316,   317,   318,
-   319,   320,     0,   321,   322,   323,   324,   325,   326,   327,
-   328,   329,     0,     0,     0,     0,     0,   330,     0,   534,
-   316,   317,   318,   319,   320,     0,   321,   322,   323,   324,
-   325,   326,   327,   328,   329,     0,     0,     0,     0,     0,
-   330,     0,   542,   316,   317,   318,   319,   320,     0,   321,
-   322,   323,   324,   325,   326,   327,   328,   329,     0,     0,
-     0,     0,     0,   330,     0,   585,   316,   317,   318,   319,
-   320,     0,   321,   322,   323,   324,   325,   326,   327,   328,
-   329,     0,     0,     0,     0,     0,   330,     0,   586,   316,
-   317,   318,   319,   320,     0,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,   589,   316,   317,   318,   319,   320,     0,   321,   322,
-   323,   324,   325,   326,   327,   328,   329,     0,     0,     0,
-     0,     0,   330,     0,   595,   316,   317,   318,   319,   320,
-     0,   321,   322,   323,   324,   325,   326,   327,   328,   329,
-     0,     0,     0,     0,     0,   330,     0,   648,   316,   317,
-   318,   319,   320,     0,   321,   322,   323,   324,   325,   326,
-   327,   328,   329,     0,     0,     0,     0,     0,   330,     0,
-   650,   316,   317,   318,   319,   320,     0,   321,   322,   323,
-   324,   325,   326,   327,   328,   329,     0,     0,     0,     0,
-     0,   330,     0,   652,   316,   317,   318,   319,   320,     0,
-   321,   322,   323,   324,   325,   326,   327,   328,   329,     0,
-     0,     0,     0,     0,   330,     0,   654,   316,   317,   318,
-   319,   320,     0,   321,   322,   323,   324,   325,   326,   327,
-   328,   329,     0,     0,     0,     0,     0,   330,     0,   656,
-   316,   317,   318,   319,   320,     0,   321,   322,   323,   324,
-   325,   326,   327,   328,   329,     0,     0,     0,     0,     0,
-   330,     0,   658,   316,   317,   318,   319,   320,     0,   321,
-   322,   323,   324,   325,   326,   327,   328,   329,     0,     0,
-     0,     0,     0,   330,     0,   660,   316,   317,   318,   319,
-   320,     0,   321,   322,   323,   324,   325,   326,   327,   328,
-   329,     0,     0,     0,     0,     0,   330,     0,   662,   316,
-   317,   318,   319,   320,     0,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,   664,   316,   317,   318,   319,   320,     0,   321,   322,
-   323,   324,   325,   326,   327,   328,   329,     0,     0,     0,
-     0,     0,   330,     0,   666,   316,   317,   318,   319,   320,
-     0,   321,   322,   323,   324,   325,   326,   327,   328,   329,
-     0,     0,     0,     0,     0,   330,     0,   668,   316,   317,
-   318,   319,   320,     0,   321,   322,   323,   324,   325,   326,
-   327,   328,   329,     0,     0,     0,     0,     0,   330,     0,
-   672,   316,   317,   318,   319,   320,     0,   321,   322,   323,
-   324,   325,   326,   327,   328,   329,     0,     0,     0,     0,
-     0,   330,     0,   674,   316,   317,   318,   319,   320,     0,
-   321,   322,   323,   324,   325,   326,   327,   328,   329,     0,
-     0,     0,     0,     0,   330,     0,   676,   316,   317,   318,
-   319,   320,     0,   321,   322,   323,   324,   325,   326,   327,
-   328,   329,     0,     0,     0,     0,     0,   330,     0,   678,
-   316,   317,   318,   319,   320,     0,   321,   322,   323,   324,
-   325,   326,   327,   328,   329,     0,     0,     0,     0,     0,
-   330,     0,   680,   316,   317,   318,   319,   320,     0,   321,
-   322,   323,   324,   325,   326,   327,   328,   329,     0,     0,
-     0,     0,     0,   330,     0,   682,   316,   317,   318,   319,
-   320,     0,   321,   322,   323,   324,   325,   326,   327,   328,
-   329,     0,     0,     0,     0,     0,   330,     0,   720,   316,
-   317,   318,   319,   320,     0,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,   722,   316,   317,   318,   319,   320,     0,   321,   322,
-   323,   324,   325,   326,   327,   328,   329,     0,     0,     0,
-     0,     0,   330,     0,   735,   316,   317,   318,   319,   320,
-     0,   321,   322,   323,   324,   325,   326,   327,   328,   329,
-     0,     0,     0,     0,     0,   330,     0,   736,   316,   317,
-   318,   319,   320,     0,   321,   322,   323,   324,   325,   326,
-   327,   328,   329,     0,     0,     0,     0,     0,   330,     0,
-   740,   316,   317,   318,   319,   320,     0,   321,   322,   323,
-   324,   325,   326,   327,   328,   329,     0,     0,     0,     0,
-     0,   330,     0,   741,   316,   317,   318,   319,   320,     0,
-   321,   322,   323,   324,   325,   326,   327,   328,   329,     0,
-     0,     0,     0,     0,   330,     0,   742,   316,   317,   318,
-   319,   320,     0,   321,   322,   323,   324,   325,   326,   327,
-   328,   329,     0,     0,     0,     0,     0,   330,     0,   743,
-   316,   317,   318,   319,   320,     0,   321,   322,   323,   324,
-   325,   326,   327,   328,   329,     0,     0,     0,     0,     0,
-   330,     0,   744,   316,   317,   318,   319,   320,     0,   321,
-   322,   323,   324,   325,   326,   327,   328,   329,     0,     0,
-     0,     0,     0,   330,     0,   769,   316,   317,   318,   319,
-   320,     0,   321,   322,   323,   324,   325,   326,   327,   328,
-   329,     0,     0,     0,     0,     0,   330,     0,   776,   316,
-   317,   318,   319,   320,     0,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,   957,   316,   317,   318,   319,   320,     0,   321,   322,
-   323,   324,   325,   326,   327,   328,   329,     0,     0,     0,
-     0,     0,   330,     0,   959,   316,   317,   318,   319,   320,
-     0,   321,   322,   323,   324,   325,   326,   327,   328,   329,
-     0,     0,     0,     0,     0,   330,     0,   961,   316,   317,
-   318,   319,   320,     0,   321,   322,   323,   324,   325,   326,
-   327,   328,   329,     0,     0,     0,     0,     0,   330,     0,
-   963,   316,   317,   318,   319,   320,     0,   321,   322,   323,
-   324,   325,   326,   327,   328,   329,     0,     0,     0,     0,
-     0,   330,     0,   969,   316,   317,   318,   319,   320,     0,
-   321,   322,   323,   324,   325,   326,   327,   328,   329,     0,
-     0,     0,     0,     0,   330,     0,  1029,   316,   317,   318,
-   319,   320,     0,   321,   322,   323,   324,   325,   326,   327,
-   328,   329,     0,     0,     0,     0,     0,   330,     0,  1113,
-   316,   317,   318,   319,   320,     0,   321,   322,   323,   324,
-   325,   326,   327,   328,   329,     0,     0,     0,     0,     0,
-   330,     0,  1141,   316,   317,   318,   319,   320,     0,   321,
-   322,   323,   324,   325,   326,   327,   328,   329,     0,     0,
-     0,     0,     0,   330,     0,  1225,   316,   317,   318,   319,
-   320,     0,   321,   322,   323,   324,   325,   326,   327,   328,
-   329,     0,     0,     0,     0,     0,   330,     0,  1229,   316,
-   317,   318,   319,   320,     0,   321,   322,   323,   324,   325,
-   326,   327,   328,   329,     0,     0,     0,     0,     0,   330,
-     0,  1231,   316,   317,   318,   319,   320,     0,   321,   322,
-   323,   324,   325,   326,   327,   328,   329,     0,     0,     0,
-     0,     0,   330,     0,  1334,   316,   317,   318,   319,   320,
-     0,   321,   322,   323,   324,   325,   326,   327,   328,   329,
-     0,     0,     0,     0,     0,   330,     0,  1336,   316,   317,
-   318,   319,   320,     0,   321,   322,   323,   324,   325,   326,
-   327,   328,   329,     0,     0,     0,     0,     0,   330,     0,
-  1338,   316,   317,   318,   319,   320,     0,   321,   322,   323,
-   324,   325,   326,   327,   328,   329,     0,     0,     0,     0,
-     0,   330,     0,  1341,   316,   317,   318,   319,   320,     0,
-   321,   322,   323,   324,   325,   326,   327,   328,   329,     0,
-     0,     0,     0,     0,   330,     0,  1399
+     0,     0,     0,   -47,     0,     0,   786,    64,   -47,   -47,
+     0,   -47,   -47,   -47,   -47,   -47,   -47,   -47,   -47,     0,
+   -47,   -47,   -47,   -47,   -47,   -47,   -47,     0,     0,  1345,
+   -47,   -47,   -47,   -47,   -47,   -47,   -47,     0,   -47,   -47,
+   -47,   -47,   -47,   217,   -47,   -47,     0,     0,     0,     0,
+   -47,   -47,   -47,   -47,     0,     0,     0,     0,   -47,     0,
+   -47,     0,   -47,   -47,   -47,   -47,   -47,   -47,   -47,   -47,
+   -47,   -47,     0,   318,   319,   320,   321,   322,     0,   323,
+   324,   325,   326,   327,   328,   329,   330,   331,     0,     0,
+  1420,     0,     0,   332,    -4,    -4,    -4,    -4,    -4,    -4,
+    -4,    -4,   748,     0,     0,   218,   219,   220,     0,     0,
+     0,     0,     0,   221,   222,   223,   224,   225,   226,   227,
+   228,   229,   230,    18,     0,     0,     0,     0,     0,     0,
+     0,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+   240,     0,   241,   242,   243,   244,   245,   246,     0,     0,
+     0,     0,    19,     0,     0,     0,     0,    20,    21,     0,
+    22,    23,    24,    25,    26,    27,    28,    29,     0,    30,
+    31,    32,    33,    34,    35,    36,     0,     0,     0,    37,
+    38,    39,    40,    41,    42,    43,     0,    44,    45,    46,
+    47,    48,     0,    49,    50,     0,     0,     0,     0,    51,
+    52,    53,    54,     0,     0,     0,     0,    55,     0,    56,
+     0,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+    66,   580,    23,    24,   581,   582,    27,   583,    29,     0,
+    30,     0,    32,    33,     0,    35,    36,   318,   319,   320,
+   321,   322,     0,   323,   324,   325,   326,   327,   328,   329,
+   330,   331,    48,     0,     0,     0,     0,   332,     0,     0,
+     0,    52,    53,    54,  1138,     0,  1139,     0,     0,     0,
+     0,     0,     0,     0,   318,   319,   320,   321,   322,    64,
+   323,   324,   325,   326,   327,   328,   329,   330,   331,     0,
+     0,     0,     0,     0,   332,     0,     0,     0,     0,     0,
+     0,  1164,     0,  1165,   318,   319,   320,   321,   322,     0,
+   323,   324,   325,   326,   327,   328,   329,   330,   331,     0,
+     0,     0,     0,     0,   332,     0,     0,     0,     0,     0,
+     0,  1283,     0,  1284,   318,   319,   320,   321,   322,     0,
+   323,   324,   325,   326,   327,   328,   329,   330,   331,     0,
+     0,     0,     0,     0,   332,     0,     0,     0,   318,   319,
+   320,   321,   322,   749,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+     0,     0,   318,   319,   320,   321,   322,   875,   323,   324,
+   325,   326,   327,   328,   329,   330,   331,     0,     0,     0,
+     0,     0,   332,     0,     0,     0,   318,   319,   320,   321,
+   322,   898,   323,   324,   325,   326,   327,   328,   329,   330,
+   331,     0,     0,     0,     0,     0,   332,     0,     0,     0,
+   318,   319,   320,   321,   322,  1136,   323,   324,   325,   326,
+   327,   328,   329,   330,   331,     0,     0,     0,     0,     0,
+   332,     0,     0,     0,   318,   319,   320,   321,   322,  1150,
+   323,   324,   325,   326,   327,   328,   329,   330,   331,     0,
+     0,     0,     0,     0,   332,     0,     0,     0,   318,   319,
+   320,   321,   322,  1295,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+     0,     0,   318,   319,   320,   321,   322,  1302,   323,   324,
+   325,   326,   327,   328,   329,   330,   331,     0,     0,     0,
+     0,     0,   332,     0,     0,     0,   318,   319,   320,   321,
+   322,  1303,   323,   324,   325,   326,   327,   328,   329,   330,
+   331,     0,     0,     0,     0,     0,   332,     0,     0,     0,
+   318,   319,   320,   321,   322,  1336,   323,   324,   325,   326,
+   327,   328,   329,   330,   331,     0,     0,     0,     0,     0,
+   332,     0,     0,     0,   318,   319,   320,   321,   322,  1339,
+   323,   324,   325,   326,   327,   328,   329,   330,   331,     0,
+     0,     0,     0,     0,   332,     0,     0,     0,   318,   319,
+   320,   321,   322,  1342,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+     0,     0,   318,   319,   320,   321,   322,  1350,   323,   324,
+   325,   326,   327,   328,   329,   330,   331,     0,     0,     0,
+     0,     0,   332,     0,     0,     0,   318,   319,   320,   321,
+   322,  1351,   323,   324,   325,   326,   327,   328,   329,   330,
+   331,     0,     0,     0,     0,     0,   332,     0,     0,     0,
+   318,   319,   320,   321,   322,  1374,   323,   324,   325,   326,
+   327,   328,   329,   330,   331,     0,     0,     0,     0,     0,
+   332,     0,     0,     0,   318,   319,   320,   321,   322,  1414,
+   323,   324,   325,   326,   327,   328,   329,   330,   331,     0,
+     0,     0,     0,     0,   332,     0,     0,     0,   318,   319,
+   320,   321,   322,  1416,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+     0,     0,   318,   319,   320,   321,   322,  1418,   323,   324,
+   325,   326,   327,   328,   329,   330,   331,     0,     0,     0,
+     0,     0,   332,     0,     0,     0,   318,   319,   320,   321,
+   322,  1434,   323,   324,   325,   326,   327,   328,   329,   330,
+   331,     0,     0,     0,     0,     0,   332,     0,     0,     0,
+   318,   319,   320,   321,   322,  1513,   323,   324,   325,   326,
+   327,   328,   329,   330,   331,     0,     0,     0,     0,     0,
+   332,     0,     0,     0,   318,   319,   320,   321,   322,  1520,
+   323,   324,   325,   326,   327,   328,   329,   330,   331,     0,
+     0,     0,     0,     0,   332,     0,   502,     0,     0,     0,
+     0,   563,   318,   319,   320,   321,   322,     0,   323,   324,
+   325,   326,   327,   328,   329,   330,   331,     0,     0,     0,
+     0,     0,   332,     0,   318,   319,   320,   321,   322,   533,
+   323,   324,   325,   326,   327,   328,   329,   330,   331,     0,
+     0,     0,     0,     0,   332,     0,   318,   319,   320,   321,
+   322,   563,   323,   324,   325,   326,   327,   328,   329,   330,
+   331,     0,     0,     0,     0,     0,   332,     0,   318,   319,
+   320,   321,   322,   564,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+   318,   319,   320,   321,   322,   601,   323,   324,   325,   326,
+   327,   328,   329,   330,   331,     0,     0,     0,     0,     0,
+   332,     0,   318,   319,   320,   321,   322,   680,   323,   324,
+   325,   326,   327,   328,   329,   330,   331,     0,     0,     0,
+     0,     0,   332,     0,   318,   319,   320,   321,   322,   681,
+   323,   324,   325,   326,   327,   328,   329,   330,   331,     0,
+     0,     0,     0,     0,   332,     0,   318,   319,   320,   321,
+   322,   694,   323,   324,   325,   326,   327,   328,   329,   330,
+   331,     0,     0,     0,     0,     0,   332,     0,   318,   319,
+   320,   321,   322,   695,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+   318,   319,   320,   321,   322,   696,   323,   324,   325,   326,
+   327,   328,   329,   330,   331,     0,     0,     0,     0,     0,
+   332,     0,   318,   319,   320,   321,   322,   697,   323,   324,
+   325,   326,   327,   328,   329,   330,   331,     0,     0,     0,
+     0,     0,   332,     0,   318,   319,   320,   321,   322,   698,
+   323,   324,   325,   326,   327,   328,   329,   330,   331,     0,
+     0,     0,     0,     0,   332,     0,   318,   319,   320,   321,
+   322,   699,   323,   324,   325,   326,   327,   328,   329,   330,
+   331,     0,     0,     0,     0,     0,   332,     0,   318,   319,
+   320,   321,   322,   762,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+   318,   319,   320,   321,   322,   763,   323,   324,   325,   326,
+   327,   328,   329,   330,   331,     0,     0,     0,     0,     0,
+   332,     0,   318,   319,   320,   321,   322,   764,   323,   324,
+   325,   326,   327,   328,   329,   330,   331,     0,     0,     0,
+     0,     0,   332,     0,   318,   319,   320,   321,   322,   865,
+   323,   324,   325,   326,   327,   328,   329,   330,   331,     0,
+     0,     0,     0,     0,   332,     0,   318,   319,   320,   321,
+   322,   896,   323,   324,   325,   326,   327,   328,   329,   330,
+   331,     0,     0,     0,     0,     0,   332,     0,   318,   319,
+   320,   321,   322,   897,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+   318,   319,   320,   321,   322,   924,   323,   324,   325,   326,
+   327,   328,   329,   330,   331,     0,     0,     0,     0,     0,
+   332,     0,   318,   319,   320,   321,   322,  1049,   323,   324,
+   325,   326,   327,   328,   329,   330,   331,     0,     0,     0,
+     0,     0,   332,     0,   318,   319,   320,   321,   322,  1050,
+   323,   324,   325,   326,   327,   328,   329,   330,   331,     0,
+     0,     0,     0,     0,   332,     0,   318,   319,   320,   321,
+   322,  1063,   323,   324,   325,   326,   327,   328,   329,   330,
+   331,     0,     0,     0,     0,     0,   332,     0,   318,   319,
+   320,   321,   322,  1064,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+   318,   319,   320,   321,   322,  1097,   323,   324,   325,   326,
+   327,   328,   329,   330,   331,     0,     0,     0,     0,     0,
+   332,     0,   318,   319,   320,   321,   322,  1098,   323,   324,
+   325,   326,   327,   328,   329,   330,   331,     0,     0,     0,
+     0,     0,   332,     0,   318,   319,   320,   321,   322,  1113,
+   323,   324,   325,   326,   327,   328,   329,   330,   331,     0,
+     0,     0,     0,     0,   332,     0,   318,   319,   320,   321,
+   322,  1120,   323,   324,   325,   326,   327,   328,   329,   330,
+   331,     0,     0,     0,     0,     0,   332,     0,   318,   319,
+   320,   321,   322,  1238,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+   318,   319,   320,   321,   322,  1239,   323,   324,   325,   326,
+   327,   328,   329,   330,   331,     0,     0,     0,     0,     0,
+   332,     0,   318,   319,   320,   321,   322,  1247,   323,   324,
+   325,   326,   327,   328,   329,   330,   331,     0,     0,     0,
+     0,     0,   332,     0,   318,   319,   320,   321,   322,  1249,
+   323,   324,   325,   326,   327,   328,   329,   330,   331,     0,
+     0,     0,     0,     0,   332,     0,   318,   319,   320,   321,
+   322,  1260,   323,   324,   325,   326,   327,   328,   329,   330,
+   331,     0,     0,     0,     0,     0,   332,     0,   318,   319,
+   320,   321,   322,  1265,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+   318,   319,   320,   321,   322,  1268,   323,   324,   325,   326,
+   327,   328,   329,   330,   331,     0,     0,     0,     0,     0,
+   332,     0,   318,   319,   320,   321,   322,  1272,   323,   324,
+   325,   326,   327,   328,   329,   330,   331,     0,     0,     0,
+     0,     0,   332,     0,   318,   319,   320,   321,   322,  1273,
+   323,   324,   325,   326,   327,   328,   329,   330,   331,     0,
+     0,     0,     0,     0,   332,     0,   318,   319,   320,   321,
+   322,  1280,   323,   324,   325,   326,   327,   328,   329,   330,
+   331,     0,     0,     0,     0,     0,   332,     0,   318,   319,
+   320,   321,   322,  1281,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+   318,   319,   320,   321,   322,  1359,   323,   324,   325,   326,
+   327,   328,   329,   330,   331,     0,     0,     0,     0,     0,
+   332,     0,   318,   319,   320,   321,   322,  1370,   323,   324,
+   325,   326,   327,   328,   329,   330,   331,     0,     0,     0,
+     0,     0,   332,     0,   318,   319,   320,   321,   322,  1372,
+   323,   324,   325,   326,   327,   328,   329,   330,   331,     0,
+     0,     0,     0,     0,   332,     0,   318,   319,   320,   321,
+   322,  1498,   323,   324,   325,   326,   327,   328,   329,   330,
+   331,     0,     0,     0,     0,     0,   332,     0,   318,   319,
+   320,   321,   322,  1512,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+     0,     0,   508,   318,   319,   320,   321,   322,     0,   323,
+   324,   325,   326,   327,   328,   329,   330,   331,     0,     0,
+     0,     0,     0,   332,     0,     0,     0,   644,   318,   319,
+   320,   321,   322,     0,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+     0,     0,   659,   318,   319,   320,   321,   322,     0,   323,
+   324,   325,   326,   327,   328,   329,   330,   331,     0,     0,
+     0,     0,     0,   332,     0,     0,     0,   661,   318,   319,
+   320,   321,   322,     0,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+     0,     0,   663,   318,   319,   320,   321,   322,     0,   323,
+   324,   325,   326,   327,   328,   329,   330,   331,     0,     0,
+     0,     0,     0,   332,     0,     0,     0,   665,   318,   319,
+   320,   321,   322,     0,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+     0,     0,   667,   318,   319,   320,   321,   322,     0,   323,
+   324,   325,   326,   327,   328,   329,   330,   331,     0,     0,
+     0,     0,     0,   332,     0,     0,     0,   669,   318,   319,
+   320,   321,   322,     0,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+     0,     0,   671,   318,   319,   320,   321,   322,     0,   323,
+   324,   325,   326,   327,   328,   329,   330,   331,     0,     0,
+     0,     0,     0,   332,     0,     0,     0,   673,   318,   319,
+   320,   321,   322,     0,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+     0,     0,   675,   318,   319,   320,   321,   322,     0,   323,
+   324,   325,   326,   327,   328,   329,   330,   331,     0,     0,
+     0,     0,     0,   332,     0,     0,     0,   677,   318,   319,
+   320,   321,   322,     0,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+     0,     0,   679,   318,   319,   320,   321,   322,     0,   323,
+   324,   325,   326,   327,   328,   329,   330,   331,     0,     0,
+     0,     0,     0,   332,     0,     0,     0,   683,   318,   319,
+   320,   321,   322,     0,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+     0,     0,   685,   318,   319,   320,   321,   322,     0,   323,
+   324,   325,   326,   327,   328,   329,   330,   331,     0,     0,
+     0,     0,     0,   332,     0,     0,     0,   687,   318,   319,
+   320,   321,   322,     0,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+     0,     0,   689,   318,   319,   320,   321,   322,     0,   323,
+   324,   325,   326,   327,   328,   329,   330,   331,     0,     0,
+     0,     0,     0,   332,     0,     0,     0,   691,   318,   319,
+   320,   321,   322,     0,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+     0,     0,   693,   318,   319,   320,   321,   322,     0,   323,
+   324,   325,   326,   327,   328,   329,   330,   331,     0,     0,
+     0,     0,     0,   332,     0,     0,     0,   768,   318,   319,
+   320,   321,   322,     0,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+     0,     0,   774,   318,   319,   320,   321,   322,     0,   323,
+   324,   325,   326,   327,   328,   329,   330,   331,     0,     0,
+     0,     0,     0,   332,     0,     0,     0,   777,   318,   319,
+   320,   321,   322,     0,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+     0,     0,   778,   318,   319,   320,   321,   322,     0,   323,
+   324,   325,   326,   327,   328,   329,   330,   331,     0,     0,
+     0,     0,     0,   332,     0,     0,     0,   846,   318,   319,
+   320,   321,   322,     0,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+     0,     0,   976,   318,   319,   320,   321,   322,     0,   323,
+   324,   325,   326,   327,   328,   329,   330,   331,     0,     0,
+     0,     0,     0,   332,     0,     0,     0,   978,   318,   319,
+   320,   321,   322,     0,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+     0,     0,   980,   318,   319,   320,   321,   322,     0,   323,
+   324,   325,   326,   327,   328,   329,   330,   331,     0,     0,
+     0,     0,     0,   332,     0,     0,     0,   982,   318,   319,
+   320,   321,   322,     0,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+     0,     0,   983,   318,   319,   320,   321,   322,     0,   323,
+   324,   325,   326,   327,   328,   329,   330,   331,     0,     0,
+     0,     0,     0,   332,     0,     0,     0,  1111,   318,   319,
+   320,   321,   322,     0,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+   502,   318,   319,   320,   321,   322,     0,   323,   324,   325,
+   326,   327,   328,   329,   330,   331,     0,     0,     0,     0,
+     0,   332,     0,   534,   318,   319,   320,   321,   322,     0,
+   323,   324,   325,   326,   327,   328,   329,   330,   331,     0,
+     0,     0,     0,     0,   332,     0,   535,   318,   319,   320,
+   321,   322,     0,   323,   324,   325,   326,   327,   328,   329,
+   330,   331,     0,     0,     0,     0,     0,   332,     0,   536,
+   318,   319,   320,   321,   322,     0,   323,   324,   325,   326,
+   327,   328,   329,   330,   331,     0,     0,     0,     0,     0,
+   332,     0,   538,   318,   319,   320,   321,   322,     0,   323,
+   324,   325,   326,   327,   328,   329,   330,   331,     0,     0,
+     0,     0,     0,   332,     0,   540,   318,   319,   320,   321,
+   322,     0,   323,   324,   325,   326,   327,   328,   329,   330,
+   331,     0,     0,     0,     0,     0,   332,     0,   541,   318,
+   319,   320,   321,   322,     0,   323,   324,   325,   326,   327,
+   328,   329,   330,   331,     0,     0,     0,     0,     0,   332,
+     0,   549,   318,   319,   320,   321,   322,     0,   323,   324,
+   325,   326,   327,   328,   329,   330,   331,     0,     0,     0,
+     0,     0,   332,     0,   595,   318,   319,   320,   321,   322,
+     0,   323,   324,   325,   326,   327,   328,   329,   330,   331,
+     0,     0,     0,     0,     0,   332,     0,   596,   318,   319,
+   320,   321,   322,     0,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+   599,   318,   319,   320,   321,   322,     0,   323,   324,   325,
+   326,   327,   328,   329,   330,   331,     0,     0,     0,     0,
+     0,   332,     0,   605,   318,   319,   320,   321,   322,     0,
+   323,   324,   325,   326,   327,   328,   329,   330,   331,     0,
+     0,     0,     0,     0,   332,     0,   658,   318,   319,   320,
+   321,   322,     0,   323,   324,   325,   326,   327,   328,   329,
+   330,   331,     0,     0,     0,     0,     0,   332,     0,   660,
+   318,   319,   320,   321,   322,     0,   323,   324,   325,   326,
+   327,   328,   329,   330,   331,     0,     0,     0,     0,     0,
+   332,     0,   662,   318,   319,   320,   321,   322,     0,   323,
+   324,   325,   326,   327,   328,   329,   330,   331,     0,     0,
+     0,     0,     0,   332,     0,   664,   318,   319,   320,   321,
+   322,     0,   323,   324,   325,   326,   327,   328,   329,   330,
+   331,     0,     0,     0,     0,     0,   332,     0,   666,   318,
+   319,   320,   321,   322,     0,   323,   324,   325,   326,   327,
+   328,   329,   330,   331,     0,     0,     0,     0,     0,   332,
+     0,   668,   318,   319,   320,   321,   322,     0,   323,   324,
+   325,   326,   327,   328,   329,   330,   331,     0,     0,     0,
+     0,     0,   332,     0,   670,   318,   319,   320,   321,   322,
+     0,   323,   324,   325,   326,   327,   328,   329,   330,   331,
+     0,     0,     0,     0,     0,   332,     0,   672,   318,   319,
+   320,   321,   322,     0,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+   674,   318,   319,   320,   321,   322,     0,   323,   324,   325,
+   326,   327,   328,   329,   330,   331,     0,     0,     0,     0,
+     0,   332,     0,   676,   318,   319,   320,   321,   322,     0,
+   323,   324,   325,   326,   327,   328,   329,   330,   331,     0,
+     0,     0,     0,     0,   332,     0,   678,   318,   319,   320,
+   321,   322,     0,   323,   324,   325,   326,   327,   328,   329,
+   330,   331,     0,     0,     0,     0,     0,   332,     0,   682,
+   318,   319,   320,   321,   322,     0,   323,   324,   325,   326,
+   327,   328,   329,   330,   331,     0,     0,     0,     0,     0,
+   332,     0,   684,   318,   319,   320,   321,   322,     0,   323,
+   324,   325,   326,   327,   328,   329,   330,   331,     0,     0,
+     0,     0,     0,   332,     0,   686,   318,   319,   320,   321,
+   322,     0,   323,   324,   325,   326,   327,   328,   329,   330,
+   331,     0,     0,     0,     0,     0,   332,     0,   688,   318,
+   319,   320,   321,   322,     0,   323,   324,   325,   326,   327,
+   328,   329,   330,   331,     0,     0,     0,     0,     0,   332,
+     0,   690,   318,   319,   320,   321,   322,     0,   323,   324,
+   325,   326,   327,   328,   329,   330,   331,     0,     0,     0,
+     0,     0,   332,     0,   692,   318,   319,   320,   321,   322,
+     0,   323,   324,   325,   326,   327,   328,   329,   330,   331,
+     0,     0,     0,     0,     0,   332,     0,   730,   318,   319,
+   320,   321,   322,     0,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+   732,   318,   319,   320,   321,   322,     0,   323,   324,   325,
+   326,   327,   328,   329,   330,   331,     0,     0,     0,     0,
+     0,   332,     0,   745,   318,   319,   320,   321,   322,     0,
+   323,   324,   325,   326,   327,   328,   329,   330,   331,     0,
+     0,     0,     0,     0,   332,     0,   746,   318,   319,   320,
+   321,   322,     0,   323,   324,   325,   326,   327,   328,   329,
+   330,   331,     0,     0,     0,     0,     0,   332,     0,   750,
+   318,   319,   320,   321,   322,     0,   323,   324,   325,   326,
+   327,   328,   329,   330,   331,     0,     0,     0,     0,     0,
+   332,     0,   751,   318,   319,   320,   321,   322,     0,   323,
+   324,   325,   326,   327,   328,   329,   330,   331,     0,     0,
+     0,     0,     0,   332,     0,   752,   318,   319,   320,   321,
+   322,     0,   323,   324,   325,   326,   327,   328,   329,   330,
+   331,     0,     0,     0,     0,     0,   332,     0,   753,   318,
+   319,   320,   321,   322,     0,   323,   324,   325,   326,   327,
+   328,   329,   330,   331,     0,     0,     0,     0,     0,   332,
+     0,   754,   318,   319,   320,   321,   322,     0,   323,   324,
+   325,   326,   327,   328,   329,   330,   331,     0,     0,     0,
+     0,     0,   332,     0,   782,   318,   319,   320,   321,   322,
+     0,   323,   324,   325,   326,   327,   328,   329,   330,   331,
+     0,     0,     0,     0,     0,   332,     0,   789,   318,   319,
+   320,   321,   322,     0,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+   975,   318,   319,   320,   321,   322,     0,   323,   324,   325,
+   326,   327,   328,   329,   330,   331,     0,     0,     0,     0,
+     0,   332,     0,   977,   318,   319,   320,   321,   322,     0,
+   323,   324,   325,   326,   327,   328,   329,   330,   331,     0,
+     0,     0,     0,     0,   332,     0,   979,   318,   319,   320,
+   321,   322,     0,   323,   324,   325,   326,   327,   328,   329,
+   330,   331,     0,     0,     0,     0,     0,   332,     0,   981,
+   318,   319,   320,   321,   322,     0,   323,   324,   325,   326,
+   327,   328,   329,   330,   331,     0,     0,     0,     0,     0,
+   332,     0,   987,   318,   319,   320,   321,   322,     0,   323,
+   324,   325,   326,   327,   328,   329,   330,   331,     0,     0,
+     0,     0,     0,   332,     0,  1053,   318,   319,   320,   321,
+   322,     0,   323,   324,   325,   326,   327,   328,   329,   330,
+   331,     0,     0,     0,     0,     0,   332,     0,  1137,   318,
+   319,   320,   321,   322,     0,   323,   324,   325,   326,   327,
+   328,   329,   330,   331,     0,     0,     0,     0,     0,   332,
+     0,  1168,   318,   319,   320,   321,   322,     0,   323,   324,
+   325,   326,   327,   328,   329,   330,   331,     0,     0,     0,
+     0,     0,   332,     0,  1255,   318,   319,   320,   321,   322,
+     0,   323,   324,   325,   326,   327,   328,   329,   330,   331,
+     0,     0,     0,     0,     0,   332,     0,  1259,   318,   319,
+   320,   321,   322,     0,   323,   324,   325,   326,   327,   328,
+   329,   330,   331,     0,     0,     0,     0,     0,   332,     0,
+  1261,   318,   319,   320,   321,   322,     0,   323,   324,   325,
+   326,   327,   328,   329,   330,   331,     0,     0,     0,     0,
+     0,   332,     0,  1362,   318,   319,   320,   321,   322,     0,
+   323,   324,   325,   326,   327,   328,   329,   330,   331,     0,
+     0,     0,     0,     0,   332,     0,  1364,   318,   319,   320,
+   321,   322,     0,   323,   324,   325,   326,   327,   328,   329,
+   330,   331,     0,     0,     0,     0,     0,   332,     0,  1366,
+   318,   319,   320,   321,   322,     0,   323,   324,   325,   326,
+   327,   328,   329,   330,   331,     0,     0,     0,     0,     0,
+   332,     0,  1369,   318,   319,   320,   321,   322,     0,   323,
+   324,   325,   326,   327,   328,   329,   330,   331,     0,     0,
+     0,     0,     0,   332,     0,  1433,   318,   319,   320,   321,
+   322,     0,   323,   324,   325,   326,   327,   328,   329,   330,
+   331,     0,     0,     0,     0,     0,   332
 };
 
 static const short yycheck[] = {    18,
-    65,    66,     3,    18,    89,   373,     3,   309,     6,     4,
-   185,   710,   345,   188,  1262,     4,     6,     4,  1266,     5,
-     4,  1269,  1030,  1031,     4,    68,     4,     4,     4,    67,
-    73,     6,     5,    45,    85,    68,   211,     4,   213,     6,
-    73,     5,     7,    67,   163,   164,    67,  1132,    34,    35,
-    36,    37,    68,     6,    40,     6,   175,    73,     6,     6,
-   307,    34,    35,    36,    37,   163,   164,    40,     4,     6,
-    34,    35,    36,    37,     7,   175,    40,   175,     6,     4,
-   180,    76,    77,    78,    79,   163,   164,    76,    77,    78,
-    79,   163,   164,     6,     4,     5,   174,     6,   345,   163,
-   164,    52,  1205,   181,  1207,    52,    68,    68,   180,     6,
-   182,    73,    73,   132,   133,   134,   174,   181,   137,   138,
-   170,   171,   141,   174,    34,    35,    36,    37,   178,   148,
-    40,   150,   151,   152,  1219,   154,   174,   156,   157,   182,
-   159,     6,    68,   181,   174,   174,   845,    73,   174,   182,
-   174,   181,    88,    89,  1402,   181,   175,   176,  1406,  1046,
-   181,  1409,   174,    88,    89,   175,   182,    68,  1055,   174,
-   180,  1179,    73,   163,   164,  1062,    68,   196,   197,    68,
-   199,    73,   201,   181,    73,   204,   205,   182,   163,   164,
-    67,   174,   525,   182,   181,   181,  1444,   181,   174,   501,
-  1448,   181,  1450,   181,   181,   538,   170,   171,   181,   176,
-   163,   164,    44,    45,   178,    47,   149,   150,   151,   152,
-   182,   182,   397,    41,   174,    41,    44,    45,    44,    47,
-   249,   296,   297,   298,   299,   254,   255,   256,   257,   258,
+    65,    66,   158,    18,     4,    89,     3,   163,     3,   347,
+   375,   311,   720,     4,     6,   905,     4,     4,     7,     4,
+     4,     4,    45,     5,  1054,  1055,     6,    67,     6,    67,
+     5,     4,   188,     6,     4,    68,    85,   193,   194,    68,
+    73,    68,     6,     6,    73,     3,    73,    67,   174,  1159,
+   176,     6,    34,    35,    36,    37,     7,   309,    40,    34,
+    35,    36,    37,    68,     6,    40,   163,   164,    73,    68,
+    44,    45,    52,    47,    73,   163,   164,   174,    68,    39,
+    40,     6,    42,    73,   181,    76,    77,    78,    79,    76,
+    77,    78,    79,   181,   175,   347,     6,    52,   187,   180,
+  1230,   190,  1232,    68,  1234,   163,   164,   174,    73,   163,
+   164,     6,    68,   132,   133,   134,    68,    73,   137,   138,
+     6,    73,   141,   181,   213,   174,   215,   181,   174,   148,
+   176,   150,   151,   152,   174,   154,     6,   156,   157,  1249,
+   159,   181,    41,   181,     4,    44,   163,   164,   174,   182,
+   858,   174,   174,   182,   174,   182,   175,   176,   174,   181,
+   149,   150,   151,   152,   181,   184,   124,   125,   126,   127,
+   128,   129,   130,   131,     6,     7,  1206,   182,   174,   198,
+   199,   181,   201,   182,   203,   163,   164,   206,   207,   181,
+     6,   182,   182,   181,   532,   182,   181,   181,   181,   181,
+   163,   164,   174,   176,   174,    68,   181,   545,   508,   181,
+    73,    67,   172,   175,   174,   174,  1346,   182,   180,    49,
+   180,   163,   164,    45,   184,     7,   182,   174,    88,    89,
+   182,   174,   251,   298,   299,   300,   301,   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,   295,    49,   525,  1382,
-   979,   182,  1385,   174,  1387,   176,    45,   175,   307,   174,
-   182,   538,   180,   182,   309,   163,   164,   316,   317,   318,
+   289,   290,   291,   292,   293,   294,   295,   296,   297,    45,
+   532,    68,   174,  1413,     7,  1415,    73,  1417,     4,   997,
+   309,  1421,    68,   545,   254,   384,   311,    73,   174,   318,
    319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
-   329,   330,   180,   174,   182,   174,    68,     5,   337,   175,
-   339,    73,   181,  1426,   180,   344,   345,  1430,    41,  1432,
-   174,    44,    45,  1220,   353,   354,   355,  1224,   357,   358,
-   359,   360,   361,   362,   363,   174,    34,    35,    36,    37,
-     7,   174,    40,   163,   164,    45,   375,   376,   377,   378,
-   693,   163,   164,   174,   383,   176,   163,   164,   387,   388,
-   180,   372,   373,    45,   393,   372,   373,   175,   180,   174,
-   182,   176,   180,   402,   181,   174,   165,   166,   167,     3,
-     4,    39,    40,   726,   173,     9,    10,    11,    12,    13,
-    14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-    24,    25,    26,    27,    28,    29,    30,    31,    32,   163,
-   164,   163,   164,   756,   757,   758,   759,   175,   443,    47,
-   182,     8,   180,   158,   163,   164,   180,   502,   163,   181,
-   175,  1328,  1329,  1330,  1331,   180,   693,   174,  1335,   176,
-   174,   180,   176,   700,   163,   164,   174,     7,   176,   163,
-   164,   186,   181,   163,   164,   181,   191,   192,   163,   164,
-    45,   180,   174,     6,   176,   494,   180,     4,   497,   726,
-   180,   163,   164,     6,   503,   180,   501,  1186,   102,   103,
-   104,   105,   149,   150,   151,   152,     6,   174,   180,   176,
-     4,   163,   164,     4,  1391,  1392,   525,   526,  1395,   756,
-   757,   758,   759,   170,   171,   174,   535,   536,   180,   538,
-   174,   540,   541,   174,   172,   176,   174,   546,   174,   174,
-   176,   864,   180,     3,    57,   837,   838,   556,   557,    61,
-    62,    63,    64,   174,    66,   176,   565,     7,  1435,   163,
-   164,     6,    74,    75,   174,   169,   176,   174,   577,   176,
-   174,     4,   174,   177,   176,   179,   174,   181,   176,   634,
-     4,   174,   591,   176,   593,   594,   153,   154,   155,   156,
-   157,  1468,   159,   160,   161,   162,   163,   164,   165,   166,
-   167,   109,   110,   111,   112,   113,   173,    45,  1485,   149,
-   150,   151,   152,   174,   252,   182,   163,   164,   165,   166,
-   167,     5,   174,  1500,   176,   174,   173,   864,   174,   634,
-   170,   171,   174,   174,   176,   176,   174,     8,   178,   694,
-   153,   154,   155,   156,   157,   174,   159,   160,   161,   162,
-   163,   164,   165,   166,   167,   174,  1014,   176,     6,     7,
-   173,   670,   671,     6,   124,   125,   126,   127,   128,   129,
-   130,   131,   174,   174,   176,   684,   685,   686,   687,   688,
-   689,   690,     6,   176,   693,   178,    58,    59,   697,   170,
-   171,   700,   170,   171,   703,   176,   180,   178,   182,   149,
-   150,   151,   152,     4,   713,   156,   157,     6,   159,   160,
-   161,   162,   163,   164,   165,   166,   167,   726,     5,   728,
-   170,   171,   173,   180,   180,   182,   182,   174,   180,     6,
-   182,   174,   370,   371,   809,     6,     7,   159,   160,   161,
-   162,   163,   164,   165,   166,   167,   181,   756,   757,   758,
-   759,   173,   181,   762,   763,   174,   155,   156,   157,   768,
-   159,   160,   161,   162,   163,   164,   165,   166,   167,   778,
-   779,     6,   170,   171,   173,   180,     4,   182,   176,   174,
-   178,   496,   153,   154,   155,   156,   157,   181,   159,   160,
-   161,   162,   163,   164,   165,   166,   167,   170,   171,   180,
-   174,   182,   173,   176,   175,   178,   815,   816,   174,   174,
-   153,   154,   155,   156,   157,   174,   159,   160,   161,   162,
-   163,   164,   165,   166,   167,   174,   170,   171,   833,   180,
-   173,   182,   176,   838,   178,   181,   181,   846,   180,   176,
-   182,  1199,   180,   852,   182,   180,   180,   182,   182,     4,
-   180,     6,   182,   181,   180,   864,   182,   866,   180,   868,
-   182,   180,   180,   182,   182,   180,   180,   182,   182,   176,
-   176,     6,   181,   882,   883,   884,   153,   154,   155,   156,
-   157,   178,   159,   160,   161,   162,   163,   164,   165,   166,
-   167,    91,     6,   174,     6,     6,   173,   906,   907,   908,
-   174,   174,   174,     5,   174,   174,   174,   174,   174,   174,
-   174,   174,   174,   174,   174,   174,   971,   555,   153,   154,
+   329,   330,   331,   332,     8,   404,   174,   163,   164,   182,
+   339,     5,   341,   181,   175,   175,   174,   346,   347,   180,
+   180,  1461,     7,  1463,   180,  1465,   355,   356,   357,    45,
+   359,   360,   361,   362,   363,   364,   365,   503,    47,    68,
+    34,    35,    36,    37,    73,   174,    40,   176,   377,   378,
+   379,   380,   381,   382,   174,   703,   385,   149,   150,   151,
+   152,   390,    88,    89,   181,   394,   395,   374,   375,   374,
+   375,   400,   163,   164,     4,     5,   170,   171,   170,   171,
+   409,   163,   164,   163,   164,   182,   178,  1287,   736,   180,
+  1290,   182,   175,  1293,   181,   175,   182,   180,   180,  1070,
+   182,    45,   372,   373,    34,    35,    36,    37,  1079,     6,
+    40,   381,   165,   166,   167,  1086,   149,   150,   151,   152,
+   173,   769,   770,   771,   772,   450,    41,   163,   164,    44,
+    45,   163,   164,   174,   509,   176,     6,   170,   171,   170,
+   171,   703,     5,   175,   180,   176,   182,   178,   710,   153,
+   154,   155,   156,   157,     4,   159,   160,   161,   162,   163,
+   164,   165,   166,   167,   149,   150,   151,   152,   175,   173,
+     5,     4,   501,   180,   736,   504,   170,   171,   182,   163,
+   164,   510,     4,   508,   178,   170,   171,  1387,    41,   163,
+   164,    44,    45,   175,    47,  1213,   180,   174,   180,    34,
+    35,    36,    37,   532,   533,    40,   180,   769,   770,   771,
+   772,   163,   164,   542,   543,   174,   545,   176,   547,   548,
+   163,   164,    58,    59,   553,   170,   171,   174,   180,   877,
+   163,   164,   174,   178,   563,   564,  1436,   180,     6,  1439,
+   850,   851,  1442,   572,   176,  1445,   178,   180,   163,   164,
+   174,     4,   176,   163,   164,     4,   163,   164,   587,   174,
+   163,   164,   728,   729,     4,   731,   181,   733,   734,   644,
+   180,    45,   601,   180,   603,   604,   174,   180,  1478,  1250,
+  1480,   174,  1482,  1254,   109,   110,   111,   112,   113,   163,
+   164,   174,   562,   155,   156,   157,   174,   159,   160,   161,
+   162,   163,   164,   165,   166,   167,   180,   577,   163,   164,
+   174,   173,   176,   779,   780,   877,   174,   783,   176,   644,
+   174,     6,   170,   171,     6,   180,   163,   164,   176,   704,
+   178,     6,     7,   799,   800,   174,   170,   171,     6,   805,
+   806,   181,   176,   180,   178,   174,   812,   176,   814,     5,
+   174,   680,   681,   170,   171,   174,   174,  1032,   176,   176,
+     8,   178,   174,   174,   176,   694,   695,   696,   697,   698,
+   699,   700,    57,   174,   703,   176,   174,   174,   707,   176,
+   174,   710,   176,     4,   713,  1356,  1357,  1358,  1359,   174,
+   181,   176,  1363,   174,   723,   176,   174,    61,    62,    63,
+    64,   181,    66,   869,   174,   871,   176,   736,   174,   738,
+    74,    75,   174,   174,   176,   176,   882,   883,   884,   174,
+   174,   887,   888,   889,   890,   891,   892,   893,   822,   174,
+   159,   160,   161,   162,   163,   164,   165,   166,   167,   181,
+   769,   770,   771,   772,   173,   181,   775,   776,   174,   174,
+   176,   176,   781,   181,  1425,  1426,   176,   727,  1429,   180,
+     6,   182,   791,   792,   180,   180,   182,   182,   153,   154,
+   155,   156,   157,   176,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,   180,   180,   182,   182,   180,   173,   182,
+   176,   178,   762,   763,   764,     4,    91,     6,  1469,   828,
+   829,   180,   180,   182,   182,   153,   154,   155,   156,   157,
+   181,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     6,   846,   988,   793,     6,   173,   851,   175,  1499,   180,
+   859,   182,   802,   180,   174,   182,   865,   163,   164,   165,
+   166,   167,     6,   180,  1515,   182,     6,   173,   877,   174,
+   879,  1226,   881,     5,     4,     6,   180,   174,   182,  1530,
+   180,   180,   182,   182,   180,   174,   895,   896,   897,   180,
+   180,   182,   182,   902,   174,   180,  1042,   182,    41,    42,
+    43,    44,    45,    46,    47,    48,   180,    50,   182,    52,
+    53,  1057,    55,    56,   174,   924,   925,   926,  1064,   174,
+   174,   174,   174,   174,   174,   174,   174,   174,   174,    72,
+   174,   174,   174,   174,   989,   174,   174,  1083,    81,    82,
+    83,   174,   174,   174,   174,   174,   174,   174,     5,   174,
+   174,   173,   902,  1099,   175,     7,    99,   180,   178,     7,
+   969,   966,   176,   181,     7,   974,     7,   175,     6,    86,
+     7,     7,    88,  1028,   181,     5,   180,     6,     5,     5,
+     5,   990,     5,     5,     5,     5,     5,   153,   154,   155,
+   156,   157,     5,   159,   160,   161,   162,   163,   164,   165,
+   166,   167,     5,     5,     5,     5,     5,   173,     5,  1018,
+  1019,     6,     5,     5,     5,     5,     5,     5,  1092,  1028,
+     5,   142,   153,   154,   155,   156,   157,     5,   159,   160,
+   161,   162,   163,   164,   165,   166,   167,     5,     5,   182,
+  1049,  1050,   173,     5,     3,  1032,     6,  1032,     5,     5,
+     5,   175,  1061,  1003,  1063,  1005,   175,   180,     6,     4,
+     6,   181,   177,     7,  1073,     7,     7,     7,     7,     7,
+     7,  1080,  1081,  1082,   178,   182,   182,     7,  1087,   181,
+     7,   174,  1091,  1033,     7,  1035,   178,  1037,  1097,  1098,
+   180,  1237,   180,   180,   180,   180,   180,  1243,   180,   180,
+   180,  1247,   180,   180,  1113,   180,   180,   180,   180,   180,
+   180,  1120,   180,   180,   180,   180,  1262,   180,   180,   180,
+   180,   180,   180,     5,   153,   154,   155,   156,   157,  1138,
+   159,   160,   161,   162,   163,   164,   165,   166,   167,   181,
+   180,   180,  1151,   175,   173,   180,   180,     6,     4,     6,
+   174,     6,     6,   181,     7,  1164,  1235,  1166,   153,   154,
    155,   156,   157,   174,   159,   160,   161,   162,   163,   164,
-   165,   166,   167,   174,   174,   174,   174,   174,   173,   175,
-   174,     6,   951,   948,   174,   174,     4,   956,   174,   174,
-   174,   174,   174,   174,     5,  1010,   173,     7,   178,     7,
-     3,     4,   180,   972,   180,   176,     9,    10,    11,    12,
-    13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-    23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-   181,  1000,  1001,  1068,     7,     7,   175,     6,    86,     7,
-     7,  1010,    88,   718,   719,   181,   721,     5,   723,   724,
-     5,     5,     5,     5,     5,     5,  1025,  1026,     5,     5,
-     5,     5,     5,  1014,   142,     6,     5,  1014,  1037,     5,
-  1039,     5,     5,     5,     5,     5,     5,     5,     5,     5,
-  1049,     5,     5,     5,     5,     3,     5,  1056,  1057,  1058,
-     5,   766,   767,     6,  1063,   770,     5,   180,  1067,   102,
-   103,   104,   105,   180,  1073,  1074,   175,   175,     6,     4,
-   177,   786,   787,     6,   178,     7,     7,   792,   793,   717,
-  1089,     7,     7,     7,   799,     7,   801,  1096,   153,   154,
-   155,   156,   157,     7,   159,   160,   161,   162,   163,   164,
-   165,   166,   167,   182,   182,  1114,   181,   181,   173,     7,
-     7,   174,     7,   180,   752,   753,   754,   178,   180,     5,
-   163,   164,   174,   180,   180,   180,   169,   180,  1137,   175,
-  1139,   174,   174,   180,   177,   180,   179,   181,   181,     6,
-   180,   856,   780,   858,   180,   180,   180,   180,   180,   180,
-   180,   789,   180,   180,   869,   870,   871,   180,   180,   874,
-   875,   876,   877,   878,   879,   880,  1175,     6,     4,   180,
-   180,  1180,   153,   154,   155,   156,   157,   180,   159,   160,
-   161,   162,   163,   164,   165,   166,   167,     6,     6,   177,
-     6,   180,   173,  1202,     7,  1204,   176,  1206,   180,  1208,
-  1209,     6,   180,   180,     7,  1214,     7,     7,  1199,     4,
-     8,     7,  1199,  1222,     7,   180,     7,     7,     7,     7,
-   180,  1230,     7,   180,   180,     7,  1235,   181,     7,  1238,
-     6,     6,     6,  1242,  1243,     6,     4,     7,     7,     3,
-     3,  1250,     3,     3,  1253,   165,  1255,  1256,  1257,     3,
-     3,     3,     3,     4,     3,   970,     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,     3,   153,   154,   155,   156,
-   157,  1300,   159,   160,   161,   162,   163,   164,   165,   166,
-   167,     5,  1311,     5,     3,     3,   173,   181,  1317,     6,
-     4,  1320,   174,     6,   175,   175,     7,     6,  1033,   178,
-     6,     6,     6,   181,     6,  1040,     6,   181,    87,   180,
-   180,   175,   180,  1342,   175,  1344,     6,   180,   175,     6,
-   180,   175,   180,  1398,  1059,   180,   175,   985,   180,   987,
-   180,   102,   103,   104,   105,   153,   154,   155,   156,   157,
-  1075,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-   180,   180,   180,   180,   180,   173,   175,  1015,   180,  1017,
-     4,  1019,     3,     4,  1439,   177,  1441,     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,   163,   164,   180,  1470,   178,   175,   169,     6,
-    41,     6,     6,   174,   180,  1434,   177,     6,   179,     6,
-   181,     6,   180,     6,     6,   180,   180,     6,     6,     6,
-    61,    62,    63,    64,    65,    66,     6,     6,     6,     6,
-     6,     6,     6,    74,    75,     6,    87,  1466,  1467,     7,
-     3,     6,     3,     7,     6,   165,     6,     6,     3,     6,
-     3,   181,     6,  1482,     6,     3,     6,     3,     3,     3,
-   181,   102,   103,   104,   105,     6,     4,     6,   178,     6,
-     6,     6,     6,   181,   177,   182,    84,     6,  1213,   175,
-   181,   180,  1217,   181,   181,   180,   180,   175,   180,   180,
-   175,   175,     3,     4,   180,   175,   175,  1232,     9,    10,
-    11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-    21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-    31,    32,   163,   164,     6,   180,   175,   180,   169,   175,
-     6,    89,     3,   174,     6,     3,    87,     6,   179,     6,
-   181,     6,     6,     6,  1202,     6,  1204,     6,  1206,   153,
-   154,   155,   156,   157,     3,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,     6,     6,     5,   181,     6,   173,
-     5,   182,     6,   182,   175,   181,     6,   180,  1313,   181,
-   180,   175,   180,     6,   180,   175,     6,     6,     6,  1324,
-  1325,   102,   103,   104,   105,   180,   180,   180,  1256,     6,
-     6,     6,     6,     6,     3,     4,     6,   180,     6,     6,
+   165,   166,   167,   177,     6,     4,     7,     7,   173,   156,
+   157,     7,   159,   160,   161,   162,   163,   164,   165,   166,
+   167,     7,   176,  1202,     7,     7,   173,     7,  1207,     7,
+     7,     7,  1348,     7,     7,     6,  1352,  1353,     6,     6,
+     6,     4,     7,     7,     3,     3,     3,     3,   165,     3,
+  1229,     3,  1231,     3,  1233,     3,     3,     3,     3,  1238,
+  1239,     3,     3,     3,     7,  1244,     5,     5,     3,  1226,
+     6,  1226,     3,  1252,     6,     4,     6,   181,   174,   178,
+   175,  1260,     6,   175,     6,     6,  1265,     6,     6,  1268,
+   181,     6,   181,  1272,  1273,     6,     6,    87,  1347,   181,
+   180,  1280,   180,   175,  1283,   180,     6,  1423,   175,  1229,
+   180,  1231,   175,  1233,     3,     4,   180,   175,   180,   180,
      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,     6,     6,     5,     5,   181,
-     6,   181,     6,   175,     6,     6,     6,   175,   181,  1384,
-   180,   182,   163,   164,  1389,   180,   180,   180,   169,   180,
-    84,   181,   180,   174,     6,     5,   181,     6,   179,     5,
-   181,   153,   154,   155,   156,   157,   181,   159,   160,   161,
-   162,   163,   164,   165,   166,   167,   181,   180,   182,   181,
-   180,   173,  1427,   181,   175,   175,   182,     6,     6,     6,
-     6,  1436,     6,   102,   103,   104,   105,    84,     6,     6,
-     6,   153,   154,   155,   156,   157,     6,   159,   160,   161,
-   162,   163,   164,   165,   166,   167,   182,   181,   180,   180,
-     6,   173,     6,     6,  1469,     6,     6,   180,     6,   175,
-   180,     6,     6,   180,   175,     6,     0,   180,   180,  1484,
-     0,   180,   636,  1300,     3,     3,  1491,   975,    -1,    -1,
-    -1,  1496,    -1,  1498,   163,   164,    -1,    -1,    -1,    -1,
-   169,    -1,    -1,    -1,    -1,   174,    -1,     3,     4,     5,
-   179,     7,   181,     9,    10,    11,    12,    13,    14,    15,
+    29,    30,    31,    32,   175,   180,   180,   180,  1327,     6,
+   180,     6,    41,   175,  1470,     4,   175,     7,  1337,   180,
+   180,  1340,   180,   180,  1343,   180,   180,   180,   180,   180,
+   178,     6,    61,    62,    63,    64,    65,    66,     6,     6,
+   177,     6,     6,     6,  1500,    74,    75,     6,     6,     6,
+     6,  1370,     6,  1372,     6,     6,     6,     6,  1514,     6,
+     6,     6,     6,    87,     3,  1521,     6,  1432,     6,     3,
+  1526,     6,  1528,   102,   103,   104,   105,   153,   154,   155,
+   156,   157,     6,   159,   160,   161,   162,   163,   164,   165,
+   166,   167,   153,   154,   155,   156,   157,   173,   159,   160,
+   161,   162,   163,   164,   165,   166,   167,     6,  1473,   165,
+  1475,     3,   173,   153,   154,   155,   156,   157,     6,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,     3,     6,
+     6,     3,     6,   173,   163,   164,  1501,     3,     3,     3,
+   169,   178,   181,     6,     6,   174,     4,     3,     4,  1468,
+   179,     6,   181,     9,    10,    11,    12,    13,    14,    15,
     16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-    26,    27,    28,    29,    30,    31,    32,     6,    34,    35,
-    36,    37,     3,     4,    40,    -1,    -1,    -1,     9,    10,
-    11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-    21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-    31,    32,    -1,    -1,    -1,   153,   154,   155,   156,   157,
-    41,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-    -1,    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,    -1,
-    61,    62,    63,    64,    65,    66,   102,   103,   104,   105,
-     3,     4,    -1,    74,    75,    -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,   102,   103,   104,   105,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   149,   150,   151,   152,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   163,   164,    -1,
-    -1,    -1,     8,   169,   170,   171,    -1,    -1,   174,    -1,
-   176,    -1,   178,   179,   153,   154,   155,   156,   157,    -1,
-   159,   160,   161,   162,   163,   164,   165,   166,   167,     8,
-    -1,    -1,   163,   164,   173,    -1,    -1,    -1,   169,   102,
-   103,   104,   105,   174,     3,     4,     5,    -1,   179,    -1,
+    26,    27,    28,    29,    30,    31,    32,     6,  1497,  1498,
+     6,   177,     7,     6,     6,     6,    84,   181,     3,     4,
+   182,   175,   180,  1512,     9,    10,    11,    12,    13,    14,
+    15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+    25,    26,    27,    28,    29,    30,    31,    32,   153,   154,
+   155,   156,   157,     6,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,   181,    87,    89,     6,   180,   173,   181,
+   181,     3,   175,   180,     3,     4,   102,   103,   104,   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,    -1,    34,    35,    36,    37,     8,
-    -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,     8,    -1,    -1,    -1,    -1,    -1,
-   163,   164,    -1,    -1,    -1,    -1,   169,    -1,    -1,    -1,
-    -1,   174,     3,     4,    -1,    -1,   179,    -1,     9,    10,
+    29,    30,    31,    32,   181,   181,   180,   180,   180,   175,
+   175,   175,   175,   180,   175,   175,     6,   102,   103,   104,
+   105,   153,   154,   155,   156,   157,   180,   159,   160,   161,
+   162,   163,   164,   165,   166,   167,     6,   163,   164,   180,
+     3,   173,     6,   169,     6,     6,     6,     6,   174,     6,
+     3,   177,     6,   179,     5,   181,     6,   153,   154,   155,
+   156,   157,   181,   159,   160,   161,   162,   163,   164,   165,
+   166,   167,     5,   102,   103,   104,   105,   173,   163,   164,
+   182,   181,     6,   181,   169,   182,   180,   175,     6,   174,
+   180,   180,   177,   180,   179,   175,   181,     3,     4,   180,
+   175,   180,   180,     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,     6,     6,
+     6,     6,     6,     6,   163,   164,     6,     6,     6,     6,
+   169,     6,     6,     6,     6,   174,     6,     5,   177,     5,
+   179,   181,   181,     3,     4,   181,   181,   180,   182,     9,
+    10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+    20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+    30,    31,    32,   182,   180,   180,   175,   175,   180,   180,
+     6,     6,     6,     6,   181,   180,   102,   103,   104,   105,
+     3,     4,     5,    84,     7,     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,
+     6,    34,    35,    36,    37,     6,     5,    40,     6,     5,
+   181,   181,   181,   180,   182,   181,   180,   175,   175,   181,
+     6,   182,   102,   103,   104,   105,     6,   163,   164,     6,
+    84,     6,     6,   169,     6,     8,     6,   181,   174,   180,
+   180,     6,     6,   179,     6,   181,   153,   154,   155,   156,
+   157,     6,   159,   160,   161,   162,   163,   164,   165,   166,
+   167,   180,   180,     6,   180,   175,   173,     6,     6,   102,
+   103,   104,   105,     6,     0,     0,     3,  1327,   180,   180,
+   646,     3,   993,   163,   164,    -1,    -1,    -1,   175,   169,
+    -1,   180,    -1,    -1,   174,    -1,    -1,    -1,    -1,   179,
+    -1,   181,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   149,   150,   151,   152,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   163,   164,    -1,    -1,    -1,    -1,   169,   170,   171,    -1,
+    -1,   174,    -1,   176,     8,   178,   179,     3,     4,    -1,
+    -1,    -1,    -1,     9,    10,    11,    12,    13,    14,    15,
+    16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+    26,    27,    28,    29,    30,    31,    32,    -1,    -1,     8,
+   153,   154,   155,   156,   157,    41,   159,   160,   161,   162,
+   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,
+   173,    -1,    -1,    -1,    -1,    61,    62,    63,    64,    65,
+    66,    -1,     8,    -1,    -1,     3,     4,    -1,    74,    75,
+    -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,   102,   103,   104,   105,
+     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,    37,    -1,    -1,    40,    -1,   153,
+   154,   155,   156,   157,    -1,   159,   160,   161,   162,   163,
+   164,   165,   166,   167,    -1,    -1,    -1,   163,   164,   173,
+     8,    -1,    -1,   169,   102,   103,   104,   105,   174,    -1,
+    -1,    -1,    -1,   179,   153,   154,   155,   156,   157,    -1,
+   159,   160,   161,   162,   163,   164,   165,   166,   167,    -1,
+    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,    -1,   102,
+   103,   104,   105,    -1,    -1,    -1,    -1,   153,   154,   155,
+   156,   157,    -1,   159,   160,   161,   162,   163,   164,   165,
+   166,   167,    -1,    -1,    -1,   163,   164,   173,    -1,    -1,
+    -1,   169,    -1,    -1,    -1,    -1,   174,    -1,    -1,    -1,
+    -1,   179,    -1,    -1,    -1,   153,   154,   155,   156,   157,
+    -1,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+   163,   164,    -1,    -1,    -1,   173,   169,    -1,    -1,    -1,
+    -1,   174,     3,     4,   182,    -1,   179,    -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,   102,   103,   104,   105,   153,   154,   155,
-   156,   157,    -1,   159,   160,   161,   162,   163,   164,   165,
-   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,    -1,
-    -1,    -1,    -1,    -1,   153,   154,   155,   156,   157,    -1,
-   159,   160,   161,   162,   163,   164,   165,   166,   167,   153,
-   154,   155,   156,   157,   173,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,   163,   164,    -1,    -1,    -1,   173,
-   169,   102,   103,   104,   105,   174,   180,    -1,   182,    -1,
-   179,    -1,    -1,    -1,   153,   154,   155,   156,   157,    -1,
-   159,   160,   161,   162,   163,   164,   165,   166,   167,   153,
-   154,   155,   156,   157,   173,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,   153,   154,   155,   156,   157,   173,
-   159,   160,   161,   162,   163,   164,   165,   166,   167,    -1,
-    -1,    -1,   163,   164,   173,    -1,   175,    -1,   169,    -1,
-    -1,   180,    -1,   174,    -1,    -1,    -1,    -1,   179,    41,
-    42,    43,    44,    45,    46,    47,    48,    -1,    50,    -1,
-    52,    53,    -1,    55,    56,    -1,    -1,    -1,    -1,    -1,
-    41,    42,    43,    44,    45,    46,    47,    48,    -1,    50,
-    72,    52,    53,    -1,    55,    56,    -1,    -1,    -1,    81,
-    82,    83,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    72,    -1,    -1,    -1,    -1,    -1,    99,    -1,    -1,
-    81,    82,    83,    -1,    -1,    41,    42,    43,    44,    45,
-    46,    47,    48,    -1,    50,    -1,    52,    53,    99,    55,
+    31,    32,    -1,    -1,    -1,   153,   154,   155,   156,   157,
+    -1,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+    -1,    -1,    -1,    -1,    -1,   173,    41,    42,    43,    44,
+    45,    46,    47,    48,    -1,    50,    -1,    52,    53,    -1,
+    55,    56,    -1,    -1,    -1,    -1,    -1,    41,    42,    43,
+    44,    45,    46,    47,    48,    -1,    50,    72,    52,    53,
+    -1,    55,    56,    -1,    -1,    -1,    81,    82,    83,    -1,
+    -1,   102,   103,   104,   105,    -1,    -1,    -1,    72,    -1,
+    -1,    -1,    -1,    -1,    99,    -1,    -1,    81,    82,    83,
+    -1,    -1,    -1,    -1,    -1,    41,    42,    43,    44,    45,
+    46,    47,    48,    -1,    50,    99,    52,    53,    -1,    55,
     56,    -1,    -1,    -1,    -1,    -1,    41,    42,    43,    44,
     45,    46,    47,    48,    -1,    50,    72,    52,    53,    -1,
-    55,    56,    -1,    -1,    -1,    81,    82,    83,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,
+    55,    56,   163,   164,    -1,    81,    82,    83,   169,    -1,
+    -1,    -1,    -1,   174,    -1,    -1,    -1,    72,   179,    -1,
     -1,    -1,    -1,    99,    -1,    -1,    81,    82,    83,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   182,    -1,    -1,    -1,    99,    41,    42,    43,    44,    45,
-    46,    47,    48,    -1,    50,    -1,    52,    53,    -1,    55,
-    56,   182,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     0,
-     1,    -1,     3,     4,    -1,    -1,    72,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    81,    82,    83,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    33,    99,    -1,    -1,   182,    38,    39,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   182,    -1,    -1,
+    -1,    -1,    -1,    -1,    99,    41,    42,    43,    44,    45,
+    46,    47,    48,    -1,    50,    -1,    52,    53,   182,    55,
+    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    41,    42,
+    43,    44,    45,    46,    47,    48,    72,    50,    -1,    52,
+    53,    -1,    55,    56,    -1,    81,    82,    83,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    72,
+    -1,    -1,    -1,    99,    -1,    -1,   182,    -1,    81,    82,
+    83,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    99,   182,    -1,    41,
+    42,    43,    44,    45,    46,    47,    48,    -1,    50,    -1,
+    52,    53,    -1,    55,    56,    -1,    -1,    -1,    -1,    -1,
+     0,     1,    -1,     3,     4,    -1,    -1,    -1,    -1,    -1,
+    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    81,
+    82,    83,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    33,    -1,    -1,   182,    99,    38,    39,
+    -1,    41,    42,    43,    44,    45,    46,    47,    48,    -1,
+    50,    51,    52,    53,    54,    55,    56,    -1,    -1,   182,
+    60,    61,    62,    63,    64,    65,    66,    -1,    68,    69,
+    70,    71,    72,    44,    74,    75,    -1,    -1,    -1,    -1,
+    80,    81,    82,    83,    -1,    -1,    -1,    -1,    88,    -1,
+    90,    -1,    92,    93,    94,    95,    96,    97,    98,    99,
+   100,   101,    -1,   153,   154,   155,   156,   157,    -1,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
+   182,    -1,    -1,   173,   124,   125,   126,   127,   128,   129,
+   130,   131,   182,    -1,    -1,   106,   107,   108,    -1,    -1,
+    -1,    -1,    -1,   114,   115,   116,   117,   118,   119,   120,
+   121,   122,   123,     4,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+   141,    -1,   143,   144,   145,   146,   147,   148,    -1,    -1,
+    -1,    -1,    33,    -1,    -1,    -1,    -1,    38,    39,    -1,
     41,    42,    43,    44,    45,    46,    47,    48,    -1,    50,
-    51,    52,    53,    54,    55,    56,    -1,   182,    -1,    60,
+    51,    52,    53,    54,    55,    56,    -1,    -1,    -1,    60,
     61,    62,    63,    64,    65,    66,    -1,    68,    69,    70,
-    71,    72,    44,    74,    75,    -1,    -1,    -1,    -1,    80,
+    71,    72,    -1,    74,    75,    -1,    -1,    -1,    -1,    80,
     81,    82,    83,    -1,    -1,    -1,    -1,    88,    -1,    90,
     -1,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-   101,   153,   154,   155,   156,   157,    -1,   159,   160,   161,
-   162,   163,   164,   165,   166,   167,   182,    -1,    -1,    -1,
-    -1,   173,    -1,   124,   125,   126,   127,   128,   129,   130,
-   131,    -1,    -1,    -1,   106,   107,   108,    -1,    -1,    -1,
-    -1,    -1,   114,   115,   116,   117,   118,   119,   120,   121,
-   122,   123,     4,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-    -1,   143,   144,   145,   146,   147,   148,    -1,    -1,    -1,
-    -1,    33,    -1,    -1,    -1,    -1,    38,    39,    -1,    41,
-    42,    43,    44,    45,    46,    47,    48,    -1,    50,    51,
-    52,    53,    54,    55,    56,    -1,    -1,    -1,    60,    61,
-    62,    63,    64,    65,    66,    -1,    68,    69,    70,    71,
-    72,    -1,    74,    75,    -1,    -1,    -1,    -1,    80,    81,
-    82,    83,    -1,    -1,    -1,    -1,    88,    -1,    90,    -1,
-    92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-    41,    42,    43,    44,    45,    46,    47,    48,    -1,    50,
-    -1,    52,    53,    -1,    55,    56,   153,   154,   155,   156,
-   157,    -1,   159,   160,   161,   162,   163,   164,   165,   166,
-   167,    72,    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,
-    81,    82,    83,   180,    -1,   182,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   153,   154,   155,   156,   157,    99,   159,
-   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
-    -1,    -1,    -1,   173,    -1,    -1,    -1,    -1,    -1,    -1,
-   180,    -1,   182,   153,   154,   155,   156,   157,    -1,   159,
-   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
-    -1,    -1,    -1,   173,    -1,    -1,    -1,   153,   154,   155,
-   156,   157,   182,   159,   160,   161,   162,   163,   164,   165,
-   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,    -1,
-    -1,   153,   154,   155,   156,   157,   182,   159,   160,   161,
-   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,
-    -1,   173,    -1,    -1,    -1,   153,   154,   155,   156,   157,
-   182,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-    -1,    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,   153,
-   154,   155,   156,   157,   182,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
-    -1,    -1,    -1,   153,   154,   155,   156,   157,   182,   159,
-   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
-    -1,    -1,    -1,   173,    -1,    -1,    -1,   153,   154,   155,
-   156,   157,   182,   159,   160,   161,   162,   163,   164,   165,
-   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,    -1,
-    -1,   153,   154,   155,   156,   157,   182,   159,   160,   161,
-   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,
-    -1,   173,    -1,    -1,    -1,   153,   154,   155,   156,   157,
-   182,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-    -1,    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,   153,
-   154,   155,   156,   157,   182,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
-    -1,    -1,    -1,   153,   154,   155,   156,   157,   182,   159,
-   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
-    -1,    -1,    -1,   173,    -1,    -1,    -1,   153,   154,   155,
-   156,   157,   182,   159,   160,   161,   162,   163,   164,   165,
-   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,    -1,
-    -1,   153,   154,   155,   156,   157,   182,   159,   160,   161,
-   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,
-    -1,   173,    -1,    -1,    -1,   153,   154,   155,   156,   157,
-   182,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-    -1,    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,   153,
-   154,   155,   156,   157,   182,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
-    -1,    -1,    -1,   153,   154,   155,   156,   157,   182,   159,
-   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
-    -1,    -1,    -1,   173,    -1,    -1,    -1,   153,   154,   155,
-   156,   157,   182,   159,   160,   161,   162,   163,   164,   165,
-   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,    -1,
-    -1,   153,   154,   155,   156,   157,   182,   159,   160,   161,
-   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,
-    -1,   173,    -1,    -1,    -1,   153,   154,   155,   156,   157,
-   182,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-    -1,    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,   153,
-   154,   155,   156,   157,   182,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
-    -1,    -1,    -1,   153,   154,   155,   156,   157,   182,   159,
-   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
-    -1,    -1,    -1,   173,    -1,   153,   154,   155,   156,   157,
-   180,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-    -1,    -1,    -1,    -1,    -1,   173,    -1,   153,   154,   155,
-   156,   157,   180,   159,   160,   161,   162,   163,   164,   165,
-   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,   153,
-   154,   155,   156,   157,   180,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
-    -1,   153,   154,   155,   156,   157,   180,   159,   160,   161,
-   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,
-    -1,   173,    -1,   153,   154,   155,   156,   157,   180,   159,
-   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
-    -1,    -1,    -1,   173,    -1,   153,   154,   155,   156,   157,
-   180,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-    -1,    -1,    -1,    -1,    -1,   173,    -1,   153,   154,   155,
-   156,   157,   180,   159,   160,   161,   162,   163,   164,   165,
-   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,   153,
-   154,   155,   156,   157,   180,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
-    -1,   153,   154,   155,   156,   157,   180,   159,   160,   161,
-   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,
-    -1,   173,    -1,   153,   154,   155,   156,   157,   180,   159,
-   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
-    -1,    -1,    -1,   173,    -1,   153,   154,   155,   156,   157,
-   180,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-    -1,    -1,    -1,    -1,    -1,   173,    -1,   153,   154,   155,
-   156,   157,   180,   159,   160,   161,   162,   163,   164,   165,
-   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,   153,
-   154,   155,   156,   157,   180,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
-    -1,   153,   154,   155,   156,   157,   180,   159,   160,   161,
-   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,
-    -1,   173,    -1,   153,   154,   155,   156,   157,   180,   159,
-   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
-    -1,    -1,    -1,   173,    -1,   153,   154,   155,   156,   157,
-   180,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-    -1,    -1,    -1,    -1,    -1,   173,    -1,   153,   154,   155,
-   156,   157,   180,   159,   160,   161,   162,   163,   164,   165,
-   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,   153,
-   154,   155,   156,   157,   180,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
-    -1,   153,   154,   155,   156,   157,   180,   159,   160,   161,
-   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,
-    -1,   173,    -1,   153,   154,   155,   156,   157,   180,   159,
-   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
-    -1,    -1,    -1,   173,    -1,   153,   154,   155,   156,   157,
-   180,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-    -1,    -1,    -1,    -1,    -1,   173,    -1,   153,   154,   155,
-   156,   157,   180,   159,   160,   161,   162,   163,   164,   165,
-   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,   153,
-   154,   155,   156,   157,   180,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
-    -1,   153,   154,   155,   156,   157,   180,   159,   160,   161,
-   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,
-    -1,   173,    -1,   153,   154,   155,   156,   157,   180,   159,
-   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
-    -1,    -1,    -1,   173,    -1,   153,   154,   155,   156,   157,
-   180,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-    -1,    -1,    -1,    -1,    -1,   173,    -1,   153,   154,   155,
-   156,   157,   180,   159,   160,   161,   162,   163,   164,   165,
-   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,   153,
-   154,   155,   156,   157,   180,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
-    -1,   153,   154,   155,   156,   157,   180,   159,   160,   161,
-   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,
-    -1,   173,    -1,   153,   154,   155,   156,   157,   180,   159,
-   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
-    -1,    -1,    -1,   173,    -1,   153,   154,   155,   156,   157,
-   180,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-    -1,    -1,    -1,    -1,    -1,   173,    -1,   153,   154,   155,
-   156,   157,   180,   159,   160,   161,   162,   163,   164,   165,
-   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,   153,
-   154,   155,   156,   157,   180,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
-    -1,   153,   154,   155,   156,   157,   180,   159,   160,   161,
-   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,
-    -1,   173,    -1,   153,   154,   155,   156,   157,   180,   159,
-   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
-    -1,    -1,    -1,   173,    -1,   153,   154,   155,   156,   157,
-   180,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-    -1,    -1,    -1,    -1,    -1,   173,    -1,   153,   154,   155,
-   156,   157,   180,   159,   160,   161,   162,   163,   164,   165,
-   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,   153,
-   154,   155,   156,   157,   180,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
-    -1,   153,   154,   155,   156,   157,   180,   159,   160,   161,
-   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,
-    -1,   173,    -1,   153,   154,   155,   156,   157,   180,   159,
-   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
-    -1,    -1,    -1,   173,    -1,   153,   154,   155,   156,   157,
-   180,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-    -1,    -1,    -1,    -1,    -1,   173,    -1,   153,   154,   155,
-   156,   157,   180,   159,   160,   161,   162,   163,   164,   165,
-   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,   153,
-   154,   155,   156,   157,   180,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
-    -1,    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,
+   101,    41,    42,    43,    44,    45,    46,    47,    48,    -1,
+    50,    -1,    52,    53,    -1,    55,    56,   153,   154,   155,
+   156,   157,    -1,   159,   160,   161,   162,   163,   164,   165,
+   166,   167,    72,    -1,    -1,    -1,    -1,   173,    -1,    -1,
+    -1,    81,    82,    83,   180,    -1,   182,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   153,   154,   155,   156,   157,    99,
    159,   160,   161,   162,   163,   164,   165,   166,   167,    -1,
-    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,
-   154,   155,   156,   157,    -1,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
-    -1,    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,
+    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,    -1,    -1,
+    -1,   180,    -1,   182,   153,   154,   155,   156,   157,    -1,
    159,   160,   161,   162,   163,   164,   165,   166,   167,    -1,
-    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,
-   154,   155,   156,   157,    -1,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
-    -1,    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,
+    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,    -1,    -1,
+    -1,   180,    -1,   182,   153,   154,   155,   156,   157,    -1,
    159,   160,   161,   162,   163,   164,   165,   166,   167,    -1,
-    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,
-   154,   155,   156,   157,    -1,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
-    -1,    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,
+    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,   153,   154,
+   155,   156,   157,   182,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
+    -1,    -1,   153,   154,   155,   156,   157,   182,   159,   160,
+   161,   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,
+    -1,    -1,   173,    -1,    -1,    -1,   153,   154,   155,   156,
+   157,   182,   159,   160,   161,   162,   163,   164,   165,   166,
+   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,
+   153,   154,   155,   156,   157,   182,   159,   160,   161,   162,
+   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,
+   173,    -1,    -1,    -1,   153,   154,   155,   156,   157,   182,
    159,   160,   161,   162,   163,   164,   165,   166,   167,    -1,
-    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,
-   154,   155,   156,   157,    -1,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
-    -1,    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,
+    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,   153,   154,
+   155,   156,   157,   182,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
+    -1,    -1,   153,   154,   155,   156,   157,   182,   159,   160,
+   161,   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,
+    -1,    -1,   173,    -1,    -1,    -1,   153,   154,   155,   156,
+   157,   182,   159,   160,   161,   162,   163,   164,   165,   166,
+   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,
+   153,   154,   155,   156,   157,   182,   159,   160,   161,   162,
+   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,
+   173,    -1,    -1,    -1,   153,   154,   155,   156,   157,   182,
    159,   160,   161,   162,   163,   164,   165,   166,   167,    -1,
-    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,
-   154,   155,   156,   157,    -1,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
-    -1,    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,
+    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,   153,   154,
+   155,   156,   157,   182,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
+    -1,    -1,   153,   154,   155,   156,   157,   182,   159,   160,
+   161,   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,
+    -1,    -1,   173,    -1,    -1,    -1,   153,   154,   155,   156,
+   157,   182,   159,   160,   161,   162,   163,   164,   165,   166,
+   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,
+   153,   154,   155,   156,   157,   182,   159,   160,   161,   162,
+   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,
+   173,    -1,    -1,    -1,   153,   154,   155,   156,   157,   182,
    159,   160,   161,   162,   163,   164,   165,   166,   167,    -1,
-    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,
-   154,   155,   156,   157,    -1,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
-    -1,    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,
+    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,   153,   154,
+   155,   156,   157,   182,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
+    -1,    -1,   153,   154,   155,   156,   157,   182,   159,   160,
+   161,   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,
+    -1,    -1,   173,    -1,    -1,    -1,   153,   154,   155,   156,
+   157,   182,   159,   160,   161,   162,   163,   164,   165,   166,
+   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,
+   153,   154,   155,   156,   157,   182,   159,   160,   161,   162,
+   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,
+   173,    -1,    -1,    -1,   153,   154,   155,   156,   157,   182,
    159,   160,   161,   162,   163,   164,   165,   166,   167,    -1,
-    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,
-   154,   155,   156,   157,    -1,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
-    -1,    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,
+    -1,    -1,    -1,    -1,   173,    -1,   175,    -1,    -1,    -1,
+    -1,   180,   153,   154,   155,   156,   157,    -1,   159,   160,
+   161,   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,
+    -1,    -1,   173,    -1,   153,   154,   155,   156,   157,   180,
    159,   160,   161,   162,   163,   164,   165,   166,   167,    -1,
-    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,
-   154,   155,   156,   157,    -1,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
-    -1,    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,
+    -1,    -1,    -1,    -1,   173,    -1,   153,   154,   155,   156,
+   157,   180,   159,   160,   161,   162,   163,   164,   165,   166,
+   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,   153,   154,
+   155,   156,   157,   180,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
+   153,   154,   155,   156,   157,   180,   159,   160,   161,   162,
+   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,
+   173,    -1,   153,   154,   155,   156,   157,   180,   159,   160,
+   161,   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,
+    -1,    -1,   173,    -1,   153,   154,   155,   156,   157,   180,
    159,   160,   161,   162,   163,   164,   165,   166,   167,    -1,
-    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,
-   154,   155,   156,   157,    -1,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
-    -1,    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,
+    -1,    -1,    -1,    -1,   173,    -1,   153,   154,   155,   156,
+   157,   180,   159,   160,   161,   162,   163,   164,   165,   166,
+   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,   153,   154,
+   155,   156,   157,   180,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
+   153,   154,   155,   156,   157,   180,   159,   160,   161,   162,
+   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,
+   173,    -1,   153,   154,   155,   156,   157,   180,   159,   160,
+   161,   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,
+    -1,    -1,   173,    -1,   153,   154,   155,   156,   157,   180,
    159,   160,   161,   162,   163,   164,   165,   166,   167,    -1,
-    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,
-   154,   155,   156,   157,    -1,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
-    -1,    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,
+    -1,    -1,    -1,    -1,   173,    -1,   153,   154,   155,   156,
+   157,   180,   159,   160,   161,   162,   163,   164,   165,   166,
+   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,   153,   154,
+   155,   156,   157,   180,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
+   153,   154,   155,   156,   157,   180,   159,   160,   161,   162,
+   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,
+   173,    -1,   153,   154,   155,   156,   157,   180,   159,   160,
+   161,   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,
+    -1,    -1,   173,    -1,   153,   154,   155,   156,   157,   180,
    159,   160,   161,   162,   163,   164,   165,   166,   167,    -1,
-    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,
-   154,   155,   156,   157,    -1,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
-    -1,    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,
+    -1,    -1,    -1,    -1,   173,    -1,   153,   154,   155,   156,
+   157,   180,   159,   160,   161,   162,   163,   164,   165,   166,
+   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,   153,   154,
+   155,   156,   157,   180,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
+   153,   154,   155,   156,   157,   180,   159,   160,   161,   162,
+   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,
+   173,    -1,   153,   154,   155,   156,   157,   180,   159,   160,
+   161,   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,
+    -1,    -1,   173,    -1,   153,   154,   155,   156,   157,   180,
    159,   160,   161,   162,   163,   164,   165,   166,   167,    -1,
-    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,
-   154,   155,   156,   157,    -1,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
-    -1,    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,
+    -1,    -1,    -1,    -1,   173,    -1,   153,   154,   155,   156,
+   157,   180,   159,   160,   161,   162,   163,   164,   165,   166,
+   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,   153,   154,
+   155,   156,   157,   180,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
+   153,   154,   155,   156,   157,   180,   159,   160,   161,   162,
+   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,
+   173,    -1,   153,   154,   155,   156,   157,   180,   159,   160,
+   161,   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,
+    -1,    -1,   173,    -1,   153,   154,   155,   156,   157,   180,
    159,   160,   161,   162,   163,   164,   165,   166,   167,    -1,
-    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,
-   154,   155,   156,   157,    -1,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
-    -1,    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,
+    -1,    -1,    -1,    -1,   173,    -1,   153,   154,   155,   156,
+   157,   180,   159,   160,   161,   162,   163,   164,   165,   166,
+   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,   153,   154,
+   155,   156,   157,   180,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
+   153,   154,   155,   156,   157,   180,   159,   160,   161,   162,
+   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,
+   173,    -1,   153,   154,   155,   156,   157,   180,   159,   160,
+   161,   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,
+    -1,    -1,   173,    -1,   153,   154,   155,   156,   157,   180,
    159,   160,   161,   162,   163,   164,   165,   166,   167,    -1,
-    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,
-   154,   155,   156,   157,    -1,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
-    -1,    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,
+    -1,    -1,    -1,    -1,   173,    -1,   153,   154,   155,   156,
+   157,   180,   159,   160,   161,   162,   163,   164,   165,   166,
+   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,   153,   154,
+   155,   156,   157,   180,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
+   153,   154,   155,   156,   157,   180,   159,   160,   161,   162,
+   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,
+   173,    -1,   153,   154,   155,   156,   157,   180,   159,   160,
+   161,   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,
+    -1,    -1,   173,    -1,   153,   154,   155,   156,   157,   180,
    159,   160,   161,   162,   163,   164,   165,   166,   167,    -1,
-    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,
-   154,   155,   156,   157,    -1,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
-    -1,   175,   153,   154,   155,   156,   157,    -1,   159,   160,
+    -1,    -1,    -1,    -1,   173,    -1,   153,   154,   155,   156,
+   157,   180,   159,   160,   161,   162,   163,   164,   165,   166,
+   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,   153,   154,
+   155,   156,   157,   180,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
+   153,   154,   155,   156,   157,   180,   159,   160,   161,   162,
+   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,
+   173,    -1,   153,   154,   155,   156,   157,   180,   159,   160,
    161,   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,
-    -1,    -1,   173,    -1,   175,   153,   154,   155,   156,   157,
-    -1,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-    -1,    -1,    -1,    -1,    -1,   173,    -1,   175,   153,   154,
+    -1,    -1,   173,    -1,   153,   154,   155,   156,   157,   180,
+   159,   160,   161,   162,   163,   164,   165,   166,   167,    -1,
+    -1,    -1,    -1,    -1,   173,    -1,   153,   154,   155,   156,
+   157,   180,   159,   160,   161,   162,   163,   164,   165,   166,
+   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,   153,   154,
+   155,   156,   157,   180,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
+    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
+    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,   154,
+   155,   156,   157,    -1,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
+    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
+    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,   154,
+   155,   156,   157,    -1,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
+    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
+    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,   154,
+   155,   156,   157,    -1,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
+    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
+    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,   154,
+   155,   156,   157,    -1,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
+    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
+    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,   154,
+   155,   156,   157,    -1,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
+    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
+    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,   154,
+   155,   156,   157,    -1,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
+    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
+    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,   154,
+   155,   156,   157,    -1,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
+    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
+    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,   154,
+   155,   156,   157,    -1,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
+    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
+    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,   154,
+   155,   156,   157,    -1,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
+    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
+    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,   154,
+   155,   156,   157,    -1,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
+    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
+    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,   154,
+   155,   156,   157,    -1,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
+    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
+    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,   154,
+   155,   156,   157,    -1,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
+    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
+    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,   154,
+   155,   156,   157,    -1,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
+    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
+    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,   154,
+   155,   156,   157,    -1,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
+    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
+    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,   154,
    155,   156,   157,    -1,   159,   160,   161,   162,   163,   164,
    165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
    175,   153,   154,   155,   156,   157,    -1,   159,   160,   161,
@@ -2336,7 +2384,16 @@ static const short yycheck[] = {    18,
    162,   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,
     -1,   173,    -1,   175,   153,   154,   155,   156,   157,    -1,
    159,   160,   161,   162,   163,   164,   165,   166,   167,    -1,
-    -1,    -1,    -1,    -1,   173,    -1,   175
+    -1,    -1,    -1,    -1,   173,    -1,   175,   153,   154,   155,
+   156,   157,    -1,   159,   160,   161,   162,   163,   164,   165,
+   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,   175,
+   153,   154,   155,   156,   157,    -1,   159,   160,   161,   162,
+   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,
+   173,    -1,   175,   153,   154,   155,   156,   157,    -1,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
+    -1,    -1,    -1,   173,    -1,   175,   153,   154,   155,   156,
+   157,    -1,   159,   160,   161,   162,   163,   164,   165,   166,
+   167,    -1,    -1,    -1,    -1,    -1,   173
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
 #line 3 "/usr/share/bison.simple"
@@ -5114,488 +5171,323 @@ case 187:
     ;
     break;}
 case 188:
-#line 2219 "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);
-      TheShape.Type = MSH_POINT;
+#line 2217 "Gmsh.y"
+{
       yyval.l = List_Create(2, 1, sizeof(Shape));
-      List_Add(yyval.l, &TheShape);
-      if(pc){
-	TheShape.Num = pc->Num;
-	TheShape.Type = pc->Typ;
-	List_Add(yyval.l, &TheShape);
-      }
+      ExtrudeShapes(TRANSLATE, yyvsp[-1].l, 
+		    yyvsp[-3].v[0], yyvsp[-3].v[1], yyvsp[-3].v[2], 0., 0., 0., 0., 0., 0., 0.,
+		    NULL, yyval.l);
+      List_Delete(yyvsp[-1].l);
     ;
     break;}
 case 189:
-#line 2235 "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);
-      TheShape.Type = MSH_POINT;
+#line 2225 "Gmsh.y"
+{
       yyval.l = List_Create(2, 1, sizeof(Shape));
-      List_Add(yyval.l, &TheShape);
-      if(pc){
-	TheShape.Num = pc->Num;
-	TheShape.Type = pc->Typ;
-	List_Add(yyval.l, &TheShape);
-      }
+      ExtrudeShapes(ROTATE, yyvsp[-1].l, 
+		    0., 0., 0., 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,
+		    NULL, yyval.l);
+      List_Delete(yyvsp[-1].l);
     ;
     break;}
 case 190:
-#line 2251 "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);
-      TheShape.Type = MSH_POINT;
+#line 2233 "Gmsh.y"
+{
       yyval.l = List_Create(2, 1, sizeof(Shape));
-      List_Add(yyval.l, &TheShape);
-      if(pc){
-	TheShape.Num = pc->Num;
-	TheShape.Type = pc->Typ;
-	List_Add(yyval.l, &TheShape);
-      }
+      ExtrudeShapes(TRANSLATE_ROTATE, yyvsp[-1].l, 
+		    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].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], yyvsp[-4].d,
+		    NULL, yyval.l);
+      List_Delete(yyvsp[-1].l);
     ;
     break;}
 case 191:
-#line 2267 "Gmsh.y"
+#line 2241 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 192:
-#line 2272 "Gmsh.y"
+#line 2246 "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);
-      TheShape.Type = MSH_POINT;
       yyval.l = List_Create(2, 1, sizeof(Shape));
-      List_Add(yyval.l, &TheShape);
-      if(pc){
-	TheShape.Num = pc->Num;
-	TheShape.Type = pc->Typ;
-	List_Add(yyval.l, &TheShape);
-      }
+      ExtrudeShapes(TRANSLATE, yyvsp[-3].l, 
+		    yyvsp[-5].v[0], yyvsp[-5].v[1], yyvsp[-5].v[2], 0., 0., 0., 0., 0., 0., 0.,
+		    &extr, yyval.l);
+      List_Delete(yyvsp[-3].l);
     ;
     break;}
 case 193:
-#line 2288 "Gmsh.y"
+#line 2254 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 194:
-#line 2293 "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);
-      TheShape.Type = MSH_POINT;
+#line 2259 "Gmsh.y"
+{
       yyval.l = List_Create(2, 1, sizeof(Shape));
-      List_Add(yyval.l, &TheShape);
-      if(pc){
-	TheShape.Num = pc->Num;
-	TheShape.Type = pc->Typ;
-	List_Add(yyval.l, &TheShape);
-      }
+      ExtrudeShapes(ROTATE, yyvsp[-3].l, 
+		    0., 0., 0., yyvsp[-10].v[0], yyvsp[-10].v[1], yyvsp[-10].v[2], yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].d,
+		    &extr, yyval.l);
+      List_Delete(yyvsp[-3].l);
     ;
     break;}
 case 195:
-#line 2309 "Gmsh.y"
+#line 2267 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 196:
-#line 2314 "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);
-      TheShape.Type = MSH_POINT;
+#line 2272 "Gmsh.y"
+{
       yyval.l = List_Create(2, 1, sizeof(Shape));
-      List_Add(yyval.l, &TheShape);
-      if(pc){
-	TheShape.Num = pc->Num;
-	TheShape.Type = pc->Typ;
-	List_Add(yyval.l, &TheShape);
-      }
+      ExtrudeShapes(TRANSLATE_ROTATE, yyvsp[-3].l, 
+		    yyvsp[-12].v[0], yyvsp[-12].v[1], yyvsp[-12].v[2], yyvsp[-10].v[0], yyvsp[-10].v[1], yyvsp[-10].v[2], yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].d,
+		    &extr, yyval.l);
+      List_Delete(yyvsp[-3].l);
     ;
     break;}
 case 197:
-#line 2332 "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);
-      Curve *c = FindCurve(TheShape.Num, THEM);
-      if(!c){
-	//yymsg(WARNING, "Unknown curve %d", TheShape.Num);
-	TheShape.Type = 0;
-      }
-      else{
-	TheShape.Type = c->Typ;
-      }
+#line 2282 "Gmsh.y"
+{
       yyval.l = List_Create(2, 1, sizeof(Shape));
-      List_Add(yyval.l, &TheShape);
-      if(ps){
-	TheShape.Num = ps->Num;
-	TheShape.Type = ps->Typ;
-	List_Add(yyval.l, &TheShape);
-      }
+      ExtrudeShape(TRANSLATE, MSH_POINT, (int)yyvsp[-4].d, 
+		   yyvsp[-2].v[0], yyvsp[-2].v[1], yyvsp[-2].v[2], 0., 0., 0., 0., 0., 0., 0.,
+		   NULL, yyval.l);
     ;
     break;}
 case 198:
-#line 2355 "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);
-      Curve *c = FindCurve(TheShape.Num, THEM);
-      if(!c){
-	//yymsg(WARNING, "Unknown curve %d", TheShape.Num);
-	TheShape.Type = 0;
-      }
-      else{
-	TheShape.Type = c->Typ;
-      }
+#line 2289 "Gmsh.y"
+{
       yyval.l = List_Create(2, 1, sizeof(Shape));
-      List_Add(yyval.l, &TheShape);
-      if(ps){
-	TheShape.Num = ps->Num;
-	TheShape.Type = ps->Typ;
-	List_Add(yyval.l, &TheShape);
-      }
+      ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)yyvsp[-4].d, 
+		   yyvsp[-2].v[0], yyvsp[-2].v[1], yyvsp[-2].v[2], 0., 0., 0., 0., 0., 0., 0.,
+		   NULL, yyval.l);
     ;
     break;}
 case 199:
-#line 2378 "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);
-      Curve *c = FindCurve(TheShape.Num, THEM);
-      if(!c){
-	//yymsg(WARNING, "Unknown curve %d", TheShape.Num);
-	TheShape.Type = 0;
-      }
-      else{
-	TheShape.Type = c->Typ;
-      }
+#line 2296 "Gmsh.y"
+{
       yyval.l = List_Create(2, 1, sizeof(Shape));
-      List_Add(yyval.l, &TheShape);
-      if(ps){
-	TheShape.Num = ps->Num;
-	TheShape.Type = ps->Typ;
-	List_Add(yyval.l, &TheShape);
-      }
+      ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)yyvsp[-4].d, 
+		   yyvsp[-2].v[0], yyvsp[-2].v[1], yyvsp[-2].v[2], 0., 0., 0., 0., 0., 0., 0.,
+		   NULL, yyval.l);
     ;
     break;}
 case 200:
-#line 2401 "Gmsh.y"
+#line 2303 "Gmsh.y"
 {
-      extr.mesh.ExtrudeMesh = false;
-      extr.mesh.Recombine = false;
+      yyval.l = List_Create(2, 1, sizeof(Shape));
+      ExtrudeShape(ROTATE, MSH_POINT, (int)yyvsp[-8].d, 
+		   0., 0., 0., yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], yyvsp[-4].v[0], yyvsp[-4].v[1], yyvsp[-4].v[2], yyvsp[-2].d,
+		   NULL, yyval.l);
     ;
     break;}
 case 201:
-#line 2406 "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);
-      Curve *c = FindCurve(TheShape.Num, THEM);
-      if(!c){
-	//yymsg(WARNING, "Unknown curve %d", TheShape.Num);
-	TheShape.Type = 0;
-      }
-      else{
-	TheShape.Type = c->Typ;
-      }
+#line 2310 "Gmsh.y"
+{
       yyval.l = List_Create(2, 1, sizeof(Shape));
-      List_Add(yyval.l, &TheShape);
-      if(ps){
-	TheShape.Num = ps->Num;
-	TheShape.Type = ps->Typ;
-	List_Add(yyval.l, &TheShape);
-      }
+      ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)yyvsp[-8].d, 
+		   0., 0., 0., yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], yyvsp[-4].v[0], yyvsp[-4].v[1], yyvsp[-4].v[2], yyvsp[-2].d,
+		   NULL, yyval.l);
     ;
     break;}
 case 202:
-#line 2429 "Gmsh.y"
+#line 2317 "Gmsh.y"
 {
-      extr.mesh.ExtrudeMesh = false;
-      extr.mesh.Recombine = false;
+      yyval.l = List_Create(2, 1, sizeof(Shape));
+      ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)yyvsp[-8].d, 
+		   0., 0., 0., yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], yyvsp[-4].v[0], yyvsp[-4].v[1], yyvsp[-4].v[2], yyvsp[-2].d,
+		   NULL, yyval.l);
     ;
     break;}
 case 203:
-#line 2434 "Gmsh.y"
+#line 2324 "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);
-      Curve *c = FindCurve(TheShape.Num, THEM);
-      if(!c){
-	//yymsg(WARNING, "Unknown curve %d", TheShape.Num);
-	TheShape.Type = 0;
-      }
-      else{
-	TheShape.Type = c->Typ;
-      }
       yyval.l = List_Create(2, 1, sizeof(Shape));
-      List_Add(yyval.l, &TheShape);
-      if(ps){
-	TheShape.Num = ps->Num;
-	TheShape.Type = ps->Typ;
-	List_Add(yyval.l, &TheShape);
-      }
+      ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)yyvsp[-10].d, 
+		   yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], yyvsp[-4].v[0], yyvsp[-4].v[1], yyvsp[-4].v[2], yyvsp[-2].d,
+		   NULL, yyval.l);
     ;
     break;}
 case 204:
-#line 2457 "Gmsh.y"
+#line 2331 "Gmsh.y"
 {
-      extr.mesh.ExtrudeMesh = false;
-      extr.mesh.Recombine = false;
+      yyval.l = List_Create(2, 1, sizeof(Shape));
+      ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)yyvsp[-10].d, 
+		   yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], yyvsp[-4].v[0], yyvsp[-4].v[1], yyvsp[-4].v[2], yyvsp[-2].d,
+		   NULL, yyval.l);
     ;
     break;}
 case 205:
-#line 2462 "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);
-      Curve *c = FindCurve(TheShape.Num, THEM);
-      if(!c){
-	//yymsg(WARNING, "Unknown curve %d", TheShape.Num);
-	TheShape.Type = 0;
-      }
-      else{
-	TheShape.Type = c->Typ;
-      }
+#line 2338 "Gmsh.y"
+{
       yyval.l = List_Create(2, 1, sizeof(Shape));
-      List_Add(yyval.l, &TheShape);
-      if(ps){
-	TheShape.Num = ps->Num;
-	TheShape.Type = ps->Typ;
-	List_Add(yyval.l, &TheShape);
-      }
+      ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)yyvsp[-10].d, 
+		   yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], yyvsp[-4].v[0], yyvsp[-4].v[1], yyvsp[-4].v[2], yyvsp[-2].d,
+		   NULL, yyval.l);
     ;
     break;}
 case 206:
-#line 2488 "Gmsh.y"
-{
-      Volume *pv;
-      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., 
-					    &pv, NULL);
-      Surface *s = FindSurface(TheShape.Num, THEM);
-      if(!s){
-	//yymsg(WARNING, "Unknown surface %d", TheShape.Num);
-	TheShape.Type = 0;
-      }
-      else{
-	TheShape.Type = s->Typ;
-      }
-      yyval.l = List_Create(2, 1, sizeof(Shape));
-      List_Add(yyval.l, &TheShape);
-      if(pv){
-	TheShape.Num = pv->Num;
-	TheShape.Type = pv->Typ;
-	List_Add(yyval.l, &TheShape);
-      }
+#line 2345 "Gmsh.y"
+{
+      extr.mesh.ExtrudeMesh = false;
+      extr.mesh.Recombine = false;
     ;
     break;}
 case 207:
-#line 2511 "Gmsh.y"
-{
-      Volume *pv;
-      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,
-					    &pv, NULL);
-      Surface *s = FindSurface(TheShape.Num, THEM);
-      if(!s){
-	//yymsg(WARNING, "Unknown surface %d", TheShape.Num);
-	TheShape.Type = 0;
-      }
-      else{
-	TheShape.Type = s->Typ;
-      }
+#line 2350 "Gmsh.y"
+{
       yyval.l = List_Create(2, 1, sizeof(Shape));
-      List_Add(yyval.l, &TheShape);
-      if(pv){
-	TheShape.Num = pv->Num;
-	TheShape.Type = pv->Typ;
-	List_Add(yyval.l, &TheShape);
-      }
+      ExtrudeShape(TRANSLATE, MSH_POINT, (int)yyvsp[-8].d, 
+		   yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], 0., 0., 0., 0., 0., 0., 0.,
+		   &extr, yyval.l);
     ;
     break;}
 case 208:
-#line 2534 "Gmsh.y"
-{
-      Volume *pv;
-      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,
-					    &pv, NULL);
-      Surface *s = FindSurface(TheShape.Num, THEM);
-      if(!s){
-	//yymsg(WARNING, "Unknown surface %d", TheShape.Num);
-	TheShape.Type = 0;
-      }
-      else{
-	TheShape.Type = s->Typ;
-      }
-      yyval.l = List_Create(2, 1, sizeof(Shape));
-      List_Add(yyval.l, &TheShape);
-      if(pv){
-	TheShape.Num = pv->Num;
-	TheShape.Type = pv->Typ;
-	List_Add(yyval.l, &TheShape);
-      }
-    ;
-    break;}
-case 209:
-#line 2557 "Gmsh.y"
+#line 2357 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
-case 210:
-#line 2562 "Gmsh.y"
-{
-      Volume *pv;
-      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., 
-					    &pv, &extr);
-      Surface *s = FindSurface(TheShape.Num, THEM);
-      if(!s){
-	//yymsg(WARNING, "Unknown surface %d", TheShape.Num);
-	TheShape.Type = 0;
-      }
-      else{
-	TheShape.Type = s->Typ;
-      }
+case 209:
+#line 2362 "Gmsh.y"
+{
       yyval.l = List_Create(2, 1, sizeof(Shape));
-      List_Add(yyval.l, &TheShape);
-      if(pv){
-	TheShape.Num = pv->Num;
-	TheShape.Type = pv->Typ;
-	List_Add(yyval.l, &TheShape);
-      }
+      ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)yyvsp[-8].d, 
+		   yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], 0., 0., 0., 0., 0., 0., 0.,
+		   &extr, yyval.l);
     ;
     break;}
-case 211:
-#line 2585 "Gmsh.y"
+case 210:
+#line 2369 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
-case 212:
-#line 2591 "Gmsh.y"
-{
-      Volume *pv;
-      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, 
-					    &pv, &extr);
-      Surface *s = FindSurface(TheShape.Num, THEM);
-      if(!s){
-	//yymsg(WARNING, "Unknown surface %d", TheShape.Num);
-	TheShape.Type = 0;
-      }
-      else{
-	TheShape.Type = s->Typ;
-      }
+case 211:
+#line 2374 "Gmsh.y"
+{
       yyval.l = List_Create(2, 1, sizeof(Shape));
-      List_Add(yyval.l, &TheShape);
-      if(pv){
-	TheShape.Num = pv->Num;
-	TheShape.Type = pv->Typ;
-	List_Add(yyval.l, &TheShape);
-      }
+      ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)yyvsp[-8].d, 
+		   yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], 0., 0., 0., 0., 0., 0., 0.,
+		   &extr, yyval.l);
     ;
     break;}
-case 213:
-#line 2614 "Gmsh.y"
+case 212:
+#line 2381 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
-case 214:
-#line 2620 "Gmsh.y"
-{
-      Volume *pv;
-      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,
-					    &pv, &extr);
-      Surface *s = FindSurface(TheShape.Num, THEM);
-      if(!s){
-	//yymsg(WARNING, "Unknown surface %d", TheShape.Num);
-	TheShape.Type = 0;
-      }
-      else{
-	TheShape.Type = s->Typ;
-      }
+case 213:
+#line 2386 "Gmsh.y"
+{
       yyval.l = List_Create(2, 1, sizeof(Shape));
-      List_Add(yyval.l, &TheShape);
-      if(pv){
-	TheShape.Num = pv->Num;
-	TheShape.Type = pv->Typ;
-	List_Add(yyval.l, &TheShape);
-      }
+      ExtrudeShape(ROTATE, MSH_POINT, (int)yyvsp[-12].d, 
+		   0., 0., 0., yyvsp[-10].v[0], yyvsp[-10].v[1], yyvsp[-10].v[2], yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].d,
+		   &extr, yyval.l);
+    ;
+    break;}
+case 214:
+#line 2393 "Gmsh.y"
+{
+      extr.mesh.ExtrudeMesh = false;
+      extr.mesh.Recombine = false;
     ;
     break;}
 case 215:
-#line 2646 "Gmsh.y"
+#line 2398 "Gmsh.y"
 {
+      yyval.l = List_Create(2, 1, sizeof(Shape));
+      ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)yyvsp[-12].d, 
+		   0., 0., 0., yyvsp[-10].v[0], yyvsp[-10].v[1], yyvsp[-10].v[2], yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].d,
+		   &extr, yyval.l);
     ;
     break;}
 case 216:
-#line 2649 "Gmsh.y"
+#line 2405 "Gmsh.y"
 {
+      extr.mesh.ExtrudeMesh = false;
+      extr.mesh.Recombine = false;
     ;
     break;}
 case 217:
-#line 2655 "Gmsh.y"
+#line 2410 "Gmsh.y"
+{
+      yyval.l = List_Create(2, 1, sizeof(Shape));
+      ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)yyvsp[-12].d, 
+		   0., 0., 0., yyvsp[-10].v[0], yyvsp[-10].v[1], yyvsp[-10].v[2], yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].d,
+		   &extr, yyval.l);
+    ;
+    break;}
+case 218:
+#line 2417 "Gmsh.y"
+{
+      extr.mesh.ExtrudeMesh = false;
+      extr.mesh.Recombine = false;
+    ;
+    break;}
+case 219:
+#line 2422 "Gmsh.y"
+{
+      yyval.l = List_Create(2, 1, sizeof(Shape));
+      ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)yyvsp[-14].d, 
+		   yyvsp[-12].v[0], yyvsp[-12].v[1], yyvsp[-12].v[2], yyvsp[-10].v[0], yyvsp[-10].v[1], yyvsp[-10].v[2], yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].d,
+		   &extr, yyval.l);
+    ;
+    break;}
+case 220:
+#line 2429 "Gmsh.y"
+{
+      extr.mesh.ExtrudeMesh = false;
+      extr.mesh.Recombine = false;
+    ;
+    break;}
+case 221:
+#line 2434 "Gmsh.y"
+{
+      yyval.l = List_Create(2, 1, sizeof(Shape));
+      ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)yyvsp[-14].d, 
+		   yyvsp[-12].v[0], yyvsp[-12].v[1], yyvsp[-12].v[2], yyvsp[-10].v[0], yyvsp[-10].v[1], yyvsp[-10].v[2], yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].d,
+		   &extr, yyval.l);
+    ;
+    break;}
+case 222:
+#line 2441 "Gmsh.y"
+{
+      extr.mesh.ExtrudeMesh = false;
+      extr.mesh.Recombine = false;
+    ;
+    break;}
+case 223:
+#line 2446 "Gmsh.y"
+{
+      yyval.l = List_Create(2, 1, sizeof(Shape));
+      ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)yyvsp[-14].d, 
+		   yyvsp[-12].v[0], yyvsp[-12].v[1], yyvsp[-12].v[2], yyvsp[-10].v[0], yyvsp[-10].v[1], yyvsp[-10].v[2], yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].d,
+		   &extr, yyval.l);
+    ;
+    break;}
+case 224:
+#line 2457 "Gmsh.y"
+{
+    ;
+    break;}
+case 225:
+#line 2460 "Gmsh.y"
+{
+    ;
+    break;}
+case 226:
+#line 2466 "Gmsh.y"
 {
       double d;
       extr.mesh.ExtrudeMesh = true;
@@ -5622,8 +5514,8 @@ case 217:
       List_Delete(yyvsp[-2].l);
     ;
     break;}
-case 218:
-#line 2681 "Gmsh.y"
+case 227:
+#line 2492 "Gmsh.y"
 {
       double d;
       extr.mesh.ExtrudeMesh = true;
@@ -5648,14 +5540,14 @@ case 218:
       List_Delete(yyvsp[-2].l);
     ;
     break;}
-case 219:
-#line 2705 "Gmsh.y"
+case 228:
+#line 2516 "Gmsh.y"
 {
       extr.mesh.Recombine = true;
     ;
     break;}
-case 220:
-#line 2714 "Gmsh.y"
+case 229:
+#line 2525 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[-3].l); i++){
 	double d;
@@ -5674,8 +5566,8 @@ case 220:
       List_Delete(yyvsp[-3].l);
     ;
     break;}
-case 221:
-#line 2732 "Gmsh.y"
+case 230:
+#line 2543 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[-6].l); i++){
 	double d;
@@ -5694,8 +5586,8 @@ case 221:
       List_Delete(yyvsp[-6].l);
     ;
     break;}
-case 222:
-#line 2750 "Gmsh.y"
+case 231:
+#line 2561 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[-6].l); i++){
 	double d;
@@ -5714,8 +5606,8 @@ case 222:
       List_Delete(yyvsp[-6].l);
     ;
     break;}
-case 223:
-#line 2768 "Gmsh.y"
+case 232:
+#line 2579 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-4].d, THEM);
       if(!s)
@@ -5745,8 +5637,8 @@ case 223:
       List_Delete(yyvsp[-1].l);
     ;
     break;}
-case 224:
-#line 2797 "Gmsh.y"
+case 233:
+#line 2608 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-5].d, THEM);
       if(!s)
@@ -5782,8 +5674,8 @@ case 224:
       Free(yyvsp[-1].c);
     ;
     break;}
-case 225:
-#line 2832 "Gmsh.y"
+case 234:
+#line 2643 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-4].d, THEM);
       if(!s)
@@ -5811,8 +5703,8 @@ case 225:
       List_Delete(yyvsp[-1].l);
     ;
     break;}
-case 226:
-#line 2859 "Gmsh.y"
+case 235:
+#line 2670 "Gmsh.y"
 {
       Volume *v = FindVolume((int)yyvsp[-4].d, THEM);
       if(!v)
@@ -5840,8 +5732,8 @@ case 226:
       List_Delete(yyvsp[-1].l);
     ;
     break;}
-case 227:
-#line 2886 "Gmsh.y"
+case 236:
+#line 2697 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[-3].l); i++){
 	double d;
@@ -5856,8 +5748,8 @@ case 227:
       List_Delete(yyvsp[-3].l);
     ;
     break;}
-case 228:
-#line 2900 "Gmsh.y"
+case 237:
+#line 2711 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){
 	double d;
@@ -5871,72 +5763,72 @@ case 228:
       List_Delete(yyvsp[-1].l);
     ;
     break;}
-case 229:
-#line 2919 "Gmsh.y"
+case 238:
+#line 2730 "Gmsh.y"
 { 
       ReplaceAllDuplicates(THEM);
     ;
     break;}
-case 230:
-#line 2923 "Gmsh.y"
+case 239:
+#line 2734 "Gmsh.y"
 { 
       IntersectAllSegmentsTogether();
     ;
     break;}
-case 231:
-#line 2932 "Gmsh.y"
+case 240:
+#line 2743 "Gmsh.y"
 {yyval.i = 1;;
     break;}
-case 232:
-#line 2933 "Gmsh.y"
+case 241:
+#line 2744 "Gmsh.y"
 {yyval.i = 0;;
     break;}
-case 233:
-#line 2934 "Gmsh.y"
+case 242:
+#line 2745 "Gmsh.y"
 {yyval.i = -1;;
     break;}
-case 234:
-#line 2935 "Gmsh.y"
+case 243:
+#line 2746 "Gmsh.y"
 {yyval.i = -1;;
     break;}
-case 235:
-#line 2936 "Gmsh.y"
+case 244:
+#line 2747 "Gmsh.y"
 {yyval.i = -1;;
     break;}
-case 236:
-#line 2940 "Gmsh.y"
+case 245:
+#line 2751 "Gmsh.y"
 { yyval.d = yyvsp[0].d;           ;
     break;}
-case 237:
-#line 2941 "Gmsh.y"
+case 246:
+#line 2752 "Gmsh.y"
 { yyval.d = yyvsp[-1].d;           ;
     break;}
-case 238:
-#line 2942 "Gmsh.y"
+case 247:
+#line 2753 "Gmsh.y"
 { yyval.d = -yyvsp[0].d;          ;
     break;}
-case 239:
-#line 2943 "Gmsh.y"
+case 248:
+#line 2754 "Gmsh.y"
 { yyval.d = yyvsp[0].d;           ;
     break;}
-case 240:
-#line 2944 "Gmsh.y"
+case 249:
+#line 2755 "Gmsh.y"
 { yyval.d = !yyvsp[0].d;          ;
     break;}
-case 241:
-#line 2945 "Gmsh.y"
+case 250:
+#line 2756 "Gmsh.y"
 { yyval.d = yyvsp[-2].d - yyvsp[0].d;      ;
     break;}
-case 242:
-#line 2946 "Gmsh.y"
+case 251:
+#line 2757 "Gmsh.y"
 { yyval.d = yyvsp[-2].d + yyvsp[0].d;      ;
     break;}
-case 243:
-#line 2947 "Gmsh.y"
+case 252:
+#line 2758 "Gmsh.y"
 { yyval.d = yyvsp[-2].d * yyvsp[0].d;      ;
     break;}
-case 244:
-#line 2949 "Gmsh.y"
+case 253:
+#line 2760 "Gmsh.y"
 { 
       if(!yyvsp[0].d)
 	yymsg(GERROR, "Division by zero in '%g / %g'", yyvsp[-2].d, yyvsp[0].d);
@@ -5944,248 +5836,248 @@ case 244:
 	yyval.d = yyvsp[-2].d / yyvsp[0].d;     
     ;
     break;}
-case 245:
-#line 2955 "Gmsh.y"
+case 254:
+#line 2766 "Gmsh.y"
 { yyval.d = (int)yyvsp[-2].d % (int)yyvsp[0].d;  ;
     break;}
-case 246:
-#line 2956 "Gmsh.y"
+case 255:
+#line 2767 "Gmsh.y"
 { yyval.d = pow(yyvsp[-2].d, yyvsp[0].d);  ;
     break;}
-case 247:
-#line 2957 "Gmsh.y"
+case 256:
+#line 2768 "Gmsh.y"
 { yyval.d = yyvsp[-2].d < yyvsp[0].d;      ;
     break;}
-case 248:
-#line 2958 "Gmsh.y"
+case 257:
+#line 2769 "Gmsh.y"
 { yyval.d = yyvsp[-2].d > yyvsp[0].d;      ;
     break;}
-case 249:
-#line 2959 "Gmsh.y"
+case 258:
+#line 2770 "Gmsh.y"
 { yyval.d = yyvsp[-2].d <= yyvsp[0].d;     ;
     break;}
-case 250:
-#line 2960 "Gmsh.y"
+case 259:
+#line 2771 "Gmsh.y"
 { yyval.d = yyvsp[-2].d >= yyvsp[0].d;     ;
     break;}
-case 251:
-#line 2961 "Gmsh.y"
+case 260:
+#line 2772 "Gmsh.y"
 { yyval.d = yyvsp[-2].d == yyvsp[0].d;     ;
     break;}
-case 252:
-#line 2962 "Gmsh.y"
+case 261:
+#line 2773 "Gmsh.y"
 { yyval.d = yyvsp[-2].d != yyvsp[0].d;     ;
     break;}
-case 253:
-#line 2963 "Gmsh.y"
+case 262:
+#line 2774 "Gmsh.y"
 { yyval.d = yyvsp[-2].d && yyvsp[0].d;     ;
     break;}
-case 254:
-#line 2964 "Gmsh.y"
+case 263:
+#line 2775 "Gmsh.y"
 { yyval.d = yyvsp[-2].d || yyvsp[0].d;     ;
     break;}
-case 255:
-#line 2965 "Gmsh.y"
+case 264:
+#line 2776 "Gmsh.y"
 { yyval.d = yyvsp[-4].d? yyvsp[-2].d : yyvsp[0].d;  ;
     break;}
-case 256:
-#line 2966 "Gmsh.y"
+case 265:
+#line 2777 "Gmsh.y"
 { yyval.d = exp(yyvsp[-1].d);      ;
     break;}
-case 257:
-#line 2967 "Gmsh.y"
+case 266:
+#line 2778 "Gmsh.y"
 { yyval.d = log(yyvsp[-1].d);      ;
     break;}
-case 258:
-#line 2968 "Gmsh.y"
+case 267:
+#line 2779 "Gmsh.y"
 { yyval.d = log10(yyvsp[-1].d);    ;
     break;}
-case 259:
-#line 2969 "Gmsh.y"
+case 268:
+#line 2780 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-1].d);     ;
     break;}
-case 260:
-#line 2970 "Gmsh.y"
+case 269:
+#line 2781 "Gmsh.y"
 { yyval.d = sin(yyvsp[-1].d);      ;
     break;}
-case 261:
-#line 2971 "Gmsh.y"
+case 270:
+#line 2782 "Gmsh.y"
 { yyval.d = asin(yyvsp[-1].d);     ;
     break;}
-case 262:
-#line 2972 "Gmsh.y"
+case 271:
+#line 2783 "Gmsh.y"
 { yyval.d = cos(yyvsp[-1].d);      ;
     break;}
-case 263:
-#line 2973 "Gmsh.y"
+case 272:
+#line 2784 "Gmsh.y"
 { yyval.d = acos(yyvsp[-1].d);     ;
     break;}
-case 264:
-#line 2974 "Gmsh.y"
+case 273:
+#line 2785 "Gmsh.y"
 { yyval.d = tan(yyvsp[-1].d);      ;
     break;}
-case 265:
-#line 2975 "Gmsh.y"
+case 274:
+#line 2786 "Gmsh.y"
 { yyval.d = atan(yyvsp[-1].d);     ;
     break;}
-case 266:
-#line 2976 "Gmsh.y"
+case 275:
+#line 2787 "Gmsh.y"
 { yyval.d = atan2(yyvsp[-3].d, yyvsp[-1].d);;
     break;}
-case 267:
-#line 2977 "Gmsh.y"
+case 276:
+#line 2788 "Gmsh.y"
 { yyval.d = sinh(yyvsp[-1].d);     ;
     break;}
-case 268:
-#line 2978 "Gmsh.y"
+case 277:
+#line 2789 "Gmsh.y"
 { yyval.d = cosh(yyvsp[-1].d);     ;
     break;}
-case 269:
-#line 2979 "Gmsh.y"
+case 278:
+#line 2790 "Gmsh.y"
 { yyval.d = tanh(yyvsp[-1].d);     ;
     break;}
-case 270:
-#line 2980 "Gmsh.y"
+case 279:
+#line 2791 "Gmsh.y"
 { yyval.d = fabs(yyvsp[-1].d);     ;
     break;}
-case 271:
-#line 2981 "Gmsh.y"
+case 280:
+#line 2792 "Gmsh.y"
 { yyval.d = floor(yyvsp[-1].d);    ;
     break;}
-case 272:
-#line 2982 "Gmsh.y"
+case 281:
+#line 2793 "Gmsh.y"
 { yyval.d = ceil(yyvsp[-1].d);     ;
     break;}
-case 273:
-#line 2983 "Gmsh.y"
+case 282:
+#line 2794 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ;
     break;}
-case 274:
-#line 2984 "Gmsh.y"
+case 283:
+#line 2795 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ;
     break;}
-case 275:
-#line 2985 "Gmsh.y"
+case 284:
+#line 2796 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ;
     break;}
-case 276:
-#line 2986 "Gmsh.y"
+case 285:
+#line 2797 "Gmsh.y"
 { yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ;
     break;}
-case 277:
-#line 2988 "Gmsh.y"
+case 286:
+#line 2799 "Gmsh.y"
 { yyval.d = exp(yyvsp[-1].d);      ;
     break;}
-case 278:
-#line 2989 "Gmsh.y"
+case 287:
+#line 2800 "Gmsh.y"
 { yyval.d = log(yyvsp[-1].d);      ;
     break;}
-case 279:
-#line 2990 "Gmsh.y"
+case 288:
+#line 2801 "Gmsh.y"
 { yyval.d = log10(yyvsp[-1].d);    ;
     break;}
-case 280:
-#line 2991 "Gmsh.y"
+case 289:
+#line 2802 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-1].d);     ;
     break;}
-case 281:
-#line 2992 "Gmsh.y"
+case 290:
+#line 2803 "Gmsh.y"
 { yyval.d = sin(yyvsp[-1].d);      ;
     break;}
-case 282:
-#line 2993 "Gmsh.y"
+case 291:
+#line 2804 "Gmsh.y"
 { yyval.d = asin(yyvsp[-1].d);     ;
     break;}
-case 283:
-#line 2994 "Gmsh.y"
+case 292:
+#line 2805 "Gmsh.y"
 { yyval.d = cos(yyvsp[-1].d);      ;
     break;}
-case 284:
-#line 2995 "Gmsh.y"
+case 293:
+#line 2806 "Gmsh.y"
 { yyval.d = acos(yyvsp[-1].d);     ;
     break;}
-case 285:
-#line 2996 "Gmsh.y"
+case 294:
+#line 2807 "Gmsh.y"
 { yyval.d = tan(yyvsp[-1].d);      ;
     break;}
-case 286:
-#line 2997 "Gmsh.y"
+case 295:
+#line 2808 "Gmsh.y"
 { yyval.d = atan(yyvsp[-1].d);     ;
     break;}
-case 287:
-#line 2998 "Gmsh.y"
+case 296:
+#line 2809 "Gmsh.y"
 { yyval.d = atan2(yyvsp[-3].d, yyvsp[-1].d);;
     break;}
-case 288:
-#line 2999 "Gmsh.y"
+case 297:
+#line 2810 "Gmsh.y"
 { yyval.d = sinh(yyvsp[-1].d);     ;
     break;}
-case 289:
-#line 3000 "Gmsh.y"
+case 298:
+#line 2811 "Gmsh.y"
 { yyval.d = cosh(yyvsp[-1].d);     ;
     break;}
-case 290:
-#line 3001 "Gmsh.y"
+case 299:
+#line 2812 "Gmsh.y"
 { yyval.d = tanh(yyvsp[-1].d);     ;
     break;}
-case 291:
-#line 3002 "Gmsh.y"
+case 300:
+#line 2813 "Gmsh.y"
 { yyval.d = fabs(yyvsp[-1].d);     ;
     break;}
-case 292:
-#line 3003 "Gmsh.y"
+case 301:
+#line 2814 "Gmsh.y"
 { yyval.d = floor(yyvsp[-1].d);    ;
     break;}
-case 293:
-#line 3004 "Gmsh.y"
+case 302:
+#line 2815 "Gmsh.y"
 { yyval.d = ceil(yyvsp[-1].d);     ;
     break;}
-case 294:
-#line 3005 "Gmsh.y"
+case 303:
+#line 2816 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ;
     break;}
-case 295:
-#line 3006 "Gmsh.y"
+case 304:
+#line 2817 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ;
     break;}
-case 296:
-#line 3007 "Gmsh.y"
+case 305:
+#line 2818 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ;
     break;}
-case 297:
-#line 3008 "Gmsh.y"
+case 306:
+#line 2819 "Gmsh.y"
 { yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ;
     break;}
-case 298:
-#line 3017 "Gmsh.y"
+case 307:
+#line 2828 "Gmsh.y"
 { yyval.d = yyvsp[0].d; ;
     break;}
-case 299:
-#line 3018 "Gmsh.y"
+case 308:
+#line 2829 "Gmsh.y"
 { yyval.d = 3.141592653589793; ;
     break;}
-case 300:
-#line 3019 "Gmsh.y"
+case 309:
+#line 2830 "Gmsh.y"
 { yyval.d = ParUtil::Instance()->rank(); ;
     break;}
-case 301:
-#line 3020 "Gmsh.y"
+case 310:
+#line 2831 "Gmsh.y"
 { yyval.d = ParUtil::Instance()->size(); ;
     break;}
-case 302:
-#line 3021 "Gmsh.y"
+case 311:
+#line 2832 "Gmsh.y"
 { yyval.d = GMSH_MAJOR_VERSION; ;
     break;}
-case 303:
-#line 3022 "Gmsh.y"
+case 312:
+#line 2833 "Gmsh.y"
 { yyval.d = GMSH_MINOR_VERSION; ;
     break;}
-case 304:
-#line 3023 "Gmsh.y"
+case 313:
+#line 2834 "Gmsh.y"
 { yyval.d = GMSH_PATCH_VERSION; ;
     break;}
-case 305:
-#line 3028 "Gmsh.y"
+case 314:
+#line 2839 "Gmsh.y"
 {
       Symbol TheSymbol;
       TheSymbol.Name = yyvsp[0].c;
@@ -6199,8 +6091,8 @@ case 305:
       Free(yyvsp[0].c);
     ;
     break;}
-case 306:
-#line 3041 "Gmsh.y"
+case 315:
+#line 2852 "Gmsh.y"
 {
       Symbol TheSymbol;
       TheSymbol.Name = yyvsp[-3].c;
@@ -6221,8 +6113,8 @@ case 306:
       Free(yyvsp[-3].c);
     ;
     break;}
-case 307:
-#line 3061 "Gmsh.y"
+case 316:
+#line 2872 "Gmsh.y"
 {
       Symbol TheSymbol;
       TheSymbol.Name = yyvsp[-2].c;
@@ -6237,8 +6129,8 @@ case 307:
       Free(yyvsp[-2].c);
     ;
     break;}
-case 308:
-#line 3075 "Gmsh.y"
+case 317:
+#line 2886 "Gmsh.y"
 {
       Symbol TheSymbol;
       TheSymbol.Name = yyvsp[-1].c;
@@ -6252,8 +6144,8 @@ case 308:
       Free(yyvsp[-1].c);
     ;
     break;}
-case 309:
-#line 3088 "Gmsh.y"
+case 318:
+#line 2899 "Gmsh.y"
 {
       Symbol TheSymbol;
       TheSymbol.Name = yyvsp[-4].c;
@@ -6274,8 +6166,8 @@ case 309:
       Free(yyvsp[-4].c);
     ;
     break;}
-case 310:
-#line 3111 "Gmsh.y"
+case 319:
+#line 2922 "Gmsh.y"
 {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -6294,8 +6186,8 @@ case 310:
       Free(yyvsp[-2].c); Free(yyvsp[0].c);
     ;
     break;}
-case 311:
-#line 3129 "Gmsh.y"
+case 320:
+#line 2940 "Gmsh.y"
 {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -6314,8 +6206,8 @@ case 311:
       Free(yyvsp[-5].c); Free(yyvsp[0].c);
     ;
     break;}
-case 312:
-#line 3147 "Gmsh.y"
+case 321:
+#line 2958 "Gmsh.y"
 {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -6334,8 +6226,8 @@ case 312:
       Free(yyvsp[-3].c); Free(yyvsp[-1].c);
     ;
     break;}
-case 313:
-#line 3165 "Gmsh.y"
+case 322:
+#line 2976 "Gmsh.y"
 {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -6354,138 +6246,138 @@ case 313:
       Free(yyvsp[-6].c); Free(yyvsp[-1].c);
     ;
     break;}
-case 314:
-#line 3183 "Gmsh.y"
+case 323:
+#line 2994 "Gmsh.y"
 { 
       yyval.d = GetValue(yyvsp[-3].c, yyvsp[-1].d);
       Free(yyvsp[-3].c);
     ;
     break;}
-case 315:
-#line 3191 "Gmsh.y"
+case 324:
+#line 3002 "Gmsh.y"
 {
       memcpy(yyval.v, yyvsp[0].v, 5*sizeof(double));
     ;
     break;}
-case 316:
-#line 3195 "Gmsh.y"
+case 325:
+#line 3006 "Gmsh.y"
 {
       for(int i = 0; i < 5; i++) yyval.v[i] = -yyvsp[0].v[i];
     ;
     break;}
-case 317:
-#line 3199 "Gmsh.y"
+case 326:
+#line 3010 "Gmsh.y"
 { 
       for(int i = 0; i < 5; i++) yyval.v[i] = yyvsp[0].v[i];
     ;
     break;}
-case 318:
-#line 3203 "Gmsh.y"
+case 327:
+#line 3014 "Gmsh.y"
 { 
       for(int i = 0; i < 5; i++) yyval.v[i] = yyvsp[-2].v[i] - yyvsp[0].v[i];
     ;
     break;}
-case 319:
-#line 3207 "Gmsh.y"
+case 328:
+#line 3018 "Gmsh.y"
 {
       for(int i = 0; i < 5; i++) yyval.v[i] = yyvsp[-2].v[i] + yyvsp[0].v[i];
     ;
     break;}
-case 320:
-#line 3214 "Gmsh.y"
+case 329:
+#line 3025 "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 321:
-#line 3218 "Gmsh.y"
+case 330:
+#line 3029 "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 322:
-#line 3222 "Gmsh.y"
+case 331:
+#line 3033 "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 323:
-#line 3226 "Gmsh.y"
+case 332:
+#line 3037 "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 324:
-#line 3233 "Gmsh.y"
+case 333:
+#line 3044 "Gmsh.y"
 {
     ;
     break;}
-case 325:
-#line 3236 "Gmsh.y"
+case 334:
+#line 3047 "Gmsh.y"
 {
     ;
     break;}
-case 326:
-#line 3242 "Gmsh.y"
+case 335:
+#line 3053 "Gmsh.y"
 {
     ;
     break;}
-case 327:
-#line 3245 "Gmsh.y"
+case 336:
+#line 3056 "Gmsh.y"
 {
     ;
     break;}
-case 328:
-#line 3251 "Gmsh.y"
+case 337:
+#line 3062 "Gmsh.y"
 {
     ;
     break;}
-case 329:
-#line 3254 "Gmsh.y"
+case 338:
+#line 3065 "Gmsh.y"
 {
        yyval.l = yyvsp[-1].l;
     ;
     break;}
-case 330:
-#line 3258 "Gmsh.y"
+case 339:
+#line 3069 "Gmsh.y"
 {
        yyval.l = yyvsp[-1].l;
     ;
     break;}
-case 331:
-#line 3265 "Gmsh.y"
+case 340:
+#line 3076 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(List_T*));
       List_Add(yyval.l, &(yyvsp[0].l));
     ;
     break;}
-case 332:
-#line 3270 "Gmsh.y"
+case 341:
+#line 3081 "Gmsh.y"
 {
       List_Add(yyval.l, &(yyvsp[0].l));
     ;
     break;}
-case 333:
-#line 3278 "Gmsh.y"
+case 342:
+#line 3089 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double));
       List_Add(yyval.l, &(yyvsp[0].d));
     ;
     break;}
-case 334:
-#line 3283 "Gmsh.y"
+case 343:
+#line 3094 "Gmsh.y"
 {
       yyval.l = yyvsp[0].l;
     ;
     break;}
-case 335:
-#line 3287 "Gmsh.y"
+case 344:
+#line 3098 "Gmsh.y"
 {
       yyval.l = yyvsp[-1].l;
     ;
     break;}
-case 336:
-#line 3291 "Gmsh.y"
+case 345:
+#line 3102 "Gmsh.y"
 {
       yyval.l = yyvsp[-1].l;
       double *pd;
@@ -6495,16 +6387,16 @@ case 336:
       }
     ;
     break;}
-case 337:
-#line 3303 "Gmsh.y"
+case 346:
+#line 3114 "Gmsh.y"
 { 
       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 338:
-#line 3309 "Gmsh.y"
+case 347:
+#line 3120 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double)); 
       if(!yyvsp[0].d || (yyvsp[-4].d < yyvsp[-2].d && yyvsp[0].d < 0) || (yyvsp[-4].d > yyvsp[-2].d && yyvsp[0].d > 0)){
@@ -6516,8 +6408,8 @@ case 338:
 	  List_Add(yyval.l, &d);
    ;
     break;}
-case 339:
-#line 3320 "Gmsh.y"
+case 348:
+#line 3131 "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
@@ -6538,8 +6430,8 @@ case 339:
       }
     ;
     break;}
-case 340:
-#line 3340 "Gmsh.y"
+case 349:
+#line 3151 "Gmsh.y"
 {
       yyval.l = List_Create(List_Nbr(yyvsp[0].l), 1, sizeof(double));
       for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){
@@ -6550,8 +6442,8 @@ case 340:
       List_Delete(yyvsp[0].l);
     ;
     break;}
-case 341:
-#line 3350 "Gmsh.y"
+case 350:
+#line 3161 "Gmsh.y"
 {
       yyval.l = List_Create(List_Nbr(yyvsp[0].l), 1, sizeof(double));
       for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){
@@ -6562,11 +6454,9 @@ case 341:
       List_Delete(yyvsp[0].l);
     ;
     break;}
-case 342:
-#line 3360 "Gmsh.y"
+case 351:
+#line 3171 "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));
       for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){
 	Shape *s = (Shape*) List_Pointer(yyvsp[0].l, i);
@@ -6576,8 +6466,8 @@ case 342:
       List_Delete(yyvsp[0].l);
     ;
     break;}
-case 343:
-#line 3372 "Gmsh.y"
+case 352:
+#line 3181 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double));
       Symbol TheSymbol;
@@ -6595,8 +6485,8 @@ case 343:
       Free(yyvsp[-2].c);
     ;
     break;}
-case 344:
-#line 3389 "Gmsh.y"
+case 353:
+#line 3198 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double));
       Symbol TheSymbol;
@@ -6616,8 +6506,8 @@ case 344:
       Free(yyvsp[-2].c);
     ;
     break;}
-case 345:
-#line 3408 "Gmsh.y"
+case 354:
+#line 3217 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double));
       Symbol TheSymbol;
@@ -6642,8 +6532,8 @@ case 345:
       List_Delete(yyvsp[-2].l);
     ;
     break;}
-case 346:
-#line 3432 "Gmsh.y"
+case 355:
+#line 3241 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double));
       Symbol TheSymbol;
@@ -6670,27 +6560,27 @@ case 346:
       List_Delete(yyvsp[-2].l);
     ;
     break;}
-case 347:
-#line 3461 "Gmsh.y"
+case 356:
+#line 3270 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double));
       List_Add(yyval.l, &(yyvsp[0].d));
     ;
     break;}
-case 348:
-#line 3466 "Gmsh.y"
+case 357:
+#line 3275 "Gmsh.y"
 {
       yyval.l = yyvsp[0].l;
     ;
     break;}
-case 349:
-#line 3470 "Gmsh.y"
+case 358:
+#line 3279 "Gmsh.y"
 {
       List_Add(yyval.l, &(yyvsp[0].d));
     ;
     break;}
-case 350:
-#line 3474 "Gmsh.y"
+case 359:
+#line 3283 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){
 	double d;
@@ -6700,20 +6590,20 @@ case 350:
       List_Delete(yyvsp[0].l);
     ;
     break;}
-case 351:
-#line 3487 "Gmsh.y"
+case 360:
+#line 3296 "Gmsh.y"
 {
       yyval.u = CTX.PACK_COLOR((int)yyvsp[-7].d, (int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d);
     ;
     break;}
-case 352:
-#line 3491 "Gmsh.y"
+case 361:
+#line 3300 "Gmsh.y"
 {
       yyval.u = CTX.PACK_COLOR((int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d, 255);
     ;
     break;}
-case 353:
-#line 3503 "Gmsh.y"
+case 362:
+#line 3312 "Gmsh.y"
 {
       int flag;
       yyval.u = Get_ColorForString(ColorString, -1, yyvsp[0].c, &flag);
@@ -6721,8 +6611,8 @@ case 353:
       Free(yyvsp[0].c);
     ;
     break;}
-case 354:
-#line 3510 "Gmsh.y"
+case 363:
+#line 3319 "Gmsh.y"
 {
       unsigned int (*pColOpt)(int num, int action, unsigned int value);
       StringXColor *pColCat;
@@ -6742,14 +6632,14 @@ case 354:
       Free(yyvsp[-4].c); Free(yyvsp[0].c);
     ;
     break;}
-case 355:
-#line 3532 "Gmsh.y"
+case 364:
+#line 3341 "Gmsh.y"
 {
       yyval.l = yyvsp[-1].l;
     ;
     break;}
-case 356:
-#line 3536 "Gmsh.y"
+case 365:
+#line 3345 "Gmsh.y"
 {
       yyval.l = List_Create(256, 10, sizeof(unsigned int));
       GmshColorTable *ct = Get_ColorTable((int)yyvsp[-3].d);
@@ -6762,27 +6652,27 @@ case 356:
       Free(yyvsp[-5].c);
     ;
     break;}
-case 357:
-#line 3551 "Gmsh.y"
+case 366:
+#line 3360 "Gmsh.y"
 {
       yyval.l = List_Create(256, 10, sizeof(unsigned int));
       List_Add(yyval.l, &(yyvsp[0].u));
     ;
     break;}
-case 358:
-#line 3556 "Gmsh.y"
+case 367:
+#line 3365 "Gmsh.y"
 {
       List_Add(yyval.l, &(yyvsp[0].u));
     ;
     break;}
-case 359:
-#line 3563 "Gmsh.y"
+case 368:
+#line 3372 "Gmsh.y"
 {
       yyval.c = yyvsp[0].c;
     ;
     break;}
-case 360:
-#line 3567 "Gmsh.y"
+case 369:
+#line 3376 "Gmsh.y"
 {
       yyval.c = (char *)Malloc(32*sizeof(char));
       time_t now;
@@ -6791,8 +6681,8 @@ case 360:
       yyval.c[strlen(yyval.c) - 1] = '\0';
     ;
     break;}
-case 361:
-#line 3575 "Gmsh.y"
+case 370:
+#line 3384 "Gmsh.y"
 {
       yyval.c = (char *)Malloc((strlen(yyvsp[-3].c)+strlen(yyvsp[-1].c)+1)*sizeof(char));
       strcpy(yyval.c, yyvsp[-3].c);
@@ -6801,8 +6691,8 @@ case 361:
       Free(yyvsp[-1].c);
     ;
     break;}
-case 362:
-#line 3583 "Gmsh.y"
+case 371:
+#line 3392 "Gmsh.y"
 {
       yyval.c = (char *)Malloc((strlen(yyvsp[-1].c)+1)*sizeof(char));
       int i;
@@ -6817,8 +6707,8 @@ case 362:
       Free(yyvsp[-1].c);
     ;
     break;}
-case 363:
-#line 3597 "Gmsh.y"
+case 372:
+#line 3406 "Gmsh.y"
 {
       yyval.c = (char *)Malloc((strlen(yyvsp[-1].c)+1)*sizeof(char));
       int i;
@@ -6833,14 +6723,14 @@ case 363:
       Free(yyvsp[-1].c);
     ;
     break;}
-case 364:
-#line 3611 "Gmsh.y"
+case 373:
+#line 3420 "Gmsh.y"
 {
       yyval.c = yyvsp[-1].c;
     ;
     break;}
-case 365:
-#line 3615 "Gmsh.y"
+case 374:
+#line 3424 "Gmsh.y"
 {
       char tmpstring[1024];
       int i = PrintListOfDouble(yyvsp[-3].c, yyvsp[-1].l, tmpstring);
@@ -6860,8 +6750,8 @@ case 365:
       List_Delete(yyvsp[-1].l);
     ;
     break;}
-case 366:
-#line 3634 "Gmsh.y"
+case 375:
+#line 3443 "Gmsh.y"
 { 
       char* (*pStrOpt)(int num, int action, char *value);
       StringXString *pStrCat;
@@ -6884,8 +6774,8 @@ case 366:
       }
     ;
     break;}
-case 367:
-#line 3656 "Gmsh.y"
+case 376:
+#line 3465 "Gmsh.y"
 { 
       char* (*pStrOpt)(int num, int action, char *value);
       StringXString *pStrCat;
@@ -7130,7 +7020,7 @@ yyerrhandle:
     }
   return 1;
 }
-#line 3679 "Gmsh.y"
+#line 3488 "Gmsh.y"
 
 
 void DeleteSymbol(void *a, void *b){
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index 5a904dc955..6a32f11afc 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -1,5 +1,5 @@
 %{
-// $Id: Gmsh.y,v 1.215 2006-01-06 00:34:29 geuzaine Exp $
+// $Id: Gmsh.y,v 1.216 2006-01-14 22:32:58 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -2213,432 +2213,243 @@ Loop :
 //  E X T R U D E 
 
 Extrude :
-
-  // Points
-    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);
-      TheShape.Type = MSH_POINT;
+    tExtrude VExpr '{' ListOfShapes '}'
+    {
       $$ = List_Create(2, 1, sizeof(Shape));
-      List_Add($$, &TheShape);
-      if(pc){
-	TheShape.Num = pc->Num;
-	TheShape.Type = pc->Typ;
-	List_Add($$, &TheShape);
-      }
+      ExtrudeShapes(TRANSLATE, $4, 
+		    $2[0], $2[1], $2[2], 0., 0., 0., 0., 0., 0., 0.,
+		    NULL, $$);
+      List_Delete($4);
     }
-  | tExtrude tPoint '{' FExpr ',' VExpr ',' VExpr ',' FExpr '}'  tEND
+  | tExtrude '{' VExpr ',' VExpr ',' FExpr '}' '{' ListOfShapes '}'
     {
-      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);
-      TheShape.Type = MSH_POINT;
       $$ = List_Create(2, 1, sizeof(Shape));
-      List_Add($$, &TheShape);
-      if(pc){
-	TheShape.Num = pc->Num;
-	TheShape.Type = pc->Typ;
-	List_Add($$, &TheShape);
-      }
+      ExtrudeShapes(ROTATE, $10, 
+		    0., 0., 0., $3[0], $3[1], $3[2], $5[0], $5[1], $5[2], $7,
+		    NULL, $$);
+      List_Delete($10);
     }
-  | tExtrude tPoint '{' FExpr ',' VExpr ',' VExpr ',' VExpr ',' FExpr'}'  tEND
+  | tExtrude '{' VExpr ',' VExpr ',' VExpr ',' FExpr '}' '{' ListOfShapes '}'
     {
-      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);
-      TheShape.Type = MSH_POINT;
       $$ = List_Create(2, 1, sizeof(Shape));
-      List_Add($$, &TheShape);
-      if(pc){
-	TheShape.Num = pc->Num;
-	TheShape.Type = pc->Typ;
-	List_Add($$, &TheShape);
-      }
+      ExtrudeShapes(TRANSLATE_ROTATE, $12, 
+		    $3[0], $3[1], $3[2], $5[0], $5[1], $5[2], $7[0], $7[1], $7[2], $9,
+		    NULL, $$);
+      List_Delete($12);
     }
-  | tExtrude tPoint '{' FExpr ',' VExpr '}'
+  | tExtrude VExpr '{' ListOfShapes 
     {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     }
-                   '{' ExtrudeParameters '}' tEND
+                       ExtrudeParameters '}'
     {
-      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);
-      TheShape.Type = MSH_POINT;
       $$ = List_Create(2, 1, sizeof(Shape));
-      List_Add($$, &TheShape);
-      if(pc){
-	TheShape.Num = pc->Num;
-	TheShape.Type = pc->Typ;
-	List_Add($$, &TheShape);
-      }
+      ExtrudeShapes(TRANSLATE, $4, 
+		    $2[0], $2[1], $2[2], 0., 0., 0., 0., 0., 0., 0.,
+		    &extr, $$);
+      List_Delete($4);
     }
-  | tExtrude tPoint '{' FExpr ',' VExpr ',' VExpr ',' FExpr '}'
+  | tExtrude '{' VExpr ',' VExpr ',' FExpr '}' '{' ListOfShapes 
     {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     }
-                   '{' ExtrudeParameters '}' tEND
+                                                   ExtrudeParameters '}'
     {
-      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);
-      TheShape.Type = MSH_POINT;
       $$ = List_Create(2, 1, sizeof(Shape));
-      List_Add($$, &TheShape);
-      if(pc){
-	TheShape.Num = pc->Num;
-	TheShape.Type = pc->Typ;
-	List_Add($$, &TheShape);
-      }
+      ExtrudeShapes(ROTATE, $10, 
+		    0., 0., 0., $3[0], $3[1], $3[2], $5[0], $5[1], $5[2], $7,
+		    &extr, $$);
+      List_Delete($10);
     }
-  | tExtrude tPoint '{' FExpr ',' VExpr ',' VExpr ',' VExpr ',' FExpr'}'
+  | tExtrude '{' VExpr ',' VExpr ',' VExpr ',' FExpr '}' '{' ListOfShapes
     {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     }
-                   '{' ExtrudeParameters '}' tEND
+                                                             ExtrudeParameters '}'
     {
-      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);
-      TheShape.Type = MSH_POINT;
       $$ = List_Create(2, 1, sizeof(Shape));
-      List_Add($$, &TheShape);
-      if(pc){
-	TheShape.Num = pc->Num;
-	TheShape.Type = pc->Typ;
-	List_Add($$, &TheShape);
-      }
+      ExtrudeShapes(TRANSLATE_ROTATE, $12, 
+		    $3[0], $3[1], $3[2], $5[0], $5[1], $5[2], $7[0], $7[1], $7[2], $9,
+		    &extr, $$);
+      List_Delete($12);
     }
 
-  // Lines
+  // Deprecated extrude commands (for backward compatibility)
+  | tExtrude tPoint '{' FExpr ',' VExpr '}' tEND
+    {
+      $$ = List_Create(2, 1, sizeof(Shape));
+      ExtrudeShape(TRANSLATE, MSH_POINT, (int)$4, 
+		   $6[0], $6[1], $6[2], 0., 0., 0., 0., 0., 0., 0.,
+		   NULL, $$);
+    }
   | 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);
-      Curve *c = FindCurve(TheShape.Num, THEM);
-      if(!c){
-	//yymsg(WARNING, "Unknown curve %d", TheShape.Num);
-	TheShape.Type = 0;
-      }
-      else{
-	TheShape.Type = c->Typ;
-      }
       $$ = List_Create(2, 1, sizeof(Shape));
-      List_Add($$, &TheShape);
-      if(ps){
-	TheShape.Num = ps->Num;
-	TheShape.Type = ps->Typ;
-	List_Add($$, &TheShape);
-      }
+      ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)$4, 
+		   $6[0], $6[1], $6[2], 0., 0., 0., 0., 0., 0., 0.,
+		   NULL, $$);
+    }
+  | tExtrude tSurface '{' FExpr ',' VExpr '}' tEND
+    {
+      $$ = List_Create(2, 1, sizeof(Shape));
+      ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)$4, 
+		   $6[0], $6[1], $6[2], 0., 0., 0., 0., 0., 0., 0.,
+		   NULL, $$);
+    }
+  | tExtrude tPoint '{' FExpr ',' VExpr ',' VExpr ',' FExpr '}'  tEND
+    {
+      $$ = List_Create(2, 1, sizeof(Shape));
+      ExtrudeShape(ROTATE, MSH_POINT, (int)$4, 
+		   0., 0., 0., $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10,
+		   NULL, $$);
     }
   | tExtrude tLine '{' FExpr ',' VExpr ',' VExpr ',' FExpr '}' tEND
     {
-      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);
-      Curve *c = FindCurve(TheShape.Num, THEM);
-      if(!c){
-	//yymsg(WARNING, "Unknown curve %d", TheShape.Num);
-	TheShape.Type = 0;
-      }
-      else{
-	TheShape.Type = c->Typ;
-      }
       $$ = List_Create(2, 1, sizeof(Shape));
-      List_Add($$, &TheShape);
-      if(ps){
-	TheShape.Num = ps->Num;
-	TheShape.Type = ps->Typ;
-	List_Add($$, &TheShape);
-      }
+      ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)$4, 
+		   0., 0., 0., $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10,
+		   NULL, $$);
+    }
+  | tExtrude tSurface '{' FExpr ',' VExpr ',' VExpr ',' FExpr '}' tEND
+    {
+      $$ = List_Create(2, 1, sizeof(Shape));
+      ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)$4, 
+		   0., 0., 0., $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10,
+		   NULL, $$);
+    }
+  | tExtrude tPoint '{' FExpr ',' VExpr ',' VExpr ',' VExpr ',' FExpr'}'  tEND
+    {
+      $$ = List_Create(2, 1, sizeof(Shape));
+      ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)$4, 
+		   $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10[0], $10[1], $10[2], $12,
+		   NULL, $$);
     }
   | tExtrude tLine '{' FExpr ',' VExpr ',' 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);
-      Curve *c = FindCurve(TheShape.Num, THEM);
-      if(!c){
-	//yymsg(WARNING, "Unknown curve %d", TheShape.Num);
-	TheShape.Type = 0;
-      }
-      else{
-	TheShape.Type = c->Typ;
-      }
       $$ = List_Create(2, 1, sizeof(Shape));
-      List_Add($$, &TheShape);
-      if(ps){
-	TheShape.Num = ps->Num;
-	TheShape.Type = ps->Typ;
-	List_Add($$, &TheShape);
-      }
+      ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)$4, 
+		   $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10[0], $10[1], $10[2], $12,
+		   NULL, $$);
     }
-  | tExtrude tLine '{' FExpr ',' VExpr '}'
+  | tExtrude tSurface '{' FExpr ',' VExpr ',' VExpr ',' VExpr ',' FExpr '}' tEND
+    {
+      $$ = List_Create(2, 1, sizeof(Shape));
+      ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)$4, 
+		   $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10[0], $10[1], $10[2], $12,
+		   NULL, $$);
+    }
+  | tExtrude tPoint '{' FExpr ',' VExpr '}' 
     {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     }
-                   '{' ExtrudeParameters '}' tEND
+                    '{' 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);
-      Curve *c = FindCurve(TheShape.Num, THEM);
-      if(!c){
-	//yymsg(WARNING, "Unknown curve %d", TheShape.Num);
-	TheShape.Type = 0;
-      }
-      else{
-	TheShape.Type = c->Typ;
-      }
       $$ = List_Create(2, 1, sizeof(Shape));
-      List_Add($$, &TheShape);
-      if(ps){
-	TheShape.Num = ps->Num;
-	TheShape.Type = ps->Typ;
-	List_Add($$, &TheShape);
-      }
+      ExtrudeShape(TRANSLATE, MSH_POINT, (int)$4, 
+		   $6[0], $6[1], $6[2], 0., 0., 0., 0., 0., 0., 0.,
+		   &extr, $$);
     }
-  | tExtrude tLine '{' FExpr ',' VExpr ',' VExpr ',' FExpr '}'
+  | tExtrude tLine '{' FExpr ',' VExpr '}'
     {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     }
                    '{' 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);
-      Curve *c = FindCurve(TheShape.Num, THEM);
-      if(!c){
-	//yymsg(WARNING, "Unknown curve %d", TheShape.Num);
-	TheShape.Type = 0;
-      }
-      else{
-	TheShape.Type = c->Typ;
-      }
       $$ = List_Create(2, 1, sizeof(Shape));
-      List_Add($$, &TheShape);
-      if(ps){
-	TheShape.Num = ps->Num;
-	TheShape.Type = ps->Typ;
-	List_Add($$, &TheShape);
-      }
+      ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)$4, 
+		   $6[0], $6[1], $6[2], 0., 0., 0., 0., 0., 0., 0.,
+		   &extr, $$);
     }
-  | tExtrude tLine '{' FExpr ',' VExpr ',' VExpr ',' VExpr ',' FExpr '}'
+  | tExtrude tSurface '{' FExpr ',' VExpr '}' 
     {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     }
-                   '{' ExtrudeParameters '}' tEND
+                      '{' 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);
-      Curve *c = FindCurve(TheShape.Num, THEM);
-      if(!c){
-	//yymsg(WARNING, "Unknown curve %d", TheShape.Num);
-	TheShape.Type = 0;
-      }
-      else{
-	TheShape.Type = c->Typ;
-      }
       $$ = List_Create(2, 1, sizeof(Shape));
-      List_Add($$, &TheShape);
-      if(ps){
-	TheShape.Num = ps->Num;
-	TheShape.Type = ps->Typ;
-	List_Add($$, &TheShape);
-      }
+      ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)$4, 
+		   $6[0], $6[1], $6[2], 0., 0., 0., 0., 0., 0., 0.,
+		   &extr, $$);
     }
-
-  // Surfaces
-
-  | tExtrude tSurface '{' FExpr ',' VExpr '}' tEND
+  | tExtrude tPoint '{' FExpr ',' VExpr ',' VExpr ',' FExpr '}'
     {
-      Volume *pv;
-      Shape TheShape;
-      TheShape.Num = Extrude_ProtudeSurface(TRANSLATE, (int)$4, $6[0], $6[1], $6[2],
-					    0., 0., 0., 0., 0., 0., 0., 
-					    &pv, NULL);
-      Surface *s = FindSurface(TheShape.Num, THEM);
-      if(!s){
-	//yymsg(WARNING, "Unknown surface %d", TheShape.Num);
-	TheShape.Type = 0;
-      }
-      else{
-	TheShape.Type = s->Typ;
-      }
-      $$ = List_Create(2, 1, sizeof(Shape));
-      List_Add($$, &TheShape);
-      if(pv){
-	TheShape.Num = pv->Num;
-	TheShape.Type = pv->Typ;
-	List_Add($$, &TheShape);
-      }
+      extr.mesh.ExtrudeMesh = false;
+      extr.mesh.Recombine = false;
     }
-  | tExtrude tSurface '{' FExpr ',' VExpr ',' VExpr ',' FExpr '}' tEND
+                    '{' ExtrudeParameters '}' tEND
     {
-      Volume *pv;
-      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,
-					    &pv, NULL);
-      Surface *s = FindSurface(TheShape.Num, THEM);
-      if(!s){
-	//yymsg(WARNING, "Unknown surface %d", TheShape.Num);
-	TheShape.Type = 0;
-      }
-      else{
-	TheShape.Type = s->Typ;
-      }
       $$ = List_Create(2, 1, sizeof(Shape));
-      List_Add($$, &TheShape);
-      if(pv){
-	TheShape.Num = pv->Num;
-	TheShape.Type = pv->Typ;
-	List_Add($$, &TheShape);
-      }
+      ExtrudeShape(ROTATE, MSH_POINT, (int)$4, 
+		   0., 0., 0., $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10,
+		   &extr, $$);
     }
-  | tExtrude tSurface '{' FExpr ',' VExpr ',' VExpr ',' VExpr ',' FExpr '}' tEND
+  | tExtrude tLine '{' FExpr ',' VExpr ',' VExpr ',' FExpr '}'
+    {
+      extr.mesh.ExtrudeMesh = false;
+      extr.mesh.Recombine = false;
+    }
+                   '{' ExtrudeParameters '}' tEND
     {
-      Volume *pv;
-      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,
-					    &pv, NULL);
-      Surface *s = FindSurface(TheShape.Num, THEM);
-      if(!s){
-	//yymsg(WARNING, "Unknown surface %d", TheShape.Num);
-	TheShape.Type = 0;
-      }
-      else{
-	TheShape.Type = s->Typ;
-      }
       $$ = List_Create(2, 1, sizeof(Shape));
-      List_Add($$, &TheShape);
-      if(pv){
-	TheShape.Num = pv->Num;
-	TheShape.Type = pv->Typ;
-	List_Add($$, &TheShape);
-      }
+      ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)$4, 
+		   0., 0., 0., $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10,
+		   &extr, $$);
     }
-  | tExtrude tSurface '{' FExpr ',' VExpr '}'
+  | tExtrude tSurface '{' FExpr ',' VExpr ',' VExpr ',' FExpr '}'
     {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     }
                       '{' ExtrudeParameters '}' tEND
     {
-      Volume *pv;
-      Shape TheShape;
-      TheShape.Num = Extrude_ProtudeSurface(TRANSLATE, (int)$4, $6[0], $6[1], $6[2],
-					    0., 0., 0., 0., 0., 0., 0., 
-					    &pv, &extr);
-      Surface *s = FindSurface(TheShape.Num, THEM);
-      if(!s){
-	//yymsg(WARNING, "Unknown surface %d", TheShape.Num);
-	TheShape.Type = 0;
-      }
-      else{
-	TheShape.Type = s->Typ;
-      }
       $$ = List_Create(2, 1, sizeof(Shape));
-      List_Add($$, &TheShape);
-      if(pv){
-	TheShape.Num = pv->Num;
-	TheShape.Type = pv->Typ;
-	List_Add($$, &TheShape);
-      }
+      ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)$4, 
+		   0., 0., 0., $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10,
+		   &extr, $$);
     }
-  | tExtrude tSurface '{' FExpr ',' VExpr ',' VExpr ',' FExpr '}' 
+  | tExtrude tPoint '{' FExpr ',' VExpr ',' VExpr ',' VExpr ',' FExpr'}' 
     {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     }
-  
-                      '{' ExtrudeParameters '}' tEND
+                    '{' ExtrudeParameters '}' tEND
     {
-      Volume *pv;
-      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, 
-					    &pv, &extr);
-      Surface *s = FindSurface(TheShape.Num, THEM);
-      if(!s){
-	//yymsg(WARNING, "Unknown surface %d", TheShape.Num);
-	TheShape.Type = 0;
-      }
-      else{
-	TheShape.Type = s->Typ;
-      }
       $$ = List_Create(2, 1, sizeof(Shape));
-      List_Add($$, &TheShape);
-      if(pv){
-	TheShape.Num = pv->Num;
-	TheShape.Type = pv->Typ;
-	List_Add($$, &TheShape);
-      }
+      ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)$4, 
+		   $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10[0], $10[1], $10[2], $12,
+		   &extr, $$);
     }
-  | tExtrude tSurface '{' FExpr ',' VExpr ',' VExpr ',' VExpr ',' FExpr '}'
+  | tExtrude tLine '{' FExpr ',' VExpr ',' VExpr ',' VExpr ',' FExpr '}' 
+    {
+      extr.mesh.ExtrudeMesh = false;
+      extr.mesh.Recombine = false;
+    }
+                   '{' ExtrudeParameters '}' tEND
+    {
+      $$ = List_Create(2, 1, sizeof(Shape));
+      ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)$4, 
+		   $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10[0], $10[1], $10[2], $12,
+		   &extr, $$);
+    }
+  | tExtrude tSurface '{' FExpr ',' VExpr ',' VExpr ',' VExpr ',' FExpr '}' 
     {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     }
-  
                       '{' ExtrudeParameters '}' tEND
     {
-      Volume *pv;
-      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,
-					    &pv, &extr);
-      Surface *s = FindSurface(TheShape.Num, THEM);
-      if(!s){
-	//yymsg(WARNING, "Unknown surface %d", TheShape.Num);
-	TheShape.Type = 0;
-      }
-      else{
-	TheShape.Type = s->Typ;
-      }
       $$ = List_Create(2, 1, sizeof(Shape));
-      List_Add($$, &TheShape);
-      if(pv){
-	TheShape.Num = pv->Num;
-	TheShape.Type = pv->Typ;
-	List_Add($$, &TheShape);
-      }
+      ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)$4, 
+		   $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10[0], $10[1], $10[2], $12,
+		   &extr, $$);
     }
+  // End of deprecated Extrude commands
 ;
 
 ExtrudeParameters :
@@ -3358,8 +3169,6 @@ FExpr_Multi :
     }
   | 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));
       for(int i = 0; i < List_Nbr($1); i++){
 	Shape *s = (Shape*) List_Pointer($1, i);
diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp
index ae826d2efd..e88c80e49b 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.247 2006-01-06 00:35:43 geuzaine Exp $
+ * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.248 2006-01-14 22:32:58 geuzaine Exp $
  */
 
 #define FLEX_SCANNER
@@ -1026,7 +1026,7 @@ char *yytext;
 #line 1 "Gmsh.l"
 #define INITIAL 0
 #line 2 "Gmsh.l"
-// $Id: Gmsh.yy.cpp,v 1.247 2006-01-06 00:35:43 geuzaine Exp $
+// $Id: Gmsh.yy.cpp,v 1.248 2006-01-14 22:32:58 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
diff --git a/TODO b/TODO
index d344369997..43cb57fda6 100644
--- a/TODO
+++ b/TODO
@@ -1,4 +1,4 @@
-$Id: TODO,v 1.114 2006-01-14 17:13:14 geuzaine Exp $
+$Id: TODO,v 1.115 2006-01-14 22:32:58 geuzaine Exp $
 
 ********************************************************************
 
@@ -23,13 +23,6 @@ On Windows WITHOUT Cygwin:
 
 ********************************************************************
 
-introduce new syntax for Extrude that matches the syntax for the other
-transformations ("Extrude {...} { Line{...}; <Layers{...};> }"). would
-allow multiple extrusions in one command + nicer ret[] = Extrude{}{};
-syntax
-
-********************************************************************
-
 allow mixed 1st/2nd order meshes (2nd order only where the geometry
 requires it). Add this as an advanced option since it will create
 meshes with hanging nodes.
diff --git a/benchmarks/extrude/point_new.geo b/benchmarks/extrude/point_new.geo
new file mode 100644
index 0000000000..975c80e9b2
--- /dev/null
+++ b/benchmarks/extrude/point_new.geo
@@ -0,0 +1,26 @@
+L = 0.25;
+lclev = L / 4;
+
+Point(1) = {0.0*L, 0.0*L,   0.0, lclev};
+
+Extrude {L,0,0}{ Point{1}; }{ Layers { {5,10}, {1,1}, {0.7,1} } ; Recombine; }
+Extrude {0,L/2,0}{ Line{1}; } { Layers { {5,10}, {2,2}, {0.7,1} } ; Recombine;  }
+Extrude {0,0,L}{ Surface{5}; } { Layers { {5,10}, {3,3}, {0.7,1} } ; Recombine; }
+
+Point(1000) = {1, 0, 0, lclev};
+Extrude { {0,0,1} , {0.85,0,0} , -2*Pi/3 }{ Point{1000}; } {
+  Layers { {5,10}, {1,1}, {0.7,1} } ; Recombine; 
+}
+
+Extrude { {0,0,1} , {0.85,0,0} , -2*Pi/3 }{ Point{1001}; } {
+  Layers { {5,10}, {1,1}, {0.7,1} } ; Recombine; 
+}
+Extrude { {0,0,1} , {0.85,0,0} , -2*Pi/3 }{ Point{1003}; } {
+  Layers { {5,10}, {1,1}, {0.7,1} } ; Recombine; 
+}
+
+Line Loop(31) = {29,30,28};
+Plane Surface(32) = {31};
+Extrude {0,0,L/2}{ Surface{32}; } {
+  Layers { {5,10}, {1,1}, {0.7,1} } ; Recombine; 
+}
diff --git a/demos/cone.geo b/demos/cone.geo
index d1d28fd2f8..fa0399150e 100644
--- a/demos/cone.geo
+++ b/demos/cone.geo
@@ -7,9 +7,9 @@ Line(2) = {2,6};
 Line(3) = {6,1};
 Line Loop(4) = {2,3,1};
 Plane Surface(5) = {4};
-Extrude Surface {5, {0,0,1}, {0,0,0}, Pi/2};
-Extrude Surface {17, {0,0,1}, {0,0,0}, Pi/2};
-Extrude Surface {29, {0,0,1}, {0,0,0}, Pi/2};
-Extrude Surface {41, {0,0,1}, {0,0,0}, Pi/2};
+Extrude {{0,0,1}, {0,0,0}, Pi/2} { Surface{5}; }
+Extrude {{0,0,1}, {0,0,0}, Pi/2} { Surface{17}; }
+Extrude {{0,0,1}, {0,0,0}, Pi/2} { Surface{29}; }
+Extrude {{0,0,1}, {0,0,0}, Pi/2} { Surface{41}; }
 Physical Surface(53) = {12,24,36,48,52,40,28,16};
 ExteriorShell = 53;
diff --git a/demos/cube.geo b/demos/cube.geo
index 9a6d2d796b..edd17731ae 100644
--- a/demos/cube.geo
+++ b/demos/cube.geo
@@ -9,7 +9,9 @@ Line(3) = {2,1};
 Line(4) = {1,4};
 Line Loop(5) = {2,3,4,1};
 Plane Surface(6) = {5};
-Extrude Surface { 6, {0,0.0,1} };
+Extrude {0,0.0,1} {
+  Surface{6};
+}
 
 // try netgen:
 // Mesh.Algorithm3D = 4;
diff --git a/demos/hex.geo b/demos/hex.geo
index b8a702e4a1..0e589c2acc 100644
--- a/demos/hex.geo
+++ b/demos/hex.geo
@@ -1,10 +1,10 @@
 // an example of a purely hexahedral mesh
 
 lc = 0.3;
-Point(1) = {0.0,0.0,0.0,lc};
-Point(2) = {1,0.0,0.0,lc};
-Point(3) = {1,1,0.0,0.5*lc};
-Point(4) = {0,1,0.0,lc};
+Point(1) = {0,0,0,lc};
+Point(2) = {1,0,0,lc};
+Point(3) = {1,1,0,lc};
+Point(4) = {0,1,0,lc};
 Line(1) = {4,3};
 Line(2) = {3,2};
 Line(3) = {2,1};
@@ -15,4 +15,20 @@ Plane Surface(6) = {5};
 Transfinite Line{1:4} = 5;
 Transfinite Surface{6} = {1,2,3,4};
 Recombine Surface{6};
-Extrude Surface { 6, {0,0.0,1} } { Layers{5,1}; Recombine;};
+Extrude {0,0,1} {
+  Surface{6}; Layers{5,1}; Recombine;
+}
+
+
+// we could do the same using only extrusions:
+
+Point(100) = {2,0,0,lc};
+l[] = Extrude {1,0,0}{
+  Point{100}; Layers{4,1};
+};
+s[] = Extrude {0,1,0}{
+  Line{l[1]}; Layers{4,1}; Recombine;
+};
+Extrude {0,0,1}{
+  Surface{s[1]}; Layers{4,1}; Recombine;
+};
diff --git a/demos/piece-extr-rec.geo b/demos/piece-extr-rec.geo
index 593a690eca..6de76bb42c 100644
--- a/demos/piece-extr-rec.geo
+++ b/demos/piece-extr-rec.geo
@@ -86,15 +86,13 @@ For i In {0:4}
 EndFor
 
 Recombine Surface {47,49,91};
-Extrude Surface {47, {0,0,0.2}}{ Layers{ ones[], ones[], ep[] }; Recombine; };
-Extrude Surface {49, {0,0,0.2}}{ Layers{ ones[], ones[], ep[] }; Recombine; };
-Extrude Surface {91, {0,0,0.2}}{ Layers{ ones[{0:4}],ones[{0:4}], ep2[] }; Recombine; };
-Extrude Surface {47, {0,0,-0.2}}{ Layers{ ones[{0:4}],ones[{0:4}], ep2[] }; Recombine; }; 
-
-Physical Volume(1) = 1 ;
-
-Physical Surface(2) = {288,49,215,211,207,203,199,195,191,187,183,179,175,171,
-		       167,163,159,155,151,147,143,139,135,271,267,263,259,255,
-		       251,247,243,239,235,231,227,223,219,372,343,62,301,330,
-		       313,74,355,367,86,325,321,82,363,359,78,317,91,47,347,
-		       66,371,90,305,329,309,70,351};
+
+Extrude {0,0,0.2}{ 
+  Surface{47,49}; Layers{ ones[], ep[] }; Recombine; 
+}
+Extrude {0,0,0.2}{
+  Surface{91}; Layers{ ones[{0:4}], ep2[] }; Recombine; 
+}
+Extrude {0,0,-0.2}{
+  Surface{47}; Layers{ ones[{0:4}], ep2[] }; Recombine; 
+}
diff --git a/demos/piece-extr.geo b/demos/piece-extr.geo
index be6d982bb5..31e98a8e1d 100644
--- a/demos/piece-extr.geo
+++ b/demos/piece-extr.geo
@@ -85,15 +85,12 @@ For i In {0:4}
   ep2[i]=2*ep[i]; 
 EndFor
 
-Extrude Surface {47, {0,0,0.2}}{ Layers{ ones[], ones[], ep[] }; };
-Extrude Surface {49, {0,0,0.2}}{ Layers{ ones[], ones[], ep[] }; };
-Extrude Surface {91, {0,0,0.2}}{ Layers{ ones[{0:4}],ones[{0:4}], ep2[] }; };
-Extrude Surface {47, {0,0,-0.2}}{ Layers{ ones[{0:4}],ones[{0:4}], ep2[] }; }; 
-
-Physical Volume(1) = 1 ;
-
-Physical Surface(2) = {288,49,215,211,207,203,199,195,191,187,183,179,175,171,
-		       167,163,159,155,151,147,143,139,135,271,267,263,259,255,
-		       251,247,243,239,235,231,227,223,219,372,343,62,301,330,
-		       313,74,355,367,86,325,321,82,363,359,78,317,91,47,347,
-		       66,371,90,305,329,309,70,351};
+Extrude {0,0,0.2}{ 
+  Surface{47,49}; Layers{ ones[], ep[] };
+}
+Extrude {0,0,0.2}{
+  Surface{91}; Layers{ ones[{0:4}], ep2[] };
+}
+Extrude {0,0,-0.2}{
+  Surface{47}; Layers{ ones[{0:4}], ep2[] };
+}
diff --git a/demos/piece.geo b/demos/piece.geo
index 7d63e9f281..5685a9d4bd 100644
--- a/demos/piece.geo
+++ b/demos/piece.geo
@@ -79,7 +79,12 @@ Line Loop(48) = -{-2,-1,5,6,4,3,31,-26,-25,29,30,28,27,35,-20,-19,
   23,24,22,21,34,-14,-13,17,18,16,15,33,-8,-7,11,12,10,9,32};
 Plane Surface(49) = {48,46};
 
-Extrude Surface {47, {0,0,0.2}};
-Extrude Surface {49, {0,0,0.2}};
-Extrude Surface {91, {0,0,0.2}};
-Extrude Surface {47, {0,0,-0.2}};
+Extrude {0,0,0.2}{ 
+  Surface{47,49};
+}
+Extrude {0,0,0.2}{ 
+  Surface{91};
+}
+Extrude {0,0,-0.2}{
+  Surface{47};
+}
diff --git a/doc/VERSIONS b/doc/VERSIONS
index 36e95de79e..2430f031a8 100644
--- a/doc/VERSIONS
+++ b/doc/VERSIONS
@@ -1,10 +1,11 @@
-$Id: VERSIONS,v 1.351 2006-01-14 16:24:55 geuzaine Exp $
+$Id: VERSIONS,v 1.352 2006-01-14 22:32:58 geuzaine Exp $
 
 New since 1.61: new option to draw color gradients in the background;
 enhanced perspective projection mode; new "lasso" selection mode (same
 as "lasso" zoom, but in selection mode); new "invert selection" button
 in the visibility browser; new snapping grid when adding points in the
-GUI; nicer normal smoothing; various small bug fixes and enhancements.
+GUI; nicer normal smoothing; new extrude syntax (old syntax still
+available, but deprecated); various small bug fixes and enhancements.
 
 New in 1.61: added support for second order (curved) elements in
 post-processor; new version (1.4) of post-processing file formats; new
diff --git a/doc/texinfo/gmsh.texi b/doc/texinfo/gmsh.texi
index 481ab4102a..c5b2aa11ee 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.195 2006-01-06 00:34:34 geuzaine Exp $
+@c $Id: gmsh.texi,v 1.196 2006-01-14 22:32:58 geuzaine Exp $
 @c
 @c Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 @c
@@ -1654,31 +1654,40 @@ can be extended in order to also extrude the mesh):
 
 @var{extrude}:
 @ftable @code
-@item Extrude Point | Line | Surface @{ @var{expression}, @{ @var{expression-list} @} @};
-Extrudes the @var{expression}-th point, line or surface using a
-translation. The @var{expression-list} should contain three
-@w{@var{expression}s} giving the X, Y and Z components of the translation
-vector.
-
-@item Extrude Point | Line | Surface @{ @var{expression}, @{ @var{expression-list} @}, @{ @var{expression-list} @}, @var{expression} @};
-Extrudes the @var{expression}-th point, line or surface using a
-rotation. The first @var{expression-list} should contain three
-@w{@var{expression}s} giving the X, Y and Z direction of the rotation axis;
-the second @var{expression-list} should contain three @w{@var{expression}s}
-giving the X, Y and Z components of any point on this axis; the last
-@var{expression} should contain the rotation angle (in radians).
-
-@item Extrude Point | Line | Surface @{ @var{expression}, @{ @var{expression-list} @}, @{ @var{expression-list} @}, @{ @var{expression-list} @}, @var{expression} @};
-Extrudes the @var{expression}-th point, line or surface using a translation
-combined with a rotation. The first @var{expression-list} should contain
-three @w{@var{expression}s} giving the X, Y and Z components of the
-translation vector; the second @var{expression-list} should contain three
-@w{@var{expression}s} giving the X, Y and Z direction of the rotation axis;
-the third @var{expression-list} should contain three @w{@var{expression}s}
-giving the X, Y and Z components of any point on this axis; the last
+@item Extrude @{ @var{expression-list} @}  @{ @var{extrude-list} @}
+Extrudes all elementary entities (points, lines or surfaces) in
+@var{extrude-list} using a translation. The @var{expression-list} should
+contain three @w{@var{expression}s} giving the X, Y and Z components of
+the translation vector.
+
+@item Extrude @{ @{ @var{expression-list} @}, @{ @var{expression-list} @}, @var{expression} @} @{ @var{extrude-list} @}
+Extrudes all elementary entities (points, lines or surfaces) in
+@var{extrude-list} using a rotation. The first @var{expression-list}
+should contain three @w{@var{expression}s} giving the X, Y and Z
+direction of the rotation axis; the second @var{expression-list} should
+contain three @w{@var{expression}s} giving the X, Y and Z components of
+any point on this axis; the last @var{expression} should contain the
+rotation angle (in radians).
+
+@item Extrude @{ @{ @var{expression-list} @}, @{ @var{expression-list} @}, @{ @var{expression-list} @}, @var{expression} @} @{ @var{extrude-list} @}
+Extrudes all elementary entities (points, lines or surfaces) in
+@var{extrude-list} using a translation combined with a rotation. The
+first @var{expression-list} should contain three @w{@var{expression}s}
+giving the X, Y and Z components of the translation vector; the second
+@var{expression-list} should contain three @w{@var{expression}s} giving
+the X, Y and Z direction of the rotation axis; the third
+@var{expression-list} should contain three @w{@var{expression}s} giving
+the X, Y and Z components of any point on this axis; the last
 @var{expression} should contain the rotation angle (in radians).
 @end ftable
 
+@noindent with
+
+@example
+@var{extrude-list}: 
+  Point | Line | Surface @{ @var{expression-list} @}; @dots{}
+@end example
+
 @c .........................................................................
 @c Transformations
 @c .........................................................................
@@ -1985,7 +1994,7 @@ numbers are listed in @var{expression-list}. The new value is given by
 @cindex Mesh, elliptic
 
 @ftable @code
-@item Extrude Point | Line | Surface @{ @var{expression}, @{ @var{expression-list} @} @} @{ @var{layers}; @dots{} @};
+@item Extrude @{ @var{expression-list} @} @{ @var{extrude-list} @var{layers} @}
 Extrudes both the geometry and the mesh using a translation
 (@pxref{Extrusions}). The @var{layers} option determines how the mesh is
 extruded and has the following syntax:
@@ -1994,7 +2003,7 @@ extruded and has the following syntax:
 @var{layers}:
 @group
   Layers @{ @{ @var{expression-list} @}, < @{ @var{expression-list} @}, >
-           @{ @var{expression-list} @} @} | Recombine
+           @{ @var{expression-list} @} @} | Recombine; @dots{}
 @end group
 @end example
 
@@ -2016,11 +2025,11 @@ into quadrangles when possible.  For surface extrusions, the
 @code{Recombine} option will recombine tetrahedra into prisms, hexahedra or
 pyramids.
 
-@item Extrude Point | Line | Surface @{ @var{expression}, @{ @var{expression-list} @}, @{ @var{expression-list} @}, @var{expression} @} @{ @var{layers}; @dots{} @};
+@item Extrude @{ @{ @var{expression-list} @}, @{ @var{expression-list} @}, @var{expression} @} @{ @var{extrude-list} @var{layers} @}
 Extrudes both the geometry and the mesh using a rotation
 (@pxref{Extrusions}). The @var{layers} option is defined as above.
 
-@item Extrude Point | Line | Surface @{ @var{expression}, @{ @var{expression-list} @}, @{ @var{expression-list} @}, @{ @var{expression-list} @}, @var{expression} @} @{ @var{layers}; @dots{} @};
+@item Extrude @{ @{ @var{expression-list} @}, @{ @var{expression-list} @}, @{ @var{expression-list} @}, @var{expression} @} @{ @var{extrude-list} @var{layers} @}
 Extrudes both the geometry and the mesh using a combined translation and
 rotation (@pxref{Extrusions}). The @var{layers} option is defined as
 above.
diff --git a/tutorial/t2.geo b/tutorial/t2.geo
index a3dbd3b90d..7fb50cd18b 100644
--- a/tutorial/t2.geo
+++ b/tutorial/t2.geo
@@ -69,7 +69,7 @@ Volume(119) = {118};
 // following command extrudes the surface 11 along the z axis and
 // automatically creates a new volume:
 
-Extrude Surface { 11, {0, 0, h} };
+Extrude {0, 0, h} { Surface{11}; }
 
 // All these geometrical transformations automatically generate new
 // elementary entities. The following command permits to manually
diff --git a/tutorial/t3.geo b/tutorial/t3.geo
index b33f336ef2..810a53b076 100644
--- a/tutorial/t3.geo
+++ b/tutorial/t3.geo
@@ -19,9 +19,9 @@ Include "t1.geo";
 
 h = 0.1;
 
-Extrude Surface { 6, {0,0,h} } { 
-  Layers { {8,4,2,1}, {9000:9003}, {0.25,0.5,0.75,1} }; 
-};
+Extrude {0,0,h} { 
+  Surface{6}; Layers{ {8,4,2,1}, {9000:9003}, {0.25,0.5,0.75,1} }; 
+}
 
 // The extrusion can also be performed with a rotation instead of a
 // translation, and the resulting mesh can be recombined into prisms
@@ -29,16 +29,16 @@ Extrude Surface { 6, {0,0,h} } {
 // ({0,1,0}), an axis point ({-0.1,0,0.1}) and a rotation angle
 // (-Pi/2):
 
-Extrude Surface { 122, {0,1,0} , {-0.1,0,0.1} , -Pi/2 } { 
-  Recombine; Layers { 7, 9004, 1 }; 
-};
+Extrude { {0,1,0} , {-0.1,0,0.1} , -Pi/2 } { 
+  Surface{122}; Layers { 7, 9004, 1 }; Recombine; 
+}
 
 // Note that a translation ({-2*h,0,0}) and a rotation ({1,0,0},
 // {0,0.15,0.25}, Pi/2) can also be combined:
 
-aa[] = Extrude Surface {news-1, {-2*h,0,0}, {1,0,0} , {0,0.15,0.25} , Pi/2}{ 
-  Layers { 10, 1 }; Recombine; 
-}; ;
+aa[] = Extrude { {-2*h,0,0}, {1,0,0} , {0,0.15,0.25} , Pi/2 } { 
+  Surface{news-1}; Layers{ 10, 1 }; Recombine; 
+};
 
 // In this last extrusion command we didn't specify an explicit
 // volume number (which is equivalent to setting it to "0"),
-- 
GitLab