You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
6553 lines
246 KiB
6553 lines
246 KiB
2 years ago
|
|
||
|
#if defined (__digital__) && defined (__unix__) || defined(__IBMCPP__)
|
||
|
#define HAVE_ALLOCA_H 1
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#ifdef __GNUC__
|
||
|
#undef alloca
|
||
|
#define alloca __builtin_alloca
|
||
|
#else /* not __GNUC__ */
|
||
|
#if HAVE_ALLOCA_H
|
||
|
#include <alloca.h>
|
||
|
#else /* not HAVE_ALLOCA_H */
|
||
|
#ifdef _AIX
|
||
|
#pragma alloca
|
||
|
#else /* not _AIX */
|
||
|
#ifndef alloca
|
||
|
char *alloca ();
|
||
|
#endif
|
||
|
#include <malloc.h>
|
||
|
#endif /* not _AIX */
|
||
|
#endif /* not HAVE_ALLOCA_H */
|
||
|
#endif /* not __GNUC__ */
|
||
|
|
||
|
/*=========================================================================
|
||
|
|
||
|
Program: Visualization Toolkit
|
||
|
Module: $RCSfile: vtkVRMLImporter.cxx,v $
|
||
|
|
||
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
||
|
All rights reserved.
|
||
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
||
|
|
||
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
||
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||
|
PURPOSE. See the above copyright notice for more information.
|
||
|
|
||
|
=========================================================================*/
|
||
|
/* ======================================================================
|
||
|
|
||
|
Importer based on BNF Yacc and Lex parser definition from:
|
||
|
|
||
|
**************************************************
|
||
|
* VRML 2.0 Parser
|
||
|
* Copyright (C) 1996 Silicon Graphics, Inc.
|
||
|
*
|
||
|
* Author(s) : Gavin Bell
|
||
|
* Daniel Woods (first port)
|
||
|
**************************************************
|
||
|
|
||
|
Ported to VTK By: Thomas D. Citriniti
|
||
|
Rensselaer Polytechnic Institute
|
||
|
citrit@rpi.edu
|
||
|
|
||
|
=======================================================================*/
|
||
|
#include "vtkVRMLImporter.h"
|
||
|
|
||
|
#include "vtkActor.h"
|
||
|
#include "vtkByteSwap.h"
|
||
|
#include "vtkCamera.h"
|
||
|
#include "vtkCellArray.h"
|
||
|
#include "vtkConeSource.h"
|
||
|
#include "vtkCubeSource.h"
|
||
|
#include "vtkCylinderSource.h"
|
||
|
#include "vtkFloatArray.h"
|
||
|
#include "vtkIdTypeArray.h"
|
||
|
#include "vtkLight.h"
|
||
|
#include "vtkLookupTable.h"
|
||
|
#include "vtkObjectFactory.h"
|
||
|
#include "vtkPointData.h"
|
||
|
#include "vtkPoints.h"
|
||
|
#include "vtkPolyData.h"
|
||
|
#include "vtkPolyDataMapper.h"
|
||
|
#include "vtkPolyDataNormals.h"
|
||
|
#include "vtkProperty.h"
|
||
|
#include "vtkRenderer.h"
|
||
|
#include "vtkSphereSource.h"
|
||
|
#include "vtkStripper.h"
|
||
|
#include "vtkSystemIncludes.h"
|
||
|
#include "vtkTransform.h"
|
||
|
#include "vtkVRML.h"
|
||
|
|
||
|
#ifdef _MSC_VER
|
||
|
#pragma warning( disable : 4005 )
|
||
|
#endif
|
||
|
|
||
|
class vtkVRMLImporterInternal {
|
||
|
public:
|
||
|
vtkVRMLImporterInternal() : Heap(1) {}
|
||
|
//BTX
|
||
|
#ifdef _MSC_VER
|
||
|
#pragma warning( disable : 4251 )
|
||
|
#endif
|
||
|
|
||
|
vtkVRMLVectorType<vtkObject*> Heap;
|
||
|
|
||
|
#ifdef _MSC_VER
|
||
|
#pragma warning( default : 4251 )
|
||
|
#endif
|
||
|
|
||
|
//ETX
|
||
|
};
|
||
|
|
||
|
// Heap to manage memory leaks
|
||
|
vtkHeap *vtkVRMLAllocator::Heap=NULL;
|
||
|
|
||
|
void vtkVRMLAllocator::Initialize()
|
||
|
{
|
||
|
if ( Heap == NULL )
|
||
|
{
|
||
|
Heap = vtkHeap::New();
|
||
|
}
|
||
|
}
|
||
|
void* vtkVRMLAllocator::AllocateMemory(size_t n)
|
||
|
{
|
||
|
return Heap->AllocateMemory(n);
|
||
|
}
|
||
|
|
||
|
void vtkVRMLAllocator::CleanUp()
|
||
|
{
|
||
|
if ( Heap )
|
||
|
{
|
||
|
Heap->Delete();
|
||
|
Heap = NULL;
|
||
|
}
|
||
|
}
|
||
|
char* vtkVRMLAllocator::StrDup(const char *str)
|
||
|
{
|
||
|
return Heap->StringDup(str);
|
||
|
}
|
||
|
|
||
|
|
||
|
// Provide isatty prototype for Cygwin.
|
||
|
#ifdef __CYGWIN__
|
||
|
#include <unistd.h>
|
||
|
#endif
|
||
|
|
||
|
static int memyyInput_i = 0;
|
||
|
static int memyyInput_j = 0;
|
||
|
|
||
|
// Used during the parsing
|
||
|
static int creatingDEF = 0;
|
||
|
static char *curDEFName;
|
||
|
|
||
|
// Used by the lex input to get characters. Needed to read in memory structure
|
||
|
static void memyyInput(char *buf, int &result, int max_size);
|
||
|
static void defyyInput(char *buf, int &result, int max_size);
|
||
|
|
||
|
|
||
|
/**************************************************
|
||
|
* VRML 2.0 Parser
|
||
|
* Copyright (C) 1996 Silicon Graphics, Inc.
|
||
|
*
|
||
|
* Author(s) : Gavin Bell
|
||
|
* Daniel Woods (first port)
|
||
|
**************************************************
|
||
|
*/
|
||
|
|
||
|
//
|
||
|
// The VrmlNodeType class is responsible for storing information about node
|
||
|
// or prototype types.
|
||
|
//
|
||
|
|
||
|
#ifndef _VRML_NODE_TYPE_
|
||
|
#define _VRML_NODE_TYPE_
|
||
|
|
||
|
#ifdef USE_STD_NAMESPACE
|
||
|
using namespace std;
|
||
|
#endif
|
||
|
|
||
|
// used to hold the VRML DEF names and assoc vtkObjects
|
||
|
class vtkVRMLUseStruct {
|
||
|
public:
|
||
|
vtkVRMLUseStruct( char *n, vtkObject *o) { defName = n; defObject = o; }
|
||
|
char *defName;
|
||
|
vtkObject *defObject;
|
||
|
|
||
|
void* operator new(size_t n)
|
||
|
{
|
||
|
return vtkVRMLAllocator::AllocateMemory(n);
|
||
|
}
|
||
|
|
||
|
void operator delete(void *vtkNotUsed(ptr)) {}
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
class VrmlNodeType {
|
||
|
public:
|
||
|
// Constructor. Takes name of new type (e.g. "Transform" or "Box")
|
||
|
// Copies the string given as name.
|
||
|
VrmlNodeType(const char *nm);
|
||
|
|
||
|
// Destructor exists mainly to deallocate storage for name
|
||
|
~VrmlNodeType();
|
||
|
|
||
|
// Namespace management functions. PROTO definitions add node types
|
||
|
// to the namespace. PROTO implementations are a separate node
|
||
|
// namespace, and require that any nested PROTOs NOT be available
|
||
|
// outside the PROTO implementation.
|
||
|
// addToNameSpace will print an error to stderr if the given type
|
||
|
// is already defined.
|
||
|
static void addToNameSpace(VrmlNodeType *);
|
||
|
static void pushNameSpace();
|
||
|
static void popNameSpace();
|
||
|
|
||
|
// Find a node type, given its name. Returns NULL if type is not defined.
|
||
|
static const VrmlNodeType *find(const char *nm);
|
||
|
|
||
|
// Routines for adding/getting eventIns/Outs/fields
|
||
|
void addEventIn(const char *name, int type);
|
||
|
void addEventOut(const char *name, int type);
|
||
|
void addField(const char *name, int type);
|
||
|
void addExposedField(const char *name, int type);
|
||
|
|
||
|
int hasEventIn(const char *name) const;
|
||
|
int hasEventOut(const char *name) const;
|
||
|
int hasField(const char *name) const;
|
||
|
int hasExposedField(const char *name) const;
|
||
|
|
||
|
const char *getName() const { return name; }
|
||
|
|
||
|
void* operator new(size_t n)
|
||
|
{
|
||
|
return vtkVRMLAllocator::AllocateMemory(n);
|
||
|
}
|
||
|
|
||
|
void operator delete(void *vtkNotUsed(ptr)) {}
|
||
|
|
||
|
struct NameTypeRec {
|
||
|
char *name;
|
||
|
int type;
|
||
|
|
||
|
void* operator new(size_t n)
|
||
|
{
|
||
|
return vtkVRMLAllocator::AllocateMemory(n);
|
||
|
}
|
||
|
|
||
|
void operator delete(void *vtkNotUsed(ptr)) {}
|
||
|
|
||
|
};
|
||
|
|
||
|
// This is used to keep track of which field in which type of node is being
|
||
|
// parsed. Field are nested (nodes are contained inside MFNode/SFNode fields)
|
||
|
// so a stack of these is needed:
|
||
|
struct FieldRec
|
||
|
{
|
||
|
const VrmlNodeType *nodeType;
|
||
|
const char *fieldName;
|
||
|
};
|
||
|
|
||
|
// Node types are stored in this data structure:
|
||
|
static vtkVRMLVectorType<VrmlNodeType*>* typeList;
|
||
|
static vtkVRMLVectorType<vtkVRMLUseStruct *>* useList;
|
||
|
static vtkVRMLVectorType<FieldRec*>* currentField;
|
||
|
|
||
|
private:
|
||
|
void add(vtkVRMLVectorType<NameTypeRec*> &,const char *,int);
|
||
|
int has(const vtkVRMLVectorType<NameTypeRec*> &,const char *) const;
|
||
|
|
||
|
char *name;
|
||
|
|
||
|
vtkVRMLVectorType<NameTypeRec*> eventIns;
|
||
|
vtkVRMLVectorType<NameTypeRec*> eventOuts;
|
||
|
vtkVRMLVectorType<NameTypeRec*> fields;
|
||
|
};
|
||
|
|
||
|
#endif
|
||
|
//
|
||
|
// The VrmlNodeType class is responsible for storing information about node
|
||
|
// or prototype types.
|
||
|
//
|
||
|
|
||
|
#include <assert.h>
|
||
|
|
||
|
//
|
||
|
// Static list of node types.
|
||
|
//
|
||
|
vtkVRMLVectorType<VrmlNodeType*>* VrmlNodeType::typeList;
|
||
|
vtkVRMLVectorType<vtkVRMLUseStruct *>* VrmlNodeType::useList;
|
||
|
vtkVRMLVectorType<VrmlNodeType::FieldRec*>* VrmlNodeType::currentField;
|
||
|
|
||
|
VrmlNodeType::VrmlNodeType(const char *nm)
|
||
|
{
|
||
|
assert(nm != NULL);
|
||
|
name = static_cast<char*>(
|
||
|
vtkVRMLAllocator::AllocateMemory((strlen(nm)+1)*sizeof(char)));
|
||
|
strcpy(name, nm);
|
||
|
}
|
||
|
|
||
|
VrmlNodeType::~VrmlNodeType()
|
||
|
{
|
||
|
// Free strings duplicated when fields/eventIns/eventOuts added:
|
||
|
|
||
|
int i;
|
||
|
for (i = 0;i < eventIns.Count(); i++)
|
||
|
{
|
||
|
NameTypeRec *r = eventIns[i];
|
||
|
// free(r->name);
|
||
|
delete r;
|
||
|
}
|
||
|
for (i = 0;i < eventOuts.Count(); i++)
|
||
|
{
|
||
|
NameTypeRec *r = eventOuts[i];
|
||
|
// free(r->name);
|
||
|
delete r;
|
||
|
}
|
||
|
for (i = 0;i < fields.Count(); i++)
|
||
|
{
|
||
|
NameTypeRec *r = fields[i];
|
||
|
// free(r->name);
|
||
|
delete r;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void
|
||
|
VrmlNodeType::addToNameSpace(VrmlNodeType *_type)
|
||
|
{
|
||
|
if (find(_type->getName()) != NULL)
|
||
|
{
|
||
|
cerr << "PROTO " << _type->getName() << " already defined\n";
|
||
|
return;
|
||
|
}
|
||
|
*typeList += _type;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// One list is used to store all the node types. Nested namespaces are
|
||
|
// separated by NULL elements.
|
||
|
// This isn't terribly efficient, but it is nice and simple.
|
||
|
//
|
||
|
void
|
||
|
VrmlNodeType::pushNameSpace()
|
||
|
{
|
||
|
*typeList += (VrmlNodeType *) NULL;
|
||
|
}
|
||
|
|
||
|
void
|
||
|
VrmlNodeType::popNameSpace()
|
||
|
{
|
||
|
// Remove everything up to and including the next NULL marker:
|
||
|
for (int i = 0;i < typeList->Count(); i++)
|
||
|
{
|
||
|
VrmlNodeType *nodeType = typeList->Pop();
|
||
|
|
||
|
if (nodeType == NULL)
|
||
|
{
|
||
|
break;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// NOTE: Instead of just deleting the VrmlNodeTypes, you will
|
||
|
// probably want to reference count or garbage collect them, since
|
||
|
// any nodes created as part of the PROTO implementation will
|
||
|
// probably point back to their VrmlNodeType structure.
|
||
|
delete nodeType;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const VrmlNodeType *
|
||
|
VrmlNodeType::find(const char *_name)
|
||
|
{
|
||
|
// Look through the type stack:
|
||
|
for (int i = 0;i < typeList->Count(); i++)
|
||
|
{
|
||
|
const VrmlNodeType *nt = (*typeList)[i];
|
||
|
if (nt != NULL && strcmp(nt->getName(),_name) == 0)
|
||
|
{
|
||
|
return nt;
|
||
|
}
|
||
|
}
|
||
|
return NULL;
|
||
|
}
|
||
|
|
||
|
void
|
||
|
VrmlNodeType::addEventIn(const char *nodeName, int type)
|
||
|
{
|
||
|
add(eventIns, nodeName, type);
|
||
|
};
|
||
|
void
|
||
|
VrmlNodeType::addEventOut(const char *nodeName, int type)
|
||
|
{
|
||
|
add(eventOuts, nodeName, type);
|
||
|
};
|
||
|
void
|
||
|
VrmlNodeType::addField(const char *nodeName, int type)
|
||
|
{
|
||
|
add(fields, nodeName, type);
|
||
|
};
|
||
|
void
|
||
|
VrmlNodeType::addExposedField(const char *nodeName, int type)
|
||
|
{
|
||
|
char tmp[1000];
|
||
|
add(fields, nodeName, type);
|
||
|
sprintf(tmp, "set_%s", nodeName);
|
||
|
add(eventIns, tmp, type);
|
||
|
sprintf(tmp, "%s_changed", nodeName);
|
||
|
add(eventOuts, tmp, type);
|
||
|
};
|
||
|
|
||
|
void
|
||
|
VrmlNodeType::add(vtkVRMLVectorType<NameTypeRec*> &recs, const char *nodeName, int type)
|
||
|
{
|
||
|
NameTypeRec *r = new NameTypeRec;
|
||
|
r->name = vtkVRMLAllocator::StrDup(nodeName); //strdup(nodeName);
|
||
|
r->type = type;
|
||
|
recs += r;
|
||
|
}
|
||
|
|
||
|
int
|
||
|
VrmlNodeType::hasEventIn(const char *nodeName) const
|
||
|
{
|
||
|
return has(eventIns, nodeName);
|
||
|
}
|
||
|
int
|
||
|
VrmlNodeType::hasEventOut(const char *nodeName) const
|
||
|
{
|
||
|
return has(eventOuts, nodeName);
|
||
|
}
|
||
|
int
|
||
|
VrmlNodeType::hasField(const char *nodeName) const
|
||
|
{
|
||
|
return has(fields, nodeName);
|
||
|
}
|
||
|
int
|
||
|
VrmlNodeType::hasExposedField(const char *nodeName) const
|
||
|
{
|
||
|
// Must have field "name", eventIn "set_name", and eventOut
|
||
|
// "name_changed", all with same type:
|
||
|
char tmp[1000];
|
||
|
int type;
|
||
|
if ( (type = has(fields, nodeName)) == 0) return 0;
|
||
|
|
||
|
sprintf(tmp, "set_%s\n", nodeName);
|
||
|
if (type != has(eventIns, nodeName)) return 0;
|
||
|
|
||
|
sprintf(tmp, "%s_changed", nodeName);
|
||
|
if (type != has(eventOuts, nodeName)) return 0;
|
||
|
|
||
|
return type;
|
||
|
}
|
||
|
int
|
||
|
VrmlNodeType::has(const vtkVRMLVectorType<NameTypeRec*> &recs, const char *nodeName) const
|
||
|
{
|
||
|
for (int i = 0;i < recs.Count(); i++)
|
||
|
{
|
||
|
NameTypeRec *n = recs.Get(i);
|
||
|
if (strcmp(n->name, nodeName) == 0)
|
||
|
return n->type;
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
// Here comes the parser and lexer.
|
||
|
|
||
|
// Begin of Auto-generated Parser Code
|
||
|
|
||
|
|
||
|
/* A Bison parser, made from parser.y with Bison version GNU Bison version 1.24
|
||
|
*/
|
||
|
|
||
|
#define YYBISON 1 /* Identify Bison output. */
|
||
|
|
||
|
#define IDENTIFIER 258
|
||
|
#define DEF 259
|
||
|
#define USE 260
|
||
|
#define PROTO 261
|
||
|
#define EXTERNPROTO 262
|
||
|
#define TO 263
|
||
|
#define IS 264
|
||
|
#define ROUTE 265
|
||
|
#define SFN_NULL 266
|
||
|
#define EVENTIN 267
|
||
|
#define EVENTOUT 268
|
||
|
#define FIELD 269
|
||
|
#define EXPOSEDFIELD 270
|
||
|
#define SFBOOL 271
|
||
|
#define SFCOLOR 272
|
||
|
#define SFFLOAT 273
|
||
|
#define SFIMAGE 274
|
||
|
#define SFINT32 275
|
||
|
#define SFNODE 276
|
||
|
#define SFROTATION 277
|
||
|
#define SFSTRING 278
|
||
|
#define SFTIME 279
|
||
|
#define SFVEC2F 280
|
||
|
#define SFVEC3F 281
|
||
|
#define MFCOLOR 282
|
||
|
#define MFFLOAT 283
|
||
|
#define MFINT32 284
|
||
|
#define MFROTATION 285
|
||
|
#define MFSTRING 286
|
||
|
#define MFVEC2F 287
|
||
|
#define MFVEC3F 288
|
||
|
#define MFNODE 289
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Parser for VRML 2.0 files.
|
||
|
// This is a minimal parser that does NOT generate an in-memory scene graph.
|
||
|
//
|
||
|
|
||
|
// The original parser was developed on a Windows 95 PC with
|
||
|
// Borland's C++ 5.0 development tools. This was then ported
|
||
|
// to a Windows 95 PC with Microsoft's MSDEV C++ 4.0 development
|
||
|
// tools. The port introduced the ifdef's for
|
||
|
// USING_BORLAND_CPP_5 : since this provides a "std namespace",
|
||
|
// TWO_ARGUMENTS_FOR_STL_STACK : STL is a moving target. The stack template
|
||
|
// class takes either one or two arguments.
|
||
|
|
||
|
|
||
|
#define YYDEBUG 1
|
||
|
|
||
|
#ifndef __APPLE__
|
||
|
#include <malloc.h>
|
||
|
#endif
|
||
|
|
||
|
#ifdef USE_STD_NAMESPACE
|
||
|
using namespace std;
|
||
|
#endif
|
||
|
#undef bool
|
||
|
|
||
|
|
||
|
// Currently-being-define proto. Prototypes may be nested, so a stack
|
||
|
// is needed:
|
||
|
|
||
|
static vtkVRMLVectorType<VrmlNodeType*> *CurrentProtoStack = NULL;
|
||
|
|
||
|
|
||
|
// This is used when the parser knows what kind of token it expects
|
||
|
// to get next-- used when parsing field values (whose types are declared
|
||
|
// and read by the parser) and at certain other places:
|
||
|
extern int expectToken;
|
||
|
|
||
|
// Current line number (set by lexer)
|
||
|
extern int currentLineNumber;
|
||
|
|
||
|
// Some helper routines defined below:
|
||
|
static void beginProto(const char *);
|
||
|
static void endProto();
|
||
|
|
||
|
static int addField(const char *type, const char *name);
|
||
|
static int addEventIn(const char *type, const char *name);
|
||
|
static int addEventOut(const char *type, const char *name);
|
||
|
static int addExposedField(const char *type, const char *name);
|
||
|
static int add(void (VrmlNodeType::*)(const char *, int), const char *,
|
||
|
const char *);
|
||
|
static int fieldType(const char *type);
|
||
|
static void inScript();
|
||
|
static void expect(int type);
|
||
|
|
||
|
void yyerror(const char *);
|
||
|
int yylex(vtkVRMLImporter* self);
|
||
|
|
||
|
|
||
|
typedef union {
|
||
|
char *string;
|
||
|
|
||
|
/* Other types that will be needed by a true VRML implementation
|
||
|
* (but are not defined by this parser due to the complexity):
|
||
|
* Node *node;
|
||
|
* list<Node *> *nodeList;
|
||
|
*/
|
||
|
|
||
|
float sffloat;
|
||
|
vtkPoints *vec3f;
|
||
|
vtkFloatArray *vec2f;
|
||
|
vtkIdTypeArray *mfint32;
|
||
|
int sfint;
|
||
|
} YYSTYPE;
|
||
|
|
||
|
#ifndef YYLTYPE
|
||
|
typedef
|
||
|
struct yyltype
|
||
|
{
|
||
|
int timestamp;
|
||
|
int first_line;
|
||
|
int first_column;
|
||
|
int last_line;
|
||
|
int last_column;
|
||
|
char *text;
|
||
|
}
|
||
|
yyltype;
|
||
|
|
||
|
#define YYLTYPE yyltype
|
||
|
#endif
|
||
|
|
||
|
#ifndef __cplusplus
|
||
|
#ifndef __STDC__
|
||
|
#define const
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#define YYFINAL 128
|
||
|
#define YYFLAG -32768
|
||
|
#define YYNTBASE 40
|
||
|
|
||
|
#define YYTRANSLATE(x) ((unsigned)(x) <= 289 ? yytranslate[x] : 68)
|
||
|
|
||
|
static const char 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, 2, 2, 2, 2, 2, 2, 2, 2,
|
||
|
2, 2, 2, 2, 2, 39, 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,
|
||
|
35, 2, 36, 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, 37, 2, 38, 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, 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
|
||
|
};
|
||
|
|
||
|
#if YYDEBUG != 0
|
||
|
static const short yyprhs[] = { 0,
|
||
|
0, 2, 3, 6, 8, 10, 12, 14, 15, 16,
|
||
|
22, 25, 27, 29, 30, 40, 41, 42, 51, 52,
|
||
|
55, 59, 63, 64, 70, 71, 77, 78, 81, 85,
|
||
|
89, 93, 97, 106, 107, 113, 114, 117, 118, 122,
|
||
|
124, 126, 130, 134, 135, 141, 147, 153, 155, 157,
|
||
|
159, 161, 163, 165, 167, 169, 171, 173, 175, 177,
|
||
|
179, 181, 183, 185, 187, 190, 193, 196, 199, 203,
|
||
|
205, 206
|
||
|
};
|
||
|
|
||
|
static const short yyrhs[] = { 41,
|
||
|
0, 0, 41, 42, 0, 43, 0, 46, 0, 58,
|
||
|
0, 59, 0, 0, 0, 4, 44, 3, 45, 59,
|
||
|
0, 5, 3, 0, 47, 0, 49, 0, 0, 6,
|
||
|
3, 48, 35, 52, 36, 37, 41, 38, 0, 0,
|
||
|
0, 7, 3, 50, 35, 56, 36, 51, 65, 0,
|
||
|
0, 52, 53, 0, 12, 3, 3, 0, 13, 3,
|
||
|
3, 0, 0, 14, 3, 3, 54, 65, 0, 0,
|
||
|
15, 3, 3, 55, 65, 0, 0, 56, 57, 0,
|
||
|
12, 3, 3, 0, 13, 3, 3, 0, 14, 3,
|
||
|
3, 0, 15, 3, 3, 0, 10, 3, 39, 3,
|
||
|
8, 3, 39, 3, 0, 0, 3, 60, 37, 61,
|
||
|
38, 0, 0, 61, 62, 0, 0, 3, 63, 65,
|
||
|
0, 58, 0, 46, 0, 12, 3, 3, 0, 13,
|
||
|
3, 3, 0, 0, 14, 3, 3, 64, 65, 0,
|
||
|
12, 3, 3, 9, 3, 0, 13, 3, 3, 9,
|
||
|
3, 0, 16, 0, 17, 0, 27, 0, 18, 0,
|
||
|
28, 0, 19, 0, 20, 0, 29, 0, 22, 0,
|
||
|
30, 0, 23, 0, 31, 0, 24, 0, 25, 0,
|
||
|
32, 0, 26, 0, 33, 0, 21, 43, 0, 21,
|
||
|
11, 0, 34, 66, 0, 9, 3, 0, 35, 67,
|
||
|
36, 0, 43, 0, 0, 67, 43, 0
|
||
|
};
|
||
|
|
||
|
#endif
|
||
|
|
||
|
#if YYDEBUG != 0
|
||
|
static const short yyrline[] = { 0,
|
||
|
106, 109, 111, 114, 116, 117, 120, 122, 123, 124,
|
||
|
125, 128, 130, 133, 135, 139, 141, 143, 145, 147,
|
||
|
150, 153, 155, 157, 158, 160, 163, 165, 168, 171,
|
||
|
173, 175, 179, 184, 186, 189, 191, 194, 196, 197,
|
||
|
198, 201, 202, 203, 206, 207, 209, 213, 215, 216,
|
||
|
217, 218, 219, 220, 221, 222, 223, 224, 225, 226,
|
||
|
227, 228, 229, 230, 232, 233, 234, 235, 238, 240,
|
||
|
243, 245
|
||
|
};
|
||
|
|
||
|
static const char * const yytname[] = { "$","error","$undefined.","IDENTIFIER",
|
||
|
"DEF","USE","PROTO","EXTERNPROTO","TO","IS","ROUTE","SFN_NULL","EVENTIN","EVENTOUT",
|
||
|
"FIELD","EXPOSEDFIELD","SFBOOL","SFCOLOR","SFFLOAT","SFIMAGE","SFINT32","SFNODE",
|
||
|
"SFROTATION","SFSTRING","SFTIME","SFVEC2F","SFVEC3F","MFCOLOR","MFFLOAT","MFINT32",
|
||
|
"MFROTATION","MFSTRING","MFVEC2F","MFVEC3F","MFNODE","'['","']'","'{'","'}'",
|
||
|
"'.'","vrmlscene","declarations","declaration","nodeDeclaration","@1","@2","protoDeclaration",
|
||
|
"proto","@3","externproto","@4","@5","interfaceDeclarations","interfaceDeclaration",
|
||
|
"@6","@7","externInterfaceDeclarations","externInterfaceDeclaration","routeDeclaration",
|
||
|
"node","@8","nodeGuts","nodeGut","@9","@10","fieldValue","mfnodeValue","nodes",
|
||
|
""
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
static const short yyr1[] = { 0,
|
||
|
40, 41, 41, 42, 42, 42, 43, 44, 45, 43,
|
||
|
43, 46, 46, 48, 47, 50, 51, 49, 52, 52,
|
||
|
53, 53, 54, 53, 55, 53, 56, 56, 57, 57,
|
||
|
57, 57, 58, 60, 59, 61, 61, 63, 62, 62,
|
||
|
62, 62, 62, 64, 62, 62, 62, 65, 65, 65,
|
||
|
65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
|
||
|
65, 65, 65, 65, 65, 65, 65, 65, 66, 66,
|
||
|
67, 67
|
||
|
};
|
||
|
|
||
|
static const short yyr2[] = { 0,
|
||
|
1, 0, 2, 1, 1, 1, 1, 0, 0, 5,
|
||
|
2, 1, 1, 0, 9, 0, 0, 8, 0, 2,
|
||
|
3, 3, 0, 5, 0, 5, 0, 2, 3, 3,
|
||
|
3, 3, 8, 0, 5, 0, 2, 0, 3, 1,
|
||
|
1, 3, 3, 0, 5, 5, 5, 1, 1, 1,
|
||
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||
|
1, 1, 1, 1, 2, 2, 2, 2, 3, 1,
|
||
|
0, 2
|
||
|
};
|
||
|
|
||
|
static const short yydefact[] = { 2,
|
||
|
1, 34, 8, 0, 0, 0, 0, 3, 4, 5,
|
||
|
12, 13, 6, 7, 0, 0, 11, 14, 16, 0,
|
||
|
36, 9, 0, 0, 0, 0, 0, 19, 27, 0,
|
||
|
38, 0, 0, 0, 35, 41, 40, 37, 10, 0,
|
||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||
|
0, 20, 0, 0, 0, 0, 17, 28, 0, 0,
|
||
|
48, 49, 51, 53, 54, 0, 56, 58, 60, 61,
|
||
|
63, 50, 52, 55, 57, 59, 62, 64, 0, 39,
|
||
|
42, 43, 44, 0, 0, 0, 0, 2, 0, 0,
|
||
|
0, 0, 0, 0, 68, 66, 65, 71, 70, 67,
|
||
|
0, 0, 0, 21, 22, 23, 25, 0, 29, 30,
|
||
|
31, 32, 18, 33, 0, 46, 47, 45, 0, 0,
|
||
|
15, 69, 72, 24, 26, 0, 0, 0
|
||
|
};
|
||
|
|
||
|
static const short yydefgoto[] = { 126,
|
||
|
1, 8, 9, 16, 27, 10, 11, 23, 12, 24,
|
||
|
93, 40, 52, 119, 120, 41, 58, 13, 14, 15,
|
||
|
26, 38, 43, 103, 80, 100, 115
|
||
|
};
|
||
|
|
||
|
static const short yypact[] = {-32768,
|
||
|
79,-32768,-32768, -1, 0, 3, 4,-32768,-32768,-32768,
|
||
|
-32768,-32768,-32768,-32768, -28, 11,-32768,-32768,-32768, -18,
|
||
|
-32768,-32768, -6, 5, 32, -2, 38,-32768,-32768, 35,
|
||
|
-32768, 39, 41, 45,-32768,-32768,-32768,-32768,-32768, 19,
|
||
|
66, 48, 43, 50, 51, 54, 84, 85, 87, 88,
|
||
|
55,-32768, 90, 91, 92, 93,-32768,-32768, 58, 95,
|
||
|
-32768,-32768,-32768,-32768,-32768, 34,-32768,-32768,-32768,-32768,
|
||
|
-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 23,-32768,
|
||
|
94, 96,-32768, 97, 98, 101, 103,-32768, 104, 105,
|
||
|
106, 107, 43, 108,-32768,-32768,-32768,-32768,-32768,-32768,
|
||
|
109, 110, 43,-32768,-32768,-32768,-32768, 12,-32768,-32768,
|
||
|
-32768,-32768,-32768,-32768, 20,-32768,-32768,-32768, 43, 43,
|
||
|
-32768,-32768,-32768,-32768,-32768, 99, 114,-32768
|
||
|
};
|
||
|
|
||
|
static const short yypgoto[] = {-32768,
|
||
|
27,-32768, -66,-32768,-32768, 100,-32768,-32768,-32768,-32768,
|
||
|
-32768,-32768,-32768,-32768,-32768,-32768,-32768, 102, 89,-32768,
|
||
|
-32768,-32768,-32768,-32768, -73,-32768,-32768
|
||
|
};
|
||
|
|
||
|
|
||
|
#define YYLAST 128
|
||
|
|
||
|
|
||
|
static const short yytable[] = { 97,
|
||
|
31, 17, 18, 5, 6, 19, 20, 7, 21, 32,
|
||
|
33, 34, 99, 22, 2, 3, 4, 5, 6, 113,
|
||
|
25, 7, 2, 3, 4, 2, 3, 4, 28, 118,
|
||
|
47, 48, 49, 50, 30, 35, 2, 3, 4, 29,
|
||
|
2, 44, 42, 45, 96, 124, 125, 46, 123, 121,
|
||
|
59, 60, 81, 82, 51, 122, 83, 98, 61, 62,
|
||
|
63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
|
||
|
73, 74, 75, 76, 77, 78, 79, 53, 54, 55,
|
||
|
56, 2, 3, 4, 5, 6, 84, 85, 7, 86,
|
||
|
87, 88, 89, 90, 91, 92, 94, 95, 127, 104,
|
||
|
105, 57, 101, 106, 102, 107, 109, 110, 111, 112,
|
||
|
114, 116, 117, 128, 108, 39, 0, 0, 0, 0,
|
||
|
0, 0, 0, 0, 0, 36, 0, 37
|
||
|
};
|
||
|
|
||
|
static const short yycheck[] = { 66,
|
||
|
3, 3, 3, 6, 7, 3, 3, 10, 37, 12,
|
||
|
13, 14, 79, 3, 3, 4, 5, 6, 7, 93,
|
||
|
39, 10, 3, 4, 5, 3, 4, 5, 35, 103,
|
||
|
12, 13, 14, 15, 3, 38, 3, 4, 5, 35,
|
||
|
3, 3, 8, 3, 11, 119, 120, 3, 115, 38,
|
||
|
3, 9, 3, 3, 36, 36, 3, 35, 16, 17,
|
||
|
18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
|
||
|
28, 29, 30, 31, 32, 33, 34, 12, 13, 14,
|
||
|
15, 3, 4, 5, 6, 7, 3, 3, 10, 3,
|
||
|
3, 37, 3, 3, 3, 3, 39, 3, 0, 3,
|
||
|
3, 36, 9, 3, 9, 3, 3, 3, 3, 3,
|
||
|
3, 3, 3, 0, 88, 27, -1, -1, -1, -1,
|
||
|
-1, -1, -1, -1, -1, 26, -1, 26
|
||
|
};
|
||
|
/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
|
||
|
|
||
|
|
||
|
/* Skeleton output parser for bison,
|
||
|
Copyright (C) 1984, 1989, 1990 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., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||
|
|
||
|
/* As a special exception, when this file is copied by Bison into a
|
||
|
Bison output file, you may use that output file without restriction.
|
||
|
This special exception was added by the Free Software Foundation
|
||
|
in version 1.24 of Bison. */
|
||
|
|
||
|
extern int yylex(vtkVRMLImporter* self);
|
||
|
extern void yyerror();
|
||
|
|
||
|
#ifndef alloca
|
||
|
#ifdef __GNUC__
|
||
|
#define alloca __builtin_alloca
|
||
|
#else /* not GNU C. */
|
||
|
#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
|
||
|
#include <alloca.h>
|
||
|
#else /* not sparc */
|
||
|
#if defined (MSDOS) && !defined (__TURBOC__)
|
||
|
#include <malloc.h>
|
||
|
#else /* not MSDOS, or __TURBOC__ */
|
||
|
#if defined(_AIX)
|
||
|
#include <malloc.h>
|
||
|
#pragma alloca
|
||
|
#else /* not MSDOS, __TURBOC__, or _AIX */
|
||
|
#ifdef __hpux
|
||
|
#include <alloca.h>
|
||
|
#endif /* __hpux */
|
||
|
#endif /* not _AIX */
|
||
|
#endif /* not MSDOS, or __TURBOC__ */
|
||
|
#endif /* not sparc. */
|
||
|
#endif /* not GNU C. */
|
||
|
#endif /* alloca not defined. */
|
||
|
|
||
|
|
||
|
/* This is the parser code that is written into each bison parser
|
||
|
when the %semantic_parser declaration is not specified in the grammar.
|
||
|
It was written by Richard Stallman by simplifying the hairy parser
|
||
|
used when %semantic_parser is specified. */
|
||
|
|
||
|
/* Note: there must be only one dollar sign in this file.
|
||
|
It is replaced by the list of actions, each action
|
||
|
as one case of the switch. */
|
||
|
|
||
|
#define yyerrok (yyerrstatus = 0)
|
||
|
#define yyclearin (yychar = YYEMPTY)
|
||
|
#define YYEMPTY -2
|
||
|
#define YYEOF 0
|
||
|
#define YYACCEPT return(0)
|
||
|
#define YYABORT return(1)
|
||
|
#define YYERROR goto yyerrlab1
|
||
|
/* 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); \
|
||
|
yychar1 = YYTRANSLATE (yychar); \
|
||
|
YYPOPSTACK; \
|
||
|
goto yybackup; \
|
||
|
} \
|
||
|
else \
|
||
|
{ yyerror ("syntax error: cannot back up"); YYERROR; } \
|
||
|
while (0)
|
||
|
|
||
|
#define YYTERROR 1
|
||
|
#define YYERRCODE 256
|
||
|
|
||
|
#ifndef YYPURE
|
||
|
#define YYLEX yylex()
|
||
|
#endif
|
||
|
|
||
|
#ifdef YYPURE
|
||
|
#ifdef YYLSP_NEEDED
|
||
|
#ifdef YYLEX_PARAM
|
||
|
#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
|
||
|
#else
|
||
|
#define YYLEX yylex(&yylval, &yylloc)
|
||
|
#endif
|
||
|
#else /* not YYLSP_NEEDED */
|
||
|
#ifdef YYLEX_PARAM
|
||
|
#define YYLEX yylex(&yylval, YYLEX_PARAM)
|
||
|
#else
|
||
|
#define YYLEX yylex(&yylval)
|
||
|
#endif
|
||
|
#endif /* not YYLSP_NEEDED */
|
||
|
#endif
|
||
|
|
||
|
/* If nonreentrant, generate the variables here */
|
||
|
|
||
|
#ifndef YYPURE
|
||
|
|
||
|
int yychar; /* the lookahead symbol */
|
||
|
YYSTYPE yylval; /* the semantic value of the */
|
||
|
/* lookahead symbol */
|
||
|
|
||
|
#ifdef YYLSP_NEEDED
|
||
|
YYLTYPE yylloc; /* location data for the lookahead */
|
||
|
/* symbol */
|
||
|
#endif
|
||
|
|
||
|
int yynerrs; /* number of parse errors so far */
|
||
|
#endif /* not YYPURE */
|
||
|
|
||
|
#if YYDEBUG != 0
|
||
|
int yydebug; /* nonzero means print parse trace */
|
||
|
/* Since this is uninitialized, it does not stop multiple parsers
|
||
|
from coexisting. */
|
||
|
#endif
|
||
|
|
||
|
/* YYINITDEPTH indicates the initial size of the parser's stacks */
|
||
|
|
||
|
#ifndef YYINITDEPTH
|
||
|
#define YYINITDEPTH 200
|
||
|
#endif
|
||
|
|
||
|
/* YYMAXDEPTH is the maximum size the stacks can grow to
|
||
|
(effective only if the built-in stack extension method is used). */
|
||
|
|
||
|
#if YYMAXDEPTH == 0
|
||
|
#undef YYMAXDEPTH
|
||
|
#endif
|
||
|
|
||
|
#ifndef YYMAXDEPTH
|
||
|
#define YYMAXDEPTH 10000
|
||
|
#endif
|
||
|
|
||
|
/* Prevent warning if -Wstrict-prototypes. */
|
||
|
#ifdef __GNUC__
|
||
|
int yyparse (vtkVRMLImporter*);
|
||
|
#endif
|
||
|
|
||
|
#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
|
||
|
#define __yy_memcpy(FROM,TO,COUNT) __builtin_memcpy(TO,FROM,COUNT)
|
||
|
#else /* not GNU C or C++ */
|
||
|
#ifndef __cplusplus
|
||
|
|
||
|
/* This is the most reliable way to avoid incompatibilities
|
||
|
in available built-in functions on various systems. */
|
||
|
static void
|
||
|
__yy_memcpy (from, to, count)
|
||
|
char *from;
|
||
|
char *to;
|
||
|
int count;
|
||
|
{
|
||
|
register char *f = from;
|
||
|
register char *t = to;
|
||
|
register int i = count;
|
||
|
|
||
|
while (i-- > 0)
|
||
|
*t++ = *f++;
|
||
|
}
|
||
|
|
||
|
#else /* __cplusplus */
|
||
|
|
||
|
/* This is the most reliable way to avoid incompatibilities
|
||
|
in available built-in functions on various systems. */
|
||
|
static void
|
||
|
__yy_memcpy (char *from, char *to, int count)
|
||
|
{
|
||
|
register char *f = from;
|
||
|
register char *t = to;
|
||
|
register int i = count;
|
||
|
|
||
|
while (i-- > 0)
|
||
|
*t++ = *f++;
|
||
|
}
|
||
|
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
|
||
|
|
||
|
int
|
||
|
yyparse(vtkVRMLImporter* self)
|
||
|
{
|
||
|
register int yystate;
|
||
|
register int yyn;
|
||
|
register short *yyssp;
|
||
|
register YYSTYPE *yyvsp;
|
||
|
int yyerrstatus; /* number of tokens to shift before error messages enabled */
|
||
|
int yychar1 = 0; /* lookahead token as an internal (translated) token number */
|
||
|
|
||
|
short yyssa[YYINITDEPTH]; /* the state stack */
|
||
|
YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
|
||
|
|
||
|
short *yyss = yyssa; /* refer to the stacks thru separate pointers */
|
||
|
YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
|
||
|
|
||
|
#ifdef YYLSP_NEEDED
|
||
|
YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
|
||
|
YYLTYPE *yyls = yylsa;
|
||
|
YYLTYPE *yylsp;
|
||
|
|
||
|
#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
|
||
|
#else
|
||
|
#define YYPOPSTACK (yyvsp--, yyssp--)
|
||
|
#endif
|
||
|
|
||
|
int yystacksize = YYINITDEPTH;
|
||
|
|
||
|
#ifdef YYPURE
|
||
|
int yychar;
|
||
|
YYSTYPE yylval;
|
||
|
int yynerrs;
|
||
|
#ifdef YYLSP_NEEDED
|
||
|
YYLTYPE yylloc;
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
YYSTYPE yyval; /* the variable used to return */
|
||
|
/* semantic values from the action */
|
||
|
/* routines */
|
||
|
|
||
|
int yylen;
|
||
|
|
||
|
#if YYDEBUG != 0
|
||
|
if (yydebug)
|
||
|
fprintf(stderr, "Starting parse\n");
|
||
|
#endif
|
||
|
|
||
|
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 - 1;
|
||
|
yyvsp = yyvs;
|
||
|
#ifdef YYLSP_NEEDED
|
||
|
yylsp = yyls;
|
||
|
#endif
|
||
|
|
||
|
/* Push a new state, which is found in yystate . */
|
||
|
/* In all cases, when you get here, the value and location stacks
|
||
|
have just been pushed. so pushing a state here evens the stacks. */
|
||
|
yynewstate:
|
||
|
|
||
|
*++yyssp = yystate;
|
||
|
|
||
|
if (yyssp >= yyss + yystacksize - 1)
|
||
|
{
|
||
|
/* 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;
|
||
|
short *yyss1 = yyss;
|
||
|
#ifdef YYLSP_NEEDED
|
||
|
YYLTYPE *yyls1 = yyls;
|
||
|
#endif
|
||
|
|
||
|
/* Get the current used size of the three stacks, in elements. */
|
||
|
int size = yyssp - yyss + 1;
|
||
|
|
||
|
#ifdef yyoverflow
|
||
|
/* Each stack pointer address is followed by the size of
|
||
|
the data in use in that stack, in bytes. */
|
||
|
#ifdef YYLSP_NEEDED
|
||
|
/* This used to be a conditional around just the two extra args,
|
||
|
but that might be undefined if yyoverflow is a macro. */
|
||
|
yyoverflow("parser stack overflow",
|
||
|
&yyss1, size * sizeof (*yyssp),
|
||
|
&yyvs1, size * sizeof (*yyvsp),
|
||
|
&yyls1, size * sizeof (*yylsp),
|
||
|
&yystacksize);
|
||
|
#else
|
||
|
yyoverflow("parser stack overflow",
|
||
|
&yyss1, size * sizeof (*yyssp),
|
||
|
&yyvs1, size * sizeof (*yyvsp),
|
||
|
&yystacksize);
|
||
|
#endif
|
||
|
|
||
|
yyss = yyss1; yyvs = yyvs1;
|
||
|
#ifdef YYLSP_NEEDED
|
||
|
yyls = yyls1;
|
||
|
#endif
|
||
|
#else /* no yyoverflow */
|
||
|
/* Extend the stack our own way. */
|
||
|
if (yystacksize >= YYMAXDEPTH)
|
||
|
{
|
||
|
yyerror("parser stack overflow");
|
||
|
return 2;
|
||
|
}
|
||
|
yystacksize *= 2;
|
||
|
if (yystacksize > YYMAXDEPTH)
|
||
|
yystacksize = YYMAXDEPTH;
|
||
|
yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
|
||
|
__yy_memcpy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp));
|
||
|
yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
|
||
|
__yy_memcpy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp));
|
||
|
#ifdef YYLSP_NEEDED
|
||
|
yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
|
||
|
__yy_memcpy ((char *)yyls1, (char *)yyls, size * sizeof (*yylsp));
|
||
|
#endif
|
||
|
#endif /* no yyoverflow */
|
||
|
|
||
|
yyssp = yyss + size - 1;
|
||
|
yyvsp = yyvs + size - 1;
|
||
|
#ifdef YYLSP_NEEDED
|
||
|
yylsp = yyls + size - 1;
|
||
|
#endif
|
||
|
|
||
|
#if YYDEBUG != 0
|
||
|
if (yydebug)
|
||
|
fprintf(stderr, "Stack size increased to %d\n", yystacksize);
|
||
|
#endif
|
||
|
|
||
|
if (yyssp >= yyss + yystacksize - 1)
|
||
|
YYABORT;
|
||
|
}
|
||
|
|
||
|
#if YYDEBUG != 0
|
||
|
if (yydebug)
|
||
|
fprintf(stderr, "Entering state %d\n", yystate);
|
||
|
#endif
|
||
|
|
||
|
goto yybackup;
|
||
|
yybackup:
|
||
|
|
||
|
/* Do appropriate processing given the current state. */
|
||
|
/* Read a lookahead token if we need one and don't already have one. */
|
||
|
/* yyresume: */
|
||
|
|
||
|
/* First try to decide what to do without reference to lookahead token. */
|
||
|
|
||
|
yyn = yypact[yystate];
|
||
|
if (yyn == YYFLAG)
|
||
|
goto yydefault;
|
||
|
|
||
|
/* Not known => get a lookahead token if don't already have one. */
|
||
|
|
||
|
/* yychar is either YYEMPTY or YYEOF
|
||
|
or a valid token in external form. */
|
||
|
|
||
|
if (yychar == YYEMPTY)
|
||
|
{
|
||
|
#if YYDEBUG != 0
|
||
|
if (yydebug)
|
||
|
fprintf(stderr, "Reading a token: ");
|
||
|
#endif
|
||
|
yychar = yylex(self);
|
||
|
}
|
||
|
|
||
|
/* Convert token to internal form (in yychar1) for indexing tables with */
|
||
|
|
||
|
if (yychar <= 0) /* This means end of input. */
|
||
|
{
|
||
|
yychar1 = 0;
|
||
|
yychar = YYEOF; /* Don't call YYLEX any more */
|
||
|
|
||
|
#if YYDEBUG != 0
|
||
|
if (yydebug)
|
||
|
fprintf(stderr, "Now at end of input.\n");
|
||
|
#endif
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
yychar1 = YYTRANSLATE(yychar);
|
||
|
|
||
|
#if YYDEBUG != 0
|
||
|
if (yydebug)
|
||
|
{
|
||
|
fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
|
||
|
/* Give the individual parser a way to print the precise meaning
|
||
|
of a token, for further debugging info. */
|
||
|
#ifdef YYPRINT
|
||
|
YYPRINT (stderr, yychar, yylval);
|
||
|
#endif
|
||
|
fprintf (stderr, ")\n");
|
||
|
}
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
yyn += yychar1;
|
||
|
if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
|
||
|
goto yydefault;
|
||
|
|
||
|
yyn = yytable[yyn];
|
||
|
|
||
|
/* yyn is what to do for this token type in this state.
|
||
|
Negative => reduce, -yyn is rule number.
|
||
|
Positive => shift, yyn is new state.
|
||
|
New state is final state => don't bother to shift,
|
||
|
just return success.
|
||
|
0, or most negative number => error. */
|
||
|
|
||
|
if (yyn < 0)
|
||
|
{
|
||
|
if (yyn == YYFLAG)
|
||
|
goto yyerrlab;
|
||
|
yyn = -yyn;
|
||
|
goto yyreduce;
|
||
|
}
|
||
|
else if (yyn == 0)
|
||
|
goto yyerrlab;
|
||
|
|
||
|
if (yyn == YYFINAL)
|
||
|
YYACCEPT;
|
||
|
|
||
|
/* Shift the lookahead token. */
|
||
|
|
||
|
#if YYDEBUG != 0
|
||
|
if (yydebug)
|
||
|
fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
|
||
|
#endif
|
||
|
|
||
|
/* Discard the token being shifted unless it is eof. */
|
||
|
if (yychar != YYEOF)
|
||
|
yychar = YYEMPTY;
|
||
|
|
||
|
*++yyvsp = yylval;
|
||
|
#ifdef YYLSP_NEEDED
|
||
|
*++yylsp = yylloc;
|
||
|
#endif
|
||
|
|
||
|
/* count tokens shifted since error; after three, turn off error status. */
|
||
|
if (yyerrstatus) yyerrstatus--;
|
||
|
|
||
|
yystate = yyn;
|
||
|
goto yynewstate;
|
||
|
|
||
|
/* Do the default action for the current state. */
|
||
|
yydefault:
|
||
|
|
||
|
yyn = yydefact[yystate];
|
||
|
if (yyn == 0)
|
||
|
goto yyerrlab;
|
||
|
|
||
|
/* Do a reduction. yyn is the number of a rule to reduce with. */
|
||
|
yyreduce:
|
||
|
yylen = yyr2[yyn];
|
||
|
if (yylen > 0)
|
||
|
yyval = yyvsp[1-yylen]; /* implement default value of the action */
|
||
|
else
|
||
|
yyval.sfint = 0;
|
||
|
|
||
|
#if YYDEBUG != 0
|
||
|
if (yydebug)
|
||
|
{
|
||
|
int i;
|
||
|
|
||
|
fprintf (stderr, "Reducing via rule %d (line %d), ",
|
||
|
yyn, yyrline[yyn]);
|
||
|
|
||
|
/* Print the symbols being reduced, and their result. */
|
||
|
for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
|
||
|
fprintf (stderr, "%s ", yytname[yyrhs[i]]);
|
||
|
fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
|
||
|
// Note: several free() methods are commented out due to the use of
|
||
|
// vtkVRMLAllocator.
|
||
|
switch (yyn) {
|
||
|
|
||
|
case 8:
|
||
|
{ creatingDEF = 1; ;
|
||
|
break;}
|
||
|
case 9:
|
||
|
{ curDEFName = yyvsp[0].string; ;
|
||
|
break;}
|
||
|
case 10:
|
||
|
{ creatingDEF = 0; ;
|
||
|
break;}
|
||
|
case 11:
|
||
|
{ self->useNode(yyvsp[0].string);//free(yyvsp[0].string); ;
|
||
|
break;}
|
||
|
case 14:
|
||
|
{ beginProto(yyvsp[0].string); ;
|
||
|
break;}
|
||
|
case 15:
|
||
|
{ endProto(); //free(yyvsp[-7].string);;
|
||
|
break;}
|
||
|
case 16:
|
||
|
{ beginProto(yyvsp[0].string); ;
|
||
|
break;}
|
||
|
case 17:
|
||
|
{ expect(MFSTRING); ;
|
||
|
break;}
|
||
|
case 18:
|
||
|
{ endProto(); //free(yyvsp[-6].string); ;
|
||
|
break;}
|
||
|
case 21:
|
||
|
{ addEventIn(yyvsp[-1].string, yyvsp[0].string);
|
||
|
//free(yyvsp[-1].string); free(yyvsp[0].string); ;
|
||
|
break;}
|
||
|
case 22:
|
||
|
{ addEventOut(yyvsp[-1].string, yyvsp[0].string);
|
||
|
//free(yyvsp[-1].string); free(yyvsp[0].string); ;
|
||
|
break;}
|
||
|
case 23:
|
||
|
{ int type = addField(yyvsp[-1].string, yyvsp[0].string);
|
||
|
expect(type); ;
|
||
|
break;}
|
||
|
case 24:
|
||
|
{ //free(yyvsp[-3].string); free(yyvsp[-2].string); ;
|
||
|
break;}
|
||
|
case 25:
|
||
|
{ int type = addExposedField(yyvsp[-1].string, yyvsp[0].string);
|
||
|
expect(type); ;
|
||
|
break;}
|
||
|
case 26:
|
||
|
{ //free(yyvsp[-3].string); free(yyvsp[-2].string); ;
|
||
|
break;}
|
||
|
case 29:
|
||
|
{ addEventIn(yyvsp[-1].string, yyvsp[0].string);
|
||
|
//free(yyvsp[-1].string); free(yyvsp[0].string); ;
|
||
|
break;}
|
||
|
case 30:
|
||
|
{ addEventOut(yyvsp[-1].string, yyvsp[0].string);
|
||
|
//free(yyvsp[-1].string); free(yyvsp[0].string); ;
|
||
|
break;}
|
||
|
case 31:
|
||
|
{ addField(yyvsp[-1].string, yyvsp[0].string);
|
||
|
//free(yyvsp[-1].string); free(yyvsp[0].string); ;
|
||
|
break;}
|
||
|
case 32:
|
||
|
{ addExposedField(yyvsp[-1].string, yyvsp[0].string);
|
||
|
//free(yyvsp[-1].string); free(yyvsp[0].string); ;
|
||
|
break;}
|
||
|
case 33:
|
||
|
{ //free(yyvsp[-6].string); free(yyvsp[-4].string); free(yyvsp[-2].string); free(yyvsp[0].string); ;
|
||
|
break;}
|
||
|
case 34:
|
||
|
{ self->enterNode(yyvsp[0].string); ;
|
||
|
break;}
|
||
|
case 35:
|
||
|
{ self->exitNode(); //free(yyvsp[-4].string);;
|
||
|
break;}
|
||
|
case 38:
|
||
|
{ self->enterField(yyvsp[0].string); ;
|
||
|
break;}
|
||
|
case 39:
|
||
|
{ self->exitField(); //free(yyvsp[-2].string); ;
|
||
|
break;}
|
||
|
case 42:
|
||
|
{ inScript(); //free(yyvsp[-1].string); free(yyvsp[0].string); ;
|
||
|
break;}
|
||
|
case 43:
|
||
|
{ inScript(); //free(yyvsp[-1].string); free(yyvsp[0].string); ;
|
||
|
break;}
|
||
|
case 44:
|
||
|
{ inScript();
|
||
|
int type = fieldType(yyvsp[-1].string);
|
||
|
expect(type); ;
|
||
|
break;}
|
||
|
case 45:
|
||
|
{ //free(yyvsp[-3].string); free(yyvsp[-2].string); ;
|
||
|
break;}
|
||
|
case 46:
|
||
|
{ inScript(); //free(yyvsp[-3].string); free(yyvsp[-2].string); free(yyvsp[0].string); ;
|
||
|
break;}
|
||
|
case 47:
|
||
|
{ inScript(); //free(yyvsp[-3].string); free(yyvsp[-2].string); free(yyvsp[0].string); ;
|
||
|
break;}
|
||
|
case 49:
|
||
|
{;
|
||
|
break;}
|
||
|
case 50:
|
||
|
{ break;}
|
||
|
case 55:
|
||
|
{ break;}
|
||
|
case 63:
|
||
|
{ ;
|
||
|
break;}
|
||
|
case 64:
|
||
|
{ break;}
|
||
|
case 68:
|
||
|
{ //free(yyvsp[0].string); ;
|
||
|
break;}
|
||
|
}
|
||
|
/* the action file gets copied in in place of this dollarsign */
|
||
|
|
||
|
|
||
|
yyvsp -= yylen;
|
||
|
yyssp -= yylen;
|
||
|
#ifdef YYLSP_NEEDED
|
||
|
yylsp -= yylen;
|
||
|
#endif
|
||
|
|
||
|
#if YYDEBUG != 0
|
||
|
if (yydebug)
|
||
|
{
|
||
|
short *ssp1 = yyss - 1;
|
||
|
fprintf (stderr, "state stack now");
|
||
|
while (ssp1 != yyssp)
|
||
|
fprintf (stderr, " %d", *++ssp1);
|
||
|
fprintf (stderr, "\n");
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
*++yyvsp = yyval;
|
||
|
|
||
|
#ifdef YYLSP_NEEDED
|
||
|
yylsp++;
|
||
|
if (yylen == 0)
|
||
|
{
|
||
|
yylsp->first_line = yylloc.first_line;
|
||
|
yylsp->first_column = yylloc.first_column;
|
||
|
yylsp->last_line = (yylsp-1)->last_line;
|
||
|
yylsp->last_column = (yylsp-1)->last_column;
|
||
|
yylsp->text = 0;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
yylsp->last_line = (yylsp+yylen-1)->last_line;
|
||
|
yylsp->last_column = (yylsp+yylen-1)->last_column;
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
/* 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 - YYNTBASE] + *yyssp;
|
||
|
if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
|
||
|
yystate = yytable[yystate];
|
||
|
else
|
||
|
yystate = yydefgoto[yyn - YYNTBASE];
|
||
|
|
||
|
goto yynewstate;
|
||
|
|
||
|
yyerrlab: /* here on detecting error */
|
||
|
|
||
|
if (! yyerrstatus)
|
||
|
/* If not already recovering from an error, report this error. */
|
||
|
{
|
||
|
++yynerrs;
|
||
|
|
||
|
#ifdef YYERROR_VERBOSE
|
||
|
yyn = yypact[yystate];
|
||
|
|
||
|
if (yyn > YYFLAG && yyn < YYLAST)
|
||
|
{
|
||
|
int size = 0;
|
||
|
char *msg;
|
||
|
int x, count;
|
||
|
|
||
|
count = 0;
|
||
|
/* Start X at -yyn if nec to avoid negative indexes in yycheck. */
|
||
|
for (x = (yyn < 0 ? -yyn : 0);
|
||
|
x < (sizeof(yytname) / sizeof(char *)); x++)
|
||
|
if (yycheck[x + yyn] == x)
|
||
|
size += strlen(yytname[x]) + 15, count++;
|
||
|
msg = (char *) malloc(size + 15);
|
||
|
if (msg != 0)
|
||
|
{
|
||
|
strcpy(msg, "parse error");
|
||
|
|
||
|
if (count < 5)
|
||
|
{
|
||
|
count = 0;
|
||
|
for (x = (yyn < 0 ? -yyn : 0);
|
||
|
x < (sizeof(yytname) / sizeof(char *)); x++)
|
||
|
if (yycheck[x + yyn] == x)
|
||
|
{
|
||
|
strcat(msg, count == 0 ? ", expecting `" : " or `");
|
||
|
strcat(msg, yytname[x]);
|
||
|
strcat(msg, "'");
|
||
|
count++;
|
||
|
}
|
||
|
}
|
||
|
yyerror(msg);
|
||
|
free(msg);
|
||
|
}
|
||
|
else
|
||
|
yyerror ("parse error; also virtual memory exceeded");
|
||
|
}
|
||
|
else
|
||
|
#endif /* YYERROR_VERBOSE */
|
||
|
yyerror("parse error");
|
||
|
}
|
||
|
|
||
|
goto yyerrlab1;
|
||
|
yyerrlab1: /* here on error raised explicitly by an action */
|
||
|
|
||
|
if (yyerrstatus == 3)
|
||
|
{
|
||
|
/* if just tried and failed to reuse lookahead token after an error, discard it. */
|
||
|
|
||
|
/* return failure if at end of input */
|
||
|
if (yychar == YYEOF)
|
||
|
YYABORT;
|
||
|
|
||
|
#if YYDEBUG != 0
|
||
|
if (yydebug)
|
||
|
fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
|
||
|
#endif
|
||
|
|
||
|
yychar = YYEMPTY;
|
||
|
}
|
||
|
|
||
|
/* Else will try to reuse lookahead token
|
||
|
after shifting the error token. */
|
||
|
|
||
|
yyerrstatus = 3; /* Each real token shifted decrements this */
|
||
|
|
||
|
goto yyerrhandle;
|
||
|
|
||
|
yyerrdefault: /* current state does not do anything special for the error token. */
|
||
|
|
||
|
#if 0
|
||
|
/* This is wrong; only states that explicitly want error tokens
|
||
|
should shift them. */
|
||
|
yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
|
||
|
if (yyn) goto yydefault;
|
||
|
#endif
|
||
|
|
||
|
yyerrpop: /* pop the current state because it cannot handle the error token */
|
||
|
|
||
|
if (yyssp == yyss) YYABORT;
|
||
|
yyvsp--;
|
||
|
yystate = *--yyssp;
|
||
|
#ifdef YYLSP_NEEDED
|
||
|
yylsp--;
|
||
|
#endif
|
||
|
|
||
|
#if YYDEBUG != 0
|
||
|
if (yydebug)
|
||
|
{
|
||
|
short *ssp1 = yyss - 1;
|
||
|
fprintf (stderr, "Error: state stack now");
|
||
|
while (ssp1 != yyssp)
|
||
|
fprintf (stderr, " %d", *++ssp1);
|
||
|
fprintf (stderr, "\n");
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
yyerrhandle:
|
||
|
|
||
|
yyn = yypact[yystate];
|
||
|
if (yyn == YYFLAG)
|
||
|
goto yyerrdefault;
|
||
|
|
||
|
yyn += YYTERROR;
|
||
|
if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
|
||
|
goto yyerrdefault;
|
||
|
|
||
|
yyn = yytable[yyn];
|
||
|
if (yyn < 0)
|
||
|
{
|
||
|
if (yyn == YYFLAG)
|
||
|
goto yyerrpop;
|
||
|
yyn = -yyn;
|
||
|
goto yyreduce;
|
||
|
}
|
||
|
else if (yyn == 0)
|
||
|
goto yyerrpop;
|
||
|
|
||
|
if (yyn == YYFINAL)
|
||
|
YYACCEPT;
|
||
|
|
||
|
#if YYDEBUG != 0
|
||
|
if (yydebug)
|
||
|
fprintf(stderr, "Shifting error token, ");
|
||
|
#endif
|
||
|
|
||
|
*++yyvsp = yylval;
|
||
|
#ifdef YYLSP_NEEDED
|
||
|
*++yylsp = yylloc;
|
||
|
#endif
|
||
|
|
||
|
yystate = yyn;
|
||
|
goto yynewstate;
|
||
|
}
|
||
|
|
||
|
|
||
|
void
|
||
|
yyerror(const char *msg)
|
||
|
{
|
||
|
cerr << "Error near line " << currentLineNumber << ": " << msg << "\n";
|
||
|
expect(0);
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
beginProto(const char *protoName)
|
||
|
{
|
||
|
// Any protos in the implementation are in a local namespace:
|
||
|
VrmlNodeType::pushNameSpace();
|
||
|
|
||
|
VrmlNodeType *t = new VrmlNodeType(protoName);
|
||
|
*CurrentProtoStack += t;
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
endProto()
|
||
|
{
|
||
|
// Make any protos defined in implementation unavailable:
|
||
|
VrmlNodeType::popNameSpace();
|
||
|
|
||
|
// Add this proto definition:
|
||
|
if (CurrentProtoStack->Count() == 0)
|
||
|
{
|
||
|
cerr << "Error: Empty PROTO stack!\n";
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
VrmlNodeType *t = CurrentProtoStack->Top();
|
||
|
CurrentProtoStack->Pop();
|
||
|
VrmlNodeType::addToNameSpace(t);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static int
|
||
|
addField(const char *type, const char *name)
|
||
|
{
|
||
|
return add(&VrmlNodeType::addField, type, name);
|
||
|
}
|
||
|
|
||
|
static int
|
||
|
addEventIn(const char *type, const char *name)
|
||
|
{
|
||
|
return add(&VrmlNodeType::addEventIn, type, name);
|
||
|
}
|
||
|
static int
|
||
|
addEventOut(const char *type, const char *name)
|
||
|
{
|
||
|
return add(&VrmlNodeType::addEventOut, type, name);
|
||
|
}
|
||
|
static int
|
||
|
addExposedField(const char *type, const char *name)
|
||
|
{
|
||
|
return add(&VrmlNodeType::addExposedField, type, name);
|
||
|
}
|
||
|
|
||
|
static int
|
||
|
add(void (VrmlNodeType::*func)(const char *, int),
|
||
|
const char *typeString, const char *name)
|
||
|
{
|
||
|
int type = fieldType(typeString);
|
||
|
|
||
|
if (type == 0)
|
||
|
{
|
||
|
cerr << "Error: invalid field type: " << type << "\n";
|
||
|
}
|
||
|
|
||
|
// Need to add support for Script nodes:
|
||
|
// if (inScript) ... ???
|
||
|
|
||
|
if (CurrentProtoStack->Count() == 0)
|
||
|
{
|
||
|
cerr << "Error: declaration outside of prototype\n";
|
||
|
return 0;
|
||
|
}
|
||
|
VrmlNodeType *t = CurrentProtoStack->Top();
|
||
|
(t->*func)(name, type);
|
||
|
|
||
|
return type;
|
||
|
}
|
||
|
|
||
|
static int
|
||
|
fieldType(const char *type)
|
||
|
{
|
||
|
if (strcmp(type, "SFBool") == 0) return SFBOOL;
|
||
|
if (strcmp(type, "SFColor") == 0) return SFCOLOR;
|
||
|
if (strcmp(type, "SFFloat") == 0) return SFFLOAT;
|
||
|
if (strcmp(type, "SFImage") == 0) return SFIMAGE;
|
||
|
if (strcmp(type, "SFInt32") == 0) return SFINT32;
|
||
|
if (strcmp(type, "SFNode") == 0) return SFNODE;
|
||
|
if (strcmp(type, "SFRotation") == 0) return SFROTATION;
|
||
|
if (strcmp(type, "SFString") == 0) return SFSTRING;
|
||
|
if (strcmp(type, "SFTime") == 0) return SFTIME;
|
||
|
if (strcmp(type, "SFVec2f") == 0) return SFVEC2F;
|
||
|
if (strcmp(type, "SFVec3f") == 0) return SFVEC3F;
|
||
|
if (strcmp(type, "MFColor") == 0) return MFCOLOR;
|
||
|
if (strcmp(type, "MFFloat") == 0) return MFFLOAT;
|
||
|
if (strcmp(type, "MFInt32") == 0) return MFINT32;
|
||
|
if (strcmp(type, "MFNode") == 0) return MFNODE;
|
||
|
if (strcmp(type, "MFRotation") == 0) return MFROTATION;
|
||
|
if (strcmp(type, "MFString") == 0) return MFSTRING;
|
||
|
if (strcmp(type, "MFVec2f") == 0) return MFVEC2F;
|
||
|
if (strcmp(type, "MFVec3f") == 0) return MFVEC3F;
|
||
|
|
||
|
cerr << "Illegal field type: " << type << "\n";
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
inScript()
|
||
|
{
|
||
|
VrmlNodeType::FieldRec *fr = VrmlNodeType::currentField->Top();
|
||
|
if (fr->nodeType == NULL ||
|
||
|
strcmp(fr->nodeType->getName(), "Script") != 0)
|
||
|
{
|
||
|
yyerror("interface declaration outside of Script or prototype");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
static void
|
||
|
expect(int type)
|
||
|
{
|
||
|
expectToken = type;
|
||
|
}
|
||
|
|
||
|
// End of Auto-generated Parser Code
|
||
|
// Begin of Auto-generated Lexer Code
|
||
|
|
||
|
/* A lexical scanner generated by flex */
|
||
|
|
||
|
|
||
|
#define FLEX_SCANNER
|
||
|
|
||
|
#ifdef WIN32
|
||
|
#include <io.h>
|
||
|
#else
|
||
|
#include <unistd.h>
|
||
|
#endif
|
||
|
|
||
|
/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
|
||
|
#ifdef c_plusplus
|
||
|
#ifndef __cplusplus
|
||
|
#define __cplusplus
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
|
||
|
/* Use prototypes in function declarations. */
|
||
|
#define YY_USE_PROTOS
|
||
|
|
||
|
/* The "const" storage-class-modifier is valid. */
|
||
|
#define YY_USE_CONST
|
||
|
|
||
|
#else /* ! __cplusplus */
|
||
|
|
||
|
#ifdef __STDC__
|
||
|
|
||
|
#define YY_USE_PROTOS
|
||
|
#define YY_USE_CONST
|
||
|
|
||
|
#endif /* __STDC__ */
|
||
|
#endif /* ! __cplusplus */
|
||
|
|
||
|
|
||
|
#ifdef __TURBOC__
|
||
|
#define YY_USE_CONST
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#ifndef YY_USE_CONST
|
||
|
#ifndef const
|
||
|
#define const
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#ifdef YY_USE_PROTOS
|
||
|
#define YY_PROTO(proto) proto
|
||
|
#else
|
||
|
#define YY_PROTO(proto) ()
|
||
|
#endif
|
||
|
|
||
|
/* Returned upon end-of-file. */
|
||
|
#define YY_NULL 0
|
||
|
|
||
|
/* Promotes a possibly negative, possibly signed char to an unsigned
|
||
|
* integer for use as an array index. If the signed char is negative,
|
||
|
* we want to instead treat it as an 8-bit unsigned char, hence the
|
||
|
* double cast.
|
||
|
*/
|
||
|
#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
|
||
|
|
||
|
/* Enter a start condition. This macro really ought to take a parameter,
|
||
|
* but we do it the disgusting crufty way forced on us by the ()-less
|
||
|
* definition of BEGIN.
|
||
|
*/
|
||
|
#define BEGIN yy_start = 1 + 2 *
|
||
|
|
||
|
/* Translate the current start state into a value that can be later handed
|
||
|
* to BEGIN to return to the state.
|
||
|
*/
|
||
|
#define YY_START ((yy_start - 1) / 2)
|
||
|
|
||
|
/* Action number for EOF rule of a given start state. */
|
||
|
#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
|
||
|
|
||
|
/* Special action meaning "start processing a new file". Now included
|
||
|
* only for backward compatibility with previous versions of flex.
|
||
|
*/
|
||
|
#define YY_NEW_FILE yyrestart( yyin )
|
||
|
|
||
|
#define YY_END_OF_BUFFER_CHAR 0
|
||
|
|
||
|
/* Size of default input buffer. */
|
||
|
#define YY_BUF_SIZE 16384
|
||
|
|
||
|
typedef struct yy_buffer_state *YY_BUFFER_STATE;
|
||
|
|
||
|
extern int yyleng;
|
||
|
extern FILE *yyin, *yyout;
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
extern int yywrap YY_PROTO(( void ));
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#define EOB_ACT_CONTINUE_SCAN 0
|
||
|
#define EOB_ACT_END_OF_FILE 1
|
||
|
#define EOB_ACT_LAST_MATCH 2
|
||
|
|
||
|
/* The funky do-while in the following #define is used to turn the definition
|
||
|
* int a single C statement (which needs a semi-colon terminator). This
|
||
|
* avoids problems with code like:
|
||
|
*
|
||
|
* if ( condition_holds )
|
||
|
* yyless( 5 );
|
||
|
* else
|
||
|
* do_something_else();
|
||
|
*
|
||
|
* Prior to using the do-while the compiler would get upset at the
|
||
|
* "else" because it interpreted the "if" statement as being all
|
||
|
* done when it reached the ';' after the yyless() call.
|
||
|
*/
|
||
|
|
||
|
/* Return all but the first 'n' matched characters back to the input stream. */
|
||
|
|
||
|
#define yyless(n) \
|
||
|
do \
|
||
|
{ \
|
||
|
/* Undo effects of setting up yytext. */ \
|
||
|
*yy_cp = yy_hold_char; \
|
||
|
yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
|
||
|
YY_DO_BEFORE_ACTION; /* set up yytext again */ \
|
||
|
} \
|
||
|
while ( 0 )
|
||
|
|
||
|
|
||
|
struct yy_buffer_state
|
||
|
{
|
||
|
FILE *yy_input_file;
|
||
|
|
||
|
char *yy_ch_buf; /* input buffer */
|
||
|
char *yy_buf_pos; /* current position in input buffer */
|
||
|
|
||
|
/* Size of input buffer in bytes, not including room for EOB
|
||
|
* characters.
|
||
|
*/
|
||
|
int yy_buf_size;
|
||
|
|
||
|
/* Number of characters read into yy_ch_buf, not including EOB
|
||
|
* characters.
|
||
|
*/
|
||
|
int yy_n_chars;
|
||
|
|
||
|
/* Whether this is an "interactive" input source; if so, and
|
||
|
* if we're using stdio for input, then we want to use getc()
|
||
|
* instead of fread(), to make sure we stop fetching input after
|
||
|
* each newline.
|
||
|
*/
|
||
|
int yy_is_interactive;
|
||
|
|
||
|
/* Whether to try to fill the input buffer when we reach the
|
||
|
* end of it.
|
||
|
*/
|
||
|
int yy_fill_buffer;
|
||
|
|
||
|
int yy_buffer_status;
|
||
|
#define YY_BUFFER_NEW 0
|
||
|
#define YY_BUFFER_NORMAL 1
|
||
|
/* When an EOF's been seen but there's still some text to process
|
||
|
* then we mark the buffer as YY_EOF_PENDING, to indicate that we
|
||
|
* shouldn't try reading from the input source any more. We might
|
||
|
* still have a bunch of tokens to match, though, because of
|
||
|
* possible backing-up.
|
||
|
*
|
||
|
* When we actually see the EOF, we change the status to "new"
|
||
|
* (via yyrestart()), so that the user can continue scanning by
|
||
|
* just pointing yyin at a new input file.
|
||
|
*/
|
||
|
#define YY_BUFFER_EOF_PENDING 2
|
||
|
};
|
||
|
|
||
|
static YY_BUFFER_STATE yy_current_buffer = 0;
|
||
|
|
||
|
/* We provide macros for accessing buffer states in case in the
|
||
|
* future we want to put the buffer states in a more general
|
||
|
* "scanner state".
|
||
|
*/
|
||
|
#define YY_CURRENT_BUFFER yy_current_buffer
|
||
|
|
||
|
|
||
|
/* yy_hold_char holds the character lost when yytext is formed. */
|
||
|
static char yy_hold_char;
|
||
|
|
||
|
static int yy_n_chars; /* number of characters read into yy_ch_buf */
|
||
|
|
||
|
|
||
|
int yyleng;
|
||
|
|
||
|
/* Points to current character in buffer. */
|
||
|
static char *yy_c_buf_p = (char *) 0;
|
||
|
static int yy_init = 1; /* whether we need to initialize */
|
||
|
static int yy_start = 0; /* start state number */
|
||
|
|
||
|
/* Flag which is used to allow yywrap()'s to do buffer switches
|
||
|
* instead of setting up a fresh yyin. A bit of a hack ...
|
||
|
*/
|
||
|
static int yy_did_buffer_switch_on_eof;
|
||
|
|
||
|
void yyrestart YY_PROTO(( FILE *input_file ));
|
||
|
void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
|
||
|
void yy_load_buffer_state YY_PROTO(( void ));
|
||
|
YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
|
||
|
void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
|
||
|
void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
|
||
|
|
||
|
static void *yy_flex_alloc YY_PROTO(( unsigned int ));
|
||
|
static void *yy_flex_realloc YY_PROTO(( void *, unsigned int ));
|
||
|
static void yy_flex_free YY_PROTO(( void * ));
|
||
|
|
||
|
#define yy_new_buffer yy_create_buffer
|
||
|
|
||
|
#define INITIAL 0
|
||
|
#define NODE 1
|
||
|
#define SFB 2
|
||
|
#define SFC 3
|
||
|
#define SFF 4
|
||
|
#define SFIMG 5
|
||
|
#define SFI 6
|
||
|
#define SFR 7
|
||
|
#define SFS 8
|
||
|
#define SFT 9
|
||
|
#define SFV2 10
|
||
|
#define SFV3 11
|
||
|
#define MFC 12
|
||
|
#define MFF 13
|
||
|
#define MFI 14
|
||
|
#define MFR 15
|
||
|
#define MFS 16
|
||
|
#define MFV2 17
|
||
|
#define MFV3 18
|
||
|
#define IN_SFS 19
|
||
|
#define IN_MFS 20
|
||
|
#define IN_SFIMG 21
|
||
|
typedef unsigned char YY_CHAR;
|
||
|
typedef int yy_state_type;
|
||
|
|
||
|
#define FLEX_DEBUG
|
||
|
FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
|
||
|
extern char *yytext;
|
||
|
#define yytext_ptr yytext
|
||
|
|
||
|
#ifndef yytext_ptr
|
||
|
static void yy_flex_strncpy YY_PROTO(( char *, const char *, int ));
|
||
|
#endif
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
static int yyinput YY_PROTO(( void ));
|
||
|
#else
|
||
|
static int input YY_PROTO(( void ));
|
||
|
#endif
|
||
|
|
||
|
static yy_state_type yy_get_previous_state YY_PROTO(( void ));
|
||
|
static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
|
||
|
static int yy_get_next_buffer YY_PROTO(( void ));
|
||
|
static void yy_fatal_error YY_PROTO(( const char msg[] ));
|
||
|
|
||
|
/* Done after the current pattern has been matched and before the
|
||
|
* corresponding action - sets up yytext.
|
||
|
*/
|
||
|
#define YY_DO_BEFORE_ACTION \
|
||
|
yytext_ptr = yy_bp; \
|
||
|
yyleng = yy_cp - yy_bp; \
|
||
|
yy_hold_char = *yy_cp; \
|
||
|
*yy_cp = '\0'; \
|
||
|
yy_c_buf_p = yy_cp;
|
||
|
|
||
|
#define YY_END_OF_BUFFER 50
|
||
|
static const short int yy_accept[949] =
|
||
|
{ 0,
|
||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||
|
0, 0, 0, 0, 50, 48, 46, 47, 46, 14,
|
||
|
46, 14, 14, 14, 14, 14, 14, 14, 14, 14,
|
||
|
14, 48, 48, 48, 48, 48, 48, 48, 48, 25,
|
||
|
48, 48, 48, 48, 23, 23, 48, 48, 48, 38,
|
||
|
36, 38, 38, 48, 48, 35, 48, 48, 48, 48,
|
||
|
48, 48, 48, 48, 48, 48, 19, 20, 48, 48,
|
||
|
|
||
|
26, 17, 48, 24, 24, 18, 48, 48, 48, 39,
|
||
|
37, 39, 39, 48, 48, 48, 48, 48, 48, 41,
|
||
|
41, 42, 41, 41, 43, 48, 45, 45, 46, 47,
|
||
|
46, 47, 47, 46, 46, 46, 46, 14, 14, 14,
|
||
|
7, 14, 14, 14, 6, 14, 14, 14, 14, 0,
|
||
|
15, 0, 0, 0, 0, 0, 0, 0, 0, 25,
|
||
|
25, 0, 0, 0, 0, 0, 23, 23, 0, 0,
|
||
|
0, 0, 0, 0, 38, 38, 38, 15, 0, 35,
|
||
|
35, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||
|
|
||
|
16, 0, 26, 26, 0, 24, 24, 0, 0, 0,
|
||
|
0, 0, 0, 39, 39, 39, 16, 0, 0, 0,
|
||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 41,
|
||
|
41, 41, 41, 41, 41, 40, 45, 45, 47, 47,
|
||
|
47, 46, 4, 14, 14, 14, 14, 5, 14, 14,
|
||
|
14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||
|
0, 0, 0, 0, 0, 25, 0, 44, 44, 0,
|
||
|
0, 0, 0, 44, 44, 0, 23, 0, 0, 0,
|
||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 35,
|
||
|
0, 0, 27, 0, 0, 0, 0, 0, 27, 0,
|
||
|
|
||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||
|
0, 0, 0, 0, 26, 24, 0, 0, 0, 0,
|
||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 28,
|
||
|
0, 0, 0, 0, 0, 28, 0, 0, 0, 0,
|
||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 45,
|
||
|
46, 14, 9, 14, 14, 14, 14, 14, 0, 21,
|
||
|
0, 0, 0, 0, 0, 0, 0, 0, 44, 44,
|
||
|
0, 0, 0, 0, 0, 0, 0, 0, 27, 0,
|
||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||
|
|
||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||
|
0, 0, 0, 0, 0, 28, 0, 0, 0, 0,
|
||
|
0, 0, 0, 0, 0, 0, 46, 14, 2, 8,
|
||
|
14, 14, 12, 22, 0, 0, 33, 0, 0, 0,
|
||
|
0, 0, 33, 0, 0, 0, 0, 33, 0, 0,
|
||
|
0, 33, 0, 0, 0, 0, 0, 33, 0, 0,
|
||
|
0, 44, 44, 44, 44, 0, 0, 0, 0, 0,
|
||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||
|
0, 0, 0, 27, 0, 0, 27, 0, 0, 29,
|
||
|
|
||
|
0, 0, 0, 0, 0, 29, 0, 0, 0, 0,
|
||
|
29, 0, 0, 0, 29, 0, 0, 0, 0, 0,
|
||
|
29, 0, 0, 0, 0, 0, 34, 0, 0, 0,
|
||
|
0, 0, 34, 0, 0, 0, 0, 34, 0, 0,
|
||
|
0, 34, 0, 0, 0, 0, 0, 34, 0, 0,
|
||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 28,
|
||
|
0, 0, 28, 0, 0, 30, 0, 0, 0, 0,
|
||
|
0, 30, 0, 0, 0, 0, 30, 0, 0, 0,
|
||
|
|
||
|
30, 0, 0, 0, 0, 0, 30, 0, 0, 0,
|
||
|
46, 14, 14, 14, 14, 33, 0, 0, 33, 0,
|
||
|
33, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||
|
0, 0, 29, 0, 0, 29, 0, 29, 0, 0,
|
||
|
34, 0, 0, 34, 0, 34, 0, 0, 0, 0,
|
||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||
|
0, 0, 0, 0, 0, 0, 0, 30, 0, 0,
|
||
|
30, 0, 30, 0, 0, 46, 14, 10, 14, 14,
|
||
|
0, 33, 0, 0, 33, 0, 0, 33, 0, 33,
|
||
|
|
||
|
0, 0, 33, 0, 0, 31, 0, 0, 0, 0,
|
||
|
0, 31, 0, 0, 0, 0, 31, 0, 0, 31,
|
||
|
0, 0, 0, 0, 0, 31, 0, 0, 0, 0,
|
||
|
0, 31, 0, 0, 0, 31, 0, 0, 0, 0,
|
||
|
0, 31, 0, 0, 0, 0, 0, 0, 0, 31,
|
||
|
0, 0, 0, 0, 29, 0, 0, 29, 0, 0,
|
||
|
29, 0, 29, 0, 0, 29, 0, 34, 0, 0,
|
||
|
34, 0, 0, 34, 0, 34, 0, 0, 34, 0,
|
||
|
0, 32, 0, 0, 0, 0, 0, 32, 0, 0,
|
||
|
0, 0, 32, 0, 0, 32, 0, 0, 0, 0,
|
||
|
|
||
|
0, 32, 0, 0, 0, 0, 0, 32, 0, 0,
|
||
|
0, 32, 0, 0, 0, 0, 0, 32, 0, 0,
|
||
|
0, 0, 0, 0, 0, 32, 0, 0, 0, 0,
|
||
|
30, 0, 0, 30, 0, 0, 30, 0, 30, 0,
|
||
|
0, 30, 46, 14, 11, 14, 31, 0, 0, 31,
|
||
|
0, 31, 0, 0, 31, 0, 31, 0, 0, 31,
|
||
|
0, 32, 0, 0, 32, 0, 32, 0, 0, 32,
|
||
|
0, 32, 0, 0, 32, 0, 46, 14, 14, 0,
|
||
|
31, 0, 0, 31, 0, 0, 31, 0, 31, 0,
|
||
|
0, 31, 0, 0, 31, 0, 31, 0, 0, 31,
|
||
|
|
||
|
0, 0, 31, 0, 32, 0, 0, 32, 0, 0,
|
||
|
32, 0, 32, 0, 0, 32, 0, 0, 32, 0,
|
||
|
32, 0, 0, 32, 0, 0, 32, 46, 14, 14,
|
||
|
46, 3, 14, 46, 13, 46, 46, 46, 46, 46,
|
||
|
1, 46, 1, 1, 1, 1, 1, 0
|
||
|
} ;
|
||
|
|
||
|
static const int yy_ec[256] =
|
||
|
{ 0,
|
||
|
1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
|
||
|
1, 1, 2, 1, 1, 1, 1, 1, 1, 1,
|
||
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||
|
1, 4, 5, 6, 7, 5, 5, 5, 1, 5,
|
||
|
5, 5, 8, 2, 9, 10, 5, 11, 12, 13,
|
||
|
12, 12, 12, 12, 12, 14, 12, 5, 5, 5,
|
||
|
5, 5, 5, 5, 15, 16, 16, 17, 18, 19,
|
||
|
5, 5, 20, 5, 5, 21, 22, 23, 24, 25,
|
||
|
5, 26, 27, 28, 29, 30, 5, 31, 5, 5,
|
||
|
32, 33, 34, 5, 5, 5, 16, 16, 16, 35,
|
||
|
|
||
|
36, 37, 5, 5, 38, 5, 5, 39, 5, 40,
|
||
|
41, 42, 5, 5, 43, 44, 45, 46, 5, 47,
|
||
|
5, 5, 1, 5, 1, 5, 5, 5, 5, 5,
|
||
|
5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
|
||
|
5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
|
||
|
5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
|
||
|
5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
|
||
|
5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
|
||
|
5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
|
||
|
5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
|
||
|
|
||
|
5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
|
||
|
5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
|
||
|
5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
|
||
|
5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
|
||
|
5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
|
||
|
5, 5, 5, 5, 5
|
||
|
} ;
|
||
|
|
||
|
static const int yy_meta[48] =
|
||
|
{ 0,
|
||
|
1, 2, 3, 2, 4, 5, 6, 4, 4, 1,
|
||
|
7, 7, 7, 7, 7, 7, 7, 7, 7, 4,
|
||
|
4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
|
||
|
4, 8, 1, 8, 7, 7, 7, 4, 4, 4,
|
||
|
4, 4, 4, 4, 4, 4, 4
|
||
|
} ;
|
||
|
|
||
|
static const short int yy_base[1090] =
|
||
|
{ 0,
|
||
|
0, 6, 13, 0, 59, 65, 92, 0, 104, 110,
|
||
|
116, 122, 128, 134, 140, 146, 159, 165, 164, 177,
|
||
|
183, 189, 195, 201, 207, 233, 259, 285, 311, 337,
|
||
|
363, 389, 422, 455, 481, 507, 533, 559, 222, 228,
|
||
|
256, 274, 324, 350, 787, 7663, 73, 79, 280, 0,
|
||
|
247, 768, 753, 751, 745, 726, 725, 719, 715, 18,
|
||
|
685, 702, 687, 682, 78, 96, 592, 170, 289, 368,
|
||
|
300, 627, 51, 315, 380, 328, 342, 354, 673, 0,
|
||
|
7663, 410, 677, 420, 376, 427, 436, 394, 708, 454,
|
||
|
458, 743, 466, 470, 778, 676, 7663, 7663, 486, 491,
|
||
|
|
||
|
496, 7663, 511, 517, 522, 7663, 544, 538, 813, 0,
|
||
|
7663, 579, 665, 549, 563, 848, 604, 576, 883, 0,
|
||
|
605, 7663, 617, 672, 7663, 631, 635, 639, 652, 302,
|
||
|
658, 665, 666, 686, 692, 698, 725, 0, 652, 636,
|
||
|
0, 636, 613, 607, 0, 617, 597, 590, 591, 605,
|
||
|
7663, 596, 722, 0, 727, 918, 931, 751, 755, 792,
|
||
|
759, 821, 0, 944, 957, 805, 786, 0, 825, 0,
|
||
|
830, 970, 983, 856, 0, 869, 875, 0, 834, 900,
|
||
|
987, 891, 895, 0, 996, 1022, 1035, 1003, 1007, 0,
|
||
|
1040, 1053, 1066, 1073, 1077, 0, 1082, 1095, 1108, 1115,
|
||
|
|
||
|
7663, 1119, 1124, 1132, 1140, 1144, 0, 1150, 0, 1159,
|
||
|
1172, 1185, 1192, 0, 1205, 1211, 0, 1208, 0, 1213,
|
||
|
1244, 1257, 1220, 1261, 1274, 1283, 1309, 1322, 1290, 0,
|
||
|
1335, 1341, 1347, 1353, 1359, 7663, 1294, 0, 1234, 1365,
|
||
|
1366, 1372, 0, 604, 580, 572, 569, 0, 552, 537,
|
||
|
501, 511, 519, 1370, 1374, 1393, 1428, 1441, 0, 0,
|
||
|
0, 1410, 1378, 1454, 1407, 1411, 1458, 1462, 1466, 1508,
|
||
|
1521, 1534, 1547, 1560, 191, 1479, 0, 1477, 1483, 1606,
|
||
|
1641, 1654, 0, 0, 0, 1575, 1487, 1667, 1491, 1572,
|
||
|
1584, 1576, 1623, 1680, 0, 0, 0, 0, 230, 1588,
|
||
|
|
||
|
1693, 1615, 1592, 1706, 1741, 0, 0, 0, 0, 1723,
|
||
|
1720, 1758, 1725, 1762, 1775, 1810, 0, 0, 0, 0,
|
||
|
1792, 1789, 1827, 1793, 1831, 0, 1836, 1840, 1853, 1888,
|
||
|
0, 0, 0, 0, 1870, 1867, 1905, 1872, 1909, 1914,
|
||
|
1949, 0, 0, 0, 0, 238, 1922, 1962, 1927, 1931,
|
||
|
1975, 2010, 0, 0, 0, 0, 1992, 1935, 2027, 0,
|
||
|
2040, 500, 0, 488, 493, 444, 443, 450, 456, 7663,
|
||
|
1990, 2060, 2073, 2037, 2086, 2099, 2112, 2044, 0, 2116,
|
||
|
1995, 2162, 2175, 2128, 2188, 2201, 2214, 2227, 2132, 2146,
|
||
|
2240, 2253, 2288, 2301, 2261, 2314, 2327, 2340, 2353, 2366,
|
||
|
|
||
|
2401, 2414, 2268, 2427, 2440, 2453, 2466, 2479, 2514, 2527,
|
||
|
2374, 2540, 2553, 2566, 2579, 2383, 2487, 2592, 2605, 2640,
|
||
|
2653, 2494, 2666, 2679, 2692, 2705, 2281, 437, 0, 0,
|
||
|
50, 386, 0, 7663, 2379, 2498, 2622, 2718, 2731, 0,
|
||
|
0, 0, 239, 2613, 2744, 2757, 2770, 2783, 2818, 2792,
|
||
|
2617, 2831, 2866, 0, 0, 0, 0, 272, 2796, 2800,
|
||
|
2845, 0, 2881, 205, 285, 2840, 2804, 2927, 2962, 2975,
|
||
|
0, 0, 0, 2944, 2941, 2988, 3001, 3014, 3027, 3062,
|
||
|
2946, 3035, 3075, 3110, 0, 0, 0, 0, 3092, 3039,
|
||
|
3043, 3127, 3047, 3089, 3162, 3175, 400, 3094, 3135, 3144,
|
||
|
|
||
|
3188, 3201, 0, 0, 0, 417, 3139, 3214, 3227, 3240,
|
||
|
3253, 3288, 3262, 3266, 3301, 3336, 0, 0, 0, 0,
|
||
|
437, 3270, 3274, 3315, 3310, 3341, 3346, 3381, 3394, 0,
|
||
|
0, 0, 548, 3354, 3407, 3420, 3433, 3446, 3481, 3359,
|
||
|
3363, 3494, 3529, 0, 0, 0, 0, 562, 3367, 3454,
|
||
|
3463, 3503, 3458, 3542, 3577, 3590, 0, 0, 0, 3559,
|
||
|
3507, 3603, 3616, 3629, 3642, 3677, 3512, 3556, 3690, 3725,
|
||
|
0, 0, 0, 0, 3659, 3560, 3656, 3738, 3660, 3698,
|
||
|
3773, 3786, 645, 3703, 3707, 3755, 3799, 3812, 0, 0,
|
||
|
0, 661, 3711, 3825, 3838, 3851, 3864, 3899, 3747, 3872,
|
||
|
|
||
|
3912, 3947, 0, 0, 0, 0, 680, 3876, 3880, 3926,
|
||
|
3925, 390, 370, 351, 323, 3952, 3960, 3987, 4000, 4035,
|
||
|
4048, 3967, 4083, 4096, 4131, 4144, 4008, 4157, 4170, 4183,
|
||
|
4196, 4209, 4244, 4257, 4270, 4283, 4296, 4331, 4015, 4344,
|
||
|
4357, 4370, 4065, 4056, 4383, 4396, 4431, 4444, 4104, 4479,
|
||
|
4113, 4217, 4492, 4505, 4540, 4553, 4224, 4588, 4601, 4636,
|
||
|
4649, 4304, 4662, 4675, 4688, 4701, 4714, 4749, 4762, 4775,
|
||
|
4788, 4801, 4836, 4311, 4849, 4862, 4875, 4413, 4404, 4888,
|
||
|
4901, 4936, 4949, 4452, 4984, 2858, 304, 0, 274, 296,
|
||
|
3884, 3971, 4997, 5010, 688, 5023, 5036, 4522, 4019, 5049,
|
||
|
|
||
|
5062, 5075, 689, 4061, 4108, 4461, 5088, 5101, 0, 0,
|
||
|
0, 695, 4228, 5114, 5127, 5140, 5153, 4316, 4408, 5188,
|
||
|
5223, 5236, 0, 0, 0, 712, 4456, 4519, 4570, 5249,
|
||
|
5262, 5275, 5310, 4524, 4561, 5323, 5358, 0, 0, 0,
|
||
|
0, 740, 4565, 4609, 4618, 4613, 5371, 5384, 5397, 5410,
|
||
|
4722, 4726, 4731, 4809, 4813, 5445, 5458, 757, 5471, 5484,
|
||
|
4918, 4817, 5497, 5510, 5523, 765, 4821, 4915, 5536, 5549,
|
||
|
838, 5562, 5575, 4966, 4919, 5588, 5601, 5614, 862, 4964,
|
||
|
4968, 5167, 5627, 5640, 0, 0, 0, 931, 5161, 5653,
|
||
|
5666, 5679, 5692, 5197, 5201, 5727, 5762, 5775, 0, 0,
|
||
|
|
||
|
0, 986, 5205, 5209, 5292, 5788, 5801, 5814, 5849, 5284,
|
||
|
5331, 5862, 5897, 0, 0, 0, 0, 1022, 5335, 5339,
|
||
|
5427, 5343, 5910, 5923, 5936, 5949, 5418, 5422, 5706, 5700,
|
||
|
5735, 5984, 5997, 1023, 6010, 6023, 5831, 5739, 6036, 6049,
|
||
|
6062, 1025, 5752, 268, 0, 250, 5879, 5828, 6075, 6088,
|
||
|
6123, 6136, 5870, 6171, 6184, 6219, 6232, 5957, 6267, 6280,
|
||
|
6315, 5966, 6096, 6103, 5833, 6144, 5875, 6151, 6192, 5962,
|
||
|
6199, 6108, 6240, 6247, 6156, 6288, 6301, 236, 204, 6203,
|
||
|
6251, 6328, 0, 1065, 3, 277, 6341, 6340, 6376, 6389,
|
||
|
0, 1123, 376, 411, 6402, 6344, 6437, 6450, 0, 1129,
|
||
|
|
||
|
435, 443, 6463, 6349, 6353, 6357, 6361, 6401, 6410, 6414,
|
||
|
6464, 6418, 6499, 6422, 6472, 6478, 6504, 6508, 6513, 6521,
|
||
|
6525, 6529, 6533, 6539, 6547, 6551, 6556, 3328, 213, 194,
|
||
|
6569, 0, 188, 6575, 0, 6491, 3939, 5180, 5719, 6307,
|
||
|
6579, 6586, 6592, 6593, 6599, 6600, 6606, 7663, 6619, 6627,
|
||
|
6635, 6643, 6651, 6656, 6663, 6671, 6679, 6686, 6694, 6702,
|
||
|
6710, 6718, 6726, 6733, 163, 6740, 6748, 6756, 6764, 157,
|
||
|
6772, 6780, 6788, 6796, 6804, 104, 6812, 6820, 6825, 6832,
|
||
|
6840, 6847, 93, 6854, 90, 6862, 6870, 66, 6878, 6886,
|
||
|
6894, 6902, 6910, 6918, 6926, 6934, 6942, 6950, 6958, 6966,
|
||
|
|
||
|
6974, 6982, 6990, 6998, 7006, 7011, 7018, 7026, 7034, 64,
|
||
|
7042, 7050, 7058, 7066, 7074, 7082, 7090, 7098, 7106, 7114,
|
||
|
7122, 7130, 7138, 7146, 7154, 7162, 7170, 7178, 7183, 7190,
|
||
|
7198, 7206, 7214, 7222, 7230, 7238, 7246, 7254, 7262, 7270,
|
||
|
7278, 7286, 7294, 7302, 7310, 7318, 7326, 7334, 7342, 7350,
|
||
|
7358, 7366, 7374, 7382, 7387, 7394, 7402, 7410, 7418, 7426,
|
||
|
7434, 7442, 7450, 7458, 7466, 7474, 7482, 7490, 7498, 7506,
|
||
|
7514, 7522, 7530, 7538, 7546, 7554, 7562, 7570, 7578, 7586,
|
||
|
7591, 7598, 7606, 7614, 7622, 7630, 7638, 7646, 7654
|
||
|
} ;
|
||
|
|
||
|
static const short int yy_def[1090] =
|
||
|
{ 0,
|
||
|
949, 949, 948, 3, 949, 949, 949, 7, 7, 7,
|
||
|
7, 7, 7, 7, 7, 7, 950, 950, 7, 7,
|
||
|
7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
|
||
|
7, 7, 951, 951, 7, 7, 7, 7, 952, 952,
|
||
|
952, 952, 7, 7, 948, 948, 948, 948, 953, 954,
|
||
|
953, 954, 954, 954, 954, 954, 954, 954, 954, 954,
|
||
|
954, 948, 948, 948, 948, 948, 948, 948, 948, 948,
|
||
|
948, 948, 72, 948, 948, 948, 948, 948, 948, 955,
|
||
|
948, 956, 955, 948, 948, 948, 948, 948, 948, 948,
|
||
|
948, 948, 948, 948, 948, 948, 948, 948, 948, 948,
|
||
|
|
||
|
948, 948, 948, 948, 948, 948, 948, 948, 948, 957,
|
||
|
948, 958, 957, 948, 948, 948, 948, 948, 948, 959,
|
||
|
959, 948, 960, 959, 948, 948, 948, 948, 948, 948,
|
||
|
953, 948, 961, 953, 953, 953, 953, 954, 954, 954,
|
||
|
954, 954, 954, 954, 954, 954, 954, 954, 954, 948,
|
||
|
948, 948, 948, 67, 67, 948, 962, 948, 948, 948,
|
||
|
948, 948, 73, 948, 963, 964, 948, 965, 948, 79,
|
||
|
79, 948, 966, 948, 955, 956, 956, 955, 948, 948,
|
||
|
948, 948, 948, 89, 89, 948, 967, 948, 948, 92,
|
||
|
92, 948, 968, 948, 948, 95, 95, 948, 969, 948,
|
||
|
|
||
|
948, 948, 948, 948, 948, 948, 970, 948, 109, 109,
|
||
|
948, 971, 948, 957, 958, 958, 957, 948, 116, 116,
|
||
|
948, 972, 948, 948, 948, 225, 948, 973, 948, 974,
|
||
|
974, 975, 975, 975, 975, 948, 948, 976, 977, 977,
|
||
|
977, 978, 979, 979, 979, 979, 979, 979, 979, 979,
|
||
|
979, 948, 948, 948, 948, 948, 980, 980, 258, 258,
|
||
|
258, 258, 948, 948, 948, 948, 948, 948, 948, 981,
|
||
|
981, 981, 981, 981, 274, 982, 983, 948, 948, 948,
|
||
|
984, 984, 282, 282, 282, 282, 948, 948, 948, 948,
|
||
|
948, 948, 948, 967, 294, 294, 294, 294, 294, 948,
|
||
|
|
||
|
948, 948, 948, 948, 968, 305, 305, 305, 305, 305,
|
||
|
948, 948, 948, 948, 948, 969, 316, 316, 316, 316,
|
||
|
316, 948, 948, 948, 948, 985, 948, 948, 948, 971,
|
||
|
330, 330, 330, 330, 330, 948, 948, 948, 948, 948,
|
||
|
972, 341, 341, 341, 341, 341, 948, 948, 948, 948,
|
||
|
948, 973, 352, 352, 352, 352, 352, 948, 948, 976,
|
||
|
978, 979, 979, 979, 979, 979, 979, 979, 948, 948,
|
||
|
256, 948, 986, 948, 258, 948, 987, 258, 988, 274,
|
||
|
280, 948, 989, 948, 282, 948, 990, 385, 948, 948,
|
||
|
991, 948, 948, 992, 948, 993, 948, 994, 993, 948,
|
||
|
|
||
|
948, 995, 948, 996, 948, 997, 996, 948, 948, 998,
|
||
|
948, 999, 948, 1000, 999, 948, 948, 1001, 948, 948,
|
||
|
1002, 948, 1003, 948, 1004, 1003, 1005, 1006, 1006, 1006,
|
||
|
1006, 1006, 1006, 948, 948, 948, 948, 1007, 1007, 439,
|
||
|
439, 439, 439, 948, 948, 1008, 1008, 447, 1009, 948,
|
||
|
948, 948, 1009, 453, 453, 453, 453, 453, 447, 447,
|
||
|
448, 1010, 948, 463, 463, 948, 948, 948, 1011, 1011,
|
||
|
470, 470, 470, 470, 948, 948, 1012, 1012, 478, 1013,
|
||
|
948, 948, 948, 1013, 484, 484, 484, 484, 484, 478,
|
||
|
478, 478, 948, 948, 1014, 1014, 496, 948, 948, 948,
|
||
|
|
||
|
1015, 1015, 502, 502, 502, 502, 948, 948, 1016, 1016,
|
||
|
510, 1017, 948, 948, 948, 1017, 516, 516, 516, 516,
|
||
|
516, 510, 510, 511, 948, 948, 948, 1018, 1018, 529,
|
||
|
529, 529, 529, 948, 948, 1019, 1019, 537, 1020, 948,
|
||
|
948, 948, 1020, 543, 543, 543, 543, 543, 537, 537,
|
||
|
538, 948, 948, 948, 1021, 1021, 556, 556, 556, 556,
|
||
|
948, 948, 1022, 1022, 564, 1023, 948, 948, 948, 1023,
|
||
|
570, 570, 570, 570, 570, 564, 564, 564, 948, 948,
|
||
|
1024, 1024, 582, 948, 948, 948, 1025, 1025, 588, 588,
|
||
|
588, 588, 948, 948, 1026, 1026, 596, 1027, 948, 948,
|
||
|
|
||
|
948, 1027, 602, 602, 602, 602, 602, 596, 596, 597,
|
||
|
1028, 1029, 1029, 1029, 1029, 948, 948, 1030, 1031, 1031,
|
||
|
948, 948, 1032, 948, 948, 1033, 948, 1034, 948, 1035,
|
||
|
1034, 1036, 1036, 948, 1037, 1036, 948, 1035, 948, 1038,
|
||
|
1037, 1038, 948, 948, 1039, 1040, 1040, 948, 948, 1041,
|
||
|
948, 948, 1042, 1043, 1043, 948, 948, 1044, 948, 948,
|
||
|
1045, 948, 1046, 948, 1047, 1046, 1048, 1048, 948, 1049,
|
||
|
1048, 948, 1047, 948, 1050, 1049, 1050, 948, 948, 1051,
|
||
|
1052, 1052, 948, 948, 1053, 1054, 1055, 1055, 1055, 1055,
|
||
|
948, 948, 1056, 1056, 694, 1057, 1057, 697, 948, 948,
|
||
|
|
||
|
1058, 1058, 702, 948, 948, 948, 1059, 1059, 708, 708,
|
||
|
708, 708, 948, 948, 1060, 1060, 716, 948, 948, 948,
|
||
|
1061, 1061, 722, 722, 722, 722, 716, 716, 717, 1062,
|
||
|
1062, 731, 1063, 948, 948, 948, 1063, 737, 737, 737,
|
||
|
737, 737, 731, 731, 732, 948, 948, 1064, 1064, 749,
|
||
|
749, 749, 750, 948, 948, 1065, 1065, 757, 1066, 1066,
|
||
|
760, 948, 948, 1067, 1067, 765, 948, 948, 1068, 1068,
|
||
|
770, 1069, 1069, 773, 948, 948, 1070, 1070, 778, 948,
|
||
|
948, 948, 1071, 1071, 784, 784, 784, 784, 948, 948,
|
||
|
1072, 1072, 792, 948, 948, 948, 1073, 1073, 798, 798,
|
||
|
|
||
|
798, 798, 792, 792, 793, 1074, 1074, 807, 1075, 948,
|
||
|
948, 948, 1075, 813, 813, 813, 813, 813, 807, 807,
|
||
|
808, 948, 948, 1076, 1076, 825, 825, 825, 826, 948,
|
||
|
948, 1077, 1077, 833, 1078, 1078, 836, 948, 948, 1079,
|
||
|
1079, 841, 1080, 1081, 1081, 1081, 948, 948, 1082, 1083,
|
||
|
1083, 948, 948, 1084, 1085, 1085, 948, 948, 1086, 1087,
|
||
|
1087, 948, 948, 784, 793, 792, 796, 948, 798, 808,
|
||
|
807, 812, 948, 813, 826, 825, 1080, 1081, 1081, 948,
|
||
|
948, 1082, 882, 882, 851, 851, 851, 948, 948, 1084,
|
||
|
890, 890, 856, 856, 856, 948, 948, 1086, 898, 898,
|
||
|
|
||
|
861, 861, 861, 948, 948, 784, 784, 784, 792, 792,
|
||
|
793, 948, 948, 798, 798, 798, 807, 807, 808, 948,
|
||
|
823, 813, 813, 813, 825, 825, 826, 1080, 1081, 1081,
|
||
|
1080, 1081, 1081, 1080, 1081, 1080, 1080, 1088, 1088, 1088,
|
||
|
948, 1088, 948, 1089, 1089, 1089, 1089, 0, 948, 948,
|
||
|
948, 948, 948, 948, 948, 948, 948, 948, 948, 948,
|
||
|
948, 948, 948, 948, 948, 948, 948, 948, 948, 948,
|
||
|
948, 948, 948, 948, 948, 948, 948, 948, 948, 948,
|
||
|
948, 948, 948, 948, 948, 948, 948, 948, 948, 948,
|
||
|
948, 948, 948, 948, 948, 948, 948, 948, 948, 948,
|
||
|
|
||
|
948, 948, 948, 948, 948, 948, 948, 948, 948, 948,
|
||
|
948, 948, 948, 948, 948, 948, 948, 948, 948, 948,
|
||
|
948, 948, 948, 948, 948, 948, 948, 948, 948, 948,
|
||
|
948, 948, 948, 948, 948, 948, 948, 948, 948, 948,
|
||
|
948, 948, 948, 948, 948, 948, 948, 948, 948, 948,
|
||
|
948, 948, 948, 948, 948, 948, 948, 948, 948, 948,
|
||
|
948, 948, 948, 948, 948, 948, 948, 948, 948, 948,
|
||
|
948, 948, 948, 948, 948, 948, 948, 948, 948, 948,
|
||
|
948, 948, 948, 948, 948, 948, 948, 948, 948
|
||
|
} ;
|
||
|
|
||
|
static const short int yy_nxt[7711] =
|
||
|
{ 0,
|
||
|
948, 47, 48, 47, 948, 948, 49, 47, 48, 47,
|
||
|
469, 472, 49, 46, 47, 48, 47, 50, 46, 51,
|
||
|
46, 46, 46, 46, 46, 46, 46, 50, 50, 52,
|
||
|
53, 50, 54, 50, 50, 55, 50, 56, 57, 50,
|
||
|
58, 59, 50, 50, 46, 46, 46, 50, 60, 61,
|
||
|
50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
|
||
|
47, 48, 47, 147, 148, 51, 47, 48, 47, 613,
|
||
|
462, 51, 462, 614, 129, 130, 129, 62, 63, 131,
|
||
|
132, 948, 132, 62, 63, 133, 64, 153, 154, 154,
|
||
|
154, 154, 64, 47, 48, 47, 326, 948, 51, 277,
|
||
|
|
||
|
65, 66, 67, 67, 67, 67, 155, 155, 155, 155,
|
||
|
360, 63, 68, 69, 70, 70, 70, 70, 68, 69,
|
||
|
70, 70, 70, 70, 71, 46, 72, 73, 73, 73,
|
||
|
71, 46, 72, 73, 73, 73, 74, 46, 75, 76,
|
||
|
76, 76, 74, 46, 75, 76, 76, 76, 77, 78,
|
||
|
79, 79, 79, 79, 77, 78, 79, 79, 79, 79,
|
||
|
47, 48, 47, 326, 81, 82, 47, 48, 47, 277,
|
||
|
81, 82, 84, 85, 86, 86, 86, 86, 83, 159,
|
||
|
160, 160, 160, 160, 83, 84, 85, 86, 86, 86,
|
||
|
86, 87, 88, 89, 89, 89, 89, 87, 88, 89,
|
||
|
|
||
|
89, 89, 89, 90, 91, 92, 92, 92, 92, 90,
|
||
|
91, 92, 92, 92, 92, 93, 94, 95, 95, 95,
|
||
|
95, 270, 935, 121, 48, 121, 96, 122, 123, 121,
|
||
|
48, 121, 933, 122, 123, 270, 932, 270, 97, 930,
|
||
|
98, 93, 94, 95, 95, 95, 95, 391, 135, 130,
|
||
|
135, 270, 96, 136, 124, 418, 618, 121, 48, 121,
|
||
|
124, 125, 123, 929, 97, 391, 98, 99, 100, 101,
|
||
|
101, 101, 101, 418, 618, 121, 48, 121, 96, 125,
|
||
|
123, 135, 130, 135, 469, 472, 136, 879, 124, 623,
|
||
|
102, 878, 98, 99, 100, 101, 101, 101, 101, 161,
|
||
|
|
||
|
161, 161, 161, 132, 96, 132, 124, 623, 133, 137,
|
||
|
163, 163, 163, 163, 846, 270, 102, 845, 98, 103,
|
||
|
46, 104, 105, 105, 105, 167, 167, 167, 167, 844,
|
||
|
96, 270, 126, 46, 127, 128, 128, 128, 167, 167,
|
||
|
167, 167, 106, 46, 98, 103, 46, 104, 105, 105,
|
||
|
105, 169, 170, 170, 170, 170, 96, 690, 126, 46,
|
||
|
127, 128, 128, 128, 171, 171, 171, 171, 106, 46,
|
||
|
98, 107, 108, 109, 109, 109, 109, 159, 160, 160,
|
||
|
160, 160, 96, 281, 284, 162, 181, 181, 181, 181,
|
||
|
167, 167, 167, 167, 102, 689, 98, 107, 108, 109,
|
||
|
|
||
|
109, 109, 109, 162, 185, 185, 185, 185, 96, 688,
|
||
|
168, 135, 130, 135, 687, 134, 177, 391, 281, 284,
|
||
|
102, 615, 98, 47, 48, 47, 168, 111, 112, 179,
|
||
|
180, 180, 180, 180, 645, 391, 179, 180, 180, 180,
|
||
|
180, 113, 484, 487, 182, 183, 184, 184, 184, 184,
|
||
|
484, 487, 645, 102, 650, 98, 47, 48, 47, 612,
|
||
|
111, 112, 182, 189, 190, 190, 190, 190, 191, 191,
|
||
|
191, 191, 650, 434, 113, 195, 196, 196, 196, 196,
|
||
|
197, 197, 197, 197, 433, 432, 102, 431, 98, 114,
|
||
|
115, 116, 116, 116, 116, 202, 203, 203, 203, 203,
|
||
|
|
||
|
96, 204, 204, 204, 204, 202, 203, 203, 203, 203,
|
||
|
430, 429, 102, 205, 98, 114, 115, 116, 116, 116,
|
||
|
116, 206, 206, 206, 206, 428, 96, 206, 206, 206,
|
||
|
206, 205, 206, 206, 206, 206, 370, 369, 102, 368,
|
||
|
98, 117, 118, 119, 119, 119, 119, 207, 210, 210,
|
||
|
210, 210, 96, 208, 209, 209, 209, 209, 218, 219,
|
||
|
219, 219, 219, 207, 97, 653, 98, 117, 118, 119,
|
||
|
119, 119, 119, 220, 220, 220, 220, 367, 96, 658,
|
||
|
135, 130, 135, 653, 134, 216, 226, 226, 226, 226,
|
||
|
97, 366, 98, 156, 156, 156, 365, 658, 157, 364,
|
||
|
|
||
|
363, 153, 154, 154, 154, 154, 231, 130, 231, 158,
|
||
|
134, 232, 134, 224, 225, 225, 225, 225, 234, 130,
|
||
|
234, 362, 134, 235, 253, 252, 251, 158, 164, 164,
|
||
|
164, 250, 249, 165, 248, 247, 246, 163, 163, 163,
|
||
|
163, 237, 237, 237, 237, 237, 237, 237, 237, 237,
|
||
|
237, 237, 237, 129, 130, 129, 245, 166, 131, 135,
|
||
|
130, 135, 418, 244, 136, 238, 132, 240, 132, 240,
|
||
|
243, 133, 241, 166, 172, 172, 172, 236, 680, 173,
|
||
|
418, 238, 169, 170, 170, 170, 170, 135, 130, 135,
|
||
|
174, 217, 136, 135, 130, 135, 680, 685, 136, 135,
|
||
|
|
||
|
130, 135, 201, 178, 136, 618, 623, 152, 174, 186,
|
||
|
186, 186, 849, 151, 187, 685, 150, 183, 184, 184,
|
||
|
184, 184, 149, 618, 623, 188, 135, 130, 135, 854,
|
||
|
849, 136, 155, 155, 155, 155, 948, 155, 155, 155,
|
||
|
155, 146, 145, 188, 192, 192, 192, 854, 144, 193,
|
||
|
242, 143, 189, 190, 190, 190, 190, 859, 263, 263,
|
||
|
194, 264, 264, 264, 264, 161, 161, 161, 161, 161,
|
||
|
161, 161, 161, 142, 645, 859, 162, 141, 194, 198,
|
||
|
198, 198, 650, 140, 199, 139, 948, 195, 196, 196,
|
||
|
196, 196, 645, 948, 162, 200, 167, 167, 167, 167,
|
||
|
|
||
|
650, 159, 160, 160, 160, 160, 164, 164, 164, 162,
|
||
|
948, 165, 948, 200, 211, 211, 211, 948, 948, 212,
|
||
|
948, 948, 208, 209, 209, 209, 209, 162, 265, 265,
|
||
|
213, 266, 266, 266, 266, 171, 171, 171, 171, 948,
|
||
|
171, 171, 171, 171, 181, 181, 181, 181, 213, 221,
|
||
|
221, 221, 948, 948, 222, 653, 948, 218, 219, 219,
|
||
|
219, 219, 948, 287, 287, 223, 288, 288, 288, 288,
|
||
|
135, 130, 135, 653, 134, 177, 135, 130, 135, 658,
|
||
|
134, 177, 948, 223, 227, 227, 227, 948, 948, 228,
|
||
|
948, 948, 224, 225, 225, 225, 225, 658, 289, 289,
|
||
|
|
||
|
229, 290, 290, 290, 290, 185, 185, 185, 185, 179,
|
||
|
180, 180, 180, 180, 948, 948, 948, 182, 229, 156,
|
||
|
156, 156, 948, 948, 157, 948, 254, 255, 256, 256,
|
||
|
256, 256, 258, 156, 258, 182, 948, 259, 948, 260,
|
||
|
261, 262, 262, 262, 262, 164, 164, 164, 864, 948,
|
||
|
165, 948, 267, 948, 268, 269, 269, 269, 271, 164,
|
||
|
271, 948, 948, 272, 948, 273, 864, 274, 275, 275,
|
||
|
275, 172, 172, 172, 948, 948, 173, 948, 278, 279,
|
||
|
280, 280, 280, 280, 282, 172, 282, 948, 948, 283,
|
||
|
948, 284, 285, 286, 286, 286, 286, 181, 181, 181,
|
||
|
|
||
|
181, 948, 948, 869, 182, 948, 185, 185, 185, 185,
|
||
|
300, 300, 948, 301, 301, 301, 301, 191, 191, 191,
|
||
|
191, 869, 182, 186, 186, 186, 948, 948, 187, 948,
|
||
|
291, 292, 293, 293, 293, 293, 295, 186, 295, 874,
|
||
|
680, 296, 685, 297, 298, 299, 299, 299, 299, 948,
|
||
|
191, 191, 191, 191, 192, 192, 192, 874, 680, 193,
|
||
|
685, 302, 303, 304, 304, 304, 304, 306, 192, 306,
|
||
|
948, 948, 307, 948, 308, 309, 310, 310, 310, 310,
|
||
|
311, 311, 849, 312, 312, 312, 312, 197, 197, 197,
|
||
|
197, 948, 197, 197, 197, 197, 198, 198, 198, 948,
|
||
|
|
||
|
849, 199, 948, 313, 314, 315, 315, 315, 315, 317,
|
||
|
198, 317, 948, 948, 318, 948, 319, 320, 321, 321,
|
||
|
321, 321, 322, 322, 948, 323, 323, 323, 323, 204,
|
||
|
204, 204, 204, 202, 203, 203, 203, 203, 948, 948,
|
||
|
854, 205, 204, 204, 204, 204, 859, 324, 324, 205,
|
||
|
325, 325, 325, 325, 206, 206, 206, 206, 854, 205,
|
||
|
210, 210, 210, 210, 859, 948, 948, 205, 948, 210,
|
||
|
210, 210, 210, 211, 211, 211, 948, 948, 212, 948,
|
||
|
327, 328, 329, 329, 329, 329, 331, 211, 331, 948,
|
||
|
948, 332, 948, 333, 334, 335, 335, 335, 335, 336,
|
||
|
|
||
|
336, 948, 337, 337, 337, 337, 135, 130, 135, 948,
|
||
|
134, 216, 135, 130, 135, 948, 134, 216, 220, 220,
|
||
|
220, 220, 948, 220, 220, 220, 220, 347, 347, 948,
|
||
|
348, 348, 348, 348, 948, 240, 134, 240, 134, 948,
|
||
|
241, 948, 134, 948, 134, 221, 221, 221, 948, 948,
|
||
|
222, 948, 338, 339, 340, 340, 340, 340, 342, 221,
|
||
|
342, 948, 948, 343, 948, 344, 345, 346, 346, 346,
|
||
|
346, 226, 226, 226, 226, 227, 227, 227, 948, 948,
|
||
|
228, 948, 948, 224, 225, 225, 225, 225, 948, 948,
|
||
|
948, 229, 948, 226, 226, 226, 226, 358, 358, 948,
|
||
|
|
||
|
359, 359, 359, 359, 237, 237, 237, 237, 948, 229,
|
||
|
227, 227, 227, 948, 948, 228, 948, 349, 350, 351,
|
||
|
351, 351, 351, 353, 227, 353, 948, 948, 354, 948,
|
||
|
355, 356, 357, 357, 357, 357, 231, 130, 231, 948,
|
||
|
948, 232, 234, 130, 234, 948, 134, 235, 234, 130,
|
||
|
234, 948, 134, 235, 234, 130, 234, 948, 134, 235,
|
||
|
234, 130, 234, 948, 134, 235, 240, 240, 240, 240,
|
||
|
948, 241, 241, 135, 130, 135, 948, 948, 136, 255,
|
||
|
256, 256, 256, 256, 371, 371, 371, 371, 264, 264,
|
||
|
264, 264, 948, 361, 372, 372, 372, 948, 948, 373,
|
||
|
|
||
|
948, 948, 255, 256, 256, 256, 256, 948, 948, 948,
|
||
|
374, 375, 376, 375, 948, 948, 377, 266, 266, 266,
|
||
|
266, 266, 266, 266, 266, 948, 948, 378, 374, 258,
|
||
|
156, 258, 948, 948, 259, 948, 260, 261, 262, 262,
|
||
|
262, 262, 258, 156, 258, 378, 948, 259, 948, 260,
|
||
|
261, 262, 262, 262, 262, 156, 156, 156, 948, 948,
|
||
|
157, 948, 948, 948, 264, 264, 264, 264, 269, 269,
|
||
|
269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
|
||
|
164, 164, 164, 948, 948, 165, 279, 280, 280, 280,
|
||
|
280, 948, 379, 381, 381, 381, 381, 288, 288, 288,
|
||
|
|
||
|
288, 290, 290, 290, 290, 948, 948, 948, 379, 271,
|
||
|
164, 271, 948, 948, 272, 948, 273, 948, 274, 275,
|
||
|
275, 275, 271, 164, 271, 948, 948, 272, 948, 273,
|
||
|
948, 274, 275, 275, 275, 271, 164, 271, 948, 948,
|
||
|
272, 948, 273, 948, 274, 275, 275, 275, 271, 164,
|
||
|
271, 948, 948, 272, 948, 273, 948, 274, 275, 275,
|
||
|
275, 271, 164, 271, 948, 948, 272, 948, 273, 948,
|
||
|
274, 275, 275, 275, 948, 948, 385, 386, 385, 948,
|
||
|
948, 387, 290, 290, 290, 290, 389, 389, 389, 389,
|
||
|
380, 948, 388, 292, 293, 293, 293, 293, 301, 301,
|
||
|
|
||
|
301, 301, 392, 392, 392, 392, 380, 382, 382, 382,
|
||
|
388, 948, 383, 948, 948, 279, 280, 280, 280, 280,
|
||
|
948, 948, 948, 384, 303, 304, 304, 304, 304, 948,
|
||
|
948, 948, 292, 293, 293, 293, 293, 948, 948, 948,
|
||
|
390, 384, 282, 172, 282, 948, 948, 283, 948, 284,
|
||
|
285, 286, 286, 286, 286, 282, 172, 282, 390, 948,
|
||
|
283, 948, 284, 285, 286, 286, 286, 286, 172, 172,
|
||
|
172, 948, 948, 173, 948, 948, 948, 288, 288, 288,
|
||
|
288, 295, 186, 295, 948, 948, 296, 948, 297, 298,
|
||
|
299, 299, 299, 299, 186, 186, 186, 948, 948, 187,
|
||
|
|
||
|
948, 948, 948, 301, 301, 301, 301, 393, 393, 393,
|
||
|
948, 948, 394, 948, 948, 303, 304, 304, 304, 304,
|
||
|
948, 948, 948, 395, 396, 397, 396, 948, 948, 398,
|
||
|
312, 312, 312, 312, 314, 315, 315, 315, 315, 948,
|
||
|
399, 395, 306, 192, 306, 948, 948, 307, 948, 308,
|
||
|
309, 310, 310, 310, 310, 948, 948, 948, 399, 192,
|
||
|
192, 192, 948, 948, 193, 948, 948, 948, 312, 312,
|
||
|
312, 312, 400, 400, 400, 400, 401, 401, 401, 948,
|
||
|
948, 402, 948, 948, 314, 315, 315, 315, 315, 948,
|
||
|
948, 948, 403, 404, 405, 404, 948, 948, 406, 323,
|
||
|
|
||
|
323, 323, 323, 325, 325, 325, 325, 948, 948, 407,
|
||
|
403, 317, 198, 317, 948, 948, 318, 948, 319, 320,
|
||
|
321, 321, 321, 321, 948, 948, 948, 407, 198, 198,
|
||
|
198, 948, 948, 199, 948, 948, 948, 323, 323, 323,
|
||
|
323, 325, 325, 325, 325, 328, 329, 329, 329, 329,
|
||
|
408, 408, 408, 408, 409, 409, 409, 948, 948, 410,
|
||
|
948, 948, 328, 329, 329, 329, 329, 948, 948, 948,
|
||
|
411, 412, 413, 412, 948, 948, 414, 337, 337, 337,
|
||
|
337, 339, 340, 340, 340, 340, 948, 415, 411, 331,
|
||
|
211, 331, 948, 948, 332, 948, 333, 334, 335, 335,
|
||
|
|
||
|
335, 335, 948, 948, 948, 415, 211, 211, 211, 948,
|
||
|
948, 212, 948, 948, 948, 337, 337, 337, 337, 416,
|
||
|
416, 416, 416, 339, 340, 340, 340, 340, 948, 948,
|
||
|
948, 417, 348, 348, 348, 348, 350, 351, 351, 351,
|
||
|
351, 419, 419, 419, 419, 359, 359, 359, 359, 417,
|
||
|
342, 221, 342, 948, 948, 343, 948, 344, 345, 346,
|
||
|
346, 346, 346, 221, 221, 221, 948, 948, 222, 948,
|
||
|
948, 948, 348, 348, 348, 348, 420, 420, 420, 948,
|
||
|
948, 421, 948, 948, 350, 351, 351, 351, 351, 948,
|
||
|
948, 948, 422, 423, 424, 423, 948, 948, 425, 948,
|
||
|
|
||
|
371, 371, 371, 371, 948, 381, 381, 381, 381, 426,
|
||
|
422, 353, 227, 353, 948, 948, 354, 948, 355, 356,
|
||
|
357, 357, 357, 357, 948, 948, 948, 426, 227, 227,
|
||
|
227, 948, 948, 228, 948, 948, 948, 359, 359, 359,
|
||
|
359, 135, 130, 135, 444, 444, 136, 445, 445, 445,
|
||
|
445, 459, 460, 948, 461, 461, 461, 461, 948, 948,
|
||
|
427, 372, 372, 372, 948, 948, 373, 948, 435, 436,
|
||
|
437, 437, 437, 437, 439, 372, 439, 948, 948, 440,
|
||
|
948, 441, 442, 443, 443, 443, 443, 375, 376, 375,
|
||
|
948, 948, 377, 948, 446, 447, 448, 448, 448, 448,
|
||
|
|
||
|
376, 376, 376, 948, 948, 449, 948, 450, 451, 452,
|
||
|
452, 452, 452, 454, 376, 454, 948, 948, 455, 948,
|
||
|
456, 457, 458, 458, 458, 458, 463, 464, 464, 464,
|
||
|
465, 465, 465, 465, 465, 475, 475, 948, 476, 476,
|
||
|
476, 476, 389, 389, 389, 389, 270, 948, 948, 390,
|
||
|
465, 465, 465, 493, 493, 948, 494, 494, 494, 494,
|
||
|
948, 948, 270, 382, 382, 382, 948, 390, 383, 948,
|
||
|
466, 467, 468, 468, 468, 468, 470, 382, 470, 948,
|
||
|
948, 471, 948, 472, 473, 474, 474, 474, 474, 385,
|
||
|
386, 385, 948, 948, 387, 948, 477, 478, 479, 479,
|
||
|
|
||
|
479, 479, 386, 386, 386, 948, 948, 480, 948, 481,
|
||
|
482, 483, 483, 483, 483, 485, 386, 485, 948, 948,
|
||
|
486, 948, 487, 488, 489, 489, 489, 489, 282, 172,
|
||
|
282, 948, 948, 283, 490, 491, 285, 492, 492, 492,
|
||
|
492, 295, 186, 295, 948, 948, 296, 495, 496, 298,
|
||
|
497, 497, 497, 497, 393, 393, 393, 948, 948, 394,
|
||
|
948, 948, 948, 392, 392, 392, 392, 948, 507, 507,
|
||
|
395, 508, 508, 508, 508, 534, 534, 948, 535, 535,
|
||
|
535, 535, 135, 130, 611, 948, 948, 136, 395, 393,
|
||
|
393, 393, 948, 948, 394, 948, 498, 499, 500, 500,
|
||
|
|
||
|
500, 500, 502, 393, 502, 948, 948, 503, 948, 504,
|
||
|
505, 506, 506, 506, 506, 396, 397, 396, 948, 948,
|
||
|
398, 948, 509, 510, 511, 511, 511, 511, 397, 397,
|
||
|
397, 948, 948, 512, 948, 513, 514, 515, 515, 515,
|
||
|
515, 517, 397, 517, 948, 948, 518, 948, 519, 520,
|
||
|
521, 521, 521, 521, 306, 192, 306, 948, 948, 307,
|
||
|
522, 523, 309, 524, 524, 524, 524, 401, 401, 401,
|
||
|
948, 948, 402, 948, 948, 948, 400, 400, 400, 400,
|
||
|
948, 561, 561, 403, 562, 562, 562, 562, 436, 437,
|
||
|
437, 437, 437, 416, 416, 416, 416, 948, 948, 948,
|
||
|
|
||
|
417, 403, 401, 401, 401, 948, 948, 402, 948, 525,
|
||
|
526, 527, 527, 527, 527, 529, 401, 529, 417, 948,
|
||
|
530, 948, 531, 532, 533, 533, 533, 533, 404, 405,
|
||
|
404, 948, 948, 406, 948, 536, 537, 538, 538, 538,
|
||
|
538, 405, 405, 405, 948, 948, 539, 948, 540, 541,
|
||
|
542, 542, 542, 542, 544, 405, 544, 948, 948, 545,
|
||
|
948, 546, 547, 548, 548, 548, 548, 317, 198, 317,
|
||
|
948, 948, 318, 549, 550, 320, 551, 551, 551, 551,
|
||
|
409, 409, 409, 948, 948, 410, 948, 948, 948, 408,
|
||
|
408, 408, 408, 948, 579, 579, 411, 580, 580, 580,
|
||
|
|
||
|
580, 593, 593, 948, 594, 594, 594, 594, 616, 616,
|
||
|
616, 616, 948, 948, 411, 409, 409, 409, 948, 948,
|
||
|
410, 948, 552, 553, 554, 554, 554, 554, 556, 409,
|
||
|
556, 948, 948, 557, 948, 558, 559, 560, 560, 560,
|
||
|
560, 412, 413, 412, 948, 948, 414, 948, 563, 564,
|
||
|
565, 565, 565, 565, 413, 413, 413, 948, 948, 566,
|
||
|
948, 567, 568, 569, 569, 569, 569, 571, 413, 571,
|
||
|
948, 948, 572, 948, 573, 574, 575, 575, 575, 575,
|
||
|
331, 211, 331, 948, 948, 332, 576, 577, 334, 578,
|
||
|
578, 578, 578, 342, 221, 342, 948, 948, 343, 581,
|
||
|
|
||
|
582, 345, 583, 583, 583, 583, 420, 420, 420, 948,
|
||
|
948, 421, 948, 948, 948, 419, 419, 419, 419, 948,
|
||
|
948, 948, 422, 445, 445, 445, 445, 621, 621, 621,
|
||
|
621, 436, 437, 437, 437, 437, 948, 948, 948, 617,
|
||
|
422, 420, 420, 420, 948, 948, 421, 948, 584, 585,
|
||
|
586, 586, 586, 586, 588, 420, 588, 617, 948, 589,
|
||
|
948, 590, 591, 592, 592, 592, 592, 423, 424, 423,
|
||
|
948, 948, 425, 948, 595, 596, 597, 597, 597, 597,
|
||
|
424, 424, 424, 948, 948, 598, 948, 599, 600, 601,
|
||
|
601, 601, 601, 603, 424, 603, 948, 948, 604, 948,
|
||
|
|
||
|
605, 606, 607, 607, 607, 607, 353, 227, 353, 948,
|
||
|
948, 354, 608, 609, 356, 610, 610, 610, 610, 439,
|
||
|
372, 439, 948, 948, 440, 948, 441, 442, 443, 443,
|
||
|
443, 443, 439, 372, 439, 948, 948, 440, 948, 441,
|
||
|
442, 443, 443, 443, 443, 372, 372, 372, 948, 948,
|
||
|
373, 948, 948, 948, 445, 445, 445, 445, 258, 156,
|
||
|
258, 948, 948, 259, 948, 260, 447, 448, 448, 448,
|
||
|
448, 258, 156, 258, 948, 948, 259, 948, 260, 261,
|
||
|
619, 619, 619, 619, 375, 376, 375, 948, 948, 377,
|
||
|
948, 948, 447, 448, 448, 448, 448, 948, 948, 948,
|
||
|
|
||
|
620, 451, 452, 452, 452, 452, 461, 461, 461, 461,
|
||
|
461, 461, 461, 461, 624, 624, 624, 624, 620, 454,
|
||
|
376, 454, 948, 948, 455, 948, 456, 457, 458, 458,
|
||
|
458, 458, 372, 372, 372, 948, 948, 373, 948, 948,
|
||
|
451, 452, 452, 452, 452, 948, 948, 948, 622, 467,
|
||
|
468, 468, 468, 468, 261, 461, 461, 461, 461, 135,
|
||
|
130, 135, 378, 948, 136, 948, 622, 454, 376, 454,
|
||
|
843, 948, 455, 948, 456, 457, 458, 458, 458, 458,
|
||
|
378, 270, 271, 164, 271, 270, 270, 272, 270, 273,
|
||
|
270, 463, 464, 464, 464, 465, 465, 465, 465, 465,
|
||
|
|
||
|
270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
|
||
|
270, 380, 270, 270, 270, 465, 465, 465, 270, 270,
|
||
|
270, 270, 270, 270, 270, 270, 270, 380, 625, 625,
|
||
|
625, 948, 948, 626, 948, 948, 467, 468, 468, 468,
|
||
|
468, 948, 948, 948, 627, 628, 629, 628, 948, 948,
|
||
|
630, 476, 476, 476, 476, 482, 483, 483, 483, 483,
|
||
|
948, 631, 627, 470, 382, 470, 948, 948, 471, 948,
|
||
|
472, 473, 474, 474, 474, 474, 470, 382, 470, 631,
|
||
|
948, 471, 948, 472, 473, 474, 474, 474, 474, 382,
|
||
|
382, 382, 948, 948, 383, 948, 948, 948, 476, 476,
|
||
|
|
||
|
476, 476, 282, 172, 282, 948, 948, 283, 948, 284,
|
||
|
478, 479, 479, 479, 479, 282, 172, 282, 948, 948,
|
||
|
283, 948, 284, 285, 632, 632, 632, 632, 633, 634,
|
||
|
633, 948, 948, 635, 948, 948, 478, 479, 479, 479,
|
||
|
479, 948, 948, 948, 636, 637, 637, 637, 637, 492,
|
||
|
492, 492, 492, 492, 492, 492, 492, 494, 494, 494,
|
||
|
494, 948, 636, 485, 386, 485, 948, 948, 486, 948,
|
||
|
487, 488, 489, 489, 489, 489, 629, 629, 629, 948,
|
||
|
948, 638, 948, 948, 482, 483, 483, 483, 483, 948,
|
||
|
948, 948, 639, 640, 634, 640, 948, 948, 641, 494,
|
||
|
|
||
|
494, 494, 494, 499, 500, 500, 500, 500, 948, 642,
|
||
|
639, 485, 386, 485, 948, 948, 486, 948, 487, 488,
|
||
|
489, 489, 489, 489, 948, 948, 948, 642, 385, 386,
|
||
|
385, 948, 948, 387, 948, 948, 948, 492, 492, 492,
|
||
|
492, 948, 948, 948, 388, 643, 643, 643, 643, 508,
|
||
|
508, 508, 508, 499, 500, 500, 500, 500, 948, 948,
|
||
|
948, 644, 388, 295, 186, 295, 948, 948, 296, 948,
|
||
|
297, 298, 497, 497, 497, 497, 295, 186, 295, 644,
|
||
|
948, 296, 948, 297, 298, 497, 497, 497, 497, 502,
|
||
|
393, 502, 948, 948, 503, 948, 504, 505, 506, 506,
|
||
|
|
||
|
506, 506, 502, 393, 502, 948, 948, 503, 948, 504,
|
||
|
505, 506, 506, 506, 506, 393, 393, 393, 948, 948,
|
||
|
394, 948, 948, 948, 508, 508, 508, 508, 306, 192,
|
||
|
306, 948, 948, 307, 948, 308, 510, 511, 511, 511,
|
||
|
511, 306, 192, 306, 948, 948, 307, 948, 308, 309,
|
||
|
646, 646, 646, 646, 396, 397, 396, 948, 948, 398,
|
||
|
948, 948, 510, 511, 511, 511, 511, 948, 948, 948,
|
||
|
647, 514, 515, 515, 515, 515, 648, 648, 648, 648,
|
||
|
524, 524, 524, 524, 524, 524, 524, 524, 647, 517,
|
||
|
397, 517, 948, 948, 518, 948, 519, 520, 521, 521,
|
||
|
|
||
|
521, 521, 393, 393, 393, 948, 948, 394, 948, 948,
|
||
|
514, 515, 515, 515, 515, 948, 948, 948, 649, 526,
|
||
|
527, 527, 527, 527, 309, 524, 524, 524, 524, 135,
|
||
|
130, 931, 399, 948, 136, 948, 649, 517, 397, 517,
|
||
|
948, 948, 518, 948, 519, 520, 521, 521, 521, 521,
|
||
|
399, 651, 651, 651, 651, 526, 527, 527, 527, 527,
|
||
|
948, 948, 948, 652, 535, 535, 535, 535, 541, 542,
|
||
|
542, 542, 542, 656, 656, 656, 656, 551, 551, 551,
|
||
|
551, 652, 529, 401, 529, 948, 948, 530, 948, 531,
|
||
|
532, 533, 533, 533, 533, 529, 401, 529, 948, 948,
|
||
|
|
||
|
530, 948, 531, 532, 533, 533, 533, 533, 401, 401,
|
||
|
401, 948, 948, 402, 948, 948, 948, 535, 535, 535,
|
||
|
535, 317, 198, 317, 948, 948, 318, 948, 319, 537,
|
||
|
538, 538, 538, 538, 317, 198, 317, 948, 948, 318,
|
||
|
948, 319, 320, 654, 654, 654, 654, 404, 405, 404,
|
||
|
948, 948, 406, 948, 948, 537, 538, 538, 538, 538,
|
||
|
948, 948, 948, 655, 551, 551, 551, 551, 659, 659,
|
||
|
659, 659, 320, 551, 551, 551, 551, 948, 948, 948,
|
||
|
407, 655, 544, 405, 544, 948, 948, 545, 948, 546,
|
||
|
547, 548, 548, 548, 548, 401, 401, 401, 407, 948,
|
||
|
|
||
|
402, 948, 948, 541, 542, 542, 542, 542, 948, 948,
|
||
|
948, 657, 553, 554, 554, 554, 554, 562, 562, 562,
|
||
|
562, 568, 569, 569, 569, 569, 948, 948, 948, 657,
|
||
|
544, 405, 544, 948, 948, 545, 948, 546, 547, 548,
|
||
|
548, 548, 548, 660, 660, 660, 948, 948, 661, 948,
|
||
|
948, 553, 554, 554, 554, 554, 948, 948, 948, 662,
|
||
|
663, 664, 663, 948, 948, 665, 672, 672, 672, 672,
|
||
|
578, 578, 578, 578, 948, 948, 666, 662, 556, 409,
|
||
|
556, 948, 948, 557, 948, 558, 559, 560, 560, 560,
|
||
|
560, 556, 409, 556, 666, 948, 557, 948, 558, 559,
|
||
|
|
||
|
560, 560, 560, 560, 409, 409, 409, 948, 948, 410,
|
||
|
948, 948, 948, 562, 562, 562, 562, 331, 211, 331,
|
||
|
948, 948, 332, 948, 333, 564, 565, 565, 565, 565,
|
||
|
331, 211, 331, 948, 948, 332, 948, 333, 334, 667,
|
||
|
667, 667, 667, 668, 669, 668, 948, 948, 670, 948,
|
||
|
948, 564, 565, 565, 565, 565, 948, 948, 948, 671,
|
||
|
675, 669, 675, 948, 948, 676, 578, 578, 578, 578,
|
||
|
580, 580, 580, 580, 948, 948, 677, 671, 571, 413,
|
||
|
571, 948, 948, 572, 948, 573, 574, 575, 575, 575,
|
||
|
575, 664, 664, 664, 677, 948, 673, 948, 948, 568,
|
||
|
|
||
|
569, 569, 569, 569, 948, 948, 948, 674, 580, 580,
|
||
|
580, 580, 585, 586, 586, 586, 586, 678, 678, 678,
|
||
|
678, 594, 594, 594, 594, 674, 571, 413, 571, 948,
|
||
|
948, 572, 948, 573, 574, 575, 575, 575, 575, 412,
|
||
|
413, 412, 948, 948, 414, 948, 948, 948, 578, 578,
|
||
|
578, 578, 948, 948, 948, 415, 600, 601, 601, 601,
|
||
|
601, 948, 948, 948, 585, 586, 586, 586, 586, 948,
|
||
|
948, 948, 679, 415, 342, 221, 342, 948, 948, 343,
|
||
|
948, 344, 345, 583, 583, 583, 583, 342, 221, 342,
|
||
|
679, 948, 343, 948, 344, 345, 583, 583, 583, 583,
|
||
|
|
||
|
588, 420, 588, 948, 948, 589, 948, 590, 591, 592,
|
||
|
592, 592, 592, 588, 420, 588, 948, 948, 589, 948,
|
||
|
590, 591, 592, 592, 592, 592, 420, 420, 420, 948,
|
||
|
948, 421, 948, 948, 948, 594, 594, 594, 594, 353,
|
||
|
227, 353, 948, 948, 354, 948, 355, 596, 597, 597,
|
||
|
597, 597, 353, 227, 353, 948, 948, 354, 948, 355,
|
||
|
356, 681, 681, 681, 681, 423, 424, 423, 948, 948,
|
||
|
425, 948, 948, 596, 597, 597, 597, 597, 948, 948,
|
||
|
948, 682, 683, 683, 683, 683, 610, 610, 610, 610,
|
||
|
610, 610, 610, 610, 692, 692, 692, 692, 948, 682,
|
||
|
|
||
|
603, 424, 603, 948, 948, 604, 948, 605, 606, 607,
|
||
|
607, 607, 607, 420, 420, 420, 948, 948, 421, 948,
|
||
|
948, 600, 601, 601, 601, 601, 135, 130, 135, 684,
|
||
|
948, 136, 948, 948, 948, 356, 610, 610, 610, 610,
|
||
|
135, 130, 135, 426, 948, 136, 948, 684, 603, 424,
|
||
|
603, 948, 938, 604, 686, 605, 606, 607, 607, 607,
|
||
|
607, 426, 616, 616, 616, 616, 948, 691, 691, 617,
|
||
|
692, 692, 692, 692, 699, 699, 948, 700, 700, 700,
|
||
|
700, 692, 692, 692, 692, 948, 948, 617, 439, 372,
|
||
|
439, 948, 948, 440, 693, 694, 442, 695, 695, 695,
|
||
|
|
||
|
695, 375, 376, 375, 948, 948, 377, 948, 260, 261,
|
||
|
619, 619, 619, 619, 948, 713, 713, 620, 714, 714,
|
||
|
714, 714, 746, 746, 948, 747, 747, 747, 747, 700,
|
||
|
700, 700, 700, 948, 948, 620, 258, 156, 258, 948,
|
||
|
948, 259, 696, 697, 261, 698, 698, 698, 698, 372,
|
||
|
372, 372, 948, 948, 373, 948, 948, 948, 621, 621,
|
||
|
621, 621, 948, 754, 754, 622, 755, 755, 755, 755,
|
||
|
705, 706, 706, 706, 706, 643, 643, 643, 643, 948,
|
||
|
948, 948, 644, 622, 454, 376, 454, 948, 948, 455,
|
||
|
701, 702, 457, 703, 703, 703, 703, 625, 625, 625,
|
||
|
|
||
|
644, 948, 626, 948, 948, 948, 624, 624, 624, 624,
|
||
|
948, 762, 762, 627, 763, 763, 763, 763, 847, 847,
|
||
|
847, 847, 948, 651, 651, 651, 651, 948, 948, 948,
|
||
|
652, 627, 625, 625, 625, 948, 948, 626, 948, 704,
|
||
|
705, 706, 706, 706, 706, 708, 625, 708, 652, 948,
|
||
|
709, 948, 710, 711, 712, 712, 712, 712, 628, 629,
|
||
|
628, 948, 948, 630, 948, 715, 716, 717, 717, 717,
|
||
|
717, 629, 629, 629, 948, 948, 638, 948, 718, 719,
|
||
|
720, 720, 720, 720, 722, 629, 722, 948, 948, 723,
|
||
|
948, 724, 725, 726, 726, 726, 726, 470, 382, 470,
|
||
|
|
||
|
948, 948, 471, 727, 728, 473, 729, 729, 729, 729,
|
||
|
633, 634, 633, 948, 948, 635, 948, 284, 285, 632,
|
||
|
632, 632, 632, 948, 767, 767, 636, 768, 768, 768,
|
||
|
768, 775, 775, 948, 776, 776, 776, 776, 714, 714,
|
||
|
714, 714, 948, 948, 636, 633, 634, 633, 948, 948,
|
||
|
635, 948, 730, 731, 732, 732, 732, 732, 634, 634,
|
||
|
634, 948, 948, 733, 948, 734, 735, 736, 736, 736,
|
||
|
736, 738, 634, 738, 948, 948, 739, 948, 740, 741,
|
||
|
742, 742, 742, 742, 282, 172, 282, 948, 948, 283,
|
||
|
743, 744, 285, 745, 745, 745, 745, 629, 629, 629,
|
||
|
|
||
|
948, 948, 638, 948, 948, 948, 637, 637, 637, 637,
|
||
|
948, 789, 789, 639, 790, 790, 790, 790, 822, 822,
|
||
|
948, 823, 823, 823, 823, 719, 720, 720, 720, 720,
|
||
|
948, 639, 722, 629, 722, 948, 948, 723, 948, 724,
|
||
|
725, 726, 726, 726, 726, 640, 634, 640, 948, 948,
|
||
|
641, 948, 748, 749, 750, 750, 750, 750, 738, 634,
|
||
|
738, 948, 948, 739, 948, 740, 741, 742, 742, 742,
|
||
|
742, 485, 386, 485, 948, 948, 486, 751, 752, 488,
|
||
|
753, 753, 753, 753, 502, 393, 502, 948, 948, 503,
|
||
|
756, 757, 505, 758, 758, 758, 758, 396, 397, 396,
|
||
|
|
||
|
948, 948, 398, 948, 308, 309, 646, 646, 646, 646,
|
||
|
948, 830, 830, 647, 831, 831, 831, 831, 852, 852,
|
||
|
852, 852, 948, 678, 678, 678, 678, 948, 948, 948,
|
||
|
679, 647, 306, 192, 306, 948, 948, 307, 759, 760,
|
||
|
309, 761, 761, 761, 761, 393, 393, 393, 679, 948,
|
||
|
394, 948, 948, 948, 648, 648, 648, 648, 948, 838,
|
||
|
838, 649, 839, 839, 839, 839, 729, 729, 729, 729,
|
||
|
705, 706, 706, 706, 706, 948, 948, 948, 848, 649,
|
||
|
517, 397, 517, 948, 948, 518, 764, 765, 520, 766,
|
||
|
766, 766, 766, 529, 401, 529, 848, 948, 530, 769,
|
||
|
|
||
|
770, 532, 771, 771, 771, 771, 404, 405, 404, 948,
|
||
|
948, 406, 948, 319, 320, 654, 654, 654, 654, 948,
|
||
|
948, 948, 655, 375, 376, 375, 948, 948, 377, 729,
|
||
|
729, 729, 729, 735, 736, 736, 736, 736, 948, 378,
|
||
|
655, 317, 198, 317, 948, 948, 318, 772, 773, 320,
|
||
|
774, 774, 774, 774, 401, 401, 401, 378, 948, 402,
|
||
|
948, 948, 948, 656, 656, 656, 656, 948, 948, 948,
|
||
|
657, 857, 857, 857, 857, 745, 745, 745, 745, 473,
|
||
|
729, 729, 729, 729, 948, 948, 948, 631, 657, 544,
|
||
|
405, 544, 948, 948, 545, 777, 778, 547, 779, 779,
|
||
|
|
||
|
779, 779, 660, 660, 660, 631, 948, 661, 948, 948,
|
||
|
948, 659, 659, 659, 659, 948, 948, 948, 662, 745,
|
||
|
745, 745, 745, 747, 747, 747, 747, 285, 745, 745,
|
||
|
745, 745, 948, 948, 948, 388, 662, 660, 660, 660,
|
||
|
948, 948, 661, 948, 780, 781, 782, 782, 782, 782,
|
||
|
784, 660, 784, 388, 948, 785, 948, 786, 787, 788,
|
||
|
788, 788, 788, 663, 664, 663, 948, 948, 665, 948,
|
||
|
791, 792, 793, 793, 793, 793, 664, 664, 664, 948,
|
||
|
948, 673, 948, 794, 795, 796, 796, 796, 796, 798,
|
||
|
664, 798, 948, 948, 799, 948, 800, 801, 802, 802,
|
||
|
|
||
|
802, 802, 556, 409, 556, 948, 948, 557, 803, 804,
|
||
|
559, 805, 805, 805, 805, 668, 669, 668, 948, 948,
|
||
|
670, 948, 333, 334, 667, 667, 667, 667, 948, 948,
|
||
|
948, 671, 753, 753, 753, 753, 753, 753, 753, 753,
|
||
|
488, 753, 753, 753, 753, 948, 948, 948, 642, 671,
|
||
|
668, 669, 668, 948, 948, 670, 948, 806, 807, 808,
|
||
|
808, 808, 808, 669, 669, 669, 642, 948, 809, 948,
|
||
|
810, 811, 812, 812, 812, 812, 814, 669, 814, 948,
|
||
|
948, 815, 948, 816, 817, 818, 818, 818, 818, 331,
|
||
|
211, 331, 948, 948, 332, 819, 820, 334, 821, 821,
|
||
|
|
||
|
821, 821, 664, 664, 664, 948, 948, 673, 948, 948,
|
||
|
948, 672, 672, 672, 672, 948, 948, 948, 674, 755,
|
||
|
755, 755, 755, 755, 755, 755, 755, 763, 763, 763,
|
||
|
763, 768, 768, 768, 768, 948, 674, 798, 664, 798,
|
||
|
948, 948, 799, 948, 800, 801, 802, 802, 802, 802,
|
||
|
675, 669, 675, 948, 948, 676, 948, 824, 825, 826,
|
||
|
826, 826, 826, 814, 669, 814, 948, 948, 815, 948,
|
||
|
816, 817, 818, 818, 818, 818, 571, 413, 571, 948,
|
||
|
948, 572, 827, 828, 574, 829, 829, 829, 829, 588,
|
||
|
420, 588, 948, 948, 589, 832, 833, 591, 834, 834,
|
||
|
|
||
|
834, 834, 423, 424, 423, 948, 948, 425, 948, 355,
|
||
|
356, 681, 681, 681, 681, 948, 948, 948, 682, 396,
|
||
|
397, 396, 948, 948, 398, 768, 768, 768, 768, 776,
|
||
|
776, 776, 776, 948, 948, 399, 682, 353, 227, 353,
|
||
|
948, 948, 354, 835, 836, 356, 837, 837, 837, 837,
|
||
|
420, 420, 420, 399, 948, 421, 948, 948, 948, 683,
|
||
|
683, 683, 683, 948, 948, 948, 684, 404, 405, 404,
|
||
|
948, 948, 406, 781, 782, 782, 782, 782, 862, 862,
|
||
|
862, 862, 948, 407, 684, 603, 424, 603, 948, 948,
|
||
|
604, 840, 841, 606, 842, 842, 842, 842, 439, 372,
|
||
|
|
||
|
439, 407, 948, 440, 948, 441, 442, 695, 695, 695,
|
||
|
695, 439, 372, 439, 948, 948, 440, 948, 441, 442,
|
||
|
695, 695, 695, 695, 258, 156, 258, 948, 948, 259,
|
||
|
948, 260, 261, 698, 698, 698, 698, 258, 156, 258,
|
||
|
948, 948, 259, 948, 260, 261, 698, 698, 698, 698,
|
||
|
372, 372, 372, 948, 948, 373, 948, 948, 948, 700,
|
||
|
700, 700, 700, 454, 376, 454, 948, 948, 455, 948,
|
||
|
456, 457, 703, 703, 703, 703, 454, 376, 454, 948,
|
||
|
948, 455, 948, 456, 457, 703, 703, 703, 703, 708,
|
||
|
625, 708, 948, 948, 709, 948, 710, 711, 712, 712,
|
||
|
|
||
|
712, 712, 708, 625, 708, 948, 948, 709, 948, 710,
|
||
|
711, 712, 712, 712, 712, 625, 625, 625, 948, 948,
|
||
|
626, 948, 948, 948, 714, 714, 714, 714, 470, 382,
|
||
|
470, 948, 948, 471, 948, 472, 716, 717, 717, 717,
|
||
|
717, 470, 382, 470, 948, 948, 471, 948, 472, 473,
|
||
|
850, 850, 850, 850, 628, 629, 628, 948, 948, 630,
|
||
|
948, 948, 716, 717, 717, 717, 717, 948, 948, 948,
|
||
|
851, 790, 790, 790, 790, 948, 781, 782, 782, 782,
|
||
|
782, 940, 941, 940, 863, 948, 942, 948, 851, 625,
|
||
|
625, 625, 948, 948, 626, 948, 948, 719, 720, 720,
|
||
|
|
||
|
720, 720, 863, 948, 948, 853, 795, 796, 796, 796,
|
||
|
796, 867, 867, 867, 867, 805, 805, 805, 805, 805,
|
||
|
805, 805, 805, 853, 722, 629, 722, 948, 948, 723,
|
||
|
948, 724, 725, 726, 726, 726, 726, 722, 629, 722,
|
||
|
948, 948, 723, 948, 724, 725, 726, 726, 726, 726,
|
||
|
282, 172, 282, 948, 948, 283, 948, 284, 731, 732,
|
||
|
732, 732, 732, 282, 172, 282, 948, 948, 283, 948,
|
||
|
284, 285, 855, 855, 855, 855, 633, 634, 633, 948,
|
||
|
948, 635, 948, 948, 731, 732, 732, 732, 732, 948,
|
||
|
948, 948, 856, 811, 812, 812, 812, 812, 948, 948,
|
||
|
|
||
|
948, 559, 805, 805, 805, 805, 948, 948, 948, 666,
|
||
|
856, 738, 634, 738, 948, 948, 739, 948, 740, 741,
|
||
|
742, 742, 742, 742, 629, 629, 629, 666, 948, 638,
|
||
|
948, 948, 735, 736, 736, 736, 736, 948, 948, 948,
|
||
|
858, 872, 872, 872, 872, 821, 821, 821, 821, 821,
|
||
|
821, 821, 821, 823, 823, 823, 823, 948, 858, 738,
|
||
|
634, 738, 948, 948, 739, 948, 740, 741, 742, 742,
|
||
|
742, 742, 629, 629, 629, 948, 948, 638, 948, 948,
|
||
|
948, 747, 747, 747, 747, 485, 386, 485, 948, 948,
|
||
|
486, 948, 487, 749, 750, 750, 750, 750, 485, 386,
|
||
|
|
||
|
485, 948, 948, 486, 948, 487, 488, 860, 860, 860,
|
||
|
860, 640, 634, 640, 948, 948, 641, 948, 948, 749,
|
||
|
750, 750, 750, 750, 948, 948, 948, 861, 829, 829,
|
||
|
829, 829, 829, 829, 829, 829, 334, 821, 821, 821,
|
||
|
821, 948, 948, 948, 415, 861, 502, 393, 502, 948,
|
||
|
948, 503, 948, 504, 505, 758, 758, 758, 758, 502,
|
||
|
393, 502, 415, 948, 503, 948, 504, 505, 758, 758,
|
||
|
758, 758, 306, 192, 306, 948, 948, 307, 948, 308,
|
||
|
309, 761, 761, 761, 761, 306, 192, 306, 948, 948,
|
||
|
307, 948, 308, 309, 761, 761, 761, 761, 393, 393,
|
||
|
|
||
|
393, 948, 948, 394, 948, 948, 948, 763, 763, 763,
|
||
|
763, 517, 397, 517, 948, 948, 518, 948, 519, 520,
|
||
|
766, 766, 766, 766, 517, 397, 517, 948, 948, 518,
|
||
|
948, 519, 520, 766, 766, 766, 766, 529, 401, 529,
|
||
|
948, 948, 530, 948, 531, 532, 771, 771, 771, 771,
|
||
|
529, 401, 529, 948, 948, 530, 948, 531, 532, 771,
|
||
|
771, 771, 771, 317, 198, 317, 948, 948, 318, 948,
|
||
|
319, 320, 774, 774, 774, 774, 317, 198, 317, 948,
|
||
|
948, 318, 948, 319, 320, 774, 774, 774, 774, 401,
|
||
|
401, 401, 948, 948, 402, 948, 948, 948, 776, 776,
|
||
|
|
||
|
776, 776, 544, 405, 544, 948, 948, 545, 948, 546,
|
||
|
547, 779, 779, 779, 779, 544, 405, 544, 948, 948,
|
||
|
545, 948, 546, 547, 779, 779, 779, 779, 784, 660,
|
||
|
784, 948, 948, 785, 948, 786, 787, 788, 788, 788,
|
||
|
788, 784, 660, 784, 948, 948, 785, 948, 786, 787,
|
||
|
788, 788, 788, 788, 660, 660, 660, 948, 948, 661,
|
||
|
948, 948, 948, 790, 790, 790, 790, 556, 409, 556,
|
||
|
948, 948, 557, 948, 558, 792, 793, 793, 793, 793,
|
||
|
556, 409, 556, 948, 948, 557, 948, 558, 559, 865,
|
||
|
865, 865, 865, 663, 664, 663, 948, 948, 665, 948,
|
||
|
|
||
|
948, 792, 793, 793, 793, 793, 948, 948, 948, 866,
|
||
|
831, 831, 831, 831, 948, 574, 829, 829, 829, 829,
|
||
|
940, 941, 940, 677, 948, 942, 948, 866, 660, 660,
|
||
|
660, 948, 948, 661, 948, 948, 795, 796, 796, 796,
|
||
|
796, 677, 948, 948, 868, 831, 831, 831, 831, 839,
|
||
|
839, 839, 839, 135, 130, 135, 948, 948, 136, 948,
|
||
|
948, 877, 868, 798, 664, 798, 948, 948, 799, 948,
|
||
|
800, 801, 802, 802, 802, 802, 798, 664, 798, 948,
|
||
|
948, 799, 948, 800, 801, 802, 802, 802, 802, 331,
|
||
|
211, 331, 948, 948, 332, 948, 333, 807, 808, 808,
|
||
|
|
||
|
808, 808, 331, 211, 331, 948, 948, 332, 948, 333,
|
||
|
334, 870, 870, 870, 870, 668, 669, 668, 948, 948,
|
||
|
670, 948, 948, 807, 808, 808, 808, 808, 948, 948,
|
||
|
948, 871, 423, 424, 423, 880, 880, 425, 881, 881,
|
||
|
881, 881, 559, 865, 865, 865, 865, 948, 426, 871,
|
||
|
814, 669, 814, 948, 948, 815, 948, 816, 817, 818,
|
||
|
818, 818, 818, 664, 664, 664, 426, 948, 673, 948,
|
||
|
948, 811, 812, 812, 812, 812, 948, 888, 888, 873,
|
||
|
889, 889, 889, 889, 948, 867, 867, 867, 867, 847,
|
||
|
847, 847, 847, 948, 948, 948, 848, 873, 814, 669,
|
||
|
|
||
|
814, 948, 948, 815, 948, 816, 817, 818, 818, 818,
|
||
|
818, 664, 664, 664, 848, 948, 673, 948, 948, 948,
|
||
|
823, 823, 823, 823, 571, 413, 571, 948, 948, 572,
|
||
|
948, 573, 825, 826, 826, 826, 826, 571, 413, 571,
|
||
|
948, 948, 572, 948, 573, 574, 875, 875, 875, 875,
|
||
|
675, 669, 675, 948, 948, 676, 948, 948, 825, 826,
|
||
|
826, 826, 826, 948, 896, 896, 876, 897, 897, 897,
|
||
|
897, 334, 870, 870, 870, 870, 862, 862, 862, 862,
|
||
|
948, 948, 948, 863, 876, 588, 420, 588, 948, 948,
|
||
|
589, 948, 590, 591, 834, 834, 834, 834, 588, 420,
|
||
|
|
||
|
588, 863, 948, 589, 948, 590, 591, 834, 834, 834,
|
||
|
834, 353, 227, 353, 948, 948, 354, 948, 355, 356,
|
||
|
837, 837, 837, 837, 353, 227, 353, 948, 948, 354,
|
||
|
948, 355, 356, 837, 837, 837, 837, 420, 420, 420,
|
||
|
948, 948, 421, 948, 948, 948, 839, 839, 839, 839,
|
||
|
603, 424, 603, 948, 948, 604, 948, 605, 606, 842,
|
||
|
842, 842, 842, 603, 424, 603, 948, 948, 604, 948,
|
||
|
605, 606, 842, 842, 842, 842, 708, 625, 708, 948,
|
||
|
948, 709, 882, 883, 711, 884, 884, 884, 884, 628,
|
||
|
629, 628, 948, 948, 630, 948, 472, 473, 850, 850,
|
||
|
|
||
|
850, 850, 948, 904, 904, 851, 905, 905, 905, 905,
|
||
|
906, 907, 948, 908, 908, 908, 908, 948, 872, 872,
|
||
|
872, 872, 948, 851, 470, 382, 470, 948, 948, 471,
|
||
|
885, 886, 473, 887, 887, 887, 887, 625, 625, 625,
|
||
|
948, 948, 626, 948, 948, 948, 852, 852, 852, 852,
|
||
|
948, 909, 910, 853, 911, 911, 911, 911, 912, 912,
|
||
|
948, 913, 913, 913, 913, 574, 875, 875, 875, 875,
|
||
|
948, 853, 722, 629, 722, 948, 948, 723, 890, 891,
|
||
|
725, 892, 892, 892, 892, 633, 634, 633, 948, 948,
|
||
|
635, 948, 284, 285, 855, 855, 855, 855, 948, 914,
|
||
|
|
||
|
915, 856, 916, 916, 916, 916, 917, 918, 948, 919,
|
||
|
919, 919, 919, 881, 881, 881, 881, 948, 948, 856,
|
||
|
282, 172, 282, 948, 948, 283, 893, 894, 285, 895,
|
||
|
895, 895, 895, 629, 629, 629, 948, 948, 638, 948,
|
||
|
948, 948, 857, 857, 857, 857, 948, 920, 920, 858,
|
||
|
921, 921, 921, 921, 922, 923, 948, 924, 924, 924,
|
||
|
924, 881, 881, 881, 881, 948, 948, 858, 738, 634,
|
||
|
738, 948, 948, 739, 898, 899, 741, 900, 900, 900,
|
||
|
900, 640, 634, 640, 948, 948, 641, 948, 487, 488,
|
||
|
860, 860, 860, 860, 948, 925, 926, 861, 927, 927,
|
||
|
|
||
|
927, 927, 135, 130, 135, 948, 948, 136, 940, 941,
|
||
|
940, 928, 948, 942, 948, 861, 485, 386, 485, 948,
|
||
|
948, 486, 901, 902, 488, 903, 903, 903, 903, 708,
|
||
|
625, 708, 948, 948, 709, 948, 710, 711, 884, 884,
|
||
|
884, 884, 628, 629, 628, 948, 948, 630, 469, 472,
|
||
|
889, 889, 889, 889, 897, 897, 897, 897, 631, 905,
|
||
|
905, 905, 905, 905, 905, 905, 905, 908, 908, 908,
|
||
|
908, 908, 908, 908, 908, 948, 631, 625, 625, 625,
|
||
|
948, 948, 626, 948, 948, 948, 889, 889, 889, 889,
|
||
|
722, 629, 722, 948, 948, 723, 948, 724, 725, 892,
|
||
|
|
||
|
892, 892, 892, 633, 634, 633, 948, 948, 635, 281,
|
||
|
284, 908, 908, 908, 908, 948, 948, 948, 864, 388,
|
||
|
911, 911, 911, 911, 911, 911, 911, 911, 913, 913,
|
||
|
913, 913, 916, 916, 916, 916, 864, 388, 629, 629,
|
||
|
629, 948, 948, 638, 948, 948, 948, 897, 897, 897,
|
||
|
897, 738, 634, 738, 948, 948, 739, 948, 740, 741,
|
||
|
900, 900, 900, 900, 640, 634, 640, 948, 948, 641,
|
||
|
484, 487, 948, 559, 911, 911, 911, 911, 948, 948,
|
||
|
642, 666, 916, 916, 916, 916, 948, 948, 916, 916,
|
||
|
916, 916, 135, 130, 135, 869, 948, 136, 642, 666,
|
||
|
|
||
|
660, 660, 660, 948, 948, 661, 948, 948, 948, 913,
|
||
|
913, 913, 913, 869, 919, 919, 919, 919, 919, 919,
|
||
|
919, 919, 334, 919, 919, 919, 919, 937, 948, 948,
|
||
|
415, 921, 921, 921, 921, 921, 921, 921, 921, 924,
|
||
|
924, 924, 924, 924, 924, 924, 924, 948, 415, 924,
|
||
|
924, 924, 924, 948, 948, 948, 874, 927, 927, 927,
|
||
|
927, 927, 927, 927, 927, 574, 927, 927, 927, 927,
|
||
|
135, 130, 135, 677, 874, 136, 135, 130, 135, 948,
|
||
|
943, 136, 943, 948, 948, 944, 948, 940, 941, 940,
|
||
|
948, 677, 942, 943, 946, 943, 946, 948, 944, 947,
|
||
|
|
||
|
946, 946, 946, 946, 948, 947, 947, 946, 948, 946,
|
||
|
948, 948, 947, 934, 948, 948, 948, 948, 936, 46,
|
||
|
46, 46, 46, 46, 46, 46, 46, 80, 80, 80,
|
||
|
80, 80, 80, 80, 80, 110, 110, 110, 110, 110,
|
||
|
110, 110, 110, 120, 120, 120, 120, 120, 120, 120,
|
||
|
120, 134, 134, 134, 134, 134, 134, 134, 134, 138,
|
||
|
948, 948, 138, 175, 948, 948, 175, 948, 175, 175,
|
||
|
175, 176, 176, 176, 176, 176, 176, 176, 176, 214,
|
||
|
948, 948, 214, 948, 214, 214, 215, 215, 215, 215,
|
||
|
215, 215, 215, 215, 230, 230, 948, 230, 948, 230,
|
||
|
|
||
|
230, 230, 233, 233, 233, 233, 233, 233, 233, 233,
|
||
|
239, 239, 948, 239, 239, 239, 239, 239, 257, 257,
|
||
|
257, 257, 257, 257, 257, 257, 270, 270, 270, 270,
|
||
|
270, 270, 270, 270, 276, 276, 948, 948, 276, 276,
|
||
|
281, 281, 281, 281, 281, 281, 281, 281, 294, 294,
|
||
|
294, 294, 294, 294, 294, 294, 305, 305, 305, 305,
|
||
|
305, 305, 305, 305, 316, 316, 316, 316, 316, 316,
|
||
|
316, 316, 330, 330, 330, 330, 330, 330, 330, 330,
|
||
|
341, 341, 341, 341, 341, 341, 341, 341, 352, 352,
|
||
|
352, 352, 352, 352, 352, 352, 230, 230, 948, 230,
|
||
|
|
||
|
948, 230, 230, 230, 233, 233, 233, 233, 233, 233,
|
||
|
233, 233, 239, 239, 948, 239, 239, 239, 239, 239,
|
||
|
134, 134, 134, 134, 134, 134, 134, 134, 138, 948,
|
||
|
948, 138, 257, 257, 257, 257, 257, 257, 257, 257,
|
||
|
270, 270, 270, 270, 270, 270, 270, 270, 276, 276,
|
||
|
948, 948, 276, 276, 281, 281, 281, 281, 281, 281,
|
||
|
281, 281, 438, 438, 438, 438, 438, 438, 438, 438,
|
||
|
453, 453, 453, 453, 453, 453, 453, 453, 469, 469,
|
||
|
469, 469, 469, 469, 469, 469, 484, 484, 484, 484,
|
||
|
484, 484, 484, 484, 294, 294, 294, 294, 294, 294,
|
||
|
|
||
|
294, 294, 501, 501, 501, 501, 501, 501, 501, 501,
|
||
|
305, 305, 305, 305, 305, 305, 305, 305, 516, 516,
|
||
|
516, 516, 516, 516, 516, 516, 528, 528, 528, 528,
|
||
|
528, 528, 528, 528, 316, 316, 316, 316, 316, 316,
|
||
|
316, 316, 543, 543, 543, 543, 543, 543, 543, 543,
|
||
|
555, 555, 555, 555, 555, 555, 555, 555, 330, 330,
|
||
|
330, 330, 330, 330, 330, 330, 570, 570, 570, 570,
|
||
|
570, 570, 570, 570, 341, 341, 341, 341, 341, 341,
|
||
|
341, 341, 587, 587, 587, 587, 587, 587, 587, 587,
|
||
|
352, 352, 352, 352, 352, 352, 352, 352, 602, 602,
|
||
|
|
||
|
602, 602, 602, 602, 602, 602, 134, 134, 134, 134,
|
||
|
134, 134, 134, 134, 138, 948, 948, 138, 438, 438,
|
||
|
438, 438, 438, 438, 438, 438, 257, 257, 257, 257,
|
||
|
257, 257, 257, 257, 453, 453, 453, 453, 453, 453,
|
||
|
453, 453, 469, 469, 469, 469, 469, 469, 469, 469,
|
||
|
281, 281, 281, 281, 281, 281, 281, 281, 484, 484,
|
||
|
484, 484, 484, 484, 484, 484, 294, 294, 294, 294,
|
||
|
294, 294, 294, 294, 501, 501, 501, 501, 501, 501,
|
||
|
501, 501, 305, 305, 305, 305, 305, 305, 305, 305,
|
||
|
516, 516, 516, 516, 516, 516, 516, 516, 528, 528,
|
||
|
|
||
|
528, 528, 528, 528, 528, 528, 316, 316, 316, 316,
|
||
|
316, 316, 316, 316, 543, 543, 543, 543, 543, 543,
|
||
|
543, 543, 555, 555, 555, 555, 555, 555, 555, 555,
|
||
|
330, 330, 330, 330, 330, 330, 330, 330, 570, 570,
|
||
|
570, 570, 570, 570, 570, 570, 341, 341, 341, 341,
|
||
|
341, 341, 341, 341, 587, 587, 587, 587, 587, 587,
|
||
|
587, 587, 352, 352, 352, 352, 352, 352, 352, 352,
|
||
|
602, 602, 602, 602, 602, 602, 602, 602, 134, 134,
|
||
|
134, 134, 134, 134, 134, 134, 138, 948, 948, 138,
|
||
|
438, 438, 438, 438, 438, 438, 438, 438, 257, 257,
|
||
|
|
||
|
257, 257, 257, 257, 257, 257, 453, 453, 453, 453,
|
||
|
453, 453, 453, 453, 707, 707, 707, 707, 707, 707,
|
||
|
707, 707, 469, 469, 469, 469, 469, 469, 469, 469,
|
||
|
721, 721, 721, 721, 721, 721, 721, 721, 281, 281,
|
||
|
281, 281, 281, 281, 281, 281, 737, 737, 737, 737,
|
||
|
737, 737, 737, 737, 484, 484, 484, 484, 484, 484,
|
||
|
484, 484, 501, 501, 501, 501, 501, 501, 501, 501,
|
||
|
305, 305, 305, 305, 305, 305, 305, 305, 516, 516,
|
||
|
516, 516, 516, 516, 516, 516, 528, 528, 528, 528,
|
||
|
528, 528, 528, 528, 316, 316, 316, 316, 316, 316,
|
||
|
|
||
|
316, 316, 543, 543, 543, 543, 543, 543, 543, 543,
|
||
|
783, 783, 783, 783, 783, 783, 783, 783, 555, 555,
|
||
|
555, 555, 555, 555, 555, 555, 797, 797, 797, 797,
|
||
|
797, 797, 797, 797, 330, 330, 330, 330, 330, 330,
|
||
|
330, 330, 813, 813, 813, 813, 813, 813, 813, 813,
|
||
|
570, 570, 570, 570, 570, 570, 570, 570, 587, 587,
|
||
|
587, 587, 587, 587, 587, 587, 352, 352, 352, 352,
|
||
|
352, 352, 352, 352, 602, 602, 602, 602, 602, 602,
|
||
|
602, 602, 134, 134, 134, 134, 134, 134, 134, 134,
|
||
|
138, 948, 948, 138, 438, 438, 438, 438, 438, 438,
|
||
|
|
||
|
438, 438, 257, 257, 257, 257, 257, 257, 257, 257,
|
||
|
453, 453, 453, 453, 453, 453, 453, 453, 707, 707,
|
||
|
707, 707, 707, 707, 707, 707, 469, 469, 469, 469,
|
||
|
469, 469, 469, 469, 721, 721, 721, 721, 721, 721,
|
||
|
721, 721, 281, 281, 281, 281, 281, 281, 281, 281,
|
||
|
737, 737, 737, 737, 737, 737, 737, 737, 484, 484,
|
||
|
484, 484, 484, 484, 484, 484, 501, 501, 501, 501,
|
||
|
501, 501, 501, 501, 305, 305, 305, 305, 305, 305,
|
||
|
305, 305, 516, 516, 516, 516, 516, 516, 516, 516,
|
||
|
528, 528, 528, 528, 528, 528, 528, 528, 316, 316,
|
||
|
|
||
|
316, 316, 316, 316, 316, 316, 543, 543, 543, 543,
|
||
|
543, 543, 543, 543, 783, 783, 783, 783, 783, 783,
|
||
|
783, 783, 555, 555, 555, 555, 555, 555, 555, 555,
|
||
|
797, 797, 797, 797, 797, 797, 797, 797, 330, 330,
|
||
|
330, 330, 330, 330, 330, 330, 813, 813, 813, 813,
|
||
|
813, 813, 813, 813, 570, 570, 570, 570, 570, 570,
|
||
|
570, 570, 587, 587, 587, 587, 587, 587, 587, 587,
|
||
|
352, 352, 352, 352, 352, 352, 352, 352, 602, 602,
|
||
|
602, 602, 602, 602, 602, 602, 134, 134, 134, 134,
|
||
|
134, 134, 134, 134, 138, 948, 948, 138, 707, 707,
|
||
|
|
||
|
707, 707, 707, 707, 707, 707, 469, 469, 469, 469,
|
||
|
469, 469, 469, 469, 721, 721, 721, 721, 721, 721,
|
||
|
721, 721, 281, 281, 281, 281, 281, 281, 281, 281,
|
||
|
737, 737, 737, 737, 737, 737, 737, 737, 484, 484,
|
||
|
484, 484, 484, 484, 484, 484, 939, 939, 939, 939,
|
||
|
939, 939, 939, 939, 945, 945, 948, 945, 945, 945,
|
||
|
945, 945, 45, 948, 948, 948, 948, 948, 948, 948,
|
||
|
948, 948, 948, 948, 948, 948, 948, 948, 948, 948,
|
||
|
948, 948, 948, 948, 948, 948, 948, 948, 948, 948,
|
||
|
948, 948, 948, 948, 948, 948, 948, 948, 948, 948,
|
||
|
|
||
|
948, 948, 948, 948, 948, 948, 948, 948, 948, 948
|
||
|
} ;
|
||
|
|
||
|
static const short int yy_chk[7711] =
|
||
|
{ 0,
|
||
|
0, 1, 1, 1, 0, 0, 1, 2, 2, 2,
|
||
|
885, 885, 2, 3, 3, 3, 3, 3, 3, 3,
|
||
|
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||
|
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||
|
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||
|
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||
|
5, 5, 5, 60, 60, 5, 6, 6, 6, 431,
|
||
|
1010, 6, 988, 431, 47, 47, 47, 5, 5, 47,
|
||
|
48, 73, 48, 6, 6, 48, 5, 65, 65, 65,
|
||
|
65, 65, 6, 7, 7, 7, 985, 73, 7, 983,
|
||
|
|
||
|
7, 7, 7, 7, 7, 7, 66, 66, 66, 66,
|
||
|
976, 7, 9, 9, 9, 9, 9, 9, 10, 10,
|
||
|
10, 10, 10, 10, 11, 11, 11, 11, 11, 11,
|
||
|
12, 12, 12, 12, 12, 12, 13, 13, 13, 13,
|
||
|
13, 13, 14, 14, 14, 14, 14, 14, 15, 15,
|
||
|
15, 15, 15, 15, 16, 16, 16, 16, 16, 16,
|
||
|
17, 17, 17, 970, 17, 17, 18, 18, 18, 965,
|
||
|
18, 18, 19, 19, 19, 19, 19, 19, 17, 68,
|
||
|
68, 68, 68, 68, 18, 20, 20, 20, 20, 20,
|
||
|
20, 21, 21, 21, 21, 21, 21, 22, 22, 22,
|
||
|
|
||
|
22, 22, 22, 23, 23, 23, 23, 23, 23, 24,
|
||
|
24, 24, 24, 24, 24, 25, 25, 25, 25, 25,
|
||
|
25, 275, 933, 39, 39, 39, 25, 39, 39, 40,
|
||
|
40, 40, 930, 40, 40, 464, 929, 275, 25, 879,
|
||
|
25, 26, 26, 26, 26, 26, 26, 299, 51, 51,
|
||
|
51, 464, 26, 51, 39, 346, 443, 41, 41, 41,
|
||
|
40, 41, 41, 878, 26, 299, 26, 27, 27, 27,
|
||
|
27, 27, 27, 346, 443, 42, 42, 42, 27, 42,
|
||
|
42, 49, 49, 49, 886, 886, 49, 846, 41, 458,
|
||
|
27, 844, 27, 28, 28, 28, 28, 28, 28, 69,
|
||
|
|
||
|
69, 69, 69, 130, 28, 130, 42, 458, 130, 49,
|
||
|
71, 71, 71, 71, 690, 465, 28, 689, 28, 29,
|
||
|
29, 29, 29, 29, 29, 74, 74, 74, 74, 687,
|
||
|
29, 465, 43, 43, 43, 43, 43, 43, 76, 76,
|
||
|
76, 76, 29, 43, 29, 30, 30, 30, 30, 30,
|
||
|
30, 77, 77, 77, 77, 77, 30, 615, 44, 44,
|
||
|
44, 44, 44, 44, 78, 78, 78, 78, 30, 44,
|
||
|
30, 31, 31, 31, 31, 31, 31, 70, 70, 70,
|
||
|
70, 70, 31, 893, 893, 70, 85, 85, 85, 85,
|
||
|
75, 75, 75, 75, 31, 614, 31, 32, 32, 32,
|
||
|
|
||
|
32, 32, 32, 70, 88, 88, 88, 88, 32, 613,
|
||
|
75, 82, 82, 82, 612, 82, 82, 497, 894, 894,
|
||
|
32, 432, 32, 33, 33, 33, 75, 33, 33, 84,
|
||
|
84, 84, 84, 84, 506, 497, 86, 86, 86, 86,
|
||
|
86, 33, 901, 901, 86, 87, 87, 87, 87, 87,
|
||
|
902, 902, 506, 33, 521, 33, 34, 34, 34, 428,
|
||
|
34, 34, 86, 90, 90, 90, 90, 90, 91, 91,
|
||
|
91, 91, 521, 369, 34, 93, 93, 93, 93, 93,
|
||
|
94, 94, 94, 94, 368, 367, 34, 366, 34, 35,
|
||
|
35, 35, 35, 35, 35, 99, 99, 99, 99, 99,
|
||
|
|
||
|
35, 100, 100, 100, 100, 101, 101, 101, 101, 101,
|
||
|
365, 364, 35, 101, 35, 36, 36, 36, 36, 36,
|
||
|
36, 103, 103, 103, 103, 362, 36, 104, 104, 104,
|
||
|
104, 101, 105, 105, 105, 105, 253, 252, 36, 251,
|
||
|
36, 37, 37, 37, 37, 37, 37, 104, 108, 108,
|
||
|
108, 108, 37, 107, 107, 107, 107, 107, 114, 114,
|
||
|
114, 114, 114, 104, 37, 533, 37, 38, 38, 38,
|
||
|
38, 38, 38, 115, 115, 115, 115, 250, 38, 548,
|
||
|
112, 112, 112, 533, 112, 112, 118, 118, 118, 118,
|
||
|
38, 249, 38, 67, 67, 67, 247, 548, 67, 246,
|
||
|
|
||
|
245, 67, 67, 67, 67, 67, 121, 121, 121, 67,
|
||
|
112, 121, 112, 117, 117, 117, 117, 117, 123, 123,
|
||
|
123, 244, 123, 123, 152, 150, 149, 67, 72, 72,
|
||
|
72, 148, 147, 72, 146, 144, 143, 72, 72, 72,
|
||
|
72, 126, 126, 126, 126, 127, 127, 127, 127, 128,
|
||
|
128, 128, 128, 129, 129, 129, 142, 72, 129, 131,
|
||
|
131, 131, 583, 140, 131, 127, 132, 133, 132, 133,
|
||
|
139, 132, 133, 72, 79, 79, 79, 124, 592, 79,
|
||
|
583, 127, 79, 79, 79, 79, 79, 134, 134, 134,
|
||
|
79, 113, 134, 135, 135, 135, 592, 607, 135, 136,
|
||
|
|
||
|
136, 136, 96, 83, 136, 695, 703, 64, 79, 89,
|
||
|
89, 89, 712, 63, 89, 607, 62, 89, 89, 89,
|
||
|
89, 89, 61, 695, 703, 89, 137, 137, 137, 726,
|
||
|
712, 137, 153, 153, 153, 153, 155, 155, 155, 155,
|
||
|
155, 59, 58, 89, 92, 92, 92, 726, 57, 92,
|
||
|
137, 56, 92, 92, 92, 92, 92, 742, 158, 158,
|
||
|
92, 158, 158, 158, 158, 159, 159, 159, 159, 161,
|
||
|
161, 161, 161, 55, 758, 742, 161, 54, 92, 95,
|
||
|
95, 95, 766, 53, 95, 52, 45, 95, 95, 95,
|
||
|
95, 95, 758, 0, 161, 95, 167, 167, 167, 167,
|
||
|
|
||
|
766, 160, 160, 160, 160, 160, 166, 166, 166, 160,
|
||
|
0, 166, 0, 95, 109, 109, 109, 0, 0, 109,
|
||
|
0, 0, 109, 109, 109, 109, 109, 160, 162, 162,
|
||
|
109, 162, 162, 162, 162, 169, 169, 169, 169, 171,
|
||
|
171, 171, 171, 171, 179, 179, 179, 179, 109, 116,
|
||
|
116, 116, 0, 0, 116, 771, 0, 116, 116, 116,
|
||
|
116, 116, 0, 174, 174, 116, 174, 174, 174, 174,
|
||
|
176, 176, 176, 771, 176, 176, 177, 177, 177, 779,
|
||
|
177, 177, 0, 116, 119, 119, 119, 0, 0, 119,
|
||
|
0, 0, 119, 119, 119, 119, 119, 779, 182, 182,
|
||
|
|
||
|
119, 182, 182, 182, 182, 183, 183, 183, 183, 180,
|
||
|
180, 180, 180, 180, 0, 0, 0, 180, 119, 156,
|
||
|
156, 156, 0, 0, 156, 0, 156, 156, 156, 156,
|
||
|
156, 156, 157, 157, 157, 180, 0, 157, 0, 157,
|
||
|
157, 157, 157, 157, 157, 164, 164, 164, 788, 0,
|
||
|
164, 0, 164, 0, 164, 164, 164, 164, 165, 165,
|
||
|
165, 0, 0, 165, 0, 165, 788, 165, 165, 165,
|
||
|
165, 172, 172, 172, 0, 0, 172, 0, 172, 172,
|
||
|
172, 172, 172, 172, 173, 173, 173, 0, 0, 173,
|
||
|
0, 173, 173, 173, 173, 173, 173, 181, 181, 181,
|
||
|
|
||
|
181, 0, 0, 802, 181, 185, 185, 185, 185, 185,
|
||
|
188, 188, 0, 188, 188, 188, 188, 189, 189, 189,
|
||
|
189, 802, 181, 186, 186, 186, 0, 0, 186, 0,
|
||
|
186, 186, 186, 186, 186, 186, 187, 187, 187, 818,
|
||
|
834, 187, 842, 187, 187, 187, 187, 187, 187, 191,
|
||
|
191, 191, 191, 191, 192, 192, 192, 818, 834, 192,
|
||
|
842, 192, 192, 192, 192, 192, 192, 193, 193, 193,
|
||
|
0, 0, 193, 0, 193, 193, 193, 193, 193, 193,
|
||
|
194, 194, 884, 194, 194, 194, 194, 195, 195, 195,
|
||
|
195, 197, 197, 197, 197, 197, 198, 198, 198, 0,
|
||
|
|
||
|
884, 198, 0, 198, 198, 198, 198, 198, 198, 199,
|
||
|
199, 199, 0, 0, 199, 0, 199, 199, 199, 199,
|
||
|
199, 199, 200, 200, 0, 200, 200, 200, 200, 202,
|
||
|
202, 202, 202, 203, 203, 203, 203, 203, 0, 0,
|
||
|
892, 203, 204, 204, 204, 204, 900, 205, 205, 204,
|
||
|
205, 205, 205, 205, 206, 206, 206, 206, 892, 203,
|
||
|
208, 208, 208, 208, 900, 0, 0, 204, 210, 210,
|
||
|
210, 210, 210, 211, 211, 211, 0, 0, 211, 0,
|
||
|
211, 211, 211, 211, 211, 211, 212, 212, 212, 0,
|
||
|
0, 212, 0, 212, 212, 212, 212, 212, 212, 213,
|
||
|
|
||
|
213, 0, 213, 213, 213, 213, 215, 215, 215, 0,
|
||
|
215, 215, 216, 216, 216, 0, 216, 216, 218, 218,
|
||
|
218, 218, 220, 220, 220, 220, 220, 223, 223, 0,
|
||
|
223, 223, 223, 223, 0, 239, 215, 239, 215, 0,
|
||
|
239, 0, 216, 0, 216, 221, 221, 221, 0, 0,
|
||
|
221, 0, 221, 221, 221, 221, 221, 221, 222, 222,
|
||
|
222, 0, 0, 222, 0, 222, 222, 222, 222, 222,
|
||
|
222, 224, 224, 224, 224, 225, 225, 225, 0, 0,
|
||
|
225, 0, 0, 225, 225, 225, 225, 225, 0, 0,
|
||
|
0, 225, 226, 226, 226, 226, 226, 229, 229, 0,
|
||
|
|
||
|
229, 229, 229, 229, 237, 237, 237, 237, 0, 225,
|
||
|
227, 227, 227, 0, 0, 227, 0, 227, 227, 227,
|
||
|
227, 227, 227, 228, 228, 228, 0, 0, 228, 0,
|
||
|
228, 228, 228, 228, 228, 228, 231, 231, 231, 0,
|
||
|
0, 231, 232, 232, 232, 0, 232, 232, 233, 233,
|
||
|
233, 0, 233, 233, 234, 234, 234, 0, 234, 234,
|
||
|
235, 235, 235, 0, 235, 235, 240, 241, 240, 241,
|
||
|
0, 240, 241, 242, 242, 242, 0, 0, 242, 254,
|
||
|
254, 254, 254, 254, 255, 255, 255, 255, 263, 263,
|
||
|
263, 263, 0, 242, 256, 256, 256, 0, 0, 256,
|
||
|
|
||
|
0, 0, 256, 256, 256, 256, 256, 0, 0, 0,
|
||
|
256, 262, 262, 262, 0, 0, 262, 265, 265, 265,
|
||
|
265, 266, 266, 266, 266, 0, 0, 262, 256, 257,
|
||
|
257, 257, 0, 0, 257, 0, 257, 257, 257, 257,
|
||
|
257, 257, 258, 258, 258, 262, 0, 258, 0, 258,
|
||
|
258, 258, 258, 258, 258, 264, 264, 264, 0, 0,
|
||
|
264, 0, 0, 0, 264, 264, 264, 264, 267, 267,
|
||
|
267, 267, 268, 268, 268, 268, 269, 269, 269, 269,
|
||
|
276, 276, 276, 0, 0, 276, 278, 278, 278, 278,
|
||
|
278, 0, 268, 279, 279, 279, 279, 287, 287, 287,
|
||
|
|
||
|
287, 289, 289, 289, 289, 0, 0, 0, 268, 270,
|
||
|
270, 270, 0, 0, 270, 0, 270, 0, 270, 270,
|
||
|
270, 270, 271, 271, 271, 0, 0, 271, 0, 271,
|
||
|
0, 271, 271, 271, 271, 272, 272, 272, 0, 0,
|
||
|
272, 0, 272, 0, 272, 272, 272, 272, 273, 273,
|
||
|
273, 0, 0, 273, 0, 273, 0, 273, 273, 273,
|
||
|
273, 274, 274, 274, 0, 0, 274, 0, 274, 0,
|
||
|
274, 274, 274, 274, 0, 0, 286, 286, 286, 0,
|
||
|
0, 286, 290, 290, 290, 290, 292, 292, 292, 292,
|
||
|
274, 0, 286, 291, 291, 291, 291, 291, 300, 300,
|
||
|
|
||
|
300, 300, 303, 303, 303, 303, 274, 280, 280, 280,
|
||
|
286, 0, 280, 0, 0, 280, 280, 280, 280, 280,
|
||
|
0, 0, 0, 280, 302, 302, 302, 302, 302, 0,
|
||
|
0, 0, 293, 293, 293, 293, 293, 0, 0, 0,
|
||
|
293, 280, 281, 281, 281, 0, 0, 281, 0, 281,
|
||
|
281, 281, 281, 281, 281, 282, 282, 282, 293, 0,
|
||
|
282, 0, 282, 282, 282, 282, 282, 282, 288, 288,
|
||
|
288, 0, 0, 288, 0, 0, 0, 288, 288, 288,
|
||
|
288, 294, 294, 294, 0, 0, 294, 0, 294, 294,
|
||
|
294, 294, 294, 294, 301, 301, 301, 0, 0, 301,
|
||
|
|
||
|
0, 0, 0, 301, 301, 301, 301, 304, 304, 304,
|
||
|
0, 0, 304, 0, 0, 304, 304, 304, 304, 304,
|
||
|
0, 0, 0, 304, 310, 310, 310, 0, 0, 310,
|
||
|
311, 311, 311, 311, 313, 313, 313, 313, 313, 0,
|
||
|
310, 304, 305, 305, 305, 0, 0, 305, 0, 305,
|
||
|
305, 305, 305, 305, 305, 0, 0, 0, 310, 312,
|
||
|
312, 312, 0, 0, 312, 0, 0, 0, 312, 312,
|
||
|
312, 312, 314, 314, 314, 314, 315, 315, 315, 0,
|
||
|
0, 315, 0, 0, 315, 315, 315, 315, 315, 0,
|
||
|
0, 0, 315, 321, 321, 321, 0, 0, 321, 322,
|
||
|
|
||
|
322, 322, 322, 324, 324, 324, 324, 0, 0, 321,
|
||
|
315, 316, 316, 316, 0, 0, 316, 0, 316, 316,
|
||
|
316, 316, 316, 316, 0, 0, 0, 321, 323, 323,
|
||
|
323, 0, 0, 323, 0, 0, 0, 323, 323, 323,
|
||
|
323, 325, 325, 325, 325, 327, 327, 327, 327, 327,
|
||
|
328, 328, 328, 328, 329, 329, 329, 0, 0, 329,
|
||
|
0, 0, 329, 329, 329, 329, 329, 0, 0, 0,
|
||
|
329, 335, 335, 335, 0, 0, 335, 336, 336, 336,
|
||
|
336, 338, 338, 338, 338, 338, 0, 335, 329, 330,
|
||
|
330, 330, 0, 0, 330, 0, 330, 330, 330, 330,
|
||
|
|
||
|
330, 330, 0, 0, 0, 335, 337, 337, 337, 0,
|
||
|
0, 337, 0, 0, 0, 337, 337, 337, 337, 339,
|
||
|
339, 339, 339, 340, 340, 340, 340, 340, 0, 0,
|
||
|
0, 340, 347, 347, 347, 347, 349, 349, 349, 349,
|
||
|
349, 350, 350, 350, 350, 358, 358, 358, 358, 340,
|
||
|
341, 341, 341, 0, 0, 341, 0, 341, 341, 341,
|
||
|
341, 341, 341, 348, 348, 348, 0, 0, 348, 0,
|
||
|
0, 0, 348, 348, 348, 348, 351, 351, 351, 0,
|
||
|
0, 351, 0, 0, 351, 351, 351, 351, 351, 0,
|
||
|
0, 0, 351, 357, 357, 357, 0, 0, 357, 371,
|
||
|
|
||
|
371, 371, 371, 371, 381, 381, 381, 381, 381, 357,
|
||
|
351, 352, 352, 352, 0, 0, 352, 0, 352, 352,
|
||
|
352, 352, 352, 352, 0, 0, 0, 357, 359, 359,
|
||
|
359, 0, 0, 359, 0, 0, 0, 359, 359, 359,
|
||
|
359, 361, 361, 361, 374, 374, 361, 374, 374, 374,
|
||
|
374, 378, 378, 0, 378, 378, 378, 378, 0, 0,
|
||
|
361, 372, 372, 372, 0, 0, 372, 0, 372, 372,
|
||
|
372, 372, 372, 372, 373, 373, 373, 0, 0, 373,
|
||
|
0, 373, 373, 373, 373, 373, 373, 375, 375, 375,
|
||
|
0, 0, 375, 0, 375, 375, 375, 375, 375, 375,
|
||
|
|
||
|
376, 376, 376, 0, 0, 376, 0, 376, 376, 376,
|
||
|
376, 376, 376, 377, 377, 377, 0, 0, 377, 0,
|
||
|
377, 377, 377, 377, 377, 377, 380, 380, 380, 380,
|
||
|
380, 380, 380, 380, 380, 384, 384, 0, 384, 384,
|
||
|
384, 384, 389, 389, 389, 389, 380, 0, 0, 389,
|
||
|
380, 380, 380, 390, 390, 0, 390, 390, 390, 390,
|
||
|
0, 0, 380, 382, 382, 382, 0, 389, 382, 0,
|
||
|
382, 382, 382, 382, 382, 382, 383, 383, 383, 0,
|
||
|
0, 383, 0, 383, 383, 383, 383, 383, 383, 385,
|
||
|
385, 385, 0, 0, 385, 0, 385, 385, 385, 385,
|
||
|
|
||
|
385, 385, 386, 386, 386, 0, 0, 386, 0, 386,
|
||
|
386, 386, 386, 386, 386, 387, 387, 387, 0, 0,
|
||
|
387, 0, 387, 387, 387, 387, 387, 387, 388, 388,
|
||
|
388, 0, 0, 388, 388, 388, 388, 388, 388, 388,
|
||
|
388, 391, 391, 391, 0, 0, 391, 391, 391, 391,
|
||
|
391, 391, 391, 391, 392, 392, 392, 0, 0, 392,
|
||
|
0, 0, 0, 392, 392, 392, 392, 0, 395, 395,
|
||
|
392, 395, 395, 395, 395, 403, 403, 0, 403, 403,
|
||
|
403, 403, 427, 427, 427, 0, 0, 427, 392, 393,
|
||
|
393, 393, 0, 0, 393, 0, 393, 393, 393, 393,
|
||
|
|
||
|
393, 393, 394, 394, 394, 0, 0, 394, 0, 394,
|
||
|
394, 394, 394, 394, 394, 396, 396, 396, 0, 0,
|
||
|
396, 0, 396, 396, 396, 396, 396, 396, 397, 397,
|
||
|
397, 0, 0, 397, 0, 397, 397, 397, 397, 397,
|
||
|
397, 398, 398, 398, 0, 0, 398, 0, 398, 398,
|
||
|
398, 398, 398, 398, 399, 399, 399, 0, 0, 399,
|
||
|
399, 399, 399, 399, 399, 399, 399, 400, 400, 400,
|
||
|
0, 0, 400, 0, 0, 0, 400, 400, 400, 400,
|
||
|
0, 411, 411, 400, 411, 411, 411, 411, 435, 435,
|
||
|
435, 435, 435, 416, 416, 416, 416, 0, 0, 0,
|
||
|
|
||
|
416, 400, 401, 401, 401, 0, 0, 401, 0, 401,
|
||
|
401, 401, 401, 401, 401, 402, 402, 402, 416, 0,
|
||
|
402, 0, 402, 402, 402, 402, 402, 402, 404, 404,
|
||
|
404, 0, 0, 404, 0, 404, 404, 404, 404, 404,
|
||
|
404, 405, 405, 405, 0, 0, 405, 0, 405, 405,
|
||
|
405, 405, 405, 405, 406, 406, 406, 0, 0, 406,
|
||
|
0, 406, 406, 406, 406, 406, 406, 407, 407, 407,
|
||
|
0, 0, 407, 407, 407, 407, 407, 407, 407, 407,
|
||
|
408, 408, 408, 0, 0, 408, 0, 0, 0, 408,
|
||
|
408, 408, 408, 0, 417, 417, 408, 417, 417, 417,
|
||
|
|
||
|
417, 422, 422, 0, 422, 422, 422, 422, 436, 436,
|
||
|
436, 436, 0, 0, 408, 409, 409, 409, 0, 0,
|
||
|
409, 0, 409, 409, 409, 409, 409, 409, 410, 410,
|
||
|
410, 0, 0, 410, 0, 410, 410, 410, 410, 410,
|
||
|
410, 412, 412, 412, 0, 0, 412, 0, 412, 412,
|
||
|
412, 412, 412, 412, 413, 413, 413, 0, 0, 413,
|
||
|
0, 413, 413, 413, 413, 413, 413, 414, 414, 414,
|
||
|
0, 0, 414, 0, 414, 414, 414, 414, 414, 414,
|
||
|
415, 415, 415, 0, 0, 415, 415, 415, 415, 415,
|
||
|
415, 415, 415, 418, 418, 418, 0, 0, 418, 418,
|
||
|
|
||
|
418, 418, 418, 418, 418, 418, 419, 419, 419, 0,
|
||
|
0, 419, 0, 0, 0, 419, 419, 419, 419, 0,
|
||
|
0, 0, 419, 444, 444, 444, 444, 451, 451, 451,
|
||
|
451, 437, 437, 437, 437, 437, 0, 0, 0, 437,
|
||
|
419, 420, 420, 420, 0, 0, 420, 0, 420, 420,
|
||
|
420, 420, 420, 420, 421, 421, 421, 437, 0, 421,
|
||
|
0, 421, 421, 421, 421, 421, 421, 423, 423, 423,
|
||
|
0, 0, 423, 0, 423, 423, 423, 423, 423, 423,
|
||
|
424, 424, 424, 0, 0, 424, 0, 424, 424, 424,
|
||
|
424, 424, 424, 425, 425, 425, 0, 0, 425, 0,
|
||
|
|
||
|
425, 425, 425, 425, 425, 425, 426, 426, 426, 0,
|
||
|
0, 426, 426, 426, 426, 426, 426, 426, 426, 438,
|
||
|
438, 438, 0, 0, 438, 0, 438, 438, 438, 438,
|
||
|
438, 438, 439, 439, 439, 0, 0, 439, 0, 439,
|
||
|
439, 439, 439, 439, 439, 445, 445, 445, 0, 0,
|
||
|
445, 0, 0, 0, 445, 445, 445, 445, 446, 446,
|
||
|
446, 0, 0, 446, 0, 446, 446, 446, 446, 446,
|
||
|
446, 447, 447, 447, 0, 0, 447, 0, 447, 447,
|
||
|
447, 447, 447, 447, 448, 448, 448, 0, 0, 448,
|
||
|
0, 0, 448, 448, 448, 448, 448, 0, 0, 0,
|
||
|
|
||
|
448, 450, 450, 450, 450, 450, 459, 459, 459, 459,
|
||
|
460, 460, 460, 460, 467, 467, 467, 467, 448, 449,
|
||
|
449, 449, 0, 0, 449, 0, 449, 449, 449, 449,
|
||
|
449, 449, 452, 452, 452, 0, 0, 452, 0, 0,
|
||
|
452, 452, 452, 452, 452, 0, 0, 0, 452, 466,
|
||
|
466, 466, 466, 466, 461, 461, 461, 461, 461, 686,
|
||
|
686, 686, 461, 0, 686, 0, 452, 453, 453, 453,
|
||
|
686, 0, 453, 0, 453, 453, 453, 453, 453, 453,
|
||
|
461, 463, 463, 463, 463, 463, 463, 463, 463, 463,
|
||
|
463, 463, 463, 463, 463, 463, 463, 463, 463, 463,
|
||
|
|
||
|
463, 463, 463, 463, 463, 463, 463, 463, 463, 463,
|
||
|
463, 463, 463, 463, 463, 463, 463, 463, 463, 463,
|
||
|
463, 463, 463, 463, 463, 463, 463, 463, 468, 468,
|
||
|
468, 0, 0, 468, 0, 0, 468, 468, 468, 468,
|
||
|
468, 0, 0, 0, 468, 474, 474, 474, 0, 0,
|
||
|
474, 475, 475, 475, 475, 481, 481, 481, 481, 481,
|
||
|
0, 474, 468, 469, 469, 469, 0, 0, 469, 0,
|
||
|
469, 469, 469, 469, 469, 469, 470, 470, 470, 474,
|
||
|
0, 470, 0, 470, 470, 470, 470, 470, 470, 476,
|
||
|
476, 476, 0, 0, 476, 0, 0, 0, 476, 476,
|
||
|
|
||
|
476, 476, 477, 477, 477, 0, 0, 477, 0, 477,
|
||
|
477, 477, 477, 477, 477, 478, 478, 478, 0, 0,
|
||
|
478, 0, 478, 478, 478, 478, 478, 478, 479, 479,
|
||
|
479, 0, 0, 479, 0, 0, 479, 479, 479, 479,
|
||
|
479, 0, 0, 0, 479, 482, 482, 482, 482, 490,
|
||
|
490, 490, 490, 491, 491, 491, 491, 493, 493, 493,
|
||
|
493, 0, 479, 480, 480, 480, 0, 0, 480, 0,
|
||
|
480, 480, 480, 480, 480, 480, 483, 483, 483, 0,
|
||
|
0, 483, 0, 0, 483, 483, 483, 483, 483, 0,
|
||
|
0, 0, 483, 489, 489, 489, 0, 0, 489, 494,
|
||
|
|
||
|
494, 494, 494, 498, 498, 498, 498, 498, 0, 489,
|
||
|
483, 484, 484, 484, 0, 0, 484, 0, 484, 484,
|
||
|
484, 484, 484, 484, 0, 0, 0, 489, 492, 492,
|
||
|
492, 0, 0, 492, 0, 0, 0, 492, 492, 492,
|
||
|
492, 0, 0, 0, 492, 499, 499, 499, 499, 507,
|
||
|
507, 507, 507, 500, 500, 500, 500, 500, 0, 0,
|
||
|
0, 500, 492, 495, 495, 495, 0, 0, 495, 0,
|
||
|
495, 495, 495, 495, 495, 495, 496, 496, 496, 500,
|
||
|
0, 496, 0, 496, 496, 496, 496, 496, 496, 501,
|
||
|
501, 501, 0, 0, 501, 0, 501, 501, 501, 501,
|
||
|
|
||
|
501, 501, 502, 502, 502, 0, 0, 502, 0, 502,
|
||
|
502, 502, 502, 502, 502, 508, 508, 508, 0, 0,
|
||
|
508, 0, 0, 0, 508, 508, 508, 508, 509, 509,
|
||
|
509, 0, 0, 509, 0, 509, 509, 509, 509, 509,
|
||
|
509, 510, 510, 510, 0, 0, 510, 0, 510, 510,
|
||
|
510, 510, 510, 510, 511, 511, 511, 0, 0, 511,
|
||
|
0, 0, 511, 511, 511, 511, 511, 0, 0, 0,
|
||
|
511, 513, 513, 513, 513, 513, 514, 514, 514, 514,
|
||
|
522, 522, 522, 522, 523, 523, 523, 523, 511, 512,
|
||
|
512, 512, 0, 0, 512, 0, 512, 512, 512, 512,
|
||
|
|
||
|
512, 512, 515, 515, 515, 0, 0, 515, 0, 0,
|
||
|
515, 515, 515, 515, 515, 0, 0, 0, 515, 525,
|
||
|
525, 525, 525, 525, 524, 524, 524, 524, 524, 928,
|
||
|
928, 928, 524, 0, 928, 0, 515, 516, 516, 516,
|
||
|
0, 0, 516, 0, 516, 516, 516, 516, 516, 516,
|
||
|
524, 526, 526, 526, 526, 527, 527, 527, 527, 527,
|
||
|
0, 0, 0, 527, 534, 534, 534, 534, 540, 540,
|
||
|
540, 540, 540, 541, 541, 541, 541, 549, 549, 549,
|
||
|
549, 527, 528, 528, 528, 0, 0, 528, 0, 528,
|
||
|
528, 528, 528, 528, 528, 529, 529, 529, 0, 0,
|
||
|
|
||
|
529, 0, 529, 529, 529, 529, 529, 529, 535, 535,
|
||
|
535, 0, 0, 535, 0, 0, 0, 535, 535, 535,
|
||
|
535, 536, 536, 536, 0, 0, 536, 0, 536, 536,
|
||
|
536, 536, 536, 536, 537, 537, 537, 0, 0, 537,
|
||
|
0, 537, 537, 537, 537, 537, 537, 538, 538, 538,
|
||
|
0, 0, 538, 0, 0, 538, 538, 538, 538, 538,
|
||
|
0, 0, 0, 538, 550, 550, 550, 550, 553, 553,
|
||
|
553, 553, 551, 551, 551, 551, 551, 0, 0, 0,
|
||
|
551, 538, 539, 539, 539, 0, 0, 539, 0, 539,
|
||
|
539, 539, 539, 539, 539, 542, 542, 542, 551, 0,
|
||
|
|
||
|
542, 0, 0, 542, 542, 542, 542, 542, 0, 0,
|
||
|
0, 542, 552, 552, 552, 552, 552, 561, 561, 561,
|
||
|
561, 567, 567, 567, 567, 567, 0, 0, 0, 542,
|
||
|
543, 543, 543, 0, 0, 543, 0, 543, 543, 543,
|
||
|
543, 543, 543, 554, 554, 554, 0, 0, 554, 0,
|
||
|
0, 554, 554, 554, 554, 554, 0, 0, 0, 554,
|
||
|
560, 560, 560, 0, 0, 560, 568, 568, 568, 568,
|
||
|
576, 576, 576, 576, 0, 0, 560, 554, 555, 555,
|
||
|
555, 0, 0, 555, 0, 555, 555, 555, 555, 555,
|
||
|
555, 556, 556, 556, 560, 0, 556, 0, 556, 556,
|
||
|
|
||
|
556, 556, 556, 556, 562, 562, 562, 0, 0, 562,
|
||
|
0, 0, 0, 562, 562, 562, 562, 563, 563, 563,
|
||
|
0, 0, 563, 0, 563, 563, 563, 563, 563, 563,
|
||
|
564, 564, 564, 0, 0, 564, 0, 564, 564, 564,
|
||
|
564, 564, 564, 565, 565, 565, 0, 0, 565, 0,
|
||
|
0, 565, 565, 565, 565, 565, 0, 0, 0, 565,
|
||
|
575, 575, 575, 0, 0, 575, 577, 577, 577, 577,
|
||
|
579, 579, 579, 579, 0, 0, 575, 565, 566, 566,
|
||
|
566, 0, 0, 566, 0, 566, 566, 566, 566, 566,
|
||
|
566, 569, 569, 569, 575, 0, 569, 0, 0, 569,
|
||
|
|
||
|
569, 569, 569, 569, 0, 0, 0, 569, 580, 580,
|
||
|
580, 580, 584, 584, 584, 584, 584, 585, 585, 585,
|
||
|
585, 593, 593, 593, 593, 569, 570, 570, 570, 0,
|
||
|
0, 570, 0, 570, 570, 570, 570, 570, 570, 578,
|
||
|
578, 578, 0, 0, 578, 0, 0, 0, 578, 578,
|
||
|
578, 578, 0, 0, 0, 578, 599, 599, 599, 599,
|
||
|
599, 0, 0, 0, 586, 586, 586, 586, 586, 0,
|
||
|
0, 0, 586, 578, 581, 581, 581, 0, 0, 581,
|
||
|
0, 581, 581, 581, 581, 581, 581, 582, 582, 582,
|
||
|
586, 0, 582, 0, 582, 582, 582, 582, 582, 582,
|
||
|
|
||
|
587, 587, 587, 0, 0, 587, 0, 587, 587, 587,
|
||
|
587, 587, 587, 588, 588, 588, 0, 0, 588, 0,
|
||
|
588, 588, 588, 588, 588, 588, 594, 594, 594, 0,
|
||
|
0, 594, 0, 0, 0, 594, 594, 594, 594, 595,
|
||
|
595, 595, 0, 0, 595, 0, 595, 595, 595, 595,
|
||
|
595, 595, 596, 596, 596, 0, 0, 596, 0, 596,
|
||
|
596, 596, 596, 596, 596, 597, 597, 597, 0, 0,
|
||
|
597, 0, 0, 597, 597, 597, 597, 597, 0, 0,
|
||
|
0, 597, 600, 600, 600, 600, 608, 608, 608, 608,
|
||
|
609, 609, 609, 609, 691, 691, 691, 691, 0, 597,
|
||
|
|
||
|
598, 598, 598, 0, 0, 598, 0, 598, 598, 598,
|
||
|
598, 598, 598, 601, 601, 601, 0, 0, 601, 0,
|
||
|
0, 601, 601, 601, 601, 601, 611, 611, 611, 601,
|
||
|
0, 611, 0, 0, 0, 610, 610, 610, 610, 610,
|
||
|
937, 937, 937, 610, 0, 937, 0, 601, 602, 602,
|
||
|
602, 0, 937, 602, 611, 602, 602, 602, 602, 602,
|
||
|
602, 610, 616, 616, 616, 616, 0, 617, 617, 616,
|
||
|
617, 617, 617, 617, 622, 622, 0, 622, 622, 622,
|
||
|
622, 692, 692, 692, 692, 0, 0, 616, 618, 618,
|
||
|
618, 0, 0, 618, 618, 618, 618, 618, 618, 618,
|
||
|
|
||
|
618, 619, 619, 619, 0, 0, 619, 0, 619, 619,
|
||
|
619, 619, 619, 619, 0, 627, 627, 619, 627, 627,
|
||
|
627, 627, 639, 639, 0, 639, 639, 639, 639, 699,
|
||
|
699, 699, 699, 0, 0, 619, 620, 620, 620, 0,
|
||
|
0, 620, 620, 620, 620, 620, 620, 620, 620, 621,
|
||
|
621, 621, 0, 0, 621, 0, 0, 0, 621, 621,
|
||
|
621, 621, 0, 644, 644, 621, 644, 644, 644, 644,
|
||
|
704, 704, 704, 704, 704, 643, 643, 643, 643, 0,
|
||
|
0, 0, 643, 621, 623, 623, 623, 0, 0, 623,
|
||
|
623, 623, 623, 623, 623, 623, 623, 624, 624, 624,
|
||
|
|
||
|
643, 0, 624, 0, 0, 0, 624, 624, 624, 624,
|
||
|
0, 649, 649, 624, 649, 649, 649, 649, 705, 705,
|
||
|
705, 705, 0, 651, 651, 651, 651, 0, 0, 0,
|
||
|
651, 624, 625, 625, 625, 0, 0, 625, 0, 625,
|
||
|
625, 625, 625, 625, 625, 626, 626, 626, 651, 0,
|
||
|
626, 0, 626, 626, 626, 626, 626, 626, 628, 628,
|
||
|
628, 0, 0, 628, 0, 628, 628, 628, 628, 628,
|
||
|
628, 629, 629, 629, 0, 0, 629, 0, 629, 629,
|
||
|
629, 629, 629, 629, 630, 630, 630, 0, 0, 630,
|
||
|
0, 630, 630, 630, 630, 630, 630, 631, 631, 631,
|
||
|
|
||
|
0, 0, 631, 631, 631, 631, 631, 631, 631, 631,
|
||
|
632, 632, 632, 0, 0, 632, 0, 632, 632, 632,
|
||
|
632, 632, 632, 0, 652, 652, 632, 652, 652, 652,
|
||
|
652, 657, 657, 0, 657, 657, 657, 657, 713, 713,
|
||
|
713, 713, 0, 0, 632, 633, 633, 633, 0, 0,
|
||
|
633, 0, 633, 633, 633, 633, 633, 633, 634, 634,
|
||
|
634, 0, 0, 634, 0, 634, 634, 634, 634, 634,
|
||
|
634, 635, 635, 635, 0, 0, 635, 0, 635, 635,
|
||
|
635, 635, 635, 635, 636, 636, 636, 0, 0, 636,
|
||
|
636, 636, 636, 636, 636, 636, 636, 637, 637, 637,
|
||
|
|
||
|
0, 0, 637, 0, 0, 0, 637, 637, 637, 637,
|
||
|
0, 662, 662, 637, 662, 662, 662, 662, 674, 674,
|
||
|
0, 674, 674, 674, 674, 718, 718, 718, 718, 718,
|
||
|
0, 637, 638, 638, 638, 0, 0, 638, 0, 638,
|
||
|
638, 638, 638, 638, 638, 640, 640, 640, 0, 0,
|
||
|
640, 0, 640, 640, 640, 640, 640, 640, 641, 641,
|
||
|
641, 0, 0, 641, 0, 641, 641, 641, 641, 641,
|
||
|
641, 642, 642, 642, 0, 0, 642, 642, 642, 642,
|
||
|
642, 642, 642, 642, 645, 645, 645, 0, 0, 645,
|
||
|
645, 645, 645, 645, 645, 645, 645, 646, 646, 646,
|
||
|
|
||
|
0, 0, 646, 0, 646, 646, 646, 646, 646, 646,
|
||
|
0, 679, 679, 646, 679, 679, 679, 679, 719, 719,
|
||
|
719, 719, 0, 678, 678, 678, 678, 0, 0, 0,
|
||
|
678, 646, 647, 647, 647, 0, 0, 647, 647, 647,
|
||
|
647, 647, 647, 647, 647, 648, 648, 648, 678, 0,
|
||
|
648, 0, 0, 0, 648, 648, 648, 648, 0, 684,
|
||
|
684, 648, 684, 684, 684, 684, 727, 727, 727, 727,
|
||
|
706, 706, 706, 706, 706, 0, 0, 0, 706, 648,
|
||
|
650, 650, 650, 0, 0, 650, 650, 650, 650, 650,
|
||
|
650, 650, 650, 653, 653, 653, 706, 0, 653, 653,
|
||
|
|
||
|
653, 653, 653, 653, 653, 653, 654, 654, 654, 0,
|
||
|
0, 654, 0, 654, 654, 654, 654, 654, 654, 0,
|
||
|
0, 0, 654, 698, 698, 698, 0, 0, 698, 728,
|
||
|
728, 728, 728, 734, 734, 734, 734, 734, 0, 698,
|
||
|
654, 655, 655, 655, 0, 0, 655, 655, 655, 655,
|
||
|
655, 655, 655, 655, 656, 656, 656, 698, 0, 656,
|
||
|
0, 0, 0, 656, 656, 656, 656, 0, 0, 0,
|
||
|
656, 735, 735, 735, 735, 743, 743, 743, 743, 729,
|
||
|
729, 729, 729, 729, 0, 0, 0, 729, 656, 658,
|
||
|
658, 658, 0, 0, 658, 658, 658, 658, 658, 658,
|
||
|
|
||
|
658, 658, 659, 659, 659, 729, 0, 659, 0, 0,
|
||
|
0, 659, 659, 659, 659, 0, 0, 0, 659, 744,
|
||
|
744, 744, 744, 746, 746, 746, 746, 745, 745, 745,
|
||
|
745, 745, 0, 0, 0, 745, 659, 660, 660, 660,
|
||
|
0, 0, 660, 0, 660, 660, 660, 660, 660, 660,
|
||
|
661, 661, 661, 745, 0, 661, 0, 661, 661, 661,
|
||
|
661, 661, 661, 663, 663, 663, 0, 0, 663, 0,
|
||
|
663, 663, 663, 663, 663, 663, 664, 664, 664, 0,
|
||
|
0, 664, 0, 664, 664, 664, 664, 664, 664, 665,
|
||
|
665, 665, 0, 0, 665, 0, 665, 665, 665, 665,
|
||
|
|
||
|
665, 665, 666, 666, 666, 0, 0, 666, 666, 666,
|
||
|
666, 666, 666, 666, 666, 667, 667, 667, 0, 0,
|
||
|
667, 0, 667, 667, 667, 667, 667, 667, 0, 0,
|
||
|
0, 667, 751, 751, 751, 751, 752, 752, 752, 752,
|
||
|
753, 753, 753, 753, 753, 0, 0, 0, 753, 667,
|
||
|
668, 668, 668, 0, 0, 668, 0, 668, 668, 668,
|
||
|
668, 668, 668, 669, 669, 669, 753, 0, 669, 0,
|
||
|
669, 669, 669, 669, 669, 669, 670, 670, 670, 0,
|
||
|
0, 670, 0, 670, 670, 670, 670, 670, 670, 671,
|
||
|
671, 671, 0, 0, 671, 671, 671, 671, 671, 671,
|
||
|
|
||
|
671, 671, 672, 672, 672, 0, 0, 672, 0, 0,
|
||
|
0, 672, 672, 672, 672, 0, 0, 0, 672, 754,
|
||
|
754, 754, 754, 755, 755, 755, 755, 762, 762, 762,
|
||
|
762, 767, 767, 767, 767, 0, 672, 673, 673, 673,
|
||
|
0, 0, 673, 0, 673, 673, 673, 673, 673, 673,
|
||
|
675, 675, 675, 0, 0, 675, 0, 675, 675, 675,
|
||
|
675, 675, 675, 676, 676, 676, 0, 0, 676, 0,
|
||
|
676, 676, 676, 676, 676, 676, 677, 677, 677, 0,
|
||
|
0, 677, 677, 677, 677, 677, 677, 677, 677, 680,
|
||
|
680, 680, 0, 0, 680, 680, 680, 680, 680, 680,
|
||
|
|
||
|
680, 680, 681, 681, 681, 0, 0, 681, 0, 681,
|
||
|
681, 681, 681, 681, 681, 0, 0, 0, 681, 761,
|
||
|
761, 761, 0, 0, 761, 768, 768, 768, 768, 775,
|
||
|
775, 775, 775, 0, 0, 761, 681, 682, 682, 682,
|
||
|
0, 0, 682, 682, 682, 682, 682, 682, 682, 682,
|
||
|
683, 683, 683, 761, 0, 683, 0, 0, 0, 683,
|
||
|
683, 683, 683, 0, 0, 0, 683, 774, 774, 774,
|
||
|
0, 0, 774, 780, 780, 780, 780, 780, 781, 781,
|
||
|
781, 781, 0, 774, 683, 685, 685, 685, 0, 0,
|
||
|
685, 685, 685, 685, 685, 685, 685, 685, 693, 693,
|
||
|
|
||
|
693, 774, 0, 693, 0, 693, 693, 693, 693, 693,
|
||
|
693, 694, 694, 694, 0, 0, 694, 0, 694, 694,
|
||
|
694, 694, 694, 694, 696, 696, 696, 0, 0, 696,
|
||
|
0, 696, 696, 696, 696, 696, 696, 697, 697, 697,
|
||
|
0, 0, 697, 0, 697, 697, 697, 697, 697, 697,
|
||
|
700, 700, 700, 0, 0, 700, 0, 0, 0, 700,
|
||
|
700, 700, 700, 701, 701, 701, 0, 0, 701, 0,
|
||
|
701, 701, 701, 701, 701, 701, 702, 702, 702, 0,
|
||
|
0, 702, 0, 702, 702, 702, 702, 702, 702, 707,
|
||
|
707, 707, 0, 0, 707, 0, 707, 707, 707, 707,
|
||
|
|
||
|
707, 707, 708, 708, 708, 0, 0, 708, 0, 708,
|
||
|
708, 708, 708, 708, 708, 714, 714, 714, 0, 0,
|
||
|
714, 0, 0, 0, 714, 714, 714, 714, 715, 715,
|
||
|
715, 0, 0, 715, 0, 715, 715, 715, 715, 715,
|
||
|
715, 716, 716, 716, 0, 0, 716, 0, 716, 716,
|
||
|
716, 716, 716, 716, 717, 717, 717, 0, 0, 717,
|
||
|
0, 0, 717, 717, 717, 717, 717, 0, 0, 0,
|
||
|
717, 789, 789, 789, 789, 0, 782, 782, 782, 782,
|
||
|
782, 938, 938, 938, 782, 0, 938, 0, 717, 720,
|
||
|
720, 720, 0, 0, 720, 0, 0, 720, 720, 720,
|
||
|
|
||
|
720, 720, 782, 0, 0, 720, 794, 794, 794, 794,
|
||
|
794, 795, 795, 795, 795, 803, 803, 803, 803, 804,
|
||
|
804, 804, 804, 720, 721, 721, 721, 0, 0, 721,
|
||
|
0, 721, 721, 721, 721, 721, 721, 722, 722, 722,
|
||
|
0, 0, 722, 0, 722, 722, 722, 722, 722, 722,
|
||
|
730, 730, 730, 0, 0, 730, 0, 730, 730, 730,
|
||
|
730, 730, 730, 731, 731, 731, 0, 0, 731, 0,
|
||
|
731, 731, 731, 731, 731, 731, 732, 732, 732, 0,
|
||
|
0, 732, 0, 0, 732, 732, 732, 732, 732, 0,
|
||
|
0, 0, 732, 810, 810, 810, 810, 810, 0, 0,
|
||
|
|
||
|
0, 805, 805, 805, 805, 805, 0, 0, 0, 805,
|
||
|
732, 733, 733, 733, 0, 0, 733, 0, 733, 733,
|
||
|
733, 733, 733, 733, 736, 736, 736, 805, 0, 736,
|
||
|
0, 0, 736, 736, 736, 736, 736, 0, 0, 0,
|
||
|
736, 811, 811, 811, 811, 819, 819, 819, 819, 820,
|
||
|
820, 820, 820, 822, 822, 822, 822, 0, 736, 737,
|
||
|
737, 737, 0, 0, 737, 0, 737, 737, 737, 737,
|
||
|
737, 737, 747, 747, 747, 0, 0, 747, 0, 0,
|
||
|
0, 747, 747, 747, 747, 748, 748, 748, 0, 0,
|
||
|
748, 0, 748, 748, 748, 748, 748, 748, 749, 749,
|
||
|
|
||
|
749, 0, 0, 749, 0, 749, 749, 749, 749, 749,
|
||
|
749, 750, 750, 750, 0, 0, 750, 0, 0, 750,
|
||
|
750, 750, 750, 750, 0, 0, 0, 750, 827, 827,
|
||
|
827, 827, 828, 828, 828, 828, 821, 821, 821, 821,
|
||
|
821, 0, 0, 0, 821, 750, 756, 756, 756, 0,
|
||
|
0, 756, 0, 756, 756, 756, 756, 756, 756, 757,
|
||
|
757, 757, 821, 0, 757, 0, 757, 757, 757, 757,
|
||
|
757, 757, 759, 759, 759, 0, 0, 759, 0, 759,
|
||
|
759, 759, 759, 759, 759, 760, 760, 760, 0, 0,
|
||
|
760, 0, 760, 760, 760, 760, 760, 760, 763, 763,
|
||
|
|
||
|
763, 0, 0, 763, 0, 0, 0, 763, 763, 763,
|
||
|
763, 764, 764, 764, 0, 0, 764, 0, 764, 764,
|
||
|
764, 764, 764, 764, 765, 765, 765, 0, 0, 765,
|
||
|
0, 765, 765, 765, 765, 765, 765, 769, 769, 769,
|
||
|
0, 0, 769, 0, 769, 769, 769, 769, 769, 769,
|
||
|
770, 770, 770, 0, 0, 770, 0, 770, 770, 770,
|
||
|
770, 770, 770, 772, 772, 772, 0, 0, 772, 0,
|
||
|
772, 772, 772, 772, 772, 772, 773, 773, 773, 0,
|
||
|
0, 773, 0, 773, 773, 773, 773, 773, 773, 776,
|
||
|
776, 776, 0, 0, 776, 0, 0, 0, 776, 776,
|
||
|
|
||
|
776, 776, 777, 777, 777, 0, 0, 777, 0, 777,
|
||
|
777, 777, 777, 777, 777, 778, 778, 778, 0, 0,
|
||
|
778, 0, 778, 778, 778, 778, 778, 778, 783, 783,
|
||
|
783, 0, 0, 783, 0, 783, 783, 783, 783, 783,
|
||
|
783, 784, 784, 784, 0, 0, 784, 0, 784, 784,
|
||
|
784, 784, 784, 784, 790, 790, 790, 0, 0, 790,
|
||
|
0, 0, 0, 790, 790, 790, 790, 791, 791, 791,
|
||
|
0, 0, 791, 0, 791, 791, 791, 791, 791, 791,
|
||
|
792, 792, 792, 0, 0, 792, 0, 792, 792, 792,
|
||
|
792, 792, 792, 793, 793, 793, 0, 0, 793, 0,
|
||
|
|
||
|
0, 793, 793, 793, 793, 793, 0, 0, 0, 793,
|
||
|
830, 830, 830, 830, 0, 829, 829, 829, 829, 829,
|
||
|
939, 939, 939, 829, 0, 939, 0, 793, 796, 796,
|
||
|
796, 0, 0, 796, 0, 0, 796, 796, 796, 796,
|
||
|
796, 829, 0, 0, 796, 831, 831, 831, 831, 838,
|
||
|
838, 838, 838, 843, 843, 843, 0, 0, 843, 0,
|
||
|
0, 843, 796, 797, 797, 797, 0, 0, 797, 0,
|
||
|
797, 797, 797, 797, 797, 797, 798, 798, 798, 0,
|
||
|
0, 798, 0, 798, 798, 798, 798, 798, 798, 806,
|
||
|
806, 806, 0, 0, 806, 0, 806, 806, 806, 806,
|
||
|
|
||
|
806, 806, 807, 807, 807, 0, 0, 807, 0, 807,
|
||
|
807, 807, 807, 807, 807, 808, 808, 808, 0, 0,
|
||
|
808, 0, 0, 808, 808, 808, 808, 808, 0, 0,
|
||
|
0, 808, 837, 837, 837, 848, 848, 837, 848, 848,
|
||
|
848, 848, 865, 865, 865, 865, 865, 0, 837, 808,
|
||
|
809, 809, 809, 0, 0, 809, 0, 809, 809, 809,
|
||
|
809, 809, 809, 812, 812, 812, 837, 0, 812, 0,
|
||
|
0, 812, 812, 812, 812, 812, 0, 853, 853, 812,
|
||
|
853, 853, 853, 853, 867, 867, 867, 867, 867, 847,
|
||
|
847, 847, 847, 0, 0, 0, 847, 812, 813, 813,
|
||
|
|
||
|
813, 0, 0, 813, 0, 813, 813, 813, 813, 813,
|
||
|
813, 823, 823, 823, 847, 0, 823, 0, 0, 0,
|
||
|
823, 823, 823, 823, 824, 824, 824, 0, 0, 824,
|
||
|
0, 824, 824, 824, 824, 824, 824, 825, 825, 825,
|
||
|
0, 0, 825, 0, 825, 825, 825, 825, 825, 825,
|
||
|
826, 826, 826, 0, 0, 826, 0, 0, 826, 826,
|
||
|
826, 826, 826, 0, 858, 858, 826, 858, 858, 858,
|
||
|
858, 870, 870, 870, 870, 870, 862, 862, 862, 862,
|
||
|
0, 0, 0, 862, 826, 832, 832, 832, 0, 0,
|
||
|
832, 0, 832, 832, 832, 832, 832, 832, 833, 833,
|
||
|
|
||
|
833, 862, 0, 833, 0, 833, 833, 833, 833, 833,
|
||
|
833, 835, 835, 835, 0, 0, 835, 0, 835, 835,
|
||
|
835, 835, 835, 835, 836, 836, 836, 0, 0, 836,
|
||
|
0, 836, 836, 836, 836, 836, 836, 839, 839, 839,
|
||
|
0, 0, 839, 0, 0, 0, 839, 839, 839, 839,
|
||
|
840, 840, 840, 0, 0, 840, 0, 840, 840, 840,
|
||
|
840, 840, 840, 841, 841, 841, 0, 0, 841, 0,
|
||
|
841, 841, 841, 841, 841, 841, 849, 849, 849, 0,
|
||
|
0, 849, 849, 849, 849, 849, 849, 849, 849, 850,
|
||
|
850, 850, 0, 0, 850, 0, 850, 850, 850, 850,
|
||
|
|
||
|
850, 850, 0, 863, 863, 850, 863, 863, 863, 863,
|
||
|
864, 864, 0, 864, 864, 864, 864, 872, 872, 872,
|
||
|
872, 872, 0, 850, 851, 851, 851, 0, 0, 851,
|
||
|
851, 851, 851, 851, 851, 851, 851, 852, 852, 852,
|
||
|
0, 0, 852, 0, 0, 0, 852, 852, 852, 852,
|
||
|
0, 866, 866, 852, 866, 866, 866, 866, 868, 868,
|
||
|
0, 868, 868, 868, 868, 875, 875, 875, 875, 875,
|
||
|
0, 852, 854, 854, 854, 0, 0, 854, 854, 854,
|
||
|
854, 854, 854, 854, 854, 855, 855, 855, 0, 0,
|
||
|
855, 0, 855, 855, 855, 855, 855, 855, 0, 869,
|
||
|
|
||
|
869, 855, 869, 869, 869, 869, 871, 871, 0, 871,
|
||
|
871, 871, 871, 880, 880, 880, 880, 0, 0, 855,
|
||
|
856, 856, 856, 0, 0, 856, 856, 856, 856, 856,
|
||
|
856, 856, 856, 857, 857, 857, 0, 0, 857, 0,
|
||
|
0, 0, 857, 857, 857, 857, 0, 873, 873, 857,
|
||
|
873, 873, 873, 873, 874, 874, 0, 874, 874, 874,
|
||
|
874, 881, 881, 881, 881, 0, 0, 857, 859, 859,
|
||
|
859, 0, 0, 859, 859, 859, 859, 859, 859, 859,
|
||
|
859, 860, 860, 860, 0, 0, 860, 0, 860, 860,
|
||
|
860, 860, 860, 860, 0, 876, 876, 860, 876, 876,
|
||
|
|
||
|
876, 876, 877, 877, 877, 0, 0, 877, 940, 940,
|
||
|
940, 877, 0, 940, 0, 860, 861, 861, 861, 0,
|
||
|
0, 861, 861, 861, 861, 861, 861, 861, 861, 882,
|
||
|
882, 882, 0, 0, 882, 0, 882, 882, 882, 882,
|
||
|
882, 882, 887, 887, 887, 0, 0, 887, 887, 887,
|
||
|
888, 888, 888, 888, 896, 896, 896, 896, 887, 904,
|
||
|
904, 904, 904, 905, 905, 905, 905, 906, 906, 906,
|
||
|
906, 907, 907, 907, 907, 0, 887, 889, 889, 889,
|
||
|
0, 0, 889, 0, 0, 0, 889, 889, 889, 889,
|
||
|
890, 890, 890, 0, 0, 890, 0, 890, 890, 890,
|
||
|
|
||
|
890, 890, 890, 895, 895, 895, 0, 0, 895, 895,
|
||
|
895, 908, 908, 908, 908, 0, 0, 0, 908, 895,
|
||
|
909, 909, 909, 909, 910, 910, 910, 910, 912, 912,
|
||
|
912, 912, 914, 914, 914, 914, 908, 895, 897, 897,
|
||
|
897, 0, 0, 897, 0, 0, 0, 897, 897, 897,
|
||
|
897, 898, 898, 898, 0, 0, 898, 0, 898, 898,
|
||
|
898, 898, 898, 898, 903, 903, 903, 0, 0, 903,
|
||
|
903, 903, 0, 911, 911, 911, 911, 911, 0, 0,
|
||
|
903, 911, 915, 915, 915, 915, 0, 0, 916, 916,
|
||
|
916, 916, 936, 936, 936, 916, 0, 936, 903, 911,
|
||
|
|
||
|
913, 913, 913, 0, 0, 913, 0, 0, 0, 913,
|
||
|
913, 913, 913, 916, 917, 917, 917, 917, 918, 918,
|
||
|
918, 918, 919, 919, 919, 919, 919, 936, 0, 0,
|
||
|
919, 920, 920, 920, 920, 921, 921, 921, 921, 922,
|
||
|
922, 922, 922, 923, 923, 923, 923, 0, 919, 924,
|
||
|
924, 924, 924, 0, 0, 0, 924, 925, 925, 925,
|
||
|
925, 926, 926, 926, 926, 927, 927, 927, 927, 927,
|
||
|
931, 931, 931, 927, 924, 931, 934, 934, 934, 0,
|
||
|
941, 934, 941, 0, 0, 941, 0, 942, 942, 942,
|
||
|
0, 927, 942, 943, 944, 943, 944, 0, 943, 944,
|
||
|
|
||
|
945, 946, 945, 946, 0, 945, 946, 947, 0, 947,
|
||
|
0, 0, 947, 931, 0, 0, 0, 0, 934, 949,
|
||
|
949, 949, 949, 949, 949, 949, 949, 950, 950, 950,
|
||
|
950, 950, 950, 950, 950, 951, 951, 951, 951, 951,
|
||
|
951, 951, 951, 952, 952, 952, 952, 952, 952, 952,
|
||
|
952, 953, 953, 953, 953, 953, 953, 953, 953, 954,
|
||
|
0, 0, 954, 955, 0, 0, 955, 0, 955, 955,
|
||
|
955, 956, 956, 956, 956, 956, 956, 956, 956, 957,
|
||
|
0, 0, 957, 0, 957, 957, 958, 958, 958, 958,
|
||
|
958, 958, 958, 958, 959, 959, 0, 959, 0, 959,
|
||
|
|
||
|
959, 959, 960, 960, 960, 960, 960, 960, 960, 960,
|
||
|
961, 961, 0, 961, 961, 961, 961, 961, 962, 962,
|
||
|
962, 962, 962, 962, 962, 962, 963, 963, 963, 963,
|
||
|
963, 963, 963, 963, 964, 964, 0, 0, 964, 964,
|
||
|
966, 966, 966, 966, 966, 966, 966, 966, 967, 967,
|
||
|
967, 967, 967, 967, 967, 967, 968, 968, 968, 968,
|
||
|
968, 968, 968, 968, 969, 969, 969, 969, 969, 969,
|
||
|
969, 969, 971, 971, 971, 971, 971, 971, 971, 971,
|
||
|
972, 972, 972, 972, 972, 972, 972, 972, 973, 973,
|
||
|
973, 973, 973, 973, 973, 973, 974, 974, 0, 974,
|
||
|
|
||
|
0, 974, 974, 974, 975, 975, 975, 975, 975, 975,
|
||
|
975, 975, 977, 977, 0, 977, 977, 977, 977, 977,
|
||
|
978, 978, 978, 978, 978, 978, 978, 978, 979, 0,
|
||
|
0, 979, 980, 980, 980, 980, 980, 980, 980, 980,
|
||
|
981, 981, 981, 981, 981, 981, 981, 981, 982, 982,
|
||
|
0, 0, 982, 982, 984, 984, 984, 984, 984, 984,
|
||
|
984, 984, 986, 986, 986, 986, 986, 986, 986, 986,
|
||
|
987, 987, 987, 987, 987, 987, 987, 987, 989, 989,
|
||
|
989, 989, 989, 989, 989, 989, 990, 990, 990, 990,
|
||
|
990, 990, 990, 990, 991, 991, 991, 991, 991, 991,
|
||
|
|
||
|
991, 991, 992, 992, 992, 992, 992, 992, 992, 992,
|
||
|
993, 993, 993, 993, 993, 993, 993, 993, 994, 994,
|
||
|
994, 994, 994, 994, 994, 994, 995, 995, 995, 995,
|
||
|
995, 995, 995, 995, 996, 996, 996, 996, 996, 996,
|
||
|
996, 996, 997, 997, 997, 997, 997, 997, 997, 997,
|
||
|
998, 998, 998, 998, 998, 998, 998, 998, 999, 999,
|
||
|
999, 999, 999, 999, 999, 999, 1000, 1000, 1000, 1000,
|
||
|
1000, 1000, 1000, 1000, 1001, 1001, 1001, 1001, 1001, 1001,
|
||
|
1001, 1001, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
|
||
|
1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1004, 1004,
|
||
|
|
||
|
1004, 1004, 1004, 1004, 1004, 1004, 1005, 1005, 1005, 1005,
|
||
|
1005, 1005, 1005, 1005, 1006, 0, 0, 1006, 1007, 1007,
|
||
|
1007, 1007, 1007, 1007, 1007, 1007, 1008, 1008, 1008, 1008,
|
||
|
1008, 1008, 1008, 1008, 1009, 1009, 1009, 1009, 1009, 1009,
|
||
|
1009, 1009, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011,
|
||
|
1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1013, 1013,
|
||
|
1013, 1013, 1013, 1013, 1013, 1013, 1014, 1014, 1014, 1014,
|
||
|
1014, 1014, 1014, 1014, 1015, 1015, 1015, 1015, 1015, 1015,
|
||
|
1015, 1015, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
|
||
|
1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1018, 1018,
|
||
|
|
||
|
1018, 1018, 1018, 1018, 1018, 1018, 1019, 1019, 1019, 1019,
|
||
|
1019, 1019, 1019, 1019, 1020, 1020, 1020, 1020, 1020, 1020,
|
||
|
1020, 1020, 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021,
|
||
|
1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1023, 1023,
|
||
|
1023, 1023, 1023, 1023, 1023, 1023, 1024, 1024, 1024, 1024,
|
||
|
1024, 1024, 1024, 1024, 1025, 1025, 1025, 1025, 1025, 1025,
|
||
|
1025, 1025, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
|
||
|
1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1028, 1028,
|
||
|
1028, 1028, 1028, 1028, 1028, 1028, 1029, 0, 0, 1029,
|
||
|
1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1031, 1031,
|
||
|
|
||
|
1031, 1031, 1031, 1031, 1031, 1031, 1032, 1032, 1032, 1032,
|
||
|
1032, 1032, 1032, 1032, 1033, 1033, 1033, 1033, 1033, 1033,
|
||
|
1033, 1033, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
|
||
|
1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1036, 1036,
|
||
|
1036, 1036, 1036, 1036, 1036, 1036, 1037, 1037, 1037, 1037,
|
||
|
1037, 1037, 1037, 1037, 1038, 1038, 1038, 1038, 1038, 1038,
|
||
|
1038, 1038, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
|
||
|
1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1041, 1041,
|
||
|
1041, 1041, 1041, 1041, 1041, 1041, 1042, 1042, 1042, 1042,
|
||
|
1042, 1042, 1042, 1042, 1043, 1043, 1043, 1043, 1043, 1043,
|
||
|
|
||
|
1043, 1043, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044,
|
||
|
1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1046, 1046,
|
||
|
1046, 1046, 1046, 1046, 1046, 1046, 1047, 1047, 1047, 1047,
|
||
|
1047, 1047, 1047, 1047, 1048, 1048, 1048, 1048, 1048, 1048,
|
||
|
1048, 1048, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049,
|
||
|
1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1051, 1051,
|
||
|
1051, 1051, 1051, 1051, 1051, 1051, 1052, 1052, 1052, 1052,
|
||
|
1052, 1052, 1052, 1052, 1053, 1053, 1053, 1053, 1053, 1053,
|
||
|
1053, 1053, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
|
||
|
1055, 0, 0, 1055, 1056, 1056, 1056, 1056, 1056, 1056,
|
||
|
|
||
|
1056, 1056, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057,
|
||
|
1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1059, 1059,
|
||
|
1059, 1059, 1059, 1059, 1059, 1059, 1060, 1060, 1060, 1060,
|
||
|
1060, 1060, 1060, 1060, 1061, 1061, 1061, 1061, 1061, 1061,
|
||
|
1061, 1061, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062,
|
||
|
1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1064, 1064,
|
||
|
1064, 1064, 1064, 1064, 1064, 1064, 1065, 1065, 1065, 1065,
|
||
|
1065, 1065, 1065, 1065, 1066, 1066, 1066, 1066, 1066, 1066,
|
||
|
1066, 1066, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067,
|
||
|
1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1069, 1069,
|
||
|
|
||
|
1069, 1069, 1069, 1069, 1069, 1069, 1070, 1070, 1070, 1070,
|
||
|
1070, 1070, 1070, 1070, 1071, 1071, 1071, 1071, 1071, 1071,
|
||
|
1071, 1071, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072,
|
||
|
1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1074, 1074,
|
||
|
1074, 1074, 1074, 1074, 1074, 1074, 1075, 1075, 1075, 1075,
|
||
|
1075, 1075, 1075, 1075, 1076, 1076, 1076, 1076, 1076, 1076,
|
||
|
1076, 1076, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
|
||
|
1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1079, 1079,
|
||
|
1079, 1079, 1079, 1079, 1079, 1079, 1080, 1080, 1080, 1080,
|
||
|
1080, 1080, 1080, 1080, 1081, 0, 0, 1081, 1082, 1082,
|
||
|
|
||
|
1082, 1082, 1082, 1082, 1082, 1082, 1083, 1083, 1083, 1083,
|
||
|
1083, 1083, 1083, 1083, 1084, 1084, 1084, 1084, 1084, 1084,
|
||
|
1084, 1084, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085,
|
||
|
1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1087, 1087,
|
||
|
1087, 1087, 1087, 1087, 1087, 1087, 1088, 1088, 1088, 1088,
|
||
|
1088, 1088, 1088, 1088, 1089, 1089, 0, 1089, 1089, 1089,
|
||
|
1089, 1089, 948, 948, 948, 948, 948, 948, 948, 948,
|
||
|
948, 948, 948, 948, 948, 948, 948, 948, 948, 948,
|
||
|
948, 948, 948, 948, 948, 948, 948, 948, 948, 948,
|
||
|
948, 948, 948, 948, 948, 948, 948, 948, 948, 948,
|
||
|
|
||
|
948, 948, 948, 948, 948, 948, 948, 948, 948, 948
|
||
|
} ;
|
||
|
|
||
|
static yy_state_type yy_last_accepting_state;
|
||
|
static char *yy_last_accepting_cpos;
|
||
|
|
||
|
extern int yy_flex_debug;
|
||
|
int yy_flex_debug = 1;
|
||
|
|
||
|
static const short int yy_rule_linenum[49] =
|
||
|
{ 0,
|
||
|
122, 127, 128, 129, 130, 131, 132, 133, 134, 135,
|
||
|
136, 137, 138, 141, 145, 149, 157, 160, 164, 169,
|
||
|
177, 178, 180, 184, 195, 199, 205, 206, 211, 220,
|
||
|
234, 235, 240, 249, 260, 263, 264, 266, 270, 274,
|
||
|
279, 281, 282, 289, 295, 302, 305, 309
|
||
|
} ;
|
||
|
|
||
|
/* The intent behind this definition is that it'll catch
|
||
|
* any uses of REJECT which flex missed.
|
||
|
*/
|
||
|
#define REJECT reject_used_but_not_detected
|
||
|
#define yymore() yymore_used_but_not_detected
|
||
|
#define YY_MORE_ADJ 0
|
||
|
char *yytext;
|
||
|
/**************************************************
|
||
|
* VRML 2.0 Parser
|
||
|
* Copyright (C) 1996 Silicon Graphics, Inc.
|
||
|
*
|
||
|
* Author(s) : Gavin Bell
|
||
|
* Daniel Woods (first port)
|
||
|
**************************************************
|
||
|
*/
|
||
|
//#include "tokens.h"
|
||
|
#include <string.h>
|
||
|
|
||
|
// used to reset the lexer input after initialization of VRML nodes
|
||
|
void (*theyyInput)(char *, int &, int);
|
||
|
|
||
|
// We define the YY_INPUT so we an change the input source later
|
||
|
#define YY_INPUT(buf, result, max_size) (*theyyInput)(buf, result, max_size);
|
||
|
|
||
|
/* Current line number */
|
||
|
int currentLineNumber = 1;
|
||
|
void yyResetLineNumber() { currentLineNumber = 1; }
|
||
|
|
||
|
extern void yyerror(const char *);
|
||
|
|
||
|
/* The YACC parser sets this to a token to direct the lexer */
|
||
|
/* in cases where just syntax isn't enough: */
|
||
|
int expectToken = 0;
|
||
|
|
||
|
/* True when parsing a multiple-valued field: */
|
||
|
static int parsing_mf = 0;
|
||
|
|
||
|
/* These are used when parsing SFImage fields: */
|
||
|
static int sfImageIntsParsed = 0;
|
||
|
static int sfImageIntsExpected = 0;
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C"
|
||
|
#endif
|
||
|
int yywrap() { BEGIN INITIAL; return 1; }
|
||
|
|
||
|
/* Normal state: parsing nodes. The initial start state is used */
|
||
|
/* only to recognize the VRML header. */
|
||
|
/* Start tokens for all of the field types, */
|
||
|
/* except for MFNode and SFNode, which are almost completely handled */
|
||
|
/* by the parser: */
|
||
|
/* Big hairy expression for floating point numbers: */
|
||
|
/* Ints are decimal or hex (0x##): */
|
||
|
/* Whitespace. Using this pattern can screw up currentLineNumber, */
|
||
|
/* so it is only used wherever it is really convenient and it is */
|
||
|
/* extremely unlikely that the user will put in a carriage return */
|
||
|
/* (example: between the floats in an SFVec3f) */
|
||
|
/* And the same pattern without the newline */
|
||
|
/* Legal characters to start an identifier */
|
||
|
/* Legal other characters in an identifier */
|
||
|
|
||
|
/* Macros after this point can all be overridden by user definitions in
|
||
|
* section 1.
|
||
|
*/
|
||
|
|
||
|
#ifdef YY_MALLOC_DECL
|
||
|
YY_MALLOC_DECL
|
||
|
#else
|
||
|
#if __STDC__
|
||
|
#ifndef __cplusplus
|
||
|
#include <stdlib.h>
|
||
|
#endif
|
||
|
#else
|
||
|
/* Just try to get by without declaring the routines. This will fail
|
||
|
* miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
|
||
|
* or sizeof(void*) != sizeof(int).
|
||
|
*/
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
/* Amount of stuff to slurp up with each read. */
|
||
|
#ifndef YY_READ_BUF_SIZE
|
||
|
#define YY_READ_BUF_SIZE 8192
|
||
|
#endif
|
||
|
|
||
|
/* Copy whatever the last rule matched to the standard output. */
|
||
|
|
||
|
#ifndef ECHO
|
||
|
/* This used to be an fputs(), but since the string might contain NUL's,
|
||
|
* we now use fwrite().
|
||
|
*/
|
||
|
#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
|
||
|
#endif
|
||
|
|
||
|
/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
|
||
|
* is returned in "result".
|
||
|
*/
|
||
|
#ifndef YY_INPUT
|
||
|
#define YY_INPUT(buf,result,max_size) \
|
||
|
if ( yy_current_buffer->yy_is_interactive ) \
|
||
|
{ \
|
||
|
int c = getc( yyin ); \
|
||
|
result = c == EOF ? 0 : 1; \
|
||
|
buf[0] = (char) c; \
|
||
|
} \
|
||
|
else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
|
||
|
&& ferror( yyin ) ) \
|
||
|
YY_FATAL_ERROR( "input in flex scanner failed" );
|
||
|
#endif
|
||
|
|
||
|
/* No semi-colon after return; correct usage is to write "yyterminate();" -
|
||
|
* we don't want an extra ';' after the "return" because that will cause
|
||
|
* some compilers to complain about unreachable statements.
|
||
|
*/
|
||
|
#ifndef yyterminate
|
||
|
#define yyterminate() return YY_NULL
|
||
|
#endif
|
||
|
|
||
|
/* Number of entries by which start-condition stack grows. */
|
||
|
#ifndef YY_START_STACK_INCR
|
||
|
#define YY_START_STACK_INCR 25
|
||
|
#endif
|
||
|
|
||
|
/* Report a fatal error. */
|
||
|
#ifndef YY_FATAL_ERROR
|
||
|
#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
|
||
|
#endif
|
||
|
|
||
|
/* Default declaration of generated scanner - a define so the user can
|
||
|
* easily add parameters.
|
||
|
*/
|
||
|
#ifndef YY_DECL
|
||
|
#define YY_DECL int yylex ( vtkVRMLImporter* self )
|
||
|
#endif
|
||
|
|
||
|
/* Code executed at the beginning of each rule, after yytext and yyleng
|
||
|
* have been set up.
|
||
|
*/
|
||
|
#ifndef YY_USER_ACTION
|
||
|
#define YY_USER_ACTION
|
||
|
#endif
|
||
|
|
||
|
/* Code executed at the end of each rule. */
|
||
|
#ifndef YY_BREAK
|
||
|
#define YY_BREAK break;
|
||
|
#endif
|
||
|
|
||
|
vtkCxxRevisionMacro(vtkVRMLImporter, "$Revision: 1.71 $");
|
||
|
vtkStandardNewMacro(vtkVRMLImporter);
|
||
|
|
||
|
vtkPoints* vtkVRMLImporter::PointsNew()
|
||
|
{
|
||
|
vtkPoints* pts = vtkPoints::New();
|
||
|
this->Internal->Heap.Push(pts);
|
||
|
return pts;
|
||
|
}
|
||
|
|
||
|
vtkFloatArray* vtkVRMLImporter::FloatArrayNew()
|
||
|
{
|
||
|
vtkFloatArray* array = vtkFloatArray::New();
|
||
|
this->Internal->Heap.Push(array);
|
||
|
return array;
|
||
|
}
|
||
|
|
||
|
vtkIdTypeArray* vtkVRMLImporter::IdTypeArrayNew()
|
||
|
{
|
||
|
vtkIdTypeArray* array = vtkIdTypeArray::New();
|
||
|
this->Internal->Heap.Push(array);
|
||
|
return array;
|
||
|
}
|
||
|
|
||
|
void vtkVRMLImporter::DeleteObject(vtkObject* obj)
|
||
|
{
|
||
|
for(int i=0; i<this->Internal->Heap.Count(); i++)
|
||
|
{
|
||
|
if (obj == this->Internal->Heap[i])
|
||
|
{
|
||
|
this->Internal->Heap[i] = 0;
|
||
|
}
|
||
|
}
|
||
|
obj->Delete();
|
||
|
}
|
||
|
|
||
|
int yylex ( vtkVRMLImporter* self )
|
||
|
{
|
||
|
register yy_state_type yy_current_state;
|
||
|
register char *yy_cp, *yy_bp;
|
||
|
register int yy_act;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
/* Switch into a new start state if the parser */
|
||
|
/* just told us that we've read a field name */
|
||
|
/* and should expect a field value (or IS) */
|
||
|
if (expectToken != 0) {
|
||
|
if (yy_flex_debug)
|
||
|
fprintf(stderr,"LEX--> Start State %d\n", expectToken);
|
||
|
|
||
|
/*
|
||
|
* Annoying. This big switch is necessary because
|
||
|
* LEX wants to assign particular numbers to start
|
||
|
* tokens, and YACC wants to define all the tokens
|
||
|
* used, too. Sigh.
|
||
|
*/
|
||
|
switch(expectToken) {
|
||
|
case SFBOOL: BEGIN SFB; break;
|
||
|
case SFCOLOR: BEGIN SFC; break;
|
||
|
case SFFLOAT: BEGIN SFF; break;
|
||
|
case SFIMAGE: BEGIN SFIMG; break;
|
||
|
case SFINT32: BEGIN SFI; break;
|
||
|
case SFROTATION: BEGIN SFR; break;
|
||
|
case SFSTRING: BEGIN SFS; break;
|
||
|
case SFTIME: BEGIN SFT; break;
|
||
|
case SFVEC2F: BEGIN SFV2; break;
|
||
|
case SFVEC3F: BEGIN SFV3; break;
|
||
|
case MFCOLOR: BEGIN MFC; break;
|
||
|
case MFFLOAT: BEGIN MFF; break;
|
||
|
case MFINT32: BEGIN MFI; break;
|
||
|
case MFROTATION: BEGIN MFR; break;
|
||
|
case MFSTRING: BEGIN MFS; break;
|
||
|
case MFVEC2F: BEGIN MFV2; break;
|
||
|
case MFVEC3F: BEGIN MFV3; break;
|
||
|
|
||
|
/* SFNode and MFNode are special. Here the lexer just returns */
|
||
|
/* "marker tokens" so the parser knows what type of field is */
|
||
|
/* being parsed; unlike the other fields, parsing of SFNode/MFNode */
|
||
|
/* field happens in the parser. */
|
||
|
case MFNODE: expectToken = 0; return MFNODE;
|
||
|
case SFNODE: expectToken = 0; return SFNODE;
|
||
|
|
||
|
default: yyerror("ACK: Bad expectToken"); break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/* This is more complicated than they really need to be because */
|
||
|
/* I was ambitious and made the whitespace-matching rule aggressive */
|
||
|
|
||
|
if ( yy_init )
|
||
|
{
|
||
|
#ifdef YY_USER_INIT
|
||
|
YY_USER_INIT;
|
||
|
#endif
|
||
|
|
||
|
if ( ! yy_start )
|
||
|
yy_start = 1; /* first start state */
|
||
|
|
||
|
if ( ! yyin )
|
||
|
yyin = stdin;
|
||
|
|
||
|
if ( ! yyout )
|
||
|
yyout = stdout;
|
||
|
|
||
|
if ( yy_current_buffer )
|
||
|
yy_init_buffer( yy_current_buffer, yyin );
|
||
|
else
|
||
|
yy_current_buffer =
|
||
|
yy_create_buffer( yyin, YY_BUF_SIZE );
|
||
|
|
||
|
yy_load_buffer_state();
|
||
|
|
||
|
yy_init = 0;
|
||
|
}
|
||
|
|
||
|
while ( 1 ) /* loops until end-of-file is reached */
|
||
|
{
|
||
|
yy_cp = yy_c_buf_p;
|
||
|
|
||
|
/* Support of yytext. */
|
||
|
*yy_cp = yy_hold_char;
|
||
|
|
||
|
/* yy_bp points to the position in yy_ch_buf of the start of
|
||
|
* the current run.
|
||
|
*/
|
||
|
yy_bp = yy_cp;
|
||
|
|
||
|
yy_current_state = yy_start;
|
||
|
yy_match:
|
||
|
do
|
||
|
{
|
||
|
register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
|
||
|
if ( yy_accept[yy_current_state] )
|
||
|
{
|
||
|
yy_last_accepting_state = yy_current_state;
|
||
|
yy_last_accepting_cpos = yy_cp;
|
||
|
}
|
||
|
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
|
||
|
{
|
||
|
yy_current_state = (int) yy_def[yy_current_state];
|
||
|
if ( yy_current_state >= 949 )
|
||
|
yy_c = yy_meta[(unsigned int) yy_c];
|
||
|
}
|
||
|
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
|
||
|
++yy_cp;
|
||
|
}
|
||
|
while ( yy_base[yy_current_state] != 7663 );
|
||
|
|
||
|
yy_find_action:
|
||
|
yy_act = yy_accept[yy_current_state];
|
||
|
|
||
|
YY_DO_BEFORE_ACTION;
|
||
|
|
||
|
|
||
|
do_action: /* This label is used only to access EOF actions. */
|
||
|
|
||
|
if ( yy_flex_debug )
|
||
|
{
|
||
|
if ( yy_act == 0 )
|
||
|
fprintf( stderr, "--scanner backing up\n" );
|
||
|
else if ( yy_act < 49 )
|
||
|
fprintf( stderr, "--accepting rule at line %d (\"%s\")\n",
|
||
|
yy_rule_linenum[yy_act], yytext );
|
||
|
else if ( yy_act == 49 )
|
||
|
fprintf( stderr, "--accepting default rule (\"%s\")\n",
|
||
|
yytext );
|
||
|
else if ( yy_act == 50 )
|
||
|
fprintf( stderr, "--(end of buffer or a NUL)\n" );
|
||
|
else
|
||
|
fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
|
||
|
}
|
||
|
|
||
|
switch ( yy_act )
|
||
|
{ /* beginning of action switch */
|
||
|
case 0: /* must back up */
|
||
|
/* undo the effects of YY_DO_BEFORE_ACTION */
|
||
|
*yy_cp = yy_hold_char;
|
||
|
yy_cp = yy_last_accepting_cpos;
|
||
|
yy_current_state = yy_last_accepting_state;
|
||
|
goto yy_find_action;
|
||
|
|
||
|
case 1:
|
||
|
YY_USER_ACTION
|
||
|
{ BEGIN NODE; }
|
||
|
YY_BREAK
|
||
|
/* The lexer is in the NODE state when parsing nodes, either */
|
||
|
/* top-level nodes in the .wrl file, in a prototype implementation, */
|
||
|
/* or when parsing the contents of SFNode or MFNode fields. */
|
||
|
case 2:
|
||
|
YY_USER_ACTION
|
||
|
{ return PROTO; }
|
||
|
case 3:
|
||
|
YY_USER_ACTION
|
||
|
{ return EXTERNPROTO; }
|
||
|
case 4:
|
||
|
YY_USER_ACTION
|
||
|
{ return DEF; }
|
||
|
case 5:
|
||
|
YY_USER_ACTION
|
||
|
{ return USE; }
|
||
|
case 6:
|
||
|
YY_USER_ACTION
|
||
|
{ return TO; }
|
||
|
case 7:
|
||
|
YY_USER_ACTION
|
||
|
{ return IS; }
|
||
|
case 8:
|
||
|
YY_USER_ACTION
|
||
|
{ return ROUTE; }
|
||
|
case 9:
|
||
|
YY_USER_ACTION
|
||
|
{ return SFN_NULL; }
|
||
|
case 10:
|
||
|
YY_USER_ACTION
|
||
|
{ return EVENTIN; }
|
||
|
case 11:
|
||
|
YY_USER_ACTION
|
||
|
{ return EVENTOUT; }
|
||
|
case 12:
|
||
|
YY_USER_ACTION
|
||
|
{ return FIELD; }
|
||
|
case 13:
|
||
|
YY_USER_ACTION
|
||
|
{ return EXPOSEDFIELD; }
|
||
|
/* Legal identifiers: */
|
||
|
case 14:
|
||
|
YY_USER_ACTION
|
||
|
{
|
||
|
yylval.string = vtkVRMLAllocator::StrDup(yytext);
|
||
|
return IDENTIFIER; }
|
||
|
/* All fields may have an IS declaration: */
|
||
|
case 15:
|
||
|
YY_USER_ACTION
|
||
|
{ BEGIN NODE;
|
||
|
expectToken = 0;
|
||
|
yyless(0);
|
||
|
}
|
||
|
YY_BREAK
|
||
|
case 16:
|
||
|
YY_USER_ACTION
|
||
|
{ BEGIN NODE;
|
||
|
expectToken = 0;
|
||
|
yyless(0); /* put back the IS */
|
||
|
}
|
||
|
YY_BREAK
|
||
|
/* All MF field types other than MFNode are completely parsed here */
|
||
|
/* in the lexer, and one token is returned to the parser. They all */
|
||
|
/* share the same rules for open and closing brackets: */
|
||
|
case 17:
|
||
|
YY_USER_ACTION
|
||
|
{ if (parsing_mf) yyerror("Double [");
|
||
|
parsing_mf = 1;
|
||
|
yylval.vec2f = self->FloatArrayNew();
|
||
|
yylval.vec2f->SetNumberOfComponents(2);
|
||
|
}
|
||
|
YY_BREAK
|
||
|
case 18:
|
||
|
YY_USER_ACTION
|
||
|
{ if (parsing_mf) yyerror("Double [");
|
||
|
parsing_mf = 1;
|
||
|
yylval.mfint32 = self->IdTypeArrayNew();
|
||
|
}
|
||
|
YY_BREAK
|
||
|
case 19:
|
||
|
YY_USER_ACTION
|
||
|
{ if (parsing_mf) yyerror("Double [");
|
||
|
parsing_mf = 1;
|
||
|
yylval.vec3f = self->PointsNew();
|
||
|
}
|
||
|
YY_BREAK
|
||
|
case 20:
|
||
|
YY_USER_ACTION
|
||
|
{ if (!parsing_mf) yyerror("Unmatched ]");
|
||
|
int fieldType = expectToken;
|
||
|
BEGIN NODE;
|
||
|
parsing_mf = 0;
|
||
|
expectToken = 0;
|
||
|
return fieldType;
|
||
|
}
|
||
|
case 21:
|
||
|
YY_USER_ACTION
|
||
|
{ BEGIN NODE; expectToken = 0; yylval.sfint = 1; return SFBOOL; }
|
||
|
case 22:
|
||
|
YY_USER_ACTION
|
||
|
{ BEGIN NODE; expectToken = 0; yylval.sfint = 0; return SFBOOL; }
|
||
|
case 23:
|
||
|
YY_USER_ACTION
|
||
|
{ BEGIN NODE; expectToken = 0;
|
||
|
yylval.sfint = atoi(yytext);
|
||
|
return SFINT32;
|
||
|
}
|
||
|
case 24:
|
||
|
YY_USER_ACTION
|
||
|
{ if (parsing_mf) {
|
||
|
int num;
|
||
|
num = atoi(yytext);
|
||
|
yylval.mfint32->InsertNextValue(num);
|
||
|
}
|
||
|
else {
|
||
|
BEGIN NODE; expectToken = 0; return MFINT32;
|
||
|
}
|
||
|
}
|
||
|
YY_BREAK
|
||
|
/* All the floating-point types are pretty similar: */
|
||
|
case 25:
|
||
|
YY_USER_ACTION
|
||
|
{ BEGIN NODE; expectToken = 0; float num;
|
||
|
sscanf(yytext, "%f", &num);
|
||
|
yylval.sffloat = num;
|
||
|
return SFFLOAT; }
|
||
|
case 26:
|
||
|
YY_USER_ACTION
|
||
|
{ if (parsing_mf) ; /* Add to array... */
|
||
|
else {
|
||
|
/* No open bracket means a single value: */
|
||
|
BEGIN NODE; expectToken = 0; return MFFLOAT;
|
||
|
}
|
||
|
}
|
||
|
YY_BREAK
|
||
|
case 27:
|
||
|
YY_USER_ACTION
|
||
|
{ BEGIN NODE; expectToken = 0; return SFVEC2F; }
|
||
|
case 28:
|
||
|
YY_USER_ACTION
|
||
|
{
|
||
|
if (parsing_mf)
|
||
|
{
|
||
|
// .. add to array...
|
||
|
float num[2];
|
||
|
num[0] = atof(strtok(yytext, " "));
|
||
|
num[1] = atof(strtok(NULL, " "));
|
||
|
// equivalent to: sscanf(yytext, "%f %f", &num[0], &num[1]);
|
||
|
yylval.vec2f->InsertNextTuple(num);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
BEGIN NODE; expectToken = 0;
|
||
|
return MFVEC2F;
|
||
|
}
|
||
|
}
|
||
|
YY_BREAK
|
||
|
case 29:
|
||
|
YY_USER_ACTION
|
||
|
{ BEGIN NODE; expectToken = 0;
|
||
|
float num[3];
|
||
|
yylval.vec3f = self->PointsNew();
|
||
|
num[0] = atof(strtok(yytext, " "));
|
||
|
num[1] = atof(strtok(NULL, " "));
|
||
|
num[2] = atof(strtok(NULL, " "));
|
||
|
//sscanf(yytext, "%f %f %f", &num[0], &num[1], &num[2]);
|
||
|
yylval.vec3f->InsertPoint(0, num);
|
||
|
return SFVEC3F; }
|
||
|
case 30:
|
||
|
YY_USER_ACTION
|
||
|
{ if (parsing_mf) { /* .. add to array... */
|
||
|
float num[3];
|
||
|
num[0] = atof(strtok(yytext, " "));
|
||
|
num[1] = atof(strtok(NULL, " "));
|
||
|
num[2] = atof(strtok(NULL, " "));
|
||
|
//sscanf(yytext, "%f %f %f", &num[0], &num[1], &num[2]);
|
||
|
yylval.vec3f->InsertNextPoint(num);
|
||
|
//return MFVEC3F;
|
||
|
}
|
||
|
else {
|
||
|
BEGIN NODE; expectToken = 0;
|
||
|
return MFVEC3F;
|
||
|
}
|
||
|
}
|
||
|
YY_BREAK
|
||
|
case 31:
|
||
|
YY_USER_ACTION
|
||
|
{ BEGIN NODE; expectToken = 0; return SFROTATION; }
|
||
|
case 32:
|
||
|
YY_USER_ACTION
|
||
|
{ if (parsing_mf) ; /* .. add to array... */
|
||
|
else {
|
||
|
BEGIN NODE; expectToken = 0; return MFROTATION;
|
||
|
}
|
||
|
}
|
||
|
YY_BREAK
|
||
|
case 33:
|
||
|
YY_USER_ACTION
|
||
|
{ BEGIN NODE; expectToken = 0;
|
||
|
float num[3];
|
||
|
yylval.vec3f = self->PointsNew();
|
||
|
num[0] = atof(strtok(yytext, " "));
|
||
|
num[1] = atof(strtok(NULL, " "));
|
||
|
num[2] = atof(strtok(NULL, " "));
|
||
|
//sscanf(yytext, "%f %f %f", &num[0], &num[1], &num[2]);
|
||
|
yylval.vec3f->InsertPoint(0, num);
|
||
|
return SFCOLOR; }
|
||
|
case 34:
|
||
|
YY_USER_ACTION
|
||
|
{ if (parsing_mf) { /* .. add to array... */
|
||
|
float num[3];
|
||
|
num[0] = atof(strtok(yytext, " "));
|
||
|
num[1] = atof(strtok(NULL, " "));
|
||
|
num[2] = atof(strtok(NULL, " "));
|
||
|
yylval.vec3f->InsertNextPoint(num);
|
||
|
}
|
||
|
else {
|
||
|
BEGIN NODE; expectToken = 0; return MFCOLOR;
|
||
|
}
|
||
|
}
|
||
|
YY_BREAK
|
||
|
case 35:
|
||
|
YY_USER_ACTION
|
||
|
{ BEGIN NODE; expectToken = 0; return SFTIME; }
|
||
|
/* SFString/MFString */
|
||
|
case 36:
|
||
|
YY_USER_ACTION
|
||
|
{ BEGIN IN_SFS; }
|
||
|
YY_BREAK
|
||
|
case 37:
|
||
|
YY_USER_ACTION
|
||
|
{ BEGIN IN_MFS; }
|
||
|
YY_BREAK
|
||
|
/* Anything besides open-quote (or whitespace) is an error: */
|
||
|
case 38:
|
||
|
YY_USER_ACTION
|
||
|
{ yyerror("String missing open-quote");
|
||
|
BEGIN NODE; expectToken = 0; return SFSTRING;
|
||
|
}
|
||
|
/* Expect open-quote, open-bracket, or whitespace: */
|
||
|
case 39:
|
||
|
YY_USER_ACTION
|
||
|
{ yyerror("String missing open-quote");
|
||
|
BEGIN NODE; expectToken = 0; return MFSTRING;
|
||
|
}
|
||
|
/* Backslashed-quotes are OK: */
|
||
|
case 40:
|
||
|
YY_USER_ACTION
|
||
|
;
|
||
|
YY_BREAK
|
||
|
/* Gobble up anything besides quotes and newlines. */
|
||
|
/* Newlines are legal in strings, but we exclude them here so */
|
||
|
/* that line number are counted correctly by the catch-all newline */
|
||
|
/* rule that applies to everything. */
|
||
|
case 41:
|
||
|
YY_USER_ACTION
|
||
|
;
|
||
|
YY_BREAK
|
||
|
/* Quote ends the string: */
|
||
|
case 42:
|
||
|
YY_USER_ACTION
|
||
|
{ BEGIN NODE; expectToken = 0; return SFSTRING; }
|
||
|
case 43:
|
||
|
YY_USER_ACTION
|
||
|
{ if (parsing_mf) BEGIN MFS; /* ... add to array ... */
|
||
|
else {
|
||
|
BEGIN NODE; expectToken = 0; return MFSTRING;
|
||
|
}
|
||
|
}
|
||
|
YY_BREAK
|
||
|
/* SFImage: width height numComponents then width*height integers: */
|
||
|
case 44:
|
||
|
YY_USER_ACTION
|
||
|
{ int w, h;
|
||
|
sscanf(yytext, "%d %d", &w, &h);
|
||
|
sfImageIntsExpected = 1+w*h;
|
||
|
sfImageIntsParsed = 0;
|
||
|
BEGIN IN_SFIMG;
|
||
|
}
|
||
|
YY_BREAK
|
||
|
case 45:
|
||
|
YY_USER_ACTION
|
||
|
{ ++sfImageIntsParsed;
|
||
|
if (sfImageIntsParsed == sfImageIntsExpected) {
|
||
|
BEGIN NODE; expectToken = 0; return SFIMAGE;
|
||
|
}
|
||
|
}
|
||
|
YY_BREAK
|
||
|
/* Whitespace and catch-all rules apply to all start states: */
|
||
|
case 46:
|
||
|
YY_USER_ACTION
|
||
|
;
|
||
|
YY_BREAK
|
||
|
/* This is also whitespace, but we'll keep track of line number */
|
||
|
/* to report in errors: */
|
||
|
case 47:
|
||
|
YY_USER_ACTION
|
||
|
{ ++currentLineNumber; }
|
||
|
YY_BREAK
|
||
|
/* This catch-all rule catches anything not covered by any of */
|
||
|
/* the above: */
|
||
|
case 48:
|
||
|
YY_USER_ACTION
|
||
|
{ return yytext[0]; }
|
||
|
case 49:
|
||
|
YY_USER_ACTION
|
||
|
YY_FATAL_ERROR( "flex scanner jammed" );
|
||
|
YY_BREAK
|
||
|
case YY_STATE_EOF(INITIAL):
|
||
|
case YY_STATE_EOF(NODE):
|
||
|
case YY_STATE_EOF(SFB):
|
||
|
case YY_STATE_EOF(SFC):
|
||
|
case YY_STATE_EOF(SFF):
|
||
|
case YY_STATE_EOF(SFIMG):
|
||
|
case YY_STATE_EOF(SFI):
|
||
|
case YY_STATE_EOF(SFR):
|
||
|
case YY_STATE_EOF(SFS):
|
||
|
case YY_STATE_EOF(SFT):
|
||
|
case YY_STATE_EOF(SFV2):
|
||
|
case YY_STATE_EOF(SFV3):
|
||
|
case YY_STATE_EOF(MFC):
|
||
|
case YY_STATE_EOF(MFF):
|
||
|
case YY_STATE_EOF(MFI):
|
||
|
case YY_STATE_EOF(MFR):
|
||
|
case YY_STATE_EOF(MFS):
|
||
|
case YY_STATE_EOF(MFV2):
|
||
|
case YY_STATE_EOF(MFV3):
|
||
|
case YY_STATE_EOF(IN_SFS):
|
||
|
case YY_STATE_EOF(IN_MFS):
|
||
|
case YY_STATE_EOF(IN_SFIMG):
|
||
|
yyterminate();
|
||
|
|
||
|
case YY_END_OF_BUFFER:
|
||
|
{
|
||
|
/* Amount of text matched not including the EOB char. */
|
||
|
int yy_amount_of_matched_text = yy_cp - yytext_ptr - 1;
|
||
|
|
||
|
/* Undo the effects of YY_DO_BEFORE_ACTION. */
|
||
|
*yy_cp = yy_hold_char;
|
||
|
|
||
|
if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
|
||
|
{
|
||
|
/* We're scanning a new file or input source. It's
|
||
|
* possible that this happened because the user
|
||
|
* just pointed yyin at a new source and called
|
||
|
* yylex(). If so, then we have to assure
|
||
|
* consistency between yy_current_buffer and our
|
||
|
* globals. Here is the right place to do so, because
|
||
|
* this is the first action (other than possibly a
|
||
|
* back-up) that will match for the new input source.
|
||
|
*/
|
||
|
yy_n_chars = yy_current_buffer->yy_n_chars;
|
||
|
yy_current_buffer->yy_input_file = yyin;
|
||
|
yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
|
||
|
}
|
||
|
|
||
|
/* Note that here we test for yy_c_buf_p "<=" to the position
|
||
|
* of the first EOB in the buffer, since yy_c_buf_p will
|
||
|
* already have been incremented past the NUL character
|
||
|
* (since all states make transitions on EOB to the
|
||
|
* end-of-buffer state). Contrast this with the test
|
||
|
* in input().
|
||
|
*/
|
||
|
if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
|
||
|
{ /* This was really a NUL. */
|
||
|
yy_state_type yy_next_state;
|
||
|
|
||
|
yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
|
||
|
|
||
|
yy_current_state = yy_get_previous_state();
|
||
|
|
||
|
/* Okay, we're now positioned to make the NUL
|
||
|
* transition. We couldn't have
|
||
|
* yy_get_previous_state() go ahead and do it
|
||
|
* for us because it doesn't know how to deal
|
||
|
* with the possibility of jamming (and we don't
|
||
|
* want to build jamming into it because then it
|
||
|
* will run more slowly).
|
||
|
*/
|
||
|
|
||
|
yy_next_state = yy_try_NUL_trans( yy_current_state );
|
||
|
|
||
|
yy_bp = yytext_ptr + YY_MORE_ADJ;
|
||
|
|
||
|
if ( yy_next_state )
|
||
|
{
|
||
|
/* Consume the NUL. */
|
||
|
yy_cp = ++yy_c_buf_p;
|
||
|
yy_current_state = yy_next_state;
|
||
|
goto yy_match;
|
||
|
}
|
||
|
|
||
|
else
|
||
|
{
|
||
|
yy_cp = yy_c_buf_p;
|
||
|
goto yy_find_action;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else switch ( yy_get_next_buffer() )
|
||
|
{
|
||
|
case EOB_ACT_END_OF_FILE:
|
||
|
{
|
||
|
yy_did_buffer_switch_on_eof = 0;
|
||
|
|
||
|
if ( yywrap() )
|
||
|
{
|
||
|
/* Note: because we've taken care in
|
||
|
* yy_get_next_buffer() to have set up
|
||
|
* yytext, we can now set up
|
||
|
* yy_c_buf_p so that if some total
|
||
|
* hoser (like flex itself) wants to
|
||
|
* call the scanner after we return the
|
||
|
* YY_NULL, it'll still work - another
|
||
|
* YY_NULL will get returned.
|
||
|
*/
|
||
|
yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
|
||
|
|
||
|
yy_act = YY_STATE_EOF(YY_START);
|
||
|
goto do_action;
|
||
|
}
|
||
|
|
||
|
else
|
||
|
{
|
||
|
if ( ! yy_did_buffer_switch_on_eof )
|
||
|
YY_NEW_FILE;
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
case EOB_ACT_CONTINUE_SCAN:
|
||
|
yy_c_buf_p =
|
||
|
yytext_ptr + yy_amount_of_matched_text;
|
||
|
|
||
|
yy_current_state = yy_get_previous_state();
|
||
|
|
||
|
yy_cp = yy_c_buf_p;
|
||
|
yy_bp = yytext_ptr + YY_MORE_ADJ;
|
||
|
goto yy_match;
|
||
|
|
||
|
case EOB_ACT_LAST_MATCH:
|
||
|
yy_c_buf_p =
|
||
|
&yy_current_buffer->yy_ch_buf[yy_n_chars];
|
||
|
|
||
|
yy_current_state = yy_get_previous_state();
|
||
|
|
||
|
yy_cp = yy_c_buf_p;
|
||
|
yy_bp = yytext_ptr + YY_MORE_ADJ;
|
||
|
goto yy_find_action;
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
default:
|
||
|
YY_FATAL_ERROR(
|
||
|
"fatal flex scanner internal error--no action found" );
|
||
|
} /* end of action switch */
|
||
|
} /* end of scanning one token */
|
||
|
} /* end of yylex */
|
||
|
|
||
|
|
||
|
/* yy_get_next_buffer - try to read in a new buffer
|
||
|
*
|
||
|
* Returns a code representing an action:
|
||
|
* EOB_ACT_LAST_MATCH -
|
||
|
* EOB_ACT_CONTINUE_SCAN - continue scanning from current position
|
||
|
* EOB_ACT_END_OF_FILE - end of file
|
||
|
*/
|
||
|
|
||
|
static int yy_get_next_buffer()
|
||
|
{
|
||
|
register char *dest = yy_current_buffer->yy_ch_buf;
|
||
|
register char *source = yytext_ptr - 1; /* copy prev. char, too */
|
||
|
register int number_to_move, i;
|
||
|
int ret_val;
|
||
|
|
||
|
if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
|
||
|
YY_FATAL_ERROR(
|
||
|
"fatal flex scanner internal error--end of buffer missed" );
|
||
|
|
||
|
if ( yy_current_buffer->yy_fill_buffer == 0 )
|
||
|
{ /* Don't try to fill the buffer, so this is an EOF. */
|
||
|
if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
|
||
|
{
|
||
|
/* We matched a singled characater, the EOB, so
|
||
|
* treat this as a final EOF.
|
||
|
*/
|
||
|
return EOB_ACT_END_OF_FILE;
|
||
|
}
|
||
|
|
||
|
else
|
||
|
{
|
||
|
/* We matched some text prior to the EOB, first
|
||
|
* process it.
|
||
|
*/
|
||
|
return EOB_ACT_LAST_MATCH;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/* Try to read more data. */
|
||
|
|
||
|
/* First move last chars to start of buffer. */
|
||
|
number_to_move = yy_c_buf_p - yytext_ptr;
|
||
|
|
||
|
for ( i = 0; i < number_to_move; ++i )
|
||
|
*(dest++) = *(source++);
|
||
|
|
||
|
if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
|
||
|
/* don't do the read, it's not guaranteed to return an EOF,
|
||
|
* just force an EOF
|
||
|
*/
|
||
|
yy_n_chars = 0;
|
||
|
|
||
|
else
|
||
|
{
|
||
|
int num_to_read =
|
||
|
yy_current_buffer->yy_buf_size - number_to_move - 1;
|
||
|
|
||
|
while ( num_to_read <= 0 )
|
||
|
{ /* Not enough room in the buffer - grow it. */
|
||
|
#ifdef YY_USES_REJECT
|
||
|
YY_FATAL_ERROR(
|
||
|
"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
|
||
|
#else
|
||
|
|
||
|
/* just a shorter name for the current buffer */
|
||
|
YY_BUFFER_STATE b = yy_current_buffer;
|
||
|
|
||
|
int yy_c_buf_p_offset = yy_c_buf_p - b->yy_ch_buf;
|
||
|
|
||
|
b->yy_buf_size *= 2;
|
||
|
b->yy_ch_buf = (char *)
|
||
|
yy_flex_realloc( (void *) b->yy_ch_buf,
|
||
|
b->yy_buf_size );
|
||
|
|
||
|
if ( ! b->yy_ch_buf )
|
||
|
YY_FATAL_ERROR(
|
||
|
"fatal error - scanner input buffer overflow" );
|
||
|
|
||
|
yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
|
||
|
|
||
|
num_to_read = yy_current_buffer->yy_buf_size -
|
||
|
number_to_move - 1;
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
if ( num_to_read > YY_READ_BUF_SIZE )
|
||
|
num_to_read = YY_READ_BUF_SIZE;
|
||
|
|
||
|
/* Read in more data. */
|
||
|
YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
|
||
|
yy_n_chars, num_to_read );
|
||
|
}
|
||
|
|
||
|
if ( yy_n_chars == 0 )
|
||
|
{
|
||
|
if ( number_to_move - YY_MORE_ADJ == 1 )
|
||
|
{
|
||
|
ret_val = EOB_ACT_END_OF_FILE;
|
||
|
yyrestart( yyin );
|
||
|
}
|
||
|
|
||
|
else
|
||
|
{
|
||
|
ret_val = EOB_ACT_LAST_MATCH;
|
||
|
yy_current_buffer->yy_buffer_status =
|
||
|
YY_BUFFER_EOF_PENDING;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else
|
||
|
ret_val = EOB_ACT_CONTINUE_SCAN;
|
||
|
|
||
|
yy_n_chars += number_to_move;
|
||
|
yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
|
||
|
yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
|
||
|
|
||
|
/* yytext begins at the second character in yy_ch_buf; the first
|
||
|
* character is the one which preceded it before reading in the latest
|
||
|
* buffer; it needs to be kept around in case it's a newline, so
|
||
|
* yy_get_previous_state() will have with '^' rules active.
|
||
|
*/
|
||
|
|
||
|
yytext_ptr = &yy_current_buffer->yy_ch_buf[1];
|
||
|
|
||
|
return ret_val;
|
||
|
}
|
||
|
|
||
|
|
||
|
/* yy_get_previous_state - get the state just before the EOB char was reached */
|
||
|
|
||
|
static yy_state_type yy_get_previous_state()
|
||
|
{
|
||
|
register yy_state_type yy_current_state;
|
||
|
register char *yy_cp;
|
||
|
|
||
|
yy_current_state = yy_start;
|
||
|
|
||
|
for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
|
||
|
{
|
||
|
register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
|
||
|
if ( yy_accept[yy_current_state] )
|
||
|
{
|
||
|
yy_last_accepting_state = yy_current_state;
|
||
|
yy_last_accepting_cpos = yy_cp;
|
||
|
}
|
||
|
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
|
||
|
{
|
||
|
yy_current_state = (int) yy_def[yy_current_state];
|
||
|
if ( yy_current_state >= 949 )
|
||
|
yy_c = yy_meta[(unsigned int) yy_c];
|
||
|
}
|
||
|
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
|
||
|
}
|
||
|
|
||
|
return yy_current_state;
|
||
|
}
|
||
|
|
||
|
|
||
|
/* yy_try_NUL_trans - try to make a transition on the NUL character
|
||
|
*
|
||
|
* synopsis
|
||
|
* next_state = yy_try_NUL_trans( current_state );
|
||
|
*/
|
||
|
|
||
|
#ifdef YY_USE_PROTOS
|
||
|
static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
|
||
|
#else
|
||
|
static yy_state_type yy_try_NUL_trans( yy_current_state )
|
||
|
yy_state_type yy_current_state;
|
||
|
#endif
|
||
|
{
|
||
|
register int yy_is_jam;
|
||
|
register char *yy_cp = yy_c_buf_p;
|
||
|
|
||
|
register YY_CHAR yy_c = 1;
|
||
|
if ( yy_accept[yy_current_state] )
|
||
|
{
|
||
|
yy_last_accepting_state = yy_current_state;
|
||
|
yy_last_accepting_cpos = yy_cp;
|
||
|
}
|
||
|
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
|
||
|
{
|
||
|
yy_current_state = (int) yy_def[yy_current_state];
|
||
|
if ( yy_current_state >= 949 )
|
||
|
yy_c = yy_meta[(unsigned int) yy_c];
|
||
|
}
|
||
|
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
|
||
|
yy_is_jam = (yy_current_state == 948);
|
||
|
|
||
|
return yy_is_jam ? 0 : yy_current_state;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
static int yyinput()
|
||
|
#else
|
||
|
static int input()
|
||
|
#endif
|
||
|
{
|
||
|
int c;
|
||
|
|
||
|
*yy_c_buf_p = yy_hold_char;
|
||
|
|
||
|
if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
|
||
|
{
|
||
|
/* yy_c_buf_p now points to the character we want to return.
|
||
|
* If this occurs *before* the EOB characters, then it's a
|
||
|
* valid NUL; if not, then we've hit the end of the buffer.
|
||
|
*/
|
||
|
if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
|
||
|
/* This was really a NUL. */
|
||
|
*yy_c_buf_p = '\0';
|
||
|
|
||
|
else
|
||
|
{ /* need more input */
|
||
|
yytext_ptr = yy_c_buf_p;
|
||
|
++yy_c_buf_p;
|
||
|
|
||
|
switch ( yy_get_next_buffer() )
|
||
|
{
|
||
|
case EOB_ACT_END_OF_FILE:
|
||
|
{
|
||
|
if ( yywrap() )
|
||
|
{
|
||
|
yy_c_buf_p =
|
||
|
yytext_ptr + YY_MORE_ADJ;
|
||
|
return EOF;
|
||
|
}
|
||
|
|
||
|
YY_NEW_FILE;
|
||
|
#ifdef __cplusplus
|
||
|
return yyinput();
|
||
|
#else
|
||
|
return input();
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
case EOB_ACT_CONTINUE_SCAN:
|
||
|
yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
|
||
|
break;
|
||
|
|
||
|
case EOB_ACT_LAST_MATCH:
|
||
|
#ifdef __cplusplus
|
||
|
YY_FATAL_ERROR(
|
||
|
"unexpected last match in yyinput()" );
|
||
|
#else
|
||
|
YY_FATAL_ERROR(
|
||
|
"unexpected last match in input()" );
|
||
|
#endif
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */
|
||
|
*yy_c_buf_p = '\0'; /* preserve yytext */
|
||
|
yy_hold_char = *++yy_c_buf_p;
|
||
|
|
||
|
return c;
|
||
|
}
|
||
|
|
||
|
|
||
|
#ifdef YY_USE_PROTOS
|
||
|
void yyrestart( FILE *input_file )
|
||
|
#else
|
||
|
void yyrestart( input_file )
|
||
|
FILE *input_file;
|
||
|
#endif
|
||
|
{
|
||
|
if ( ! yy_current_buffer )
|
||
|
yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
|
||
|
|
||
|
yy_init_buffer( yy_current_buffer, input_file );
|
||
|
yy_load_buffer_state();
|
||
|
}
|
||
|
|
||
|
|
||
|
#ifdef YY_USE_PROTOS
|
||
|
void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
|
||
|
#else
|
||
|
void yy_switch_to_buffer( new_buffer )
|
||
|
YY_BUFFER_STATE new_buffer;
|
||
|
#endif
|
||
|
{
|
||
|
if ( yy_current_buffer == new_buffer )
|
||
|
return;
|
||
|
|
||
|
if ( yy_current_buffer )
|
||
|
{
|
||
|
/* Flush out information for old buffer. */
|
||
|
*yy_c_buf_p = yy_hold_char;
|
||
|
yy_current_buffer->yy_buf_pos = yy_c_buf_p;
|
||
|
yy_current_buffer->yy_n_chars = yy_n_chars;
|
||
|
}
|
||
|
|
||
|
yy_current_buffer = new_buffer;
|
||
|
yy_load_buffer_state();
|
||
|
|
||
|
/* We don't actually know whether we did this switch during
|
||
|
* EOF (yywrap()) processing, but the only time this flag
|
||
|
* is looked at is after yywrap() is called, so it's safe
|
||
|
* to go ahead and always set it.
|
||
|
*/
|
||
|
yy_did_buffer_switch_on_eof = 1;
|
||
|
}
|
||
|
|
||
|
|
||
|
#ifdef YY_USE_PROTOS
|
||
|
void yy_load_buffer_state( void )
|
||
|
#else
|
||
|
void yy_load_buffer_state()
|
||
|
#endif
|
||
|
{
|
||
|
yy_n_chars = yy_current_buffer->yy_n_chars;
|
||
|
yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
|
||
|
yyin = yy_current_buffer->yy_input_file;
|
||
|
yy_hold_char = *yy_c_buf_p;
|
||
|
}
|
||
|
|
||
|
|
||
|
#ifdef YY_USE_PROTOS
|
||
|
YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
|
||
|
#else
|
||
|
YY_BUFFER_STATE yy_create_buffer( file, size )
|
||
|
FILE *file;
|
||
|
int size;
|
||
|
#endif
|
||
|
{
|
||
|
YY_BUFFER_STATE b;
|
||
|
|
||
|
b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
|
||
|
|
||
|
if ( ! b )
|
||
|
YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
|
||
|
|
||
|
b->yy_buf_size = size;
|
||
|
|
||
|
/* yy_ch_buf has to be 2 characters longer than the size given because
|
||
|
* we need to put in 2 end-of-buffer characters.
|
||
|
*/
|
||
|
b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
|
||
|
|
||
|
if ( ! b->yy_ch_buf )
|
||
|
YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
|
||
|
|
||
|
yy_init_buffer( b, file );
|
||
|
|
||
|
return b;
|
||
|
}
|
||
|
|
||
|
|
||
|
#ifdef YY_USE_PROTOS
|
||
|
void yy_delete_buffer( YY_BUFFER_STATE b )
|
||
|
#else
|
||
|
void yy_delete_buffer( b )
|
||
|
YY_BUFFER_STATE b;
|
||
|
#endif
|
||
|
{
|
||
|
if ( b == yy_current_buffer )
|
||
|
yy_current_buffer = (YY_BUFFER_STATE) 0;
|
||
|
|
||
|
yy_flex_free( (void *) b->yy_ch_buf );
|
||
|
yy_flex_free( (void *) b );
|
||
|
}
|
||
|
|
||
|
|
||
|
#ifdef YY_USE_PROTOS
|
||
|
void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
|
||
|
#else
|
||
|
void yy_init_buffer( b, file )
|
||
|
YY_BUFFER_STATE b;
|
||
|
FILE *file;
|
||
|
#endif
|
||
|
{
|
||
|
b->yy_input_file = file;
|
||
|
|
||
|
/* We put in the '\n' and start reading from [1] so that an
|
||
|
* initial match-at-newline will be true.
|
||
|
*/
|
||
|
|
||
|
b->yy_ch_buf[0] = '\n';
|
||
|
b->yy_n_chars = 1;
|
||
|
|
||
|
/* We always need two end-of-buffer characters. The first causes
|
||
|
* a transition to the end-of-buffer state. The second causes
|
||
|
* a jam in that state.
|
||
|
*/
|
||
|
b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
|
||
|
b->yy_ch_buf[2] = YY_END_OF_BUFFER_CHAR;
|
||
|
|
||
|
b->yy_buf_pos = &b->yy_ch_buf[1];
|
||
|
|
||
|
b->yy_is_interactive = file ? isatty( fileno(file) ) : 0;
|
||
|
|
||
|
b->yy_fill_buffer = 1;
|
||
|
|
||
|
b->yy_buffer_status = YY_BUFFER_NEW;
|
||
|
}
|
||
|
|
||
|
|
||
|
#ifdef YY_USE_PROTOS
|
||
|
static void yy_fatal_error( const char msg[] )
|
||
|
#else
|
||
|
static void yy_fatal_error( msg )
|
||
|
char msg[];
|
||
|
#endif
|
||
|
{
|
||
|
(void) fprintf( stderr, "%s\n", msg );
|
||
|
exit( 1 );
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/* Redefine yyless() so it works in section 3 code. */
|
||
|
|
||
|
#undef yyless
|
||
|
#define yyless(n) \
|
||
|
do \
|
||
|
{ \
|
||
|
/* Undo effects of setting up yytext. */ \
|
||
|
yytext[yyleng] = yy_hold_char; \
|
||
|
yy_c_buf_p = yytext + n - YY_MORE_ADJ; \
|
||
|
yy_hold_char = *yy_c_buf_p; \
|
||
|
*yy_c_buf_p = '\0'; \
|
||
|
yyleng = n; \
|
||
|
} \
|
||
|
while ( 0 )
|
||
|
|
||
|
|
||
|
/* Internal utility routines. */
|
||
|
|
||
|
#ifndef yytext_ptr
|
||
|
#ifdef YY_USE_PROTOS
|
||
|
static void yy_flex_strncpy( char *s1, const char *s2, int n )
|
||
|
#else
|
||
|
static void yy_flex_strncpy( s1, s2, n )
|
||
|
char *s1;
|
||
|
const char *s2;
|
||
|
int n;
|
||
|
#endif
|
||
|
{
|
||
|
register int i;
|
||
|
for ( i = 0; i < n; ++i )
|
||
|
s1[i] = s2[i];
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#ifdef YY_USE_PROTOS
|
||
|
static void *yy_flex_alloc( unsigned int size )
|
||
|
#else
|
||
|
static void *yy_flex_alloc( size )
|
||
|
unsigned int size;
|
||
|
#endif
|
||
|
{
|
||
|
return (void *) malloc( size );
|
||
|
}
|
||
|
|
||
|
#ifdef YY_USE_PROTOS
|
||
|
static void *yy_flex_realloc( void *ptr, unsigned int size )
|
||
|
#else
|
||
|
static void *yy_flex_realloc( ptr, size )
|
||
|
void *ptr;
|
||
|
unsigned int size;
|
||
|
#endif
|
||
|
{
|
||
|
return (void *) realloc( ptr, size );
|
||
|
}
|
||
|
|
||
|
#ifdef YY_USE_PROTOS
|
||
|
static void yy_flex_free( void *ptr )
|
||
|
#else
|
||
|
static void yy_flex_free( ptr )
|
||
|
void *ptr;
|
||
|
#endif
|
||
|
{
|
||
|
free( ptr );
|
||
|
}
|
||
|
// End of Auto-generated Lexer Code
|
||
|
|
||
|
|
||
|
vtkVRMLImporter::vtkVRMLImporter ()
|
||
|
{
|
||
|
this->Internal = new vtkVRMLImporterInternal;
|
||
|
this->CurrentActor = NULL;
|
||
|
this->CurrentLight = NULL;
|
||
|
this->CurrentProperty = NULL;
|
||
|
this->CurrentCamera = NULL;
|
||
|
this->CurrentSource = NULL;
|
||
|
this->CurrentPoints = NULL;
|
||
|
this->CurrentScalars = NULL;
|
||
|
this->CurrentNormals = NULL;
|
||
|
this->CurrentTCoords = NULL;
|
||
|
this->CurrentTCoordCells = NULL;
|
||
|
this->CurrentMapper = NULL;
|
||
|
this->CurrentLut = NULL;
|
||
|
this->CurrentTransform = vtkTransform::New();
|
||
|
this->FileName = NULL;
|
||
|
this->FileFD = NULL;
|
||
|
}
|
||
|
|
||
|
// Open an import file. Returns zero if error.
|
||
|
int vtkVRMLImporter::OpenImportFile ()
|
||
|
{
|
||
|
vtkDebugMacro(<< "Opening import file");
|
||
|
|
||
|
if ( !this->FileName )
|
||
|
{
|
||
|
vtkErrorMacro(<< "No file specified!");
|
||
|
return 0;
|
||
|
}
|
||
|
this->FileFD = fopen (this->FileName, "r");
|
||
|
if (this->FileFD == NULL)
|
||
|
{
|
||
|
vtkErrorMacro(<< "Unable to open file: "<< this->FileName);
|
||
|
return 0;
|
||
|
}
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
int vtkVRMLImporter::ImportBegin ()
|
||
|
{
|
||
|
|
||
|
memyyInput_i = 0;
|
||
|
memyyInput_j = 0;
|
||
|
|
||
|
vtkVRMLAllocator::Initialize();
|
||
|
VrmlNodeType::typeList = new vtkVRMLVectorType<VrmlNodeType*>;
|
||
|
VrmlNodeType::typeList->Init();
|
||
|
|
||
|
VrmlNodeType::useList = new vtkVRMLVectorType<vtkVRMLUseStruct *>;
|
||
|
VrmlNodeType::useList->Init();
|
||
|
|
||
|
VrmlNodeType::currentField = new vtkVRMLVectorType<VrmlNodeType::FieldRec *>;
|
||
|
VrmlNodeType::currentField->Init();
|
||
|
|
||
|
if (!this->OpenImportFile())
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
// This is acrually where it all takes place, Since VRML is a SG
|
||
|
// And is state based, I need to create actors, cameras, and lights
|
||
|
// as I go. The ImportXXXXXX rotuines are not used.
|
||
|
CurrentProtoStack = new vtkVRMLVectorType<VrmlNodeType*>;
|
||
|
|
||
|
// Lets redefine the YY_INPUT macro on Flex and get chars from memory
|
||
|
theyyInput = memyyInput;
|
||
|
// Crank up the yacc parser...
|
||
|
yydebug = 0;
|
||
|
yy_flex_debug = 0;
|
||
|
/*FILE *standardNodes = fopen("standardNodes.wrl", "r");
|
||
|
if (standardNodes == NULL) {
|
||
|
cerr << "Error, couldn't open standardNodes.wrl file";
|
||
|
return 0;
|
||
|
}
|
||
|
yyin = standardNodes;*/
|
||
|
yyparse(this);
|
||
|
yyin = NULL;
|
||
|
yyResetLineNumber();
|
||
|
//fclose(standardNodes);
|
||
|
|
||
|
// Not sure why I have to do this but its not working when
|
||
|
// When I use the FileFD file pointer...
|
||
|
// File existance already checked.
|
||
|
yyin = fopen(this->FileName, "r");
|
||
|
|
||
|
// reset the lex input routine
|
||
|
theyyInput = defyyInput;
|
||
|
|
||
|
// For this little test application, pushing and popping the node
|
||
|
// namespace isn't really necessary. But each VRML .wrl file is
|
||
|
// a separate namespace for PROTOs (except for things predefined
|
||
|
// in the spec), and pushing/popping the namespace when reading each
|
||
|
// file is a good habit to get into:
|
||
|
VrmlNodeType::pushNameSpace();
|
||
|
yyparse(this);
|
||
|
VrmlNodeType::popNameSpace();
|
||
|
|
||
|
fclose(yyin);
|
||
|
yyin = NULL;
|
||
|
|
||
|
delete CurrentProtoStack;
|
||
|
|
||
|
// In case there was a ViewPoint introduced it usually happens prior
|
||
|
// to any actors being placed in the scene, need to reset the camera
|
||
|
//this->Renderer->UpdateActors();
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
void vtkVRMLImporter::ImportEnd ()
|
||
|
{
|
||
|
delete VrmlNodeType::typeList;
|
||
|
VrmlNodeType::typeList = 0;
|
||
|
|
||
|
delete VrmlNodeType::currentField;
|
||
|
VrmlNodeType::currentField = 0;
|
||
|
|
||
|
vtkDebugMacro(<<"Closing import file");
|
||
|
if ( this->FileFD != NULL )
|
||
|
{
|
||
|
fclose (this->FileFD);
|
||
|
}
|
||
|
this->FileFD = NULL;
|
||
|
}
|
||
|
|
||
|
|
||
|
vtkVRMLImporter::~vtkVRMLImporter()
|
||
|
{
|
||
|
if (this->CurrentActor)
|
||
|
{
|
||
|
this->CurrentActor->Delete();
|
||
|
}
|
||
|
if (this->CurrentLight)
|
||
|
{
|
||
|
this->CurrentLight->Delete();
|
||
|
}
|
||
|
if (this->CurrentProperty)
|
||
|
{
|
||
|
this->CurrentProperty->Delete();
|
||
|
}
|
||
|
if (this->CurrentCamera)
|
||
|
{
|
||
|
this->CurrentCamera->Delete();
|
||
|
}
|
||
|
if (this->CurrentSource)
|
||
|
{
|
||
|
this->CurrentSource->Delete();
|
||
|
}
|
||
|
if (this->CurrentPoints)
|
||
|
{
|
||
|
this->CurrentPoints->Delete();
|
||
|
}
|
||
|
if (this->CurrentNormals)
|
||
|
{
|
||
|
this->CurrentNormals->Delete();
|
||
|
}
|
||
|
if (this->CurrentTCoords)
|
||
|
{
|
||
|
this->CurrentTCoords->Delete();
|
||
|
}
|
||
|
if (this->CurrentTCoordCells)
|
||
|
{
|
||
|
this->CurrentTCoordCells->Delete();
|
||
|
}
|
||
|
if (this->CurrentScalars)
|
||
|
{
|
||
|
this->CurrentScalars->Delete();
|
||
|
}
|
||
|
if (this->CurrentMapper)
|
||
|
{
|
||
|
this->CurrentMapper->Delete();
|
||
|
}
|
||
|
if (this->CurrentLut)
|
||
|
{
|
||
|
this->CurrentLut->Delete();
|
||
|
}
|
||
|
this->CurrentTransform->Delete();
|
||
|
if (this->FileName)
|
||
|
{
|
||
|
delete [] this->FileName;
|
||
|
}
|
||
|
while(this->Internal->Heap.Count() > 0)
|
||
|
{
|
||
|
vtkObject* obj = this->Internal->Heap.Pop();
|
||
|
if (obj)
|
||
|
{
|
||
|
obj->Delete();
|
||
|
}
|
||
|
}
|
||
|
delete this->Internal;
|
||
|
|
||
|
// According to Tom Citriniti the useList must not be deleted until the
|
||
|
// instance is destroyed. The importer was crashing when users asked for a
|
||
|
// DEF node from within the VRML file. This DEF mechanism allows you to
|
||
|
// name a node inside the VRML file and refer to it from other nodes or
|
||
|
// from scripts that can be associated with the VRML file. A vector of
|
||
|
// these is created in the importer and has to live until the class is
|
||
|
// deleted.
|
||
|
delete VrmlNodeType::useList;
|
||
|
VrmlNodeType::useList = 0;
|
||
|
vtkVRMLAllocator::CleanUp();
|
||
|
}
|
||
|
|
||
|
void vtkVRMLImporter::PrintSelf(ostream& os, vtkIndent indent)
|
||
|
{
|
||
|
this->Superclass::PrintSelf(os,indent);
|
||
|
os << indent << "File Name: "
|
||
|
<< (this->FileName ? this->FileName : "(none)") << "\n";
|
||
|
|
||
|
os << "Defined names in File:" << endl;
|
||
|
if (VrmlNodeType::useList)
|
||
|
{
|
||
|
for (int i = 0;i < VrmlNodeType::useList->Count();i++)
|
||
|
{
|
||
|
os << "\tName: " << (*VrmlNodeType::useList)[i]->defName
|
||
|
<< " is a " << (*VrmlNodeType::useList)[i]->defObject->GetClassName()
|
||
|
<< endl;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Yacc/lex routines to add stuff to the renderer.
|
||
|
|
||
|
void
|
||
|
vtkVRMLImporter::enterNode(const char *nodeType)
|
||
|
{
|
||
|
vtkActor *actor;
|
||
|
vtkPolyDataMapper *pmap;
|
||
|
|
||
|
const VrmlNodeType *t = VrmlNodeType::find(nodeType);
|
||
|
if (t == NULL)
|
||
|
{
|
||
|
char tmp[1000];
|
||
|
sprintf(tmp, "Unknown node type '%s'", nodeType);
|
||
|
yyerror(tmp);
|
||
|
exit(99);
|
||
|
}
|
||
|
VrmlNodeType::FieldRec *fr = new VrmlNodeType::FieldRec;
|
||
|
fr->nodeType = t;
|
||
|
fr->fieldName = NULL;
|
||
|
*VrmlNodeType::currentField += fr;
|
||
|
if (strcmp(fr->nodeType->getName(), "Appearance") == 0)
|
||
|
{
|
||
|
if (this->CurrentProperty)
|
||
|
{
|
||
|
this->CurrentProperty->Delete();
|
||
|
}
|
||
|
this->CurrentProperty = vtkProperty::New();
|
||
|
if (creatingDEF)
|
||
|
{
|
||
|
*VrmlNodeType::useList += new vtkVRMLUseStruct(curDEFName,
|
||
|
this->CurrentProperty);
|
||
|
creatingDEF = 0;
|
||
|
}
|
||
|
}
|
||
|
else if (strcmp(fr->nodeType->getName(), "Box") == 0)
|
||
|
{
|
||
|
pmap = vtkPolyDataMapper::New();
|
||
|
vtkCubeSource *cube= vtkCubeSource::New();
|
||
|
pmap->SetInput(cube->GetOutput());
|
||
|
this->CurrentActor->SetMapper(pmap);
|
||
|
pmap->Delete();
|
||
|
if (this->CurrentProperty)
|
||
|
{
|
||
|
this->CurrentActor->SetProperty(this->CurrentProperty);
|
||
|
}
|
||
|
if (this->CurrentSource)
|
||
|
{
|
||
|
this->CurrentSource->Delete();
|
||
|
}
|
||
|
this->CurrentSource = cube;
|
||
|
if (creatingDEF)
|
||
|
{
|
||
|
*VrmlNodeType::useList += new vtkVRMLUseStruct(curDEFName, pmap);
|
||
|
creatingDEF = 0;
|
||
|
}
|
||
|
}
|
||
|
else if (strcmp(fr->nodeType->getName(), "Cone") == 0)
|
||
|
{
|
||
|
pmap = vtkPolyDataMapper::New();
|
||
|
vtkConeSource *cone= vtkConeSource::New();
|
||
|
cone->SetResolution(12);
|
||
|
pmap->SetInput(cone->GetOutput());
|
||
|
this->CurrentActor->SetMapper(pmap);
|
||
|
pmap->Delete();
|
||
|
if (this->CurrentProperty)
|
||
|
{
|
||
|
this->CurrentActor->SetProperty(this->CurrentProperty);
|
||
|
}
|
||
|
if (this->CurrentSource)
|
||
|
{
|
||
|
this->CurrentSource->Delete();
|
||
|
}
|
||
|
this->CurrentSource = cone;
|
||
|
if (creatingDEF)
|
||
|
{
|
||
|
*VrmlNodeType::useList += new vtkVRMLUseStruct(curDEFName, pmap);
|
||
|
creatingDEF = 0;
|
||
|
}
|
||
|
}
|
||
|
else if (strcmp(fr->nodeType->getName(), "Cylinder") == 0)
|
||
|
{
|
||
|
pmap = vtkPolyDataMapper::New();
|
||
|
vtkCylinderSource *cyl= vtkCylinderSource::New();
|
||
|
cyl->SetResolution(12);
|
||
|
pmap->SetInput(cyl->GetOutput());
|
||
|
this->CurrentActor->SetMapper(pmap);
|
||
|
pmap->Delete();
|
||
|
if (this->CurrentProperty)
|
||
|
{
|
||
|
this->CurrentActor->SetProperty(this->CurrentProperty);
|
||
|
}
|
||
|
if (this->CurrentSource)
|
||
|
{
|
||
|
this->CurrentSource->Delete();
|
||
|
}
|
||
|
this->CurrentSource = cyl;
|
||
|
if (creatingDEF)
|
||
|
{
|
||
|
*VrmlNodeType::useList += new vtkVRMLUseStruct(curDEFName, pmap);
|
||
|
creatingDEF = 0;
|
||
|
|
||
|
}
|
||
|
}
|
||
|
else if (strcmp(fr->nodeType->getName(), "DirectionalLight") == 0)
|
||
|
{
|
||
|
if (this->CurrentLight)
|
||
|
{
|
||
|
this->CurrentLight->Delete();
|
||
|
}
|
||
|
this->CurrentLight = vtkLight::New();
|
||
|
this->Renderer->AddLight(this->CurrentLight);
|
||
|
if (creatingDEF)
|
||
|
{
|
||
|
*VrmlNodeType::useList += new vtkVRMLUseStruct(curDEFName,
|
||
|
this->CurrentLight);
|
||
|
creatingDEF = 0;
|
||
|
}
|
||
|
}
|
||
|
else if (strcmp(fr->nodeType->getName(), "IndexedFaceSet") == 0 ||
|
||
|
strcmp(fr->nodeType->getName(), "IndexedLineSet") == 0 ||
|
||
|
strcmp(fr->nodeType->getName(), "PointSet") == 0)
|
||
|
{
|
||
|
pmap = vtkPolyDataMapper::New();
|
||
|
pmap->SetScalarVisibility(0);
|
||
|
this->CurrentActor->SetMapper(pmap);
|
||
|
if (this->CurrentProperty)
|
||
|
{
|
||
|
this->CurrentActor->SetProperty(this->CurrentProperty);
|
||
|
}
|
||
|
if (this->CurrentMapper)
|
||
|
{
|
||
|
this->CurrentMapper->Delete();
|
||
|
}
|
||
|
this->CurrentMapper = pmap;
|
||
|
if (this->CurrentScalars)
|
||
|
{
|
||
|
this->CurrentScalars->Delete();
|
||
|
}
|
||
|
this->CurrentScalars = vtkFloatArray::New();
|
||
|
if (creatingDEF)
|
||
|
{
|
||
|
*VrmlNodeType::useList += new vtkVRMLUseStruct(curDEFName, pmap);
|
||
|
creatingDEF = 0;
|
||
|
}
|
||
|
}
|
||
|
else if (strcmp(fr->nodeType->getName(), "Shape") == 0)
|
||
|
{
|
||
|
actor = vtkActor::New();
|
||
|
if (this->CurrentProperty)
|
||
|
{
|
||
|
actor->SetProperty(this->CurrentProperty);
|
||
|
}
|
||
|
actor->SetOrientation(this->CurrentTransform->GetOrientation());
|
||
|
actor->SetPosition(this->CurrentTransform->GetPosition());
|
||
|
actor->SetScale(this->CurrentTransform->GetScale());
|
||
|
if (this->CurrentActor)
|
||
|
{
|
||
|
this->CurrentActor->Delete();
|
||
|
}
|
||
|
this->CurrentActor = actor;
|
||
|
// Add actor to renderer
|
||
|
this->Renderer->AddActor(actor);
|
||
|
if (creatingDEF)
|
||
|
{
|
||
|
*VrmlNodeType::useList += new vtkVRMLUseStruct(curDEFName, actor);
|
||
|
creatingDEF= 0;
|
||
|
}
|
||
|
}
|
||
|
else if (strcmp(fr->nodeType->getName(), "Sphere") == 0)
|
||
|
{
|
||
|
pmap = vtkPolyDataMapper::New();
|
||
|
vtkSphereSource *sphere = vtkSphereSource::New();
|
||
|
pmap->SetInput(sphere->GetOutput());
|
||
|
if (this->CurrentSource)
|
||
|
{
|
||
|
this->CurrentSource->Delete();
|
||
|
}
|
||
|
this->CurrentSource = sphere;
|
||
|
this->CurrentActor->SetMapper(pmap);
|
||
|
pmap->Delete();
|
||
|
if (this->CurrentProperty)
|
||
|
{
|
||
|
this->CurrentActor->SetProperty(this->CurrentProperty);
|
||
|
}
|
||
|
if (creatingDEF)
|
||
|
{
|
||
|
*VrmlNodeType::useList += new vtkVRMLUseStruct(curDEFName, pmap);
|
||
|
creatingDEF= 0;
|
||
|
}
|
||
|
}
|
||
|
else if (strcmp(fr->nodeType->getName(), "Transform") == 0)
|
||
|
{
|
||
|
this->CurrentTransform->Push();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void
|
||
|
vtkVRMLImporter::exitNode()
|
||
|
{
|
||
|
VrmlNodeType::FieldRec *fr = VrmlNodeType::currentField->Top();
|
||
|
assert(fr != NULL);
|
||
|
VrmlNodeType::currentField->Pop();
|
||
|
|
||
|
// Exiting this means we need to setup the color mode and
|
||
|
// normals and other fun stuff.
|
||
|
if (strcmp(fr->nodeType->getName(), "IndexedFaceSet") == 0 ||
|
||
|
strcmp(fr->nodeType->getName(), "IndexedLineSet") == 0 ||
|
||
|
strcmp(fr->nodeType->getName(), "PointSet") == 0)
|
||
|
{
|
||
|
// if tcoords exactly correspond with vertices (or there aren't any)
|
||
|
// then can map straight through as usual
|
||
|
// if not then must rejig using face-correspondence
|
||
|
// (VRML supports per-face tcoords)
|
||
|
// a similar scheme is implemented in vtkOBJReader
|
||
|
|
||
|
int tcoords_correspond; // (boolean)
|
||
|
if (this->CurrentTCoords==NULL || this->CurrentTCoordCells==NULL)
|
||
|
tcoords_correspond=1; // there aren't any, can proceed
|
||
|
else if (this->CurrentTCoords->GetNumberOfTuples()!=this->CurrentPoints->GetNumberOfPoints())
|
||
|
tcoords_correspond=0; // false, must rejig
|
||
|
else
|
||
|
{
|
||
|
// the number of polygon faces and texture faces must be equal.
|
||
|
// if they are not then something is wrong
|
||
|
if (this->CurrentTCoordCells->GetNumberOfCells() !=
|
||
|
this->CurrentMapper->GetInput()->GetPolys()->GetNumberOfCells())
|
||
|
{
|
||
|
vtkErrorMacro(<<"Number of faces does not match texture faces, output may not be correct")
|
||
|
tcoords_correspond=1; // don't rejig
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// count of tcoords and points is the same, must run through indices to see if they
|
||
|
// correspond by index point-for-point
|
||
|
tcoords_correspond=1; // assume true until found otherwise
|
||
|
vtkIdType DUMMY_WARNING_PREVENTION_MECHANISM;
|
||
|
vtkIdType n_pts=-1,*pts = &DUMMY_WARNING_PREVENTION_MECHANISM;
|
||
|
vtkIdType n_tcoord_pts=-1,*tcoord_pts = &DUMMY_WARNING_PREVENTION_MECHANISM;
|
||
|
this->CurrentMapper->GetInput()->GetPolys()->InitTraversal();
|
||
|
this->CurrentTCoordCells->InitTraversal();
|
||
|
int i,j;
|
||
|
for (i=0;i<this->CurrentTCoordCells->GetNumberOfCells();i++)
|
||
|
{
|
||
|
this->CurrentMapper->GetInput()->GetPolys()->GetNextCell(n_pts,pts);
|
||
|
this->CurrentTCoordCells->GetNextCell(n_tcoord_pts,tcoord_pts);
|
||
|
if (n_pts!=n_tcoord_pts)
|
||
|
{
|
||
|
vtkErrorMacro(<<"Face size differs to texture face size, output may not be correct")
|
||
|
break;
|
||
|
}
|
||
|
for (j=0;j<n_pts;j++)
|
||
|
{
|
||
|
if (pts[j]!=tcoord_pts[j])
|
||
|
{
|
||
|
tcoords_correspond=0; // have found an exception
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (tcoords_correspond) // no rejigging necessary
|
||
|
{
|
||
|
((vtkPolyData *)this->CurrentMapper->GetInput())->SetPoints(this->CurrentPoints);
|
||
|
// We always create a scalar object in the enternode method.
|
||
|
((vtkPolyData *)this->CurrentMapper->GetInput())->GetPointData()->SetScalars(CurrentScalars);
|
||
|
if (this->CurrentNormals)
|
||
|
{
|
||
|
((vtkPolyData *)this->CurrentMapper->GetInput())->GetPointData()->SetNormals(CurrentNormals);
|
||
|
this->CurrentNormals->Delete();
|
||
|
this->CurrentNormals = NULL;
|
||
|
}
|
||
|
if (this->CurrentTCoords)
|
||
|
{
|
||
|
((vtkPolyData *)this->CurrentMapper->GetInput())->GetPointData()->SetTCoords(CurrentTCoords);
|
||
|
this->CurrentTCoords->Delete();
|
||
|
this->CurrentTCoords = NULL;
|
||
|
}
|
||
|
}
|
||
|
else // must rejig
|
||
|
{
|
||
|
|
||
|
vtkDebugMacro(<<"Duplicating vertices so that tcoords and normals are correct");
|
||
|
|
||
|
vtkPoints *new_points = vtkPoints::New();
|
||
|
vtkFloatArray *new_scalars = vtkFloatArray::New();
|
||
|
if (this->CurrentScalars)
|
||
|
new_scalars->SetNumberOfComponents(this->CurrentScalars->GetNumberOfComponents());
|
||
|
vtkFloatArray *new_tcoords = vtkFloatArray::New();
|
||
|
new_tcoords->SetNumberOfComponents(2);
|
||
|
vtkFloatArray *new_normals = vtkFloatArray::New();
|
||
|
new_normals->SetNumberOfComponents(3);
|
||
|
vtkCellArray *new_polys = vtkCellArray::New();
|
||
|
|
||
|
// for each poly, copy its vertices into new_points (and point at them)
|
||
|
// also copy its tcoords into new_tcoords
|
||
|
// also copy its normals into new_normals
|
||
|
// also copy its scalar into new_scalars
|
||
|
this->CurrentMapper->GetInput()->GetPolys()->InitTraversal();
|
||
|
this->CurrentTCoordCells->InitTraversal();
|
||
|
int i,j;
|
||
|
vtkIdType DUMMY_WARNING_PREVENTION_MECHANISM;
|
||
|
vtkIdType n_pts=-1,*pts = &DUMMY_WARNING_PREVENTION_MECHANISM;
|
||
|
vtkIdType n_tcoord_pts=-1,*tcoord_pts = &DUMMY_WARNING_PREVENTION_MECHANISM;
|
||
|
for (i=0;i<this->CurrentMapper->GetInput()->GetPolys()->GetNumberOfCells();i++)
|
||
|
{
|
||
|
|
||
|
this->CurrentMapper->GetInput()->GetPolys()->GetNextCell(n_pts,pts);
|
||
|
this->CurrentTCoordCells->GetNextCell(n_tcoord_pts,tcoord_pts);
|
||
|
|
||
|
// If some vertices have tcoords and not others
|
||
|
// then we must do something else VTK will complain. (crash on render attempt)
|
||
|
// Easiest solution is to delete polys that don't have complete tcoords (if there
|
||
|
// are any tcoords in the dataset)
|
||
|
|
||
|
if (n_pts!=n_tcoord_pts && this->CurrentTCoords->GetNumberOfTuples()>0)
|
||
|
{
|
||
|
// skip this poly
|
||
|
vtkDebugMacro(<<"Skipping poly "<<i+1<<" (1-based index)");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// copy the corresponding points, tcoords and normals across
|
||
|
for (j=0;j<n_pts;j++)
|
||
|
{
|
||
|
// copy the tcoord for this point across (if there is one)
|
||
|
if (this->CurrentTCoords && n_tcoord_pts>0)
|
||
|
new_tcoords->InsertNextTuple(this->CurrentTCoords->GetTuple(tcoord_pts[j]));
|
||
|
// copy the normal for this point across (if any)
|
||
|
if (this->CurrentNormals)
|
||
|
new_normals->InsertNextTuple(this->CurrentNormals->GetTuple(pts[j]));
|
||
|
// copy the scalar for this point across
|
||
|
if (this->CurrentScalars)
|
||
|
new_scalars->InsertNextTuple(this->CurrentScalars->GetTuple(pts[j]));
|
||
|
// copy the vertex into the new structure and update
|
||
|
// the vertex index in the polys structure (pts is a pointer into it)
|
||
|
pts[j] = new_points->InsertNextPoint(this->CurrentPoints->GetPoint(pts[j]));
|
||
|
}
|
||
|
// copy this poly (pointing at the new points) into the new polys list
|
||
|
new_polys->InsertNextCell(n_pts,pts);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// use the new structures for the output
|
||
|
this->CurrentMapper->GetInput()->SetPoints(new_points);
|
||
|
this->CurrentMapper->GetInput()->SetPolys(new_polys);
|
||
|
if (this->CurrentTCoords)
|
||
|
this->CurrentMapper->GetInput()->GetPointData()->SetTCoords(new_tcoords);
|
||
|
if (this->CurrentNormals)
|
||
|
this->CurrentMapper->GetInput()->GetPointData()->SetNormals(new_normals);
|
||
|
if (this->CurrentScalars)
|
||
|
this->CurrentMapper->GetInput()->GetPointData()->SetScalars(new_scalars);
|
||
|
this->CurrentMapper->GetInput()->Squeeze();
|
||
|
|
||
|
new_points->Delete();
|
||
|
new_polys->Delete();
|
||
|
new_tcoords->Delete();
|
||
|
new_normals->Delete();
|
||
|
new_scalars->Delete();
|
||
|
}
|
||
|
|
||
|
if (this->CurrentLut)
|
||
|
{
|
||
|
this->CurrentScalars->InsertNextValue(this->CurrentLut->GetNumberOfColors());
|
||
|
this->CurrentMapper->SetLookupTable(CurrentLut);
|
||
|
this->CurrentMapper->SetScalarVisibility(1);
|
||
|
// Set for PerVertex Coloring.
|
||
|
this->CurrentLut->SetTableRange(0.0,
|
||
|
float(this->CurrentLut->GetNumberOfColors() - 1));
|
||
|
this->CurrentLut->Delete();
|
||
|
this->CurrentLut = NULL;
|
||
|
}
|
||
|
}
|
||
|
else if (strcmp(fr->nodeType->getName(), "Shape") == 0)
|
||
|
{
|
||
|
if (this->CurrentProperty)
|
||
|
this->CurrentActor->SetProperty(this->CurrentProperty);
|
||
|
}
|
||
|
// simply pop the current transform
|
||
|
else if (strcmp(fr->nodeType->getName(), "Transform") == 0)
|
||
|
{
|
||
|
this->CurrentTransform->Pop();
|
||
|
}
|
||
|
|
||
|
delete fr;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void
|
||
|
vtkVRMLImporter::enterField(const char *fieldName)
|
||
|
{
|
||
|
VrmlNodeType::FieldRec *fr = VrmlNodeType::currentField->Top();
|
||
|
assert(fr != NULL);
|
||
|
|
||
|
fr->fieldName = fieldName;
|
||
|
if (fr->nodeType != NULL)
|
||
|
{
|
||
|
// enterField is called when parsing eventIn and eventOut IS
|
||
|
// declarations, in which case we don't need to do anything special--
|
||
|
// the IS IDENTIFIER will be returned from the lexer normally.
|
||
|
if (fr->nodeType->hasEventIn(fieldName) ||
|
||
|
fr->nodeType->hasEventOut(fieldName))
|
||
|
return;
|
||
|
|
||
|
int type = fr->nodeType->hasField(fieldName);
|
||
|
if (type != 0)
|
||
|
{
|
||
|
// Let the lexer know what field type to expect:
|
||
|
expect(type);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
cerr << "Error: Node's of type " << fr->nodeType->getName() <<
|
||
|
" do not have fields/eventIn/eventOut named " <<
|
||
|
fieldName << "\n";
|
||
|
// expect(ANY_FIELD);
|
||
|
}
|
||
|
}
|
||
|
// else expect(ANY_FIELD);
|
||
|
}
|
||
|
|
||
|
void
|
||
|
vtkVRMLImporter::exitField()
|
||
|
{
|
||
|
VrmlNodeType::FieldRec *fr = VrmlNodeType::currentField->Top();
|
||
|
assert(fr != NULL);
|
||
|
// For the radius field
|
||
|
if (strcmp(fr->fieldName, "radius") == 0)
|
||
|
{
|
||
|
// Set the Sphere radius
|
||
|
if (strcmp(fr->nodeType->getName(), "Sphere") == 0)
|
||
|
{
|
||
|
((vtkSphereSource *)(this->CurrentSource))->SetRadius(yylval.sffloat);
|
||
|
}
|
||
|
// Set the Cylinder radius
|
||
|
if (strcmp(fr->nodeType->getName(), "Cylinder") == 0)
|
||
|
{
|
||
|
((vtkCylinderSource *)this->CurrentSource)->SetRadius(yylval.sffloat);
|
||
|
}
|
||
|
}
|
||
|
// for the ambientIntensity field
|
||
|
else if (strcmp(fr->fieldName, "ambientIntensity") == 0)
|
||
|
{
|
||
|
// Add to the current light
|
||
|
if (strcmp(fr->nodeType->getName(), "DirectionalLight") == 0)
|
||
|
{
|
||
|
this->CurrentLight->SetIntensity(yylval.sffloat);
|
||
|
}
|
||
|
// or the current material
|
||
|
else if (strcmp(fr->nodeType->getName(), "Material") == 0)
|
||
|
{
|
||
|
this->CurrentProperty->SetAmbient(yylval.sffloat);
|
||
|
}
|
||
|
}
|
||
|
// For diffuseColor field, only in material node
|
||
|
else if (strcmp(fr->fieldName, "diffuseColor") == 0)
|
||
|
{
|
||
|
this->CurrentProperty->SetDiffuseColor(
|
||
|
yylval.vec3f->GetPoint(0)[0],yylval.vec3f->GetPoint(0)[1],
|
||
|
yylval.vec3f->GetPoint(0)[2]);
|
||
|
yylval.vec3f->Reset();this->DeleteObject(yylval.vec3f);
|
||
|
yylval.vec3f = NULL;
|
||
|
}
|
||
|
// For emissiveColor field, only in material node
|
||
|
else if (strcmp(fr->fieldName, "emissiveColor") == 0)
|
||
|
{
|
||
|
this->CurrentProperty->SetAmbientColor(
|
||
|
yylval.vec3f->GetPoint(0)[0],yylval.vec3f->GetPoint(0)[1],
|
||
|
yylval.vec3f->GetPoint(0)[2]);
|
||
|
yylval.vec3f->Reset();this->DeleteObject(yylval.vec3f);yylval.vec3f = NULL;
|
||
|
}
|
||
|
// For shininess field, only in material node
|
||
|
else if (strcmp(fr->fieldName, "shininess") == 0)
|
||
|
{
|
||
|
this->CurrentProperty->SetSpecularPower(yylval.sffloat);
|
||
|
}
|
||
|
// For specularcolor field, only in material node
|
||
|
else if (strcmp(fr->fieldName, "specularColor") == 0)
|
||
|
{
|
||
|
this->CurrentProperty->SetSpecularColor(
|
||
|
yylval.vec3f->GetPoint(0)[0],yylval.vec3f->GetPoint(0)[1],
|
||
|
yylval.vec3f->GetPoint(0)[2]);
|
||
|
yylval.vec3f->Reset();this->DeleteObject(yylval.vec3f);yylval.vec3f = NULL;
|
||
|
}
|
||
|
// For transparency field, only in material node
|
||
|
else if (strcmp(fr->fieldName, "transparency") == 0)
|
||
|
{
|
||
|
this->CurrentProperty->SetOpacity(1.0 - yylval.sffloat);
|
||
|
}
|
||
|
// For the translation field
|
||
|
else if (strcmp(fr->fieldName, "translation") == 0)
|
||
|
{
|
||
|
// in the Transform node.
|
||
|
if (strcmp(fr->nodeType->getName(), "Transform") == 0)
|
||
|
{
|
||
|
double *dtmp = yylval.vec3f->GetPoint(0);
|
||
|
this->CurrentTransform->Translate(dtmp[0],dtmp[1],dtmp[2]);
|
||
|
yylval.vec3f->Reset();
|
||
|
this->DeleteObject(yylval.vec3f); yylval.vec3f = NULL;
|
||
|
}
|
||
|
}
|
||
|
// For the scale field
|
||
|
else if (strcmp(fr->fieldName, "scale") == 0)
|
||
|
{
|
||
|
// In the transform node
|
||
|
if (strcmp(fr->nodeType->getName(), "Transform") == 0)
|
||
|
{
|
||
|
double *dtmp = yylval.vec3f->GetPoint(0);
|
||
|
this->CurrentTransform->Scale(dtmp[0],dtmp[1],dtmp[2]);
|
||
|
yylval.vec3f->Reset();this->DeleteObject(yylval.vec3f);
|
||
|
yylval.vec3f = NULL;
|
||
|
}
|
||
|
}
|
||
|
// For the size field
|
||
|
else if (strcmp(fr->fieldName, "size") == 0)
|
||
|
{
|
||
|
// set the current source (has to be a CubeSource)
|
||
|
if (strcmp(fr->nodeType->getName(), "Box") == 0)
|
||
|
{
|
||
|
double *dtmp = yylval.vec3f->GetPoint(0);
|
||
|
((vtkCubeSource *)this->CurrentSource)->SetXLength(dtmp[0]);
|
||
|
((vtkCubeSource *)this->CurrentSource)->SetYLength(dtmp[1]);
|
||
|
((vtkCubeSource *)this->CurrentSource)->SetZLength(dtmp[2]);
|
||
|
yylval.vec3f->Reset();this->DeleteObject(yylval.vec3f);
|
||
|
yylval.vec3f = NULL;
|
||
|
}
|
||
|
}
|
||
|
// For the height field
|
||
|
else if (strcmp(fr->fieldName, "height") == 0)
|
||
|
{
|
||
|
// Set the current Cone height
|
||
|
if (strcmp(fr->nodeType->getName(), "Cone") == 0)
|
||
|
{
|
||
|
((vtkConeSource *)this->CurrentSource)->SetHeight(yylval.sffloat);
|
||
|
}
|
||
|
// or set the current Cylinder height
|
||
|
if (strcmp(fr->nodeType->getName(), "Cylinder") == 0)
|
||
|
{
|
||
|
((vtkCylinderSource *)this->CurrentSource)->SetHeight(yylval.sffloat);
|
||
|
}
|
||
|
}
|
||
|
// For the bottomRadius field (Only in the Cone object)
|
||
|
else if (strcmp(fr->fieldName, "bottomRadius") == 0)
|
||
|
{
|
||
|
if (strcmp(fr->nodeType->getName(), "Cone") == 0)
|
||
|
{
|
||
|
((vtkConeSource *)this->CurrentSource)->SetRadius(yylval.sffloat);
|
||
|
}
|
||
|
}
|
||
|
// else if (strcmp(fr->fieldName, "position") == 0) {
|
||
|
// yylval.vec3f->GetPoint(0, vals);
|
||
|
// vtkCamera *acam = vtkCamera::New();
|
||
|
// acam->SetPosition(vals);
|
||
|
// this->Renderer->SetActiveCamera(acam);
|
||
|
// yylval.vec3f->Delete();yylval.vec3f = NULL;
|
||
|
// }
|
||
|
// Handle coordIndex for Indexed????Sets
|
||
|
else if (strcmp(fr->fieldName, "coordIndex") == 0)
|
||
|
{
|
||
|
vtkCellArray *cells;
|
||
|
int index, i, cnt;
|
||
|
vtkPolyData *pd;
|
||
|
|
||
|
pd = vtkPolyData::New();
|
||
|
cells = vtkCellArray::New();
|
||
|
index = i = cnt = 0;
|
||
|
for (i = 0;i <= yylval.mfint32->GetMaxId();i++)
|
||
|
{
|
||
|
if (yylval.mfint32->GetValue(i) == -1)
|
||
|
{
|
||
|
cells->InsertNextCell(cnt,
|
||
|
(vtkIdType*)yylval.mfint32->GetPointer(index));
|
||
|
index = i+1;
|
||
|
cnt = 0;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
cnt++;
|
||
|
}
|
||
|
}
|
||
|
if (strcmp(fr->nodeType->getName(), "IndexedFaceSet") == 0)
|
||
|
{
|
||
|
pd->SetPolys(cells);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
pd->SetLines(cells);
|
||
|
}
|
||
|
|
||
|
this->CurrentMapper->SetInput(pd);
|
||
|
pd->Delete();
|
||
|
cells->Delete();
|
||
|
yylval.mfint32->Reset();this->DeleteObject(yylval.mfint32);
|
||
|
}
|
||
|
// Handle point field
|
||
|
else if (strcmp(fr->fieldName, "point") == 0)
|
||
|
{
|
||
|
// If for a coordinate node, simply used created FloatPoints
|
||
|
if (strcmp(fr->nodeType->getName(), "Coordinate") == 0)
|
||
|
{
|
||
|
if (this->CurrentPoints)
|
||
|
{
|
||
|
this->CurrentPoints->Delete();
|
||
|
}
|
||
|
this->CurrentPoints = yylval.vec3f;
|
||
|
// Seed the scalars with default values.
|
||
|
this->CurrentScalars->Reset();
|
||
|
for (int i=0;i < this->CurrentPoints->GetNumberOfPoints();i++)
|
||
|
{
|
||
|
this->CurrentScalars->InsertNextValue(i);
|
||
|
}
|
||
|
if (creatingDEF)
|
||
|
{
|
||
|
*VrmlNodeType::useList += new vtkVRMLUseStruct(curDEFName, this->CurrentPoints);
|
||
|
creatingDEF = 0;
|
||
|
}
|
||
|
}
|
||
|
else if (strcmp(fr->nodeType->getName(), "TextureCoordinate") == 0) // TJH
|
||
|
{
|
||
|
if(this->CurrentTCoords)
|
||
|
{
|
||
|
this->CurrentTCoords->Delete();
|
||
|
}
|
||
|
this->CurrentTCoords = yylval.vec2f;
|
||
|
this->CurrentTCoords->Register(this);
|
||
|
}
|
||
|
}
|
||
|
// Handle coord field, simply set the CurrentPoints
|
||
|
else if (strcmp(fr->fieldName, "coord") == 0)
|
||
|
{
|
||
|
this->CurrentPoints = yylval.vec3f;
|
||
|
this->CurrentPoints->Register(this);
|
||
|
if (creatingDEF)
|
||
|
{
|
||
|
*VrmlNodeType::useList += new vtkVRMLUseStruct(curDEFName, this->CurrentPoints);
|
||
|
creatingDEF = 0;
|
||
|
}
|
||
|
|
||
|
// There is no coordIndex for PointSet data, generate the PolyData here.
|
||
|
if (strcmp(fr->nodeType->getName(), "PointSet") == 0)
|
||
|
{
|
||
|
vtkCellArray *cells;
|
||
|
vtkIdType i;
|
||
|
vtkPolyData *pd;
|
||
|
|
||
|
pd = vtkPolyData::New();
|
||
|
cells = vtkCellArray::New();
|
||
|
for (i=0;i < yylval.vec3f->GetNumberOfPoints();i++)
|
||
|
{
|
||
|
cells->InsertNextCell(1, &i);
|
||
|
}
|
||
|
|
||
|
pd->SetVerts(cells);
|
||
|
|
||
|
this->CurrentMapper->SetInput(pd);
|
||
|
pd->Delete();
|
||
|
cells->Delete();
|
||
|
}
|
||
|
}
|
||
|
// Handle color field
|
||
|
else if (strcmp(fr->fieldName, "color") == 0)
|
||
|
{
|
||
|
// For the Light nodes
|
||
|
if (strcmp(fr->nodeType->getName(), "DirectionalLight") == 0)
|
||
|
{
|
||
|
this->CurrentLight->SetColor(
|
||
|
yylval.vec3f->GetPoint(0)[0],yylval.vec3f->GetPoint(0)[1],
|
||
|
yylval.vec3f->GetPoint(0)[2]);
|
||
|
yylval.vec3f->Reset();this->DeleteObject(yylval.vec3f);
|
||
|
yylval.vec3f = NULL;
|
||
|
}
|
||
|
// For the Color node, Insert colors into lookup table
|
||
|
// These are associated with the points in the coord field
|
||
|
// and also in the colorIndex field
|
||
|
if (strcmp(fr->nodeType->getName(), "Color") == 0)
|
||
|
{
|
||
|
double vals4[4];
|
||
|
vals4[3] = 1.0;
|
||
|
vtkLookupTable *lut = vtkLookupTable::New();
|
||
|
lut->SetNumberOfColors(yylval.vec3f->GetNumberOfPoints());
|
||
|
lut->Build();
|
||
|
for (int i=0;i < yylval.vec3f->GetNumberOfPoints();i++)
|
||
|
{
|
||
|
yylval.vec3f->GetPoint(i, vals4);
|
||
|
lut->SetTableValue(i, vals4);
|
||
|
}
|
||
|
if (this->CurrentLut)
|
||
|
{
|
||
|
this->CurrentLut->Delete();
|
||
|
}
|
||
|
this->CurrentLut = lut;
|
||
|
if (creatingDEF)
|
||
|
{
|
||
|
*VrmlNodeType::useList += new vtkVRMLUseStruct(curDEFName, this->CurrentLut);
|
||
|
creatingDEF = 0;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
// Handle colorIndex field, always for a Indexed????Set
|
||
|
else if (strcmp(fr->fieldName, "colorIndex") == 0)
|
||
|
{
|
||
|
vtkCellArray *cells;
|
||
|
int index, j;
|
||
|
vtkIdType *pts=0;
|
||
|
vtkIdType npts;
|
||
|
vtkPolyData *pd = (vtkPolyData *)this->CurrentMapper->GetInput();
|
||
|
if (pd->GetNumberOfPolys() > 0)
|
||
|
cells = pd->GetPolys();
|
||
|
else
|
||
|
cells = pd->GetLines();
|
||
|
cells->InitTraversal();
|
||
|
index = 0;j = 0;
|
||
|
cells->GetNextCell(npts, pts);
|
||
|
for (int i=0;i <= yylval.mfint32->GetMaxId();i++)
|
||
|
{
|
||
|
if (yylval.mfint32->GetValue(index) == -1)
|
||
|
{
|
||
|
cells->GetNextCell(npts, pts);
|
||
|
// Pass by the -1
|
||
|
index++;
|
||
|
j = 0;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// Redirect color into scalar position
|
||
|
this->CurrentScalars->SetComponent(pts[j++], 0,
|
||
|
yylval.mfint32->GetValue(index++));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
// Handle direction field
|
||
|
else if (strcmp(fr->fieldName, "direction") == 0)
|
||
|
{
|
||
|
// For Directional light.
|
||
|
if (strcmp(fr->nodeType->getName(), "DirectionalLight") == 0) {
|
||
|
this->CurrentLight->SetFocalPoint(yylval.vec3f->GetPoint(0));
|
||
|
yylval.vec3f->Reset();this->DeleteObject(yylval.vec3f);yylval.vec3f = NULL;
|
||
|
}
|
||
|
// For
|
||
|
}
|
||
|
// Handle intensity field
|
||
|
else if (strcmp(fr->fieldName, "intensity") == 0)
|
||
|
{
|
||
|
// For Directional light.
|
||
|
if (strcmp(fr->nodeType->getName(), "DirectionalLight") == 0)
|
||
|
{
|
||
|
this->CurrentLight->SetIntensity(yylval.sffloat);
|
||
|
}
|
||
|
// For
|
||
|
}
|
||
|
// Handle on field
|
||
|
else if (strcmp(fr->fieldName, "on") == 0)
|
||
|
{
|
||
|
// For Directional light.
|
||
|
if (strcmp(fr->nodeType->getName(), "DirectionalLight") == 0)
|
||
|
{
|
||
|
this->CurrentLight->SetSwitch(yylval.sfint);
|
||
|
}
|
||
|
// For
|
||
|
}
|
||
|
// Handle colorPerVertex field
|
||
|
else if (strcmp(fr->fieldName, "colorPerVertex") == 0)
|
||
|
{
|
||
|
// Same for all geometry nodes.
|
||
|
this->CurrentMapper->SetScalarVisibility(yylval.sfint);
|
||
|
}
|
||
|
// Handle vector field for Normal Node
|
||
|
else if (strcmp(fr->fieldName, "vector") == 0)
|
||
|
{
|
||
|
// For all floats in the vec3f, copy to the normal structure.
|
||
|
if (this->CurrentNormals)
|
||
|
{
|
||
|
this->CurrentNormals->Delete();
|
||
|
}
|
||
|
this->CurrentNormals = vtkFloatArray::New();
|
||
|
this->CurrentNormals->SetNumberOfComponents(3);
|
||
|
this->CurrentNormals->SetNumberOfTuples(yylval.vec3f->GetNumberOfPoints());
|
||
|
for (int i=0;i < yylval.vec3f->GetNumberOfPoints();i++)
|
||
|
{
|
||
|
this->CurrentNormals->InsertTuple(i, yylval.vec3f->GetPoint(i));
|
||
|
}
|
||
|
yylval.vec3f->Reset();this->DeleteObject(yylval.vec3f);
|
||
|
}
|
||
|
else if (strcmp(fr->fieldName, "location") == 0)
|
||
|
{
|
||
|
yylval.vec3f->Reset();this->DeleteObject(yylval.vec3f);
|
||
|
}
|
||
|
else if (strcmp(fr->fieldName, "position") == 0)
|
||
|
{
|
||
|
yylval.vec3f->Reset();this->DeleteObject(yylval.vec3f);
|
||
|
}
|
||
|
else if (strcmp(fr->fieldName, "center") == 0)
|
||
|
{
|
||
|
yylval.vec3f->Reset();this->DeleteObject(yylval.vec3f);
|
||
|
}
|
||
|
else if (strcmp(fr->fieldName, "texCoordIndex") == 0)
|
||
|
{
|
||
|
if (this->CurrentTCoordCells) {
|
||
|
this->CurrentTCoordCells->Delete();
|
||
|
}
|
||
|
this->CurrentTCoordCells = vtkCellArray::New();
|
||
|
|
||
|
// read the indices of the tcoords and assign accordingly
|
||
|
int index, i, cnt;
|
||
|
index = i = cnt = 0;
|
||
|
for (i = 0;i <= yylval.mfint32->GetMaxId();i++)
|
||
|
{
|
||
|
if (yylval.mfint32->GetValue(i) == -1)
|
||
|
{
|
||
|
this->CurrentTCoordCells->InsertNextCell(cnt,
|
||
|
(vtkIdType*)yylval.mfint32->GetPointer(index));
|
||
|
index = i+1;
|
||
|
cnt = 0;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
cnt++;
|
||
|
}
|
||
|
}
|
||
|
yylval.mfint32->Reset();this->DeleteObject(yylval.mfint32);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
}
|
||
|
fr->fieldName = NULL;
|
||
|
}
|
||
|
|
||
|
void
|
||
|
vtkVRMLImporter::useNode(const char *name) {
|
||
|
|
||
|
vtkObject *useO;
|
||
|
if ((useO = this->GetVRMLDEFObject(name)))
|
||
|
{
|
||
|
if (strstr(useO->GetClassName(), "Actor"))
|
||
|
{
|
||
|
vtkActor *_act = vtkActor::New();
|
||
|
_act->ShallowCopy((vtkActor *)useO);
|
||
|
if (this->CurrentProperty)
|
||
|
_act->SetProperty(this->CurrentProperty);
|
||
|
_act->SetOrientation(this->CurrentTransform->GetOrientation());
|
||
|
_act->SetPosition(this->CurrentTransform->GetPosition());
|
||
|
_act->SetScale(this->CurrentTransform->GetScale());
|
||
|
if (this->CurrentActor)
|
||
|
{
|
||
|
this->CurrentActor->Delete();
|
||
|
}
|
||
|
this->CurrentActor = _act;
|
||
|
this->Renderer->AddActor(_act);
|
||
|
}
|
||
|
else if (strstr(useO->GetClassName(), "PolyDataMapper"))
|
||
|
{
|
||
|
vtkActor *_act = vtkActor::New();
|
||
|
_act->SetMapper((vtkPolyDataMapper *)useO);
|
||
|
if (this->CurrentProperty)
|
||
|
{
|
||
|
_act->SetProperty(this->CurrentProperty);
|
||
|
}
|
||
|
_act->SetOrientation(this->CurrentTransform->GetOrientation());
|
||
|
_act->SetPosition(this->CurrentTransform->GetPosition());
|
||
|
_act->SetScale(this->CurrentTransform->GetScale());
|
||
|
if (this->CurrentActor)
|
||
|
{
|
||
|
this->CurrentActor->UnRegister(this);
|
||
|
}
|
||
|
this->CurrentActor = _act;
|
||
|
this->Renderer->AddActor(_act);
|
||
|
}
|
||
|
else if (strcmp(useO->GetClassName(), "vtkPoints") == 0)
|
||
|
{
|
||
|
yylval.vec3f = (vtkPoints *) useO;
|
||
|
if (this->CurrentPoints)
|
||
|
{
|
||
|
this->CurrentPoints->Delete();
|
||
|
}
|
||
|
this->CurrentPoints = (vtkPoints *) useO;
|
||
|
}
|
||
|
else if (strcmp(useO->GetClassName(), "vtkLookupTable") == 0)
|
||
|
{
|
||
|
if (this->CurrentLut)
|
||
|
{
|
||
|
this->CurrentLut->Delete();
|
||
|
}
|
||
|
this->CurrentLut = (vtkLookupTable *) useO;
|
||
|
// Seed the scalars with default values.
|
||
|
this->CurrentScalars->Reset();
|
||
|
for (int i=0;i < this->CurrentPoints->GetNumberOfPoints();i++)
|
||
|
{
|
||
|
this->CurrentScalars->InsertNextValue(i);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
// Send in the name from the VRML file, get the VTK object.
|
||
|
vtkObject *
|
||
|
vtkVRMLImporter::GetVRMLDEFObject(const char *name)
|
||
|
{
|
||
|
// Look through the type stack:
|
||
|
// Need to go from top of stack since last DEF created is most current
|
||
|
for (int i = VrmlNodeType::useList->Count()-1;i >=0 ; i--)
|
||
|
{
|
||
|
const vtkVRMLUseStruct *nt = (*VrmlNodeType::useList)[i];
|
||
|
if (nt != NULL && strcmp(nt->defName,name) == 0)
|
||
|
{
|
||
|
return nt->defObject;
|
||
|
}
|
||
|
}
|
||
|
return NULL;
|
||
|
}
|
||
|
|
||
|
|
||
|
// Used by the lex input to get characters. Needed to read in memory structure
|
||
|
|
||
|
static void memyyInput(char *buf, int &result, int max_size) {
|
||
|
|
||
|
result = static_cast<int>(
|
||
|
strlen(strncpy(buf, standardNodes[memyyInput_i], max_size)));
|
||
|
memyyInput_j = result - static_cast<int>(
|
||
|
strlen(standardNodes[memyyInput_i]));
|
||
|
if ( memyyInput_j == 0 )
|
||
|
{
|
||
|
memyyInput_i++;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Needed to reset the lex input routine to default.
|
||
|
static void defyyInput(char *buf, int &result, int max_size) {
|
||
|
if ( yy_current_buffer->yy_is_interactive )
|
||
|
{
|
||
|
int c = getc( yyin );
|
||
|
result = c == EOF ? 0 : 1;
|
||
|
buf[0] = (char) c;
|
||
|
}
|
||
|
else if( ((result = static_cast<int>(fread( buf, 1, max_size, yyin ))) == 0)
|
||
|
&& ferror( yyin ) )
|
||
|
{
|
||
|
YY_FATAL_ERROR( "input in flex scanner failed" );
|
||
|
}
|
||
|
}
|
||
|
|