Skip to content
Snippets Groups Projects
Select Git revision
  • 9829b70d81aca1bcbcc6a3d162aa2bf9ec9a8ac7
  • master default
  • cgnsUnstructured
  • partitioning
  • poppler
  • HighOrderBLCurving
  • gmsh_3_0_4
  • gmsh_3_0_3
  • gmsh_3_0_2
  • gmsh_3_0_1
  • gmsh_3_0_0
  • gmsh_2_16_0
  • gmsh_2_15_0
  • gmsh_2_14_1
  • gmsh_2_14_0
  • gmsh_2_13_2
  • gmsh_2_13_1
  • gmsh_2_12_0
  • gmsh_2_11_0
  • gmsh_2_10_1
  • gmsh_2_10_0
  • gmsh_2_9_3
  • gmsh_2_9_2
  • gmsh_2_9_1
  • gmsh_2_9_0
  • gmsh_2_8_6
26 results

Gmsh.tab.cpp

Blame
  • Forked from gmsh / gmsh
    14298 commits behind the upstream repository.
    Gmsh.tab.cpp 347.39 KiB
    /* A Bison parser, made by GNU Bison 2.3.  */
    
    /* Skeleton implementation for Bison's Yacc-like parsers in C
    
       Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
       Free Software Foundation, Inc.
    
       This program is free software; you can redistribute it and/or modify
       it under the terms of the GNU General Public License as published by
       the Free Software Foundation; either version 2, or (at your option)
       any later version.
    
       This program is distributed in the hope that it will be useful,
       but WITHOUT ANY WARRANTY; without even the implied warranty of
       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
       GNU General Public License for more details.
    
       You should have received a copy of the GNU General Public License
       along with this program; if not, write to the Free Software
       Foundation, Inc., 51 Franklin Street, Fifth Floor,
       Boston, MA 02110-1301, USA.  */
    
    /* As a special exception, you may create a larger work that contains
       part or all of the Bison parser skeleton and distribute that work
       under terms of your choice, so long as that work isn't itself a
       parser generator using the skeleton or a modified version thereof
       as a parser skeleton.  Alternatively, if you modify or redistribute
       the parser skeleton itself, you may (at your option) remove this
       special exception, which will cause the skeleton and the resulting
       Bison output files to be licensed under the GNU General Public
       License without this special exception.
    
       This special exception was added by the Free Software Foundation in
       version 2.2 of Bison.  */
    
    /* C LALR(1) parser skeleton written by Richard Stallman, by
       simplifying the original so-called "semantic" parser.  */
    
    /* All symbols defined below should begin with yy or YY, to avoid
       infringing on user name space.  This should be done even for local
       variables, as they might otherwise be expanded by user macros.
       There are some unavoidable exceptions within include files to
       define necessary library symbols; they are noted "INFRINGES ON
       USER NAME SPACE" below.  */
    
    /* Identify Bison output.  */
    #define YYBISON 1
    
    /* Bison version.  */
    #define YYBISON_VERSION "2.3"
    
    /* Skeleton name.  */
    #define YYSKELETON_NAME "yacc.c"
    
    /* Pure parsers.  */
    #define YYPURE 0
    
    /* Using locations.  */
    #define YYLSP_NEEDED 0
    
    /* Substitute the variable and function names.  */
    #define yyparse gmsh_yyparse
    #define yylex   gmsh_yylex
    #define yyerror gmsh_yyerror
    #define yylval  gmsh_yylval
    #define yychar  gmsh_yychar
    #define yydebug gmsh_yydebug
    #define yynerrs gmsh_yynerrs
    
    
    /* Tokens.  */
    #ifndef YYTOKENTYPE
    # define YYTOKENTYPE
       /* Put the tokens into the symbol table, so that GDB and other debuggers
          know about them.  */
       enum yytokentype {
         tDOUBLE = 258,
         tSTRING = 259,
         tBIGSTR = 260,
         tEND = 261,
         tAFFECT = 262,
         tDOTS = 263,
         tPi = 264,
         tMPI_Rank = 265,
         tMPI_Size = 266,
         tEuclidian = 267,
         tCoordinates = 268,
         tExp = 269,
         tLog = 270,
         tLog10 = 271,
         tSqrt = 272,
         tSin = 273,
         tAsin = 274,
         tCos = 275,
         tAcos = 276,
         tTan = 277,
         tRand = 278,
         tAtan = 279,
         tAtan2 = 280,
         tSinh = 281,
         tCosh = 282,
         tTanh = 283,
         tFabs = 284,
         tFloor = 285,
         tCeil = 286,
         tFmod = 287,
         tModulo = 288,
         tHypot = 289,
         tPrintf = 290,
         tSprintf = 291,
         tStrCat = 292,
         tStrPrefix = 293,
         tStrRelative = 294,
         tBoundingBox = 295,
         tDraw = 296,
         tToday = 297,
         tSyncModel = 298,
         tCreateTopology = 299,
         tDistanceFunction = 300,
         tPoint = 301,
         tCircle = 302,
         tEllipse = 303,
         tLine = 304,
         tSphere = 305,
         tPolarSphere = 306,
         tSurface = 307,
         tSpline = 308,
         tVolume = 309,
         tCharacteristic = 310,
         tLength = 311,
         tParametric = 312,
         tElliptic = 313,
         tPlane = 314,
         tRuled = 315,
         tTransfinite = 316,
         tComplex = 317,
         tPhysical = 318,
         tCompound = 319,
         tPeriodic = 320,
         tUsing = 321,
         tPlugin = 322,
         tDegenerated = 323,
         tRotate = 324,
         tTranslate = 325,
         tSymmetry = 326,
         tDilate = 327,
         tExtrude = 328,
         tLevelset = 329,
         tLoop = 330,
         tRecombine = 331,
         tSmoother = 332,
         tSplit = 333,
         tDelete = 334,
         tCoherence = 335,
         tIntersect = 336,
         tLayers = 337,
         tHole = 338,
         tAlias = 339,
         tAliasWithOptions = 340,
         tText2D = 341,
         tText3D = 342,
         tInterpolationScheme = 343,
         tTime = 344,
         tCombine = 345,
         tBSpline = 346,
         tBezier = 347,
         tNurbs = 348,
         tNurbsOrder = 349,
         tNurbsKnots = 350,
         tColor = 351,
         tColorTable = 352,
         tFor = 353,
         tIn = 354,
         tEndFor = 355,
         tIf = 356,
         tEndIf = 357,
         tExit = 358,
         tField = 359,
         tReturn = 360,
         tCall = 361,
         tFunction = 362,
         tShow = 363,
         tHide = 364,
         tGetValue = 365,
         tGetEnv = 366,
         tGetString = 367,
         tGMSH_MAJOR_VERSION = 368,
         tGMSH_MINOR_VERSION = 369,
         tGMSH_PATCH_VERSION = 370,
         tHomRank = 371,
         tHomGen = 372,
         tHomCut = 373,
         tHomSeq = 374,
         tAFFECTDIVIDE = 375,
         tAFFECTTIMES = 376,
         tAFFECTMINUS = 377,
         tAFFECTPLUS = 378,
         tOR = 379,
         tAND = 380,
         tNOTEQUAL = 381,
         tEQUAL = 382,
         tGREATEROREQUAL = 383,
         tLESSOREQUAL = 384,
         UNARYPREC = 385,
         tMINUSMINUS = 386,
         tPLUSPLUS = 387
       };
    #endif
    /* Tokens.  */
    #define tDOUBLE 258
    #define tSTRING 259
    #define tBIGSTR 260
    #define tEND 261
    #define tAFFECT 262
    #define tDOTS 263
    #define tPi 264
    #define tMPI_Rank 265
    #define tMPI_Size 266
    #define tEuclidian 267
    #define tCoordinates 268
    #define tExp 269
    #define tLog 270
    #define tLog10 271
    #define tSqrt 272
    #define tSin 273
    #define tAsin 274
    #define tCos 275
    #define tAcos 276
    #define tTan 277
    #define tRand 278
    #define tAtan 279
    #define tAtan2 280
    #define tSinh 281
    #define tCosh 282
    #define tTanh 283
    #define tFabs 284
    #define tFloor 285
    #define tCeil 286
    #define tFmod 287
    #define tModulo 288
    #define tHypot 289
    #define tPrintf 290
    #define tSprintf 291
    #define tStrCat 292
    #define tStrPrefix 293
    #define tStrRelative 294
    #define tBoundingBox 295
    #define tDraw 296
    #define tToday 297
    #define tSyncModel 298
    #define tCreateTopology 299
    #define tDistanceFunction 300
    #define tPoint 301
    #define tCircle 302
    #define tEllipse 303
    #define tLine 304
    #define tSphere 305
    #define tPolarSphere 306
    #define tSurface 307
    #define tSpline 308
    #define tVolume 309
    #define tCharacteristic 310
    #define tLength 311
    #define tParametric 312
    #define tElliptic 313
    #define tPlane 314
    #define tRuled 315
    #define tTransfinite 316
    #define tComplex 317
    #define tPhysical 318
    #define tCompound 319
    #define tPeriodic 320
    #define tUsing 321
    #define tPlugin 322
    #define tDegenerated 323
    #define tRotate 324
    #define tTranslate 325
    #define tSymmetry 326
    #define tDilate 327
    #define tExtrude 328
    #define tLevelset 329
    #define tLoop 330
    #define tRecombine 331
    #define tSmoother 332
    #define tSplit 333
    #define tDelete 334
    #define tCoherence 335
    #define tIntersect 336
    #define tLayers 337
    #define tHole 338
    #define tAlias 339
    #define tAliasWithOptions 340
    #define tText2D 341
    #define tText3D 342
    #define tInterpolationScheme 343
    #define tTime 344
    #define tCombine 345
    #define tBSpline 346
    #define tBezier 347
    #define tNurbs 348
    #define tNurbsOrder 349
    #define tNurbsKnots 350
    #define tColor 351
    #define tColorTable 352
    #define tFor 353
    #define tIn 354
    #define tEndFor 355
    #define tIf 356
    #define tEndIf 357
    #define tExit 358
    #define tField 359
    #define tReturn 360
    #define tCall 361
    #define tFunction 362
    #define tShow 363
    #define tHide 364
    #define tGetValue 365
    #define tGetEnv 366
    #define tGetString 367
    #define tGMSH_MAJOR_VERSION 368
    #define tGMSH_MINOR_VERSION 369
    #define tGMSH_PATCH_VERSION 370
    #define tHomRank 371
    #define tHomGen 372
    #define tHomCut 373
    #define tHomSeq 374
    #define tAFFECTDIVIDE 375
    #define tAFFECTTIMES 376
    #define tAFFECTMINUS 377
    #define tAFFECTPLUS 378
    #define tOR 379
    #define tAND 380
    #define tNOTEQUAL 381
    #define tEQUAL 382
    #define tGREATEROREQUAL 383
    #define tLESSOREQUAL 384
    #define UNARYPREC 385
    #define tMINUSMINUS 386
    #define tPLUSPLUS 387
    
    
    
    
    /* Copy the first part of user declarations.  */
    #line 1 "Gmsh.y"
    
    // Gmsh - Copyright (C) 1997-2010 C. Geuzaine, J.-F. Remacle
    //
    // See the LICENSE.txt file for license information. Please report all
    // bugs and problems to <gmsh@geuz.org>.
    
    #include <string.h>
    #include <stdarg.h>
    #include <time.h>
    #include "GmshConfig.h"
    #include "GmshMessage.h"
    #include "fullMatrix.h"
    #include "MallocUtils.h"
    #include "ListUtils.h"
    #include "TreeUtils.h"
    #include "StringUtils.h"
    #include "Numeric.h"
    #include "Context.h"
    #include "GModel.h"
    #include "Geo.h"
    #include "GeoInterpolation.h"
    #include "Options.h"
    #include "Colors.h"
    #include "Parser.h"
    #include "OpenFile.h"
    #include "CommandLine.h"
    #include "FunctionManager.h"
    #include "ColorTable.h"
    #include "OS.h"
    #include "CreateFile.h"
    #include "gmshSurface.h"
    #include "gmshLevelset.h"
    
    #if defined(HAVE_MESH)
    #include "Generator.h"
    #include "Field.h"
    #include "BackgroundMesh.h"
    #endif
    
    #if defined(HAVE_POST)
    #include "PView.h"
    #include "PViewDataList.h"
    #endif
    
    #if defined(HAVE_PLUGINS)
    #include "PluginManager.h"
    #endif
    
    #if defined(HAVE_OPENGL)
    #include "drawContext.h"
    #endif
    
    #if defined(HAVE_KBIPACK)
    #include "Homology.h"
    #endif
    
    // Global parser variables
    std::string gmsh_yyname;
    int gmsh_yyerrorstate = 0;
    int gmsh_yyviewindex = 0;
    std::map<std::string, std::vector<double> > gmsh_yysymbols;
    
    // Static parser variables (accessible only in this file)
    static std::map<std::string, std::string > gmsh_yystringsymbols;
    #if defined(HAVE_POST)
    static PViewDataList *ViewData;
    #endif
    static std::vector<double> ViewCoord;
    static std::vector<double> *ViewValueList = 0;
    static int *ViewNumList = 0;
    static ExtrudeParams extr;
    static int curPhysDim = 0;
    static gmshSurface *myGmshSurface = 0;
    #define MAX_RECUR_LOOPS 100
    static int ImbricatedLoop = 0;
    static fpos_t yyposImbricatedLoopsTab[MAX_RECUR_LOOPS];
    static int yylinenoImbricatedLoopsTab[MAX_RECUR_LOOPS];
    static double LoopControlVariablesTab[MAX_RECUR_LOOPS][3];
    static const char *LoopControlVariablesNameTab[MAX_RECUR_LOOPS];
    
    void yyerror(const char *s);
    void yymsg(int level, const char *fmt, ...);
    void skip_until(const char *skip, const char *until);
    int PrintListOfDouble(char *format, List_T *list, char *buffer);
    fullMatrix<double> ListOfListOfDouble2Matrix(List_T *list);
    
    
    /* Enabling traces.  */
    #ifndef YYDEBUG
    # define YYDEBUG 0
    #endif
    
    /* Enabling verbose error messages.  */
    #ifdef YYERROR_VERBOSE
    # undef YYERROR_VERBOSE
    # define YYERROR_VERBOSE 1
    #else
    # define YYERROR_VERBOSE 0
    #endif
    
    /* Enabling the token table.  */
    #ifndef YYTOKEN_TABLE
    # define YYTOKEN_TABLE 0
    #endif
    
    #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
    typedef union YYSTYPE
    #line 88 "Gmsh.y"
    {
      char *c;
      int i;
      unsigned int u;
      double d;
      double v[5];
      Shape s;
      List_T *l;
    }
    /* Line 193 of yacc.c.  */
    #line 465 "Gmsh.tab.cpp"
    	YYSTYPE;
    # define yystype YYSTYPE /* obsolescent; will be withdrawn */
    # define YYSTYPE_IS_DECLARED 1
    # define YYSTYPE_IS_TRIVIAL 1
    #endif
    
    
    
    /* Copy the second part of user declarations.  */
    
    
    /* Line 216 of yacc.c.  */
    #line 478 "Gmsh.tab.cpp"
    
    #ifdef short
    # undef short
    #endif
    
    #ifdef YYTYPE_UINT8
    typedef YYTYPE_UINT8 yytype_uint8;
    #else
    typedef unsigned char yytype_uint8;
    #endif
    
    #ifdef YYTYPE_INT8
    typedef YYTYPE_INT8 yytype_int8;
    #elif (defined __STDC__ || defined __C99__FUNC__ \
         || defined __cplusplus || defined _MSC_VER)
    typedef signed char yytype_int8;
    #else
    typedef short int yytype_int8;
    #endif
    
    #ifdef YYTYPE_UINT16
    typedef YYTYPE_UINT16 yytype_uint16;
    #else
    typedef unsigned short int yytype_uint16;
    #endif
    
    #ifdef YYTYPE_INT16
    typedef YYTYPE_INT16 yytype_int16;
    #else
    typedef short int yytype_int16;
    #endif
    
    #ifndef YYSIZE_T
    # ifdef __SIZE_TYPE__
    #  define YYSIZE_T __SIZE_TYPE__
    # elif defined size_t
    #  define YYSIZE_T size_t
    # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
         || defined __cplusplus || defined _MSC_VER)
    #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
    #  define YYSIZE_T size_t
    # else
    #  define YYSIZE_T unsigned int
    # endif
    #endif
    
    #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
    
    #ifndef YY_
    # if defined YYENABLE_NLS && YYENABLE_NLS
    #  if ENABLE_NLS
    #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
    #   define YY_(msgid) dgettext ("bison-runtime", msgid)
    #  endif
    # endif
    # ifndef YY_
    #  define YY_(msgid) msgid
    # endif
    #endif
    
    /* Suppress unused-variable warnings by "using" E.  */
    #if ! defined lint || defined __GNUC__
    # define YYUSE(e) ((void) (e))
    #else
    # define YYUSE(e) /* empty */
    #endif
    
    /* Identity function, used to suppress warnings about constant conditions.  */
    #ifndef lint
    # define YYID(n) (n)
    #else
    #if (defined __STDC__ || defined __C99__FUNC__ \
         || defined __cplusplus || defined _MSC_VER)
    static int
    YYID (int i)
    #else
    static int
    YYID (i)
        int i;
    #endif
    {
      return i;
    }
    #endif
    
    #if ! defined yyoverflow || YYERROR_VERBOSE
    
    /* The parser invokes alloca or malloc; define the necessary symbols.  */
    
    # ifdef YYSTACK_USE_ALLOCA
    #  if YYSTACK_USE_ALLOCA
    #   ifdef __GNUC__
    #    define YYSTACK_ALLOC __builtin_alloca
    #   elif defined __BUILTIN_VA_ARG_INCR
    #    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
    #   elif defined _AIX
    #    define YYSTACK_ALLOC __alloca
    #   elif defined _MSC_VER
    #    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
    #    define alloca _alloca
    #   else
    #    define YYSTACK_ALLOC alloca
    #    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
         || defined __cplusplus || defined _MSC_VER)
    #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
    #     ifndef _STDLIB_H
    #      define _STDLIB_H 1
    #     endif
    #    endif
    #   endif
    #  endif
    # endif
    
    # ifdef YYSTACK_ALLOC
       /* Pacify GCC's `empty if-body' warning.  */
    #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
    #  ifndef YYSTACK_ALLOC_MAXIMUM
        /* The OS might guarantee only one guard page at the bottom of the stack,
           and a page size can be as small as 4096 bytes.  So we cannot safely
           invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
           to allow for a few compiler-allocated temporary stack slots.  */
    #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
    #  endif
    # else
    #  define YYSTACK_ALLOC YYMALLOC
    #  define YYSTACK_FREE YYFREE
    #  ifndef YYSTACK_ALLOC_MAXIMUM
    #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
    #  endif
    #  if (defined __cplusplus && ! defined _STDLIB_H \
           && ! ((defined YYMALLOC || defined malloc) \
    	     && (defined YYFREE || defined free)))
    #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
    #   ifndef _STDLIB_H
    #    define _STDLIB_H 1
    #   endif
    #  endif
    #  ifndef YYMALLOC
    #   define YYMALLOC malloc
    #   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
         || defined __cplusplus || defined _MSC_VER)
    void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
    #   endif
    #  endif
    #  ifndef YYFREE
    #   define YYFREE free
    #   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
         || defined __cplusplus || defined _MSC_VER)
    void free (void *); /* INFRINGES ON USER NAME SPACE */
    #   endif
    #  endif
    # endif
    #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
    
    
    #if (! defined yyoverflow \
         && (! defined __cplusplus \
    	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
    
    /* A type that is properly aligned for any stack member.  */
    union yyalloc
    {
      yytype_int16 yyss;
      YYSTYPE yyvs;
      };
    
    /* The size of the maximum gap between one aligned stack and the next.  */
    # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
    
    /* The size of an array large to enough to hold all stacks, each with
       N elements.  */
    # define YYSTACK_BYTES(N) \
         ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
          + YYSTACK_GAP_MAXIMUM)
    
    /* Copy COUNT objects from FROM to TO.  The source and destination do
       not overlap.  */
    # ifndef YYCOPY
    #  if defined __GNUC__ && 1 < __GNUC__
    #   define YYCOPY(To, From, Count) \
          __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
    #  else
    #   define YYCOPY(To, From, Count)		\
          do					\
    	{					\
    	  YYSIZE_T yyi;				\
    	  for (yyi = 0; yyi < (Count); yyi++)	\
    	    (To)[yyi] = (From)[yyi];		\
    	}					\
          while (YYID (0))
    #  endif
    # endif
    
    /* Relocate STACK from its old location to the new one.  The
       local variables YYSIZE and YYSTACKSIZE give the old and new number of
       elements in the stack, and YYPTR gives the new location of the
       stack.  Advance YYPTR to a properly aligned location for the next
       stack.  */
    # define YYSTACK_RELOCATE(Stack)					\
        do									\
          {									\
    	YYSIZE_T yynewbytes;						\
    	YYCOPY (&yyptr->Stack, Stack, yysize);				\
    	Stack = &yyptr->Stack;						\
    	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
    	yyptr += yynewbytes / sizeof (*yyptr);				\
          }									\
        while (YYID (0))
    
    #endif
    
    /* YYFINAL -- State number of the termination state.  */
    #define YYFINAL  5
    /* YYLAST -- Last index in YYTABLE.  */
    #define YYLAST   6875
    
    /* YYNTOKENS -- Number of terminals.  */
    #define YYNTOKENS  153
    /* YYNNTS -- Number of nonterminals.  */
    #define YYNNTS  82
    /* YYNRULES -- Number of rules.  */
    #define YYNRULES  388
    /* YYNRULES -- Number of states.  */
    #define YYNSTATES  1392
    
    /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
    #define YYUNDEFTOK  2
    #define YYMAXUTOK   387
    
    #define YYTRANSLATE(YYX)						\
      ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
    
    /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
    static const yytype_uint8 yytranslate[] =
    {
           0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,   138,     2,   148,     2,   137,     2,     2,
         143,   144,   135,   133,   149,   134,   147,   136,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
         129,     2,   130,   124,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,   145,     2,   146,   142,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,   150,     2,   151,   152,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
           5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
          15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
          25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
          35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
          45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
          55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
          65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
          75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
          85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
          95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
         105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
         115,   116,   117,   118,   119,   120,   121,   122,   123,   125,
         126,   127,   128,   131,   132,   139,   140,   141
    };
    
    #if YYDEBUG
    /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
       YYRHS.  */
    static const yytype_uint16 yyprhs[] =
    {
           0,     0,     3,     5,     8,     9,    12,    14,    16,    18,
          20,    22,    24,    26,    28,    30,    32,    34,    36,    38,
          40,    42,    44,    46,    48,    51,    57,    65,    73,    83,
          90,    97,   104,   105,   108,   111,   114,   117,   120,   122,
         126,   128,   132,   133,   134,   145,   147,   151,   152,   166,
         168,   172,   173,   189,   198,   213,   214,   221,   223,   225,
         227,   229,   231,   233,   235,   240,   248,   258,   265,   272,
         276,   283,   288,   295,   305,   312,   322,   328,   337,   346,
         358,   365,   375,   381,   389,   399,   409,   421,   431,   441,
         443,   445,   446,   452,   453,   456,   464,   465,   475,   482,
         490,   495,   503,   512,   521,   529,   537,   549,   558,   567,
         568,   578,   587,   597,   601,   606,   617,   625,   633,   642,
         652,   666,   667,   677,   686,   694,   703,   704,   714,   720,
         732,   738,   748,   753,   763,   773,   775,   777,   778,   781,
         788,   795,   802,   809,   818,   833,   850,   863,   872,   881,
         888,   903,   908,   915,   922,   926,   931,   937,   941,   945,
         950,   955,   959,   967,   975,   979,   987,   991,   994,   997,
        1000,  1016,  1019,  1022,  1029,  1038,  1047,  1058,  1060,  1063,
        1065,  1069,  1074,  1076,  1082,  1094,  1108,  1109,  1117,  1118,
        1132,  1133,  1149,  1150,  1157,  1166,  1175,  1184,  1197,  1210,
        1223,  1238,  1253,  1268,  1269,  1282,  1283,  1296,  1297,  1310,
        1311,  1328,  1329,  1346,  1347,  1364,  1365,  1384,  1385,  1404,
        1405,  1424,  1426,  1429,  1435,  1443,  1453,  1456,  1466,  1467,
        1469,  1470,  1474,  1475,  1477,  1478,  1481,  1482,  1485,  1493,
        1500,  1509,  1515,  1521,  1528,  1535,  1548,  1559,  1570,  1581,
        1592,  1595,  1599,  1611,  1623,  1635,  1647,  1649,  1653,  1656,
        1659,  1662,  1666,  1670,  1674,  1678,  1682,  1686,  1690,  1694,
        1698,  1702,  1706,  1710,  1714,  1718,  1724,  1729,  1734,  1739,
        1744,  1749,  1754,  1759,  1764,  1769,  1774,  1781,  1786,  1791,
        1796,  1801,  1806,  1811,  1818,  1825,  1832,  1837,  1842,  1847,
        1852,  1857,  1862,  1867,  1872,  1877,  1882,  1887,  1894,  1899,
        1904,  1909,  1914,  1919,  1924,  1931,  1938,  1945,  1950,  1952,
        1954,  1956,  1958,  1960,  1962,  1964,  1966,  1972,  1977,  1982,
        1985,  1991,  1995,  2002,  2007,  2015,  2022,  2024,  2027,  2030,
        2034,  2038,  2050,  2060,  2068,  2076,  2078,  2082,  2084,  2086,
        2089,  2093,  2098,  2104,  2106,  2108,  2111,  2115,  2119,  2125,
        2130,  2132,  2134,  2138,  2145,  2147,  2149,  2153,  2157,  2167,
        2175,  2177,  2183,  2187,  2194,  2196,  2200,  2202,  2204,  2208,
        2215,  2217,  2219,  2224,  2231,  2238,  2243,  2248,  2253
    };
    
    /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
    static const yytype_int16 yyrhs[] =
    {
         154,     0,    -1,   155,    -1,     1,     6,    -1,    -1,   155,
         156,    -1,   159,    -1,   158,    -1,   177,    -1,   181,    -1,
         186,    -1,   190,    -1,   191,    -1,   192,    -1,   195,    -1,
         216,    -1,   217,    -1,   218,    -1,   219,    -1,   194,    -1,
         193,    -1,   189,    -1,   220,    -1,   130,    -1,   130,   130,
          -1,    35,   143,     5,   144,     6,    -1,    35,   143,     5,
         144,   157,   233,     6,    -1,    35,   143,     5,   149,   229,
         144,     6,    -1,    35,   143,     5,   149,   229,   144,   157,
         233,     6,    -1,     4,     5,   150,   160,   151,     6,    -1,
          84,     4,   145,   221,   146,     6,    -1,    85,     4,   145,
         221,   146,     6,    -1,    -1,   160,   163,    -1,   160,   167,
          -1,   160,   170,    -1,   160,   172,    -1,   160,   173,    -1,
         221,    -1,   161,   149,   221,    -1,   221,    -1,   162,   149,
         221,    -1,    -1,    -1,     4,   164,   143,   161,   144,   165,
         150,   162,   151,     6,    -1,   233,    -1,   166,   149,   233,
          -1,    -1,    86,   143,   221,   149,   221,   149,   221,   144,
         168,   150,   166,   151,     6,    -1,   233,    -1,   169,   149,
         233,    -1,    -1,    87,   143,   221,   149,   221,   149,   221,
         149,   221,   144,   171,   150,   169,   151,     6,    -1,    88,
         150,   225,   151,   150,   225,   151,     6,    -1,    88,   150,
         225,   151,   150,   225,   151,   150,   225,   151,   150,   225,
         151,     6,    -1,    -1,    89,   174,   150,   162,   151,     6,
          -1,     7,    -1,   123,    -1,   122,    -1,   121,    -1,   120,
          -1,   141,    -1,   140,    -1,     4,   175,   221,     6,    -1,
           4,   145,   221,   146,   175,   221,     6,    -1,     4,   145,
         150,   229,   151,   146,   175,   226,     6,    -1,     4,   145,
         146,     7,   226,     6,    -1,     4,   145,   146,   123,   226,
           6,    -1,     4,   176,     6,    -1,     4,   145,   221,   146,
         176,     6,    -1,     4,     7,   234,     6,    -1,     4,   147,
           4,     7,   234,     6,    -1,     4,   145,   221,   146,   147,
           4,     7,   234,     6,    -1,     4,   147,     4,   175,   221,
           6,    -1,     4,   145,   221,   146,   147,     4,   175,   221,
           6,    -1,     4,   147,     4,   176,     6,    -1,     4,   145,
         221,   146,   147,     4,   176,     6,    -1,     4,   147,    96,
         147,     4,     7,   230,     6,    -1,     4,   145,   221,   146,
         147,    96,   147,     4,     7,   230,     6,    -1,     4,   147,
          97,     7,   231,     6,    -1,     4,   145,   221,   146,   147,
          97,     7,   231,     6,    -1,     4,   104,     7,   221,     6,
          -1,   104,   145,   221,   146,     7,     4,     6,    -1,   104,
         145,   221,   146,   147,     4,     7,   221,     6,    -1,   104,
         145,   221,   146,   147,     4,     7,   234,     6,    -1,   104,
         145,   221,   146,   147,     4,     7,   150,   229,   151,     6,
          -1,    67,   143,     4,   144,   147,     4,     7,   221,     6,
          -1,    67,   143,     4,   144,   147,     4,     7,   234,     6,
          -1,   221,    -1,   234,    -1,    -1,    99,    50,   150,   221,
         151,    -1,    -1,    59,   223,    -1,    46,   143,   221,   144,
           7,   223,     6,    -1,    -1,    63,    46,   182,   143,   178,
         144,     7,   226,     6,    -1,    55,    56,   226,     7,   221,
           6,    -1,    49,   143,   221,   144,     7,   226,     6,    -1,
          68,    49,   226,     6,    -1,    53,   143,   221,   144,     7,
         226,     6,    -1,    47,   143,   221,   144,     7,   226,   180,
           6,    -1,    48,   143,   221,   144,     7,   226,   180,     6,
          -1,    91,   143,   221,   144,     7,   226,     6,    -1,    92,
         143,   221,   144,     7,   226,     6,    -1,    93,   143,   221,
         144,     7,   226,    95,   226,    94,   221,     6,    -1,    49,
          75,   143,   221,   144,     7,   226,     6,    -1,    64,    49,
         143,   221,   144,     7,   226,     6,    -1,    -1,    63,    49,
         183,   143,   178,   144,     7,   226,     6,    -1,    59,    52,
         143,   221,   144,     7,   226,     6,    -1,    60,    52,   143,
         221,   144,     7,   226,   179,     6,    -1,    12,    13,     6,
          -1,    13,    52,   221,     6,    -1,    57,    52,   143,   221,
         144,     7,     5,     5,     5,     6,    -1,    50,   143,   221,
         144,     7,   226,     6,    -1,    51,   143,   221,   144,     7,
         226,     6,    -1,    52,    75,   143,   221,   144,     7,   226,
           6,    -1,    64,    52,   143,   221,   144,     7,   226,   211,
           6,    -1,    64,    52,   143,   221,   144,     7,   226,     4,
         150,   225,   151,   211,     6,    -1,    -1,    63,    52,   184,
         143,   178,   144,     7,   226,     6,    -1,    62,    54,   143,
         221,   144,     7,   226,     6,    -1,    54,   143,   221,   144,
           7,   226,     6,    -1,    64,    54,   143,   221,   144,     7,
         226,     6,    -1,    -1,    63,    54,   185,   143,   178,   144,
           7,   226,     6,    -1,    70,   223,   150,   187,   151,    -1,
          69,   150,   223,   149,   223,   149,   221,   151,   150,   187,
         151,    -1,    71,   223,   150,   187,   151,    -1,    72,   150,
         223,   149,   221,   151,   150,   187,   151,    -1,     4,   150,
         187,   151,    -1,    81,    49,   150,   229,   151,    52,   150,
         221,   151,    -1,    78,    49,   143,   221,   144,   150,   229,
         151,     6,    -1,   188,    -1,   186,    -1,    -1,   188,   181,
          -1,   188,    46,   150,   229,   151,     6,    -1,   188,    49,
         150,   229,   151,     6,    -1,   188,    52,   150,   229,   151,
           6,    -1,   188,    54,   150,   229,   151,     6,    -1,    74,
          59,   143,   221,   144,     7,   226,     6,    -1,    74,    59,
         143,   221,   144,     7,   150,   223,   149,   223,   149,   229,
         151,     6,    -1,    74,    59,   143,   221,   144,     7,   150,
         223,   149,   223,   149,   223,   149,   229,   151,     6,    -1,
          74,    50,   143,   221,   144,     7,   150,   223,   149,   229,
         151,     6,    -1,    74,     4,   143,   221,   144,     7,   226,
           6,    -1,    74,     4,   143,   221,   144,     7,     5,     6,
          -1,    74,     4,   150,   221,   151,     6,    -1,    74,     4,
         143,   221,   144,     7,   150,   223,   149,   223,   149,   229,
         151,     6,    -1,    79,   150,   188,   151,    -1,    79,   104,
         145,   221,   146,     6,    -1,    79,     4,   145,   221,   146,
           6,    -1,    79,     4,     6,    -1,    79,     4,     4,     6,
          -1,    96,   230,   150,   188,   151,    -1,   108,     5,     6,
          -1,   109,     5,     6,    -1,   108,   150,   188,   151,    -1,
         109,   150,   188,   151,    -1,     4,   234,     6,    -1,     4,
           4,   145,   221,   146,   233,     6,    -1,     4,     4,     4,
         145,   221,   146,     6,    -1,     4,   221,     6,    -1,    67,
         143,     4,   144,   147,     4,     6,    -1,    90,     4,     6,
          -1,   103,     6,    -1,    43,     6,    -1,    40,     6,    -1,
          40,   150,   221,   149,   221,   149,   221,   149,   221,   149,
         221,   149,   221,   151,     6,    -1,    41,     6,    -1,    44,
           6,    -1,    98,   143,   221,     8,   221,   144,    -1,    98,
         143,   221,     8,   221,     8,   221,   144,    -1,    98,     4,
          99,   150,   221,     8,   221,   151,    -1,    98,     4,    99,
         150,   221,     8,   221,     8,   221,   151,    -1,   100,    -1,
         107,     4,    -1,   105,    -1,   106,     4,     6,    -1,   101,
         143,   221,   144,    -1,   102,    -1,    73,   223,   150,   188,
         151,    -1,    73,   150,   223,   149,   223,   149,   221,   151,
         150,   188,   151,    -1,    73,   150,   223,   149,   223,   149,
         223,   149,   221,   151,   150,   188,   151,    -1,    -1,    73,
         223,   150,   188,   196,   209,   151,    -1,    -1,    73,   150,
         223,   149,   223,   149,   221,   151,   150,   188,   197,   209,
         151,    -1,    -1,    73,   150,   223,   149,   223,   149,   223,
         149,   221,   151,   150,   188,   198,   209,   151,    -1,    -1,
          73,   150,   188,   199,   209,   151,    -1,    73,    46,   150,
         221,   149,   223,   151,     6,    -1,    73,    49,   150,   221,
         149,   223,   151,     6,    -1,    73,    52,   150,   221,   149,
         223,   151,     6,    -1,    73,    46,   150,   221,   149,   223,
         149,   223,   149,   221,   151,     6,    -1,    73,    49,   150,
         221,   149,   223,   149,   223,   149,   221,   151,     6,    -1,
          73,    52,   150,   221,   149,   223,   149,   223,   149,   221,
         151,     6,    -1,    73,    46,   150,   221,   149,   223,   149,
         223,   149,   223,   149,   221,   151,     6,    -1,    73,    49,
         150,   221,   149,   223,   149,   223,   149,   223,   149,   221,
         151,     6,    -1,    73,    52,   150,   221,   149,   223,   149,
         223,   149,   223,   149,   221,   151,     6,    -1,    -1,    73,
          46,   150,   221,   149,   223,   151,   200,   150,   209,   151,
           6,    -1,    -1,    73,    49,   150,   221,   149,   223,   151,
         201,   150,   209,   151,     6,    -1,    -1,    73,    52,   150,
         221,   149,   223,   151,   202,   150,   209,   151,     6,    -1,
          -1,    73,    46,   150,   221,   149,   223,   149,   223,   149,
         221,   151,   203,   150,   209,   151,     6,    -1,    -1,    73,
          49,   150,   221,   149,   223,   149,   223,   149,   221,   151,
         204,   150,   209,   151,     6,    -1,    -1,    73,    52,   150,
         221,   149,   223,   149,   223,   149,   221,   151,   205,   150,
         209,   151,     6,    -1,    -1,    73,    46,   150,   221,   149,
         223,   149,   223,   149,   223,   149,   221,   151,   206,   150,
         209,   151,     6,    -1,    -1,    73,    49,   150,   221,   149,
         223,   149,   223,   149,   223,   149,   221,   151,   207,   150,
         209,   151,     6,    -1,    -1,    73,    52,   150,   221,   149,
         223,   149,   223,   149,   223,   149,   221,   151,   208,   150,
         209,   151,     6,    -1,   210,    -1,   209,   210,    -1,    82,
         150,   221,   151,     6,    -1,    82,   150,   226,   149,   226,
         151,     6,    -1,    82,   150,   226,   149,   226,   149,   226,
         151,     6,    -1,    76,     6,    -1,    83,   143,   221,   144,
           7,   226,    66,   221,     6,    -1,    -1,     4,    -1,    -1,
          66,     4,   221,    -1,    -1,     4,    -1,    -1,     7,   226,
          -1,    -1,     7,   221,    -1,    61,    49,   227,     7,   221,
         212,     6,    -1,    61,    52,   227,   214,   213,     6,    -1,
          58,    52,   150,   221,   151,     7,   226,     6,    -1,    61,
          54,   227,   214,     6,    -1,    76,    52,   227,   215,     6,
          -1,    77,    52,   226,     7,   221,     6,    -1,    65,    49,
         226,     7,   226,     6,    -1,    65,    52,   221,   150,   229,
         151,     7,   221,   150,   229,   151,     6,    -1,    46,   150,
         229,   151,    99,    52,   150,   221,   151,     6,    -1,    49,
         150,   229,   151,    99,    52,   150,   221,   151,     6,    -1,
          49,   150,   229,   151,    99,    54,   150,   221,   151,     6,
          -1,    52,   150,   229,   151,    99,    54,   150,   221,   151,
           6,    -1,    80,     6,    -1,    80,     4,     6,    -1,   116,
         143,   233,   144,     7,   150,   226,   149,   226,   151,     6,
          -1,   117,   143,   233,   144,     7,   150,   226,   149,   226,
         151,     6,    -1,   118,   143,   233,   144,     7,   150,   226,
         149,   226,   151,     6,    -1,   119,   143,   233,   144,     7,
         150,   226,   149,   226,   151,     6,    -1,   222,    -1,   143,
         221,   144,    -1,   134,   221,    -1,   133,   221,    -1,   138,
         221,    -1,   221,   134,   221,    -1,   221,   133,   221,    -1,
         221,   135,   221,    -1,   221,   136,   221,    -1,   221,   137,
         221,    -1,   221,   142,   221,    -1,   221,   129,   221,    -1,
         221,   130,   221,    -1,   221,   132,   221,    -1,   221,   131,
         221,    -1,   221,   128,   221,    -1,   221,   127,   221,    -1,
         221,   126,   221,    -1,   221,   125,   221,    -1,   221,   124,
         221,     8,   221,    -1,    14,   143,   221,   144,    -1,    15,
         143,   221,   144,    -1,    16,   143,   221,   144,    -1,    17,
         143,   221,   144,    -1,    18,   143,   221,   144,    -1,    19,
         143,   221,   144,    -1,    20,   143,   221,   144,    -1,    21,
         143,   221,   144,    -1,    22,   143,   221,   144,    -1,    24,
         143,   221,   144,    -1,    25,   143,   221,   149,   221,   144,
          -1,    26,   143,   221,   144,    -1,    27,   143,   221,   144,
          -1,    28,   143,   221,   144,    -1,    29,   143,   221,   144,
          -1,    30,   143,   221,   144,    -1,    31,   143,   221,   144,
          -1,    32,   143,   221,   149,   221,   144,    -1,    33,   143,
         221,   149,   221,   144,    -1,    34,   143,   221,   149,   221,
         144,    -1,    23,   143,   221,   144,    -1,    14,   145,   221,
         146,    -1,    15,   145,   221,   146,    -1,    16,   145,   221,
         146,    -1,    17,   145,   221,   146,    -1,    18,   145,   221,
         146,    -1,    19,   145,   221,   146,    -1,    20,   145,   221,
         146,    -1,    21,   145,   221,   146,    -1,    22,   145,   221,
         146,    -1,    24,   145,   221,   146,    -1,    25,   145,   221,
         149,   221,   146,    -1,    26,   145,   221,   146,    -1,    27,
         145,   221,   146,    -1,    28,   145,   221,   146,    -1,    29,
         145,   221,   146,    -1,    30,   145,   221,   146,    -1,    31,
         145,   221,   146,    -1,    32,   145,   221,   149,   221,   146,
          -1,    33,   145,   221,   149,   221,   146,    -1,    34,   145,
         221,   149,   221,   146,    -1,    23,   145,   221,   146,    -1,
           3,    -1,     9,    -1,    10,    -1,    11,    -1,   113,    -1,
         114,    -1,   115,    -1,     4,    -1,     4,   152,   150,   221,
         151,    -1,     4,   145,   221,   146,    -1,   148,     4,   145,
         146,    -1,     4,   176,    -1,     4,   145,   221,   146,   176,
          -1,     4,   147,     4,    -1,     4,   145,   221,   146,   147,
           4,    -1,     4,   147,     4,   176,    -1,     4,   145,   221,
         146,   147,     4,   176,    -1,   110,   143,   233,   149,   221,
         144,    -1,   224,    -1,   134,   223,    -1,   133,   223,    -1,
         223,   134,   223,    -1,   223,   133,   223,    -1,   150,   221,
         149,   221,   149,   221,   149,   221,   149,   221,   151,    -1,
         150,   221,   149,   221,   149,   221,   149,   221,   151,    -1,
         150,   221,   149,   221,   149,   221,   151,    -1,   143,   221,
         149,   221,   149,   221,   144,    -1,   226,    -1,   225,   149,
         226,    -1,   221,    -1,   228,    -1,   150,   151,    -1,   150,
         229,   151,    -1,   134,   150,   229,   151,    -1,   221,   135,
         150,   229,   151,    -1,   226,    -1,     5,    -1,   134,   228,
          -1,   221,   135,   228,    -1,   221,     8,   221,    -1,   221,
           8,   221,     8,   221,    -1,    46,   150,   221,   151,    -1,
         186,    -1,   195,    -1,     4,   145,   146,    -1,     4,   145,
         150,   229,   151,   146,    -1,   221,    -1,   228,    -1,   229,
         149,   221,    -1,   229,   149,   228,    -1,   150,   221,   149,
         221,   149,   221,   149,   221,   151,    -1,   150,   221,   149,
         221,   149,   221,   151,    -1,     4,    -1,     4,   147,    96,
         147,     4,    -1,   150,   232,   151,    -1,     4,   145,   221,
         146,   147,    97,    -1,   230,    -1,   232,   149,   230,    -1,
         234,    -1,     4,    -1,     4,   147,     4,    -1,     4,   145,
         221,   146,   147,     4,    -1,     5,    -1,    42,    -1,   111,
         143,   233,   144,    -1,   112,   143,   233,   149,   233,   144,
          -1,    37,   143,   233,   149,   233,   144,    -1,    38,   143,
         233,   144,    -1,    39,   143,   233,   144,    -1,    36,   143,
         233,   144,    -1,    36,   143,   233,   149,   229,   144,    -1
    };
    
    /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
    static const yytype_uint16 yyrline[] =
    {
           0,   159,   159,   160,   165,   167,   171,   172,   173,   174,
         175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
         185,   186,   187,   191,   195,   202,   207,   221,   234,   262,
         276,   287,   302,   307,   308,   309,   310,   311,   315,   317,
         322,   324,   330,   434,   329,   452,   459,   470,   469,   487,
         494,   505,   504,   521,   538,   561,   560,   574,   575,   576,
         577,   578,   582,   583,   590,   616,   643,   683,   693,   701,
         713,   725,   734,   740,   749,   767,   785,   794,   806,   811,
         819,   839,   862,   871,   879,   901,   924,   952,   964,   981,
         985,   996,   999,  1012,  1015,  1025,  1049,  1048,  1068,  1090,
        1108,  1129,  1147,  1177,  1207,  1225,  1243,  1269,  1286,  1305,
        1304,  1327,  1345,  1384,  1390,  1396,  1403,  1428,  1453,  1469,
        1487,  1520,  1519,  1543,  1561,  1578,  1595,  1594,  1620,  1625,
        1630,  1635,  1640,  1660,  1666,  1677,  1678,  1683,  1686,  1690,
        1713,  1736,  1759,  1787,  1808,  1829,  1851,  1871,  1983,  2002,
        2022,  2131,  2140,  2146,  2161,  2189,  2206,  2220,  2226,  2232,
        2241,  2255,  2297,  2314,  2329,  2348,  2360,  2384,  2388,  2395,
        2401,  2406,  2412,  2422,  2439,  2456,  2475,  2494,  2524,  2532,
        2538,  2545,  2549,  2558,  2566,  2574,  2583,  2582,  2595,  2594,
        2607,  2606,  2619,  2618,  2631,  2638,  2645,  2652,  2659,  2666,
        2673,  2680,  2687,  2695,  2694,  2706,  2705,  2717,  2716,  2728,
        2727,  2739,  2738,  2750,  2749,  2761,  2760,  2772,  2771,  2783,
        2782,  2797,  2800,  2806,  2815,  2835,  2858,  2862,  2886,  2889,
        2905,  2908,  2924,  2927,  2940,  2943,  2949,  2952,  2959,  3015,
        3085,  3090,  3157,  3200,  3224,  3250,  3291,  3314,  3337,  3340,
        3349,  3353,  3370,  3407,  3443,  3478,  3518,  3519,  3520,  3521,
        3522,  3523,  3524,  3525,  3526,  3533,  3534,  3535,  3536,  3537,
        3538,  3539,  3540,  3541,  3542,  3543,  3544,  3545,  3546,  3547,
        3548,  3549,  3550,  3551,  3552,  3553,  3554,  3555,  3556,  3557,
        3558,  3559,  3560,  3561,  3562,  3563,  3564,  3566,  3567,  3568,
        3569,  3570,  3571,  3572,  3573,  3574,  3575,  3576,  3577,  3578,
        3579,  3580,  3581,  3582,  3583,  3584,  3585,  3586,  3595,  3596,
        3597,  3598,  3599,  3600,  3601,  3605,  3624,  3642,  3657,  3667,
        3683,  3701,  3706,  3711,  3721,  3731,  3739,  3743,  3747,  3751,
        3755,  3762,  3766,  3770,  3774,  3781,  3786,  3793,  3798,  3802,
        3807,  3811,  3819,  3830,  3834,  3846,  3854,  3862,  3869,  3880,
        3900,  3910,  3920,  3930,  3950,  3955,  3959,  3963,  3975,  3979,
        3991,  3998,  4008,  4012,  4027,  4032,  4039,  4043,  4056,  4064,
        4075,  4079,  4087,  4095,  4103,  4111,  4125,  4139,  4143
    };
    #endif
    
    #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
    /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
       First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
    static const char *const yytname[] =
    {
      "$end", "error", "$undefined", "tDOUBLE", "tSTRING", "tBIGSTR", "tEND",
      "tAFFECT", "tDOTS", "tPi", "tMPI_Rank", "tMPI_Size", "tEuclidian",
      "tCoordinates", "tExp", "tLog", "tLog10", "tSqrt", "tSin", "tAsin",
      "tCos", "tAcos", "tTan", "tRand", "tAtan", "tAtan2", "tSinh", "tCosh",
      "tTanh", "tFabs", "tFloor", "tCeil", "tFmod", "tModulo", "tHypot",
      "tPrintf", "tSprintf", "tStrCat", "tStrPrefix", "tStrRelative",
      "tBoundingBox", "tDraw", "tToday", "tSyncModel", "tCreateTopology",
      "tDistanceFunction", "tPoint", "tCircle", "tEllipse", "tLine", "tSphere",
      "tPolarSphere", "tSurface", "tSpline", "tVolume", "tCharacteristic",
      "tLength", "tParametric", "tElliptic", "tPlane", "tRuled",
      "tTransfinite", "tComplex", "tPhysical", "tCompound", "tPeriodic",
      "tUsing", "tPlugin", "tDegenerated", "tRotate", "tTranslate",
      "tSymmetry", "tDilate", "tExtrude", "tLevelset", "tLoop", "tRecombine",
      "tSmoother", "tSplit", "tDelete", "tCoherence", "tIntersect", "tLayers",
      "tHole", "tAlias", "tAliasWithOptions", "tText2D", "tText3D",
      "tInterpolationScheme", "tTime", "tCombine", "tBSpline", "tBezier",
      "tNurbs", "tNurbsOrder", "tNurbsKnots", "tColor", "tColorTable", "tFor",
      "tIn", "tEndFor", "tIf", "tEndIf", "tExit", "tField", "tReturn", "tCall",
      "tFunction", "tShow", "tHide", "tGetValue", "tGetEnv", "tGetString",
      "tGMSH_MAJOR_VERSION", "tGMSH_MINOR_VERSION", "tGMSH_PATCH_VERSION",
      "tHomRank", "tHomGen", "tHomCut", "tHomSeq", "tAFFECTDIVIDE",
      "tAFFECTTIMES", "tAFFECTMINUS", "tAFFECTPLUS", "'?'", "tOR", "tAND",
      "tNOTEQUAL", "tEQUAL", "'<'", "'>'", "tGREATEROREQUAL", "tLESSOREQUAL",
      "'+'", "'-'", "'*'", "'/'", "'%'", "'!'", "UNARYPREC", "tMINUSMINUS",
      "tPLUSPLUS", "'^'", "'('", "')'", "'['", "']'", "'.'", "'#'", "','",
      "'{'", "'}'", "'~'", "$accept", "All", "GeoFormatItems", "GeoFormatItem",
      "SendToFile", "Printf", "View", "Views", "ElementCoords",
      "ElementValues", "Element", "@1", "@2", "Text2DValues", "Text2D", "@3",
      "Text3DValues", "Text3D", "@4", "InterpolationMatrix", "Time", "@5",
      "NumericAffectation", "NumericIncrement", "Affectation", "PhysicalId",
      "InSphereCenter", "CircleOptions", "Shape", "@6", "@7", "@8", "@9",
      "Transform", "MultipleShape", "ListOfShapes", "LevelSet", "Delete",
      "Colorify", "Visibility", "Command", "Loop", "Extrude", "@10", "@11",
      "@12", "@13", "@14", "@15", "@16", "@17", "@18", "@19", "@20", "@21",
      "@22", "ExtrudeParameters", "ExtrudeParameter", "CompoundMap",
      "TransfiniteType", "TransfiniteArrangement", "TransfiniteCorners",
      "RecombineAngle", "Transfinite", "Periodic", "Embedding", "Coherence",
      "Homology", "FExpr", "FExpr_Single", "VExpr", "VExpr_Single",
      "RecursiveListOfListOfDouble", "ListOfDouble", "ListOfDoubleOrAll",
      "FExpr_Multi", "RecursiveListOfDouble", "ColorExpr", "ListOfColor",
      "RecursiveListOfColor", "StringExprVar", "StringExpr", 0
    };
    #endif
    
    # ifdef YYPRINT
    /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
       token YYLEX-NUM.  */
    static const yytype_uint16 yytoknum[] =
    {
           0,   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,   296,   297,   298,   299,   300,   301,   302,   303,   304,
         305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
         315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
         325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
         335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
         345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
         355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
         365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
         375,   376,   377,   378,    63,   379,   380,   381,   382,    60,
          62,   383,   384,    43,    45,    42,    47,    37,    33,   385,
         386,   387,    94,    40,    41,    91,    93,    46,    35,    44,
         123,   125,   126
    };
    # endif
    
    /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
    static const yytype_uint8 yyr1[] =
    {
           0,   153,   154,   154,   155,   155,   156,   156,   156,   156,
         156,   156,   156,   156,   156,   156,   156,   156,   156,   156,
         156,   156,   156,   157,   157,   158,   158,   158,   158,   159,
         159,   159,   160,   160,   160,   160,   160,   160,   161,   161,
         162,   162,   164,   165,   163,   166,   166,   168,   167,   169,
         169,   171,   170,   172,   172,   174,   173,   175,   175,   175,
         175,   175,   176,   176,   177,   177,   177,   177,   177,   177,
         177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
         177,   177,   177,   177,   177,   177,   177,   177,   177,   178,
         178,   179,   179,   180,   180,   181,   182,   181,   181,   181,
         181,   181,   181,   181,   181,   181,   181,   181,   181,   183,
         181,   181,   181,   181,   181,   181,   181,   181,   181,   181,
         181,   184,   181,   181,   181,   181,   185,   181,   186,   186,
         186,   186,   186,   186,   186,   187,   187,   188,   188,   188,
         188,   188,   188,   189,   189,   189,   189,   189,   189,   189,
         189,   190,   190,   190,   190,   190,   191,   192,   192,   192,
         192,   193,   193,   193,   193,   193,   193,   193,   193,   193,
         193,   193,   193,   194,   194,   194,   194,   194,   194,   194,
         194,   194,   194,   195,   195,   195,   196,   195,   197,   195,
         198,   195,   199,   195,   195,   195,   195,   195,   195,   195,
         195,   195,   195,   200,   195,   201,   195,   202,   195,   203,
         195,   204,   195,   205,   195,   206,   195,   207,   195,   208,
         195,   209,   209,   210,   210,   210,   210,   210,   211,   211,
         212,   212,   213,   213,   214,   214,   215,   215,   216,   216,
         216,   216,   216,   216,   217,   217,   218,   218,   218,   218,
         219,   219,   220,   220,   220,   220,   221,   221,   221,   221,
         221,   221,   221,   221,   221,   221,   221,   221,   221,   221,
         221,   221,   221,   221,   221,   221,   221,   221,   221,   221,
         221,   221,   221,   221,   221,   221,   221,   221,   221,   221,
         221,   221,   221,   221,   221,   221,   221,   221,   221,   221,
         221,   221,   221,   221,   221,   221,   221,   221,   221,   221,
         221,   221,   221,   221,   221,   221,   221,   221,   222,   222,
         222,   222,   222,   222,   222,   222,   222,   222,   222,   222,
         222,   222,   222,   222,   222,   222,   223,   223,   223,   223,
         223,   224,   224,   224,   224,   225,   225,   226,   226,   226,
         226,   226,   226,   227,   227,   228,   228,   228,   228,   228,
         228,   228,   228,   228,   229,   229,   229,   229,   230,   230,
         230,   230,   231,   231,   232,   232,   233,   233,   233,   233,
         234,   234,   234,   234,   234,   234,   234,   234,   234
    };
    
    /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
    static const yytype_uint8 yyr2[] =
    {
           0,     2,     1,     2,     0,     2,     1,     1,     1,     1,
           1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
           1,     1,     1,     1,     2,     5,     7,     7,     9,     6,
           6,     6,     0,     2,     2,     2,     2,     2,     1,     3,
           1,     3,     0,     0,    10,     1,     3,     0,    13,     1,
           3,     0,    15,     8,    14,     0,     6,     1,     1,     1,
           1,     1,     1,     1,     4,     7,     9,     6,     6,     3,
           6,     4,     6,     9,     6,     9,     5,     8,     8,    11,
           6,     9,     5,     7,     9,     9,    11,     9,     9,     1,
           1,     0,     5,     0,     2,     7,     0,     9,     6,     7,
           4,     7,     8,     8,     7,     7,    11,     8,     8,     0,
           9,     8,     9,     3,     4,    10,     7,     7,     8,     9,
          13,     0,     9,     8,     7,     8,     0,     9,     5,    11,
           5,     9,     4,     9,     9,     1,     1,     0,     2,     6,
           6,     6,     6,     8,    14,    16,    12,     8,     8,     6,
          14,     4,     6,     6,     3,     4,     5,     3,     3,     4,
           4,     3,     7,     7,     3,     7,     3,     2,     2,     2,
          15,     2,     2,     6,     8,     8,    10,     1,     2,     1,
           3,     4,     1,     5,    11,    13,     0,     7,     0,    13,
           0,    15,     0,     6,     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,     5,     7,     9,     2,     9,     0,     1,
           0,     3,     0,     1,     0,     2,     0,     2,     7,     6,
           8,     5,     5,     6,     6,    12,    10,    10,    10,    10,
           2,     3,    11,    11,    11,    11,     1,     3,     2,     2,
           2,     3,     3,     3,     3,     3,     3,     3,     3,     3,
           3,     3,     3,     3,     3,     5,     4,     4,     4,     4,
           4,     4,     4,     4,     4,     4,     6,     4,     4,     4,
           4,     4,     4,     6,     6,     6,     4,     4,     4,     4,
           4,     4,     4,     4,     4,     4,     4,     6,     4,     4,
           4,     4,     4,     4,     6,     6,     6,     4,     1,     1,
           1,     1,     1,     1,     1,     1,     5,     4,     4,     2,
           5,     3,     6,     4,     7,     6,     1,     2,     2,     3,
           3,    11,     9,     7,     7,     1,     3,     1,     1,     2,
           3,     4,     5,     1,     1,     2,     3,     3,     5,     4,
           1,     1,     3,     6,     1,     1,     3,     3,     9,     7,
           1,     5,     3,     6,     1,     3,     1,     1,     3,     6,
           1,     1,     4,     6,     6,     4,     4,     4,     6
    };
    
    /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
       STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
       means the default is an error.  */
    static const yytype_uint16 yydefact[] =
    {
           0,     0,     0,     2,     3,     1,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,   177,     0,   182,     0,     0,
         179,     0,     0,     0,     0,     0,     0,     0,     0,     5,
           7,     6,     8,     9,    10,    21,    11,    12,    13,    20,
          19,    14,    15,    16,    17,    18,    22,   318,   325,   380,
          57,   319,   320,   321,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,   381,
           0,     0,     0,     0,   322,   323,   324,    61,    60,    59,
          58,     0,     0,     0,    63,    62,     0,     0,     0,     0,
         137,     0,     0,     0,   256,     0,     0,     0,     0,   169,
           0,   171,   168,   172,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,    96,   109,   121,   126,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,   336,     0,     0,     0,     0,     0,   137,
           0,     0,     0,     0,     0,     0,     0,     0,     0,   137,
           0,   250,     0,     0,     0,     0,     0,     0,     0,   370,
           0,     0,     0,     0,     0,   167,     0,     0,   178,     0,
         137,     0,   137,     0,     0,     0,     0,     0,     0,     0,
           0,   329,    32,   380,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     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,   259,   258,   260,     0,
           0,     0,     0,     0,     0,     0,     0,     0,   136,     0,
         135,     0,    69,   164,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,   161,
         113,     0,     0,     0,     0,   325,     0,     0,   360,   361,
         364,   365,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,   347,     0,   348,     0,
           0,     0,     0,   354,   353,     0,   234,   234,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,   338,   337,     0,     0,     0,     0,   137,   137,     0,
           0,     0,     0,     0,     0,     0,   192,     0,   137,     0,
           0,     0,     0,   236,     0,     0,     0,   154,     0,     0,
           0,   251,     0,     0,     0,   166,     0,     0,     0,     0,
           0,   137,     0,     0,     0,     0,   180,   157,     0,   158,
           0,   377,     0,   376,     0,     0,     0,     0,     0,   331,
           0,     0,    71,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,   257,     0,     0,     0,     0,    57,
           0,     0,     0,     0,     0,   132,     0,     0,     0,     0,
         138,    64,     0,   274,   273,   272,   271,   267,   268,   270,
         269,   262,   261,   263,   264,   265,   266,   114,     0,     0,
           0,     0,     0,     0,   258,   355,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,   349,     0,     0,     0,     0,     0,     0,     0,
           0,     0,   232,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,   100,     0,     0,     0,   340,
         339,     0,     0,     0,     0,     0,     0,     0,     0,     0,
         186,     0,     0,     0,     0,     0,     0,     0,     0,   155,
           0,     0,   151,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,   181,     0,   159,   160,     0,     0,
           0,     0,     0,     0,     0,   327,   333,     0,    42,     0,
           0,     0,    55,     0,    33,    34,    35,    36,    37,   276,
         297,   277,   298,   278,   299,   279,   300,   280,   301,   281,
         302,   282,   303,   283,   304,   284,   305,   296,   317,   285,
         306,     0,     0,   287,   308,   288,   309,   289,   310,   290,
         311,   291,   312,   292,   313,     0,     0,     0,     0,     0,
           0,   387,     0,     0,   385,   386,    82,     0,   382,     0,
           0,     0,     0,     0,    57,     0,     0,     0,     0,     0,
          76,     0,     0,     0,     0,   328,     0,     0,     0,     0,
           0,    25,    23,     0,     0,     0,     0,   362,     0,     0,
         357,   263,   356,   366,   367,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,   350,     0,
           0,     0,     0,     0,     0,   230,   235,   233,     0,   241,
           0,     0,    89,    90,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,   128,   130,     0,     0,
           0,     0,     0,     0,     0,     0,   221,     0,   183,     0,
           0,     0,     0,     0,   237,   242,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,   156,     0,
           0,     0,     0,     0,   378,     0,     0,     0,     0,     0,
           0,   330,     0,   326,     0,     0,     0,     0,     0,    29,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,   327,    67,    68,     0,     0,     0,     0,     0,
          70,    72,    74,     0,     0,   374,     0,    80,     0,     0,
           0,     0,   275,    24,     0,     0,     0,     0,     0,   359,
           0,     0,    93,    93,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,   351,     0,    98,     0,     0,     0,
           0,     0,     0,   239,     0,     0,     0,     0,     0,     0,
           0,     0,   244,     0,     0,     0,     0,     0,     0,     0,
           0,     0,   226,     0,     0,   193,   222,     0,     0,     0,
         149,     0,     0,   243,     0,   153,   152,     0,    30,    31,
           0,     0,     0,   371,     0,     0,     0,   173,     0,     0,
           0,     0,     0,     0,     0,   163,   332,   162,     0,     0,
           0,     0,   345,     0,   286,   307,   293,   314,   294,   315,
         295,   316,   388,   384,   335,   383,     0,    57,     0,     0,
           0,     0,    65,     0,     0,     0,   372,     0,     0,     0,
           0,    26,    27,     0,     0,    95,     0,   358,     0,     0,
           0,     0,     0,    99,     0,     0,   116,   117,     0,     0,
         101,   124,   352,     0,     0,     0,    91,     0,   238,     0,
           0,     0,     0,     0,     0,   228,     0,     0,   165,     0,
           0,     0,     0,   137,     0,   203,     0,   205,     0,   207,
         347,     0,     0,     0,     0,   187,     0,     0,     0,     0,
           0,     0,     0,     0,   104,   105,     0,     0,     0,     0,
          83,     0,     0,     0,     0,     0,     0,   334,     0,    38,
           0,     0,     0,     0,     0,    40,     0,     0,     0,    77,
           0,     0,    78,     0,   375,   139,   140,   141,   142,     0,
           0,   363,     0,    94,   102,   103,   107,     0,     0,   118,
           0,     0,   240,   111,     0,     0,   231,   123,     0,     0,
           0,     0,   108,   229,     0,   125,     0,     0,     0,     0,
         344,     0,   343,     0,     0,   194,     0,     0,   195,     0,
           0,   196,     0,     0,     0,     0,     0,     0,   148,     0,
           0,   147,     0,     0,   143,     0,     0,     0,     0,   369,
           0,   175,   174,     0,     0,     0,   379,     0,     0,     0,
           0,    43,     0,     0,     0,   346,     0,     0,     0,    66,
          73,    75,     0,    81,     0,    28,     0,     0,     0,     0,
           0,     0,     0,   112,    97,   110,   122,   127,     0,   119,
           0,    87,    88,   137,     0,   131,     0,     0,     0,     0,
           0,     0,   223,     0,     0,   137,     0,     0,     0,     0,
         134,   133,     0,     0,     0,     0,    84,    85,     0,     0,
           0,     0,     0,    39,     0,     0,     0,    41,    56,     0,
         373,     0,   246,   247,   248,   249,   115,     0,     0,     0,
           0,     0,   342,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,   188,     0,     0,     0,     0,
           0,   368,   176,     0,     0,     0,     0,     0,     0,     0,
           0,     0,    79,     0,     0,   228,     0,   129,     0,   209,
           0,     0,   211,     0,     0,   213,     0,     0,     0,   224,
           0,   184,     0,   137,     0,     0,     0,   106,    86,   252,
         253,   254,   255,     0,    47,     0,    53,     0,     0,    92,
         229,     0,   245,   341,   197,     0,     0,   204,   198,     0,
           0,   206,   199,     0,     0,   208,     0,     0,     0,   190,
           0,   146,     0,     0,     0,     0,     0,     0,     0,   120,
           0,   215,     0,   217,     0,   219,   225,   227,   189,   185,
           0,     0,     0,     0,    44,     0,    51,     0,     0,     0,
         200,     0,     0,   201,     0,     0,   202,     0,     0,   150,
           0,   144,     0,    45,     0,     0,   170,     0,     0,     0,
           0,     0,     0,   191,     0,     0,     0,     0,     0,   210,
           0,   212,     0,   214,     0,   145,    46,    48,     0,    49,
           0,     0,     0,     0,     0,     0,    54,   216,   218,   220,
          50,    52
    };
    
    /* YYDEFGOTO[NTERM-NUM].  */
    static const yytype_int16 yydefgoto[] =
    {
          -1,     2,     3,    69,   713,    70,    71,   441,  1048,  1054,
         634,   814,  1202,  1352,   635,  1315,  1378,   636,  1354,   637,
         638,   818,   141,   241,    72,   751,  1085,   980,   510,   369,
         370,   371,   372,   338,   309,   310,    75,    76,    77,    78,
          79,    80,   339,   779,  1272,  1330,   588,  1106,  1109,  1112,
        1295,  1299,  1303,  1341,  1344,  1347,   775,   776,  1094,   882,
         748,   562,   596,    82,    83,    84,    85,    86,   356,   144,
         382,   193,   941,   942,   365,   358,   553,   221,   704,   846,
         432,   433
    };
    
    /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
       STATE-NUM.  */
    #define YYPACT_NINF -1125
    static const yytype_int16 yypact[] =
    {
        3408,    37,    63,  3516, -1125, -1125,  1696,    16,    51,   -54,
          32,    86,   104,   108,   -98,   -15,    -7,   -26,    31,    59,
         -39,    62,    66,    76,    94,   114,   142,   167,   235,   176,
         693,   249,   245,    91,   189,   132,   -38,   -38,   136,   440,
          29,   253,   280,   312,    30,   329,   315,   407,   422,   425,
         302,   308,   311,    23,     4, -1125,   314, -1125,   457,   252,
       -1125,   470,   477,     2,     7,   373,   378,   400,   403, -1125,
       -1125, -1125, -1125, -1125, -1125, -1125, -1125, -1125, -1125, -1125,
       -1125, -1125, -1125, -1125, -1125, -1125, -1125, -1125,    24,   334,
         399, -1125, -1125, -1125,   328,   348,   355,   391,   395,   410,
         433,   541,   542,   546,   554,   562,   566,   584,   603,   611,
         614,   615,   644,   645,   650,   409,   432,   449,   452, -1125,
         518,   453,   458,   462, -1125, -1125, -1125, -1125, -1125, -1125,
       -1125,  3292,  3292,  3292, -1125, -1125,  3292,  2885,    19,   564,
         221,  3292,   607,   955, -1125,   612,   613,  3292,   620, -1125,
        3292, -1125, -1125, -1125,  3292,  3119,  3292,  3292,   485,  3292,
        3119,  3292,  3292,   486,  3119,  3292,  3292,  2128,   497,   493,
         504,   515,  1844,  1844,  1844,   523, -1125, -1125, -1125, -1125,
         555,   563,   570,  2128,  3292,   713,  2128,   -38,   -38,   -38,
        3292,  3292,  -109, -1125,   248,   -38,   572,   573,   578,  3072,
         310,   -70,   610,   618,  1844,  2128,   621,    36,   639, -1125,
         788, -1125,   661,   673,   689,   833,  3292,  3292,  3292,   701,
        3292,   692,   763,  3292,  3292, -1125,  3292,   857, -1125,   861,
       -1125,   887, -1125,   341,   341,   341,   341,   750,  3292,   892,
         749, -1125, -1125, -1125,   901,  3292,  3292,  3292,  3292,  3292,
        3292,  3292,  3292,  3292,  3292,  3292,  3292,  3292,  3292,  3292,
        3292,  3292,  3292,  3292,  3292,  3292,  3292,  3292,  3292,  3292,
        3292,  3292,  3292,  3292,  3292,  3292,  3292,  3292,  3292,  3292,
        3292,  3292,  3292,  3292,  3292,  3292,  3292,   341,   341,   341,
         341,  3292,   341,   341,   341,   367,   787,   787,   787,  5620,
           6,  3119,  4884,    67,   783,   928,   805,   804, -1125,   819,
        2913,  1092, -1125, -1125,  3292,  3292,  3292,  3292,  3292,  3292,
        3292,  3292,  3292,  3292,  3292,  3292,  3292,  3292,  3292, -1125,
       -1125,  1203,   -82,  4182,  5641,   574,   827,  3119, -1125, -1125,
        2370, -1125,   502,  5662,  5683,  3292,  5704,   665,  5725,  5746,
        3292,   666,  5767,  5788,  2270,  1517,  2406,   974, -1125,  3292,
        3292,  3292,  3292, -1125, -1125,   978,   981,   981,  3292,   846,
         849,   850,   852,  3292,  3292,  3292,   990,  4128,   855,   994,
         194, -1125, -1125,  4208,  4234,   -38,   -38,   221,   221,   333,
        3292,  3292,  3292,  3072,  3072,  3292,  2913,   371, -1125,  3292,
        3292,  3292,  3292,   995,   997,  3292,   999, -1125,  3292,  3292,
         773, -1125,  3119,  3292,  3292, -1125,  5809,  5830,  5851,   910,
        4260, -1125,   858,  2478,  5872,  4907, -1125, -1125,  1250, -1125,
        1734,   225,   867, -1125,   868,   869,   870,  3292,  4930,   260,
        3292,    11, -1125,  5893,  4953,  5914,  4976,  5935,  4999,  5956,
        5022,  5977,  5045,  5998,  5068,  6019,  5091,  6040,  5114,  6061,
        5137,  6082,  5160,  6103,  5183,  4286,  4312,  6124,  5206,  6145,
        5229,  6166,  5252,  6187,  5275,  6208,  5298,  6229,  5321,  4338,
        4364,  4390,  4416,  4442,  4468,   180,   866,   873,   874,  1440,
         871,   875,   876,  3292, -1125,  2128,  2128,   680,    -2,   399,
        3292,  1016,  1022,    27,   882, -1125,   -49,   138,   -17,   -41,
       -1125, -1125,  2512,   671,   811,   780,   780,   601,   601,   601,
         601,    64,    64,   787,   787,   787,   787, -1125,    12,  3119,
        3292,  1023,  2924,  3292,   787, -1125,  3292,  3119,  3119,   930,
        1024,  1025,  6250,  1026,   935,  1029,  1030,  6271,   939,  1032,
        1033,  3119, -1125,   694,  2412,  3292,  6292,  3042,  6313,  6334,
        3292,  2128,  1037,  1036,  6355,  3255,  3255,  3255,  3255,  6376,
        6397,  6418,  2128,  3119,   896, -1125,   -38,  3292,  3292, -1125,
       -1125,   895,   897,  3292,  4494,  4520,  4546,  2983,     1,   -38,
        1880,  6439,  3407,  6460,  6481,  3292,  1041,  3292,  6502, -1125,
        5344,  5367, -1125,   695,  5390,  5413,  1042,  1043,  1044,   905,
        3292,  2022,  3292,  3292, -1125,    25, -1125, -1125,  3292,  1052,
        1050,  1051,  1053,  1054,  5436,   321, -1125,  3512, -1125,   919,
         920,   915, -1125,  1060, -1125, -1125, -1125, -1125, -1125, -1125,
       -1125, -1125, -1125, -1125, -1125, -1125, -1125, -1125, -1125, -1125,
       -1125, -1125, -1125, -1125, -1125, -1125, -1125, -1125, -1125, -1125,
       -1125,  3292,  3292, -1125, -1125, -1125, -1125, -1125, -1125, -1125,
       -1125, -1125, -1125, -1125, -1125,  3292,  3292,  3292,  3292,  3292,
        3292, -1125,  3119,   341, -1125, -1125, -1125,  3292, -1125,   341,
        5459,  1061,  1062,   923, -1125,    26,  3292,  1064,  1065,  1487,
       -1125,  1066,   927,    23,  1068, -1125,  3119,  3119,  3119,  3119,
        3292, -1125,   945,   341,   198,  4572,   -38, -1125,  3119,  3540,
        2548,   787, -1125,  2370, -1125,  1047,  2128,  2128,  1069,  2128,
         795,  2128,  2128,  1070,  1039,  2128,  2128,   702, -1125,  3119,
        1510,  1087,  1094,  1097,  1098,  2917, -1125, -1125,  1100, -1125,
        1101,   963,  6733, -1125,   965,   966,   968,  1108,  1109,  1110,
        1112,   706,  1116,   417,  4598,  4624, -1125, -1125,  3568,   -38,
         -38,   -38,  1115,   973,   982,   -11, -1125,   451, -1125,     1,
        1119,  1122,  1124,  1126,  6733, -1125,  1549,   979,  1129,  1131,
        1086,  1133,  1134,  2128,  2128,  2128,  1138,  4650, -1125,  2736,
         744,  1139,  1140,  5482, -1125,   996,   998,  1000,  1002,  1141,
        1145, -1125,  1147, -1125,  1011,  3292,  3292,  2128,  1005, -1125,
        6523,  5505,  6544,  5528,  6565,  5551,  6586,  5574,   227,  1001,
        6607,  1013,   -34, -1125, -1125,   101,    75,  1012,  1154,  1627,
       -1125, -1125, -1125,    23,  3292, -1125,   709, -1125,   710,   733,
         734,   743,  6733, -1125,  1156,    40,  3292,    58,   751, -1125,
        3292,  1015,  1104,  1104,  2128,  1160,  1018,  1021,  1167,  1169,
        2128,  1027,  1172,  1173, -1125,   754, -1125,  1175,  2128,  2128,
        2128,  1177,  1178, -1125,  2128,  1176,  1180,  1181,  1182,  2128,
        2128,  2128, -1125,  1183,   551,  3292,  3292,  3292,  1035,   -83,
         -64,   -58, -1125,  2128,  3292, -1125, -1125,  3072,   153,  1986,
       -1125,  1045,  2554, -1125,  3119, -1125, -1125,  1046, -1125, -1125,
        1185,  1187,  1099, -1125,  3292,  3292,  3292, -1125,  1191,  1194,
        1056,  2128,  2128,  2128,  2128, -1125,   260, -1125,  3292,  4676,
        4702,   755, -1125,  3292, -1125, -1125, -1125, -1125, -1125, -1125,
       -1125, -1125, -1125, -1125, -1125, -1125,  2128,   399,  3292,  1198,
        1204,    27, -1125,  1201,  5597,    23, -1125,  1206,  1207,  1208,
        1224, -1125, -1125,   341,  4728, -1125,  1085,  6733,  3292,   -38,
        1226,  1227,  1229, -1125,  3292,  3292, -1125, -1125,  1230,  3292,
       -1125, -1125, -1125,  1205,  1231,  1232,  1142,  3292, -1125,  1233,
        2128,  2128,  2128,  2128,  1234,  1240,  1239,  3292, -1125,  3255,
        3596,  6628,  3112,   221,   -38,  1241,   -38,  1242,   -38,  1243,
         288,  1102,  6649,  3624,   454, -1125,  1244,  1362,  1246,   -38,
        1362,  1247,   772,  3292, -1125, -1125,  2128,  3203,   641,  6670,
       -1125,  2696,  1251,  1117,  1118,  1120,  1123, -1125,   339,  6733,
        3292,  3292,  2128,  1096,   776,  6733,  1253,  1259,  1770, -1125,
        1264,  1267, -1125,  1127, -1125, -1125, -1125, -1125, -1125,  1269,
        3292, -1125,  3652,   430, -1125, -1125, -1125,  3680,  3708, -1125,
        3736,  1271, -1125, -1125,  1228,  1274,  6733, -1125,  1275,  1277,
        1280,  1282, -1125,  1158,  1285, -1125,  4155,  1912,  1286,  1161,
       -1125,  3292, -1125,  1144,   460, -1125,  1165,   465, -1125,  1166,
         482, -1125,  1170,  1300,  2128,  1270,  1171,  3292, -1125,  2743,
         488, -1125,   505,   508, -1125,  1311,  3764,  1225,  3292, -1125,
        3292, -1125, -1125,  3119,  2054,  1316, -1125,  2128,  2128,  2128,
        2128, -1125,  3292,  4754,  4780, -1125,  2128,  3292,  1317, -1125,
       -1125, -1125,    23, -1125,  1249, -1125,  4806,  1318,  1319,  1338,
        1342,  1344,  1209, -1125, -1125, -1125, -1125, -1125,  2128, -1125,
        3119, -1125, -1125,   221,  3248, -1125,  3072,     1,  3072,     1,
        3072,     1, -1125,   777,  2128, -1125,  3792,   -38,  3119,   -38,
       -1125, -1125,  3292,  3820,  3848,   782, -1125, -1125,  1210,  1211,
        1212,  1213,  1217,  6733,  3292,  3292,   785,  6733, -1125,  1348,
       -1125,  3292, -1125, -1125, -1125, -1125, -1125,  3292,   800,   806,
        1218,  3292, -1125,  3876,   526,   224,  3904,   528,   254,  3932,
         530,   258,  2128,  1349,  1290,  2164,  1220,   534,   809,   559,
        2196, -1125, -1125,  1351,  1352,  1354,  1368,  1369,  3292,  6691,
        4832,    33, -1125,  4858,  3960,  1364,  1391, -1125,  3988,  1392,
        3292,  1393,  1394,  3292,  1396,  1397,  3292,  1398,  1255, -1125,
        3292, -1125,     1, -1125,  3119,  1401,  2743, -1125, -1125, -1125,
       -1125, -1125, -1125,   813, -1125,  3292, -1125,  2128,  3292, -1125,
       -1125,  1403, -1125, -1125, -1125,  1260,  4016, -1125, -1125,  1261,
        4044, -1125, -1125,  1262,  4072, -1125,  1407,  2338,   364,  2306,
         814, -1125,   561,   817,  1408,  1265,  6712,   818,  4100, -1125,
           1,  1410,     1,  1411,     1,  1412, -1125, -1125, -1125, -1125,
           1,  1413,  3119,  1414, -1125,   341, -1125,  1273,  1415,   366,
       -1125,  1276,   382, -1125,  1279,   393, -1125,  1289,   396, -1125,
         824, -1125,   825, -1125,  1291,  2128, -1125,  1418,     1,  1419,
           1,  1421,     1, -1125,  1424,   341,  1438,   341,   831, -1125,
         414, -1125,   419, -1125,   446, -1125, -1125, -1125,   835, -1125,
        1439,  1444,  1445,  1446,   341,  1447, -1125, -1125, -1125, -1125,
       -1125, -1125
    };
    
    /* YYPGOTO[NTERM-NUM].  */
    static const yytype_int16 yypgoto[] =
    {
       -1125, -1125, -1125, -1125,   599, -1125, -1125, -1125, -1125,   207,
       -1125, -1125, -1125, -1125, -1125, -1125, -1125, -1125, -1125, -1125,
       -1125, -1125,  -294,    20, -1125,  -216, -1125,   593,  1454, -1125,
       -1125, -1125, -1125,     3,  -377,  -195, -1125, -1125, -1125, -1125,
       -1125, -1125,  1455, -1125, -1125, -1125, -1125, -1125, -1125, -1125,
       -1125, -1125, -1125, -1125, -1125, -1125,  -642,  -722,   204, -1125,
       -1125,  1093, -1125, -1125, -1125, -1125, -1125, -1125,    -6, -1125,
         -20, -1125, -1124,   558,  -126,    73,   -74,  -682,   501, -1125,
        -233,    14
    };
    
    /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
       positive, shift that token.  If negative, reduce the rule which
       number is the opposite.  If zero, do what YYDEFACT says.
       If YYTABLE_NINF, syntax error.  */
    #define YYTABLE_NINF -5
    static const yytype_int16 yytable[] =
    {
         143,   434,   435,   436,   396,   694,    74,   229,   222,   500,
         581,   582,   231,   495,   410,   628,   192,   194,   711,   200,
         145,   845,  1206,   303,   385,   386,   142,   219,   237,   146,
         836,   702,   801,   201,   207,   428,   163,   430,   149,  1286,
         406,   387,   407,     4,  1218,   154,   972,   366,   367,   158,
         385,   386,   155,   906,   485,   486,   487,   488,   163,   490,
         491,   492,   528,     5,   975,   772,  1014,   529,  1015,   385,
         386,   773,   774,   399,   499,   385,   386,   772,   403,   202,
         400,   342,   957,   773,   774,  1016,   347,  1017,   203,   148,
         351,  1018,   151,  1019,   154,   188,   189,   629,   630,   631,
         632,   706,   166,   147,   244,   190,   134,   135,   694,   709,
         152,   164,   191,   810,   153,   304,   305,   159,   127,   128,
         129,   130,   837,   838,   160,   296,   297,   298,   156,   496,
         299,   302,   167,   708,   208,   311,   157,   908,   134,   135,
         905,   331,   712,   308,   333,   695,   168,   223,   334,   340,
         343,   344,   230,   346,   340,   348,   349,   232,   340,   352,
         353,   963,   633,  1317,   134,   135,   169,   380,   381,   238,
         712,   239,   802,   220,   161,   389,   240,   703,   377,   397,
         209,   408,   150,  1287,   383,   384,   906,   127,   128,   129,
         130,   385,   386,   384,   170,   127,   128,   129,   130,   325,
         326,   327,   162,   590,   696,   165,   328,   134,   135,   166,
         416,   417,   418,   158,   420,   134,   135,   423,   424,   171,
         425,   127,   128,   129,   130,   307,   611,   497,   341,   772,
         175,  1368,   438,   341,   185,   773,   774,   341,   186,   443,
         444,   445,   446,   447,   448,   449,   450,   451,   452,   453,
         454,   455,   456,   457,   458,   459,   460,   461,   462,   463,
         464,   465,   466,   467,   468,   469,   470,   471,   472,   473,
         474,   475,   476,   477,   478,   479,   480,   481,   482,   483,
         484,   159,   187,  1064,   172,   489,   195,   173,   707,   174,
          35,    36,    37,    38,   183,   340,   536,   184,   180,    43,
         772,   181,    46,   182,  1025,   204,   773,   774,   512,   513,
         514,   515,   516,   517,   518,   519,   520,   521,   522,   523,
         524,   525,   526,   501,   681,   431,   243,   385,   386,   682,
         772,   534,   205,   210,   772,   211,   773,   774,   603,   542,
         773,   774,   855,   576,   547,   431,   243,   538,   534,   340,
         754,   755,   756,   556,   557,   558,   559,   115,   116,   117,
         118,   206,   564,   119,   212,   579,   580,   569,   570,   571,
         618,   952,   619,   381,   341,  1261,   538,   115,   116,   117,
         118,   385,   386,   119,   584,   585,   586,   296,   297,   587,
         308,   308,   812,   591,   592,   593,   594,   226,   388,   598,
         134,   135,   600,   601,   243,  1264,   340,   604,   605,  1267,
         535,   213,   314,   315,   316,   317,   318,   319,   320,   321,
         322,   323,   324,   554,   326,   327,   214,   535,   341,   215,
         328,   624,   122,   123,   627,   115,   116,   117,   118,  1113,
         772,   119,   772,   385,   386,   216,   773,   774,   773,   774,
         829,   217,   122,   123,   218,   714,   831,   224,   772,   626,
         398,   134,   135,   225,   773,   774,   385,   386,   810,   772,
        1209,   245,   772,   246,   227,   773,   774,   737,   773,   774,
         854,   228,   583,  1141,   242,   341,   196,   690,  1142,   197,
         772,   247,   198,   248,   699,   772,   773,   774,   249,   761,
         250,   773,   774,   906,   385,   386,   906,   134,   135,   906,
         122,   123,   493,   698,   239,  1328,   233,  1357,   697,   240,
         589,   234,   772,   340,   715,   291,   690,   719,   773,   774,
         720,   721,   723,  1359,   251,  1225,   252,  1228,   253,  1231,
         254,   956,   958,   235,  1361,   340,   236,  1363,   721,   740,
         385,   386,   287,   255,   745,   256,   763,  1008,  1009,   752,
         752,   752,   752,   385,   386,  1381,   895,   340,   306,   777,
        1382,   764,   765,   188,   189,   288,   257,   768,   258,   753,
         753,   753,   753,   190,   385,   386,   906,   385,   386,   784,
         199,   786,   289,   385,   386,   290,   292,  1383,   385,   386,
         907,   293,   341,  1117,   797,   294,   799,   800,   828,  1176,
         722,   724,   803,   312,  1178,   385,   386,   906,   329,   330,
         906,   385,   386,   906,   341,   332,   906,   722,   345,   350,
        1308,  1180,   848,   849,   850,   851,  1103,  1187,   385,   386,
         359,   385,   386,   360,   858,   811,   341,   361,   906,  1130,
         906,   538,   906,   539,  1188,   820,   821,  1189,   362,   385,
         386,   385,   386,   385,   386,   875,   368,   385,   386,   822,
         823,   824,   825,   826,   827,  1260,   340,  1263,  1339,  1266,
        1342,   830,  1345,  1274,   259,   261,   260,   262,  1348,   263,
         839,   264,   385,   386,   385,   386,   857,   265,   373,   266,
         340,   340,   340,   340,   852,   267,   374,   268,  1276,   269,
        1332,   270,   340,   375,   134,   135,  1370,   378,  1372,   532,
        1374,   239,   390,   391,   140,   357,   240,   271,   392,   272,
         364,   364,   364,   340,   323,   324,   325,   326,   327,   176,
        1069,   376,   177,   328,   379,   178,   273,   179,   274,   899,
         900,   901,   926,   401,   275,   341,   276,   277,   279,   278,
         280,   402,   364,   404,   405,   314,   315,   316,   317,   318,
         319,   320,   321,   322,   323,   324,   325,   326,   327,   341,
         341,   341,   341,   328,   409,     7,     8,   281,   283,   282,
         284,   341,  1131,   285,   411,   286,  1220,   316,   317,   318,
         319,   320,   321,   322,   323,   324,   325,   326,   327,   939,
         940,   412,   341,   328,   538,   538,   544,   548,   413,   506,
          15,    16,   507,    18,    19,   508,    21,   509,    23,   538,
          24,   693,    26,    27,   414,    29,    30,    31,   964,   415,
        1032,    34,   421,   538,   538,   738,   790,   866,   419,   867,
         974,   538,   811,   874,   977,   538,   959,   893,   965,   538,
         966,   967,   422,   426,    50,    51,    52,   427,   314,   315,
         316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
         326,   327,   538,   538,   968,   969,   328,  1024,   927,  1010,
        1011,  1012,   538,   429,   970,   437,   439,  1020,  1022,   440,
         538,  1023,   976,   538,  1052,   992,  1053,   442,   340,   319,
         320,   321,   322,   323,   324,   325,   326,   327,  1037,  1038,
        1039,   538,   328,  1125,   602,  1147,  1232,  1148,  1233,   328,
         502,   538,  1049,  1243,  1052,   503,  1251,  1055,   317,   318,
         319,   320,   321,   322,   323,   324,   325,   326,   327,  1052,
         504,  1255,  1058,   328,   140,   538,  1047,  1256,   538,  1073,
        1275,   313,  1147,   538,  1314,  1331,   538,  1052,  1333,  1337,
         505,  1057,  1072,   538,  1365,  1364,  1366,   533,  1077,  1078,
        1052,   555,  1380,  1080,  1384,   560,  1385,   341,   561,   565,
        1235,  1086,   566,   567,  1104,   568,  1107,   572,  1110,   574,
         575,  1096,   595,  1097,   597,   599,   609,  1120,   612,  1122,
        1123,   620,   621,   622,   623,   683,   308,   684,   685,   688,
         687,   340,   700,  1098,   340,   689,   701,  1126,   705,   725,
         716,   726,   727,   729,   730,  1134,   731,   732,   734,   735,
         736,   747,   749,   762,  1143,  1144,   766,   785,   767,   793,
         794,   795,   796,   691,   692,  1135,   804,   805,   806,  1195,
         807,   808,   815,   816,  1156,   817,   819,   833,   834,   835,
         840,   841,   844,   843,   847,   853,   864,   870,  1309,   314,
         315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
         325,   326,   327,   871,   877,  1174,  1219,   328,   511,   861,
         341,   878,  1353,   341,   879,   880,   883,   885,   884,   886,
         887,  1186,   888,   534,  1238,   889,   890,   891,   892,   746,
         894,   902,  1193,   903,  1194,   904,   909,   340,   910,   914,
         760,   911,  1376,   912,  1379,   915,  1203,   916,   917,   918,
         919,  1207,   923,   928,   929,   953,   931,   935,   932,   936,
         933,  1390,   934,   937,   938,   943,  1224,   955,  1227,   960,
        1230,   961,   971,   979,   340,   978,   983,  1237,   984,  1239,
        1223,   985,  1226,   986,  1229,   987,   308,   989,   990,   991,
         993,   997,   340,  1000,   998,  1013,  1240,  1001,  1002,  1003,
        1007,  1034,   535,  1035,  1036,  1029,  1033,  1040,  1249,  1250,
        1310,  1041,  1313,  1042,  1059,  1253,   341,  1062,  1060,   527,
        1081,  1254,  1065,  1066,  1067,  1258,   314,   315,   316,   317,
         318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
        1068,  1071,  1074,  1075,   328,  1076,  1079,  1082,  1083,  1087,
        1092,  1084,  1055,   341,  1093,  1095,  1146,  1105,  1108,  1111,
        1118,  1114,  1121,  1124,  1296,  1136,  1312,  1300,  1350,  1149,
        1304,   341,     7,     8,  1307,  1150,  1137,  1138,   340,  1139,
         340,  1152,  1140,  1153,  1154,  1155,  1161,  1184,  1162,  1316,
        1163,  1164,  1318,  1165,   862,   863,  1166,   865,  1167,   868,
         869,  1169,  1172,   872,   873,  1175,   506,    15,    16,   507,
          18,    19,   508,    21,   509,    23,  1182,    24,  1168,    26,
          27,  1173,    29,    30,    31,  1177,  1179,  1190,    34,  1192,
        1181,  1185,  1197,  1208,  1212,  1213,   340,   314,   315,   316,
         317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
         327,    50,    51,    52,  1214,   328,  1210,   341,  1215,   341,
        1216,   920,   921,   922,  1252,  1269,  1270,  1278,  1279,  1217,
        1280,  1244,  1245,  1246,  1247,    87,   335,  1248,  1290,  1257,
        1273,    91,    92,    93,  1281,  1282,    94,    95,    96,    97,
          98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
         108,   109,   110,   111,   112,   113,   114,  1292,  1294,  1297,
        1298,   616,  1301,  1302,  1305,   341,  1306,  1311,   336,  1319,
        1320,  1322,  1324,  1326,  1334,  1335,  1340,  1343,  1346,  1349,
        1351,  1356,   982,  1355,  1369,  1371,  1358,  1373,   988,  1360,
        1375,    35,    36,    37,    38,    39,   994,   995,   996,  1362,
          43,  1367,   999,    46,  1377,  1386,   686,  1004,  1005,  1006,
        1387,  1388,  1389,  1391,   973,  1283,   981,    73,    81,  1291,
         563,  1021,  1061,     0,     0,     0,     0,  1028,     0,     0,
        1031,     0,   121,     0,     0,   124,   125,   126,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,  1043,
        1044,  1045,  1046,   842,     0,   393,  1119,     0,     0,     0,
         133,     0,     0,     0,     0,   395,     0,     0,     0,     0,
         139,     0,   191,   552,  1056,     0,   876,     0,     0,     0,
          87,   335,     0,     0,     0,     0,    91,    92,    93,     0,
           0,    94,    95,    96,    97,    98,    99,   100,   101,   102,
         103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
         113,   114,     0,     0,     0,   913,     0,     0,  1088,  1089,
        1090,  1091,     0,   336,   314,   315,   316,   317,   318,   319,
         320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
           0,     0,   328,     0,     0,     0,    35,    36,    37,    38,
          39,     0,     0,     0,  1127,    43,     0,     0,    46,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        1145,   314,   315,   316,   317,   318,   319,   320,   321,   322,
         323,   324,   325,   326,   327,     0,     0,   121,     0,   328,
         124,   125,   126,   962,   314,   315,   316,   317,   318,   319,
         320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
         131,   337,   328,     0,     0,   133,     0,     0,     0,     0,
         136,     0,     0,     0,     0,   139,     0,     0,   552,     0,
           0,     0,  1183,   314,   315,   316,   317,   318,   319,   320,
         321,   322,   323,   324,   325,   326,   327,     0,     0,     0,
           0,   328,     0,     0,     0,  1198,  1199,  1200,  1201,    87,
          88,    89,     0,    90,     0,    91,    92,    93,     0,     0,
          94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
         104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
         114,     0,   115,   116,   117,   118,     0,     0,   119,     0,
           0,     0,  1234,     0,     0,     0,     7,     8,     0,     0,
           0,   314,   315,   316,   317,   318,   319,   320,   321,   322,
         323,   324,   325,   326,   327,     0,     0,     0,     0,   328,
           0,     0,     0,     0,     0,     0,  1151,     0,     0,     0,
         506,    15,    16,   507,    18,    19,   508,    21,   509,    23,
        1268,    24,     0,    26,    27,     0,    29,    30,    31,     0,
         120,     0,    34,     0,     0,     0,   121,   122,   123,   124,
         125,   126,     0,     0,     0,     0,   127,   128,   129,   130,
           0,     0,     0,     0,     0,    50,    51,    52,     0,   131,
         132,     0,     0,     0,   133,     0,   134,   135,     0,   136,
           0,   137,     0,   138,   139,     0,   140,    87,   335,   363,
           0,     0,     0,    91,    92,    93,     0,     0,    94,    95,
          96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
         106,   107,   108,   109,   110,   111,   112,   113,   114,     0,
           0,     0,     0,     0,     0,   617,     0,     0,     0,     0,
         336,     0,     7,     8,   314,   315,   316,   317,   318,   319,
         320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
           0,     0,   328,    35,    36,    37,    38,    39,  1171,     0,
           0,     0,    43,     0,     0,    46,   506,    15,    16,   507,
          18,    19,   508,    21,   509,    23,     0,    24,     0,    26,
          27,     0,    29,    30,    31,     0,     0,     0,    34,     0,
           0,     0,     0,     0,   121,     0,     0,   124,   125,   126,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,    50,    51,    52,     0,     0,     0,   131,   354,     0,
           0,     0,   133,     0,     0,     0,     0,   136,     0,    87,
         335,  1026,   139,     0,   355,    91,    92,    93,     0,     0,
          94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
         104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
         114,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,   778,   336,     0,     7,     8,   314,   315,   316,   317,
         318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
           0,     0,     0,     0,   328,    35,    36,    37,    38,    39,
        1196,     0,     0,     0,    43,     0,     0,    46,   506,    15,
          16,   507,    18,    19,   508,    21,   509,    23,     0,    24,
           0,    26,    27,     0,    29,    30,    31,     0,     0,     0,
          34,     0,     0,     0,     0,     0,   121,     0,     0,   124,
         125,   126,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,    50,    51,    52,     0,     0,     0,   131,
         354,     0,     0,     0,   133,     0,     0,     0,     0,   136,
           0,    87,   335,     0,   139,     0,  1027,    91,    92,    93,
           0,     0,    94,    95,    96,    97,    98,    99,   100,   101,
         102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
         112,   113,   114,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,   798,   336,     0,     7,     8,   314,   315,
         316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
         326,   327,     0,     0,     0,     0,   328,    35,    36,    37,
          38,    39,  1277,     0,     0,     0,    43,     0,     0,    46,
         506,    15,    16,   507,    18,    19,   508,    21,   509,    23,
           0,    24,     0,    26,    27,     0,    29,    30,    31,     0,
           0,     0,    34,     0,     0,     0,     0,     0,   121,     0,
           0,   124,   125,   126,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,    50,    51,    52,     0,     0,
           0,   131,   354,     0,     0,     0,   133,     0,     0,     0,
           0,   136,     0,    87,   335,     0,   139,     0,   355,    91,
          92,    93,     0,     0,    94,    95,    96,    97,    98,    99,
         100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
         110,   111,   112,   113,   114,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,  1271,   336,     0,     7,     8,
         314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
         324,   325,   326,   327,     0,     0,     0,     0,   328,    35,
          36,    37,    38,    39,  1327,     0,     0,     0,    43,     0,
           0,    46,   506,    15,    16,   507,    18,    19,   508,    21,
         509,    23,     0,    24,     0,    26,    27,     0,    29,    30,
          31,     0,     0,     0,    34,     0,     0,     0,   536,     0,
         121,     0,     0,   124,   125,   126,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,    50,    51,    52,
           0,     0,     0,   131,   337,     0,     0,     0,   133,     0,
           0,     0,     0,   136,   536,    87,   335,     0,   139,     0,
         551,    91,    92,    93,     0,     0,    94,    95,    96,    97,
          98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
         108,   109,   110,   111,   112,   113,   114,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,  1329,   336,     0,
           0,     0,   314,   315,   316,   317,   318,   319,   320,   321,
         322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
         328,    35,    36,    37,    38,    39,   613,     0,     0,     0,
          43,     0,     0,    46,   314,   315,   316,   317,   318,   319,
         320,   321,   322,   323,   324,   537,   326,   327,     0,     0,
           0,     0,   328,     0,     0,     0,     0,     0,     0,     0,
         710,     0,   121,     0,     0,   124,   125,   126,     0,     0,
         314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
         324,   554,   326,   327,     0,   131,   337,     0,   328,     0,
         133,     0,     0,     0,     0,   136,   860,    87,   335,     0,
         139,     0,   739,    91,    92,    93,     0,     0,    94,    95,
          96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
         106,   107,   108,   109,   110,   111,   112,   113,   114,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
         336,     0,   314,   315,   316,   317,   318,   319,   320,   321,
         322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
         328,     0,     0,    35,    36,    37,    38,    39,     0,     0,
           0,     0,    43,     0,     0,    46,   314,   315,   316,   317,
         318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
           0,     0,     0,     0,   328,     0,     0,     0,     0,     0,
           0,     0,     0,     0,   121,     0,     0,   124,   125,   126,
           0,     0,   314,   315,   316,   317,   318,   319,   320,   321,
         322,   323,   324,   325,   326,   327,     0,   131,   354,     0,
         328,     0,   133,     0,     0,     0,     0,   136,     0,    87,
         295,   243,   139,     0,  1030,    91,    92,    93,     0,     0,
          94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
         104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
         114,     0,   115,   116,   117,   118,     0,     0,   119,     0,
           0,     0,     0,     0,   925,     0,    87,   335,     0,     0,
           0,     0,    91,    92,    93,     0,     0,    94,    95,    96,
          97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
         107,   108,   109,   110,   111,   112,   113,   114,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,   336,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,   121,   122,   123,   124,
         125,   126,    35,    36,    37,    38,    39,     0,     0,     0,
           0,    43,     0,     0,    46,     0,     0,     0,     0,   131,
         132,     0,     0,     0,   133,     0,     0,     0,     0,   136,
           0,     0,     0,     0,   139,     0,  1133,     0,     0,     0,
           0,     0,     0,   121,     0,     0,   124,   125,   126,     0,
         314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
         324,   325,   326,   327,     0,     0,   393,  1119,   328,     0,
           0,   133,     0,     0,     0,     0,   395,     0,    87,   295,
           0,   139,     0,   191,    91,    92,    93,     0,     0,    94,
          95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
         105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
           0,     0,     0,     0,     0,     7,     8,    87,   295,     0,
           0,     0,     0,    91,    92,    93,     0,     0,    94,    95,
          96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
         106,   107,   108,   109,   110,   111,   112,   113,   114,   506,
          15,    16,   507,    18,    19,   508,    21,   509,    23,     0,
          24,     0,    26,    27,     0,    29,    30,    31,     0,     0,
           0,    34,     0,   881,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,   121,     0,     0,   124,   125,
         126,     0,     0,     0,    50,    51,    52,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,   131,   132,
           0,     0,     0,   133,     0,     0,     0,     0,   136,     0,
           0,   300,     0,   139,   121,   301,     0,   124,   125,   126,
           0,   314,   315,   316,   317,   318,   319,   320,   321,   322,
         323,   324,   325,   326,   327,     0,     0,   131,   132,   328,
           0,     0,   133,     0,     0,     0,     0,   136,     0,     0,
         717,     0,   139,     0,   718,    87,   295,     0,     0,     0,
           0,    91,    92,    93,     0,     0,    94,    95,    96,    97,
          98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
         108,   109,   110,   111,   112,   113,   114,   314,   315,   316,
         317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
         327,     0,    87,   335,     0,   328,     0,   494,    91,    92,
          93,     0,   577,    94,    95,    96,    97,    98,    99,   100,
         101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
         111,   112,   113,   114,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,   336,   314,   315,   316,   317,
         318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
           0,     0,   121,     0,   328,   124,   125,   126,    35,    36,
          37,    38,    39,   742,     0,     0,     0,    43,     0,     0,
          46,     0,     0,     0,     0,   393,   394,     0,     0,     0,
         133,     0,     0,     0,     0,   395,     0,     0,     0,     0,
         139,     0,   191,     0,     0,     0,     0,     0,     0,   121,
           0,     0,   124,   125,   126,     0,   314,   315,   316,   317,
         318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
           0,     0,   131,   337,   328,     0,     0,   133,    87,   295,
         243,  1101,   136,  1102,    91,    92,    93,   139,     0,    94,
          95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
         105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
           0,   115,   116,   117,   118,    87,   295,   119,     0,     0,
           0,    91,    92,    93,     0,     0,    94,    95,    96,    97,
          98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
         108,   109,   110,   111,   112,   113,   114,   314,   315,   316,
         317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
         327,     0,     0,     0,     0,   328,     0,     0,     0,     0,
           0,     0,  1128,     0,  1129,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,   121,   122,   123,   124,   125,
         126,     0,   314,   315,   316,   317,   318,   319,   320,   321,
         322,   323,   324,   325,   326,   327,     0,     0,   131,   132,
         328,     0,     0,   133,     0,     0,     0,  1221,   136,  1222,
           0,     0,   121,   139,     0,   124,   125,   126,    -4,     1,
           0,     0,    -4,     0,     0,     0,     0,     0,     0,     0,
          -4,    -4,     0,     0,     0,   131,   132,     0,     0,     0,
         133,     0,     0,     0,     0,   136,     0,     0,     0,     0,
         139,     0,     0,    -4,     0,     0,     0,     0,    -4,    -4,
           0,    -4,    -4,     0,    -4,    -4,    -4,    -4,    -4,    -4,
          -4,    -4,    -4,    -4,     0,    -4,    -4,    -4,    -4,    -4,
          -4,    -4,    -4,    -4,     0,    -4,    -4,    -4,    -4,    -4,
          -4,    -4,    -4,     0,    -4,    -4,    -4,    -4,    -4,    -4,
           0,     0,    -4,    -4,     0,     0,     0,     0,    -4,    -4,
          -4,    -4,     0,     0,    -4,     0,    -4,     0,    -4,    -4,
          -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,     0,     0,
           6,     0,     0,     0,    -4,    -4,    -4,    -4,     7,     8,
           0,   314,   315,   316,   317,   318,   319,   320,   321,   322,
         323,   324,   325,   326,   327,     0,     0,     0,     0,   328,
           0,     9,     0,     0,     0,     0,    10,    11,   781,    12,
          13,     0,    14,    15,    16,    17,    18,    19,    20,    21,
          22,    23,     0,    24,    25,    26,    27,    28,    29,    30,
          31,    32,     0,    33,    34,    35,    36,    37,    38,    39,
          40,     0,    41,    42,    43,    44,    45,    46,     0,     0,
          47,    48,     0,     0,     0,     0,    49,    50,    51,    52,
           0,     0,    53,     0,    54,     0,    55,    56,    57,    58,
          59,    60,    61,    62,    63,    64,     0,     0,     0,     0,
           0,     0,    65,    66,    67,    68,   314,   315,   316,   317,
         318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
           0,     0,     0,     0,   328,     0,     0,     0,     0,     0,
           0,     0,     0,   813,   314,   315,   316,   317,   318,   319,
         320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
           0,     0,   328,     0,     0,     0,     0,     0,     0,     0,
           0,   859,   314,   315,   316,   317,   318,   319,   320,   321,
         322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
         328,     0,     0,     0,     0,     0,     0,     0,     0,   898,
         314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
         324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
           0,     0,     0,     0,     0,     0,     0,  1099,   314,   315,
         316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
         326,   327,     0,     0,     0,     0,   328,     0,     0,     0,
           0,     0,     0,     0,     0,  1116,   314,   315,   316,   317,
         318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
           0,     0,     0,     0,   328,     0,     0,     0,     0,     0,
           0,     0,     0,  1157,   314,   315,   316,   317,   318,   319,
         320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
           0,     0,   328,     0,     0,     0,     0,     0,     0,     0,
           0,  1158,   314,   315,   316,   317,   318,   319,   320,   321,
         322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
         328,     0,     0,     0,     0,     0,     0,     0,     0,  1159,
         314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
         324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
           0,     0,     0,     0,     0,     0,     0,  1160,   314,   315,
         316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
         326,   327,     0,     0,     0,     0,   328,     0,     0,     0,
           0,     0,     0,     0,     0,  1191,   314,   315,   316,   317,
         318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
           0,     0,     0,     0,   328,     0,     0,     0,     0,     0,
           0,     0,     0,  1236,   314,   315,   316,   317,   318,   319,
         320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
           0,     0,   328,     0,     0,     0,     0,     0,     0,     0,
           0,  1241,   314,   315,   316,   317,   318,   319,   320,   321,
         322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
         328,     0,     0,     0,     0,     0,     0,     0,     0,  1242,
         314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
         324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
           0,     0,     0,     0,     0,     0,     0,  1259,   314,   315,
         316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
         326,   327,     0,     0,     0,     0,   328,     0,     0,     0,
           0,     0,     0,     0,     0,  1262,   314,   315,   316,   317,
         318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
           0,     0,     0,     0,   328,     0,     0,     0,     0,     0,
           0,     0,     0,  1265,   314,   315,   316,   317,   318,   319,
         320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
           0,     0,   328,     0,     0,     0,     0,     0,     0,     0,
           0,  1289,   314,   315,   316,   317,   318,   319,   320,   321,
         322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
         328,     0,     0,     0,     0,     0,     0,     0,     0,  1293,
         314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
         324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
           0,     0,     0,     0,     0,     0,     0,  1321,   314,   315,
         316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
         326,   327,     0,     0,     0,     0,   328,     0,     0,     0,
           0,     0,     0,     0,     0,  1323,   314,   315,   316,   317,
         318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
           0,     0,     0,     0,   328,     0,     0,     0,     0,     0,
           0,     0,     0,  1325,   314,   315,   316,   317,   318,   319,
         320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
           0,     0,   328,     0,     0,     0,     0,     0,     0,     0,
           0,  1338,   314,   315,   316,   317,   318,   319,   320,   321,
         322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
         328,     0,     0,     0,     0,     0,     0,     0,   573,   314,
         315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
         325,   326,   327,     0,     0,     0,     0,   328,     0,     0,
           0,     0,     0,     0,     0,  1170,   314,   315,   316,   317,
         318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
           0,     0,     0,     0,   328,     0,     0,     0,     0,     0,
           0,   530,   314,   315,   316,   317,   318,   319,   320,   321,
         322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
         328,     0,     0,     0,     0,     0,     0,   577,   314,   315,
         316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
         326,   327,     0,     0,     0,     0,   328,     0,     0,     0,
           0,     0,     0,   578,   314,   315,   316,   317,   318,   319,
         320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
           0,     0,   328,     0,     0,     0,     0,     0,     0,   610,
         314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
         324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
           0,     0,     0,     0,     0,   661,   314,   315,   316,   317,
         318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
           0,     0,     0,     0,   328,     0,     0,     0,     0,     0,
           0,   662,   314,   315,   316,   317,   318,   319,   320,   321,
         322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
         328,     0,     0,     0,     0,     0,     0,   675,   314,   315,
         316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
         326,   327,     0,     0,     0,     0,   328,     0,     0,     0,
           0,     0,     0,   676,   314,   315,   316,   317,   318,   319,
         320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
           0,     0,   328,     0,     0,     0,     0,     0,     0,   677,
         314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
         324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
           0,     0,     0,     0,     0,   678,   314,   315,   316,   317,
         318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
           0,     0,     0,     0,   328,     0,     0,     0,     0,     0,
           0,   679,   314,   315,   316,   317,   318,   319,   320,   321,
         322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
         328,     0,     0,     0,     0,     0,     0,   680,   314,   315,
         316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
         326,   327,     0,     0,     0,     0,   328,     0,     0,     0,
           0,     0,     0,   769,   314,   315,   316,   317,   318,   319,
         320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
           0,     0,   328,     0,     0,     0,     0,     0,     0,   770,
         314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
         324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
           0,     0,     0,     0,     0,   771,   314,   315,   316,   317,
         318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
           0,     0,     0,     0,   328,     0,     0,     0,     0,     0,
           0,   856,   314,   315,   316,   317,   318,   319,   320,   321,
         322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
         328,     0,     0,     0,     0,     0,     0,   896,   314,   315,
         316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
         326,   327,     0,     0,     0,     0,   328,     0,     0,     0,
           0,     0,     0,   897,   314,   315,   316,   317,   318,   319,
         320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
           0,     0,   328,     0,     0,     0,     0,     0,     0,   924,
         314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
         324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
           0,     0,     0,     0,     0,  1050,   314,   315,   316,   317,
         318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
           0,     0,     0,     0,   328,     0,     0,     0,     0,     0,
           0,  1051,   314,   315,   316,   317,   318,   319,   320,   321,
         322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
         328,     0,     0,     0,     0,     0,     0,  1070,   314,   315,
         316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
         326,   327,     0,     0,     0,     0,   328,     0,     0,     0,
           0,     0,     0,  1204,   314,   315,   316,   317,   318,   319,
         320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
           0,     0,   328,     0,     0,     0,     0,     0,     0,  1205,
         314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
         324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
           0,     0,     0,     0,     0,  1211,   314,   315,   316,   317,
         318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
           0,     0,     0,     0,   328,     0,     0,     0,     0,     0,
           0,  1285,   314,   315,   316,   317,   318,   319,   320,   321,
         322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
         328,     0,     0,     0,     0,     0,     0,  1288,   314,   315,
         316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
         326,   327,     0,     0,     0,     0,   328,     0,     0,     0,
         498,   314,   315,   316,   317,   318,   319,   320,   321,   322,
         323,   324,   325,   326,   327,     0,     0,     0,     0,   328,
           0,     0,     0,   615,   314,   315,   316,   317,   318,   319,
         320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
           0,     0,   328,     0,     0,     0,   625,   314,   315,   316,
         317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
         327,     0,     0,     0,     0,   328,     0,     0,     0,   640,
         314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
         324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
           0,     0,   642,   314,   315,   316,   317,   318,   319,   320,
         321,   322,   323,   324,   325,   326,   327,     0,     0,     0,
           0,   328,     0,     0,     0,   644,   314,   315,   316,   317,
         318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
           0,     0,     0,     0,   328,     0,     0,     0,   646,   314,
         315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
         325,   326,   327,     0,     0,     0,     0,   328,     0,     0,
           0,   648,   314,   315,   316,   317,   318,   319,   320,   321,
         322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
         328,     0,     0,     0,   650,   314,   315,   316,   317,   318,
         319,   320,   321,   322,   323,   324,   325,   326,   327,     0,
           0,     0,     0,   328,     0,     0,     0,   652,   314,   315,
         316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
         326,   327,     0,     0,     0,     0,   328,     0,     0,     0,
         654,   314,   315,   316,   317,   318,   319,   320,   321,   322,
         323,   324,   325,   326,   327,     0,     0,     0,     0,   328,
           0,     0,     0,   656,   314,   315,   316,   317,   318,   319,
         320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
           0,     0,   328,     0,     0,     0,   658,   314,   315,   316,
         317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
         327,     0,     0,     0,     0,   328,     0,     0,     0,   660,
         314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
         324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
           0,     0,   664,   314,   315,   316,   317,   318,   319,   320,
         321,   322,   323,   324,   325,   326,   327,     0,     0,     0,
           0,   328,     0,     0,     0,   666,   314,   315,   316,   317,
         318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
           0,     0,     0,     0,   328,     0,     0,     0,   668,   314,
         315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
         325,   326,   327,     0,     0,     0,     0,   328,     0,     0,
           0,   670,   314,   315,   316,   317,   318,   319,   320,   321,
         322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
         328,     0,     0,     0,   672,   314,   315,   316,   317,   318,
         319,   320,   321,   322,   323,   324,   325,   326,   327,     0,
           0,     0,     0,   328,     0,     0,     0,   674,   314,   315,
         316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
         326,   327,     0,     0,     0,     0,   328,     0,     0,     0,
         788,   314,   315,   316,   317,   318,   319,   320,   321,   322,
         323,   324,   325,   326,   327,     0,     0,     0,     0,   328,
           0,     0,     0,   789,   314,   315,   316,   317,   318,   319,
         320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
           0,     0,   328,     0,     0,     0,   791,   314,   315,   316,
         317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
         327,     0,     0,     0,     0,   328,     0,     0,     0,   792,
         314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
         324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
           0,     0,   809,   314,   315,   316,   317,   318,   319,   320,
         321,   322,   323,   324,   325,   326,   327,     0,     0,     0,
           0,   328,     0,     0,     0,   832,   314,   315,   316,   317,
         318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
           0,     0,     0,     0,   328,     0,     0,     0,   930,   314,
         315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
         325,   326,   327,     0,     0,     0,     0,   328,     0,     0,
           0,   945,   314,   315,   316,   317,   318,   319,   320,   321,
         322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
         328,     0,     0,     0,   947,   314,   315,   316,   317,   318,
         319,   320,   321,   322,   323,   324,   325,   326,   327,     0,
           0,     0,     0,   328,     0,     0,     0,   949,   314,   315,
         316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
         326,   327,     0,     0,     0,     0,   328,     0,     0,     0,
         951,   314,   315,   316,   317,   318,   319,   320,   321,   322,
         323,   324,   325,   326,   327,     0,     0,     0,     0,   328,
           0,     0,     0,  1063,   314,   315,   316,   317,   318,   319,
         320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
           0,     0,   328,     0,   494,   314,   315,   316,   317,   318,
         319,   320,   321,   322,   323,   324,   325,   326,   327,     0,
           0,     0,     0,   328,     0,   531,   314,   315,   316,   317,
         318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
           0,     0,     0,     0,   328,     0,   540,   314,   315,   316,
         317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
         327,     0,     0,     0,     0,   328,     0,   541,   314,   315,
         316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
         326,   327,     0,     0,     0,     0,   328,     0,   543,   314,
         315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
         325,   326,   327,     0,     0,     0,     0,   328,     0,   545,
         314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
         324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
         546,   314,   315,   316,   317,   318,   319,   320,   321,   322,
         323,   324,   325,   326,   327,     0,     0,     0,     0,   328,
           0,   549,   314,   315,   316,   317,   318,   319,   320,   321,
         322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
         328,     0,   550,   314,   315,   316,   317,   318,   319,   320,
         321,   322,   323,   324,   325,   326,   327,     0,     0,     0,
           0,   328,     0,   606,   314,   315,   316,   317,   318,   319,
         320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
           0,     0,   328,     0,   607,   314,   315,   316,   317,   318,
         319,   320,   321,   322,   323,   324,   325,   326,   327,     0,
           0,     0,     0,   328,     0,   608,   314,   315,   316,   317,
         318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
           0,     0,     0,     0,   328,     0,   614,   314,   315,   316,
         317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
         327,     0,     0,     0,     0,   328,     0,   639,   314,   315,
         316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
         326,   327,     0,     0,     0,     0,   328,     0,   641,   314,
         315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
         325,   326,   327,     0,     0,     0,     0,   328,     0,   643,
         314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
         324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
         645,   314,   315,   316,   317,   318,   319,   320,   321,   322,
         323,   324,   325,   326,   327,     0,     0,     0,     0,   328,
           0,   647,   314,   315,   316,   317,   318,   319,   320,   321,
         322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
         328,     0,   649,   314,   315,   316,   317,   318,   319,   320,
         321,   322,   323,   324,   325,   326,   327,     0,     0,     0,
           0,   328,     0,   651,   314,   315,   316,   317,   318,   319,
         320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
           0,     0,   328,     0,   653,   314,   315,   316,   317,   318,
         319,   320,   321,   322,   323,   324,   325,   326,   327,     0,
           0,     0,     0,   328,     0,   655,   314,   315,   316,   317,
         318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
           0,     0,     0,     0,   328,     0,   657,   314,   315,   316,
         317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
         327,     0,     0,     0,     0,   328,     0,   659,   314,   315,
         316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
         326,   327,     0,     0,     0,     0,   328,     0,   663,   314,
         315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
         325,   326,   327,     0,     0,     0,     0,   328,     0,   665,
         314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
         324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
         667,   314,   315,   316,   317,   318,   319,   320,   321,   322,
         323,   324,   325,   326,   327,     0,     0,     0,     0,   328,
           0,   669,   314,   315,   316,   317,   318,   319,   320,   321,
         322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
         328,     0,   671,   314,   315,   316,   317,   318,   319,   320,
         321,   322,   323,   324,   325,   326,   327,     0,     0,     0,
           0,   328,     0,   673,   314,   315,   316,   317,   318,   319,
         320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
           0,     0,   328,     0,   728,   314,   315,   316,   317,   318,
         319,   320,   321,   322,   323,   324,   325,   326,   327,     0,
           0,     0,     0,   328,     0,   733,   314,   315,   316,   317,
         318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
           0,     0,     0,     0,   328,     0,   741,   314,   315,   316,
         317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
         327,     0,     0,     0,     0,   328,     0,   743,   314,   315,
         316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
         326,   327,     0,     0,     0,     0,   328,     0,   744,   314,
         315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
         325,   326,   327,     0,     0,     0,     0,   328,     0,   750,
         314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
         324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
         757,   314,   315,   316,   317,   318,   319,   320,   321,   322,
         323,   324,   325,   326,   327,     0,     0,     0,     0,   328,
           0,   758,   314,   315,   316,   317,   318,   319,   320,   321,
         322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
         328,     0,   759,   314,   315,   316,   317,   318,   319,   320,
         321,   322,   323,   324,   325,   326,   327,     0,     0,     0,
           0,   328,     0,   780,   314,   315,   316,   317,   318,   319,
         320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
           0,     0,   328,     0,   782,   314,   315,   316,   317,   318,
         319,   320,   321,   322,   323,   324,   325,   326,   327,     0,
           0,     0,     0,   328,     0,   783,   314,   315,   316,   317,
         318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
           0,     0,     0,     0,   328,     0,   787,   314,   315,   316,
         317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
         327,     0,     0,     0,     0,   328,     0,   944,   314,   315,
         316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
         326,   327,     0,     0,     0,     0,   328,     0,   946,   314,
         315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
         325,   326,   327,     0,     0,     0,     0,   328,     0,   948,
         314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
         324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
         950,   314,   315,   316,   317,   318,   319,   320,   321,   322,
         323,   324,   325,   326,   327,     0,     0,     0,     0,   328,
           0,   954,   314,   315,   316,   317,   318,   319,   320,   321,
         322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
         328,     0,  1100,   314,   315,   316,   317,   318,   319,   320,
         321,   322,   323,   324,   325,   326,   327,     0,     0,     0,
           0,   328,     0,  1115,   314,   315,   316,   317,   318,   319,
         320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
           0,     0,   328,     0,  1132,   314,   315,   316,   317,   318,
         319,   320,   321,   322,   323,   324,   325,   326,   327,     0,
           0,     0,     0,   328,     0,  1284,   314,   315,   316,   317,
         318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
           0,     0,     0,     0,   328,     0,  1336,   314,   315,   316,
         317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
         327,     0,     0,     0,     0,   328
    };
    
    static const yytype_int16 yycheck[] =
    {
           6,   234,   235,   236,   199,     7,     3,     5,     4,   303,
         387,   388,     5,     7,   209,     4,    36,    37,     6,    39,
           6,   703,  1146,     4,   133,   134,     6,     4,     4,    13,
           4,     4,     7,     4,     4,   230,    75,   232,     6,     6,
           4,   150,     6,     6,  1168,   143,     6,   173,   174,    75,
         133,   134,   150,   775,   287,   288,   289,   290,    75,   292,
         293,   294,   144,     0,     6,    76,   149,   149,   151,   133,
         134,    82,    83,   143,     7,   133,   134,    76,   204,    50,
         150,   155,     7,    82,    83,   149,   160,   151,    59,   143,
         164,   149,     6,   151,   143,   133,   134,    86,    87,    88,
          89,   150,   143,    52,    90,   143,   140,   141,     7,   150,
           6,   150,   150,   147,     6,    96,    97,   143,   120,   121,
         122,   123,    96,    97,   150,   131,   132,   133,   143,   123,
         136,   137,    56,   150,   104,   141,   143,   779,   140,   141,
         151,   147,   130,   140,   150,   147,    52,   143,   154,   155,
         156,   157,   150,   159,   160,   161,   162,   150,   164,   165,
         166,   843,   151,  1287,   140,   141,    52,   187,   188,   145,
         130,   147,   147,   150,   143,   195,   152,   150,   184,   199,
         150,   145,   150,   150,   190,   191,   908,   120,   121,   122,
         123,   133,   134,   199,    52,   120,   121,   122,   123,   135,
         136,   137,   143,   398,   498,   143,   142,   140,   141,   143,
         216,   217,   218,    75,   220,   140,   141,   223,   224,    52,
         226,   120,   121,   122,   123,     4,   421,   301,   155,    76,
          54,  1355,   238,   160,   143,    82,    83,   164,    49,   245,
         246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
         256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
         266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
         276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
         286,   143,   150,   965,    49,   291,   150,    52,   150,    54,
          69,    70,    71,    72,    49,   301,     8,    52,    49,    78,
          76,    52,    81,    54,   151,    52,    82,    83,   314,   315,
         316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
         326,   327,   328,   303,   144,     4,     5,   133,   134,   149,
          76,   337,    52,     4,    76,     6,    82,    83,   412,   345,
          82,    83,   144,   149,   350,     4,     5,   149,   354,   355,
         566,   567,   568,   359,   360,   361,   362,    36,    37,    38,
          39,    49,   368,    42,    49,   385,   386,   373,   374,   375,
         145,   144,   147,   393,   301,   151,   149,    36,    37,    38,
          39,   133,   134,    42,   390,   391,   392,   393,   394,   395,
         387,   388,   625,   399,   400,   401,   402,   145,   150,   405,
         140,   141,   408,   409,     5,   151,   412,   413,   414,   151,
         337,     4,   124,   125,   126,   127,   128,   129,   130,   131,
         132,   133,   134,   135,   136,   137,     4,   354,   355,     4,
         142,   437,   111,   112,   440,    36,    37,    38,    39,   151,
          76,    42,    76,   133,   134,   143,    82,    83,    82,    83,
         683,   143,   111,   112,   143,   529,   689,   143,    76,   439,
         150,   140,   141,     6,    82,    83,   133,   134,   147,    76,
        1152,   143,    76,   145,     4,    82,    83,   551,    82,    83,
         713,     4,   149,   144,   150,   412,    46,   493,   149,    49,
          76,   143,    52,   145,   500,    76,    82,    83,   143,   573,
         145,    82,    83,  1225,   133,   134,  1228,   140,   141,  1231,
         111,   112,   145,   499,   147,   151,   143,   151,   498,   152,
         149,   143,    76,   529,   530,     7,   532,   533,    82,    83,
         536,   537,   538,   151,   143,  1177,   145,  1179,   143,  1181,
         145,   835,   836,   143,   151,   551,   143,   151,   554,   555,
         133,   134,   143,   143,   560,   145,   576,     6,     7,   565,
         566,   567,   568,   133,   134,   151,   149,   573,     4,   589,
         151,   577,   578,   133,   134,   143,   143,   583,   145,   565,
         566,   567,   568,   143,   133,   134,  1308,   133,   134,   595,
         150,   597,   143,   133,   134,   143,   143,   151,   133,   134,
         149,   143,   529,   149,   610,   143,   612,   613,   682,   149,
         537,   538,   618,     6,   149,   133,   134,  1339,     6,     6,
        1342,   133,   134,  1345,   551,     5,  1348,   554,   143,   143,
        1272,   149,   706,   707,   708,   709,  1013,   149,   133,   134,
         143,   133,   134,   150,   718,   625,   573,   143,  1370,     8,
        1372,   149,  1374,   151,   149,   661,   662,   149,   143,   133,
         134,   133,   134,   133,   134,   739,   143,   133,   134,   675,
         676,   677,   678,   679,   680,   149,   682,   149,  1320,   149,
        1322,   687,  1324,   149,   143,   143,   145,   145,  1330,   143,
         696,   145,   133,   134,   133,   134,   716,   143,   143,   145,
         706,   707,   708,   709,   710,   143,   143,   145,   149,   143,
         149,   145,   718,   143,   140,   141,  1358,     4,  1360,   145,
        1362,   147,   150,   150,   150,   167,   152,   143,   150,   145,
         172,   173,   174,   739,   133,   134,   135,   136,   137,    46,
         973,   183,    49,   142,   186,    52,   143,    54,   145,   769,
         770,   771,     8,   143,   143,   682,   145,   143,   143,   145,
         145,   143,   204,   205,   143,   124,   125,   126,   127,   128,
         129,   130,   131,   132,   133,   134,   135,   136,   137,   706,
         707,   708,   709,   142,   145,    12,    13,   143,   143,   145,
         145,   718,   151,   143,     6,   145,  1173,   126,   127,   128,
         129,   130,   131,   132,   133,   134,   135,   136,   137,   815,
         816,   150,   739,   142,   149,   149,   151,   151,   145,    46,
          47,    48,    49,    50,    51,    52,    53,    54,    55,   149,
          57,   151,    59,    60,   145,    62,    63,    64,   844,     6,
         914,    68,   150,   149,   149,   151,   151,    52,   147,    54,
         856,   149,   832,   151,   860,   149,   836,   151,   149,   149,
         151,   151,    99,     6,    91,    92,    93,     6,   124,   125,
         126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
         136,   137,   149,   149,   151,   151,   142,   907,   144,   895,
         896,   897,   149,     6,   151,   145,     4,   903,   904,   150,
         149,   907,   151,   149,   149,   151,   151,     6,   914,   129,
         130,   131,   132,   133,   134,   135,   136,   137,   924,   925,
         926,   149,   142,   151,   151,   149,   149,   151,   151,   142,
         147,   149,   938,   151,   149,     7,   151,   943,   127,   128,
         129,   130,   131,   132,   133,   134,   135,   136,   137,   149,
         145,   151,   958,   142,   150,   149,   936,   151,   149,   979,
         151,     6,   149,   149,   151,   151,   149,   149,   151,   151,
         151,   957,   978,   149,   149,   151,   151,   150,   984,   985,
         149,     7,   151,   989,   149,     7,   151,   914,     7,   143,
        1185,   997,   143,   143,  1014,   143,  1016,     7,  1018,   144,
           6,  1007,     7,  1009,     7,     6,    96,  1027,   150,  1029,
        1030,   144,   144,   144,   144,   149,  1013,   144,   144,   144,
         149,  1027,     6,  1009,  1030,   149,     4,  1033,   146,    99,
           7,     7,     7,     7,    99,  1041,     7,     7,    99,     7,
           7,     4,     6,   147,  1050,  1051,   151,     6,   151,     7,
           7,     7,   147,   495,   496,  1041,     4,     7,     7,  1133,
           7,     7,   143,   143,  1070,   150,     6,     6,     6,   146,
           6,     6,   145,     7,     6,   130,     7,     7,  1273,   124,
         125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
         135,   136,   137,    54,     7,  1101,  1170,   142,     6,    52,
        1027,     7,  1335,  1030,     7,     7,     6,   144,     7,   144,
         144,  1117,   144,  1119,  1188,     7,     7,     7,     6,   561,
           4,     6,  1128,   150,  1130,   143,     7,  1133,     6,   150,
         572,     7,  1365,     7,  1367,     6,  1142,     6,    52,     6,
           6,  1147,     4,     4,     4,   144,   150,     6,   150,     4,
         150,  1384,   150,     6,   143,   150,  1176,   144,  1178,   147,
        1180,     7,     6,    59,  1170,   150,     6,  1187,   150,  1189,
        1176,   150,  1178,     6,  1180,     6,  1173,   150,     6,     6,
           5,     4,  1188,     7,     6,   150,  1192,     7,     7,     7,
           7,     6,  1119,     6,    95,   150,   150,     6,  1204,  1205,
        1274,     7,  1276,   147,     6,  1211,  1133,     6,     4,     6,
           5,  1217,     6,     6,     6,  1221,   124,   125,   126,   127,
         128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
           6,   146,     6,     6,   142,     6,     6,     6,     6,     6,
           6,    99,  1248,  1170,     4,     6,   150,     6,     6,     6,
           6,   149,     6,     6,  1260,     4,  1276,  1263,  1332,     6,
        1266,  1188,    12,    13,  1270,     6,   149,   149,  1274,   149,
        1276,     7,   149,     6,   147,     6,     5,     7,    50,  1285,
           6,     6,  1288,     6,   726,   727,     6,   729,     6,   731,
         732,     6,     6,   735,   736,   151,    46,    47,    48,    49,
          50,    51,    52,    53,    54,    55,     6,    57,   150,    59,
          60,   150,    62,    63,    64,   150,   150,     6,    68,    94,
         150,   150,     6,     6,     6,     6,  1332,   124,   125,   126,
         127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
         137,    91,    92,    93,     6,   142,    97,  1274,     6,  1276,
           6,   793,   794,   795,     6,     6,    66,     6,     6,   150,
           6,   151,   151,   151,   151,     3,     4,   150,     4,   151,
         150,     9,    10,    11,     6,     6,    14,    15,    16,    17,
          18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
          28,    29,    30,    31,    32,    33,    34,     6,     6,     6,
           6,   151,     6,     6,     6,  1332,   151,     6,    46,     6,
         150,   150,   150,     6,     6,   150,     6,     6,     6,     6,
           6,     6,   864,   150,     6,     6,   150,     6,   870,   150,
           6,    69,    70,    71,    72,    73,   878,   879,   880,   150,
          78,   150,   884,    81,     6,     6,     6,   889,   890,   891,
           6,     6,     6,     6,   855,  1248,   863,     3,     3,  1255,
         367,   903,   961,    -1,    -1,    -1,    -1,   909,    -1,    -1,
         912,    -1,   110,    -1,    -1,   113,   114,   115,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   931,
         932,   933,   934,     6,    -1,   133,   134,    -1,    -1,    -1,
         138,    -1,    -1,    -1,    -1,   143,    -1,    -1,    -1,    -1,
         148,    -1,   150,   151,   956,    -1,     6,    -1,    -1,    -1,
           3,     4,    -1,    -1,    -1,    -1,     9,    10,    11,    -1,
          -1,    14,    15,    16,    17,    18,    19,    20,    21,    22,
          23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
          33,    34,    -1,    -1,    -1,     6,    -1,    -1,  1000,  1001,
        1002,  1003,    -1,    46,   124,   125,   126,   127,   128,   129,
         130,   131,   132,   133,   134,   135,   136,   137,    -1,    -1,
          -1,    -1,   142,    -1,    -1,    -1,    69,    70,    71,    72,
          73,    -1,    -1,    -1,  1036,    78,    -1,    -1,    81,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
        1052,   124,   125,   126,   127,   128,   129,   130,   131,   132,
         133,   134,   135,   136,   137,    -1,    -1,   110,    -1,   142,
         113,   114,   115,     6,   124,   125,   126,   127,   128,   129,
         130,   131,   132,   133,   134,   135,   136,   137,    -1,    -1,
         133,   134,   142,    -1,    -1,   138,    -1,    -1,    -1,    -1,
         143,    -1,    -1,    -1,    -1,   148,    -1,    -1,   151,    -1,
          -1,    -1,  1114,   124,   125,   126,   127,   128,   129,   130,
         131,   132,   133,   134,   135,   136,   137,    -1,    -1,    -1,
          -1,   142,    -1,    -1,    -1,  1137,  1138,  1139,  1140,     3,
           4,     5,    -1,     7,    -1,     9,    10,    11,    -1,    -1,
          14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
          24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
          34,    -1,    36,    37,    38,    39,    -1,    -1,    42,    -1,
          -1,    -1,  1184,    -1,    -1,    -1,    12,    13,    -1,    -1,
          -1,   124,   125,   126,   127,   128,   129,   130,   131,   132,
         133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,
          -1,    -1,    -1,    -1,    -1,    -1,     6,    -1,    -1,    -1,
          46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
        1232,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
         104,    -1,    68,    -1,    -1,    -1,   110,   111,   112,   113,
         114,   115,    -1,    -1,    -1,    -1,   120,   121,   122,   123,
          -1,    -1,    -1,    -1,    -1,    91,    92,    93,    -1,   133,
         134,    -1,    -1,    -1,   138,    -1,   140,   141,    -1,   143,
          -1,   145,    -1,   147,   148,    -1,   150,     3,     4,     5,
          -1,    -1,    -1,     9,    10,    11,    -1,    -1,    14,    15,
          16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
          26,    27,    28,    29,    30,    31,    32,    33,    34,    -1,
          -1,    -1,    -1,    -1,    -1,   151,    -1,    -1,    -1,    -1,
          46,    -1,    12,    13,   124,   125,   126,   127,   128,   129,
         130,   131,   132,   133,   134,   135,   136,   137,    -1,    -1,
          -1,    -1,   142,    69,    70,    71,    72,    73,     6,    -1,
          -1,    -1,    78,    -1,    -1,    81,    46,    47,    48,    49,
          50,    51,    52,    53,    54,    55,    -1,    57,    -1,    59,
          60,    -1,    62,    63,    64,    -1,    -1,    -1,    68,    -1,
          -1,    -1,    -1,    -1,   110,    -1,    -1,   113,   114,   115,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,    91,    92,    93,    -1,    -1,    -1,   133,   134,    -1,
          -1,    -1,   138,    -1,    -1,    -1,    -1,   143,    -1,     3,
           4,     5,   148,    -1,   150,     9,    10,    11,    -1,    -1,
          14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
          24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
          34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,   151,    46,    -1,    12,    13,   124,   125,   126,   127,
         128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
          -1,    -1,    -1,    -1,   142,    69,    70,    71,    72,    73,
           6,    -1,    -1,    -1,    78,    -1,    -1,    81,    46,    47,
          48,    49,    50,    51,    52,    53,    54,    55,    -1,    57,
          -1,    59,    60,    -1,    62,    63,    64,    -1,    -1,    -1,
          68,    -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,   113,
         114,   115,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    91,    92,    93,    -1,    -1,    -1,   133,
         134,    -1,    -1,    -1,   138,    -1,    -1,    -1,    -1,   143,
          -1,     3,     4,    -1,   148,    -1,   150,     9,    10,    11,
          -1,    -1,    14,    15,    16,    17,    18,    19,    20,    21,
          22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
          32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,   151,    46,    -1,    12,    13,   124,   125,
         126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
         136,   137,    -1,    -1,    -1,    -1,   142,    69,    70,    71,
          72,    73,     6,    -1,    -1,    -1,    78,    -1,    -1,    81,
          46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
          -1,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
          -1,    -1,    68,    -1,    -1,    -1,    -1,    -1,   110,    -1,
          -1,   113,   114,   115,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    91,    92,    93,    -1,    -1,
          -1,   133,   134,    -1,    -1,    -1,   138,    -1,    -1,    -1,
          -1,   143,    -1,     3,     4,    -1,   148,    -1,   150,     9,
          10,    11,    -1,    -1,    14,    15,    16,    17,    18,    19,
          20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
          30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,   151,    46,    -1,    12,    13,
         124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
         134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,    69,
          70,    71,    72,    73,     6,    -1,    -1,    -1,    78,    -1,
          -1,    81,    46,    47,    48,    49,    50,    51,    52,    53,
          54,    55,    -1,    57,    -1,    59,    60,    -1,    62,    63,
          64,    -1,    -1,    -1,    68,    -1,    -1,    -1,     8,    -1,
         110,    -1,    -1,   113,   114,   115,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,    92,    93,
          -1,    -1,    -1,   133,   134,    -1,    -1,    -1,   138,    -1,
          -1,    -1,    -1,   143,     8,     3,     4,    -1,   148,    -1,
         150,     9,    10,    11,    -1,    -1,    14,    15,    16,    17,
          18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
          28,    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,   151,    46,    -1,
          -1,    -1,   124,   125,   126,   127,   128,   129,   130,   131,
         132,   133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,
         142,    69,    70,    71,    72,    73,     8,    -1,    -1,    -1,
          78,    -1,    -1,    81,   124,   125,   126,   127,   128,   129,
         130,   131,   132,   133,   134,   135,   136,   137,    -1,    -1,
          -1,    -1,   142,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
           8,    -1,   110,    -1,    -1,   113,   114,   115,    -1,    -1,
         124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
         134,   135,   136,   137,    -1,   133,   134,    -1,   142,    -1,
         138,    -1,    -1,    -1,    -1,   143,     8,     3,     4,    -1,
         148,    -1,   150,     9,    10,    11,    -1,    -1,    14,    15,
          16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
          26,    27,    28,    29,    30,    31,    32,    33,    34,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
          46,    -1,   124,   125,   126,   127,   128,   129,   130,   131,
         132,   133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,
         142,    -1,    -1,    69,    70,    71,    72,    73,    -1,    -1,
          -1,    -1,    78,    -1,    -1,    81,   124,   125,   126,   127,
         128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
          -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,   110,    -1,    -1,   113,   114,   115,
          -1,    -1,   124,   125,   126,   127,   128,   129,   130,   131,
         132,   133,   134,   135,   136,   137,    -1,   133,   134,    -1,
         142,    -1,   138,    -1,    -1,    -1,    -1,   143,    -1,     3,
           4,     5,   148,    -1,   150,     9,    10,    11,    -1,    -1,
          14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
          24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
          34,    -1,    36,    37,    38,    39,    -1,    -1,    42,    -1,
          -1,    -1,    -1,    -1,     8,    -1,     3,     4,    -1,    -1,
          -1,    -1,     9,    10,    11,    -1,    -1,    14,    15,    16,
          17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
          27,    28,    29,    30,    31,    32,    33,    34,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,   110,   111,   112,   113,
         114,   115,    69,    70,    71,    72,    73,    -1,    -1,    -1,
          -1,    78,    -1,    -1,    81,    -1,    -1,    -1,    -1,   133,
         134,    -1,    -1,    -1,   138,    -1,    -1,    -1,    -1,   143,
          -1,    -1,    -1,    -1,   148,    -1,   150,    -1,    -1,    -1,
          -1,    -1,    -1,   110,    -1,    -1,   113,   114,   115,    -1,
         124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
         134,   135,   136,   137,    -1,    -1,   133,   134,   142,    -1,
          -1,   138,    -1,    -1,    -1,    -1,   143,    -1,     3,     4,
          -1,   148,    -1,   150,     9,    10,    11,    -1,    -1,    14,
          15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
          25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
          -1,    -1,    -1,    -1,    -1,    12,    13,     3,     4,    -1,
          -1,    -1,    -1,     9,    10,    11,    -1,    -1,    14,    15,
          16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
          26,    27,    28,    29,    30,    31,    32,    33,    34,    46,
          47,    48,    49,    50,    51,    52,    53,    54,    55,    -1,
          57,    -1,    59,    60,    -1,    62,    63,    64,    -1,    -1,
          -1,    68,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,   113,   114,
         115,    -1,    -1,    -1,    91,    92,    93,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   133,   134,
          -1,    -1,    -1,   138,    -1,    -1,    -1,    -1,   143,    -1,
          -1,   146,    -1,   148,   110,   150,    -1,   113,   114,   115,
          -1,   124,   125,   126,   127,   128,   129,   130,   131,   132,
         133,   134,   135,   136,   137,    -1,    -1,   133,   134,   142,
          -1,    -1,   138,    -1,    -1,    -1,    -1,   143,    -1,    -1,
         146,    -1,   148,    -1,   150,     3,     4,    -1,    -1,    -1,
          -1,     9,    10,    11,    -1,    -1,    14,    15,    16,    17,
          18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
          28,    29,    30,    31,    32,    33,    34,   124,   125,   126,
         127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
         137,    -1,     3,     4,    -1,   142,    -1,   144,     9,    10,
          11,    -1,   149,    14,    15,    16,    17,    18,    19,    20,
          21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
          31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    46,   124,   125,   126,   127,
         128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
          -1,    -1,   110,    -1,   142,   113,   114,   115,    69,    70,
          71,    72,    73,   151,    -1,    -1,    -1,    78,    -1,    -1,
          81,    -1,    -1,    -1,    -1,   133,   134,    -1,    -1,    -1,
         138,    -1,    -1,    -1,    -1,   143,    -1,    -1,    -1,    -1,
         148,    -1,   150,    -1,    -1,    -1,    -1,    -1,    -1,   110,
          -1,    -1,   113,   114,   115,    -1,   124,   125,   126,   127,
         128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
          -1,    -1,   133,   134,   142,    -1,    -1,   138,     3,     4,
           5,   149,   143,   151,     9,    10,    11,   148,    -1,    14,
          15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
          25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
          -1,    36,    37,    38,    39,     3,     4,    42,    -1,    -1,
          -1,     9,    10,    11,    -1,    -1,    14,    15,    16,    17,
          18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
          28,    29,    30,    31,    32,    33,    34,   124,   125,   126,
         127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
         137,    -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,    -1,
          -1,    -1,   149,    -1,   151,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,   110,   111,   112,   113,   114,
         115,    -1,   124,   125,   126,   127,   128,   129,   130,   131,
         132,   133,   134,   135,   136,   137,    -1,    -1,   133,   134,
         142,    -1,    -1,   138,    -1,    -1,    -1,   149,   143,   151,
          -1,    -1,   110,   148,    -1,   113,   114,   115,     0,     1,
          -1,    -1,     4,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
          12,    13,    -1,    -1,    -1,   133,   134,    -1,    -1,    -1,
         138,    -1,    -1,    -1,    -1,   143,    -1,    -1,    -1,    -1,
         148,    -1,    -1,    35,    -1,    -1,    -1,    -1,    40,    41,
          -1,    43,    44,    -1,    46,    47,    48,    49,    50,    51,
          52,    53,    54,    55,    -1,    57,    58,    59,    60,    61,
          62,    63,    64,    65,    -1,    67,    68,    69,    70,    71,
          72,    73,    74,    -1,    76,    77,    78,    79,    80,    81,
          -1,    -1,    84,    85,    -1,    -1,    -1,    -1,    90,    91,
          92,    93,    -1,    -1,    96,    -1,    98,    -1,   100,   101,
         102,   103,   104,   105,   106,   107,   108,   109,    -1,    -1,
           4,    -1,    -1,    -1,   116,   117,   118,   119,    12,    13,
          -1,   124,   125,   126,   127,   128,   129,   130,   131,   132,
         133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,
          -1,    35,    -1,    -1,    -1,    -1,    40,    41,   151,    43,
          44,    -1,    46,    47,    48,    49,    50,    51,    52,    53,
          54,    55,    -1,    57,    58,    59,    60,    61,    62,    63,
          64,    65,    -1,    67,    68,    69,    70,    71,    72,    73,
          74,    -1,    76,    77,    78,    79,    80,    81,    -1,    -1,
          84,    85,    -1,    -1,    -1,    -1,    90,    91,    92,    93,
          -1,    -1,    96,    -1,    98,    -1,   100,   101,   102,   103,
         104,   105,   106,   107,   108,   109,    -1,    -1,    -1,    -1,
          -1,    -1,   116,   117,   118,   119,   124,   125,   126,   127,
         128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
          -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,   151,   124,   125,   126,   127,   128,   129,
         130,   131,   132,   133,   134,   135,   136,   137,    -1,    -1,
          -1,    -1,   142,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,   151,   124,   125,   126,   127,   128,   129,   130,   131,
         132,   133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,
         142,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   151,
         124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
         134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,   151,   124,   125,
         126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
         136,   137,    -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,   151,   124,   125,   126,   127,
         128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
          -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,   151,   124,   125,   126,   127,   128,   129,
         130,   131,   132,   133,   134,   135,   136,   137,    -1,    -1,
          -1,    -1,   142,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,   151,   124,   125,   126,   127,   128,   129,   130,   131,
         132,   133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,
         142,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   151,
         124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
         134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,   151,   124,   125,
         126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
         136,   137,    -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,   151,   124,   125,   126,   127,
         128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
          -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,   151,   124,   125,   126,   127,   128,   129,
         130,   131,   132,   133,   134,   135,   136,   137,    -1,    -1,
          -1,    -1,   142,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,   151,   124,   125,   126,   127,   128,   129,   130,   131,
         132,   133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,
         142,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   151,
         124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
         134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,   151,   124,   125,
         126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
         136,   137,    -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,   151,   124,   125,   126,   127,
         128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
          -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,   151,   124,   125,   126,   127,   128,   129,
         130,   131,   132,   133,   134,   135,   136,   137,    -1,    -1,
          -1,    -1,   142,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,   151,   124,   125,   126,   127,   128,   129,   130,   131,
         132,   133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,
         142,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   151,
         124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
         134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,   151,   124,   125,
         126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
         136,   137,    -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,   151,   124,   125,   126,   127,
         128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
          -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,   151,   124,   125,   126,   127,   128,   129,
         130,   131,   132,   133,   134,   135,   136,   137,    -1,    -1,
          -1,    -1,   142,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,   151,   124,   125,   126,   127,   128,   129,   130,   131,
         132,   133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,
         142,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   150,   124,
         125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
         135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,   150,   124,   125,   126,   127,
         128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
          -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,    -1,    -1,
          -1,   149,   124,   125,   126,   127,   128,   129,   130,   131,
         132,   133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,
         142,    -1,    -1,    -1,    -1,    -1,    -1,   149,   124,   125,
         126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
         136,   137,    -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,
          -1,    -1,    -1,   149,   124,   125,   126,   127,   128,   129,
         130,   131,   132,   133,   134,   135,   136,   137,    -1,    -1,
          -1,    -1,   142,    -1,    -1,    -1,    -1,    -1,    -1,   149,
         124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
         134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,
          -1,    -1,    -1,    -1,    -1,   149,   124,   125,   126,   127,
         128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
          -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,    -1,    -1,
          -1,   149,   124,   125,   126,   127,   128,   129,   130,   131,
         132,   133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,
         142,    -1,    -1,    -1,    -1,    -1,    -1,   149,   124,   125,
         126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
         136,   137,    -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,
          -1,    -1,    -1,   149,   124,   125,   126,   127,   128,   129,
         130,   131,   132,   133,   134,   135,   136,   137,    -1,    -1,
          -1,    -1,   142,    -1,    -1,    -1,    -1,    -1,    -1,   149,
         124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
         134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,
          -1,    -1,    -1,    -1,    -1,   149,   124,   125,   126,   127,
         128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
          -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,    -1,    -1,
          -1,   149,   124,   125,   126,   127,   128,   129,   130,   131,
         132,   133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,
         142,    -1,    -1,    -1,    -1,    -1,    -1,   149,   124,   125,
         126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
         136,   137,    -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,
          -1,    -1,    -1,   149,   124,   125,   126,   127,   128,   129,
         130,   131,   132,   133,   134,   135,   136,   137,    -1,    -1,
          -1,    -1,   142,    -1,    -1,    -1,    -1,    -1,    -1,   149,
         124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
         134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,
          -1,    -1,    -1,    -1,    -1,   149,   124,   125,   126,   127,
         128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
          -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,    -1,    -1,
          -1,   149,   124,   125,   126,   127,   128,   129,   130,   131,
         132,   133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,
         142,    -1,    -1,    -1,    -1,    -1,    -1,   149,   124,   125,
         126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
         136,   137,    -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,
          -1,    -1,    -1,   149,   124,   125,   126,   127,   128,   129,
         130,   131,   132,   133,   134,   135,   136,   137,    -1,    -1,
          -1,    -1,   142,    -1,    -1,    -1,    -1,    -1,    -1,   149,
         124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
         134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,
          -1,    -1,    -1,    -1,    -1,   149,   124,   125,   126,   127,
         128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
          -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,    -1,    -1,
          -1,   149,   124,   125,   126,   127,   128,   129,   130,   131,
         132,   133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,
         142,    -1,    -1,    -1,    -1,    -1,    -1,   149,   124,   125,
         126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
         136,   137,    -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,
          -1,    -1,    -1,   149,   124,   125,   126,   127,   128,   129,
         130,   131,   132,   133,   134,   135,   136,   137,    -1,    -1,
          -1,    -1,   142,    -1,    -1,    -1,    -1,    -1,    -1,   149,
         124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
         134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,
          -1,    -1,    -1,    -1,    -1,   149,   124,   125,   126,   127,
         128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
          -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,    -1,    -1,
          -1,   149,   124,   125,   126,   127,   128,   129,   130,   131,
         132,   133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,
         142,    -1,    -1,    -1,    -1,    -1,    -1,   149,   124,   125,
         126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
         136,   137,    -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,
         146,   124,   125,   126,   127,   128,   129,   130,   131,   132,
         133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,
          -1,    -1,    -1,   146,   124,   125,   126,   127,   128,   129,
         130,   131,   132,   133,   134,   135,   136,   137,    -1,    -1,
          -1,    -1,   142,    -1,    -1,    -1,   146,   124,   125,   126,
         127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
         137,    -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,   146,
         124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
         134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,
          -1,    -1,   146,   124,   125,   126,   127,   128,   129,   130,
         131,   132,   133,   134,   135,   136,   137,    -1,    -1,    -1,
          -1,   142,    -1,    -1,    -1,   146,   124,   125,   126,   127,
         128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
          -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,   146,   124,
         125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
         135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,    -1,
          -1,   146,   124,   125,   126,   127,   128,   129,   130,   131,
         132,   133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,
         142,    -1,    -1,    -1,   146,   124,   125,   126,   127,   128,
         129,   130,   131,   132,   133,   134,   135,   136,   137,    -1,
          -1,    -1,    -1,   142,    -1,    -1,    -1,   146,   124,   125,
         126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
         136,   137,    -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,
         146,   124,   125,   126,   127,   128,   129,   130,   131,   132,
         133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,
          -1,    -1,    -1,   146,   124,   125,   126,   127,   128,   129,
         130,   131,   132,   133,   134,   135,   136,   137,    -1,    -1,
          -1,    -1,   142,    -1,    -1,    -1,   146,   124,   125,   126,
         127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
         137,    -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,   146,
         124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
         134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,
          -1,    -1,   146,   124,   125,   126,   127,   128,   129,   130,
         131,   132,   133,   134,   135,   136,   137,    -1,    -1,    -1,
          -1,   142,    -1,    -1,    -1,   146,   124,   125,   126,   127,
         128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
          -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,   146,   124,
         125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
         135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,    -1,
          -1,   146,   124,   125,   126,   127,   128,   129,   130,   131,
         132,   133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,
         142,    -1,    -1,    -1,   146,   124,   125,   126,   127,   128,
         129,   130,   131,   132,   133,   134,   135,   136,   137,    -1,
          -1,    -1,    -1,   142,    -1,    -1,    -1,   146,   124,   125,
         126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
         136,   137,    -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,
         146,   124,   125,   126,   127,   128,   129,   130,   131,   132,
         133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,
          -1,    -1,    -1,   146,   124,   125,   126,   127,   128,   129,
         130,   131,   132,   133,   134,   135,   136,   137,    -1,    -1,
          -1,    -1,   142,    -1,    -1,    -1,   146,   124,   125,   126,
         127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
         137,    -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,   146,
         124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
         134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,
          -1,    -1,   146,   124,   125,   126,   127,   128,   129,   130,
         131,   132,   133,   134,   135,   136,   137,    -1,    -1,    -1,
          -1,   142,    -1,    -1,    -1,   146,   124,   125,   126,   127,
         128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
          -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,   146,   124,
         125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
         135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,    -1,
          -1,   146,   124,   125,   126,   127,   128,   129,   130,   131,
         132,   133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,
         142,    -1,    -1,    -1,   146,   124,   125,   126,   127,   128,
         129,   130,   131,   132,   133,   134,   135,   136,   137,    -1,
          -1,    -1,    -1,   142,    -1,    -1,    -1,   146,   124,   125,
         126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
         136,   137,    -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,
         146,   124,   125,   126,   127,   128,   129,   130,   131,   132,
         133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,
          -1,    -1,    -1,   146,   124,   125,   126,   127,   128,   129,
         130,   131,   132,   133,   134,   135,   136,   137,    -1,    -1,
          -1,    -1,   142,    -1,   144,   124,   125,   126,   127,   128,
         129,   130,   131,   132,   133,   134,   135,   136,   137,    -1,
          -1,    -1,    -1,   142,    -1,   144,   124,   125,   126,   127,
         128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
          -1,    -1,    -1,    -1,   142,    -1,   144,   124,   125,   126,
         127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
         137,    -1,    -1,    -1,    -1,   142,    -1,   144,   124,   125,
         126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
         136,   137,    -1,    -1,    -1,    -1,   142,    -1,   144,   124,
         125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
         135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,   144,
         124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
         134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,
         144,   124,   125,   126,   127,   128,   129,   130,   131,   132,
         133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,
          -1,   144,   124,   125,   126,   127,   128,   129,   130,   131,
         132,   133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,
         142,    -1,   144,   124,   125,   126,   127,   128,   129,   130,
         131,   132,   133,   134,   135,   136,   137,    -1,    -1,    -1,
          -1,   142,    -1,   144,   124,   125,   126,   127,   128,   129,
         130,   131,   132,   133,   134,   135,   136,   137,    -1,    -1,
          -1,    -1,   142,    -1,   144,   124,   125,   126,   127,   128,
         129,   130,   131,   132,   133,   134,   135,   136,   137,    -1,
          -1,    -1,    -1,   142,    -1,   144,   124,   125,   126,   127,
         128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
          -1,    -1,    -1,    -1,   142,    -1,   144,   124,   125,   126,
         127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
         137,    -1,    -1,    -1,    -1,   142,    -1,   144,   124,   125,
         126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
         136,   137,    -1,    -1,    -1,    -1,   142,    -1,   144,   124,
         125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
         135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,   144,
         124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
         134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,
         144,   124,   125,   126,   127,   128,   129,   130,   131,   132,
         133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,
          -1,   144,   124,   125,   126,   127,   128,   129,   130,   131,
         132,   133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,
         142,    -1,   144,   124,   125,   126,   127,   128,   129,   130,
         131,   132,   133,   134,   135,   136,   137,    -1,    -1,    -1,
          -1,   142,    -1,   144,   124,   125,   126,   127,   128,   129,
         130,   131,   132,   133,   134,   135,   136,   137,    -1,    -1,
          -1,    -1,   142,    -1,   144,   124,   125,   126,   127,   128,
         129,   130,   131,   132,   133,   134,   135,   136,   137,    -1,
          -1,    -1,    -1,   142,    -1,   144,   124,   125,   126,   127,
         128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
          -1,    -1,    -1,    -1,   142,    -1,   144,   124,   125,   126,
         127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
         137,    -1,    -1,    -1,    -1,   142,    -1,   144,   124,   125,
         126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
         136,   137,    -1,    -1,    -1,    -1,   142,    -1,   144,   124,
         125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
         135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,   144,
         124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
         134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,
         144,   124,   125,   126,   127,   128,   129,   130,   131,   132,
         133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,
          -1,   144,   124,   125,   126,   127,   128,   129,   130,   131,
         132,   133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,
         142,    -1,   144,   124,   125,   126,   127,   128,   129,   130,
         131,   132,   133,   134,   135,   136,   137,    -1,    -1,    -1,
          -1,   142,    -1,   144,   124,   125,   126,   127,   128,   129,
         130,   131,   132,   133,   134,   135,   136,   137,    -1,    -1,
          -1,    -1,   142,    -1,   144,   124,   125,   126,   127,   128,
         129,   130,   131,   132,   133,   134,   135,   136,   137,    -1,
          -1,    -1,    -1,   142,    -1,   144,   124,   125,   126,   127,
         128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
          -1,    -1,    -1,    -1,   142,    -1,   144,   124,   125,   126,
         127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
         137,    -1,    -1,    -1,    -1,   142,    -1,   144,   124,   125,
         126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
         136,   137,    -1,    -1,    -1,    -1,   142,    -1,   144,   124,
         125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
         135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,   144,
         124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
         134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,
         144,   124,   125,   126,   127,   128,   129,   130,   131,   132,
         133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,
          -1,   144,   124,   125,   126,   127,   128,   129,   130,   131,
         132,   133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,
         142,    -1,   144,   124,   125,   126,   127,   128,   129,   130,
         131,   132,   133,   134,   135,   136,   137,    -1,    -1,    -1,
          -1,   142,    -1,   144,   124,   125,   126,   127,   128,   129,
         130,   131,   132,   133,   134,   135,   136,   137,    -1,    -1,
          -1,    -1,   142,    -1,   144,   124,   125,   126,   127,   128,
         129,   130,   131,   132,   133,   134,   135,   136,   137,    -1,
          -1,    -1,    -1,   142,    -1,   144,   124,   125,   126,   127,
         128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
          -1,    -1,    -1,    -1,   142,    -1,   144,   124,   125,   126,
         127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
         137,    -1,    -1,    -1,    -1,   142,    -1,   144,   124,   125,
         126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
         136,   137,    -1,    -1,    -1,    -1,   142,    -1,   144,   124,
         125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
         135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,   144,
         124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
         134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,
         144,   124,   125,   126,   127,   128,   129,   130,   131,   132,
         133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,
          -1,   144,   124,   125,   126,   127,   128,   129,   130,   131,
         132,   133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,
         142,    -1,   144,   124,   125,   126,   127,   128,   129,   130,
         131,   132,   133,   134,   135,   136,   137,    -1,    -1,    -1,
          -1,   142,    -1,   144,   124,   125,   126,   127,   128,   129,
         130,   131,   132,   133,   134,   135,   136,   137,    -1,    -1,
          -1,    -1,   142,    -1,   144,   124,   125,   126,   127,   128,
         129,   130,   131,   132,   133,   134,   135,   136,   137,    -1,
          -1,    -1,    -1,   142,    -1,   144,   124,   125,   126,   127,
         128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
          -1,    -1,    -1,    -1,   142,    -1,   144,   124,   125,   126,
         127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
         137,    -1,    -1,    -1,    -1,   142
    };
    
    /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
       symbol of state STATE-NUM.  */
    static const yytype_uint8 yystos[] =
    {
           0,     1,   154,   155,     6,     0,     4,    12,    13,    35,
          40,    41,    43,    44,    46,    47,    48,    49,    50,    51,
          52,    53,    54,    55,    57,    58,    59,    60,    61,    62,
          63,    64,    65,    67,    68,    69,    70,    71,    72,    73,
          74,    76,    77,    78,    79,    80,    81,    84,    85,    90,
          91,    92,    93,    96,    98,   100,   101,   102,   103,   104,
         105,   106,   107,   108,   109,   116,   117,   118,   119,   156,
         158,   159,   177,   181,   186,   189,   190,   191,   192,   193,
         194,   195,   216,   217,   218,   219,   220,     3,     4,     5,
           7,     9,    10,    11,    14,    15,    16,    17,    18,    19,
          20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
          30,    31,    32,    33,    34,    36,    37,    38,    39,    42,
         104,   110,   111,   112,   113,   114,   115,   120,   121,   122,
         123,   133,   134,   138,   140,   141,   143,   145,   147,   148,
         150,   175,   176,   221,   222,   234,    13,    52,   143,     6,
         150,     6,     6,     6,   143,   150,   143,   143,    75,   143,
         150,   143,   143,    75,   150,   143,   143,    56,    52,    52,
          52,    52,    49,    52,    54,    54,    46,    49,    52,    54,
          49,    52,    54,    49,    52,   143,    49,   150,   133,   134,
         143,   150,   223,   224,   223,   150,    46,    49,    52,   150,
         223,     4,    50,    59,    52,    52,    49,     4,   104,   150,
           4,     6,    49,     4,     4,     4,   143,   143,   143,     4,
         150,   230,     4,   143,   143,     6,   145,     4,     4,     5,
         150,     5,   150,   143,   143,   143,   143,     4,   145,   147,
         152,   176,   150,     5,   234,   143,   145,   143,   145,   143,
         145,   143,   145,   143,   145,   143,   145,   143,   145,   143,
         145,   143,   145,   143,   145,   143,   145,   143,   145,   143,
         145,   143,   145,   143,   145,   143,   145,   143,   145,   143,
         145,   143,   145,   143,   145,   143,   145,   143,   143,   143,
         143,     7,   143,   143,   143,     4,   221,   221,   221,   221,
         146,   150,   221,     4,    96,    97,     4,     4,   186,   187,
         188,   221,     6,     6,   124,   125,   126,   127,   128,   129,
         130,   131,   132,   133,   134,   135,   136,   137,   142,     6,
           6,   221,     5,   221,   221,     4,    46,   134,   186,   195,
         221,   228,   229,   221,   221,   143,   221,   229,   221,   221,
         143,   229,   221,   221,   134,   150,   221,   226,   228,   143,
         150,   143,   143,     5,   226,   227,   227,   227,   143,   182,
         183,   184,   185,   143,   143,   143,   226,   221,     4,   226,
         223,   223,   223,   221,   221,   133,   134,   150,   150,   223,
         150,   150,   150,   133,   134,   143,   188,   223,   150,   143,
         150,   143,   143,   227,   226,   143,     4,     6,   145,   145,
         188,     6,   150,   145,   145,     6,   221,   221,   221,   147,
         221,   150,    99,   221,   221,   221,     6,     6,   188,     6,
         188,     4,   233,   234,   233,   233,   233,   145,   221,     4,
         150,   160,     6,   221,   221,   221,   221,   221,   221,   221,
         221,   221,   221,   221,   221,   221,   221,   221,   221,   221,
         221,   221,   221,   221,   221,   221,   221,   221,   221,   221,
         221,   221,   221,   221,   221,   221,   221,   221,   221,   221,
         221,   221,   221,   221,   221,   233,   233,   233,   233,   221,
         233,   233,   233,   145,   144,     7,   123,   229,   146,     7,
         175,   176,   147,     7,   145,   151,    46,    49,    52,    54,
         181,     6,   221,   221,   221,   221,   221,   221,   221,   221,
         221,   221,   221,   221,   221,   221,   221,     6,   144,   149,
         149,   144,   145,   150,   221,   228,     8,   135,   149,   151,
         144,   144,   221,   144,   151,   144,   144,   221,   151,   144,
         144,   150,   151,   229,   135,     7,   221,   221,   221,   221,
           7,     7,   214,   214,   221,   143,   143,   143,   143,   221,
         221,   221,     7,   150,   144,     6,   149,   149,   149,   223,
         223,   187,   187,   149,   221,   221,   221,   221,   199,   149,
         188,   221,   221,   221,   221,     7,   215,     7,   221,     6,
         221,   221,   151,   229,   221,   221,   144,   144,   144,    96,
         149,   188,   150,     8,   144,   146,   151,   151,   145,   147,
         144,   144,   144,   144,   221,   146,   176,   221,     4,    86,
          87,    88,    89,   151,   163,   167,   170,   172,   173,   144,
         146,   144,   146,   144,   146,   144,   146,   144,   146,   144,
         146,   144,   146,   144,   146,   144,   146,   144,   146,   144,
         146,   149,   149,   144,   146,   144,   146,   144,   146,   144,
         146,   144,   146,   144,   146,   149,   149,   149,   149,   149,
         149,   144,   149,   149,   144,   144,     6,   149,   144,   149,
         221,   226,   226,   151,     7,   147,   175,   176,   234,   221,
           6,     4,     4,   150,   231,   146,   150,   150,   150,   150,
           8,     6,   130,   157,   229,   221,     7,   146,   150,   221,
         221,   221,   228,   221,   228,    99,     7,     7,   144,     7,
          99,     7,     7,   144,    99,     7,     7,   229,   151,   150,
         221,   144,   151,   144,   144,   221,   226,     4,   213,     6,
         144,   178,   221,   234,   178,   178,   178,   144,   144,   144,
         226,   229,   147,   223,   221,   221,   151,   151,   221,   149,
         149,   149,    76,    82,    83,   209,   210,   223,   151,   196,
         144,   151,   144,   144,   221,     6,   221,   144,   146,   146,
         151,   146,   146,     7,     7,     7,   147,   221,   151,   221,
         221,     7,   147,   221,     4,     7,     7,     7,     7,   146,
         147,   176,   233,   151,   164,   143,   143,   150,   174,     6,
         221,   221,   221,   221,   221,   221,   221,   221,   229,   233,
         221,   233,   146,     6,     6,   146,     4,    96,    97,   221,
           6,     6,     6,     7,   145,   230,   232,     6,   229,   229,
         229,   229,   221,   130,   233,   144,   149,   223,   229,   151,
           8,    52,   226,   226,     7,   226,    52,    54,   226,   226,
           7,    54,   226,   226,   151,   229,     6,     7,     7,     7,
           7,    66,   212,     6,     7,   144,   144,   144,   144,     7,
           7,     7,     6,   151,     4,   149,   149,   149,   151,   223,
         223,   223,     6,   150,   143,   151,   210,   149,   209,     7,
           6,     7,     7,     6,   150,     6,     6,    52,     6,     6,
         226,   226,   226,     4,   149,     8,     8,   144,     4,     4,
         146,   150,   150,   150,   150,     6,     4,     6,   143,   221,
         221,   225,   226,   150,   144,   146,   144,   146,   144,   146,
         144,   146,   144,   144,   144,   144,   175,     7,   175,   176,
         147,     7,     6,   230,   221,   149,   151,   151,   151,   151,
         151,     6,     6,   157,   221,     6,   151,   221,   150,    59,
         180,   180,   226,     6,   150,   150,     6,     6,   226,   150,
           6,     6,   151,     5,   226,   226,   226,     4,     6,   226,
           7,     7,     7,     7,   226,   226,   226,     7,     6,     7,
         221,   221,   221,   150,   149,   151,   149,   151,   149,   151,
         221,   226,   221,   221,   223,   151,     5,   150,   226,   150,
         150,   226,   229,   150,     6,     6,    95,   221,   221,   221,
           6,     7,   147,   226,   226,   226,   226,   176,   161,   221,
         149,   149,   149,   151,   162,   221,   226,   234,   221,     6,
           4,   231,     6,   146,   230,     6,     6,     6,     6,   233,
         149,   146,   221,   223,     6,     6,     6,   221,   221,     6,
         221,     5,     6,     6,    99,   179,   221,     6,   226,   226,
         226,   226,     6,     4,   211,     6,   221,   221,   234,   151,
         144,   149,   151,   187,   223,     6,   200,   223,     6,   201,
         223,     6,   202,   151,   149,   144,   151,   149,     6,   134,
         223,     6,   223,   223,     6,   151,   221,   226,   149,   151,
           8,   151,   144,   150,   221,   234,     4,   149,   149,   149,
         149,   144,   149,   221,   221,   226,   150,   149,   151,     6,
           6,     6,     7,     6,   147,     6,   221,   151,   151,   151,
         151,     5,    50,     6,     6,     6,     6,     6,   150,     6,
         150,     6,     6,   150,   221,   151,   149,   150,   149,   150,
         149,   150,     6,   226,     7,   150,   221,   149,   149,   149,
           6,   151,    94,   221,   221,   229,     6,     6,   226,   226,
         226,   226,   165,   221,   149,   149,   225,   221,     6,   230,
          97,   149,     6,     6,     6,     6,     6,   150,   225,   229,
         187,   149,   151,   221,   223,   209,   221,   223,   209,   221,
         223,   209,   149,   151,   226,   188,   151,   223,   229,   223,
         221,   151,   151,   151,   151,   151,   151,   151,   150,   221,
         221,   151,     6,   221,   221,   151,   151,   151,   221,   151,
         149,   151,   151,   149,   151,   151,   149,   151,   226,     6,
          66,   151,   197,   150,   149,   151,   149,     6,     6,     6,
           6,     6,     6,   162,   144,   149,     6,   150,   149,   151,
           4,   211,     6,   151,     6,   203,   221,     6,     6,   204,
         221,     6,     6,   205,   221,     6,   151,   221,   209,   188,
         229,     6,   223,   229,   151,   168,   221,   225,   221,     6,
         150,   151,   150,   151,   150,   151,     6,     6,   151,   151,
         198,   151,   149,   151,     6,   150,   144,   151,   151,   209,
           6,   206,   209,     6,   207,   209,     6,   208,   209,     6,
         229,     6,   166,   233,   171,   150,     6,   151,   150,   151,
         150,   151,   150,   151,   151,   149,   151,   150,   225,     6,
         209,     6,   209,     6,   209,     6,   233,     6,   169,   233,
         151,   151,   151,   151,   149,   151,     6,     6,     6,     6,
         233,     6
    };
    
    #define yyerrok		(yyerrstatus = 0)
    #define yyclearin	(yychar = YYEMPTY)
    #define YYEMPTY		(-2)
    #define YYEOF		0
    
    #define YYACCEPT	goto yyacceptlab
    #define YYABORT		goto yyabortlab
    #define YYERROR		goto yyerrorlab
    
    
    /* Like YYERROR except do call yyerror.  This remains here temporarily
       to ease the transition to the new meaning of YYERROR, for GCC.
       Once GCC version 2 has supplanted version 1, this can go.  */
    
    #define YYFAIL		goto yyerrlab
    
    #define YYRECOVERING()  (!!yyerrstatus)
    
    #define YYBACKUP(Token, Value)					\
    do								\
      if (yychar == YYEMPTY && yylen == 1)				\
        {								\
          yychar = (Token);						\
          yylval = (Value);						\
          yytoken = YYTRANSLATE (yychar);				\
          YYPOPSTACK (1);						\
          goto yybackup;						\
        }								\
      else								\
        {								\
          yyerror (YY_("syntax error: cannot back up")); \
          YYERROR;							\
        }								\
    while (YYID (0))
    
    
    #define YYTERROR	1
    #define YYERRCODE	256
    
    
    /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
       If N is 0, then set CURRENT to the empty location which ends
       the previous symbol: RHS[0] (always defined).  */
    
    #define YYRHSLOC(Rhs, K) ((Rhs)[K])
    #ifndef YYLLOC_DEFAULT
    # define YYLLOC_DEFAULT(Current, Rhs, N)				\
        do									\
          if (YYID (N))                                                    \
    	{								\
    	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
    	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
    	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
    	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
    	}								\
          else								\
    	{								\
    	  (Current).first_line   = (Current).last_line   =		\
    	    YYRHSLOC (Rhs, 0).last_line;				\
    	  (Current).first_column = (Current).last_column =		\
    	    YYRHSLOC (Rhs, 0).last_column;				\
    	}								\
        while (YYID (0))
    #endif
    
    
    /* YY_LOCATION_PRINT -- Print the location on the stream.
       This macro was not mandated originally: define only if we know
       we won't break user code: when these are the locations we know.  */
    
    #ifndef YY_LOCATION_PRINT
    # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
    #  define YY_LOCATION_PRINT(File, Loc)			\
         fprintf (File, "%d.%d-%d.%d",			\
    	      (Loc).first_line, (Loc).first_column,	\
    	      (Loc).last_line,  (Loc).last_column)
    # else
    #  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
    # endif
    #endif
    
    
    /* YYLEX -- calling `yylex' with the right arguments.  */
    
    #ifdef YYLEX_PARAM
    # define YYLEX yylex (YYLEX_PARAM)
    #else
    # define YYLEX yylex ()
    #endif
    
    /* Enable debugging if requested.  */
    #if YYDEBUG
    
    # ifndef YYFPRINTF
    #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
    #  define YYFPRINTF fprintf
    # endif
    
    # define YYDPRINTF(Args)			\
    do {						\
      if (yydebug)					\
        YYFPRINTF Args;				\
    } while (YYID (0))
    
    # define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
    do {									  \
      if (yydebug)								  \
        {									  \
          YYFPRINTF (stderr, "%s ", Title);					  \
          yy_symbol_print (stderr,						  \
    		  Type, Value); \
          YYFPRINTF (stderr, "\n");						  \
        }									  \
    } while (YYID (0))
    
    
    /*--------------------------------.
    | Print this symbol on YYOUTPUT.  |
    `--------------------------------*/
    
    /*ARGSUSED*/
    #if (defined __STDC__ || defined __C99__FUNC__ \
         || defined __cplusplus || defined _MSC_VER)
    static void
    yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
    #else
    static void
    yy_symbol_value_print (yyoutput, yytype, yyvaluep)
        FILE *yyoutput;
        int yytype;
        YYSTYPE const * const yyvaluep;
    #endif
    {
      if (!yyvaluep)
        return;
    # ifdef YYPRINT
      if (yytype < YYNTOKENS)
        YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
    # else
      YYUSE (yyoutput);
    # endif
      switch (yytype)
        {
          default:
    	break;
        }
    }
    
    
    /*--------------------------------.
    | Print this symbol on YYOUTPUT.  |
    `--------------------------------*/
    
    #if (defined __STDC__ || defined __C99__FUNC__ \
         || defined __cplusplus || defined _MSC_VER)
    static void
    yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
    #else
    static void
    yy_symbol_print (yyoutput, yytype, yyvaluep)
        FILE *yyoutput;
        int yytype;
        YYSTYPE const * const yyvaluep;
    #endif
    {
      if (yytype < YYNTOKENS)
        YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
      else
        YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
    
      yy_symbol_value_print (yyoutput, yytype, yyvaluep);
      YYFPRINTF (yyoutput, ")");
    }
    
    /*------------------------------------------------------------------.
    | yy_stack_print -- Print the state stack from its BOTTOM up to its |
    | TOP (included).                                                   |
    `------------------------------------------------------------------*/
    
    #if (defined __STDC__ || defined __C99__FUNC__ \
         || defined __cplusplus || defined _MSC_VER)
    static void
    yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
    #else
    static void
    yy_stack_print (bottom, top)
        yytype_int16 *bottom;
        yytype_int16 *top;
    #endif
    {
      YYFPRINTF (stderr, "Stack now");
      for (; bottom <= top; ++bottom)
        YYFPRINTF (stderr, " %d", *bottom);
      YYFPRINTF (stderr, "\n");
    }
    
    # define YY_STACK_PRINT(Bottom, Top)				\
    do {								\
      if (yydebug)							\
        yy_stack_print ((Bottom), (Top));				\
    } while (YYID (0))
    
    
    /*------------------------------------------------.
    | Report that the YYRULE is going to be reduced.  |
    `------------------------------------------------*/
    
    #if (defined __STDC__ || defined __C99__FUNC__ \
         || defined __cplusplus || defined _MSC_VER)
    static void
    yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
    #else
    static void
    yy_reduce_print (yyvsp, yyrule)
        YYSTYPE *yyvsp;
        int yyrule;
    #endif
    {
      int yynrhs = yyr2[yyrule];
      int yyi;
      unsigned long int yylno = yyrline[yyrule];
      YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
    	     yyrule - 1, yylno);
      /* The symbols being reduced.  */
      for (yyi = 0; yyi < yynrhs; yyi++)
        {
          fprintf (stderr, "   $%d = ", yyi + 1);
          yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
    		       &(yyvsp[(yyi + 1) - (yynrhs)])
    		       		       );
          fprintf (stderr, "\n");
        }
    }
    
    # define YY_REDUCE_PRINT(Rule)		\
    do {					\
      if (yydebug)				\
        yy_reduce_print (yyvsp, Rule); \
    } while (YYID (0))
    
    /* Nonzero means print parse trace.  It is left uninitialized so that
       multiple parsers can coexist.  */
    int yydebug;
    #else /* !YYDEBUG */
    # define YYDPRINTF(Args)
    # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
    # define YY_STACK_PRINT(Bottom, Top)
    # define YY_REDUCE_PRINT(Rule)
    #endif /* !YYDEBUG */
    
    
    /* YYINITDEPTH -- initial size of the parser's stacks.  */
    #ifndef	YYINITDEPTH
    # define YYINITDEPTH 200
    #endif
    
    /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
       if the built-in stack extension method is used).
    
       Do not make this value too large; the results are undefined if
       YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
       evaluated with infinite-precision integer arithmetic.  */
    
    #ifndef YYMAXDEPTH
    # define YYMAXDEPTH 10000
    #endif
    
    
    
    #if YYERROR_VERBOSE
    
    # ifndef yystrlen
    #  if defined __GLIBC__ && defined _STRING_H
    #   define yystrlen strlen
    #  else
    /* Return the length of YYSTR.  */
    #if (defined __STDC__ || defined __C99__FUNC__ \
         || defined __cplusplus || defined _MSC_VER)
    static YYSIZE_T
    yystrlen (const char *yystr)
    #else
    static YYSIZE_T
    yystrlen (yystr)
        const char *yystr;
    #endif
    {
      YYSIZE_T yylen;
      for (yylen = 0; yystr[yylen]; yylen++)
        continue;
      return yylen;
    }
    #  endif
    # endif
    
    # ifndef yystpcpy
    #  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
    #   define yystpcpy stpcpy
    #  else
    /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
       YYDEST.  */
    #if (defined __STDC__ || defined __C99__FUNC__ \
         || defined __cplusplus || defined _MSC_VER)
    static char *
    yystpcpy (char *yydest, const char *yysrc)
    #else
    static char *
    yystpcpy (yydest, yysrc)
        char *yydest;
        const char *yysrc;
    #endif
    {
      char *yyd = yydest;
      const char *yys = yysrc;
    
      while ((*yyd++ = *yys++) != '\0')
        continue;
    
      return yyd - 1;
    }
    #  endif
    # endif
    
    # ifndef yytnamerr
    /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
       quotes and backslashes, so that it's suitable for yyerror.  The
       heuristic is that double-quoting is unnecessary unless the string
       contains an apostrophe, a comma, or backslash (other than
       backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
       null, do not copy; instead, return the length of what the result
       would have been.  */
    static YYSIZE_T
    yytnamerr (char *yyres, const char *yystr)
    {
      if (*yystr == '"')
        {
          YYSIZE_T yyn = 0;
          char const *yyp = yystr;
    
          for (;;)
    	switch (*++yyp)
    	  {
    	  case '\'':
    	  case ',':
    	    goto do_not_strip_quotes;
    
    	  case '\\':
    	    if (*++yyp != '\\')
    	      goto do_not_strip_quotes;
    	    /* Fall through.  */
    	  default:
    	    if (yyres)
    	      yyres[yyn] = *yyp;
    	    yyn++;
    	    break;
    
    	  case '"':
    	    if (yyres)
    	      yyres[yyn] = '\0';
    	    return yyn;
    	  }
        do_not_strip_quotes: ;
        }
    
      if (! yyres)
        return yystrlen (yystr);
    
      return yystpcpy (yyres, yystr) - yyres;
    }
    # endif
    
    /* Copy into YYRESULT an error message about the unexpected token
       YYCHAR while in state YYSTATE.  Return the number of bytes copied,
       including the terminating null byte.  If YYRESULT is null, do not
       copy anything; just return the number of bytes that would be
       copied.  As a special case, return 0 if an ordinary "syntax error"
       message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
       size calculation.  */
    static YYSIZE_T
    yysyntax_error (char *yyresult, int yystate, int yychar)
    {
      int yyn = yypact[yystate];
    
      if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
        return 0;
      else
        {
          int yytype = YYTRANSLATE (yychar);
          YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
          YYSIZE_T yysize = yysize0;
          YYSIZE_T yysize1;
          int yysize_overflow = 0;
          enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
          char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
          int yyx;
    
    # if 0
          /* This is so xgettext sees the translatable formats that are
    	 constructed on the fly.  */
          YY_("syntax error, unexpected %s");
          YY_("syntax error, unexpected %s, expecting %s");
          YY_("syntax error, unexpected %s, expecting %s or %s");
          YY_("syntax error, unexpected %s, expecting %s or %s or %s");
          YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
    # endif
          char *yyfmt;
          char const *yyf;
          static char const yyunexpected[] = "syntax error, unexpected %s";
          static char const yyexpecting[] = ", expecting %s";
          static char const yyor[] = " or %s";
          char yyformat[sizeof yyunexpected
    		    + sizeof yyexpecting - 1
    		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
    		       * (sizeof yyor - 1))];
          char const *yyprefix = yyexpecting;
    
          /* Start YYX at -YYN if negative to avoid negative indexes in
    	 YYCHECK.  */
          int yyxbegin = yyn < 0 ? -yyn : 0;
    
          /* Stay within bounds of both yycheck and yytname.  */
          int yychecklim = YYLAST - yyn + 1;
          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
          int yycount = 1;
    
          yyarg[0] = yytname[yytype];
          yyfmt = yystpcpy (yyformat, yyunexpected);
    
          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
    	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
    	  {
    	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
    	      {
    		yycount = 1;
    		yysize = yysize0;
    		yyformat[sizeof yyunexpected - 1] = '\0';
    		break;
    	      }
    	    yyarg[yycount++] = yytname[yyx];
    	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
    	    yysize_overflow |= (yysize1 < yysize);
    	    yysize = yysize1;
    	    yyfmt = yystpcpy (yyfmt, yyprefix);
    	    yyprefix = yyor;
    	  }
    
          yyf = YY_(yyformat);
          yysize1 = yysize + yystrlen (yyf);
          yysize_overflow |= (yysize1 < yysize);
          yysize = yysize1;
    
          if (yysize_overflow)
    	return YYSIZE_MAXIMUM;
    
          if (yyresult)
    	{
    	  /* Avoid sprintf, as that infringes on the user's name space.
    	     Don't have undefined behavior even if the translation
    	     produced a string with the wrong number of "%s"s.  */
    	  char *yyp = yyresult;
    	  int yyi = 0;
    	  while ((*yyp = *yyf) != '\0')
    	    {
    	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
    		{
    		  yyp += yytnamerr (yyp, yyarg[yyi++]);
    		  yyf += 2;
    		}
    	      else
    		{
    		  yyp++;
    		  yyf++;
    		}
    	    }
    	}
          return yysize;
        }
    }
    #endif /* YYERROR_VERBOSE */
    
    
    /*-----------------------------------------------.
    | Release the memory associated to this symbol.  |
    `-----------------------------------------------*/
    
    /*ARGSUSED*/
    #if (defined __STDC__ || defined __C99__FUNC__ \
         || defined __cplusplus || defined _MSC_VER)
    static void
    yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
    #else
    static void
    yydestruct (yymsg, yytype, yyvaluep)
        const char *yymsg;
        int yytype;
        YYSTYPE *yyvaluep;
    #endif
    {
      YYUSE (yyvaluep);
    
      if (!yymsg)
        yymsg = "Deleting";
      YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
    
      switch (yytype)
        {
    
          default:
    	break;
        }
    }
    
    
    /* Prevent warnings from -Wmissing-prototypes.  */
    
    #ifdef YYPARSE_PARAM
    #if defined __STDC__ || defined __cplusplus
    int yyparse (void *YYPARSE_PARAM);
    #else
    int yyparse ();
    #endif
    #else /* ! YYPARSE_PARAM */
    #if defined __STDC__ || defined __cplusplus
    int yyparse (void);
    #else
    int yyparse ();
    #endif
    #endif /* ! YYPARSE_PARAM */
    
    
    
    /* The look-ahead symbol.  */
    int yychar;
    
    /* The semantic value of the look-ahead symbol.  */
    YYSTYPE yylval;
    
    /* Number of syntax errors so far.  */
    int yynerrs;
    
    
    
    /*----------.
    | yyparse.  |
    `----------*/
    
    #ifdef YYPARSE_PARAM
    #if (defined __STDC__ || defined __C99__FUNC__ \
         || defined __cplusplus || defined _MSC_VER)
    int
    yyparse (void *YYPARSE_PARAM)
    #else
    int
    yyparse (YYPARSE_PARAM)
        void *YYPARSE_PARAM;
    #endif
    #else /* ! YYPARSE_PARAM */
    #if (defined __STDC__ || defined __C99__FUNC__ \
         || defined __cplusplus || defined _MSC_VER)
    int
    yyparse (void)
    #else
    int
    yyparse ()
    
    #endif
    #endif
    {
      
      int yystate;
      int yyn;
      int yyresult;
      /* Number of tokens to shift before error messages enabled.  */
      int yyerrstatus;
      /* Look-ahead token as an internal (translated) token number.  */
      int yytoken = 0;
    #if YYERROR_VERBOSE
      /* Buffer for error messages, and its allocated size.  */
      char yymsgbuf[128];
      char *yymsg = yymsgbuf;
      YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
    #endif
    
      /* Three stacks and their tools:
         `yyss': related to states,
         `yyvs': related to semantic values,
         `yyls': related to locations.
    
         Refer to the stacks thru separate pointers, to allow yyoverflow
         to reallocate them elsewhere.  */
    
      /* The state stack.  */
      yytype_int16 yyssa[YYINITDEPTH];
      yytype_int16 *yyss = yyssa;
      yytype_int16 *yyssp;
    
      /* The semantic value stack.  */
      YYSTYPE yyvsa[YYINITDEPTH];
      YYSTYPE *yyvs = yyvsa;
      YYSTYPE *yyvsp;
    
    
    
    #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
    
      YYSIZE_T yystacksize = YYINITDEPTH;
    
      /* The variables used to return semantic value and location from the
         action routines.  */
      YYSTYPE yyval;
    
    
      /* The number of symbols on the RHS of the reduced rule.
         Keep to zero when no symbol should be popped.  */
      int yylen = 0;
    
      YYDPRINTF ((stderr, "Starting parse\n"));
    
      yystate = 0;
      yyerrstatus = 0;
      yynerrs = 0;
      yychar = YYEMPTY;		/* Cause a token to be read.  */
    
      /* Initialize stack pointers.
         Waste one element of value and location stack
         so that they stay on the same level as the state stack.
         The wasted elements are never initialized.  */
    
      yyssp = yyss;
      yyvsp = yyvs;
    
      goto yysetstate;
    
    /*------------------------------------------------------------.
    | yynewstate -- Push a new state, which is found in yystate.  |
    `------------------------------------------------------------*/
     yynewstate:
      /* In all cases, when you get here, the value and location stacks
         have just been pushed.  So pushing a state here evens the stacks.  */
      yyssp++;
    
     yysetstate:
      *yyssp = yystate;
    
      if (yyss + yystacksize - 1 <= yyssp)
        {
          /* Get the current used size of the three stacks, in elements.  */
          YYSIZE_T yysize = yyssp - yyss + 1;
    
    #ifdef yyoverflow
          {
    	/* Give user a chance to reallocate the stack.  Use copies of
    	   these so that the &'s don't force the real ones into
    	   memory.  */
    	YYSTYPE *yyvs1 = yyvs;
    	yytype_int16 *yyss1 = yyss;
    
    
    	/* Each stack pointer address is followed by the size of the
    	   data in use in that stack, in bytes.  This used to be a
    	   conditional around just the two extra args, but that might
    	   be undefined if yyoverflow is a macro.  */
    	yyoverflow (YY_("memory exhausted"),
    		    &yyss1, yysize * sizeof (*yyssp),
    		    &yyvs1, yysize * sizeof (*yyvsp),
    
    		    &yystacksize);
    
    	yyss = yyss1;
    	yyvs = yyvs1;
          }
    #else /* no yyoverflow */
    # ifndef YYSTACK_RELOCATE
          goto yyexhaustedlab;
    # else
          /* Extend the stack our own way.  */
          if (YYMAXDEPTH <= yystacksize)
    	goto yyexhaustedlab;
          yystacksize *= 2;
          if (YYMAXDEPTH < yystacksize)
    	yystacksize = YYMAXDEPTH;
    
          {
    	yytype_int16 *yyss1 = yyss;
    	union yyalloc *yyptr =
    	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
    	if (! yyptr)
    	  goto yyexhaustedlab;
    	YYSTACK_RELOCATE (yyss);
    	YYSTACK_RELOCATE (yyvs);
    
    #  undef YYSTACK_RELOCATE
    	if (yyss1 != yyssa)
    	  YYSTACK_FREE (yyss1);
          }
    # endif
    #endif /* no yyoverflow */
    
          yyssp = yyss + yysize - 1;
          yyvsp = yyvs + yysize - 1;
    
    
          YYDPRINTF ((stderr, "Stack size increased to %lu\n",
    		  (unsigned long int) yystacksize));
    
          if (yyss + yystacksize - 1 <= yyssp)
    	YYABORT;
        }
    
      YYDPRINTF ((stderr, "Entering state %d\n", yystate));
    
      goto yybackup;
    
    /*-----------.
    | yybackup.  |
    `-----------*/
    yybackup:
    
      /* Do appropriate processing given the current state.  Read a
         look-ahead token if we need one and don't already have one.  */
    
      /* First try to decide what to do without reference to look-ahead token.  */
      yyn = yypact[yystate];
      if (yyn == YYPACT_NINF)
        goto yydefault;
    
      /* Not known => get a look-ahead token if don't already have one.  */
    
      /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
      if (yychar == YYEMPTY)
        {
          YYDPRINTF ((stderr, "Reading a token: "));
          yychar = YYLEX;
        }
    
      if (yychar <= YYEOF)
        {
          yychar = yytoken = YYEOF;
          YYDPRINTF ((stderr, "Now at end of input.\n"));
        }
      else
        {
          yytoken = YYTRANSLATE (yychar);
          YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
        }
    
      /* If the proper action on seeing token YYTOKEN is to reduce or to
         detect an error, take that action.  */
      yyn += yytoken;
      if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
        goto yydefault;
      yyn = yytable[yyn];
      if (yyn <= 0)
        {
          if (yyn == 0 || yyn == YYTABLE_NINF)
    	goto yyerrlab;
          yyn = -yyn;
          goto yyreduce;
        }
    
      if (yyn == YYFINAL)
        YYACCEPT;
    
      /* Count tokens shifted since error; after three, turn off error
         status.  */
      if (yyerrstatus)
        yyerrstatus--;
    
      /* Shift the look-ahead token.  */
      YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
    
      /* Discard the shifted token unless it is eof.  */
      if (yychar != YYEOF)
        yychar = YYEMPTY;
    
      yystate = yyn;
      *++yyvsp = yylval;
    
      goto yynewstate;
    
    
    /*-----------------------------------------------------------.
    | yydefault -- do the default action for the current state.  |
    `-----------------------------------------------------------*/
    yydefault:
      yyn = yydefact[yystate];
      if (yyn == 0)
        goto yyerrlab;
      goto yyreduce;
    
    
    /*-----------------------------.
    | yyreduce -- Do a reduction.  |
    `-----------------------------*/
    yyreduce:
      /* yyn is the number of a rule to reduce with.  */
      yylen = yyr2[yyn];
    
      /* If YYLEN is nonzero, implement the default value of the action:
         `$$ = $1'.
    
         Otherwise, the following line sets YYVAL to garbage.
         This behavior is undocumented and Bison
         users should not rely upon it.  Assigning to YYVAL
         unconditionally makes the parser a bit smaller, and it avoids a
         GCC warning that YYVAL may be used uninitialized.  */
      yyval = yyvsp[1-yylen];
    
    
      YY_REDUCE_PRINT (yyn);
      switch (yyn)
        {
            case 3:
    #line 160 "Gmsh.y"
        { yyerrok; return 1; ;}
        break;
    
      case 6:
    #line 171 "Gmsh.y"
        { return 1; ;}
        break;
    
      case 7:
    #line 172 "Gmsh.y"
        { return 1; ;}
        break;
    
      case 8:
    #line 173 "Gmsh.y"
        { return 1; ;}
        break;
    
      case 9:
    #line 174 "Gmsh.y"
        { return 1; ;}
        break;
    
      case 10:
    #line 175 "Gmsh.y"
        { List_Delete((yyvsp[(1) - (1)].l)); return 1; ;}
        break;
    
      case 11:
    #line 176 "Gmsh.y"
        { return 1; ;}
        break;
    
      case 12:
    #line 177 "Gmsh.y"
        { return 1; ;}
        break;
    
      case 13:
    #line 178 "Gmsh.y"
        { return 1; ;}
        break;
    
      case 14:
    #line 179 "Gmsh.y"
        { List_Delete((yyvsp[(1) - (1)].l)); return 1; ;}
        break;
    
      case 15:
    #line 180 "Gmsh.y"
        { return 1; ;}
        break;
    
      case 16:
    #line 181 "Gmsh.y"
        { return 1; ;}
        break;
    
      case 17:
    #line 182 "Gmsh.y"
        { return 1; ;}
        break;
    
      case 18:
    #line 183 "Gmsh.y"
        { return 1; ;}
        break;
    
      case 19:
    #line 184 "Gmsh.y"
        { return 1; ;}
        break;
    
      case 20:
    #line 185 "Gmsh.y"
        { return 1; ;}
        break;
    
      case 21:
    #line 186 "Gmsh.y"
        { return 1; ;}
        break;
    
      case 22:
    #line 187 "Gmsh.y"
        { return 1; ;}
        break;
    
      case 23:
    #line 192 "Gmsh.y"
        {
          (yyval.c) = (char*)"w";
        ;}
        break;
    
      case 24:
    #line 196 "Gmsh.y"
        {
          (yyval.c) = (char*)"a";
        ;}
        break;
    
      case 25:
    #line 203 "Gmsh.y"
        {
          Msg::Direct((yyvsp[(3) - (5)].c));
          Free((yyvsp[(3) - (5)].c));
        ;}
        break;
    
      case 26:
    #line 208 "Gmsh.y"
        {
          std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(6) - (7)].c));
          FILE *fp = fopen(tmp.c_str(), (yyvsp[(5) - (7)].c));
          if(!fp){
    	yymsg(0, "Unable to open file '%s'", tmp.c_str());
          }
          else{
    	fprintf(fp, "%s\n", (yyvsp[(3) - (7)].c));
    	fclose(fp);
          }
          Free((yyvsp[(3) - (7)].c));
          Free((yyvsp[(6) - (7)].c));
        ;}
        break;
    
      case 27:
    #line 222 "Gmsh.y"
        {
          char tmpstring[1024];
          int i = PrintListOfDouble((yyvsp[(3) - (7)].c), (yyvsp[(5) - (7)].l), tmpstring);
          if(i < 0) 
    	yymsg(0, "Too few arguments in Printf");
          else if(i > 0)
    	yymsg(0, "%d extra argument%s in Printf", i, (i > 1) ? "s" : "");
          else
    	Msg::Direct(tmpstring);
          Free((yyvsp[(3) - (7)].c));
          List_Delete((yyvsp[(5) - (7)].l));
        ;}
        break;
    
      case 28:
    #line 235 "Gmsh.y"
        {
          char tmpstring[1024];
          int i = PrintListOfDouble((yyvsp[(3) - (9)].c), (yyvsp[(5) - (9)].l), tmpstring);
          if(i < 0) 
    	yymsg(0, "Too few arguments in Printf");
          else if(i > 0)
    	yymsg(0, "%d extra argument%s in Printf", i, (i > 1) ? "s" : "");
          else{
            std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(8) - (9)].c));
    	FILE *fp = fopen(tmp.c_str(), (yyvsp[(7) - (9)].c));
    	if(!fp){
    	  yymsg(0, "Unable to open file '%s'", tmp.c_str());
    	}
    	else{
    	  fprintf(fp, "%s\n", tmpstring);
    	  fclose(fp);
    	}
          }
          Free((yyvsp[(3) - (9)].c));
          Free((yyvsp[(8) - (9)].c));
          List_Delete((yyvsp[(5) - (9)].l));
        ;}
        break;
    
      case 29:
    #line 263 "Gmsh.y"
        { 
    #if defined(HAVE_POST)
          if(!strcmp((yyvsp[(1) - (6)].c), "View") && ViewData->finalize()){
    	ViewData->setName((yyvsp[(2) - (6)].c));
    	ViewData->setFileName(gmsh_yyname);
    	ViewData->setFileIndex(gmsh_yyviewindex++);
    	new PView(ViewData);
          }
          else
    	delete ViewData;
    #endif
          Free((yyvsp[(1) - (6)].c)); Free((yyvsp[(2) - (6)].c));
        ;}
        break;
    
      case 30:
    #line 277 "Gmsh.y"
        {
    #if defined(HAVE_POST)
          if(!strcmp((yyvsp[(2) - (6)].c), "View")){
    	int index = (int)(yyvsp[(4) - (6)].d);
    	if(index >= 0 && index < (int)PView::list.size())
    	  new PView(PView::list[index], false);
          }
    #endif
          Free((yyvsp[(2) - (6)].c));
        ;}
        break;
    
      case 31:
    #line 288 "Gmsh.y"
        {
    #if defined(HAVE_POST)
          if(!strcmp((yyvsp[(2) - (6)].c), "View")){
    	int index = (int)(yyvsp[(4) - (6)].d);
    	if(index >= 0 && index < (int)PView::list.size())
    	  new PView(PView::list[index], true);
          }
    #endif
          Free((yyvsp[(2) - (6)].c));
        ;}
        break;
    
      case 32:
    #line 302 "Gmsh.y"
        {
    #if defined(HAVE_POST)
          ViewData = new PViewDataList(); 
    #endif
        ;}
        break;
    
      case 38:
    #line 316 "Gmsh.y"
        { ViewCoord.push_back((yyvsp[(1) - (1)].d)); ;}
        break;
    
      case 39:
    #line 318 "Gmsh.y"
        { ViewCoord.push_back((yyvsp[(3) - (3)].d)); ;}
        break;
    
      case 40:
    #line 323 "Gmsh.y"
        { if(ViewValueList) ViewValueList->push_back((yyvsp[(1) - (1)].d)); ;}
        break;
    
      case 41:
    #line 325 "Gmsh.y"
        { if(ViewValueList) ViewValueList->push_back((yyvsp[(3) - (3)].d)); ;}
        break;
    
      case 42:
    #line 330 "Gmsh.y"
        {
    #if defined(HAVE_POST)
          if(!strncmp((yyvsp[(1) - (1)].c), "SP", 2)){
    	ViewValueList = &ViewData->SP; ViewNumList = &ViewData->NbSP;
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "VP", 2)){
    	ViewValueList = &ViewData->VP; ViewNumList = &ViewData->NbVP;
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "TP", 2)){
    	ViewValueList = &ViewData->TP; ViewNumList = &ViewData->NbTP;
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "SL", 2)){
    	ViewValueList = &ViewData->SL; ViewNumList = &ViewData->NbSL;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_LIN);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "VL", 2)){
    	ViewValueList = &ViewData->VL; ViewNumList = &ViewData->NbVL;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_LIN);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "TL", 2)){
    	ViewValueList = &ViewData->TL; ViewNumList = &ViewData->NbTL;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_LIN);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "ST", 2)){
    	ViewValueList = &ViewData->ST; ViewNumList = &ViewData->NbST;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_TRI);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "VT", 2)){
    	ViewValueList = &ViewData->VT; ViewNumList = &ViewData->NbVT;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_TRI);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "TT", 2)){
    	ViewValueList = &ViewData->TT; ViewNumList = &ViewData->NbTT;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_TRI);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "SQ", 2)){
    	ViewValueList = &ViewData->SQ; ViewNumList = &ViewData->NbSQ;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_QUA);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "VQ", 2)){
    	ViewValueList = &ViewData->VQ; ViewNumList = &ViewData->NbVQ;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_QUA);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "TQ", 2)){
    	ViewValueList = &ViewData->TQ; ViewNumList = &ViewData->NbTQ;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_QUA);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "SS", 2)){
    	ViewValueList = &ViewData->SS; ViewNumList = &ViewData->NbSS;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_TET);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "VS", 2)){
    	ViewValueList = &ViewData->VS; ViewNumList = &ViewData->NbVS;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_TET);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "TS", 2)){
    	ViewValueList = &ViewData->TS; ViewNumList = &ViewData->NbTS;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_TET);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "SH", 2)){
    	ViewValueList = &ViewData->SH; ViewNumList = &ViewData->NbSH;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_HEX);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "VH", 2)){
    	ViewValueList = &ViewData->VH; ViewNumList = &ViewData->NbVH;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_HEX);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "TH", 2)){
    	ViewValueList = &ViewData->TH; ViewNumList = &ViewData->NbTH;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_HEX);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "SI", 2)){
    	ViewValueList = &ViewData->SI; ViewNumList = &ViewData->NbSI;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_PRI);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "VI", 2)){
    	ViewValueList = &ViewData->VI; ViewNumList = &ViewData->NbVI;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_PRI);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "TI", 2)){
    	ViewValueList = &ViewData->TI; ViewNumList = &ViewData->NbTI;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_PRI);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "SY", 2)){
    	ViewValueList = &ViewData->SY; ViewNumList = &ViewData->NbSY;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_PYR);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "VY", 2)){
    	ViewValueList = &ViewData->VY; ViewNumList = &ViewData->NbVY;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_PYR);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "TY", 2)){
    	ViewValueList = &ViewData->TY; ViewNumList = &ViewData->NbTY;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_PYR);
          }
          else{
    	yymsg(0, "Unknown element type '%s'", (yyvsp[(1) - (1)].c));	
    	ViewValueList = 0; ViewNumList = 0;
          }
    #endif
          ViewCoord.clear();
          Free((yyvsp[(1) - (1)].c));
        ;}
        break;
    
      case 43:
    #line 434 "Gmsh.y"
        {
    #if defined(HAVE_POST)
          if(ViewValueList){
    	for(int i = 0; i < 3; i++)
    	  for(unsigned int j = 0; j < ViewCoord.size() / 3; j++) 
    	    ViewValueList->push_back(ViewCoord[3 * j + i]);
          }
    #endif
        ;}
        break;
    
      case 44:
    #line 444 "Gmsh.y"
        {
    #if defined(HAVE_POST)
          if(ViewValueList) (*ViewNumList)++;
    #endif
        ;}
        break;
    
      case 45:
    #line 453 "Gmsh.y"
        { 
    #if defined(HAVE_POST)
          for(int i = 0; i < (int)strlen((yyvsp[(1) - (1)].c)) + 1; i++) ViewData->T2C.push_back((yyvsp[(1) - (1)].c)[i]);
    #endif
          Free((yyvsp[(1) - (1)].c));
        ;}
        break;
    
      case 46:
    #line 460 "Gmsh.y"
        { 
    #if defined(HAVE_POST)
          for(int i = 0; i < (int)strlen((yyvsp[(3) - (3)].c)) + 1; i++) ViewData->T2C.push_back((yyvsp[(3) - (3)].c)[i]);
    #endif
          Free((yyvsp[(3) - (3)].c));
        ;}
        break;
    
      case 47:
    #line 470 "Gmsh.y"
        { 
    #if defined(HAVE_POST)
          ViewData->T2D.push_back((yyvsp[(3) - (8)].d)); 
          ViewData->T2D.push_back((yyvsp[(5) - (8)].d));
          ViewData->T2D.push_back((yyvsp[(7) - (8)].d)); 
          ViewData->T2D.push_back(ViewData->T2C.size()); 
    #endif
        ;}
        break;
    
      case 48:
    #line 479 "Gmsh.y"
        {
    #if defined(HAVE_POST)
          ViewData->NbT2++;
    #endif
        ;}
        break;
    
      case 49:
    #line 488 "Gmsh.y"
        { 
    #if defined(HAVE_POST)
          for(int i = 0; i < (int)strlen((yyvsp[(1) - (1)].c)) + 1; i++) ViewData->T3C.push_back((yyvsp[(1) - (1)].c)[i]);
    #endif
          Free((yyvsp[(1) - (1)].c));
        ;}
        break;
    
      case 50:
    #line 495 "Gmsh.y"
        { 
    #if defined(HAVE_POST)
          for(int i = 0; i < (int)strlen((yyvsp[(3) - (3)].c)) + 1; i++) ViewData->T3C.push_back((yyvsp[(3) - (3)].c)[i]);
    #endif
          Free((yyvsp[(3) - (3)].c));
        ;}
        break;
    
      case 51:
    #line 505 "Gmsh.y"
        { 
    #if defined(HAVE_POST)
          ViewData->T3D.push_back((yyvsp[(3) - (10)].d)); ViewData->T3D.push_back((yyvsp[(5) - (10)].d));
          ViewData->T3D.push_back((yyvsp[(7) - (10)].d)); ViewData->T3D.push_back((yyvsp[(9) - (10)].d));
          ViewData->T3D.push_back(ViewData->T3C.size()); 
    #endif
        ;}
        break;
    
      case 52:
    #line 513 "Gmsh.y"
        {
    #if defined(HAVE_POST)
          ViewData->NbT3++;
    #endif
        ;}
        break;
    
      case 53:
    #line 523 "Gmsh.y"
        {
    #if defined(HAVE_POST)
          int type = 
    	(ViewData->NbSL || ViewData->NbVL) ? TYPE_LIN : 
    	(ViewData->NbST || ViewData->NbVT) ? TYPE_TRI : 
    	(ViewData->NbSQ || ViewData->NbVQ) ? TYPE_QUA : 
    	(ViewData->NbSS || ViewData->NbVS) ? TYPE_TET : 
    	(ViewData->NbSY || ViewData->NbVY) ? TYPE_PYR : 
    	(ViewData->NbSI || ViewData->NbVI) ? TYPE_PRI : 
          	(ViewData->NbSH || ViewData->NbVH) ? TYPE_HEX : 
    	0;
          ViewData->setInterpolationMatrices(type, ListOfListOfDouble2Matrix((yyvsp[(3) - (8)].l)), 
                                             ListOfListOfDouble2Matrix((yyvsp[(6) - (8)].l)));
    #endif
        ;}
        break;
    
      case 54:
    #line 542 "Gmsh.y"
        {
    #if defined(HAVE_POST)
          int type = 
    	(ViewData->NbSL || ViewData->NbVL) ? TYPE_LIN : 
    	(ViewData->NbST || ViewData->NbVT) ? TYPE_TRI : 
    	(ViewData->NbSQ || ViewData->NbVQ) ? TYPE_QUA : 
    	(ViewData->NbSS || ViewData->NbVS) ? TYPE_TET : 
          	(ViewData->NbSH || ViewData->NbVH) ? TYPE_HEX : 
    	0;
          ViewData->setInterpolationMatrices(type, ListOfListOfDouble2Matrix((yyvsp[(3) - (14)].l)), 
                                             ListOfListOfDouble2Matrix((yyvsp[(6) - (14)].l)),
                                             ListOfListOfDouble2Matrix((yyvsp[(9) - (14)].l)), 
                                             ListOfListOfDouble2Matrix((yyvsp[(12) - (14)].l)));
    #endif
        ;}
        break;
    
      case 55:
    #line 561 "Gmsh.y"
        {
    #if defined(HAVE_POST)
          ViewValueList = &ViewData->Time;
    #endif
        ;}
        break;
    
      case 56:
    #line 567 "Gmsh.y"
        {
        ;}
        break;
    
      case 57:
    #line 574 "Gmsh.y"
        { (yyval.i) = 0; ;}
        break;
    
      case 58:
    #line 575 "Gmsh.y"
        { (yyval.i) = 1; ;}
        break;
    
      case 59:
    #line 576 "Gmsh.y"
        { (yyval.i) = 2; ;}
        break;
    
      case 60:
    #line 577 "Gmsh.y"
        { (yyval.i) = 3; ;}
        break;
    
      case 61:
    #line 578 "Gmsh.y"
        { (yyval.i) = 4; ;}
        break;
    
      case 62:
    #line 582 "Gmsh.y"
        { (yyval.i) = 1; ;}
        break;
    
      case 63:
    #line 583 "Gmsh.y"
        { (yyval.i) = -1; ;}
        break;
    
      case 64:
    #line 591 "Gmsh.y"
        {
          if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
    	if(!(yyvsp[(2) - (4)].i))
    	  gmsh_yysymbols[(yyvsp[(1) - (4)].c)].push_back((yyvsp[(3) - (4)].d));
    	else
    	  yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (4)].c));
          }
          else{
            if(gmsh_yysymbols[(yyvsp[(1) - (4)].c)].empty()){
              if((yyvsp[(2) - (4)].i)) yymsg(0, "Uninitialized variable '%s'", (yyvsp[(1) - (4)].c));
              gmsh_yysymbols[(yyvsp[(1) - (4)].c)].resize(1, 0.);
            }
    	switch((yyvsp[(2) - (4)].i)){
    	case 0 : gmsh_yysymbols[(yyvsp[(1) - (4)].c)][0] = (yyvsp[(3) - (4)].d); break;
    	case 1 : gmsh_yysymbols[(yyvsp[(1) - (4)].c)][0] += (yyvsp[(3) - (4)].d); break;
    	case 2 : gmsh_yysymbols[(yyvsp[(1) - (4)].c)][0] -= (yyvsp[(3) - (4)].d); break;
    	case 3 : gmsh_yysymbols[(yyvsp[(1) - (4)].c)][0] *= (yyvsp[(3) - (4)].d); break;
    	case 4 : 
    	  if((yyvsp[(3) - (4)].d)) gmsh_yysymbols[(yyvsp[(1) - (4)].c)][0] /= (yyvsp[(3) - (4)].d); 
    	  else yymsg(0, "Division by zero in '%s /= %g'", (yyvsp[(1) - (4)].c), (yyvsp[(3) - (4)].d));
    	  break;
    	}
          }
          Free((yyvsp[(1) - (4)].c));
        ;}
        break;
    
      case 65:
    #line 617 "Gmsh.y"
        {
          int index = (int)(yyvsp[(3) - (7)].d);
          if(!gmsh_yysymbols.count((yyvsp[(1) - (7)].c))){
    	if(!(yyvsp[(5) - (7)].i)){
    	  gmsh_yysymbols[(yyvsp[(1) - (7)].c)].resize(index + 1, 0.);
    	  gmsh_yysymbols[(yyvsp[(1) - (7)].c)][index] = (yyvsp[(6) - (7)].d);
    	}
    	else
    	  yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (7)].c));
          }
          else{
    	if((int)gmsh_yysymbols[(yyvsp[(1) - (7)].c)].size() < index + 1)
    	  gmsh_yysymbols[(yyvsp[(1) - (7)].c)].resize(index + 1, 0.);
    	switch((yyvsp[(5) - (7)].i)){
    	case 0 : gmsh_yysymbols[(yyvsp[(1) - (7)].c)][index] = (yyvsp[(6) - (7)].d); break;
    	case 1 : gmsh_yysymbols[(yyvsp[(1) - (7)].c)][index] += (yyvsp[(6) - (7)].d); break;
    	case 2 : gmsh_yysymbols[(yyvsp[(1) - (7)].c)][index] -= (yyvsp[(6) - (7)].d); break;
    	case 3 : gmsh_yysymbols[(yyvsp[(1) - (7)].c)][index] *= (yyvsp[(6) - (7)].d); break;
    	case 4 : 
    	  if((yyvsp[(6) - (7)].d)) gmsh_yysymbols[(yyvsp[(1) - (7)].c)][index] /= (yyvsp[(6) - (7)].d); 
    	  else yymsg(0, "Division by zero in '%s[%d] /= %g'", (yyvsp[(1) - (7)].c), index, (yyvsp[(6) - (7)].d));
    	  break;
    	}
          }
          Free((yyvsp[(1) - (7)].c));
        ;}
        break;
    
      case 66:
    #line 644 "Gmsh.y"
        {
          if(List_Nbr((yyvsp[(4) - (9)].l)) != List_Nbr((yyvsp[(8) - (9)].l))){
    	yymsg(0, "Incompatible array dimensions in affectation");
          }
          else{
    	if(!gmsh_yysymbols.count((yyvsp[(1) - (9)].c))){
    	  if(!(yyvsp[(7) - (9)].i)){
    	    for(int i = 0; i < List_Nbr((yyvsp[(4) - (9)].l)); i++){
    	      int index = (int)(*(double*)List_Pointer((yyvsp[(4) - (9)].l), i));
    	      gmsh_yysymbols[(yyvsp[(1) - (9)].c)].resize(index + 1, 0.);
    	      gmsh_yysymbols[(yyvsp[(1) - (9)].c)][index] = *(double*)List_Pointer((yyvsp[(8) - (9)].l), i);
    	    }
    	  }
    	  else
    	    yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (9)].c));
    	}
    	else{
    	  for(int i = 0; i < List_Nbr((yyvsp[(4) - (9)].l)); i++){
    	    int index = (int)(*(double*)List_Pointer((yyvsp[(4) - (9)].l), i));
    	    double d = *(double*)List_Pointer((yyvsp[(8) - (9)].l), i);
    	    if((int)gmsh_yysymbols[(yyvsp[(1) - (9)].c)].size() < index + 1)
    	      gmsh_yysymbols[(yyvsp[(1) - (9)].c)].resize(index + 1, 0.);
    	    switch((yyvsp[(7) - (9)].i)){
    	    case 0 : gmsh_yysymbols[(yyvsp[(1) - (9)].c)][index] = d; break;
    	    case 1 : gmsh_yysymbols[(yyvsp[(1) - (9)].c)][index] += d; break;
    	    case 2 : gmsh_yysymbols[(yyvsp[(1) - (9)].c)][index] -= d; break;
    	    case 3 : gmsh_yysymbols[(yyvsp[(1) - (9)].c)][index] *= d; break;
    	    case 4 : 
    	      if((yyvsp[(8) - (9)].l)) gmsh_yysymbols[(yyvsp[(1) - (9)].c)][index] /= d; 
    	      else yymsg(0, "Division by zero in '%s[%d] /= %g'", (yyvsp[(1) - (9)].c), index, d);
    	      break;
    	    }
    	  }
    	}
          }
          Free((yyvsp[(1) - (9)].c));
          List_Delete((yyvsp[(4) - (9)].l));
          List_Delete((yyvsp[(8) - (9)].l));
        ;}
        break;
    
      case 67:
    #line 684 "Gmsh.y"
        {
          if(gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
    	gmsh_yysymbols[(yyvsp[(1) - (6)].c)].clear();
          gmsh_yysymbols[(yyvsp[(1) - (6)].c)] = std::vector<double>();
          for(int i = 0; i < List_Nbr((yyvsp[(5) - (6)].l)); i++)
            gmsh_yysymbols[(yyvsp[(1) - (6)].c)].push_back(*(double*)List_Pointer((yyvsp[(5) - (6)].l), i));
          Free((yyvsp[(1) - (6)].c));
          List_Delete((yyvsp[(5) - (6)].l));
        ;}
        break;
    
      case 68:
    #line 694 "Gmsh.y"
        {
          // appends to the list
          for(int i = 0; i < List_Nbr((yyvsp[(5) - (6)].l)); i++)
    	gmsh_yysymbols[(yyvsp[(1) - (6)].c)].push_back(*(double*)List_Pointer((yyvsp[(5) - (6)].l), i));
          Free((yyvsp[(1) - (6)].c));
          List_Delete((yyvsp[(5) - (6)].l));
        ;}
        break;
    
      case 69:
    #line 702 "Gmsh.y"
        {
          if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
    	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (3)].c)); 
          else{
            if(gmsh_yysymbols[(yyvsp[(1) - (3)].c)].empty())
              yymsg(0, "Uninitialized variable '%s'", (yyvsp[(1) - (3)].c));
            else
              gmsh_yysymbols[(yyvsp[(1) - (3)].c)][0] += (yyvsp[(2) - (3)].i);
          }
          Free((yyvsp[(1) - (3)].c));
        ;}
        break;
    
      case 70:
    #line 714 "Gmsh.y"
        {
          if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
    	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (6)].c)); 
          else{
    	int index = (int)(yyvsp[(3) - (6)].d);
    	if((int)gmsh_yysymbols[(yyvsp[(1) - (6)].c)].size() < index + 1)
    	  gmsh_yysymbols[(yyvsp[(1) - (6)].c)].resize(index + 1, 0.);
    	gmsh_yysymbols[(yyvsp[(1) - (6)].c)][index] += (yyvsp[(5) - (6)].i);
          }
          Free((yyvsp[(1) - (6)].c));
        ;}
        break;
    
      case 71:
    #line 726 "Gmsh.y"
        { 
          gmsh_yystringsymbols[(yyvsp[(1) - (4)].c)] = std::string((yyvsp[(3) - (4)].c));
          Free((yyvsp[(1) - (4)].c));
          Free((yyvsp[(3) - (4)].c));
        ;}
        break;
    
      case 72:
    #line 735 "Gmsh.y"
        { 
          std::string tmp((yyvsp[(5) - (6)].c));
          StringOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (6)].c), 0, (yyvsp[(3) - (6)].c), tmp);
          Free((yyvsp[(1) - (6)].c)); Free((yyvsp[(3) - (6)].c)); Free((yyvsp[(5) - (6)].c))
        ;}
        break;
    
      case 73:
    #line 741 "Gmsh.y"
        { 
          std::string tmp((yyvsp[(8) - (9)].c));
          StringOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (9)].c), (int)(yyvsp[(3) - (9)].d), (yyvsp[(6) - (9)].c), tmp);
          Free((yyvsp[(1) - (9)].c)); Free((yyvsp[(6) - (9)].c)); Free((yyvsp[(8) - (9)].c))
        ;}
        break;
    
      case 74:
    #line 750 "Gmsh.y"
        {
          double d = 0.;
          if(NumberOption(GMSH_GET, (yyvsp[(1) - (6)].c), 0, (yyvsp[(3) - (6)].c), d)){
    	switch((yyvsp[(4) - (6)].i)){
    	case 0 : d = (yyvsp[(5) - (6)].d); break;
    	case 1 : d += (yyvsp[(5) - (6)].d); break;
    	case 2 : d -= (yyvsp[(5) - (6)].d); break;
    	case 3 : d *= (yyvsp[(5) - (6)].d); break;
    	case 4 : 
    	  if((yyvsp[(5) - (6)].d)) d /= (yyvsp[(5) - (6)].d); 
    	  else yymsg(0, "Division by zero in '%s.%s /= %g'", (yyvsp[(1) - (6)].c), (yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
    	  break;
    	}
    	NumberOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (6)].c), 0, (yyvsp[(3) - (6)].c), d);
          }
          Free((yyvsp[(1) - (6)].c)); Free((yyvsp[(3) - (6)].c));
        ;}
        break;
    
      case 75:
    #line 768 "Gmsh.y"
        {
          double d = 0.;
          if(NumberOption(GMSH_GET, (yyvsp[(1) - (9)].c), (int)(yyvsp[(3) - (9)].d), (yyvsp[(6) - (9)].c), d)){
    	switch((yyvsp[(7) - (9)].i)){
    	case 0 : d = (yyvsp[(8) - (9)].d); break;
    	case 1 : d += (yyvsp[(8) - (9)].d); break;
    	case 2 : d -= (yyvsp[(8) - (9)].d); break;
    	case 3 : d *= (yyvsp[(8) - (9)].d); break;
    	case 4 : 
    	  if((yyvsp[(8) - (9)].d)) d /= (yyvsp[(8) - (9)].d); 
    	  else yymsg(0, "Division by zero in '%s[%d].%s /= %g'", (yyvsp[(1) - (9)].c), (int)(yyvsp[(3) - (9)].d), (yyvsp[(6) - (9)].c), (yyvsp[(8) - (9)].d));
    	  break;
    	}
    	NumberOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (9)].c), (int)(yyvsp[(3) - (9)].d), (yyvsp[(6) - (9)].c), d);
          }
          Free((yyvsp[(1) - (9)].c)); Free((yyvsp[(6) - (9)].c));
        ;}
        break;
    
      case 76:
    #line 786 "Gmsh.y"
        {
          double d = 0.;
          if(NumberOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(3) - (5)].c), d)){
    	d += (yyvsp[(4) - (5)].i);
    	NumberOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (5)].c), 0, (yyvsp[(3) - (5)].c), d);
          }
          Free((yyvsp[(1) - (5)].c)); Free((yyvsp[(3) - (5)].c));
        ;}
        break;
    
      case 77:
    #line 795 "Gmsh.y"
        {
          double d = 0.;
          if(NumberOption(GMSH_GET, (yyvsp[(1) - (8)].c), (int)(yyvsp[(3) - (8)].d), (yyvsp[(6) - (8)].c), d)){
    	d += (yyvsp[(7) - (8)].i);
    	NumberOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (8)].c), (int)(yyvsp[(3) - (8)].d), (yyvsp[(6) - (8)].c), d);
          }
          Free((yyvsp[(1) - (8)].c)); Free((yyvsp[(6) - (8)].c));
        ;}
        break;
    
      case 78:
    #line 807 "Gmsh.y"
        {
          ColorOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (8)].c), 0, (yyvsp[(5) - (8)].c), (yyvsp[(7) - (8)].u));
          Free((yyvsp[(1) - (8)].c)); Free((yyvsp[(5) - (8)].c));
        ;}
        break;
    
      case 79:
    #line 812 "Gmsh.y"
        {
          ColorOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (11)].c), (int)(yyvsp[(3) - (11)].d), (yyvsp[(8) - (11)].c), (yyvsp[(10) - (11)].u));
          Free((yyvsp[(1) - (11)].c)); Free((yyvsp[(8) - (11)].c));
        ;}
        break;
    
      case 80:
    #line 820 "Gmsh.y"
        {
          GmshColorTable *ct = GetColorTable(0);
          if(!ct)
    	yymsg(0, "View[%d] does not exist", 0);
          else{
    	ct->size = List_Nbr((yyvsp[(5) - (6)].l));
    	if(ct->size > COLORTABLE_NBMAX_COLOR)
    	  yymsg(0, "Too many (%d>%d) colors in View[%d].ColorTable", 
    		ct->size, COLORTABLE_NBMAX_COLOR, 0);
    	else
    	  for(int i = 0; i < ct->size; i++) List_Read((yyvsp[(5) - (6)].l), i, &ct->table[i]);
    	if(ct->size == 1){
    	  ct->size = 2;
    	  ct->table[1] = ct->table[0];
    	}
          }
          Free((yyvsp[(1) - (6)].c));
          List_Delete((yyvsp[(5) - (6)].l));
        ;}
        break;
    
      case 81:
    #line 840 "Gmsh.y"
        {
          GmshColorTable *ct = GetColorTable((int)(yyvsp[(3) - (9)].d));
          if(!ct)
    	yymsg(0, "View[%d] does not exist", (int)(yyvsp[(3) - (9)].d));
          else{
    	ct->size = List_Nbr((yyvsp[(8) - (9)].l));
    	if(ct->size > COLORTABLE_NBMAX_COLOR)
    	  yymsg(0, "Too many (%d>%d) colors in View[%d].ColorTable", 
    		   ct->size, COLORTABLE_NBMAX_COLOR, (int)(yyvsp[(3) - (9)].d));
    	else
    	  for(int i = 0; i < ct->size; i++) List_Read((yyvsp[(8) - (9)].l), i, &ct->table[i]);
    	if(ct->size == 1){
    	  ct->size = 2;
    	  ct->table[1] = ct->table[0];
    	}
          }
          Free((yyvsp[(1) - (9)].c));
          List_Delete((yyvsp[(8) - (9)].l));
        ;}
        break;
    
      case 82:
    #line 863 "Gmsh.y"
        {
    #if defined(HAVE_MESH)
          if(!strcmp((yyvsp[(1) - (5)].c),"Background"))
    	GModel::current()->getFields()->background_field = (int)(yyvsp[(4) - (5)].d);
          else
    	yymsg(0, "Unknown command %s Field", (yyvsp[(1) - (5)].c));
    #endif
        ;}
        break;
    
      case 83:
    #line 872 "Gmsh.y"
        {
    #if defined(HAVE_MESH)
          if(!GModel::current()->getFields()->newField((int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c)))
    	yymsg(0, "Cannot create field %i of type '%s'", (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c));
    #endif
          Free((yyvsp[(6) - (7)].c));
        ;}
        break;
    
      case 84:
    #line 880 "Gmsh.y"
        {
    #if defined(HAVE_MESH)
          Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (9)].d));
          if(field){
    	FieldOption *option = field->options[(yyvsp[(6) - (9)].c)];
    	if(option){
    	  try { option->numericalValue((yyvsp[(8) - (9)].d)); }
    	  catch(...){
    	    yymsg(0, "Cannot assign a numerical value to option '%s' "
    		  "in field %i of type '%s'", (yyvsp[(6) - (9)].c), (int)(yyvsp[(3) - (9)].d), field->getName());
    	  }
    	}
    	else
    	  yymsg(0, "Unknown option '%s' in field %i of type '%s'",
    		(yyvsp[(6) - (9)].c), (int)(yyvsp[(3) - (9)].d), field->getName());
          }
          else
    	yymsg(0, "No field with id %i", (int)(yyvsp[(3) - (9)].d));
    #endif
          Free((yyvsp[(6) - (9)].c));
        ;}
        break;
    
      case 85:
    #line 902 "Gmsh.y"
        {
    #if defined(HAVE_MESH)
          Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (9)].d));
          if(field){
    	FieldOption *option = field->options[(yyvsp[(6) - (9)].c)];
    	if(option){
    	  try { option->string() = (yyvsp[(8) - (9)].c); }
    	  catch (...){
    	    yymsg(0, "Cannot assign a string value to  option '%s' "
    		  "in field %i of type '%s'", (yyvsp[(6) - (9)].c), (int)(yyvsp[(3) - (9)].d), field->getName());
    	  }
    	}
    	else 
    	  yymsg(0, "Unknown option '%s' in field %i of type '%s'", 
    		(yyvsp[(6) - (9)].c), (int)(yyvsp[(3) - (9)].d), field->getName());
          }
          else 
    	yymsg(0, "No field with id %i", (int)(yyvsp[(3) - (9)].d));
    #endif
          Free((yyvsp[(6) - (9)].c));
          Free((yyvsp[(8) - (9)].c));
        ;}
        break;
    
      case 86:
    #line 925 "Gmsh.y"
        {
    #if defined(HAVE_MESH)
          Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (11)].d));
          if(field){
    	FieldOption *option = field->options[(yyvsp[(6) - (11)].c)];
    	if(option){
    	  std::list<int> &vl = option->list();
    	  vl.clear();
    	  for(int i = 0; i < List_Nbr((yyvsp[(9) - (11)].l)); i++){
    	    double id;
    	    List_Read((yyvsp[(9) - (11)].l), i, &id);
    	    vl.push_back((int)id);
    	  }
    	}
    	else
    	  yymsg(0, "Unknown option '%s' in field %i of type '%s'",
    		(yyvsp[(6) - (11)].c), (int)(yyvsp[(3) - (11)].d), field->getName());
          }
          else 
    	yymsg(0, "No field with id %i", (int)(yyvsp[(3) - (11)].d));
    #endif
          Free((yyvsp[(6) - (11)].c));
          List_Delete((yyvsp[(9) - (11)].l));
        ;}
        break;
    
      case 87:
    #line 953 "Gmsh.y"
        {
    #if defined(HAVE_PLUGINS)
          try {
    	PluginManager::instance()->setPluginOption((yyvsp[(3) - (9)].c), (yyvsp[(6) - (9)].c), (yyvsp[(8) - (9)].d)); 
          }
          catch (...) {
    	yymsg(0, "Unknown option '%s' or plugin '%s'", (yyvsp[(6) - (9)].c), (yyvsp[(3) - (9)].c));
          }
    #endif
          Free((yyvsp[(3) - (9)].c)); Free((yyvsp[(6) - (9)].c));
        ;}
        break;
    
      case 88:
    #line 965 "Gmsh.y"
        {
    #if defined(HAVE_PLUGINS)
          try {
    	PluginManager::instance()->setPluginOption((yyvsp[(3) - (9)].c), (yyvsp[(6) - (9)].c), (yyvsp[(8) - (9)].c)); 
          }
          catch (...) {
    	yymsg(0, "Unknown option '%s' or plugin '%s'", (yyvsp[(6) - (9)].c), (yyvsp[(3) - (9)].c));
          }
    #endif
          Free((yyvsp[(3) - (9)].c)); Free((yyvsp[(6) - (9)].c)); Free((yyvsp[(8) - (9)].c));
        ;}
        break;
    
      case 89:
    #line 982 "Gmsh.y"
        { 
          (yyval.i) = (int)(yyvsp[(1) - (1)].d); 
        ;}
        break;
    
      case 90:
    #line 986 "Gmsh.y"
        { 
          (yyval.i) = GModel::current()->setPhysicalName
            (std::string((yyvsp[(1) - (1)].c)), curPhysDim, 
             ++GModel::current()->getGEOInternals()->MaxPhysicalNum);
          Free((yyvsp[(1) - (1)].c));
        ;}
        break;
    
      case 91:
    #line 996 "Gmsh.y"
        {
          (yyval.l) = 0;
        ;}
        break;
    
      case 92:
    #line 1000 "Gmsh.y"
        {
          (yyval.l) = List_Create(1, 1, sizeof(Vertex*));
          Vertex *v = FindPoint((int)(yyvsp[(4) - (5)].d));
          if(!v)
    	yymsg(0, "Unknown point %d", (int)(yyvsp[(4) - (5)].d));
          else{
    	List_Add((yyval.l), &v);
          }
        ;}
        break;
    
      case 93:
    #line 1012 "Gmsh.y"
        {
          for(int i = 0; i < 4; i++) (yyval.v)[i] = 0.;
        ;}
        break;
    
      case 94:
    #line 1016 "Gmsh.y"
        {
          for(int i = 0; i < 4; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i];
        ;}
        break;
    
      case 95:
    #line 1026 "Gmsh.y"
        {
          int num = (int)(yyvsp[(3) - (7)].d);
          if(FindPoint(num)){
    	yymsg(0, "Point %d already exists", num);
          }
          else{
    	double x = CTX::instance()->geom.scalingFactor * (yyvsp[(6) - (7)].v)[0];
    	double y = CTX::instance()->geom.scalingFactor * (yyvsp[(6) - (7)].v)[1];
    	double z = CTX::instance()->geom.scalingFactor * (yyvsp[(6) - (7)].v)[2];
    	double lc = CTX::instance()->geom.scalingFactor * (yyvsp[(6) - (7)].v)[3];
    	if(lc == 0.) lc = MAX_LC; // no mesh size given at the point
    	Vertex *v;
    	if(!myGmshSurface)
    	  v = Create_Vertex(num, x, y, z, lc, 1.0);
    	else
    	  v = Create_Vertex(num, x, y, myGmshSurface, lc);
    	Tree_Add(GModel::current()->getGEOInternals()->Points, &v);
    	AddToTemporaryBoundingBox(v->Pos.X, v->Pos.Y, v->Pos.Z);
          }
          (yyval.s).Type = MSH_POINT;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 96:
    #line 1049 "Gmsh.y"
        {
          curPhysDim = 0;
        ;}
        break;
    
      case 97:
    #line 1053 "Gmsh.y"
        {
          int num = (int)(yyvsp[(5) - (9)].i);
          if(FindPhysicalGroup(num, MSH_PHYSICAL_POINT)){
    	yymsg(0, "Physical point %d already exists", num);
          }
          else{
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(8) - (9)].l));
    	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_POINT, temp);
    	List_Delete(temp);
    	List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
          }
          List_Delete((yyvsp[(8) - (9)].l));
          (yyval.s).Type = MSH_PHYSICAL_POINT;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 98:
    #line 1069 "Gmsh.y"
        {      
          for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
    	double d;
    	List_Read((yyvsp[(3) - (6)].l), i, &d);
    	Vertex *v = FindPoint((int)d); 	 
    	if(v)
    	  v->lc = (yyvsp[(5) - (6)].d);
    	else{
    	  GVertex *gv = GModel::current()->getVertexByTag((int)d);
    	  if(gv) 
    	    gv->setPrescribedMeshSizeAtVertex((yyvsp[(5) - (6)].d));
    	}
          }
          List_Delete((yyvsp[(3) - (6)].l));
          // dummy values
          (yyval.s).Type = 0;
          (yyval.s).Num = 0;
        ;}
        break;
    
      case 99:
    #line 1091 "Gmsh.y"
        {
          int num = (int)(yyvsp[(3) - (7)].d);
          if(FindCurve(num)){
    	yymsg(0, "Curve %d already exists", num);
          }
          else{
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (7)].l));
    	Curve *c = Create_Curve(num, MSH_SEGM_LINE, 1, temp, NULL,
    				-1, -1, 0., 1.);
    	Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
    	CreateReversedCurve(c);
    	List_Delete(temp);
          }
          List_Delete((yyvsp[(6) - (7)].l));
          (yyval.s).Type = MSH_SEGM_LINE;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 100:
    #line 1109 "Gmsh.y"
        {
          for (int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
    	double dnum;
    	List_Read((yyvsp[(3) - (4)].l), i, &dnum);
    	int num = (int) fabs(dnum);
    	Curve *c = FindCurve(num);
    	if (c){
    	  c->degenerated = true;
    	}
    	else{
    	  GEdge *ge = GModel::current()->getEdgeByTag(num);
    	  if (!ge){
    	    yymsg(0, "Curve %d does not exist", num);
    	  }
    	  else{
    	    ge->setTooSmall(true);
    	  }
    	}
          }
        ;}
        break;
    
      case 101:
    #line 1130 "Gmsh.y"
        {
          int num = (int)(yyvsp[(3) - (7)].d);
          if(FindCurve(num)){
    	yymsg(0, "Curve %d already exists", num);
          }
          else{
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (7)].l));
    	Curve *c = Create_Curve(num, MSH_SEGM_SPLN, 3, temp, NULL,
    				-1, -1, 0., 1.);
    	Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
    	CreateReversedCurve(c);
    	List_Delete(temp);
          }
          List_Delete((yyvsp[(6) - (7)].l));
          (yyval.s).Type = MSH_SEGM_SPLN;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 102:
    #line 1148 "Gmsh.y"
        {
          int num = (int)(yyvsp[(3) - (8)].d);
          if(FindCurve(num)){
    	yymsg(0, "Curve %d already exists", num);
          }
          else{
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (8)].l));
    	Curve *c = Create_Curve(num, MSH_SEGM_CIRC, 2, temp, NULL,
    				-1, -1, 0., 1.);
            if((yyvsp[(7) - (8)].v)[0] || (yyvsp[(7) - (8)].v)[1] || (yyvsp[(7) - (8)].v)[2]){
              c->Circle.n[0] = (yyvsp[(7) - (8)].v)[0];
              c->Circle.n[1] = (yyvsp[(7) - (8)].v)[1];
              c->Circle.n[2] = (yyvsp[(7) - (8)].v)[2];
              End_Curve(c);
            }
    	Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
    	Curve *rc = CreateReversedCurve(c);
            if((yyvsp[(7) - (8)].v)[0] || (yyvsp[(7) - (8)].v)[1] || (yyvsp[(7) - (8)].v)[2]){
              rc->Circle.n[0] = (yyvsp[(7) - (8)].v)[0];
              rc->Circle.n[1] = (yyvsp[(7) - (8)].v)[1];
              rc->Circle.n[2] = (yyvsp[(7) - (8)].v)[2];
              End_Curve(rc);
            }
    	List_Delete(temp);
          }
          List_Delete((yyvsp[(6) - (8)].l));
          (yyval.s).Type = MSH_SEGM_CIRC;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 103:
    #line 1178 "Gmsh.y"
        {
          int num = (int)(yyvsp[(3) - (8)].d);
          if(FindCurve(num)){
    	yymsg(0, "Curve %d already exists", num);
          }
          else{
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (8)].l));
    	Curve *c = Create_Curve(num, MSH_SEGM_ELLI, 2, temp, NULL,
    				-1, -1, 0., 1.);
            if((yyvsp[(7) - (8)].v)[0] || (yyvsp[(7) - (8)].v)[1] || (yyvsp[(7) - (8)].v)[2]){
              c->Circle.n[0] = (yyvsp[(7) - (8)].v)[0];
              c->Circle.n[1] = (yyvsp[(7) - (8)].v)[1];
              c->Circle.n[2] = (yyvsp[(7) - (8)].v)[2];
              End_Curve(c);
            }
    	Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
    	Curve *rc = CreateReversedCurve(c);
            if((yyvsp[(7) - (8)].v)[0] || (yyvsp[(7) - (8)].v)[1] || (yyvsp[(7) - (8)].v)[2]){
              rc->Circle.n[0] = (yyvsp[(7) - (8)].v)[0];
              rc->Circle.n[1] = (yyvsp[(7) - (8)].v)[1];
              rc->Circle.n[2] = (yyvsp[(7) - (8)].v)[2];
              End_Curve(rc);
            }
    	List_Delete(temp);
          }
          List_Delete((yyvsp[(6) - (8)].l));
          (yyval.s).Type = MSH_SEGM_ELLI;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 104:
    #line 1208 "Gmsh.y"
        {
          int num = (int)(yyvsp[(3) - (7)].d);
          if(FindCurve(num)){
    	yymsg(0, "Curve %d already exists", num);
          }
          else{
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (7)].l));
    	Curve *c = Create_Curve(num, MSH_SEGM_BSPLN, 2, temp, NULL,
    				-1, -1, 0., 1.);
    	Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
    	CreateReversedCurve(c);
    	List_Delete(temp);
          }
          List_Delete((yyvsp[(6) - (7)].l));
          (yyval.s).Type = MSH_SEGM_BSPLN;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 105:
    #line 1226 "Gmsh.y"
        {
          int num = (int)(yyvsp[(3) - (7)].d);
          if(FindCurve(num)){
    	yymsg(0, "Curve %d already exists", num);
          }
          else{
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (7)].l));
    	Curve *c = Create_Curve(num, MSH_SEGM_BEZIER, 2, temp, NULL,
    				-1, -1, 0., 1.);
    	Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
    	CreateReversedCurve(c);
    	List_Delete(temp);
          }
          List_Delete((yyvsp[(6) - (7)].l));
          (yyval.s).Type = MSH_SEGM_BEZIER;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 106:
    #line 1244 "Gmsh.y"
        {
          int num = (int)(yyvsp[(3) - (11)].d);
          if(List_Nbr((yyvsp[(6) - (11)].l)) + (int)(yyvsp[(10) - (11)].d) + 1 != List_Nbr((yyvsp[(8) - (11)].l))){
    	yymsg(0, "Wrong definition of Nurbs Curve %d: "
    	      "got %d knots, need N + D + 1 = %d + %d + 1 = %d",
    	      (int)(yyvsp[(3) - (11)].d), List_Nbr((yyvsp[(8) - (11)].l)), List_Nbr((yyvsp[(6) - (11)].l)), (int)(yyvsp[(10) - (11)].d), List_Nbr((yyvsp[(6) - (11)].l)) + (int)(yyvsp[(10) - (11)].d) + 1);
          }
          else{
    	if(FindCurve(num)){
    	  yymsg(0, "Curve %d already exists", num);
    	}
    	else{
    	  List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (11)].l));
    	  Curve *c = Create_Curve(num, MSH_SEGM_NURBS, (int)(yyvsp[(10) - (11)].d), temp, (yyvsp[(8) - (11)].l),
    				  -1, -1, 0., 1.);
    	  Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
    	  CreateReversedCurve(c);
    	  List_Delete(temp);
    	}
          }
          List_Delete((yyvsp[(6) - (11)].l));
          List_Delete((yyvsp[(8) - (11)].l));
          (yyval.s).Type = MSH_SEGM_NURBS;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 107:
    #line 1270 "Gmsh.y"
        {
          int num = (int)(yyvsp[(4) - (8)].d);
          if(FindEdgeLoop(num)){
    	yymsg(0, "Line loop %d already exists", num);
          }
          else{
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (8)].l));
    	sortEdgesInLoop(num, temp);
    	EdgeLoop *l = Create_EdgeLoop(num, temp);
    	Tree_Add(GModel::current()->getGEOInternals()->EdgeLoops, &l);
    	List_Delete(temp);
          }
          List_Delete((yyvsp[(7) - (8)].l));
          (yyval.s).Type = MSH_SEGM_LOOP;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 108:
    #line 1287 "Gmsh.y"
        {
          int num = (int)(yyvsp[(4) - (8)].d);
          if(FindCurve(num)){
    	yymsg(0, "Curve %d already exists", num);
          }
          else{
            Curve *c = Create_Curve(num, MSH_SEGM_COMPOUND, 1, NULL, NULL, -1, -1, 0., 1.);
            for(int i = 0; i < List_Nbr((yyvsp[(7) - (8)].l)); i++)
              c->compound.push_back((int)*(double*)List_Pointer((yyvsp[(7) - (8)].l), i));
    	End_Curve(c);
    	Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
    	CreateReversedCurve(c);
          }
          List_Delete((yyvsp[(7) - (8)].l));
          (yyval.s).Type = MSH_SEGM_COMPOUND;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 109:
    #line 1305 "Gmsh.y"
        {
          curPhysDim = 1;
        ;}
        break;
    
      case 110:
    #line 1309 "Gmsh.y"
        {
          int num = (int)(yyvsp[(5) - (9)].i);
          if(FindPhysicalGroup(num, MSH_PHYSICAL_LINE)){
    	yymsg(0, "Physical line %d already exists", num);
          }
          else{
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(8) - (9)].l));
    	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_LINE, temp);
    	List_Delete(temp);
    	List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
          }
          List_Delete((yyvsp[(8) - (9)].l));
          (yyval.s).Type = MSH_PHYSICAL_LINE;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 111:
    #line 1328 "Gmsh.y"
        {
          int num = (int)(yyvsp[(4) - (8)].d);
          if(FindSurface(num)){
    	yymsg(0, "Surface %d already exists", num);
          }
          else{
    	Surface *s = Create_Surface(num, MSH_SURF_PLAN);
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (8)].l));
    	setSurfaceGeneratrices(s, temp);
    	List_Delete(temp);
    	End_Surface(s);
    	Tree_Add(GModel::current()->getGEOInternals()->Surfaces, &s);
          }
          List_Delete((yyvsp[(7) - (8)].l));
          (yyval.s).Type = MSH_SURF_PLAN;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 112:
    #line 1346 "Gmsh.y"
        {
          int num = (int)(yyvsp[(4) - (9)].d), type = 0;
          if(FindSurface(num)){
    	yymsg(0, "Surface %d already exists", num);
          }
          else{
    	double d;
    	List_Read((yyvsp[(7) - (9)].l), 0, &d);
    	EdgeLoop *el = FindEdgeLoop((int)fabs(d));
    	if(!el){
    	  yymsg(0, "Unknown line loop %d", (int)d);
    	}
    	else{
    	  int j = List_Nbr(el->Curves);
    	  if(j == 4){
    	    type = MSH_SURF_REGL;
    	  }
    	  else if(j == 3){
    	    type = MSH_SURF_TRIC;
    	  }
    	  else{
    	    yymsg(0, "Wrong definition of Ruled Surface %d: "
    		  "%d borders instead of 3 or 4", num, j);
    	    type = MSH_SURF_PLAN;
    	  }
    	  Surface *s = Create_Surface(num, type);
    	  List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (9)].l));
    	  setSurfaceGeneratrices(s, temp);
    	  List_Delete(temp);
    	  End_Surface(s);
    	  s->InSphereCenter = (yyvsp[(8) - (9)].l);
    	  Tree_Add(GModel::current()->getGEOInternals()->Surfaces, &s);
    	}
          }
          List_Delete((yyvsp[(7) - (9)].l));
          (yyval.s).Type = type;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 113:
    #line 1385 "Gmsh.y"
        {
          myGmshSurface = 0;
          (yyval.s).Type = 0;
          (yyval.s).Num = 0;
        ;}
        break;
    
      case 114:
    #line 1391 "Gmsh.y"
        {
          myGmshSurface = gmshSurface::getSurface((int)(yyvsp[(3) - (4)].d));
          (yyval.s).Type = 0;
          (yyval.s).Num = 0;
        ;}
        break;
    
      case 115:
    #line 1397 "Gmsh.y"
        {
          int num = (int)(yyvsp[(4) - (10)].d);
          myGmshSurface = gmshParametricSurface::NewParametricSurface(num, (yyvsp[(7) - (10)].c), (yyvsp[(8) - (10)].c), (yyvsp[(9) - (10)].c));
          (yyval.s).Type = 0;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 116:
    #line 1404 "Gmsh.y"
        {
          int num = (int)(yyvsp[(3) - (7)].d);
          if (List_Nbr((yyvsp[(6) - (7)].l)) != 2){
    	yymsg(0, "Sphere %d has to be defined using 2 points (center + "
    	      "any point) and not %d", num, List_Nbr((yyvsp[(6) - (7)].l)));
          }
          else{
    	double p1,p2;
    	List_Read((yyvsp[(6) - (7)].l), 0, &p1);
    	List_Read((yyvsp[(6) - (7)].l), 1, &p2);
    	Vertex *v1 = FindPoint((int)p1);
    	Vertex *v2 = FindPoint((int)p2);
    	if(!v1) yymsg(0, "Sphere %d : unknown point %d", num, (int)p1);
    	if(!v2) yymsg(0, "Sphere %d : unknown point %d", num, (int)p2);
    	if(v1 && v2)
    	  myGmshSurface = gmshSphere::NewSphere
    	    (num, v1->Pos.X, v1->Pos.Y, v1->Pos.Z,
    	     sqrt((v2->Pos.X - v1->Pos.X) * (v2->Pos.X - v1->Pos.X) +
    		  (v2->Pos.Y - v1->Pos.Y) * (v2->Pos.Y - v1->Pos.Y) +
    		  (v2->Pos.Z - v1->Pos.Z) * (v2->Pos.Z - v1->Pos.Z)));
          }
          (yyval.s).Type = 0;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 117:
    #line 1429 "Gmsh.y"
        {
          int num = (int)(yyvsp[(3) - (7)].d);
          if (List_Nbr((yyvsp[(6) - (7)].l)) != 2){
    	yymsg(0, "PolarSphere %d has to be defined using 2 points (center + "
    	      "any point) and not %d", num, List_Nbr((yyvsp[(6) - (7)].l)));
          }
          else{
    	double p1,p2;
    	List_Read((yyvsp[(6) - (7)].l), 0, &p1);
    	List_Read((yyvsp[(6) - (7)].l), 1, &p2);
    	Vertex *v1 = FindPoint((int)p1);
    	Vertex *v2 = FindPoint((int)p2);
    	if(!v1) yymsg(0, "PolarSphere %d : unknown point %d", num, (int)p1);
    	if(!v2) yymsg(0, "PolarSphere %d : unknown point %d", num, (int)p2);
    	if(v1 && v2)
    	  myGmshSurface = gmshPolarSphere::NewPolarSphere
    	    (num, v1->Pos.X, v1->Pos.Y, v1->Pos.Z,
    	     sqrt((v2->Pos.X - v1->Pos.X) * (v2->Pos.X - v1->Pos.X) +
    		  (v2->Pos.Y - v1->Pos.Y) * (v2->Pos.Y - v1->Pos.Y) +
    		  (v2->Pos.Z - v1->Pos.Z) * (v2->Pos.Z - v1->Pos.Z)));
          }
          (yyval.s).Type = 0;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 118:
    #line 1454 "Gmsh.y"
        {
          int num = (int)(yyvsp[(4) - (8)].d);
          if(FindSurfaceLoop(num)){
    	yymsg(0, "Surface loop %d already exists", num);
          }
          else{
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (8)].l));
    	SurfaceLoop *l = Create_SurfaceLoop(num, temp);
    	Tree_Add(GModel::current()->getGEOInternals()->SurfaceLoops, &l);
    	List_Delete(temp);
          }
          List_Delete((yyvsp[(7) - (8)].l));
          (yyval.s).Type = MSH_SURF_LOOP;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 119:
    #line 1470 "Gmsh.y"
        {
          int num = (int)(yyvsp[(4) - (9)].d);
          if(FindSurface(num)){
    	yymsg(0, "Surface %d already exists", num);
          }
          else{
    	Surface *s = Create_Surface(num, MSH_SURF_COMPOUND);
            for(int i = 0; i < List_Nbr((yyvsp[(7) - (9)].l)); i++){
              s->compound.push_back((int)*(double*)List_Pointer((yyvsp[(7) - (9)].l), i));
    	  s->TypeOfMapping = (yyvsp[(8) - (9)].i);
    	}
    	Tree_Add(GModel::current()->getGEOInternals()->Surfaces, &s);
          }
          List_Delete((yyvsp[(7) - (9)].l));
          (yyval.s).Type = MSH_SURF_COMPOUND;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 120:
    #line 1489 "Gmsh.y"
        {
          int num = (int)(yyvsp[(4) - (13)].d);
          if(FindSurface(num)){
    	yymsg(0, "Surface %d already exists", num);
          }
          else{
            Surface *s = Create_Surface(num, MSH_SURF_COMPOUND);
            for(int i = 0; i < List_Nbr((yyvsp[(7) - (13)].l)); i++)
              s->compound.push_back((int)*(double*)List_Pointer((yyvsp[(7) - (13)].l), i));
    	for (int i = 0; i < List_Nbr((yyvsp[(10) - (13)].l)); i++){
              if(i > 3){
                yymsg(0, "Too many boundary specifiers in compound surface");
                break;
              }
    	  List_T *l = *(List_T**)List_Pointer((yyvsp[(10) - (13)].l), i);
              for (int j = 0; j < List_Nbr(l); j++){
                s->compoundBoundary[i].push_back((int)*(double*)List_Pointer(l, j));
    	    s->TypeOfMapping = (yyvsp[(12) - (13)].i);
    	  }
    	}
    	Tree_Add(GModel::current()->getGEOInternals()->Surfaces, &s);
          }
          List_Delete((yyvsp[(7) - (13)].l));
          for (int i = 0; i < List_Nbr((yyvsp[(10) - (13)].l)); i++)
            List_Delete(*(List_T**)List_Pointer((yyvsp[(10) - (13)].l), i));
          List_Delete((yyvsp[(10) - (13)].l));
          Free((yyvsp[(8) - (13)].c));
          (yyval.s).Type = MSH_SURF_COMPOUND;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 121:
    #line 1520 "Gmsh.y"
        {
          curPhysDim = 2;
        ;}
        break;
    
      case 122:
    #line 1524 "Gmsh.y"
        {
          int num = (int)(yyvsp[(5) - (9)].i);
          if(FindPhysicalGroup(num, MSH_PHYSICAL_SURFACE)){
    	yymsg(0, "Physical surface %d already exists", num);
          }
          else{
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(8) - (9)].l));
    	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_SURFACE, temp);
    	List_Delete(temp);
    	List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
          }
          List_Delete((yyvsp[(8) - (9)].l));
          (yyval.s).Type = MSH_PHYSICAL_SURFACE;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 123:
    #line 1544 "Gmsh.y"
        {
          yymsg(0, "'Complex Volume' command is deprecated: use 'Volume' instead");
          int num = (int)(yyvsp[(4) - (8)].d);
          if(FindVolume(num)){
    	yymsg(0, "Volume %d already exists", num);
          }
          else{
    	Volume *v = Create_Volume(num, MSH_VOLUME);
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (8)].l));
    	setVolumeSurfaces(v, temp);
    	List_Delete(temp);
    	Tree_Add(GModel::current()->getGEOInternals()->Volumes, &v);
          }
          List_Delete((yyvsp[(7) - (8)].l));
          (yyval.s).Type = MSH_VOLUME;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 124:
    #line 1562 "Gmsh.y"
        {
          int num = (int)(yyvsp[(3) - (7)].d);
          if(FindVolume(num)){
    	yymsg(0, "Volume %d already exists", num);
          }
          else{
    	Volume *v = Create_Volume(num, MSH_VOLUME);
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (7)].l));
    	setVolumeSurfaces(v, temp);
    	List_Delete(temp);
    	Tree_Add(GModel::current()->getGEOInternals()->Volumes, &v);
          }
          List_Delete((yyvsp[(6) - (7)].l));
          (yyval.s).Type = MSH_VOLUME;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 125:
    #line 1579 "Gmsh.y"
        {
          int num = (int)(yyvsp[(4) - (8)].d);
          if(FindVolume(num)){
    	yymsg(0, "Volume %d already exists", num);
          }
          else{
    	Volume *v = Create_Volume(num, MSH_VOLUME_COMPOUND);
            for(int i = 0; i < List_Nbr((yyvsp[(7) - (8)].l)); i++)
              v->compound.push_back((int)*(double*)List_Pointer((yyvsp[(7) - (8)].l), i));
    	Tree_Add(GModel::current()->getGEOInternals()->Volumes, &v);
          }
          List_Delete((yyvsp[(7) - (8)].l));
          (yyval.s).Type = MSH_VOLUME_COMPOUND;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 126:
    #line 1595 "Gmsh.y"
        {
          curPhysDim = 3;
        ;}
        break;
    
      case 127:
    #line 1599 "Gmsh.y"
        {
          int num = (int)(yyvsp[(5) - (9)].i);
          if(FindPhysicalGroup(num, MSH_PHYSICAL_VOLUME)){
    	yymsg(0, "Physical volume %d already exists", num);
          }
          else{
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(8) - (9)].l));
    	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_VOLUME, temp);
    	List_Delete(temp);
    	List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
          }
          List_Delete((yyvsp[(8) - (9)].l));
          (yyval.s).Type = MSH_PHYSICAL_VOLUME;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 128:
    #line 1621 "Gmsh.y"
        {
          TranslateShapes((yyvsp[(2) - (5)].v)[0], (yyvsp[(2) - (5)].v)[1], (yyvsp[(2) - (5)].v)[2], (yyvsp[(4) - (5)].l));
          (yyval.l) = (yyvsp[(4) - (5)].l);
        ;}
        break;
    
      case 129:
    #line 1626 "Gmsh.y"
        {
          RotateShapes((yyvsp[(3) - (11)].v)[0], (yyvsp[(3) - (11)].v)[1], (yyvsp[(3) - (11)].v)[2], (yyvsp[(5) - (11)].v)[0], (yyvsp[(5) - (11)].v)[1], (yyvsp[(5) - (11)].v)[2], (yyvsp[(7) - (11)].d), (yyvsp[(10) - (11)].l));
          (yyval.l) = (yyvsp[(10) - (11)].l);
        ;}
        break;
    
      case 130:
    #line 1631 "Gmsh.y"
        {
          SymmetryShapes((yyvsp[(2) - (5)].v)[0], (yyvsp[(2) - (5)].v)[1], (yyvsp[(2) - (5)].v)[2], (yyvsp[(2) - (5)].v)[3], (yyvsp[(4) - (5)].l));
          (yyval.l) = (yyvsp[(4) - (5)].l);
        ;}
        break;
    
      case 131:
    #line 1636 "Gmsh.y"
        {
          DilatShapes((yyvsp[(3) - (9)].v)[0], (yyvsp[(3) - (9)].v)[1], (yyvsp[(3) - (9)].v)[2], (yyvsp[(5) - (9)].d), (yyvsp[(8) - (9)].l));
          (yyval.l) = (yyvsp[(8) - (9)].l);
        ;}
        break;
    
      case 132:
    #line 1641 "Gmsh.y"
        {
          (yyval.l) = List_Create(3, 3, sizeof(Shape));
          if(!strcmp((yyvsp[(1) - (4)].c), "Duplicata")){
            for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
              Shape TheShape;
              List_Read((yyvsp[(3) - (4)].l), i, &TheShape);
              CopyShape(TheShape.Type, TheShape.Num, &TheShape.Num);
              List_Add((yyval.l), &TheShape);
            }
          }
          else if(!strcmp((yyvsp[(1) - (4)].c), "Boundary")){
            BoundaryShapes((yyvsp[(3) - (4)].l), (yyval.l));
          }
          else{
            yymsg(0, "Unknown command on multiple shapes: '%s'", (yyvsp[(1) - (4)].c));
          }
          Free((yyvsp[(1) - (4)].c));
          List_Delete((yyvsp[(3) - (4)].l));
        ;}
        break;
    
      case 133:
    #line 1661 "Gmsh.y"
        { 
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          IntersectCurvesWithSurface((yyvsp[(4) - (9)].l), (int)(yyvsp[(8) - (9)].d), (yyval.l));
          List_Delete((yyvsp[(4) - (9)].l));
        ;}
        break;
    
      case 134:
    #line 1667 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape*));
          List_T *tmp = ListOfDouble2ListOfInt((yyvsp[(7) - (9)].l));
          List_Delete((yyvsp[(7) - (9)].l));
          SplitCurve((int)(yyvsp[(4) - (9)].d), tmp, (yyval.l));
          List_Delete(tmp);
        ;}
        break;
    
      case 135:
    #line 1677 "Gmsh.y"
        { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
        break;
    
      case 136:
    #line 1678 "Gmsh.y"
        { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
        break;
    
      case 137:
    #line 1683 "Gmsh.y"
        {
          (yyval.l) = List_Create(3, 3, sizeof(Shape));
        ;}
        break;
    
      case 138:
    #line 1687 "Gmsh.y"
        {
          List_Add((yyval.l), &(yyvsp[(2) - (2)].s));
        ;}
        break;
    
      case 139:
    #line 1691 "Gmsh.y"
        {
          for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
    	double d;
    	List_Read((yyvsp[(4) - (6)].l), i, &d);
    	Shape TheShape;
    	TheShape.Num = (int)d;
    	Vertex *v = FindPoint(std::abs(TheShape.Num));
    	if(v){
    	  TheShape.Type = MSH_POINT;
    	  List_Add((yyval.l), &TheShape);
    	}
    	else{
    	  GVertex *gv = GModel::current()->getVertexByTag(std::abs(TheShape.Num));
    	  if(gv){
    	    TheShape.Type = MSH_POINT_FROM_GMODEL;
    	    List_Add((yyval.l), &TheShape);
    	  }
    	  else
    	    yymsg(1, "Unknown point %d", TheShape.Num);
    	}
          }
        ;}
        break;
    
      case 140:
    #line 1714 "Gmsh.y"
        {
          for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
    	double d;
    	List_Read((yyvsp[(4) - (6)].l), i, &d);
    	Shape TheShape;
    	TheShape.Num = (int)d;
    	Curve *c = FindCurve(std::abs(TheShape.Num));
    	if(c){
    	  TheShape.Type = c->Typ;
    	  List_Add((yyval.l), &TheShape);
    	}
    	else{
    	  GEdge *ge = GModel::current()->getEdgeByTag(std::abs(TheShape.Num));
    	  if(ge){
    	    TheShape.Type = MSH_SEGM_FROM_GMODEL;
    	    List_Add((yyval.l), &TheShape);
    	  }
    	  else
    	    yymsg(1, "Unknown curve %d", TheShape.Num);
    	}
          }
        ;}
        break;
    
      case 141:
    #line 1737 "Gmsh.y"
        {
          for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
    	double d;
    	List_Read((yyvsp[(4) - (6)].l), i, &d);
    	Shape TheShape;
    	TheShape.Num = (int)d;
    	Surface *s = FindSurface(std::abs(TheShape.Num));
    	if(s){
    	  TheShape.Type = s->Typ;
    	  List_Add((yyval.l), &TheShape);
    	}
    	else{
    	  GFace *gf = GModel::current()->getFaceByTag(std::abs(TheShape.Num));
    	  if(gf){
    	    TheShape.Type = MSH_SURF_FROM_GMODEL;
    	    List_Add((yyval.l), &TheShape);
    	  }
    	  else
    	    yymsg(1, "Unknown surface %d", TheShape.Num);
    	}
          }
        ;}
        break;
    
      case 142:
    #line 1760 "Gmsh.y"
        {
          for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
    	double d;
    	List_Read((yyvsp[(4) - (6)].l), i, &d);
    	Shape TheShape;
    	TheShape.Num = (int)d;
    	Volume *v = FindVolume(std::abs(TheShape.Num));
    	if(v){
    	  TheShape.Type = v->Typ;
    	  List_Add((yyval.l), &TheShape);
    	}
    	else{
    	  GRegion *gr = GModel::current()->getRegionByTag(std::abs(TheShape.Num));
    	  if(gr){
    	    TheShape.Type = MSH_VOLUME_FROM_GMODEL;
    	    List_Add((yyval.l), &TheShape);
    	  }
    	  else
    	    yymsg(1, "Unknown volume %d", TheShape.Num);
    	}
          }
        ;}
        break;
    
      case 143:
    #line 1788 "Gmsh.y"
        {
    #if defined(HAVE_DINTEGRATION)
          if(List_Nbr((yyvsp[(7) - (8)].l)) == 4){
            int t = (int)(yyvsp[(4) - (8)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              double d[4];
              for(int i = 0; i < 4; i++)
                List_Read((yyvsp[(7) - (8)].l), i, &d[i]);
              gLevelset *ls = new gLevelsetPlane(d[0], d[1], d[2], d[3], t);
              LevelSet *l = Create_LevelSet(ls->getTag(), ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
          else
            yymsg(0, "Wrong levelset definition (%d)", (yyvsp[(4) - (8)].d));
    #endif
        ;}
        break;
    
      case 144:
    #line 1810 "Gmsh.y"
        {
    #if defined(HAVE_DINTEGRATION)
          if(List_Nbr((yyvsp[(12) - (14)].l)) == 0){
            int t = (int)(yyvsp[(4) - (14)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              double pt[3] = {(yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2]};
              double n[3] = {(yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2]};
              gLevelset *ls = new gLevelsetPlane(pt, n, t);
              LevelSet *l = Create_LevelSet(ls->getTag(), ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
          else
            yymsg(0, "Wrong levelset definition (%d)", (yyvsp[(4) - (14)].d));
    #endif
        ;}
        break;
    
      case 145:
    #line 1831 "Gmsh.y"
        {
    #if defined(HAVE_DINTEGRATION)
          if(List_Nbr((yyvsp[(14) - (16)].l)) == 0){
            int t = (int)(yyvsp[(4) - (16)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              double pt1[3] = {(yyvsp[(8) - (16)].v)[0], (yyvsp[(8) - (16)].v)[1], (yyvsp[(8) - (16)].v)[2]};
              double pt2[3] = {(yyvsp[(10) - (16)].v)[0], (yyvsp[(10) - (16)].v)[1], (yyvsp[(10) - (16)].v)[2]};
              double pt3[3] = {(yyvsp[(12) - (16)].v)[0], (yyvsp[(12) - (16)].v)[1], (yyvsp[(12) - (16)].v)[2]};
              gLevelset *ls = new gLevelsetPlane(pt1, pt2, pt3, t);
              LevelSet *l = Create_LevelSet(ls->getTag(), ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
          else
            yymsg(0, "Wrong levelset definition (%d)", (yyvsp[(4) - (16)].d));
    #endif
        ;}
        break;
    
      case 146:
    #line 1852 "Gmsh.y"
        {
    #if defined(HAVE_DINTEGRATION)
          if(List_Nbr((yyvsp[(10) - (12)].l)) == 1){
            int t = (int)(yyvsp[(4) - (12)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              double d;
              List_Read((yyvsp[(10) - (12)].l), 0, &d);
              gLevelset *ls = new gLevelsetSphere((yyvsp[(8) - (12)].v)[0], (yyvsp[(8) - (12)].v)[1], (yyvsp[(8) - (12)].v)[2], d, t);
              LevelSet *l = Create_LevelSet(ls->getTag(), ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
          else
            yymsg(0, "Wrong levelset definition (%d)", (yyvsp[(4) - (12)].d));
    #endif
        ;}
        break;
    
      case 147:
    #line 1872 "Gmsh.y"
        {
    #if defined(HAVE_DINTEGRATION)
          if(!strcmp((yyvsp[(2) - (8)].c), "Union")){
            int t = (int)(yyvsp[(4) - (8)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              std::vector<const gLevelset *> vl;
              for(int i = 0; i < List_Nbr((yyvsp[(7) - (8)].l)); i++) {
                double d; List_Read((yyvsp[(7) - (8)].l), i, &d);
                LevelSet *pl = FindLevelSet((int)d);
    	    if(!pl) yymsg(0, "Levelset Union %d : unknown levelset %d", t, (int)d);
                else vl.push_back(pl->ls);
              }
              gLevelset *ls = new gLevelsetUnion(vl);
              LevelSet *l = Create_LevelSet(t, ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
          else if(!strcmp((yyvsp[(2) - (8)].c), "Intersection")){
            int t = (int)(yyvsp[(4) - (8)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              std::vector<const gLevelset *> vl;
              for(int i = 0; i < List_Nbr((yyvsp[(7) - (8)].l)); i++) {
                double d; List_Read((yyvsp[(7) - (8)].l), i, &d);
                LevelSet *pl = FindLevelSet((int)d);
    	    if(!pl) yymsg(0, "Levelset Intersection %d : unknown levelset %d", t, (int)d);
                else vl.push_back(pl->ls);
              }
              gLevelset *ls = new gLevelsetIntersection(vl);
              LevelSet *l = Create_LevelSet(t, ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
          else if(!strcmp((yyvsp[(2) - (8)].c), "Cut")){
            int t = (int)(yyvsp[(4) - (8)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              std::vector<const gLevelset *> vl;
              for(int i = 0; i < List_Nbr((yyvsp[(7) - (8)].l)); i++) {
                double d; List_Read((yyvsp[(7) - (8)].l), i, &d);
                LevelSet *pl = FindLevelSet((int)d);
    	    if(!pl) yymsg(0, "Levelset Cut %d : unknown levelset %d", t, (int)d);
                else vl.push_back(pl->ls);
              }
              gLevelset *ls = new gLevelsetCut(vl);
              LevelSet *l = Create_LevelSet(t, ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
          else if(!strcmp((yyvsp[(2) - (8)].c), "Crack")){
            int t = (int)(yyvsp[(4) - (8)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              std::vector<const gLevelset *> vl;
              for(int i = 0; i < List_Nbr((yyvsp[(7) - (8)].l)); i++) {
                double d; List_Read((yyvsp[(7) - (8)].l), i, &d);
                LevelSet *pl = FindLevelSet((int)d);
    	    if(!pl) yymsg(0, "Levelset Crack %d : unknown levelset %d", t, (int)d);
                else vl.push_back(pl->ls);
              }
              gLevelset *ls = new gLevelsetCrack(vl);
              LevelSet *l = Create_LevelSet(t, ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
          else if(!strcmp((yyvsp[(2) - (8)].c), "Reverse")){
            int t = (int)(yyvsp[(4) - (8)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              double d;
              List_Read((yyvsp[(7) - (8)].l), 0, &d);
              LevelSet *pl = FindLevelSet((int)d);
              gLevelset *ls = NULL;
              if(!pl) yymsg(0, "Levelset Reverse %d : unknown levelset %d", t, (int)d);
              else ls = new gLevelsetReverse(pl->ls);
              LevelSet *l = Create_LevelSet(t, ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
    #if defined(HAVE_POST)
          else if(!strcmp((yyvsp[(2) - (8)].c), "PostView")){
            int t = (int)(yyvsp[(4) - (8)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              if(List_Nbr((yyvsp[(7) - (8)].l)) > 0){
                double d; List_Read((yyvsp[(7) - (8)].l), 0, &d);
                gLevelset *ls = new gLevelsetPostView((int)d, t);
                LevelSet *l = Create_LevelSet(ls->getTag(), ls);
                Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
              }
            }
          }
    #endif
          else
            yymsg(0, "Wrong levelset definition (%d)", (yyvsp[(4) - (8)].d));
          Free((yyvsp[(2) - (8)].c));
    #endif
        ;}
        break;
    
      case 148:
    #line 1984 "Gmsh.y"
        {
    #if defined(HAVE_DINTEGRATION)
          if(!strcmp((yyvsp[(2) - (8)].c), "MathEval")){
            int t = (int)(yyvsp[(4) - (8)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              gLevelset *ls = new gLevelsetMathEval((yyvsp[(7) - (8)].c), t);
              LevelSet *l = Create_LevelSet(ls->getTag(), ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
          else
            yymsg(0, "Wrong levelset definition");
          Free((yyvsp[(2) - (8)].c)); Free((yyvsp[(7) - (8)].c));
    #endif
        ;}
        break;
    
      case 149:
    #line 2003 "Gmsh.y"
        {
    #if defined(HAVE_DINTEGRATION)
          if(!strcmp((yyvsp[(2) - (6)].c), "CutMesh")){
            int t = (int)(yyvsp[(4) - (6)].d);
            GModel *GM = GModel::current();
            GM->buildCutGModel(FindLevelSet(t)->ls);
            GM->setVisibility(0);
          }
          else if(!strcmp((yyvsp[(2) - (6)].c), "SplitMesh")){
            int t = (int)(yyvsp[(4) - (6)].d);
            GModel *GM = GModel::current();
            GM->buildCutGModel(FindLevelSet(t)->ls, false);
            GM->setVisibility(0);
          }
          else
            yymsg(0, "Wrong levelset definition");
          Free((yyvsp[(2) - (6)].c));
    #endif
        ;}
        break;
    
      case 150:
    #line 2024 "Gmsh.y"
        {
    #if defined(HAVE_DINTEGRATION)
          if(!strcmp((yyvsp[(2) - (14)].c), "Cylinder") && List_Nbr((yyvsp[(12) - (14)].l)) == 1){
            int t = (int)(yyvsp[(4) - (14)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              double d;
              List_Read((yyvsp[(12) - (14)].l), 0, &d);
              double pt[3] = {(yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2]};
              double dir[3] = {(yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2]};
              gLevelset *ls = new gLevelsetGenCylinder(pt, dir, d, t);
              LevelSet *l = Create_LevelSet(ls->getTag(), ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
          else if(!strcmp((yyvsp[(2) - (14)].c), "Cone") && List_Nbr((yyvsp[(12) - (14)].l)) == 1){
            int t = (int)(yyvsp[(4) - (14)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              double d;
              List_Read((yyvsp[(12) - (14)].l), 0, &d);
              double pt[3] = {(yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2]};
              double dir[3] = {(yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2]};
              gLevelset *ls = new gLevelsetCone(pt, dir, d, t);
              LevelSet *l = Create_LevelSet(ls->getTag(), ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
          else if(!strcmp((yyvsp[(2) - (14)].c), "Cylinder") && List_Nbr((yyvsp[(12) - (14)].l)) == 2){
            int t = (int)(yyvsp[(4) - (14)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              double d[2];
              for(int i = 0; i < 2; i++)
                List_Read((yyvsp[(12) - (14)].l), i, &d[i]);
              double pt[3] = {(yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2]};
              double dir[3] = {(yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2]};
              gLevelset *ls = new gLevelsetCylinder(pt, dir, d[0], d[1], t);
              LevelSet *l = Create_LevelSet(ls->getTag(), ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
          else if(!strcmp((yyvsp[(2) - (14)].c), "Cylinder") && List_Nbr((yyvsp[(12) - (14)].l)) == 3){
            int t = (int)(yyvsp[(4) - (14)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              double d[3];
              for(int i = 0; i < 3; i++)
                List_Read((yyvsp[(12) - (14)].l), i, &d[i]);
              double pt[3] = {(yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2]};
              double dir[3] = {(yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2]};
              gLevelset *ls = new gLevelsetCylinder(pt, dir, d[0], d[1], d[2], t);
              LevelSet *l = Create_LevelSet(ls->getTag(), ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
          else if(!strcmp((yyvsp[(2) - (14)].c), "Ellipsoid") && List_Nbr((yyvsp[(12) - (14)].l)) == 3){
            int t = (int)(yyvsp[(4) - (14)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              double d[3];
              for(int i = 0; i < 3; i++)
                List_Read((yyvsp[(12) - (14)].l), i, &d[i]);
              double pt[3] = {(yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2]};
              double dir[3] = {(yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2]};
              gLevelset *ls = new gLevelsetEllipsoid(pt, dir, d[0], d[1], d[2], t);
              LevelSet *l = Create_LevelSet(ls->getTag(), ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
          else if(!strcmp((yyvsp[(2) - (14)].c), "Quadric") && List_Nbr((yyvsp[(12) - (14)].l)) == 5){
            int t = (int)(yyvsp[(4) - (14)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              double d[5];
              for(int i = 0; i < 5; i++)
                List_Read((yyvsp[(12) - (14)].l), i, &d[i]);
              double pt[3] = {(yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2]};
              double dir[3] = {(yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2]};
              gLevelset *ls = new gLevelsetGeneralQuadric(pt, dir, d[0], d[1], 
                                                          d[2], d[3], d[4], t);
              LevelSet *l = Create_LevelSet(ls->getTag(), ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
          else
            yymsg(0, "Wrong levelset definition (%d)", (yyvsp[(4) - (14)].d));
          Free((yyvsp[(2) - (14)].c));
    #endif
        ;}
        break;
    
      case 151:
    #line 2132 "Gmsh.y"
        {
          for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
    	Shape TheShape;
    	List_Read((yyvsp[(3) - (4)].l), i, &TheShape);
    	DeleteShape(TheShape.Type, TheShape.Num);
          }
          List_Delete((yyvsp[(3) - (4)].l));
        ;}
        break;
    
      case 152:
    #line 2141 "Gmsh.y"
        {
    #if defined(HAVE_MESH)
          GModel::current()->getFields()->deleteField((int)(yyvsp[(4) - (6)].d));
    #endif
        ;}
        break;
    
      case 153:
    #line 2147 "Gmsh.y"
        {
    #if defined(HAVE_POST)
          if(!strcmp((yyvsp[(2) - (6)].c), "View")){
    	int index = (int)(yyvsp[(4) - (6)].d);
    	if(index >= 0 && index < (int)PView::list.size())
    	  delete PView::list[index];
    	else
    	  yymsg(0, "Unknown view %d", index);
          }
          else
    	yymsg(0, "Unknown command 'Delete %s'", (yyvsp[(2) - (6)].c));
    #endif
          Free((yyvsp[(2) - (6)].c));
        ;}
        break;
    
      case 154:
    #line 2162 "Gmsh.y"
        {
          if(!strcmp((yyvsp[(2) - (3)].c), "Meshes") || !strcmp((yyvsp[(2) - (3)].c), "All")){
            ClearProject();
          }
          else if(!strcmp((yyvsp[(2) - (3)].c), "Model")){
    	GModel::current()->destroy();
    	GModel::current()->getGEOInternals()->destroy();
          }
          else if(!strcmp((yyvsp[(2) - (3)].c), "Physicals")){
    	GModel::current()->getGEOInternals()->reset_physicals();
    	GModel::current()->deletePhysicalGroups();
          }
          else if(!strcmp((yyvsp[(2) - (3)].c), "Variables")){
    	gmsh_yysymbols.clear();
          }
          else if(!strcmp((yyvsp[(2) - (3)].c), "Options")){
            ReInitOptions(0);
            InitOptionsGUI(0);
          }
          else{
    	if(gmsh_yysymbols.count((yyvsp[(2) - (3)].c)))
    	  gmsh_yysymbols.erase((yyvsp[(2) - (3)].c));
    	else
    	  yymsg(0, "Unknown object or expression to delete '%s'", (yyvsp[(2) - (3)].c));
          }
          Free((yyvsp[(2) - (3)].c));
        ;}
        break;
    
      case 155:
    #line 2190 "Gmsh.y"
        {
    #if defined(HAVE_POST)
          if(!strcmp((yyvsp[(2) - (4)].c), "Empty") && !strcmp((yyvsp[(3) - (4)].c), "Views")){
    	for(int i = PView::list.size() - 1; i >= 0; i--)
    	  if(PView::list[i]->getData()->empty()) delete PView::list[i];
          }
          else
    	yymsg(0, "Unknown command 'Delete %s %s'", (yyvsp[(2) - (4)].c), (yyvsp[(3) - (4)].c));
    #endif
          Free((yyvsp[(2) - (4)].c)); Free((yyvsp[(3) - (4)].c));
        ;}
        break;
    
      case 156:
    #line 2207 "Gmsh.y"
        {
          for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
    	Shape TheShape;
    	List_Read((yyvsp[(4) - (5)].l), i, &TheShape);
    	ColorShape(TheShape.Type, TheShape.Num, (yyvsp[(2) - (5)].u));
          }
          List_Delete((yyvsp[(4) - (5)].l));      
        ;}
        break;
    
      case 157:
    #line 2221 "Gmsh.y"
        {
          for(int i = 0; i < 4; i++)
    	VisibilityShape((yyvsp[(2) - (3)].c), i, 1);
          Free((yyvsp[(2) - (3)].c));
        ;}
        break;
    
      case 158:
    #line 2227 "Gmsh.y"
        {
          for(int i = 0; i < 4; i++)
    	VisibilityShape((yyvsp[(2) - (3)].c), i, 0);
          Free((yyvsp[(2) - (3)].c));
        ;}
        break;
    
      case 159:
    #line 2233 "Gmsh.y"
        {
          for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
    	Shape TheShape;
    	List_Read((yyvsp[(3) - (4)].l), i, &TheShape);
    	VisibilityShape(TheShape.Type, TheShape.Num, 1);
          }
          List_Delete((yyvsp[(3) - (4)].l));
        ;}
        break;
    
      case 160:
    #line 2242 "Gmsh.y"
        {
          for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
    	Shape TheShape;
    	List_Read((yyvsp[(3) - (4)].l), i, &TheShape);
    	VisibilityShape(TheShape.Type, TheShape.Num, 0);
          }
          List_Delete((yyvsp[(3) - (4)].l));
        ;}
        break;
    
      case 161:
    #line 2256 "Gmsh.y"
        {
          if(!strcmp((yyvsp[(1) - (3)].c), "Include")){
            std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(2) - (3)].c));
    	// Warning: we *don't* close included files (to allow user
    	// functions in these files). If you need to include many many
    	// files and don't have functions in the files, use "Merge"
    	// instead: some OSes limit the number of files a process can
    	// open simultaneously. The right solution would be of course
    	// to modify FunctionManager to reopen the files instead of
    	// using the FILE pointer, but hey, I'm lazy...
    	Msg::StatusBar(2, true, "Reading '%s'", tmp.c_str());
    	ParseFile(tmp, false, true);
    	SetBoundingBox();
    	Msg::StatusBar(2, true, "Done reading '%s'", tmp.c_str());
          }
          else if(!strcmp((yyvsp[(1) - (3)].c), "Print")){
    	// make sure we have the latest data from GEO_Internals in GModel
    	// (fixes bug where we would have no geometry in the picture if
    	// the print command is in the same file as the geometry)
    	GModel::current()->importGEOInternals();
            std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(2) - (3)].c));
    	CreateOutputFile(tmp, CTX::instance()->print.fileFormat);
          }
          else if(!strcmp((yyvsp[(1) - (3)].c), "Save")){
    	GModel::current()->importGEOInternals();
            std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(2) - (3)].c));
    	CreateOutputFile(tmp, CTX::instance()->mesh.fileFormat);
          }
          else if(!strcmp((yyvsp[(1) - (3)].c), "Merge") || !strcmp((yyvsp[(1) - (3)].c), "MergeWithBoundingBox")){
    	// MergeWithBoundingBox is deprecated
            std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(2) - (3)].c));
    	MergeFile(tmp, true);
          }
          else if(!strcmp((yyvsp[(1) - (3)].c), "System"))
    	SystemCall((yyvsp[(2) - (3)].c));
          else if(!strcmp((yyvsp[(1) - (3)].c), "SetName"))
    	GModel::current()->setName((yyvsp[(2) - (3)].c));
          else
    	yymsg(0, "Unknown command '%s'", (yyvsp[(1) - (3)].c));
          Free((yyvsp[(1) - (3)].c)); Free((yyvsp[(2) - (3)].c));
        ;}
        break;
    
      case 162:
    #line 2298 "Gmsh.y"
        {
    #if defined(HAVE_POST)
          if(!strcmp((yyvsp[(1) - (7)].c), "Save") && !strcmp((yyvsp[(2) - (7)].c), "View")){
    	int index = (int)(yyvsp[(4) - (7)].d);
    	if(index >= 0 && index < (int)PView::list.size()){
              std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(6) - (7)].c));
    	  PView::list[index]->write(tmp, CTX::instance()->post.fileFormat);
    	}
    	else
    	  yymsg(0, "Unknown view %d", index);
          }
          else
    	yymsg(0, "Unknown command '%s'", (yyvsp[(1) - (7)].c));
    #endif
          Free((yyvsp[(1) - (7)].c)); Free((yyvsp[(2) - (7)].c)); Free((yyvsp[(6) - (7)].c));
        ;}
        break;
    
      case 163:
    #line 2315 "Gmsh.y"
        {
    #if defined(HAVE_POST) && defined(HAVE_MESH)
          if(!strcmp((yyvsp[(1) - (7)].c), "Background") && !strcmp((yyvsp[(2) - (7)].c), "Mesh")  && !strcmp((yyvsp[(3) - (7)].c), "View")){
    	int index = (int)(yyvsp[(5) - (7)].d);
    	if(index >= 0 && index < (int)PView::list.size())
    	  GModel::current()->getFields()->setBackgroundMesh(index);
    	else
    	  yymsg(0, "Unknown view %d", index);
          }
          else
    	yymsg(0, "Unknown command '%s'", (yyvsp[(1) - (7)].c));
    #endif
          Free((yyvsp[(1) - (7)].c)); Free((yyvsp[(2) - (7)].c)); Free((yyvsp[(3) - (7)].c));
        ;}
        break;
    
      case 164:
    #line 2330 "Gmsh.y"
        {
          if(!strcmp((yyvsp[(1) - (3)].c), "Sleep")){
    	SleepInSeconds((yyvsp[(2) - (3)].d));
          }
          else if(!strcmp((yyvsp[(1) - (3)].c), "Remesh")){
    	yymsg(0, "Surface remeshing must be reinterfaced");
          }
          else if(!strcmp((yyvsp[(1) - (3)].c), "Mesh")){
    	int lock = CTX::instance()->lock;
    	CTX::instance()->lock = 0;
    	GModel::current()->importGEOInternals();
    	GModel::current()->mesh((int)(yyvsp[(2) - (3)].d));
    	CTX::instance()->lock = lock;
          }
          else
    	yymsg(0, "Unknown command '%s'", (yyvsp[(1) - (3)].c));
          Free((yyvsp[(1) - (3)].c));
        ;}
        break;
    
      case 165:
    #line 2349 "Gmsh.y"
        {
    #if defined(HAVE_PLUGINS)
           try {
    	 PluginManager::instance()->action((yyvsp[(3) - (7)].c), (yyvsp[(6) - (7)].c), 0);
           }
           catch(...) {
    	 yymsg(0, "Unknown action '%s' or plugin '%s'", (yyvsp[(6) - (7)].c), (yyvsp[(3) - (7)].c));
           }
    #endif
           Free((yyvsp[(3) - (7)].c)); Free((yyvsp[(6) - (7)].c));
         ;}
        break;
    
      case 166:
    #line 2361 "Gmsh.y"
        {
    #if defined(HAVE_POST)
          if(!strcmp((yyvsp[(2) - (3)].c), "ElementsFromAllViews"))
    	PView::combine(false, 1, CTX::instance()->post.combineRemoveOrig);
          else if(!strcmp((yyvsp[(2) - (3)].c), "ElementsFromVisibleViews"))
    	PView::combine(false, 0, CTX::instance()->post.combineRemoveOrig);
          else if(!strcmp((yyvsp[(2) - (3)].c), "ElementsByViewName"))
    	PView::combine(false, 2, CTX::instance()->post.combineRemoveOrig);
          else if(!strcmp((yyvsp[(2) - (3)].c), "TimeStepsFromAllViews"))
    	PView::combine(true, 1, CTX::instance()->post.combineRemoveOrig);
          else if(!strcmp((yyvsp[(2) - (3)].c), "TimeStepsFromVisibleViews"))
    	PView::combine(true, 0, CTX::instance()->post.combineRemoveOrig);
          else if(!strcmp((yyvsp[(2) - (3)].c), "TimeStepsByViewName"))
    	PView::combine(true, 2, CTX::instance()->post.combineRemoveOrig);
          else if(!strcmp((yyvsp[(2) - (3)].c), "Views"))
    	PView::combine(false, 1, CTX::instance()->post.combineRemoveOrig);
          else if(!strcmp((yyvsp[(2) - (3)].c), "TimeSteps"))
    	PView::combine(true, 2, CTX::instance()->post.combineRemoveOrig);
          else
    	yymsg(0, "Unknown 'Combine' command");
    #endif
          Free((yyvsp[(2) - (3)].c));
        ;}
        break;
    
      case 167:
    #line 2385 "Gmsh.y"
        {
          exit(0);
        ;}
        break;
    
      case 168:
    #line 2389 "Gmsh.y"
        {
          // FIXME: this is a hack to force a transfer from the old DB to
          // the new DB. This will become unnecessary if/when we fill the 
          // GModel directly during parsing.
          GModel::current()->importGEOInternals();
        ;}
        break;
    
      case 169:
    #line 2396 "Gmsh.y"
        {
          CTX::instance()->forcedBBox = 0;
          GModel::current()->importGEOInternals();
          SetBoundingBox();
        ;}
        break;
    
      case 170:
    #line 2402 "Gmsh.y"
        {
          CTX::instance()->forcedBBox = 1;
          SetBoundingBox((yyvsp[(3) - (15)].d), (yyvsp[(5) - (15)].d), (yyvsp[(7) - (15)].d), (yyvsp[(9) - (15)].d), (yyvsp[(11) - (15)].d), (yyvsp[(13) - (15)].d));
        ;}
        break;
    
      case 171:
    #line 2407 "Gmsh.y"
        {
    #if defined(HAVE_OPENGL)
          drawContext::global()->draw();
    #endif
        ;}
        break;
    
      case 172:
    #line 2413 "Gmsh.y"
        {
           GModel::current()->createTopologyFromMesh();
        ;}
        break;
    
      case 173:
    #line 2423 "Gmsh.y"
        {
          LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (6)].d);
          LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (6)].d);
          LoopControlVariablesTab[ImbricatedLoop][2] = 1.0;
          LoopControlVariablesNameTab[ImbricatedLoop] = NULL;
          fgetpos(gmsh_yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]);
          yylinenoImbricatedLoopsTab[ImbricatedLoop] = gmsh_yylineno;
          if((yyvsp[(3) - (6)].d) > (yyvsp[(5) - (6)].d))
    	skip_until("For", "EndFor");
          else
    	ImbricatedLoop++;
          if(ImbricatedLoop > MAX_RECUR_LOOPS - 1){
    	yymsg(0, "Reached maximum number of imbricated loops");
    	ImbricatedLoop = MAX_RECUR_LOOPS - 1;
          }
        ;}
        break;
    
      case 174:
    #line 2440 "Gmsh.y"
        {
          LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (8)].d);
          LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (8)].d);
          LoopControlVariablesTab[ImbricatedLoop][2] = (yyvsp[(7) - (8)].d);
          LoopControlVariablesNameTab[ImbricatedLoop] = NULL;
          fgetpos(gmsh_yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]);
          yylinenoImbricatedLoopsTab[ImbricatedLoop] = gmsh_yylineno;
          if(((yyvsp[(7) - (8)].d) > 0. && (yyvsp[(3) - (8)].d) > (yyvsp[(5) - (8)].d)) || ((yyvsp[(7) - (8)].d) < 0. && (yyvsp[(3) - (8)].d) < (yyvsp[(5) - (8)].d)))
    	skip_until("For", "EndFor");
          else
    	ImbricatedLoop++;
          if(ImbricatedLoop > MAX_RECUR_LOOPS - 1){
    	yymsg(0, "Reached maximum number of imbricated loops");
    	ImbricatedLoop = MAX_RECUR_LOOPS - 1;
          }
        ;}
        break;
    
      case 175:
    #line 2457 "Gmsh.y"
        {
          LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (8)].d);
          LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (8)].d);
          LoopControlVariablesTab[ImbricatedLoop][2] = 1.0;
          LoopControlVariablesNameTab[ImbricatedLoop] = (yyvsp[(2) - (8)].c);
          gmsh_yysymbols[(yyvsp[(2) - (8)].c)].resize(1);
          gmsh_yysymbols[(yyvsp[(2) - (8)].c)][0] = (yyvsp[(5) - (8)].d);
          fgetpos(gmsh_yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]);
          yylinenoImbricatedLoopsTab[ImbricatedLoop] = gmsh_yylineno;
          if((yyvsp[(5) - (8)].d) > (yyvsp[(7) - (8)].d)) 
    	skip_until("For", "EndFor");
          else
    	ImbricatedLoop++;
          if(ImbricatedLoop > MAX_RECUR_LOOPS - 1){
    	yymsg(0, "Reached maximum number of imbricated loops");
    	ImbricatedLoop = MAX_RECUR_LOOPS - 1;
          }
        ;}
        break;
    
      case 176:
    #line 2476 "Gmsh.y"
        {
          LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (10)].d);
          LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (10)].d);
          LoopControlVariablesTab[ImbricatedLoop][2] = (yyvsp[(9) - (10)].d);
          LoopControlVariablesNameTab[ImbricatedLoop] = (yyvsp[(2) - (10)].c);
          gmsh_yysymbols[(yyvsp[(2) - (10)].c)].resize(1);
          gmsh_yysymbols[(yyvsp[(2) - (10)].c)][0] = (yyvsp[(5) - (10)].d);
          fgetpos(gmsh_yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]);
          yylinenoImbricatedLoopsTab[ImbricatedLoop] = gmsh_yylineno;
          if(((yyvsp[(9) - (10)].d) > 0. && (yyvsp[(5) - (10)].d) > (yyvsp[(7) - (10)].d)) || ((yyvsp[(9) - (10)].d) < 0. && (yyvsp[(5) - (10)].d) < (yyvsp[(7) - (10)].d)))
    	skip_until("For", "EndFor");
          else
    	ImbricatedLoop++;
          if(ImbricatedLoop > MAX_RECUR_LOOPS - 1){
    	yymsg(0, "Reached maximum number of imbricated loops");
    	ImbricatedLoop = MAX_RECUR_LOOPS - 1;
          }
        ;}
        break;
    
      case 177:
    #line 2495 "Gmsh.y"
        {
          if(ImbricatedLoop <= 0){
    	yymsg(0, "Invalid For/EndFor loop");
    	ImbricatedLoop = 0;
          }
          else{
    	double step = LoopControlVariablesTab[ImbricatedLoop - 1][2];
            const char *name = LoopControlVariablesNameTab[ImbricatedLoop - 1];
            if(name){
              if(!gmsh_yysymbols.count(name))
                yymsg(0, "Unknown loop variable");
              else{
                gmsh_yysymbols[name][0] += step;
                LoopControlVariablesTab[ImbricatedLoop - 1][0] = gmsh_yysymbols[name][0];
              }
            }
            else{
              LoopControlVariablesTab[ImbricatedLoop - 1][0] += step;
            }
    	double x0 = LoopControlVariablesTab[ImbricatedLoop - 1][0];
    	double x1 = LoopControlVariablesTab[ImbricatedLoop - 1][1];
            if((step > 0. && x0 <= x1) || (step < 0. && x0 >= x1)){
    	  fsetpos(gmsh_yyin, &yyposImbricatedLoopsTab[ImbricatedLoop - 1]);
    	  gmsh_yylineno = yylinenoImbricatedLoopsTab[ImbricatedLoop - 1];
    	}
    	else
    	  ImbricatedLoop--;
          }
        ;}
        break;
    
      case 178:
    #line 2525 "Gmsh.y"
        {
          if(!FunctionManager::Instance()->createFunction
             ((yyvsp[(2) - (2)].c), gmsh_yyin, gmsh_yyname, gmsh_yylineno))
    	yymsg(0, "Redefinition of function %s", (yyvsp[(2) - (2)].c));
          skip_until(NULL, "Return");
          //FIXME: wee leak $2
        ;}
        break;
    
      case 179:
    #line 2533 "Gmsh.y"
        {
          if(!FunctionManager::Instance()->leaveFunction
             (&gmsh_yyin, gmsh_yyname, gmsh_yylineno))
    	yymsg(0, "Error while exiting function");
        ;}
        break;
    
      case 180:
    #line 2539 "Gmsh.y"
        {
          if(!FunctionManager::Instance()->enterFunction
             ((yyvsp[(2) - (3)].c), &gmsh_yyin, gmsh_yyname, gmsh_yylineno))
    	yymsg(0, "Unknown function %s", (yyvsp[(2) - (3)].c));
          //FIXME: wee leak $2
        ;}
        break;
    
      case 181:
    #line 2546 "Gmsh.y"
        {
          if(!(yyvsp[(3) - (4)].d)) skip_until("If", "EndIf");
        ;}
        break;
    
      case 182:
    #line 2550 "Gmsh.y"
        {
        ;}
        break;
    
      case 183:
    #line 2559 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (5)].l), 
    		    (yyvsp[(2) - (5)].v)[0], (yyvsp[(2) - (5)].v)[1], (yyvsp[(2) - (5)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
    		    NULL, (yyval.l));
          List_Delete((yyvsp[(4) - (5)].l));
        ;}
        break;
    
      case 184:
    #line 2567 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShapes(ROTATE, (yyvsp[(10) - (11)].l), 
    		    0., 0., 0., (yyvsp[(3) - (11)].v)[0], (yyvsp[(3) - (11)].v)[1], (yyvsp[(3) - (11)].v)[2], (yyvsp[(5) - (11)].v)[0], (yyvsp[(5) - (11)].v)[1], (yyvsp[(5) - (11)].v)[2], (yyvsp[(7) - (11)].d),
    		    NULL, (yyval.l));
          List_Delete((yyvsp[(10) - (11)].l));
        ;}
        break;
    
      case 185:
    #line 2575 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (13)].l), 
    		    (yyvsp[(3) - (13)].v)[0], (yyvsp[(3) - (13)].v)[1], (yyvsp[(3) - (13)].v)[2], (yyvsp[(5) - (13)].v)[0], (yyvsp[(5) - (13)].v)[1], (yyvsp[(5) - (13)].v)[2], (yyvsp[(7) - (13)].v)[0], (yyvsp[(7) - (13)].v)[1], (yyvsp[(7) - (13)].v)[2], (yyvsp[(9) - (13)].d),
    		    NULL, (yyval.l));
          List_Delete((yyvsp[(12) - (13)].l));
        ;}
        break;
    
      case 186:
    #line 2583 "Gmsh.y"
        {
          extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        ;}
        break;
    
      case 187:
    #line 2587 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (7)].l), 
    		    (yyvsp[(2) - (7)].v)[0], (yyvsp[(2) - (7)].v)[1], (yyvsp[(2) - (7)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
    		    &extr, (yyval.l));
          List_Delete((yyvsp[(4) - (7)].l));
        ;}
        break;
    
      case 188:
    #line 2595 "Gmsh.y"
        {
          extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        ;}
        break;
    
      case 189:
    #line 2599 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShapes(ROTATE, (yyvsp[(10) - (13)].l), 
    		    0., 0., 0., (yyvsp[(3) - (13)].v)[0], (yyvsp[(3) - (13)].v)[1], (yyvsp[(3) - (13)].v)[2], (yyvsp[(5) - (13)].v)[0], (yyvsp[(5) - (13)].v)[1], (yyvsp[(5) - (13)].v)[2], (yyvsp[(7) - (13)].d),
    		    &extr, (yyval.l));
          List_Delete((yyvsp[(10) - (13)].l));
        ;}
        break;
    
      case 190:
    #line 2607 "Gmsh.y"
        {
          extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        ;}
        break;
    
      case 191:
    #line 2611 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (15)].l), 
    		    (yyvsp[(3) - (15)].v)[0], (yyvsp[(3) - (15)].v)[1], (yyvsp[(3) - (15)].v)[2], (yyvsp[(5) - (15)].v)[0], (yyvsp[(5) - (15)].v)[1], (yyvsp[(5) - (15)].v)[2], (yyvsp[(7) - (15)].v)[0], (yyvsp[(7) - (15)].v)[1], (yyvsp[(7) - (15)].v)[2], (yyvsp[(9) - (15)].d),
    		    &extr, (yyval.l));
          List_Delete((yyvsp[(12) - (15)].l));
        ;}
        break;
    
      case 192:
    #line 2619 "Gmsh.y"
        {
          extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        ;}
        break;
    
      case 193:
    #line 2623 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShapes(BOUNDARY_LAYER, (yyvsp[(3) - (6)].l), 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
    		    &extr, (yyval.l));
          List_Delete((yyvsp[(3) - (6)].l));
        ;}
        break;
    
      case 194:
    #line 2632 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (8)].d), 
    		   (yyvsp[(6) - (8)].v)[0], (yyvsp[(6) - (8)].v)[1], (yyvsp[(6) - (8)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
    		   NULL, (yyval.l));
        ;}
        break;
    
      case 195:
    #line 2639 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (8)].d), 
    		   (yyvsp[(6) - (8)].v)[0], (yyvsp[(6) - (8)].v)[1], (yyvsp[(6) - (8)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
    		   NULL, (yyval.l));
        ;}
        break;
    
      case 196:
    #line 2646 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (8)].d), 
    		   (yyvsp[(6) - (8)].v)[0], (yyvsp[(6) - (8)].v)[1], (yyvsp[(6) - (8)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
    		   NULL, (yyval.l));
        ;}
        break;
    
      case 197:
    #line 2653 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d), 
    		   0., 0., 0., (yyvsp[(6) - (12)].v)[0], (yyvsp[(6) - (12)].v)[1], (yyvsp[(6) - (12)].v)[2], (yyvsp[(8) - (12)].v)[0], (yyvsp[(8) - (12)].v)[1], (yyvsp[(8) - (12)].v)[2], (yyvsp[(10) - (12)].d),
    		   NULL, (yyval.l));
        ;}
        break;
    
      case 198:
    #line 2660 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d), 
    		   0., 0., 0., (yyvsp[(6) - (12)].v)[0], (yyvsp[(6) - (12)].v)[1], (yyvsp[(6) - (12)].v)[2], (yyvsp[(8) - (12)].v)[0], (yyvsp[(8) - (12)].v)[1], (yyvsp[(8) - (12)].v)[2], (yyvsp[(10) - (12)].d),
    		   NULL, (yyval.l));
        ;}
        break;
    
      case 199:
    #line 2667 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d), 
    		   0., 0., 0., (yyvsp[(6) - (12)].v)[0], (yyvsp[(6) - (12)].v)[1], (yyvsp[(6) - (12)].v)[2], (yyvsp[(8) - (12)].v)[0], (yyvsp[(8) - (12)].v)[1], (yyvsp[(8) - (12)].v)[2], (yyvsp[(10) - (12)].d),
    		   NULL, (yyval.l));
        ;}
        break;
    
      case 200:
    #line 2674 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (14)].d), 
    		   (yyvsp[(6) - (14)].v)[0], (yyvsp[(6) - (14)].v)[1], (yyvsp[(6) - (14)].v)[2], (yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2], (yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2], (yyvsp[(12) - (14)].d),
    		   NULL, (yyval.l));
        ;}
        break;
    
      case 201:
    #line 2681 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (14)].d), 
    		   (yyvsp[(6) - (14)].v)[0], (yyvsp[(6) - (14)].v)[1], (yyvsp[(6) - (14)].v)[2], (yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2], (yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2], (yyvsp[(12) - (14)].d),
    		   NULL, (yyval.l));
        ;}
        break;
    
      case 202:
    #line 2688 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (14)].d), 
    		   (yyvsp[(6) - (14)].v)[0], (yyvsp[(6) - (14)].v)[1], (yyvsp[(6) - (14)].v)[2], (yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2], (yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2], (yyvsp[(12) - (14)].d),
    		   NULL, (yyval.l));
        ;}
        break;
    
      case 203:
    #line 2695 "Gmsh.y"
        {
          extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        ;}
        break;
    
      case 204:
    #line 2699 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d), 
    		   (yyvsp[(6) - (12)].v)[0], (yyvsp[(6) - (12)].v)[1], (yyvsp[(6) - (12)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
    		   &extr, (yyval.l));
        ;}
        break;
    
      case 205:
    #line 2706 "Gmsh.y"
        {
          extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        ;}
        break;
    
      case 206:
    #line 2710 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d), 
    		   (yyvsp[(6) - (12)].v)[0], (yyvsp[(6) - (12)].v)[1], (yyvsp[(6) - (12)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
    		   &extr, (yyval.l));
        ;}
        break;
    
      case 207:
    #line 2717 "Gmsh.y"
        {
          extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        ;}
        break;
    
      case 208:
    #line 2721 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d), 
    		   (yyvsp[(6) - (12)].v)[0], (yyvsp[(6) - (12)].v)[1], (yyvsp[(6) - (12)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
    		   &extr, (yyval.l));
        ;}
        break;
    
      case 209:
    #line 2728 "Gmsh.y"
        {
          extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        ;}
        break;
    
      case 210:
    #line 2732 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (16)].d), 
    		   0., 0., 0., (yyvsp[(6) - (16)].v)[0], (yyvsp[(6) - (16)].v)[1], (yyvsp[(6) - (16)].v)[2], (yyvsp[(8) - (16)].v)[0], (yyvsp[(8) - (16)].v)[1], (yyvsp[(8) - (16)].v)[2], (yyvsp[(10) - (16)].d),
    		   &extr, (yyval.l));
        ;}
        break;
    
      case 211:
    #line 2739 "Gmsh.y"
        {
          extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        ;}
        break;
    
      case 212:
    #line 2743 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (16)].d), 
    		   0., 0., 0., (yyvsp[(6) - (16)].v)[0], (yyvsp[(6) - (16)].v)[1], (yyvsp[(6) - (16)].v)[2], (yyvsp[(8) - (16)].v)[0], (yyvsp[(8) - (16)].v)[1], (yyvsp[(8) - (16)].v)[2], (yyvsp[(10) - (16)].d),
    		   &extr, (yyval.l));
        ;}
        break;
    
      case 213:
    #line 2750 "Gmsh.y"
        {
          extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        ;}
        break;
    
      case 214:
    #line 2754 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (16)].d), 
    		   0., 0., 0., (yyvsp[(6) - (16)].v)[0], (yyvsp[(6) - (16)].v)[1], (yyvsp[(6) - (16)].v)[2], (yyvsp[(8) - (16)].v)[0], (yyvsp[(8) - (16)].v)[1], (yyvsp[(8) - (16)].v)[2], (yyvsp[(10) - (16)].d),
    		   &extr, (yyval.l));
        ;}
        break;
    
      case 215:
    #line 2761 "Gmsh.y"
        {
          extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        ;}
        break;
    
      case 216:
    #line 2765 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (18)].d), 
    		   (yyvsp[(6) - (18)].v)[0], (yyvsp[(6) - (18)].v)[1], (yyvsp[(6) - (18)].v)[2], (yyvsp[(8) - (18)].v)[0], (yyvsp[(8) - (18)].v)[1], (yyvsp[(8) - (18)].v)[2], (yyvsp[(10) - (18)].v)[0], (yyvsp[(10) - (18)].v)[1], (yyvsp[(10) - (18)].v)[2], (yyvsp[(12) - (18)].d),
    		   &extr, (yyval.l));
        ;}
        break;
    
      case 217:
    #line 2772 "Gmsh.y"
        {
          extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        ;}
        break;
    
      case 218:
    #line 2776 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (18)].d), 
    		   (yyvsp[(6) - (18)].v)[0], (yyvsp[(6) - (18)].v)[1], (yyvsp[(6) - (18)].v)[2], (yyvsp[(8) - (18)].v)[0], (yyvsp[(8) - (18)].v)[1], (yyvsp[(8) - (18)].v)[2], (yyvsp[(10) - (18)].v)[0], (yyvsp[(10) - (18)].v)[1], (yyvsp[(10) - (18)].v)[2], (yyvsp[(12) - (18)].d),
    		   &extr, (yyval.l));
        ;}
        break;
    
      case 219:
    #line 2783 "Gmsh.y"
        {
          extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        ;}
        break;
    
      case 220:
    #line 2787 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (18)].d), 
    		   (yyvsp[(6) - (18)].v)[0], (yyvsp[(6) - (18)].v)[1], (yyvsp[(6) - (18)].v)[2], (yyvsp[(8) - (18)].v)[0], (yyvsp[(8) - (18)].v)[1], (yyvsp[(8) - (18)].v)[2], (yyvsp[(10) - (18)].v)[0], (yyvsp[(10) - (18)].v)[1], (yyvsp[(10) - (18)].v)[2], (yyvsp[(12) - (18)].d),
    		   &extr, (yyval.l));
        ;}
        break;
    
      case 221:
    #line 2798 "Gmsh.y"
        {
        ;}
        break;
    
      case 222:
    #line 2801 "Gmsh.y"
        {
        ;}
        break;
    
      case 223:
    #line 2807 "Gmsh.y"
        {
          extr.mesh.ExtrudeMesh = true;
          extr.mesh.NbLayer = 1;
          extr.mesh.NbElmLayer.clear();
          extr.mesh.hLayer.clear();
          extr.mesh.NbElmLayer.push_back((int)fabs((yyvsp[(3) - (5)].d)));
          extr.mesh.hLayer.push_back(1.);
        ;}
        break;
    
      case 224:
    #line 2816 "Gmsh.y"
        {
          extr.mesh.ExtrudeMesh = true;
          extr.mesh.NbLayer = List_Nbr((yyvsp[(3) - (7)].l));
          if(List_Nbr((yyvsp[(3) - (7)].l)) == List_Nbr((yyvsp[(5) - (7)].l))){
    	extr.mesh.NbElmLayer.clear();
    	extr.mesh.hLayer.clear();
    	for(int i = 0; i < List_Nbr((yyvsp[(3) - (7)].l)); i++){
    	  double d;
    	  List_Read((yyvsp[(3) - (7)].l), i, &d);
    	  extr.mesh.NbElmLayer.push_back((d > 0) ? (int)d : 1);
    	  List_Read((yyvsp[(5) - (7)].l), i, &d);
    	  extr.mesh.hLayer.push_back(d);
    	}
          }
          else
    	yymsg(0, "Wrong layer definition {%d, %d}", List_Nbr((yyvsp[(3) - (7)].l)), List_Nbr((yyvsp[(5) - (7)].l)));
          List_Delete((yyvsp[(3) - (7)].l));
          List_Delete((yyvsp[(5) - (7)].l));
        ;}
        break;
    
      case 225:
    #line 2836 "Gmsh.y"
        {
          yymsg(0, "Explicit region numbers in layers are deprecated");
          extr.mesh.ExtrudeMesh = true;
          extr.mesh.NbLayer = List_Nbr((yyvsp[(3) - (9)].l));
          if(List_Nbr((yyvsp[(3) - (9)].l)) == List_Nbr((yyvsp[(5) - (9)].l)) && List_Nbr((yyvsp[(3) - (9)].l)) == List_Nbr((yyvsp[(7) - (9)].l))){
    	extr.mesh.NbElmLayer.clear();
    	extr.mesh.hLayer.clear();
    	for(int i = 0; i < List_Nbr((yyvsp[(3) - (9)].l)); i++){
    	  double d;
    	  List_Read((yyvsp[(3) - (9)].l), i, &d);
    	  extr.mesh.NbElmLayer.push_back((d > 0) ? (int)d : 1);
    	  List_Read((yyvsp[(7) - (9)].l), i, &d);
    	  extr.mesh.hLayer.push_back(d);
    	}
          }
          else
    	yymsg(0, "Wrong layer definition {%d, %d, %d}", List_Nbr((yyvsp[(3) - (9)].l)), 
    	      List_Nbr((yyvsp[(5) - (9)].l)), List_Nbr((yyvsp[(7) - (9)].l)));
          List_Delete((yyvsp[(3) - (9)].l));
          List_Delete((yyvsp[(5) - (9)].l));
          List_Delete((yyvsp[(7) - (9)].l));
        ;}
        break;
    
      case 226:
    #line 2859 "Gmsh.y"
        {
          extr.mesh.Recombine = true;
        ;}
        break;
    
      case 227:
    #line 2863 "Gmsh.y"
        {
          int num = (int)(yyvsp[(3) - (9)].d);
          if(FindSurface(num)){
    	yymsg(0, "Surface %d already exists", num);
          }
          else{
    	Surface *s = Create_Surface(num, MSH_SURF_DISCRETE);
    	Tree_Add(GModel::current()->getGEOInternals()->Surfaces, &s);
    	extr.mesh.Holes[num].first = (yyvsp[(8) - (9)].d);
    	extr.mesh.Holes[num].second.clear();
    	for(int i = 0; i < List_Nbr((yyvsp[(6) - (9)].l)); i++){
    	  double d;
    	  List_Read((yyvsp[(6) - (9)].l), i, &d);
    	  extr.mesh.Holes[num].second.push_back((int)d);
    	}
          }
          List_Delete((yyvsp[(6) - (9)].l));
        ;}
        break;
    
      case 228:
    #line 2886 "Gmsh.y"
        {
          (yyval.i) = 1; // harmonic
        ;}
        break;
    
      case 229:
    #line 2890 "Gmsh.y"
        {
          if(!strcmp((yyvsp[(1) - (1)].c), "Harmonic"))
            (yyval.i) = 1;
          else if(!strcmp((yyvsp[(1) - (1)].c), "Conformal"))
            (yyval.i) = -1;
          else if(!strcmp((yyvsp[(1) - (1)].c), "Harmonic_NoSplit"))
            (yyval.i) = 2;
          else if(!strcmp((yyvsp[(1) - (1)].c), "Conformal_NoSplit"))
            (yyval.i) = -2;
          Free((yyvsp[(1) - (1)].c));
        ;}
        break;
    
      case 230:
    #line 2905 "Gmsh.y"
        {
          (yyval.v)[0] = (yyval.v)[1] = 1.;
        ;}
        break;
    
      case 231:
    #line 2909 "Gmsh.y"
        {
          if(!strcmp((yyvsp[(2) - (3)].c), "Progression") || !strcmp((yyvsp[(2) - (3)].c), "Power"))
            (yyval.v)[0] = 1.;
          else if(!strcmp((yyvsp[(2) - (3)].c), "Bump"))
            (yyval.v)[0] = 2.;
          else{
            yymsg(0, "Unknown transfinite mesh type");
            (yyval.v)[0] = 1.;
          }
          (yyval.v)[1] = (yyvsp[(3) - (3)].d);
          Free((yyvsp[(2) - (3)].c));
        ;}
        break;
    
      case 232:
    #line 2924 "Gmsh.y"
        {
          (yyval.i) = -1; // left
        ;}
        break;
    
      case 233:
    #line 2928 "Gmsh.y"
        {
          if(!strcmp((yyvsp[(1) - (1)].c), "Right"))
            (yyval.i) = 1;
          else if(!strcmp((yyvsp[(1) - (1)].c), "Left"))
            (yyval.i) = -1;
          else // alternated
            (yyval.i) = 0;
          Free((yyvsp[(1) - (1)].c));
        ;}
        break;
    
      case 234:
    #line 2940 "Gmsh.y"
        {
         (yyval.l) = List_Create(1, 1, sizeof(double));
       ;}
        break;
    
      case 235:
    #line 2944 "Gmsh.y"
        {
         (yyval.l) = (yyvsp[(2) - (2)].l);
       ;}
        break;
    
      case 236:
    #line 2949 "Gmsh.y"
        {
          (yyval.i) = 45;
        ;}
        break;
    
      case 237:
    #line 2953 "Gmsh.y"
        {
          (yyval.i) = (int)(yyvsp[(2) - (2)].d);
        ;}
        break;
    
      case 238:
    #line 2960 "Gmsh.y"
        {
          int type = (int)(yyvsp[(6) - (7)].v)[0];
          double coef = fabs((yyvsp[(6) - (7)].v)[1]);
          if(!(yyvsp[(3) - (7)].l)){
            List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Curves);
            if(List_Nbr(tmp)){
              for(int i = 0; i < List_Nbr(tmp); i++){
                Curve *c;
                List_Read(tmp, i, &c);
                c->Method = MESH_TRANSFINITE;
                c->nbPointsTransfinite = ((yyvsp[(5) - (7)].d) > 2) ? (int)(yyvsp[(5) - (7)].d) : 2;
                c->typeTransfinite = type;
                c->coeffTransfinite = coef;
              }
            }
            else{
              for(GModel::eiter it = GModel::current()->firstEdge(); 
                  it != GModel::current()->lastEdge(); it++){
                (*it)->meshAttributes.Method = MESH_TRANSFINITE;
                (*it)->meshAttributes.nbPointsTransfinite = ((yyvsp[(5) - (7)].d) > 2) ? (int)(yyvsp[(5) - (7)].d) : 2;
                (*it)->meshAttributes.typeTransfinite = type;
                (*it)->meshAttributes.coeffTransfinite = coef;
              }
            }
            List_Delete(tmp);
          }
          else{
            for(int i = 0; i < List_Nbr((yyvsp[(3) - (7)].l)); i++){
              double d;
              List_Read((yyvsp[(3) - (7)].l), i, &d);
              int j = (int)fabs(d);
              for(int sign = -1; sign <= 1; sign += 2){
                Curve *c = FindCurve(sign * j);
                if(c){
                  c->Method = MESH_TRANSFINITE;
                  c->nbPointsTransfinite = ((yyvsp[(5) - (7)].d) > 2) ? (int)(yyvsp[(5) - (7)].d) : 2;
                  c->typeTransfinite = type * sign(d);
                  c->coeffTransfinite = coef;
                }
                else{
                  GEdge *ge = GModel::current()->getEdgeByTag(sign * j);
                  if(ge){
                    ge->meshAttributes.Method = MESH_TRANSFINITE;
                    ge->meshAttributes.nbPointsTransfinite = ((yyvsp[(5) - (7)].d) > 2) ? (int)(yyvsp[(5) - (7)].d) : 2;
                    ge->meshAttributes.typeTransfinite = type * sign(d);
                    ge->meshAttributes.coeffTransfinite = coef;
                  }
                  else if(sign > 0)
                    yymsg(0, "Unknown line %d", j);
                }
              }
            }
            List_Delete((yyvsp[(3) - (7)].l));
          }
        ;}
        break;
    
      case 239:
    #line 3016 "Gmsh.y"
        {
          int k = List_Nbr((yyvsp[(4) - (6)].l));
          if(k != 0 && k != 3 && k != 4){
            yymsg(0, "Wrong definition of Transfinite Surface: 0, 3 or 4 points needed");
          }
          else{
            if(!(yyvsp[(3) - (6)].l)){
              List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
              if(List_Nbr(tmp)){
                for(int i = 0; i < List_Nbr(tmp); i++){
                  Surface *s;
                  List_Read(tmp, i, &s);
                  s->Method = MESH_TRANSFINITE;
                  s->Recombine_Dir = (yyvsp[(5) - (6)].i);
                  List_Reset(s->TrsfPoints);
                }
              }
              else{
                for(GModel::fiter it = GModel::current()->firstFace(); 
                    it != GModel::current()->lastFace(); it++){
                  (*it)->meshAttributes.Method = MESH_TRANSFINITE;
                  (*it)->meshAttributes.transfiniteArrangement = (yyvsp[(5) - (6)].i);
                }
              }
              List_Delete(tmp);
            }
            else{
              for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
                double d;
                List_Read((yyvsp[(3) - (6)].l), i, &d);
                Surface *s = FindSurface((int)d);
                if(s){
                  s->Method = MESH_TRANSFINITE;
                  s->Recombine_Dir = (yyvsp[(5) - (6)].i);
                  List_Reset(s->TrsfPoints);
                  for(int j = 0; j < k; j++){
                    double p;
                    List_Read((yyvsp[(4) - (6)].l), j, &p);
                    Vertex *v = FindPoint((int)fabs(p));
                    if(v)
                      List_Add(s->TrsfPoints, &v);
                    else
                      yymsg(0, "Unknown point %d", (int)fabs(p));
                  }
                }
                else{
                  GFace *gf = GModel::current()->getFaceByTag((int)d);
                  if(gf){
                    gf->meshAttributes.Method = MESH_TRANSFINITE;
                    gf->meshAttributes.transfiniteArrangement = (yyvsp[(5) - (6)].i);
                    for(int j = 0; j < k; j++){
                      double p;
                      List_Read((yyvsp[(4) - (6)].l), j, &p);
                      GVertex *gv = GModel::current()->getVertexByTag((int)fabs(p));
                      if(gv)
                        gf->meshAttributes.corners.push_back(gv);
                      else
                        yymsg(0, "Unknown point %d", (int)fabs(p));
                    }
                  }
                  else
                    yymsg(0, "Unknown surface %d", (int)d);
                }
              }
              List_Delete((yyvsp[(3) - (6)].l));
            }
          }
          List_Delete((yyvsp[(4) - (6)].l));
        ;}
        break;
    
      case 240:
    #line 3086 "Gmsh.y"
        {
          yymsg(1, "Elliptic Surface is deprecated: use Transfinite instead (with smoothing)");
          List_Delete((yyvsp[(7) - (8)].l));
        ;}
        break;
    
      case 241:
    #line 3091 "Gmsh.y"
        {
          int k = List_Nbr((yyvsp[(4) - (5)].l));
          if(k != 0 && k != 6 && k != 8){
            yymsg(0, "Wrong definition of Transfinite Volume: "
                  "%d points instead of 6 or 8", k);
          }
          else{
            if(!(yyvsp[(3) - (5)].l)){
              List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Volumes);
              if(List_Nbr(tmp)){
                for(int i = 0; i < List_Nbr(tmp); i++){
                  Volume *v;
                  List_Read(tmp, i, &v);
                  v->Method = MESH_TRANSFINITE;
                  List_Reset(v->TrsfPoints);
                }
              }
              else{
                for(GModel::riter it = GModel::current()->firstRegion(); 
                    it != GModel::current()->lastRegion(); it++){
                  (*it)->meshAttributes.Method = MESH_TRANSFINITE;
                }
              }
              List_Delete(tmp);
            }
            else{
              for(int i = 0; i < List_Nbr((yyvsp[(3) - (5)].l)); i++){
                double d;
                List_Read((yyvsp[(3) - (5)].l), i, &d);
                Volume *v = FindVolume((int)d);
                if(v){
                  v->Method = MESH_TRANSFINITE;
                  List_Reset(v->TrsfPoints);
                  for(int i = 0; i < k; i++){
                    double p;
                    List_Read((yyvsp[(4) - (5)].l), i, &p);
                    Vertex *vert = FindPoint((int)fabs(p));
                    if(vert)
                      List_Add(v->TrsfPoints, &vert);
                    else
                      yymsg(0, "Unknown point %d", (int)fabs(p));
                  }
                }
                else{
                  GRegion *gr = GModel::current()->getRegionByTag((int)d);
                  if(gr){
                    gr->meshAttributes.Method = MESH_TRANSFINITE;
                    for(int i = 0; i < k; i++){
                      double p;
                      List_Read((yyvsp[(4) - (5)].l), i, &p);
                      GVertex *gv = GModel::current()->getVertexByTag((int)fabs(p));
                      if(gv)
                        gr->meshAttributes.corners.push_back(gv);
                      else
                        yymsg(0, "Unknown point %d", (int)fabs(p));
                    }
                  }
                  else
                    yymsg(0, "Unknown volume %d", (int)d);
                }
              }
              List_Delete((yyvsp[(3) - (5)].l));
            }
          }
          List_Delete((yyvsp[(4) - (5)].l));
        ;}
        break;
    
      case 242:
    #line 3158 "Gmsh.y"
        {
          if(!(yyvsp[(3) - (5)].l)){
    	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
            if(List_Nbr(tmp)){
              for(int i = 0; i < List_Nbr(tmp); i++){
                Surface *s;
                List_Read(tmp, i, &s);
                s->Recombine = 1;
                s->RecombineAngle = (yyvsp[(4) - (5)].i);
              }
            }
            else{
              for(GModel::fiter it = GModel::current()->firstFace(); 
                  it != GModel::current()->lastFace(); it++){
                (*it)->meshAttributes.recombine = 1;
                (*it)->meshAttributes.recombineAngle = (yyvsp[(4) - (5)].i);
              }
            }
            List_Delete(tmp);
          }
          else{
            for(int i = 0; i < List_Nbr((yyvsp[(3) - (5)].l)); i++){
              double d;
              List_Read((yyvsp[(3) - (5)].l), i, &d);
              Surface *s = FindSurface((int)d);
              if(s){
                s->Recombine = 1;
                s->RecombineAngle = (yyvsp[(4) - (5)].i);
              }
              else{
                GFace *gf = GModel::current()->getFaceByTag((int)d);
                if(gf){
                  gf->meshAttributes.recombine = 1;
                  gf->meshAttributes.recombineAngle = (yyvsp[(4) - (5)].i);
                }
                else
                  yymsg(1, "Unknown surface %d", (int)d);
              }
            }
            List_Delete((yyvsp[(3) - (5)].l));
          }
        ;}
        break;
    
      case 243:
    #line 3201 "Gmsh.y"
        {
          for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
    	double d;
    	List_Read((yyvsp[(3) - (6)].l), i, &d);
    	int j = (int)d;
    	Surface *s = FindSurface(j);
    	if(s){
              s->TransfiniteSmoothing = (int)(yyvsp[(5) - (6)].d);
            }
            else{
    	  GFace *gf = GModel::current()->getFaceByTag(j);
    	  if(gf)
                gf->meshAttributes.transfiniteSmoothing = (int)(yyvsp[(5) - (6)].d);
              else
    	    yymsg(1, "Unknown surface %d", (int)(yyvsp[(5) - (6)].d));
            }
          }
          List_Delete((yyvsp[(3) - (6)].l));
        ;}
        break;
    
      case 244:
    #line 3225 "Gmsh.y"
        {
          if (List_Nbr((yyvsp[(3) - (6)].l)) != List_Nbr((yyvsp[(5) - (6)].l))){
    	yymsg(0, "Periodic Line : the number of masters (%d) is not equal to the number of slaves(%d)", List_Nbr((yyvsp[(3) - (6)].l)),List_Nbr((yyvsp[(5) - (6)].l)));
          }
    
          for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
    	double d_master,d_slave;
    	List_Read((yyvsp[(3) - (6)].l), i, &d_master);
    	List_Read((yyvsp[(5) - (6)].l), i, &d_slave);
    	int j_master = (int)d_master;
    	int j_slave  = (int)d_slave;
    	Curve *c_slave = FindCurve(abs(j_slave));
    	if(c_slave){
    	  //	  printf("c_slave %d c_master = %d\n",j_slave,j_master);
    	  c_slave->meshMaster = j_master;	  
    	}
    	else{
    	  GEdge *ge = GModel::current()->getEdgeByTag(abs(j_slave));
    	  if(ge)ge->setMeshMaster (j_master);
    	  else yymsg(0, "Unknown line %d", j_slave);
    	}
          }
          List_Delete((yyvsp[(3) - (6)].l));
          List_Delete((yyvsp[(5) - (6)].l));
        ;}
        break;
    
      case 245:
    #line 3251 "Gmsh.y"
        {
          if (List_Nbr((yyvsp[(5) - (12)].l)) != List_Nbr((yyvsp[(10) - (12)].l))){
    	yymsg(0, "Periodic Surface: the number of masters (%d) is not equal to the number of slaves(%d)",
                  List_Nbr((yyvsp[(5) - (12)].l)), List_Nbr((yyvsp[(10) - (12)].l)));
          }
    
          double d_master = (yyvsp[(3) - (12)].d), d_slave = (yyvsp[(8) - (12)].d);
          int j_master = (int)d_master;
          int j_slave = (int)d_slave;
          Surface *s_slave = FindSurface(abs(j_slave));
          if(s_slave){
    	s_slave->meshMaster = j_master;
    	for (int i = 0; i < List_Nbr((yyvsp[(5) - (12)].l)); i++){
    	  double dm, ds;
    	  List_Read((yyvsp[(5) - (12)].l), i, &dm);
    	  List_Read((yyvsp[(10) - (12)].l), i, &ds);	  
    	  s_slave->edgeCounterparts[(int)ds] = (int)dm;
    	}
          }
          else{
    	GFace *gf = GModel::current()->getFaceByTag(abs(j_slave));
    	if(gf) gf->setMeshMaster(j_master);
    	else yymsg(0, "Unknown surface %d", j_slave);
    	for (int i = 0; i < List_Nbr((yyvsp[(5) - (12)].l)); i++){
    	  double dm, ds;
    	  List_Read((yyvsp[(5) - (12)].l), i, &dm);
    	  List_Read((yyvsp[(10) - (12)].l), i, &ds);
    	  gf->edgeCounterparts[(int)ds] = (int)dm;
    	}
          }
          List_Delete((yyvsp[(5) - (12)].l));
          List_Delete((yyvsp[(10) - (12)].l));
        ;}
        break;
    
      case 246:
    #line 3292 "Gmsh.y"
        { 
          Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
          if(s){
    	setSurfaceEmbeddedPoints(s, (yyvsp[(3) - (10)].l));
          }
          else{
            GFace *gf = GModel::current()->getFaceByTag((int)(yyvsp[(8) - (10)].d));
            if(gf){
              for(int i = 0; i < List_Nbr((yyvsp[(3) - (10)].l)); i++){
                int iPoint;
                List_Read((yyvsp[(3) - (10)].l), i, &iPoint);
                GVertex *gv = GModel::current()->getVertexByTag(iPoint);
                if(gv)
                  gf->addEmbeddedVertex(gv);
                else
                  yymsg(0, "Unknown point %d", iPoint);
              }
            }
            else
              yymsg(0, "Unknown surface %d", (int)(yyvsp[(8) - (10)].d));
          }
        ;}
        break;
    
      case 247:
    #line 3315 "Gmsh.y"
        {
          Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
          if(s){
    	setSurfaceEmbeddedCurves(s, (yyvsp[(3) - (10)].l));
          }
          else{
            GFace *gf = GModel::current()->getFaceByTag((int)(yyvsp[(8) - (10)].d));
            if(gf){
              for(int i = 0; i < List_Nbr((yyvsp[(3) - (10)].l)); i++){
                int iCurve;
                List_Read((yyvsp[(3) - (10)].l), i, &iCurve);
                GEdge *ge = GModel::current()->getEdgeByTag(iCurve);
                if(ge)
                  gf->addEmbeddedEdge(ge);
                else
                  yymsg(0, "Unknown line %d", iCurve);
              }
            }
            else
              yymsg(0, "Unknown surface %d", (int)(yyvsp[(8) - (10)].d));
          }
        ;}
        break;
    
      case 248:
    #line 3338 "Gmsh.y"
        {
        ;}
        break;
    
      case 249:
    #line 3341 "Gmsh.y"
        {
        ;}
        break;
    
      case 250:
    #line 3350 "Gmsh.y"
        { 
          ReplaceAllDuplicates();
        ;}
        break;
    
      case 251:
    #line 3354 "Gmsh.y"
        { 
          if(!strcmp((yyvsp[(2) - (3)].c), "Geometry"))
            ReplaceAllDuplicates();
          else if(!strcmp((yyvsp[(2) - (3)].c), "Mesh"))
            GModel::current()->removeDuplicateMeshVertices(CTX::instance()->geom.tolerance);
          else
            yymsg(0, "Unknown coherence command");
          Free((yyvsp[(2) - (3)].c));
        ;}
        break;
    
      case 252:
    #line 3371 "Gmsh.y"
        {
        
        List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (11)].l));
        std::vector<int> domain;
        
        for (int i = 0; i < List_Nbr(temp); i++){
          int item = 0;
          List_Read(temp, i, &item);
          domain.push_back(item);
        }
        List_Delete((yyvsp[(7) - (11)].l));
        List_Delete(temp);
        
        List_T *temp2 = ListOfDouble2ListOfInt((yyvsp[(9) - (11)].l));
        std::vector<int> subdomain;
        for (int i = 0; i < List_Nbr(temp2); i++){
          int item = 0;
          List_Read(temp2, i, &item);
          subdomain.push_back(item);
        }
        List_Delete((yyvsp[(9) - (11)].l));
        List_Delete(temp2);
        
        std::string fileName = "";
        fileName = (yyvsp[(3) - (11)].c);
        
        #if defined(HAVE_KBIPACK)
        Homology* homology = new Homology(GModel::current(), domain, subdomain);
        homology->setFileName(fileName);
        homology->computeRanks();
        delete homology;
        #else
        yymsg(0, "Gmsh needs to be configured with option Kbipack to use homology computation.");    
        #endif
        ;}
        break;
    
      case 253:
    #line 3408 "Gmsh.y"
        {
        List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (11)].l));
        std::vector<int> domain;
        
        for (int i = 0; i < List_Nbr(temp); i++){
          int item = 0;
          List_Read(temp, i, &item);
          domain.push_back(item);
        }
        List_Delete((yyvsp[(7) - (11)].l));
        List_Delete(temp);
        
        List_T *temp2 = ListOfDouble2ListOfInt((yyvsp[(9) - (11)].l));
        std::vector<int> subdomain;
        for (int i = 0; i < List_Nbr(temp2); i++){
          int item = 0;
          List_Read(temp2, i, &item);
          subdomain.push_back(item);
        }
        List_Delete((yyvsp[(9) - (11)].l));
        List_Delete(temp2);
        
        std::string fileName = "";
        fileName = (yyvsp[(3) - (11)].c);
        
        #if defined(HAVE_KBIPACK)
        Homology* homology = new Homology(GModel::current(), domain, subdomain);
        homology->setFileName(fileName);
        homology->findGenerators();  
        delete homology;
        #else
        yymsg(0, "Gmsh needs to be configured with option Kbipack to use homology computation.");
        #endif
        ;}
        break;
    
      case 254:
    #line 3444 "Gmsh.y"
        {
        List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (11)].l));
        std::vector<int> domain;
        
        for (int i = 0; i < List_Nbr(temp); i++){
          int item = 0;
          List_Read(temp, i, &item);
          domain.push_back(item);
        }
        List_Delete((yyvsp[(7) - (11)].l));
        List_Delete(temp);
        
        List_T *temp2 = ListOfDouble2ListOfInt((yyvsp[(9) - (11)].l));
        std::vector<int> subdomain;
        for (int i = 0; i < List_Nbr(temp2); i++){
          int item = 0;
          List_Read(temp2, i, &item);
          subdomain.push_back(item);
        }
        List_Delete((yyvsp[(9) - (11)].l));
        List_Delete(temp2);
        
        std::string fileName = "";
        fileName = (yyvsp[(3) - (11)].c);
        
        #if defined(HAVE_KBIPACK)
        Homology* homology = new Homology(GModel::current(), domain, subdomain);
        homology->setFileName(fileName);
        homology->findDualGenerators();
        delete homology;
        #else
        yymsg(0, "Gmsh needs to be configured with option Kbipack to use homology computation.");
        #endif
        ;}
        break;
    
      case 255:
    #line 3479 "Gmsh.y"
        {
        List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (11)].l));
        std::vector<int> domain;
        
        for (int i = 0; i < List_Nbr(temp); i++){
          int item = 0;
          List_Read(temp, i, &item);
          domain.push_back(item);
        }
        List_Delete((yyvsp[(7) - (11)].l));
        List_Delete(temp);
        
        List_T *temp2 = ListOfDouble2ListOfInt((yyvsp[(9) - (11)].l));
        std::vector<int> subdomain;
        for (int i = 0; i < List_Nbr(temp2); i++){
          int item = 0;
          List_Read(temp2, i, &item);
          subdomain.push_back(item);
        }
        List_Delete((yyvsp[(9) - (11)].l));
        List_Delete(temp2);
        
        std::string fileName = "";
        fileName = (yyvsp[(3) - (11)].c);
        
        #if defined(HAVE_KBIPACK)
        Homology* homology = new Homology(GModel::current(), domain, subdomain);
        homology->setFileName(fileName);
        homology->findHomSequence();
        delete homology;
        #else
        yymsg(0, "Gmsh needs to be configured with option Kbipack to use homology computation.");
        #endif
        ;}
        break;
    
      case 256:
    #line 3518 "Gmsh.y"
        { (yyval.d) = (yyvsp[(1) - (1)].d);           ;}
        break;
    
      case 257:
    #line 3519 "Gmsh.y"
        { (yyval.d) = (yyvsp[(2) - (3)].d);           ;}
        break;
    
      case 258:
    #line 3520 "Gmsh.y"
        { (yyval.d) = -(yyvsp[(2) - (2)].d);          ;}
        break;
    
      case 259:
    #line 3521 "Gmsh.y"
        { (yyval.d) = (yyvsp[(2) - (2)].d);           ;}
        break;
    
      case 260:
    #line 3522 "Gmsh.y"
        { (yyval.d) = !(yyvsp[(2) - (2)].d);          ;}
        break;
    
      case 261:
    #line 3523 "Gmsh.y"
        { (yyval.d) = (yyvsp[(1) - (3)].d) - (yyvsp[(3) - (3)].d);      ;}
        break;
    
      case 262:
    #line 3524 "Gmsh.y"
        { (yyval.d) = (yyvsp[(1) - (3)].d) + (yyvsp[(3) - (3)].d);      ;}
        break;
    
      case 263:
    #line 3525 "Gmsh.y"
        { (yyval.d) = (yyvsp[(1) - (3)].d) * (yyvsp[(3) - (3)].d);      ;}
        break;
    
      case 264:
    #line 3527 "Gmsh.y"
        { 
          if(!(yyvsp[(3) - (3)].d))
    	yymsg(0, "Division by zero in '%g / %g'", (yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));
          else
    	(yyval.d) = (yyvsp[(1) - (3)].d) / (yyvsp[(3) - (3)].d);     
        ;}
        break;
    
      case 265:
    #line 3533 "Gmsh.y"
        { (yyval.d) = (int)(yyvsp[(1) - (3)].d) % (int)(yyvsp[(3) - (3)].d);  ;}
        break;
    
      case 266:
    #line 3534 "Gmsh.y"
        { (yyval.d) = pow((yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));  ;}
        break;
    
      case 267:
    #line 3535 "Gmsh.y"
        { (yyval.d) = (yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d);      ;}
        break;
    
      case 268:
    #line 3536 "Gmsh.y"
        { (yyval.d) = (yyvsp[(1) - (3)].d) > (yyvsp[(3) - (3)].d);      ;}
        break;
    
      case 269:
    #line 3537 "Gmsh.y"
        { (yyval.d) = (yyvsp[(1) - (3)].d) <= (yyvsp[(3) - (3)].d);     ;}
        break;
    
      case 270:
    #line 3538 "Gmsh.y"
        { (yyval.d) = (yyvsp[(1) - (3)].d) >= (yyvsp[(3) - (3)].d);     ;}
        break;
    
      case 271:
    #line 3539 "Gmsh.y"
        { (yyval.d) = (yyvsp[(1) - (3)].d) == (yyvsp[(3) - (3)].d);     ;}
        break;
    
      case 272:
    #line 3540 "Gmsh.y"
        { (yyval.d) = (yyvsp[(1) - (3)].d) != (yyvsp[(3) - (3)].d);     ;}
        break;
    
      case 273:
    #line 3541 "Gmsh.y"
        { (yyval.d) = (yyvsp[(1) - (3)].d) && (yyvsp[(3) - (3)].d);     ;}
        break;
    
      case 274:
    #line 3542 "Gmsh.y"
        { (yyval.d) = (yyvsp[(1) - (3)].d) || (yyvsp[(3) - (3)].d);     ;}
        break;
    
      case 275:
    #line 3543 "Gmsh.y"
        { (yyval.d) = (yyvsp[(1) - (5)].d) ? (yyvsp[(3) - (5)].d) : (yyvsp[(5) - (5)].d); ;}
        break;
    
      case 276:
    #line 3544 "Gmsh.y"
        { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
        break;
    
      case 277:
    #line 3545 "Gmsh.y"
        { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
        break;
    
      case 278:
    #line 3546 "Gmsh.y"
        { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
        break;
    
      case 279:
    #line 3547 "Gmsh.y"
        { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 280:
    #line 3548 "Gmsh.y"
        { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
        break;
    
      case 281:
    #line 3549 "Gmsh.y"
        { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 282:
    #line 3550 "Gmsh.y"
        { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
        break;
    
      case 283:
    #line 3551 "Gmsh.y"
        { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 284:
    #line 3552 "Gmsh.y"
        { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
        break;
    
      case 285:
    #line 3553 "Gmsh.y"
        { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 286:
    #line 3554 "Gmsh.y"
        { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
        break;
    
      case 287:
    #line 3555 "Gmsh.y"
        { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 288:
    #line 3556 "Gmsh.y"
        { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 289:
    #line 3557 "Gmsh.y"
        { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 290:
    #line 3558 "Gmsh.y"
        { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 291:
    #line 3559 "Gmsh.y"
        { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
        break;
    
      case 292:
    #line 3560 "Gmsh.y"
        { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 293:
    #line 3561 "Gmsh.y"
        { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
        break;
    
      case 294:
    #line 3562 "Gmsh.y"
        { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
        break;
    
      case 295:
    #line 3563 "Gmsh.y"
        { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
        break;
    
      case 296:
    #line 3564 "Gmsh.y"
        { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
        break;
    
      case 297:
    #line 3566 "Gmsh.y"
        { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
        break;
    
      case 298:
    #line 3567 "Gmsh.y"
        { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
        break;
    
      case 299:
    #line 3568 "Gmsh.y"
        { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
        break;
    
      case 300:
    #line 3569 "Gmsh.y"
        { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 301:
    #line 3570 "Gmsh.y"
        { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
        break;
    
      case 302:
    #line 3571 "Gmsh.y"
        { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 303:
    #line 3572 "Gmsh.y"
        { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
        break;
    
      case 304:
    #line 3573 "Gmsh.y"
        { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 305:
    #line 3574 "Gmsh.y"
        { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
        break;
    
      case 306:
    #line 3575 "Gmsh.y"
        { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 307:
    #line 3576 "Gmsh.y"
        { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
        break;
    
      case 308:
    #line 3577 "Gmsh.y"
        { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 309:
    #line 3578 "Gmsh.y"
        { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 310:
    #line 3579 "Gmsh.y"
        { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 311:
    #line 3580 "Gmsh.y"
        { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 312:
    #line 3581 "Gmsh.y"
        { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
        break;
    
      case 313:
    #line 3582 "Gmsh.y"
        { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 314:
    #line 3583 "Gmsh.y"
        { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
        break;
    
      case 315:
    #line 3584 "Gmsh.y"
        { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
        break;
    
      case 316:
    #line 3585 "Gmsh.y"
        { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
        break;
    
      case 317:
    #line 3586 "Gmsh.y"
        { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
        break;
    
      case 318:
    #line 3595 "Gmsh.y"
        { (yyval.d) = (yyvsp[(1) - (1)].d); ;}
        break;
    
      case 319:
    #line 3596 "Gmsh.y"
        { (yyval.d) = 3.141592653589793; ;}
        break;
    
      case 320:
    #line 3597 "Gmsh.y"
        { (yyval.d) = Msg::GetCommRank(); ;}
        break;
    
      case 321:
    #line 3598 "Gmsh.y"
        { (yyval.d) = Msg::GetCommSize(); ;}
        break;
    
      case 322:
    #line 3599 "Gmsh.y"
        { (yyval.d) = GetGmshMajorVersion(); ;}
        break;
    
      case 323:
    #line 3600 "Gmsh.y"
        { (yyval.d) = GetGmshMinorVersion(); ;}
        break;
    
      case 324:
    #line 3601 "Gmsh.y"
        { (yyval.d) = GetGmshPatchVersion(); ;}
        break;
    
      case 325:
    #line 3606 "Gmsh.y"
        {
          if(!gmsh_yysymbols.count((yyvsp[(1) - (1)].c))){
    	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (1)].c));
    	(yyval.d) = 0.;
          }
          else{
            if(gmsh_yysymbols[(yyvsp[(1) - (1)].c)].empty()){
              yymsg(0, "Uninitialized variable '%s'", (yyvsp[(1) - (1)].c));
              (yyval.d) = 0.;
            }
            else
              (yyval.d) = gmsh_yysymbols[(yyvsp[(1) - (1)].c)][0];
          }
          Free((yyvsp[(1) - (1)].c));
        ;}
        break;
    
      case 326:
    #line 3625 "Gmsh.y"
        {
          char tmpstring[1024];
          sprintf(tmpstring, "%s_%d", (yyvsp[(1) - (5)].c), (int)(yyvsp[(4) - (5)].d)) ;
          if(!gmsh_yysymbols.count(tmpstring)){
    	yymsg(0, "Unknown variable '%s'", tmpstring);
    	(yyval.d) = 0.;
          }
          else{
            if(gmsh_yysymbols[tmpstring].empty()){
              yymsg(0, "Uninitialized variable '%s'", tmpstring);
              (yyval.d) = 0.;
            }
            else
              (yyval.d) = gmsh_yysymbols[tmpstring][0];
          }
          Free((yyvsp[(1) - (5)].c));
        ;}
        break;
    
      case 327:
    #line 3643 "Gmsh.y"
        {
          int index = (int)(yyvsp[(3) - (4)].d);
          if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
    	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (4)].c));
    	(yyval.d) = 0.;
          }
          else if((int)gmsh_yysymbols[(yyvsp[(1) - (4)].c)].size() < index + 1){
    	yymsg(0, "Uninitialized variable '%s[%d]'", (yyvsp[(1) - (4)].c), index);
    	(yyval.d) = 0.;
          }
          else
    	(yyval.d) = gmsh_yysymbols[(yyvsp[(1) - (4)].c)][index];
          Free((yyvsp[(1) - (4)].c));
        ;}
        break;
    
      case 328:
    #line 3658 "Gmsh.y"
        {
          if(!gmsh_yysymbols.count((yyvsp[(2) - (4)].c))){
    	yymsg(0, "Unknown variable '%s'", (yyvsp[(2) - (4)].c));
    	(yyval.d) = 0.;
          }
          else
    	(yyval.d) = gmsh_yysymbols[(yyvsp[(2) - (4)].c)].size();
          Free((yyvsp[(2) - (4)].c));
        ;}
        break;
    
      case 329:
    #line 3668 "Gmsh.y"
        {
          if(!gmsh_yysymbols.count((yyvsp[(1) - (2)].c))){
    	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (2)].c));
    	(yyval.d) = 0.;
          }
          else{
            if(gmsh_yysymbols[(yyvsp[(1) - (2)].c)].empty()){
              yymsg(0, "Uninitialized variable '%s'", (yyvsp[(1) - (2)].c));
              (yyval.d) = 0.;
            }
            else
              (yyval.d) = (gmsh_yysymbols[(yyvsp[(1) - (2)].c)][0] += (yyvsp[(2) - (2)].i));
          }
          Free((yyvsp[(1) - (2)].c));
        ;}
        break;
    
      case 330:
    #line 3684 "Gmsh.y"
        {
          int index = (int)(yyvsp[(3) - (5)].d);
          if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
    	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (5)].c));
    	(yyval.d) = 0.;
          }
          else if((int)gmsh_yysymbols[(yyvsp[(1) - (5)].c)].size() < index + 1){
    	yymsg(0, "Uninitialized variable '%s[%d]'", (yyvsp[(1) - (5)].c), index);
    	(yyval.d) = 0.;
          }
          else
    	(yyval.d) = (gmsh_yysymbols[(yyvsp[(1) - (5)].c)][index] += (yyvsp[(5) - (5)].i));
          Free((yyvsp[(1) - (5)].c));
        ;}
        break;
    
      case 331:
    #line 3702 "Gmsh.y"
        {
          NumberOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), (yyval.d));
          Free((yyvsp[(1) - (3)].c)); Free((yyvsp[(3) - (3)].c));
        ;}
        break;
    
      case 332:
    #line 3707 "Gmsh.y"
        {
          NumberOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), (yyval.d));
          Free((yyvsp[(1) - (6)].c)); Free((yyvsp[(6) - (6)].c));
        ;}
        break;
    
      case 333:
    #line 3712 "Gmsh.y"
        {
          double d = 0.;
          if(NumberOption(GMSH_GET, (yyvsp[(1) - (4)].c), 0, (yyvsp[(3) - (4)].c), d)){
    	d += (yyvsp[(4) - (4)].i);
    	NumberOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (4)].c), 0, (yyvsp[(3) - (4)].c), d);
    	(yyval.d) = d;
          }
          Free((yyvsp[(1) - (4)].c)); Free((yyvsp[(3) - (4)].c));
        ;}
        break;
    
      case 334:
    #line 3722 "Gmsh.y"
        {
          double d = 0.;
          if(NumberOption(GMSH_GET, (yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c), d)){
    	d += (yyvsp[(7) - (7)].i);
    	NumberOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c), d);
    	(yyval.d) = d;
          }
          Free((yyvsp[(1) - (7)].c)); Free((yyvsp[(6) - (7)].c));
        ;}
        break;
    
      case 335:
    #line 3732 "Gmsh.y"
        { 
          (yyval.d) = Msg::GetValue((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
          Free((yyvsp[(3) - (6)].c));
        ;}
        break;
    
      case 336:
    #line 3740 "Gmsh.y"
        {
          memcpy((yyval.v), (yyvsp[(1) - (1)].v), 5*sizeof(double));
        ;}
        break;
    
      case 337:
    #line 3744 "Gmsh.y"
        {
          for(int i = 0; i < 5; i++) (yyval.v)[i] = -(yyvsp[(2) - (2)].v)[i];
        ;}
        break;
    
      case 338:
    #line 3748 "Gmsh.y"
        { 
          for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i];
        ;}
        break;
    
      case 339:
    #line 3752 "Gmsh.y"
        { 
          for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] - (yyvsp[(3) - (3)].v)[i];
        ;}
        break;
    
      case 340:
    #line 3756 "Gmsh.y"
        {
          for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] + (yyvsp[(3) - (3)].v)[i];
        ;}
        break;
    
      case 341:
    #line 3763 "Gmsh.y"
        { 
          (yyval.v)[0] = (yyvsp[(2) - (11)].d);  (yyval.v)[1] = (yyvsp[(4) - (11)].d);  (yyval.v)[2] = (yyvsp[(6) - (11)].d);  (yyval.v)[3] = (yyvsp[(8) - (11)].d); (yyval.v)[4] = (yyvsp[(10) - (11)].d);
        ;}
        break;
    
      case 342:
    #line 3767 "Gmsh.y"
        { 
          (yyval.v)[0] = (yyvsp[(2) - (9)].d);  (yyval.v)[1] = (yyvsp[(4) - (9)].d);  (yyval.v)[2] = (yyvsp[(6) - (9)].d);  (yyval.v)[3] = (yyvsp[(8) - (9)].d); (yyval.v)[4] = 1.0;
        ;}
        break;
    
      case 343:
    #line 3771 "Gmsh.y"
        {
          (yyval.v)[0] = (yyvsp[(2) - (7)].d);  (yyval.v)[1] = (yyvsp[(4) - (7)].d);  (yyval.v)[2] = (yyvsp[(6) - (7)].d);  (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0;
        ;}
        break;
    
      case 344:
    #line 3775 "Gmsh.y"
        {
          (yyval.v)[0] = (yyvsp[(2) - (7)].d);  (yyval.v)[1] = (yyvsp[(4) - (7)].d);  (yyval.v)[2] = (yyvsp[(6) - (7)].d);  (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0;
        ;}
        break;
    
      case 345:
    #line 3782 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(List_T*));
          List_Add((yyval.l), &((yyvsp[(1) - (1)].l)));
        ;}
        break;
    
      case 346:
    #line 3787 "Gmsh.y"
        {
          List_Add((yyval.l), &((yyvsp[(3) - (3)].l)));
        ;}
        break;
    
      case 347:
    #line 3794 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(double));
          List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
        ;}
        break;
    
      case 348:
    #line 3799 "Gmsh.y"
        {
          (yyval.l) = (yyvsp[(1) - (1)].l);
        ;}
        break;
    
      case 349:
    #line 3803 "Gmsh.y"
        {
          // creates an empty list
          (yyval.l) = List_Create(2, 1, sizeof(double));
        ;}
        break;
    
      case 350:
    #line 3808 "Gmsh.y"
        {
          (yyval.l) = (yyvsp[(2) - (3)].l);
        ;}
        break;
    
      case 351:
    #line 3812 "Gmsh.y"
        {
          (yyval.l) = (yyvsp[(3) - (4)].l);
          for(int i = 0; i < List_Nbr((yyval.l)); i++){
    	double *pd = (double*)List_Pointer((yyval.l), i);
    	(*pd) = - (*pd);
          }
        ;}
        break;
    
      case 352:
    #line 3820 "Gmsh.y"
        {
          (yyval.l) = (yyvsp[(4) - (5)].l);
          for(int i = 0; i < List_Nbr((yyval.l)); i++){
    	double *pd = (double*)List_Pointer((yyval.l), i);
    	(*pd) *= (yyvsp[(1) - (5)].d);
          }
        ;}
        break;
    
      case 353:
    #line 3831 "Gmsh.y"
        { 
          (yyval.l) = (yyvsp[(1) - (1)].l); 
        ;}
        break;
    
      case 354:
    #line 3835 "Gmsh.y"
        {
          if(!strcmp((yyvsp[(1) - (1)].c), "*") || !strcmp((yyvsp[(1) - (1)].c), "all"))
            (yyval.l) = 0;
          else{
            yyerror("Unknown special string for list replacement");
            (yyval.l) = List_Create(2, 1, sizeof(double));
          }
        ;}
        break;
    
      case 355:
    #line 3847 "Gmsh.y"
        {
          (yyval.l) = (yyvsp[(2) - (2)].l);
          for(int i = 0; i < List_Nbr((yyval.l)); i++){
    	double *pd = (double*)List_Pointer((yyval.l), i);
    	(*pd) = - (*pd);
          }
        ;}
        break;
    
      case 356:
    #line 3855 "Gmsh.y"
        {
          (yyval.l) = (yyvsp[(3) - (3)].l);
          for(int i = 0; i < List_Nbr((yyval.l)); i++){
    	double *pd = (double*)List_Pointer((yyval.l), i);
    	(*pd) *= (yyvsp[(1) - (3)].d);
          }
        ;}
        break;
    
      case 357:
    #line 3863 "Gmsh.y"
        { 
          (yyval.l) = List_Create(2, 1, sizeof(double)); 
          for(double d = (yyvsp[(1) - (3)].d); ((yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d)) ? (d <= (yyvsp[(3) - (3)].d)) : (d >= (yyvsp[(3) - (3)].d)); 
              ((yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d)) ? (d += 1.) : (d -= 1.)) 
    	List_Add((yyval.l), &d);
        ;}
        break;
    
      case 358:
    #line 3870 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(double)); 
          if(!(yyvsp[(5) - (5)].d) || ((yyvsp[(1) - (5)].d) < (yyvsp[(3) - (5)].d) && (yyvsp[(5) - (5)].d) < 0) || ((yyvsp[(1) - (5)].d) > (yyvsp[(3) - (5)].d) && (yyvsp[(5) - (5)].d) > 0)){
            yymsg(0, "Wrong increment in '%g:%g:%g'", (yyvsp[(1) - (5)].d), (yyvsp[(3) - (5)].d), (yyvsp[(5) - (5)].d));
    	List_Add((yyval.l), &((yyvsp[(1) - (5)].d)));
          }
          else
    	for(double d = (yyvsp[(1) - (5)].d); ((yyvsp[(5) - (5)].d) > 0) ? (d <= (yyvsp[(3) - (5)].d)) : (d >= (yyvsp[(3) - (5)].d)); d += (yyvsp[(5) - (5)].d))
    	  List_Add((yyval.l), &d);
       ;}
        break;
    
      case 359:
    #line 3881 "Gmsh.y"
        {
          // Returns the coordinates of a point and fills a list with it.
          // This allows to ensure e.g. that relative point positions are
          // always conserved
          Vertex *v = FindPoint((int)(yyvsp[(3) - (4)].d));
          (yyval.l) = List_Create(3, 1, sizeof(double));      
          if(!v) {
    	yymsg(0, "Unknown point '%d'", (int)(yyvsp[(3) - (4)].d));
    	double d = 0.0;
    	List_Add((yyval.l), &d);
    	List_Add((yyval.l), &d);
    	List_Add((yyval.l), &d);
          }
          else{
    	List_Add((yyval.l), &v->Pos.X);
    	List_Add((yyval.l), &v->Pos.Y);
    	List_Add((yyval.l), &v->Pos.Z);
          }
        ;}
        break;
    
      case 360:
    #line 3901 "Gmsh.y"
        {
          (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double));
          for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){
    	Shape *s = (Shape*) List_Pointer((yyvsp[(1) - (1)].l), i);
    	double d = s->Num;
    	List_Add((yyval.l), &d);
          }
          List_Delete((yyvsp[(1) - (1)].l));
        ;}
        break;
    
      case 361:
    #line 3911 "Gmsh.y"
        {
          (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double));
          for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){
    	Shape *s = (Shape*) List_Pointer((yyvsp[(1) - (1)].l), i);
    	double d = s->Num;
    	List_Add((yyval.l), &d);
          }
          List_Delete((yyvsp[(1) - (1)].l));
        ;}
        break;
    
      case 362:
    #line 3921 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(double));
          if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
    	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (3)].c));
          else
    	for(unsigned int i = 0; i < gmsh_yysymbols[(yyvsp[(1) - (3)].c)].size(); i++)
    	  List_Add((yyval.l), &gmsh_yysymbols[(yyvsp[(1) - (3)].c)][i]);
          Free((yyvsp[(1) - (3)].c));
        ;}
        break;
    
      case 363:
    #line 3931 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(double));
          if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
    	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (6)].c));
          else{
    	for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
    	  int index = (int)(*(double*)List_Pointer_Fast((yyvsp[(4) - (6)].l), i));
    	  if((int)gmsh_yysymbols[(yyvsp[(1) - (6)].c)].size() < index + 1)
    	    yymsg(0, "Uninitialized variable '%s[%d]'", (yyvsp[(1) - (6)].c), index);
    	  else
    	    List_Add((yyval.l), &gmsh_yysymbols[(yyvsp[(1) - (6)].c)][index]);
    	}
          }
          Free((yyvsp[(1) - (6)].c));
          List_Delete((yyvsp[(4) - (6)].l));
        ;}
        break;
    
      case 364:
    #line 3951 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(double));
          List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
        ;}
        break;
    
      case 365:
    #line 3956 "Gmsh.y"
        {
          (yyval.l) = (yyvsp[(1) - (1)].l);
        ;}
        break;
    
      case 366:
    #line 3960 "Gmsh.y"
        {
          List_Add((yyval.l), &((yyvsp[(3) - (3)].d)));
        ;}
        break;
    
      case 367:
    #line 3964 "Gmsh.y"
        {
          for(int i = 0; i < List_Nbr((yyvsp[(3) - (3)].l)); i++){
    	double d;
    	List_Read((yyvsp[(3) - (3)].l), i, &d);
    	List_Add((yyval.l), &d);
          }
          List_Delete((yyvsp[(3) - (3)].l));
        ;}
        break;
    
      case 368:
    #line 3976 "Gmsh.y"
        {
          (yyval.u) = CTX::instance()->packColor((int)(yyvsp[(2) - (9)].d), (int)(yyvsp[(4) - (9)].d), (int)(yyvsp[(6) - (9)].d), (int)(yyvsp[(8) - (9)].d));
        ;}
        break;
    
      case 369:
    #line 3980 "Gmsh.y"
        {
          (yyval.u) = CTX::instance()->packColor((int)(yyvsp[(2) - (7)].d), (int)(yyvsp[(4) - (7)].d), (int)(yyvsp[(6) - (7)].d), 255);
        ;}
        break;
    
      case 370:
    #line 3992 "Gmsh.y"
        {
          int flag;
          (yyval.u) = GetColorForString(ColorString, -1, (yyvsp[(1) - (1)].c), &flag);
          if(flag) yymsg(0, "Unknown color '%s'", (yyvsp[(1) - (1)].c));
          Free((yyvsp[(1) - (1)].c));
        ;}
        break;
    
      case 371:
    #line 3999 "Gmsh.y"
        {
          unsigned int val = 0;
          ColorOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(5) - (5)].c), val);
          (yyval.u) = val;
          Free((yyvsp[(1) - (5)].c)); Free((yyvsp[(5) - (5)].c));
        ;}
        break;
    
      case 372:
    #line 4009 "Gmsh.y"
        {
          (yyval.l) = (yyvsp[(2) - (3)].l);
        ;}
        break;
    
      case 373:
    #line 4013 "Gmsh.y"
        {
          (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
          GmshColorTable *ct = GetColorTable((int)(yyvsp[(3) - (6)].d));
          if(!ct)
    	yymsg(0, "View[%d] does not exist", (int)(yyvsp[(3) - (6)].d));
          else{
    	for(int i = 0; i < ct->size; i++) 
    	  List_Add((yyval.l), &ct->table[i]);
          }
          Free((yyvsp[(1) - (6)].c));
        ;}
        break;
    
      case 374:
    #line 4028 "Gmsh.y"
        {
          (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
          List_Add((yyval.l), &((yyvsp[(1) - (1)].u)));
        ;}
        break;
    
      case 375:
    #line 4033 "Gmsh.y"
        {
          List_Add((yyval.l), &((yyvsp[(3) - (3)].u)));
        ;}
        break;
    
      case 376:
    #line 4040 "Gmsh.y"
        {
          (yyval.c) = (yyvsp[(1) - (1)].c);
        ;}
        break;
    
      case 377:
    #line 4044 "Gmsh.y"
        {
          if(!gmsh_yystringsymbols.count((yyvsp[(1) - (1)].c))){
    	yymsg(0, "Unknown string variable '%s'", (yyvsp[(1) - (1)].c));
    	(yyval.c) = (yyvsp[(1) - (1)].c);
          }
          else{
    	std::string val = gmsh_yystringsymbols[(yyvsp[(1) - (1)].c)];
    	(yyval.c) = (char *)Malloc((val.size() + 1) * sizeof(char));
    	strcpy((yyval.c), val.c_str());
    	Free((yyvsp[(1) - (1)].c));
          }
        ;}
        break;
    
      case 378:
    #line 4057 "Gmsh.y"
        { 
          std::string out;
          StringOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), out);
          (yyval.c) = (char*)Malloc((out.size() + 1) * sizeof(char));
          strcpy((yyval.c), out.c_str());
          Free((yyvsp[(1) - (3)].c)); Free((yyvsp[(3) - (3)].c));
        ;}
        break;
    
      case 379:
    #line 4065 "Gmsh.y"
        { 
          std::string out;
          StringOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), out);
          (yyval.c) = (char*)Malloc((out.size() + 1) * sizeof(char));
          strcpy((yyval.c), out.c_str());
          Free((yyvsp[(1) - (6)].c)); Free((yyvsp[(6) - (6)].c));
        ;}
        break;
    
      case 380:
    #line 4076 "Gmsh.y"
        {
          (yyval.c) = (yyvsp[(1) - (1)].c);
        ;}
        break;
    
      case 381:
    #line 4080 "Gmsh.y"
        {
          (yyval.c) = (char *)Malloc(32 * sizeof(char));
          time_t now;
          time(&now);
          strcpy((yyval.c), ctime(&now));
          (yyval.c)[strlen((yyval.c)) - 1] = '\0';
        ;}
        break;
    
      case 382:
    #line 4088 "Gmsh.y"
        { 
          const char *env = GetEnvironmentVar((yyvsp[(3) - (4)].c));
          if(!env) env = "";
          (yyval.c) = (char *)Malloc((sizeof(env) + 1) * sizeof(char));
          strcpy((yyval.c), env);
          Free((yyvsp[(3) - (4)].c));
        ;}
        break;
    
      case 383:
    #line 4096 "Gmsh.y"
        { 
          std::string s = Msg::GetString((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
          (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char));
          strcpy((yyval.c), s.c_str());
          Free((yyvsp[(3) - (6)].c));
          Free((yyvsp[(5) - (6)].c));
        ;}
        break;
    
      case 384:
    #line 4104 "Gmsh.y"
        {
          (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (6)].c)) + strlen((yyvsp[(5) - (6)].c)) + 1) * sizeof(char));
          strcpy((yyval.c), (yyvsp[(3) - (6)].c));
          strcat((yyval.c), (yyvsp[(5) - (6)].c));
          Free((yyvsp[(3) - (6)].c));
          Free((yyvsp[(5) - (6)].c));
        ;}
        break;
    
      case 385:
    #line 4112 "Gmsh.y"
        {
          (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
          int i;
          for(i = strlen((yyvsp[(3) - (4)].c)) - 1; i >= 0; i--){
    	if((yyvsp[(3) - (4)].c)[i] == '.'){
    	  strncpy((yyval.c), (yyvsp[(3) - (4)].c), i);
    	  (yyval.c)[i]='\0';
    	  break;
    	}
          }
          if(i <= 0) strcpy((yyval.c), (yyvsp[(3) - (4)].c));
          Free((yyvsp[(3) - (4)].c));
        ;}
        break;
    
      case 386:
    #line 4126 "Gmsh.y"
        {
          (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
          int i;
          for(i = strlen((yyvsp[(3) - (4)].c)) - 1; i >= 0; i--){
    	if((yyvsp[(3) - (4)].c)[i] == '/' || (yyvsp[(3) - (4)].c)[i] == '\\')
    	  break;
          }
          if(i <= 0)
    	strcpy((yyval.c), (yyvsp[(3) - (4)].c));
          else
    	strcpy((yyval.c), &(yyvsp[(3) - (4)].c)[i+1]);
          Free((yyvsp[(3) - (4)].c));
        ;}
        break;
    
      case 387:
    #line 4140 "Gmsh.y"
        {
          (yyval.c) = (yyvsp[(3) - (4)].c);
        ;}
        break;
    
      case 388:
    #line 4144 "Gmsh.y"
        {
          char tmpstring[1024];
          int i = PrintListOfDouble((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].l), tmpstring);
          if(i < 0){
    	yymsg(0, "Too few arguments in Sprintf");
    	(yyval.c) = (yyvsp[(3) - (6)].c);
          }
          else if(i > 0){
    	yymsg(0, "%d extra argument%s in Sprintf", i, (i > 1) ? "s" : "");
    	(yyval.c) = (yyvsp[(3) - (6)].c);
          }
          else{
    	(yyval.c) = (char*)Malloc((strlen(tmpstring) + 1) * sizeof(char));
    	strcpy((yyval.c), tmpstring);
    	Free((yyvsp[(3) - (6)].c));
          }
          List_Delete((yyvsp[(5) - (6)].l));
        ;}
        break;
    
    
    /* Line 1267 of yacc.c.  */
    #line 8854 "Gmsh.tab.cpp"
          default: break;
        }
      YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
    
      YYPOPSTACK (yylen);
      yylen = 0;
      YY_STACK_PRINT (yyss, yyssp);
    
      *++yyvsp = yyval;
    
    
      /* Now `shift' the result of the reduction.  Determine what state
         that goes to, based on the state we popped back to and the rule
         number reduced by.  */
    
      yyn = yyr1[yyn];
    
      yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
      if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
        yystate = yytable[yystate];
      else
        yystate = yydefgoto[yyn - YYNTOKENS];
    
      goto yynewstate;
    
    
    /*------------------------------------.
    | yyerrlab -- here on detecting error |
    `------------------------------------*/
    yyerrlab:
      /* If not already recovering from an error, report this error.  */
      if (!yyerrstatus)
        {
          ++yynerrs;
    #if ! YYERROR_VERBOSE
          yyerror (YY_("syntax error"));
    #else
          {
    	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
    	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
    	  {
    	    YYSIZE_T yyalloc = 2 * yysize;
    	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
    	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
    	    if (yymsg != yymsgbuf)
    	      YYSTACK_FREE (yymsg);
    	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
    	    if (yymsg)
    	      yymsg_alloc = yyalloc;
    	    else
    	      {
    		yymsg = yymsgbuf;
    		yymsg_alloc = sizeof yymsgbuf;
    	      }
    	  }
    
    	if (0 < yysize && yysize <= yymsg_alloc)
    	  {
    	    (void) yysyntax_error (yymsg, yystate, yychar);
    	    yyerror (yymsg);
    	  }
    	else
    	  {
    	    yyerror (YY_("syntax error"));
    	    if (yysize != 0)
    	      goto yyexhaustedlab;
    	  }
          }
    #endif
        }
    
    
    
      if (yyerrstatus == 3)
        {
          /* If just tried and failed to reuse look-ahead token after an
    	 error, discard it.  */
    
          if (yychar <= YYEOF)
    	{
    	  /* Return failure if at end of input.  */
    	  if (yychar == YYEOF)
    	    YYABORT;
    	}
          else
    	{
    	  yydestruct ("Error: discarding",
    		      yytoken, &yylval);
    	  yychar = YYEMPTY;
    	}
        }
    
      /* Else will try to reuse look-ahead token after shifting the error
         token.  */
      goto yyerrlab1;
    
    
    /*---------------------------------------------------.
    | yyerrorlab -- error raised explicitly by YYERROR.  |
    `---------------------------------------------------*/
    yyerrorlab:
    
      /* Pacify compilers like GCC when the user code never invokes
         YYERROR and the label yyerrorlab therefore never appears in user
         code.  */
      if (/*CONSTCOND*/ 0)
         goto yyerrorlab;
    
      /* Do not reclaim the symbols of the rule which action triggered
         this YYERROR.  */
      YYPOPSTACK (yylen);
      yylen = 0;
      YY_STACK_PRINT (yyss, yyssp);
      yystate = *yyssp;
      goto yyerrlab1;
    
    
    /*-------------------------------------------------------------.
    | yyerrlab1 -- common code for both syntax error and YYERROR.  |
    `-------------------------------------------------------------*/
    yyerrlab1:
      yyerrstatus = 3;	/* Each real token shifted decrements this.  */
    
      for (;;)
        {
          yyn = yypact[yystate];
          if (yyn != YYPACT_NINF)
    	{
    	  yyn += YYTERROR;
    	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
    	    {
    	      yyn = yytable[yyn];
    	      if (0 < yyn)
    		break;
    	    }
    	}
    
          /* Pop the current state because it cannot handle the error token.  */
          if (yyssp == yyss)
    	YYABORT;
    
    
          yydestruct ("Error: popping",
    		  yystos[yystate], yyvsp);
          YYPOPSTACK (1);
          yystate = *yyssp;
          YY_STACK_PRINT (yyss, yyssp);
        }
    
      if (yyn == YYFINAL)
        YYACCEPT;
    
      *++yyvsp = yylval;
    
    
      /* Shift the error token.  */
      YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
    
      yystate = yyn;
      goto yynewstate;
    
    
    /*-------------------------------------.
    | yyacceptlab -- YYACCEPT comes here.  |
    `-------------------------------------*/
    yyacceptlab:
      yyresult = 0;
      goto yyreturn;
    
    /*-----------------------------------.
    | yyabortlab -- YYABORT comes here.  |
    `-----------------------------------*/
    yyabortlab:
      yyresult = 1;
      goto yyreturn;
    
    #ifndef yyoverflow
    /*-------------------------------------------------.
    | yyexhaustedlab -- memory exhaustion comes here.  |
    `-------------------------------------------------*/
    yyexhaustedlab:
      yyerror (YY_("memory exhausted"));
      yyresult = 2;
      /* Fall through.  */
    #endif
    
    yyreturn:
      if (yychar != YYEOF && yychar != YYEMPTY)
         yydestruct ("Cleanup: discarding lookahead",
    		 yytoken, &yylval);
      /* Do not reclaim the symbols of the rule which action triggered
         this YYABORT or YYACCEPT.  */
      YYPOPSTACK (yylen);
      YY_STACK_PRINT (yyss, yyssp);
      while (yyssp != yyss)
        {
          yydestruct ("Cleanup: popping",
    		  yystos[*yyssp], yyvsp);
          YYPOPSTACK (1);
        }
    #ifndef yyoverflow
      if (yyss != yyssa)
        YYSTACK_FREE (yyss);
    #endif
    #if YYERROR_VERBOSE
      if (yymsg != yymsgbuf)
        YYSTACK_FREE (yymsg);
    #endif
      /* Make sure YYID is used.  */
      return YYID (yyresult);
    }
    
    
    #line 4164 "Gmsh.y"
    
    
    int PrintListOfDouble(char *format, List_T *list, char *buffer)
    {
      int j, k;
      char tmp1[256], tmp2[256];
    
      j = 0;
      buffer[j] = '\0';
    
      while(j < (int)strlen(format) && format[j] != '%') j++;
      strncpy(buffer, format, j); 
      buffer[j]='\0'; 
      for(int i = 0; i < List_Nbr(list); i++){
        k = j;
        j++;
        if(j < (int)strlen(format)){
          if(format[j] == '%'){
    	strcat(buffer, "%");
    	j++;
          }
          while(j < (int)strlen(format) && format[j] != '%') j++;
          if(k != j){
    	strncpy(tmp1, &(format[k]), j-k);
    	tmp1[j-k] = '\0';
    	sprintf(tmp2, tmp1, *(double*)List_Pointer(list, i)); 
    	strcat(buffer, tmp2);
          }
        }
        else
          return List_Nbr(list)-i;
      }
      if(j != (int)strlen(format))
        return -1;
      return 0;
    }
    
    fullMatrix<double> ListOfListOfDouble2Matrix(List_T *list)
    {
      int M = List_Nbr(list);
      int N = 0;
      for(int i = 0; i < M; i++){
        List_T *line = *(List_T**)List_Pointer_Fast(list, i);
        N = std::max(N, List_Nbr(line));
      }
      fullMatrix<double> mat(M, N);
      for(int i = 0; i < M; i++){
        List_T *line = *(List_T**)List_Pointer_Fast(list, i);
        for(int j = 0; j < List_Nbr(line); j++){
          double val;
          List_Read(line, j, &val);
          mat(i, j) = val;
        }
      }
      for(int i = 0; i < List_Nbr(list); i++)
        List_Delete(*(List_T**)List_Pointer(list, i));
      List_Delete(list);
      return mat;
    }
    
    void yyerror(const char *s)
    {
      Msg::Error("'%s', line %d : %s (%s)", gmsh_yyname.c_str(), gmsh_yylineno - 1,
                 s, gmsh_yytext);
      gmsh_yyerrorstate++;
    }
    
    void yymsg(int level, const char *fmt, ...)
    {
      va_list args;
      char tmp[1024];
    
      va_start(args, fmt);
      vsprintf(tmp, fmt, args);
      va_end(args);
    
      if(level == 0){
        Msg::Error("'%s', line %d : %s", gmsh_yyname.c_str(), gmsh_yylineno - 1, tmp);
        gmsh_yyerrorstate++;
      }
      else
        Msg::Warning("'%s', line %d : %s", gmsh_yyname.c_str(), gmsh_yylineno - 1, tmp);
    }