diff --git a/Geo/CAD.cpp b/Geo/CAD.cpp index 7265151a671db69233ca972e39fb189f7670da70..d8cd7e1b94856aebc883a2fb113583d2acea4f93 100644 --- a/Geo/CAD.cpp +++ b/Geo/CAD.cpp @@ -1,4 +1,4 @@ -// $Id: CAD.cpp,v 1.37 2001-11-12 11:25:22 geuzaine Exp $ +// $Id: CAD.cpp,v 1.38 2001-11-12 13:33:57 geuzaine Exp $ #include "Gmsh.h" #include "Numeric.h" @@ -16,6 +16,8 @@ extern Context_T CTX; static List_T *ListOfTransformedPoints=NULL; +///////////////////////////////////////////////////////////////////////////////////// +// BASIC FUNCTIONS int NEWPOINT(void){ return (THEM->MaxPointNum + 1); @@ -197,439 +199,354 @@ SurfaceLoop *FindSurfaceLoop(int inum, Mesh *M){ return NULL; } -/* - S = (sx(u,v),sy(u,v),sz(u,v)) - C = (cx(w),cy(w),cz(w)) - - sx - cx = 0 - sy - cy = 0 - sz - cz = 0 - - 3eqs 3incs -*/ - -static Curve *CURVE, *CURVE_2; -static Surface *SURFACE; -static Vertex *VERTEX; -extern double min1d (int, double (*funct)(double), double *xmin); -extern void newt(float x[], int n, int *check, - void (*vecfunc)(int, float [], float [])); - -static void intersectCS (int N, float x[], float res[]){ - //x[1] = u x[2] = v x[3] = w - Vertex s,c; - s = InterpolateSurface(SURFACE,x[1],x[2],0,0); - c = InterpolateCurve (CURVE,x[3],0); - res[1] = s.Pos.X - c.Pos.X; - res[2] = s.Pos.Y - c.Pos.Y; - res[3] = s.Pos.Z - c.Pos.Z; +void CopyVertex (Vertex *v, Vertex *vv){ + vv->lc = v->lc; + vv->u = v->u; + vv->Pos.X = v->Pos.X; + vv->Pos.Y = v->Pos.Y; + vv->Pos.Z = v->Pos.Z; + vv->Freeze.X = v->Freeze.X; + vv->Freeze.Y = v->Freeze.Y; + vv->Freeze.Z = v->Freeze.Z; } -static void intersectCC (int N, float x[], float res[]){ - //x[1] = u x[2] = v - Vertex c2,c; - c2 = InterpolateCurve(CURVE_2,x[2],0); - c = InterpolateCurve (CURVE,x[1],0); - res[1] = c2.Pos.X - c.Pos.X; - res[2] = c2.Pos.Y - c.Pos.Y; +Vertex *DuplicateVertex (Vertex *v){ + Vertex *pv; + pv = Create_Vertex(NEWPOINT(),0,0,0,0,0); + CopyVertex (v,pv); + Tree_Insert(THEM->Points,&pv); + return pv; } -static void projectPS (int N, float x[], float res[]){ - //x[1] = u x[2] = v - Vertex du,dv,c; - c = InterpolateSurface(SURFACE,x[1],x[2],0,0); - du = InterpolateSurface(SURFACE,x[1],x[2],1,1); - dv = InterpolateSurface(SURFACE,x[1],x[2],1,2); - res[1] = - (c.Pos.X - VERTEX->Pos.X)*du.Pos.X + - (c.Pos.Y - VERTEX->Pos.Y)*du.Pos.Y + - (c.Pos.Z - VERTEX->Pos.Z)*du.Pos.Z; - res[2] = - (c.Pos.X - VERTEX->Pos.X)*dv.Pos.X + - (c.Pos.Y - VERTEX->Pos.Y)*dv.Pos.Y + - (c.Pos.Z - VERTEX->Pos.Z)*dv.Pos.Z; +void CopyCurve (Curve *c, Curve *cc){ + int i,j; + cc->Typ = c->Typ; + //We should not copy the meshing method : if the meshes are to + //be copied, the meshing algorithm will take care of it + //(e.g. ExtrudeMesh()). + //cc->Method = c->Method; + for(i=0;i<4;i++)cc->ipar[i] = c->ipar[i]; + for(i=0;i<4;i++)cc->dpar[i] = c->dpar[i]; + cc->l = c->l; + for(i=0;i<4;i++)for(j=0;j<4;j++)cc->mat[i][j] = c->mat[i][j]; + cc->beg = c->beg; + cc->end = c->end; + cc->ubeg = c->ubeg; + cc->uend = c->uend; + cc->Control_Points = List_Create(List_Nbr(c->Control_Points),1,sizeof(Vertex*)); + List_Copy(c->Control_Points,cc->Control_Points); + End_Curve(cc); + Tree_Insert(THEM->Curves,&cc); } -static double projectPC (double u){ - //x[1] = u x[2] = v - if(u<CURVE->ubeg)u = CURVE->ubeg; - if(u<CURVE->ubeg)u = CURVE->ubeg; - Vertex c; - c = InterpolateCurve(CURVE,u,0); - return sqrt( DSQR(c.Pos.X -VERTEX->Pos.X)+ - DSQR(c.Pos.Y -VERTEX->Pos.Y)+ - DSQR(c.Pos.Z -VERTEX->Pos.Z)); +Curve *DuplicateCurve (Curve *c){ + Curve *pc; + Vertex *v,*newv; + pc = Create_Curve(NEWLINE(),0,1,NULL,NULL,-1,-1,0.,1.); + CopyCurve(c,pc); + for(int i=0;i<List_Nbr(c->Control_Points);i++){ + List_Read(pc->Control_Points,i,&v); + newv = DuplicateVertex(v); + List_Write(pc->Control_Points,i,&newv); + } + pc->beg = DuplicateVertex(c->beg); + pc->end = DuplicateVertex(c->end); + CreateReversedCurve (THEM,pc); + + return pc; } -static int UFIXED=0; -static double FIX; -static double projectPCS (double u){ - //x[1] = u x[2] = v - double tmin,tmax; - if(UFIXED){ - tmin = SURFACE->kv[0]; - tmax = SURFACE->kv[SURFACE->Nv+SURFACE->OrderV]; - } - else{ - tmin = SURFACE->ku[0]; - tmax = SURFACE->ku[SURFACE->Nu+SURFACE->OrderU]; +void CopySurface (Surface *s, Surface *ss){ + int i,j; + ss->Typ = s->Typ; + ss->Mat = s->Mat; + //We should not copy the meshing method: if the meshes are to + //be copied, the meshing algorithm will take care of it + //(e.g. ExtrudeMesh()). + //ss->Method = s->Method; + ss->Recombine = s->Recombine; + ss->RecombineAngle = s->RecombineAngle; + for(i=0;i<4;i++)ss->ipar[i] = s->ipar[i]; + ss->Nu = s->Nu; + ss->Nv = s->Nv; + ss->a = s->a;ss->b = s->b;ss->c = s->c; ss->d = s->d; + for(i=0;i<3;i++)for(j=0;j<3;j++)ss->plan[i][j] = s->plan[i][j]; + for(i=0;i<3;i++)for(j=0;j<3;j++)ss->invplan[i][j] = s->invplan[i][j]; + ss->Generatrices = List_Create(List_Nbr(s->Generatrices),1,sizeof(Curve*)); + List_Copy(s->Generatrices,ss->Generatrices); + if( s->Control_Points ){ + ss->Control_Points = List_Create(List_Nbr(s->Control_Points),1,sizeof(Vertex*)); + List_Copy(s->Control_Points,ss->Control_Points); } - - if(u<tmin)u = tmin; - if(u>tmax)u = tmax; - Vertex c; - if(UFIXED) - c = InterpolateSurface(SURFACE,FIX,u,0,0); - else - c = InterpolateSurface(SURFACE,u,FIX,0,0); - return sqrt(DSQR(c.Pos.X -VERTEX->Pos.X)+ - DSQR(c.Pos.Y -VERTEX->Pos.Y)+ - DSQR(c.Pos.Z -VERTEX->Pos.Z)); + End_Surface(ss); + Tree_Insert(THEM->Surfaces,&ss); } -bool ProjectPointOnCurve (Curve *c, Vertex *v, Vertex *RES, Vertex *DER){ - double xmin; - CURVE = c; - VERTEX = v; - min1d (0, projectPC, &xmin); - *RES = InterpolateCurve(CURVE,xmin,0); - *DER = InterpolateCurve(CURVE,xmin,1); - if(xmin > c->uend){ - *RES = InterpolateCurve(CURVE,c->uend,0); - *DER = InterpolateCurve(CURVE,c->uend,1); +Surface *DuplicateSurface (Surface *s){ + Surface *ps; + Curve *c,*newc; + Vertex *v,*newv; + int i; + + ps = Create_Surface(NEWSURFACE(),0,0); + CopySurface(s,ps); + for(i=0;i<List_Nbr(ps->Generatrices);i++){ + List_Read(ps->Generatrices,i,&c); + newc = DuplicateCurve(c); + List_Write(ps->Generatrices,i,&newc); } - else if(xmin < c->ubeg){ - *RES = InterpolateCurve(CURVE,c->ubeg,0); - *DER = InterpolateCurve(CURVE,c->ubeg,1); + + for(i=0;i<List_Nbr(ps->Control_Points);i++){ + List_Read(ps->Control_Points,i,&v); + newv = DuplicateVertex(v); + List_Write(ps->Control_Points,i,&newv); } - return true; + + return ps; } -bool search_in_boundary ( Surface *s, Vertex *p, double t, int Fixu, - double *uu, double *vv){ - double l,umin,vmin,lmin = 1.e24; - int i,N; - Vertex vr; - double tmin, tmax,u,v; +void CopyShape(int Type, int Num, int *New){ + Surface *s,*news; + Curve *c, *newc; + Vertex *v,*newv; - if(Fixu){ - tmin = s->kv[0]; - tmax = s->kv[s->Nv+s->OrderV]; - N = 3*s->Nu; - } - else{ - tmin = s->ku[0]; - tmax = s->ku[s->Nu+s->OrderU]; - N = 3*s->Nv; - } - for(i=0;i<N;i++){ - if(Fixu){ - u = t; - v = tmin + (tmax-tmin)*(double)(i)/(double)(N-1); + switch(Type){ + case MSH_POINT: + if(!(v = FindPoint(Num,THEM))){ + Msg(GERROR, "Unknown Vertex %d", Num); + return; } - else { - v = t; - u = tmin + (tmax-tmin)*(double)(i)/(double)(N-1); + newv = DuplicateVertex(v); + *New = newv->Num; + break; + case MSH_SEGM_LINE: + case MSH_SEGM_SPLN: + case MSH_SEGM_BSPLN: + case MSH_SEGM_BEZIER: + case MSH_SEGM_CIRC: + case MSH_SEGM_ELLI: + case MSH_SEGM_NURBS: + if(!(c = FindCurve(Num,THEM))){ + Msg(GERROR, "Unknown Curve %d", Num); + return; } - vr = InterpolateSurface(SURFACE,u,v,0,0); - l = sqrt(DSQR(vr.Pos.X - p->Pos.X) + - DSQR(vr.Pos.Y - p->Pos.Y) + - DSQR(vr.Pos.Z - p->Pos.Z)); - if(l<lmin){ - lmin = l; - umin = u; - vmin = v; + newc = DuplicateCurve(c); + *New = newc->Num; + break; + case MSH_SURF_NURBS: + case MSH_SURF_TRIC: + case MSH_SURF_REGL: + case MSH_SURF_PLAN: + if(!(s = FindSurface(Num,THEM))){ + Msg(GERROR, "Unknown Surface %d", Num); + return; } + news = DuplicateSurface(s); + *New = news->Num; + break; + default: + Msg(GERROR, "Impossible to copy entity %d (of type %d)", Num, Type); + break; } +} - FIX = t; - UFIXED = Fixu; - double xm; - if(Fixu)xm = vmin; - else xm = umin; - if(lmin > 1.e-3) min1d (0, projectPCS, &xm); - if(Fixu){ - *uu = t; - *vv = xm; - } - else{ - *vv = t; - *uu = xm; +void DeletePoint(int ip){ + Vertex *v = FindPoint(ip,THEM); + if(!v) return; + List_T *Curves = Tree2List(THEM->Curves); + for(int i=0;i<List_Nbr(Curves);i++){ + Curve *c; + List_Read(Curves,i,&c); + for(int j=0;j<List_Nbr(c->Control_Points);j++){ + if(!compareVertex(List_Pointer(c->Control_Points,j),&v))return; + } } - vr = InterpolateSurface(SURFACE,*uu,*vv,0,0); - l = sqrt(DSQR(vr.Pos.X - p->Pos.X) + - DSQR(vr.Pos.Y - p->Pos.Y) + - DSQR(vr.Pos.Z - p->Pos.Z)); - if(l<1.e-3)return true; - return false; + List_Delete(Curves); + if(v->Num == THEM->MaxPointNum) THEM->MaxPointNum--; + Tree_Suppress(THEM->Points,&v); } -bool try_a_value(Surface *s, Vertex *p, double u, double v,double *uu, double *vv){ - Vertex vr = InterpolateSurface(s,u,v,0,0); - double l = sqrt(DSQR(vr.Pos.X - p->Pos.X) + - DSQR(vr.Pos.Y - p->Pos.Y) + - DSQR(vr.Pos.Z - p->Pos.Z)); - *uu = u;*vv=v; - if(l<1.e-3)return true; - return false; +void DeleteCurve(int ip){ + Curve *c = FindCurve(ip,THEM); + if(!c) return; + List_T *Surfs = Tree2List(THEM->Surfaces); + for(int i=0;i<List_Nbr(Surfs);i++){ + Surface *s; + List_Read(Surfs,i,&s); + for(int j=0;j<List_Nbr(s->Generatrices);j++){ + if(!compareCurve(List_Pointer(s->Generatrices,j),&c))return; + } + } + List_Delete(Surfs); + if(c->Num == THEM->MaxLineNum) THEM->MaxLineNum--; + Tree_Suppress(THEM->Curves,&c); } -bool ProjectPointOnSurface (Surface *s, Vertex &p){ - float x[3] = {0.5,0.5,0.5}; - Vertex vv; - int check; - SURFACE = s; - VERTEX = &p; - double UMIN = 0.; - double UMAX = 1.; - double VMIN = 0.; - double VMAX = 1.; - while(1){ - newt(x,2,&check,projectPS); - vv = InterpolateSurface(s,x[1],x[2],0,0); - if(x[1] >= UMIN && x[1] <= UMAX && x[2] >=VMIN && x[2] <= VMAX)break; - x[1] = UMIN + (UMAX-UMIN)*((rand() % 10000)/10000.); - x[2] = VMIN + (VMAX-VMIN)*((rand() % 10000)/10000.); - } - p.Pos.X = vv.Pos.X; - p.Pos.Y = vv.Pos.Y; - p.Pos.Z = vv.Pos.Z; - if(!check){ - return false; +void DeleteSurface(int is){ + // Il faut absolument coder une + // structure coherente pour les volumes. + Surface *s = FindSurface(is,THEM); + if(!s) return; + List_T *Vols = Tree2List(THEM->Volumes); + for(int i=0;i<List_Nbr(Vols);i++){ + Volume *v; + List_Read(Vols,i,&v); + for(int j=0;j<List_Nbr(v->Surfaces);j++){ + if(!compareCurve(List_Pointer(v->Surfaces,j),&s))return; + } } - return true; + List_Delete(Vols); + if(s->Num == THEM->MaxSurfaceNum) THEM->MaxSurfaceNum--; + Tree_Suppress(THEM->Surfaces,&s); } -bool ProjectPointOnSurface (Surface *s, Vertex *p,double *u, double *v){ - static float x[3]; - int check; - static int deb = 1; - double VMIN,VMAX,UMIN,UMAX,l, lmin; - Vertex vv; +void DeleteShape(int Type, int Num){ - SURFACE = s; - VERTEX = p; - lmin = 1.e24; - UMAX = s->ku[s->Nu + s->OrderU]; - UMIN = s->ku[0]; - VMAX = s->kv[s->Nv + s->OrderV]; - VMIN = s->kv[0]; - if(deb){ - x[1] = UMIN + (UMAX-UMIN)*((rand() % 10000)/10000.); - x[2] = VMIN + (VMAX-VMIN)*((rand() % 10000)/10000.); - deb = 0; + switch(Type){ + case MSH_POINT: + DeletePoint(Num); + break; + case MSH_SEGM_LINE: + case MSH_SEGM_SPLN: + case MSH_SEGM_BSPLN: + case MSH_SEGM_BEZIER: + case MSH_SEGM_CIRC: + case MSH_SEGM_ELLI: + case MSH_SEGM_NURBS: + DeleteCurve(Num); + break; + case MSH_SURF_NURBS: + case MSH_SURF_TRIC: + case MSH_SURF_REGL: + case MSH_SURF_PLAN: + DeleteSurface(Num); + break; + default: + Msg(GERROR, "Impossible to delete entity %d (of type %d)", Num, Type); + break; } +} - if(p->Num == 160){ - lmin += 1.e90; - if(p->Num == 133)UMAX = s->ku[s->Nu + s->OrderU]; +Curve * CreateReversedCurve (Mesh *M,Curve *c){ + Curve *newc; + Vertex *e1,*e2,*e3,*e4; + int i; + newc = Create_Curve(-c->Num, c->Typ,1,NULL,NULL,-1,-1,0.,1.); + newc->Control_Points = List_Create(List_Nbr(c->Control_Points), 1, sizeof(Vertex*)); + if (c->Typ == MSH_SEGM_ELLI || c->Typ == MSH_SEGM_ELLI_INV){ + List_Read(c->Control_Points,0,&e1); + List_Read(c->Control_Points,1,&e2); + List_Read(c->Control_Points,2,&e3); + List_Read(c->Control_Points,3,&e4); + List_Add(newc->Control_Points,&e4); + List_Add(newc->Control_Points,&e2); + List_Add(newc->Control_Points,&e3); + List_Add(newc->Control_Points,&e1); } + else + List_Invert(c->Control_Points, newc->Control_Points); - if(try_a_value(SURFACE,VERTEX,SURFACE->ku[0]+VERTEX->u, - SURFACE->kv[0],u,v)) - return true; - if(try_a_value(SURFACE,VERTEX,SURFACE->ku[0]+VERTEX->u, - SURFACE->kv[SURFACE->Nv+SURFACE->OrderV],u,v)) - return true; - if(try_a_value(SURFACE,VERTEX,SURFACE->ku[SURFACE->Nu+SURFACE->OrderU]-VERTEX->u, - SURFACE->kv[0],u,v)) - return true; - if(try_a_value(SURFACE,VERTEX,SURFACE->ku[SURFACE->Nu+SURFACE->OrderU]-VERTEX->u, - SURFACE->kv[SURFACE->Nv+SURFACE->OrderV],u,v)) - return true; - if(try_a_value(SURFACE,VERTEX,SURFACE->ku[0],SURFACE->kv[0]+VERTEX->u,u,v)) - return true; - if(try_a_value(SURFACE,VERTEX,SURFACE->ku[0], - SURFACE->kv[SURFACE->Nv+SURFACE->OrderV]-VERTEX->u,u,v)) - return true; - if(try_a_value(SURFACE,VERTEX,SURFACE->ku[SURFACE->Nu+SURFACE->OrderU], - SURFACE->kv[0]+VERTEX->u,u,v)) - return true; - if(try_a_value(SURFACE,VERTEX,SURFACE->ku[SURFACE->Nu+SURFACE->OrderU], - SURFACE->kv[SURFACE->Nv+SURFACE->OrderV]-VERTEX->u,u,v)) - return true; - + if (c->Typ == MSH_SEGM_NURBS && c->k){ + newc->k = (float*)malloc((c->degre + List_Nbr(c->Control_Points)+1)*sizeof(float)); + for(i=0;i<c->degre + List_Nbr(c->Control_Points)+1;i++) + newc->k[c->degre + List_Nbr(c->Control_Points)-i] = c->k[i]; + } - if(search_in_boundary(SURFACE,VERTEX,SURFACE->kv[0],0,u,v)) - return true; - if(search_in_boundary(SURFACE,VERTEX,SURFACE->kv[SURFACE->Nv+SURFACE->OrderV],0,u,v)) - return true; - if(search_in_boundary(SURFACE,VERTEX,SURFACE->ku[0],1,u,v)) - return true; - if(search_in_boundary(SURFACE,VERTEX,SURFACE->ku[SURFACE->Nu+SURFACE->OrderU],1,u,v)) - return true; + if (c->Typ == MSH_SEGM_CIRC) newc->Typ = MSH_SEGM_CIRC_INV; + if (c->Typ == MSH_SEGM_CIRC_INV) newc->Typ = MSH_SEGM_CIRC; + if (c->Typ == MSH_SEGM_ELLI) newc->Typ = MSH_SEGM_ELLI_INV; + if (c->Typ == MSH_SEGM_ELLI_INV) newc->Typ = MSH_SEGM_ELLI; + newc->Vertices = List_Create(10 ,1 ,sizeof(Vertex*)); + newc->Method = c->Method; + newc->degre = c->degre; + newc->beg = c->end; + newc->end = c->beg; + newc->ubeg = 1. - c->uend; + newc->uend = 1. - c->ubeg; + End_Curve(newc); - while(1){ - newt(x,2,&check,projectPS); - vv = InterpolateSurface(s,x[1],x[2],0,0); - l = sqrt(DSQR(vv.Pos.X - p->Pos.X) + - DSQR(vv.Pos.Y - p->Pos.Y) + - DSQR(vv.Pos.Z - p->Pos.Z)); - if(l < 1.e-1)break; - else { - x[1] = UMIN + (UMAX-UMIN)*((rand() % 10000)/10000.); - x[2] = VMIN + (VMAX-VMIN)*((rand() % 10000)/10000.); + Curve **pc; + + if((pc = (Curve**)Tree_PQuery(M->Curves,&newc))) + { + Free_Curve(&newc,0); + return *pc; } - } - *u = x[1]; - *v = x[2]; - - if(!check){ - return false; - } - return true; + else Tree_Insert(M->Curves, &newc); + return newc; } -bool IntersectCurveSurface (Curve *c, Surface *s){ - float x[4]; - int check; - SURFACE = s; - CURVE = c; - newt(x,3,&check,intersectCS); - if(!check)return false; - return true; -} -void CopyVertex (Vertex *v, Vertex *vv){ - vv->lc = v->lc; - vv->u = v->u; - vv->Pos.X = v->Pos.X; - vv->Pos.Y = v->Pos.Y; - vv->Pos.Z = v->Pos.Z; - vv->Freeze.X = v->Freeze.X; - vv->Freeze.Y = v->Freeze.Y; - vv->Freeze.Z = v->Freeze.Z; -} -Vertex *DuplicateVertex (Vertex *v){ - Vertex *pv; - pv = Create_Vertex(NEWPOINT(),0,0,0,0,0); - CopyVertex (v,pv); - Tree_Insert(THEM->Points,&pv); - return pv; +void ModifyLcPoint(int ip, double lc){ + Vertex *v = FindPoint(ip,THEM); + if(v) v->lc = lc; } -void CopyCurve (Curve *c, Curve *cc){ - int i,j; - cc->Typ = c->Typ; - //We should not copy the meshing method : if the meshes are to - //be copied, the meshing algorithm will take care of it - //(e.g. ExtrudeMesh()). - //cc->Method = c->Method; - for(i=0;i<4;i++)cc->ipar[i] = c->ipar[i]; - for(i=0;i<4;i++)cc->dpar[i] = c->dpar[i]; - cc->l = c->l; - for(i=0;i<4;i++)for(j=0;j<4;j++)cc->mat[i][j] = c->mat[i][j]; - cc->beg = c->beg; - cc->end = c->end; - cc->ubeg = c->ubeg; - cc->uend = c->uend; - cc->Control_Points = List_Create(List_Nbr(c->Control_Points),1,sizeof(Vertex*)); - List_Copy(c->Control_Points,cc->Control_Points); - End_Curve(cc); - Tree_Insert(THEM->Curves,&cc); -} -Curve *DuplicateCurve (Curve *c){ +int recognize_seg(int typ, List_T * liste, int *seg){ + int i,beg,end; Curve *pc; - Vertex *v,*newv; - pc = Create_Curve(NEWLINE(),0,1,NULL,NULL,-1,-1,0.,1.); - CopyCurve(c,pc); - for(int i=0;i<List_Nbr(c->Control_Points);i++){ - List_Read(pc->Control_Points,i,&v); - newv = DuplicateVertex(v); - List_Write(pc->Control_Points,i,&newv); - } - pc->beg = DuplicateVertex(c->beg); - pc->end = DuplicateVertex(c->end); - CreateReversedCurve (THEM,pc); - - return pc; -} -void CopySurface (Surface *s, Surface *ss){ - int i,j; - ss->Typ = s->Typ; - ss->Mat = s->Mat; - //We should not copy the meshing method: if the meshes are to - //be copied, the meshing algorithm will take care of it - //(e.g. ExtrudeMesh()). - //ss->Method = s->Method; - ss->Recombine = s->Recombine; - ss->RecombineAngle = s->RecombineAngle; - for(i=0;i<4;i++)ss->ipar[i] = s->ipar[i]; - ss->Nu = s->Nu; - ss->Nv = s->Nv; - ss->a = s->a;ss->b = s->b;ss->c = s->c; ss->d = s->d; - for(i=0;i<3;i++)for(j=0;j<3;j++)ss->plan[i][j] = s->plan[i][j]; - for(i=0;i<3;i++)for(j=0;j<3;j++)ss->invplan[i][j] = s->invplan[i][j]; - ss->Generatrices = List_Create(List_Nbr(s->Generatrices),1,sizeof(Curve*)); - List_Copy(s->Generatrices,ss->Generatrices); - if( s->Control_Points ){ - ss->Control_Points = List_Create(List_Nbr(s->Control_Points),1,sizeof(Vertex*)); - List_Copy(s->Control_Points,ss->Control_Points); + List_T *temp = Tree2List(THEM->Curves); + List_Read(liste,0,&beg); + List_Read(liste,List_Nbr(liste)-1,&end); + for(i=0;i<List_Nbr(temp);i++){ + List_Read(temp,i,&pc); + if(pc->Typ == typ && + pc->beg->Num == beg && + pc->end->Num == end){ + List_Delete(temp); + *seg = pc->Num; + return 1; + } } - End_Surface(ss); - Tree_Insert(THEM->Surfaces,&ss); + List_Delete(temp); + return 0; } -Surface *DuplicateSurface (Surface *s){ - Surface *ps; - Curve *c,*newc; - Vertex *v,*newv; - int i; - ps = Create_Surface(NEWSURFACE(),0,0); - CopySurface(s,ps); - for(i=0;i<List_Nbr(ps->Generatrices);i++){ - List_Read(ps->Generatrices,i,&c); - newc = DuplicateCurve(c); - List_Write(ps->Generatrices,i,&newc); - } - - for(i=0;i<List_Nbr(ps->Control_Points);i++){ - List_Read(ps->Control_Points,i,&v); - newv = DuplicateVertex(v); - List_Write(ps->Control_Points,i,&newv); - } - return ps; -} +int recognize_loop(List_T * liste, int *loop){ + int i,res; + EdgeLoop *pe; -static void vecmat4x4(double mat[4][4],double vec[4], double res[4]){ - int i,j; - for(i=0;i<4;i++){ - res[i] = 0.0; - for(j=0;j<4;j++){ - res[i] += mat[i][j] * vec[j]; + res = 0; + *loop = 0; + List_T *temp = Tree2List(THEM->EdgeLoops); + for(i=0;i<List_Nbr(temp);i++){ + List_Read(temp,i,&pe); + if(!compare2Lists(pe->Curves,liste,fcmp_absint)){ + res = 1; + *loop = pe->Num; + break; } } + List_Delete(temp); + return res; } -void ApplyTransformationToPoint(double matrix[4][4], Vertex *v){ - double pos[4],vec[4]; +int recognize_surfloop(List_T * liste, int *loop){ + int i,res; + EdgeLoop *pe; - if(!ListOfTransformedPoints) - ListOfTransformedPoints = List_Create(50,50,sizeof(int)); - - if(!List_Search(ListOfTransformedPoints,&v->Num,fcmp_absint)){ - List_Add(ListOfTransformedPoints,&v->Num); + res = 0; + *loop = 0; + List_T *temp = Tree2List(THEM->SurfaceLoops); + for(i=0;i<List_Nbr(temp);i++){ + List_Read(temp,i,&pe); + if(!compare2Lists(pe->Curves,liste,fcmp_absint)){ + res = 1; + *loop = pe->Num; + break; + } } - else - return; - - vec[0] = v->Pos.X; - vec[1] = v->Pos.Y; - vec[2] = v->Pos.Z; - vec[3] = v->w; - vecmat4x4(matrix,vec,pos); - v->Pos.X = pos[0]; - v->Pos.Y = pos[1]; - v->Pos.Z = pos[2]; - v->w = pos[3]; + List_Delete(temp); + return res; } -/* Linear Applications */ +///////////////////////////////////////////////////////////////////////////////////// +// LINEAR APPLICATIONS void SetTranslationMatrix (double matrix[4][4],double T[3]){ int i, j; @@ -681,7 +598,7 @@ void SetDilatationMatrix (double matrix[4][4],double T[3],double A){ matrix[3][3] = 1.0; } -void GramSchmidt (double v1[3], double v2[3], double v3[3]){ +static void GramSchmidt (double v1[3], double v2[3], double v3[3]){ double tmp[3]; norme(v1); prodve(v3,v1,tmp); @@ -739,6 +656,39 @@ void SetRotationMatrix( double matrix[4][4],double Axe[3], double alpha){ matrix[3][3] = 1.0; } +static void vecmat4x4(double mat[4][4],double vec[4], double res[4]){ + int i,j; + for(i=0;i<4;i++){ + res[i] = 0.0; + for(j=0;j<4;j++){ + res[i] += mat[i][j] * vec[j]; + } + } +} + +void ApplyTransformationToPoint(double matrix[4][4], Vertex *v){ + double pos[4],vec[4]; + + if(!ListOfTransformedPoints) + ListOfTransformedPoints = List_Create(50,50,sizeof(int)); + + if(!List_Search(ListOfTransformedPoints,&v->Num,fcmp_absint)){ + List_Add(ListOfTransformedPoints,&v->Num); + } + else + return; + + vec[0] = v->Pos.X; + vec[1] = v->Pos.Y; + vec[2] = v->Pos.Z; + vec[3] = v->w; + vecmat4x4(matrix,vec,pos); + v->Pos.X = pos[0]; + v->Pos.Y = pos[1]; + v->Pos.Z = pos[2]; + v->w = pos[3]; +} + void ApplyTransformationToCurve (double matrix[4][4],Curve *c){ Vertex *v; @@ -789,40 +739,144 @@ void printSurface(Surface*s){ } } -void ProtudeXYZ (double &x, double &y, double &z, ExtrudeParams *e){ - double matrix[4][4]; - double T[3]; - Vertex v(x,y,z); - - T[0] = -e->geo.pt[0]; - T[1] = -e->geo.pt[1]; - T[2] = -e->geo.pt[2]; - SetTranslationMatrix(matrix,T); +void ApplicationOnShapes(double matrix[4][4], List_T *ListShapes){ + int i; + Shape O; + Vertex *v; + Curve *c; + Surface *s; + List_Reset(ListOfTransformedPoints); - ApplyTransformationToPoint(matrix,&v); - SetRotationMatrix(matrix,e->geo.axe,e->geo.angle); + for(i=0;i<List_Nbr(ListShapes);i++){ + List_Read(ListShapes,i,&O); + switch(O.Type){ + case MSH_POINT: + v = FindPoint(O.Num,THEM); + if(v) ApplyTransformationToPoint(matrix, v); + else Msg(GERROR, "Unknown Point %d", O.Num); + break; + case MSH_SEGM_LINE: + case MSH_SEGM_SPLN: + case MSH_SEGM_BSPLN: + case MSH_SEGM_BEZIER: + case MSH_SEGM_CIRC: + case MSH_SEGM_ELLI: + case MSH_SEGM_NURBS: + c = FindCurve(O.Num,THEM); + if(c) ApplyTransformationToCurve(matrix, c); + else Msg(GERROR, "Unknown Curve %d", O.Num); + break; + case MSH_SURF_NURBS : + case MSH_SURF_REGL : + case MSH_SURF_TRIC : + case MSH_SURF_PLAN : + s = FindSurface(O.Num,THEM); + if(s) ApplyTransformationToSurface(matrix, s); + else Msg(GERROR, "Unknown Surface %d", O.Num); + break; + default: + Msg(GERROR, "Impossible to transform entity %d (of type %d)", O.Num, O.Type); + break; + } + } + List_Reset(ListOfTransformedPoints); - ApplyTransformationToPoint(matrix,&v); +} - T[0] = -T[0]; T[1] = -T[1]; T[2] = -T[2]; +void TranslateShapes(double X,double Y,double Z, + List_T *ListShapes, int isFinal){ + double T[3],matrix[4][4]; + + T[0] = X; T[1] = Y; T[2] = Z; SetTranslationMatrix(matrix,T); - List_Reset(ListOfTransformedPoints); - ApplyTransformationToPoint(matrix,&v); + ApplicationOnShapes(matrix,ListShapes); - x = v.Pos.X; - y = v.Pos.Y; - z = v.Pos.Z; + if(CTX.geom.auto_coherence && isFinal) ReplaceAllDuplicates(THEM); +} - List_Reset(ListOfTransformedPoints); +void DilatShapes(double X,double Y,double Z, double A, + List_T *ListShapes, int isFinal){ + double T[3],matrix[4][4]; + + T[0] = X; T[1] = Y; T[2] = Z; + SetDilatationMatrix(matrix,T,A); + ApplicationOnShapes(matrix,ListShapes); + + if(CTX.geom.auto_coherence) ReplaceAllDuplicates(THEM); } -void Extrude_ProtudePoint(int type, int ip, - double T0, double T1, double T2, - double A0, double A1, double A2, - double X0, double X1, double X2, double alpha, - Curve **pc, Curve **prc, - ExtrudeParams *e){ + +void RotateShapes (double Ax,double Ay,double Az, + double Px,double Py, double Pz, + double alpha, List_T *ListShapes){ + double A[3], T[3], matrix[4][4]; + + T[0] = -Px; T[1] = -Py; T[2] = -Pz; + SetTranslationMatrix(matrix,T); + ApplicationOnShapes(matrix,ListShapes); + + A[0] = Ax; A[1] = Ay; A[2] = Az; + SetRotationMatrix(matrix,A,alpha); + ApplicationOnShapes(matrix,ListShapes); + + T[0] = Px; T[1] = Py; T[2] = Pz; + SetTranslationMatrix(matrix,T); + ApplicationOnShapes(matrix,ListShapes); + + if(CTX.geom.auto_coherence) ReplaceAllDuplicates(THEM); +} + +void SymmetryShapes (double A,double B,double C, + double D, List_T *ListShapes, int x){ + double matrix[4][4]; + + SetSymmetryMatrix(matrix,A,B,C,D); + ApplicationOnShapes(matrix,ListShapes); + + if(CTX.geom.auto_coherence) ReplaceAllDuplicates(THEM); +} + + + +///////////////////////////////////////////////////////////////////////////////////// +// EXTRUSION + +void ProtudeXYZ (double &x, double &y, double &z, ExtrudeParams *e){ + double matrix[4][4]; + double T[3]; + Vertex v(x,y,z); + + T[0] = -e->geo.pt[0]; + T[1] = -e->geo.pt[1]; + T[2] = -e->geo.pt[2]; + SetTranslationMatrix(matrix,T); + List_Reset(ListOfTransformedPoints); + ApplyTransformationToPoint(matrix,&v); + + SetRotationMatrix(matrix,e->geo.axe,e->geo.angle); + List_Reset(ListOfTransformedPoints); + ApplyTransformationToPoint(matrix,&v); + + T[0] = -T[0]; T[1] = -T[1]; T[2] = -T[2]; + SetTranslationMatrix(matrix,T); + List_Reset(ListOfTransformedPoints); + ApplyTransformationToPoint(matrix,&v); + + x = v.Pos.X; + y = v.Pos.Y; + z = v.Pos.Z; + + List_Reset(ListOfTransformedPoints); +} + + +void Extrude_ProtudePoint(int type, int ip, + double T0, double T1, double T2, + double A0, double A1, double A2, + double X0, double X1, double X2, double alpha, + Curve **pc, Curve **prc, + ExtrudeParams *e){ double xnew,ynew,znew,matrix[4][4],T[3],Ax[3],d; Vertex V,*pv,*newp,*chapeau; Curve *c; @@ -1187,94 +1241,8 @@ void Extrude_ProtudeSurface(int type, int is, List_Reset(ListOfTransformedPoints); } -void DivideCurve (Curve *c , double u, Vertex *v, Curve **c1, Curve **c2){ - (*c1) = Create_Curve(NEWLINE(),c->Typ,1,NULL,NULL,-1,-1,0.,1.); - (*c2) = Create_Curve(NEWLINE(),c->Typ,1,NULL,NULL,-1,-1,0.,1.); - CopyCurve(c,*c1); - CopyCurve(c,*c2); - (*c1)->uend = u; - (*c2)->ubeg = u; - (*c1)->end = v; - (*c2)->beg = v; -} - -bool IntersectCurves (Curve *c1, Curve *c2, - Curve **c11, Curve **c12, - Curve **c21, Curve **c22, Vertex **v){ - float x[3]; - Vertex v1,v2; - int check; - - if(!compareVertex(&c1->beg,&c2->beg))return false; - if(!compareVertex(&c1->end,&c2->end))return false; - if(!compareVertex(&c1->beg,&c2->end))return false; - if(!compareVertex(&c2->beg,&c1->end))return false; - - CURVE_2 = c2; - CURVE = c1; - x[1] = x[2] = 0.0; - newt(x,2,&check,intersectCC); - if(check)return false; - v1 = InterpolateCurve(c1,x[1],0); - v2 = InterpolateCurve(c2,x[2],0); - if(x[1] <= c1->ubeg)return false; - if(x[1] >= c1->uend)return false; - if(x[2] <= c2->ubeg)return false; - if(x[2] >= c2->uend)return false; - if(fabs(v1.Pos.Z - v2.Pos.Z) > 1.e-06 * CTX.lc)return false; - *v = Create_Vertex(NEWPOINT(), v1.Pos.X,v1.Pos.Y,v1.Pos.Z,v1.lc,x[1]); - Tree_Insert(THEM->Points,v); - DivideCurve(c1,x[1],*v,c11,c12); - DivideCurve(c2,x[2],*v,c21,c22); - return true; -} - -bool IntersectAllSegmentsTogether (void) { - bool intersectionfound = true; - List_T *TempList; - Curve *c1,*c2,*c11,*c12,*c21,*c22; - Vertex *v; - int i,j; - - while(intersectionfound){ - TempList = Tree2List(THEM->Curves); - if(!List_Nbr(TempList))return true; - for(i=0;i<List_Nbr(TempList);i++){ - List_Read(TempList,i,&c1); - intersectionfound = false; - for(j=0;j<List_Nbr(TempList);j++){ - List_Read(TempList,j,&c2); - if(c1->Num > 0 && c2->Num >0 && i!=j && intersectionfound == false){ - if(IntersectCurves(c1,c2,&c11,&c12,&c21,&c22,&v)){ - Msg(INFO, "Intersection Curve %d->%d",c1->Num,c2->Num); - intersectionfound = true; - DeleteCurve(c1->Num); - DeleteCurve(c2->Num); - Tree_Add(THEM->Curves,&c11); - Tree_Add(THEM->Curves,&c12); - Tree_Add(THEM->Curves,&c21); - Tree_Add(THEM->Curves,&c22); - - CreateReversedCurve(THEM,c11); - CreateReversedCurve(THEM,c12); - CreateReversedCurve(THEM,c21); - CreateReversedCurve(THEM,c22); - return true; - } - } - } - if(intersectionfound) break; - } - List_Delete(TempList); - } - return false; - -} - -void IntersectSurfaces (Surface *s1, Surface *s2){ - - -} +///////////////////////////////////////////////////////////////////////////////////// +// REMOVE DUPLICATES int compareTwoCurves (const void *a, const void *b){ Curve *c1, *c2; @@ -1309,10 +1277,6 @@ int compareTwoSurfaces (const void *a, const void *b){ compareAbsCurve); } - -/* Fonction eliminant les doublons dans une - geometrie*/ - void MaxNumPoint(void *a, void *b){ Vertex *v = *(Vertex**)a; THEM->MaxPointNum = MAX(THEM->MaxPointNum,v->Num); @@ -1520,339 +1484,388 @@ void ReplaceAllDuplicates(Mesh *m){ } -void ModifyLcPoint(int ip, double lc){ - Vertex *v = FindPoint(ip,THEM); - if(v) v->lc = lc; -} +///////////////////////////////////////////////////////////////////////////////////// +// INTERSECTIONS -void ApplicationOnShapes(double matrix[4][4], List_T *ListShapes){ - int i; - Shape O; - Vertex *v; - Curve *c; - Surface *s; +/* + S = (sx(u,v),sy(u,v),sz(u,v)) + C = (cx(w),cy(w),cz(w)) + + sx - cx = 0 + sy - cy = 0 + sz - cz = 0 - List_Reset(ListOfTransformedPoints); + 3eqs 3incs +*/ - for(i=0;i<List_Nbr(ListShapes);i++){ - List_Read(ListShapes,i,&O); - switch(O.Type){ - case MSH_POINT: - v = FindPoint(O.Num,THEM); - if(v) ApplyTransformationToPoint(matrix, v); - break; - case MSH_SEGM_LINE: - case MSH_SEGM_SPLN: - case MSH_SEGM_BSPLN: - case MSH_SEGM_BEZIER: - case MSH_SEGM_CIRC: - case MSH_SEGM_ELLI: - case MSH_SEGM_NURBS: - c = FindCurve(O.Num,THEM); - if(c) ApplyTransformationToCurve(matrix, c); - break; - case MSH_SURF_NURBS : - case MSH_SURF_REGL : - case MSH_SURF_TRIC : - case MSH_SURF_PLAN : - s = FindSurface(O.Num,THEM); - if(s) ApplyTransformationToSurface(matrix, s); - break; - default: - Msg(GERROR, "Impossible to apply transformation on entity %d (of type %d)", - O.Num, O.Type); - break; - } - } +static Curve *CURVE, *CURVE_2; +static Surface *SURFACE; +static Vertex *VERTEX; +extern double min1d (int, double (*funct)(double), double *xmin); +extern void newt(float x[], int n, int *check, + void (*vecfunc)(int, float [], float [])); - List_Reset(ListOfTransformedPoints); +static void intersectCS (int N, float x[], float res[]){ + //x[1] = u x[2] = v x[3] = w + Vertex s,c; + s = InterpolateSurface(SURFACE,x[1],x[2],0,0); + c = InterpolateCurve (CURVE,x[3],0); + res[1] = s.Pos.X - c.Pos.X; + res[2] = s.Pos.Y - c.Pos.Y; + res[3] = s.Pos.Z - c.Pos.Z; } -void TranslateShapes(double X,double Y,double Z, - List_T *ListShapes, int isFinal){ - double T[3],matrix[4][4]; - - T[0] = X; T[1] = Y; T[2] = Z; - SetTranslationMatrix(matrix,T); - ApplicationOnShapes(matrix,ListShapes); - - if(CTX.geom.auto_coherence && isFinal) ReplaceAllDuplicates(THEM); +static void intersectCC (int N, float x[], float res[]){ + //x[1] = u x[2] = v + Vertex c2,c; + c2 = InterpolateCurve(CURVE_2,x[2],0); + c = InterpolateCurve (CURVE,x[1],0); + res[1] = c2.Pos.X - c.Pos.X; + res[2] = c2.Pos.Y - c.Pos.Y; } -void DilatShapes(double X,double Y,double Z, double A, - List_T *ListShapes, int isFinal){ - double T[3],matrix[4][4]; +static void projectPS (int N, float x[], float res[]){ + //x[1] = u x[2] = v + Vertex du,dv,c; + c = InterpolateSurface(SURFACE,x[1],x[2],0,0); + du = InterpolateSurface(SURFACE,x[1],x[2],1,1); + dv = InterpolateSurface(SURFACE,x[1],x[2],1,2); + res[1] = + (c.Pos.X - VERTEX->Pos.X)*du.Pos.X + + (c.Pos.Y - VERTEX->Pos.Y)*du.Pos.Y + + (c.Pos.Z - VERTEX->Pos.Z)*du.Pos.Z; + res[2] = + (c.Pos.X - VERTEX->Pos.X)*dv.Pos.X + + (c.Pos.Y - VERTEX->Pos.Y)*dv.Pos.Y + + (c.Pos.Z - VERTEX->Pos.Z)*dv.Pos.Z; +} - T[0] = X; T[1] = Y; T[2] = Z; - SetDilatationMatrix(matrix,T,A); - ApplicationOnShapes(matrix,ListShapes); - - if(CTX.geom.auto_coherence) ReplaceAllDuplicates(THEM); +static double projectPC (double u){ + //x[1] = u x[2] = v + if(u<CURVE->ubeg)u = CURVE->ubeg; + if(u<CURVE->ubeg)u = CURVE->ubeg; + Vertex c; + c = InterpolateCurve(CURVE,u,0); + return sqrt( DSQR(c.Pos.X -VERTEX->Pos.X)+ + DSQR(c.Pos.Y -VERTEX->Pos.Y)+ + DSQR(c.Pos.Z -VERTEX->Pos.Z)); } - -void RotateShapes (double Ax,double Ay,double Az, - double Px,double Py, double Pz, - double alpha, List_T *ListShapes){ - double A[3], T[3], matrix[4][4]; - - T[0] = -Px; T[1] = -Py; T[2] = -Pz; - SetTranslationMatrix(matrix,T); - ApplicationOnShapes(matrix,ListShapes); - - A[0] = Ax; A[1] = Ay; A[2] = Az; - SetRotationMatrix(matrix,A,alpha); - ApplicationOnShapes(matrix,ListShapes); - - T[0] = Px; T[1] = Py; T[2] = Pz; - SetTranslationMatrix(matrix,T); - ApplicationOnShapes(matrix,ListShapes); - - if(CTX.geom.auto_coherence) ReplaceAllDuplicates(THEM); +static int UFIXED=0; +static double FIX; +static double projectPCS (double u){ + //x[1] = u x[2] = v + double tmin,tmax; + if(UFIXED){ + tmin = SURFACE->kv[0]; + tmax = SURFACE->kv[SURFACE->Nv+SURFACE->OrderV]; + } + else{ + tmin = SURFACE->ku[0]; + tmax = SURFACE->ku[SURFACE->Nu+SURFACE->OrderU]; + } + + if(u<tmin)u = tmin; + if(u>tmax)u = tmax; + Vertex c; + if(UFIXED) + c = InterpolateSurface(SURFACE,FIX,u,0,0); + else + c = InterpolateSurface(SURFACE,u,FIX,0,0); + return sqrt(DSQR(c.Pos.X -VERTEX->Pos.X)+ + DSQR(c.Pos.Y -VERTEX->Pos.Y)+ + DSQR(c.Pos.Z -VERTEX->Pos.Z)); } -void SymmetryShapes (double A,double B,double C, - double D, List_T *ListShapes, int x){ - double matrix[4][4]; - - SetSymmetryMatrix(matrix,A,B,C,D); - ApplicationOnShapes(matrix,ListShapes); - - if(CTX.geom.auto_coherence) ReplaceAllDuplicates(THEM); +bool ProjectPointOnCurve (Curve *c, Vertex *v, Vertex *RES, Vertex *DER){ + double xmin; + CURVE = c; + VERTEX = v; + min1d (0, projectPC, &xmin); + *RES = InterpolateCurve(CURVE,xmin,0); + *DER = InterpolateCurve(CURVE,xmin,1); + if(xmin > c->uend){ + *RES = InterpolateCurve(CURVE,c->uend,0); + *DER = InterpolateCurve(CURVE,c->uend,1); + } + else if(xmin < c->ubeg){ + *RES = InterpolateCurve(CURVE,c->ubeg,0); + *DER = InterpolateCurve(CURVE,c->ubeg,1); + } + return true; } - -void CopyShape(int Type, int Num, int *New){ - Surface *s,*news; - Curve *c, *newc; - Vertex *v,*newv; +bool search_in_boundary ( Surface *s, Vertex *p, double t, int Fixu, + double *uu, double *vv){ + double l,umin,vmin,lmin = 1.e24; + int i,N; + Vertex vr; + double tmin, tmax,u,v; - switch(Type){ - case MSH_POINT: - if(!(v = FindPoint(Num,THEM))){ - Msg(GERROR, "Unknown Vertex %d", Num); - return; + if(Fixu){ + tmin = s->kv[0]; + tmax = s->kv[s->Nv+s->OrderV]; + N = 3*s->Nu; + } + else{ + tmin = s->ku[0]; + tmax = s->ku[s->Nu+s->OrderU]; + N = 3*s->Nv; + } + for(i=0;i<N;i++){ + if(Fixu){ + u = t; + v = tmin + (tmax-tmin)*(double)(i)/(double)(N-1); } - newv = DuplicateVertex(v); - *New = newv->Num; - break; - case MSH_SEGM_LINE: - case MSH_SEGM_SPLN: - case MSH_SEGM_BSPLN: - case MSH_SEGM_BEZIER: - case MSH_SEGM_CIRC: - case MSH_SEGM_ELLI: - case MSH_SEGM_NURBS: - if(!(c = FindCurve(Num,THEM))){ - Msg(GERROR, "Unknown Curve %d", Num); - return; + else { + v = t; + u = tmin + (tmax-tmin)*(double)(i)/(double)(N-1); } - newc = DuplicateCurve(c); - *New = newc->Num; - break; - case MSH_SURF_NURBS: - case MSH_SURF_TRIC: - case MSH_SURF_REGL: - case MSH_SURF_PLAN: - if(!(s = FindSurface(Num,THEM))){ - Msg(GERROR, "Unknown Surface %d", Num); - return; + vr = InterpolateSurface(SURFACE,u,v,0,0); + l = sqrt(DSQR(vr.Pos.X - p->Pos.X) + + DSQR(vr.Pos.Y - p->Pos.Y) + + DSQR(vr.Pos.Z - p->Pos.Z)); + if(l<lmin){ + lmin = l; + umin = u; + vmin = v; } - news = DuplicateSurface(s); - *New = news->Num; - break; - default: - Msg(GERROR, "Impossible to copy entity %d (of type %d)", Num, Type); - break; } -} -void DeletePoint(int ip){ - Vertex *v = FindPoint(ip,THEM); - if(!v) return; - List_T *Curves = Tree2List(THEM->Curves); - for(int i=0;i<List_Nbr(Curves);i++){ - Curve *c; - List_Read(Curves,i,&c); - for(int j=0;j<List_Nbr(c->Control_Points);j++){ - if(!compareVertex(List_Pointer(c->Control_Points,j),&v))return; - } + FIX = t; + UFIXED = Fixu; + double xm; + if(Fixu)xm = vmin; + else xm = umin; + if(lmin > 1.e-3) min1d (0, projectPCS, &xm); + if(Fixu){ + *uu = t; + *vv = xm; } - List_Delete(Curves); - if(v->Num == THEM->MaxPointNum) THEM->MaxPointNum--; - Tree_Suppress(THEM->Points,&v); -} - -void DeleteCurve(int ip){ - Curve *c = FindCurve(ip,THEM); - if(!c) return; - List_T *Surfs = Tree2List(THEM->Surfaces); - for(int i=0;i<List_Nbr(Surfs);i++){ - Surface *s; - List_Read(Surfs,i,&s); - for(int j=0;j<List_Nbr(s->Generatrices);j++){ - if(!compareCurve(List_Pointer(s->Generatrices,j),&c))return; - } + else{ + *vv = t; + *uu = xm; } - List_Delete(Surfs); - if(c->Num == THEM->MaxLineNum) THEM->MaxLineNum--; - Tree_Suppress(THEM->Curves,&c); + vr = InterpolateSurface(SURFACE,*uu,*vv,0,0); + l = sqrt(DSQR(vr.Pos.X - p->Pos.X) + + DSQR(vr.Pos.Y - p->Pos.Y) + + DSQR(vr.Pos.Z - p->Pos.Z)); + if(l<1.e-3)return true; + return false; } -void DeleteSurf( int is ){ - - // Il faut absolument coder une - // structure coherente pour les volumes. - Surface *s = FindSurface(is,THEM); - if(!s) return; - List_T *Vols = Tree2List(THEM->Volumes); - for(int i=0;i<List_Nbr(Vols);i++){ - Volume *v; - List_Read(Vols,i,&v); - for(int j=0;j<List_Nbr(v->Surfaces);j++){ - if(!compareCurve(List_Pointer(v->Surfaces,j),&s))return; - } - } - List_Delete(Vols); - if(s->Num == THEM->MaxSurfaceNum) THEM->MaxSurfaceNum--; - //s->Num = 1000000000; - Tree_Suppress(THEM->Surfaces,&s); +bool try_a_value(Surface *s, Vertex *p, double u, double v,double *uu, double *vv){ + Vertex vr = InterpolateSurface(s,u,v,0,0); + double l = sqrt(DSQR(vr.Pos.X - p->Pos.X) + + DSQR(vr.Pos.Y - p->Pos.Y) + + DSQR(vr.Pos.Z - p->Pos.Z)); + *uu = u;*vv=v; + if(l<1.e-3)return true; + return false; } -void DeleteShape(int Type, int Num){ - - switch(Type){ - case MSH_POINT: - DeletePoint(Num); - break; - case MSH_SEGM_LINE: - case MSH_SEGM_SPLN: - case MSH_SEGM_BSPLN: - case MSH_SEGM_BEZIER: - case MSH_SEGM_CIRC: - case MSH_SEGM_ELLI: - case MSH_SEGM_NURBS: - DeleteCurve(Num); - break; - case MSH_SURF_NURBS: - case MSH_SURF_TRIC: - case MSH_SURF_REGL: - case MSH_SURF_PLAN: - DeleteSurf(Num); - break; - default: - Msg(GERROR, "Impossible to delete entity %d (of type %d)", Num, Type); - break; +bool ProjectPointOnSurface (Surface *s, Vertex &p){ + float x[3] = {0.5,0.5,0.5}; + Vertex vv; + int check; + SURFACE = s; + VERTEX = &p; + double UMIN = 0.; + double UMAX = 1.; + double VMIN = 0.; + double VMAX = 1.; + while(1){ + newt(x,2,&check,projectPS); + vv = InterpolateSurface(s,x[1],x[2],0,0); + if(x[1] >= UMIN && x[1] <= UMAX && x[2] >=VMIN && x[2] <= VMAX)break; + x[1] = UMIN + (UMAX-UMIN)*((rand() % 10000)/10000.); + x[2] = VMIN + (VMAX-VMIN)*((rand() % 10000)/10000.); + } + p.Pos.X = vv.Pos.X; + p.Pos.Y = vv.Pos.Y; + p.Pos.Z = vv.Pos.Z; + if(!check){ + return false; } + return true; } -Curve * CreateReversedCurve (Mesh *M,Curve *c){ - Curve *newc; - Vertex *e1,*e2,*e3,*e4; - int i; - newc = Create_Curve(-c->Num, c->Typ,1,NULL,NULL,-1,-1,0.,1.); - newc->Control_Points = List_Create(List_Nbr(c->Control_Points), 1, sizeof(Vertex*)); - if (c->Typ == MSH_SEGM_ELLI || c->Typ == MSH_SEGM_ELLI_INV){ - List_Read(c->Control_Points,0,&e1); - List_Read(c->Control_Points,1,&e2); - List_Read(c->Control_Points,2,&e3); - List_Read(c->Control_Points,3,&e4); - List_Add(newc->Control_Points,&e4); - List_Add(newc->Control_Points,&e2); - List_Add(newc->Control_Points,&e3); - List_Add(newc->Control_Points,&e1); +bool ProjectPointOnSurface (Surface *s, Vertex *p,double *u, double *v){ + static float x[3]; + int check; + static int deb = 1; + double VMIN,VMAX,UMIN,UMAX,l, lmin; + Vertex vv; + + SURFACE = s; + VERTEX = p; + lmin = 1.e24; + UMAX = s->ku[s->Nu + s->OrderU]; + UMIN = s->ku[0]; + VMAX = s->kv[s->Nv + s->OrderV]; + VMIN = s->kv[0]; + if(deb){ + x[1] = UMIN + (UMAX-UMIN)*((rand() % 10000)/10000.); + x[2] = VMIN + (VMAX-VMIN)*((rand() % 10000)/10000.); + deb = 0; } - else - List_Invert(c->Control_Points, newc->Control_Points); - - if (c->Typ == MSH_SEGM_NURBS && c->k){ - newc->k = (float*)malloc((c->degre + List_Nbr(c->Control_Points)+1)*sizeof(float)); - for(i=0;i<c->degre + List_Nbr(c->Control_Points)+1;i++) - newc->k[c->degre + List_Nbr(c->Control_Points)-i] = c->k[i]; + + if(p->Num == 160){ + lmin += 1.e90; + if(p->Num == 133)UMAX = s->ku[s->Nu + s->OrderU]; } - if (c->Typ == MSH_SEGM_CIRC) newc->Typ = MSH_SEGM_CIRC_INV; - if (c->Typ == MSH_SEGM_CIRC_INV) newc->Typ = MSH_SEGM_CIRC; - if (c->Typ == MSH_SEGM_ELLI) newc->Typ = MSH_SEGM_ELLI_INV; - if (c->Typ == MSH_SEGM_ELLI_INV) newc->Typ = MSH_SEGM_ELLI; - newc->Vertices = List_Create(10 ,1 ,sizeof(Vertex*)); - newc->Method = c->Method; - newc->degre = c->degre; - newc->beg = c->end; - newc->end = c->beg; - newc->ubeg = 1. - c->uend; - newc->uend = 1. - c->ubeg; - End_Curve(newc); + if(try_a_value(SURFACE,VERTEX,SURFACE->ku[0]+VERTEX->u, + SURFACE->kv[0],u,v)) + return true; + if(try_a_value(SURFACE,VERTEX,SURFACE->ku[0]+VERTEX->u, + SURFACE->kv[SURFACE->Nv+SURFACE->OrderV],u,v)) + return true; + if(try_a_value(SURFACE,VERTEX,SURFACE->ku[SURFACE->Nu+SURFACE->OrderU]-VERTEX->u, + SURFACE->kv[0],u,v)) + return true; + if(try_a_value(SURFACE,VERTEX,SURFACE->ku[SURFACE->Nu+SURFACE->OrderU]-VERTEX->u, + SURFACE->kv[SURFACE->Nv+SURFACE->OrderV],u,v)) + return true; + if(try_a_value(SURFACE,VERTEX,SURFACE->ku[0],SURFACE->kv[0]+VERTEX->u,u,v)) + return true; + if(try_a_value(SURFACE,VERTEX,SURFACE->ku[0], + SURFACE->kv[SURFACE->Nv+SURFACE->OrderV]-VERTEX->u,u,v)) + return true; + if(try_a_value(SURFACE,VERTEX,SURFACE->ku[SURFACE->Nu+SURFACE->OrderU], + SURFACE->kv[0]+VERTEX->u,u,v)) + return true; + if(try_a_value(SURFACE,VERTEX,SURFACE->ku[SURFACE->Nu+SURFACE->OrderU], + SURFACE->kv[SURFACE->Nv+SURFACE->OrderV]-VERTEX->u,u,v)) + return true; + - Curve **pc; - - if((pc = (Curve**)Tree_PQuery(M->Curves,&newc))) - { - Free_Curve(&newc,0); - return *pc; + if(search_in_boundary(SURFACE,VERTEX,SURFACE->kv[0],0,u,v)) + return true; + if(search_in_boundary(SURFACE,VERTEX,SURFACE->kv[SURFACE->Nv+SURFACE->OrderV],0,u,v)) + return true; + if(search_in_boundary(SURFACE,VERTEX,SURFACE->ku[0],1,u,v)) + return true; + if(search_in_boundary(SURFACE,VERTEX,SURFACE->ku[SURFACE->Nu+SURFACE->OrderU],1,u,v)) + return true; + + while(1){ + newt(x,2,&check,projectPS); + vv = InterpolateSurface(s,x[1],x[2],0,0); + l = sqrt(DSQR(vv.Pos.X - p->Pos.X) + + DSQR(vv.Pos.Y - p->Pos.Y) + + DSQR(vv.Pos.Z - p->Pos.Z)); + if(l < 1.e-1)break; + else { + x[1] = UMIN + (UMAX-UMIN)*((rand() % 10000)/10000.); + x[2] = VMIN + (VMAX-VMIN)*((rand() % 10000)/10000.); } - else Tree_Insert(M->Curves, &newc); - return newc; + } + *u = x[1]; + *v = x[2]; + + if(!check){ + return false; + } + return true; } -int recognize_seg(int typ, List_T * liste, int *seg){ - int i,beg,end; - Curve *pc; - - List_T *temp = Tree2List(THEM->Curves); - List_Read(liste,0,&beg); - List_Read(liste,List_Nbr(liste)-1,&end); - for(i=0;i<List_Nbr(temp);i++){ - List_Read(temp,i,&pc); - if(pc->Typ == typ && - pc->beg->Num == beg && - pc->end->Num == end){ - List_Delete(temp); - *seg = pc->Num; - return 1; - } - } - List_Delete(temp); - return 0; +bool IntersectCurveSurface (Curve *c, Surface *s){ + float x[4]; + int check; + SURFACE = s; + CURVE = c; + newt(x,3,&check,intersectCS); + if(!check)return false; + return true; } +void DivideCurve (Curve *c , double u, Vertex *v, Curve **c1, Curve **c2){ + (*c1) = Create_Curve(NEWLINE(),c->Typ,1,NULL,NULL,-1,-1,0.,1.); + (*c2) = Create_Curve(NEWLINE(),c->Typ,1,NULL,NULL,-1,-1,0.,1.); + CopyCurve(c,*c1); + CopyCurve(c,*c2); + (*c1)->uend = u; + (*c2)->ubeg = u; + (*c1)->end = v; + (*c2)->beg = v; +} -int recognize_loop(List_T * liste, int *loop){ - int i,res; - EdgeLoop *pe; +bool IntersectCurves (Curve *c1, Curve *c2, + Curve **c11, Curve **c12, + Curve **c21, Curve **c22, Vertex **v){ + float x[3]; + Vertex v1,v2; + int check; + + if(!compareVertex(&c1->beg,&c2->beg))return false; + if(!compareVertex(&c1->end,&c2->end))return false; + if(!compareVertex(&c1->beg,&c2->end))return false; + if(!compareVertex(&c2->beg,&c1->end))return false; - res = 0; - *loop = 0; - List_T *temp = Tree2List(THEM->EdgeLoops); - for(i=0;i<List_Nbr(temp);i++){ - List_Read(temp,i,&pe); - if(!compare2Lists(pe->Curves,liste,fcmp_absint)){ - res = 1; - *loop = pe->Num; - break; - } - } - List_Delete(temp); - return res; + CURVE_2 = c2; + CURVE = c1; + x[1] = x[2] = 0.0; + newt(x,2,&check,intersectCC); + if(check)return false; + v1 = InterpolateCurve(c1,x[1],0); + v2 = InterpolateCurve(c2,x[2],0); + if(x[1] <= c1->ubeg)return false; + if(x[1] >= c1->uend)return false; + if(x[2] <= c2->ubeg)return false; + if(x[2] >= c2->uend)return false; + if(fabs(v1.Pos.Z - v2.Pos.Z) > 1.e-06 * CTX.lc)return false; + *v = Create_Vertex(NEWPOINT(), v1.Pos.X,v1.Pos.Y,v1.Pos.Z,v1.lc,x[1]); + Tree_Insert(THEM->Points,v); + DivideCurve(c1,x[1],*v,c11,c12); + DivideCurve(c2,x[2],*v,c21,c22); + return true; } -int recognize_surfloop(List_T * liste, int *loop){ - int i,res; - EdgeLoop *pe; +bool IntersectAllSegmentsTogether (void) { + bool intersectionfound = true; + List_T *TempList; + Curve *c1,*c2,*c11,*c12,*c21,*c22; + Vertex *v; + int i,j; - res = 0; - *loop = 0; - List_T *temp = Tree2List(THEM->SurfaceLoops); - for(i=0;i<List_Nbr(temp);i++){ - List_Read(temp,i,&pe); - if(!compare2Lists(pe->Curves,liste,fcmp_absint)){ - res = 1; - *loop = pe->Num; - break; + while(intersectionfound){ + TempList = Tree2List(THEM->Curves); + if(!List_Nbr(TempList))return true; + for(i=0;i<List_Nbr(TempList);i++){ + List_Read(TempList,i,&c1); + intersectionfound = false; + for(j=0;j<List_Nbr(TempList);j++){ + List_Read(TempList,j,&c2); + if(c1->Num > 0 && c2->Num >0 && i!=j && intersectionfound == false){ + if(IntersectCurves(c1,c2,&c11,&c12,&c21,&c22,&v)){ + Msg(INFO, "Intersection Curve %d->%d",c1->Num,c2->Num); + intersectionfound = true; + DeleteCurve(c1->Num); + DeleteCurve(c2->Num); + Tree_Add(THEM->Curves,&c11); + Tree_Add(THEM->Curves,&c12); + Tree_Add(THEM->Curves,&c21); + Tree_Add(THEM->Curves,&c22); + + CreateReversedCurve(THEM,c11); + CreateReversedCurve(THEM,c12); + CreateReversedCurve(THEM,c21); + CreateReversedCurve(THEM,c22); + return true; + } + } + } + if(intersectionfound) break; } + List_Delete(TempList); } - List_Delete(temp); - return res; + return false; + } +void IntersectSurfaces (Surface *s1, Surface *s2){ + + +} diff --git a/Geo/CAD.h b/Geo/CAD.h index d2e1048e3a63bce7d67f209d9e4cbac0d36f645c..ad75f0ab5909a7925efd4eb38243c4c8818f9ba5 100644 --- a/Geo/CAD.h +++ b/Geo/CAD.h @@ -12,6 +12,7 @@ int NEWVOLUME(void); int NEWPHYSICAL(void); int NEWREG(void); + Vertex *FindPoint(int inum, Mesh *M); Vertex *FindVertex(int inum, Mesh *M); Curve *FindCurve(int inum, Mesh *M); @@ -20,10 +21,25 @@ Volume *FindVolume(int inum, Mesh *M); EdgeLoop *FindEdgeLoop(int inum, Mesh *M); SurfaceLoop *FindSurfaceLoop(int inum, Mesh *M); -bool ProjectPointOnCurve (Curve *c, Vertex *v, Vertex *RES, Vertex *DER); -bool ProjectPointOnSurface (Surface *s, Vertex &p); -bool ProjectPointOnSurface (Surface *s, Vertex *p,double *u, double *v); +Curve * CreateReversedCurve (Mesh *M,Curve *c); +void ModifyLcPoint(int ip, double lc); + + +void TranslateShapes(double X,double Y,double Z, + List_T *ListShapes, int isFinal); +void DilatShapes(double X,double Y,double Z, double A, + List_T *ListShapes, int isFinal); +void RotateShapes(double Ax,double Ay,double Az, + double Px,double Py, double Pz, + double alpha, List_T *ListShapes); +void SymmetryShapes(double A,double B,double C, + double D, List_T *ListShapes, int x); +void CopyShape(int Type, int Num, int *New); +void DeleteShape(int Type, int Num); + + +void ProtudeXYZ(double &x, double &y, double &z, ExtrudeParams *e); void Extrude_ProtudePoint(int type, int ip, double T0, double T1, double T2, double A0, double A1, double A2, @@ -40,28 +56,16 @@ void Extrude_ProtudeSurface(int type, int is, double A0, double A1, double A2, double X0, double X1, double X2, double alpha, int NewVolume, ExtrudeParams *e); -void ProtudeXYZ ( double &x, double &y, double &z, ExtrudeParams *e); -void ReplaceAllDuplicates ( Mesh *m ); -bool IntersectAllSegmentsTogether(void); -void ModifyLcPoint(int ip, double lc); -void TranslateShapes(double X,double Y,double Z, - List_T *ListShapes, int isFinal); -void DilatShapes(double X,double Y,double Z, double A, - List_T *ListShapes, int isFinal); -void RotateShapes (double Ax,double Ay,double Az, - double Px,double Py, double Pz, - double alpha, List_T *ListShapes); -void SymmetryShapes (double A,double B,double C, - double D, List_T *ListShapes, int x); -void CopyShape(int Type, int Num, int *New); -void DeletePoint(int ip); -void DeleteCurve(int ip); -void DeleteSurf( int is ); -void DeleteShape(int Type, int Num); +void ReplaceAllDuplicates(Mesh *m); + + +bool ProjectPointOnCurve (Curve *c, Vertex *v, Vertex *RES, Vertex *DER); +bool ProjectPointOnSurface (Surface *s, Vertex &p); +bool ProjectPointOnSurface (Surface *s, Vertex *p,double *u, double *v); +bool IntersectAllSegmentsTogether(void); -Curve * CreateReversedCurve (Mesh *M,Curve *c); int recognize_seg(int typ, List_T * liste, int *seg); int recognize_loop(List_T * liste, int *loop); diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp index 63611366675083be8e10de69919d23ececd5afc6..df438b925fa0fadc249ef173a0a4cd8bc4299f1b 100644 --- a/Parser/Gmsh.tab.cpp +++ b/Parser/Gmsh.tab.cpp @@ -177,7 +177,7 @@ #line 1 "Gmsh.y" -// $Id: Gmsh.tab.cpp,v 1.125 2001-11-12 11:25:22 geuzaine Exp $ +// $Id: Gmsh.tab.cpp,v 1.126 2001-11-12 13:33:57 geuzaine Exp $ #include <stdarg.h> #ifndef _NOPLUGIN @@ -264,7 +264,7 @@ typedef union { -#define YYFINAL 1697 +#define YYFINAL 1700 #define YYFLAG -32768 #define YYNTBASE 190 @@ -335,28 +335,28 @@ static const short yyprhs[] = { 0, 986, 1002, 1004, 1006, 1008, 1010, 1012, 1014, 1016, 1021, 1029, 1039, 1046, 1050, 1057, 1064, 1074, 1081, 1091, 1097, 1106, 1115, 1127, 1134, 1144, 1154, 1164, 1172, 1181, 1194, - 1201, 1207, 1215, 1223, 1236, 1244, 1252, 1262, 1280, 1289, - 1298, 1306, 1314, 1326, 1332, 1341, 1354, 1363, 1386, 1407, - 1416, 1425, 1431, 1440, 1448, 1457, 1463, 1475, 1481, 1491, - 1493, 1495, 1497, 1498, 1501, 1506, 1511, 1518, 1522, 1526, - 1530, 1538, 1541, 1544, 1551, 1560, 1569, 1580, 1582, 1585, - 1587, 1591, 1596, 1598, 1607, 1620, 1635, 1644, 1657, 1672, - 1673, 1686, 1687, 1704, 1705, 1724, 1733, 1746, 1761, 1762, - 1775, 1776, 1793, 1794, 1813, 1815, 1818, 1828, 1836, 1839, - 1846, 1856, 1866, 1875, 1884, 1893, 1900, 1905, 1908, 1911, - 1913, 1915, 1917, 1919, 1921, 1923, 1927, 1930, 1933, 1936, - 1940, 1944, 1948, 1952, 1956, 1960, 1964, 1968, 1972, 1976, - 1980, 1984, 1988, 1992, 1998, 2003, 2008, 2013, 2018, 2023, - 2028, 2033, 2038, 2043, 2048, 2055, 2060, 2065, 2070, 2075, - 2080, 2085, 2092, 2099, 2106, 2111, 2116, 2121, 2126, 2131, - 2136, 2141, 2146, 2151, 2156, 2161, 2168, 2173, 2178, 2183, - 2188, 2193, 2198, 2205, 2212, 2219, 2224, 2226, 2228, 2230, - 2232, 2234, 2239, 2242, 2248, 2252, 2259, 2264, 2272, 2274, - 2277, 2280, 2284, 2288, 2300, 2310, 2318, 2326, 2327, 2331, - 2333, 2337, 2338, 2342, 2346, 2348, 2352, 2354, 2356, 2360, - 2365, 2369, 2375, 2379, 2384, 2391, 2399, 2401, 2403, 2407, - 2411, 2421, 2429, 2431, 2437, 2441, 2448, 2450, 2454, 2456, - 2463, 2468, 2473, 2480, 2487 + 1201, 1209, 1217, 1230, 1238, 1246, 1256, 1274, 1283, 1292, + 1300, 1308, 1320, 1329, 1342, 1351, 1374, 1395, 1404, 1413, + 1422, 1430, 1439, 1445, 1457, 1463, 1473, 1475, 1477, 1479, + 1480, 1483, 1490, 1497, 1504, 1509, 1514, 1521, 1525, 1529, + 1533, 1541, 1544, 1547, 1554, 1563, 1572, 1583, 1585, 1588, + 1590, 1594, 1599, 1601, 1610, 1623, 1638, 1647, 1660, 1675, + 1676, 1689, 1690, 1707, 1708, 1727, 1736, 1749, 1764, 1765, + 1778, 1779, 1796, 1797, 1816, 1818, 1821, 1831, 1839, 1842, + 1849, 1859, 1869, 1878, 1887, 1896, 1903, 1908, 1911, 1914, + 1916, 1918, 1920, 1922, 1924, 1926, 1930, 1933, 1936, 1939, + 1943, 1947, 1951, 1955, 1959, 1963, 1967, 1971, 1975, 1979, + 1983, 1987, 1991, 1995, 2001, 2006, 2011, 2016, 2021, 2026, + 2031, 2036, 2041, 2046, 2051, 2058, 2063, 2068, 2073, 2078, + 2083, 2088, 2095, 2102, 2109, 2114, 2119, 2124, 2129, 2134, + 2139, 2144, 2149, 2154, 2159, 2164, 2171, 2176, 2181, 2186, + 2191, 2196, 2201, 2208, 2215, 2222, 2227, 2229, 2231, 2233, + 2235, 2237, 2242, 2245, 2251, 2255, 2262, 2267, 2275, 2277, + 2280, 2283, 2287, 2291, 2303, 2313, 2321, 2329, 2330, 2334, + 2336, 2340, 2341, 2345, 2349, 2351, 2355, 2357, 2359, 2363, + 2368, 2372, 2378, 2382, 2387, 2394, 2402, 2404, 2406, 2410, + 2414, 2424, 2432, 2434, 2440, 2444, 2451, 2453, 2457, 2459, + 2466, 2471, 2476, 2483, 2490 }; static const short yyrhs[] = { 193, @@ -480,136 +480,136 @@ static const short yyrhs[] = { 193, 0, 53, 38, 182, 268, 183, 7, 276, 6, 0, 69, 38, 276, 7, 188, 268, 187, 268, 187, 268, 189, 6, 0, 45, 46, 276, 7, 268, 6, 0, - 38, 188, 268, 189, 6, 0, 41, 182, 268, 183, - 7, 276, 6, 0, 43, 182, 268, 183, 7, 276, - 6, 0, 69, 41, 276, 7, 188, 268, 187, 268, - 187, 268, 189, 6, 0, 39, 182, 268, 183, 7, - 276, 6, 0, 40, 182, 268, 183, 7, 276, 6, - 0, 39, 182, 268, 183, 7, 276, 49, 270, 6, - 0, 47, 182, 268, 183, 7, 188, 268, 187, 268, - 187, 5, 187, 5, 187, 5, 189, 6, 0, 53, - 41, 182, 268, 183, 7, 276, 6, 0, 41, 64, - 182, 268, 183, 7, 276, 6, 0, 85, 182, 268, - 183, 7, 276, 6, 0, 86, 182, 268, 183, 7, - 276, 6, 0, 87, 182, 268, 183, 7, 276, 91, - 276, 88, 268, 6, 0, 41, 188, 268, 189, 6, - 0, 49, 42, 182, 268, 183, 7, 276, 6, 0, - 147, 42, 182, 268, 183, 7, 188, 268, 187, 276, - 189, 6, 0, 50, 42, 182, 268, 183, 7, 276, - 6, 0, 87, 42, 89, 90, 182, 268, 183, 7, - 274, 91, 188, 276, 187, 276, 189, 88, 188, 268, - 187, 268, 189, 6, 0, 87, 42, 182, 268, 183, - 7, 274, 91, 188, 276, 187, 276, 189, 88, 188, - 268, 187, 268, 189, 6, 0, 53, 42, 182, 268, - 183, 7, 276, 6, 0, 42, 64, 182, 268, 183, - 7, 276, 6, 0, 42, 188, 268, 189, 6, 0, - 52, 44, 182, 268, 183, 7, 276, 6, 0, 44, - 182, 268, 183, 7, 276, 6, 0, 53, 44, 182, - 268, 183, 7, 276, 6, 0, 59, 270, 188, 250, - 189, 0, 58, 188, 270, 187, 270, 187, 268, 189, - 188, 250, 189, 0, 60, 270, 188, 250, 189, 0, - 61, 188, 270, 187, 268, 189, 188, 250, 189, 0, - 252, 0, 251, 0, 249, 0, 0, 251, 248, 0, - 63, 188, 251, 189, 0, 66, 188, 251, 189, 0, - 66, 4, 184, 268, 185, 6, 0, 66, 103, 6, - 0, 4, 282, 6, 0, 4, 268, 6, 0, 57, - 182, 4, 183, 186, 4, 6, 0, 99, 6, 0, - 37, 6, 0, 94, 182, 268, 8, 268, 183, 0, - 94, 182, 268, 8, 268, 8, 268, 183, 0, 94, - 4, 95, 188, 268, 8, 268, 189, 0, 94, 4, - 95, 188, 268, 8, 268, 8, 268, 189, 0, 96, - 0, 102, 4, 0, 100, 0, 101, 4, 6, 0, - 97, 182, 268, 183, 0, 98, 0, 62, 38, 188, - 268, 187, 270, 189, 6, 0, 62, 38, 188, 268, + 41, 182, 268, 183, 7, 276, 6, 0, 43, 182, + 268, 183, 7, 276, 6, 0, 69, 41, 276, 7, + 188, 268, 187, 268, 187, 268, 189, 6, 0, 39, + 182, 268, 183, 7, 276, 6, 0, 40, 182, 268, + 183, 7, 276, 6, 0, 39, 182, 268, 183, 7, + 276, 49, 270, 6, 0, 47, 182, 268, 183, 7, + 188, 268, 187, 268, 187, 5, 187, 5, 187, 5, + 189, 6, 0, 53, 41, 182, 268, 183, 7, 276, + 6, 0, 41, 64, 182, 268, 183, 7, 276, 6, + 0, 85, 182, 268, 183, 7, 276, 6, 0, 86, + 182, 268, 183, 7, 276, 6, 0, 87, 182, 268, + 183, 7, 276, 91, 276, 88, 268, 6, 0, 49, + 42, 182, 268, 183, 7, 276, 6, 0, 147, 42, + 182, 268, 183, 7, 188, 268, 187, 276, 189, 6, + 0, 50, 42, 182, 268, 183, 7, 276, 6, 0, + 87, 42, 89, 90, 182, 268, 183, 7, 274, 91, + 188, 276, 187, 276, 189, 88, 188, 268, 187, 268, + 189, 6, 0, 87, 42, 182, 268, 183, 7, 274, + 91, 188, 276, 187, 276, 189, 88, 188, 268, 187, + 268, 189, 6, 0, 53, 42, 182, 268, 183, 7, + 276, 6, 0, 42, 64, 182, 268, 183, 7, 276, + 6, 0, 52, 44, 182, 268, 183, 7, 276, 6, + 0, 44, 182, 268, 183, 7, 276, 6, 0, 53, + 44, 182, 268, 183, 7, 276, 6, 0, 59, 270, + 188, 250, 189, 0, 58, 188, 270, 187, 270, 187, + 268, 189, 188, 250, 189, 0, 60, 270, 188, 250, + 189, 0, 61, 188, 270, 187, 268, 189, 188, 250, + 189, 0, 252, 0, 251, 0, 249, 0, 0, 251, + 248, 0, 251, 38, 188, 278, 189, 6, 0, 251, + 41, 188, 278, 189, 6, 0, 251, 42, 188, 278, + 189, 6, 0, 63, 188, 251, 189, 0, 66, 188, + 251, 189, 0, 66, 4, 184, 268, 185, 6, 0, + 66, 103, 6, 0, 4, 282, 6, 0, 4, 268, + 6, 0, 57, 182, 4, 183, 186, 4, 6, 0, + 99, 6, 0, 37, 6, 0, 94, 182, 268, 8, + 268, 183, 0, 94, 182, 268, 8, 268, 8, 268, + 183, 0, 94, 4, 95, 188, 268, 8, 268, 189, + 0, 94, 4, 95, 188, 268, 8, 268, 8, 268, + 189, 0, 96, 0, 102, 4, 0, 100, 0, 101, + 4, 6, 0, 97, 182, 268, 183, 0, 98, 0, + 62, 38, 188, 268, 187, 270, 189, 6, 0, 62, + 38, 188, 268, 187, 270, 187, 270, 187, 268, 189, + 6, 0, 62, 38, 188, 268, 187, 270, 187, 270, + 187, 270, 187, 268, 189, 6, 0, 62, 41, 188, + 268, 187, 270, 189, 6, 0, 62, 41, 188, 268, 187, 270, 187, 270, 187, 268, 189, 6, 0, 62, - 38, 188, 268, 187, 270, 187, 270, 187, 270, 187, - 268, 189, 6, 0, 62, 41, 188, 268, 187, 270, - 189, 6, 0, 62, 41, 188, 268, 187, 270, 187, - 270, 187, 268, 189, 6, 0, 62, 41, 188, 268, - 187, 270, 187, 270, 187, 270, 187, 268, 189, 6, - 0, 0, 62, 41, 188, 268, 187, 270, 189, 257, - 188, 263, 189, 6, 0, 0, 62, 41, 188, 268, - 187, 270, 187, 270, 187, 268, 189, 258, 188, 263, - 189, 6, 0, 0, 62, 41, 188, 268, 187, 270, - 187, 270, 187, 270, 187, 268, 189, 259, 188, 263, - 189, 6, 0, 62, 42, 188, 268, 187, 270, 189, - 6, 0, 62, 42, 188, 268, 187, 270, 187, 270, - 187, 268, 189, 6, 0, 62, 42, 188, 268, 187, - 270, 187, 270, 187, 270, 187, 268, 189, 6, 0, - 0, 62, 42, 188, 268, 187, 270, 189, 260, 188, - 263, 189, 6, 0, 0, 62, 42, 188, 268, 187, - 270, 187, 270, 187, 268, 189, 261, 188, 263, 189, - 6, 0, 0, 62, 42, 188, 268, 187, 270, 187, - 270, 187, 270, 187, 268, 189, 262, 188, 263, 189, - 6, 0, 264, 0, 263, 264, 0, 70, 188, 276, - 187, 276, 187, 276, 189, 6, 0, 70, 188, 276, - 187, 276, 189, 6, 0, 65, 6, 0, 51, 41, - 276, 7, 268, 6, 0, 51, 41, 276, 7, 268, - 54, 56, 268, 6, 0, 51, 41, 276, 7, 268, - 54, 55, 268, 6, 0, 51, 42, 188, 268, 189, - 7, 276, 6, 0, 48, 42, 188, 268, 189, 7, - 276, 6, 0, 51, 44, 188, 268, 189, 7, 276, - 6, 0, 65, 42, 276, 7, 268, 6, 0, 65, - 42, 276, 6, 0, 67, 6, 0, 68, 6, 0, - 107, 0, 108, 0, 109, 0, 110, 0, 111, 0, - 269, 0, 182, 268, 183, 0, 172, 268, 0, 171, - 268, 0, 177, 268, 0, 268, 172, 268, 0, 268, - 171, 268, 0, 268, 173, 268, 0, 268, 174, 268, - 0, 268, 175, 268, 0, 268, 181, 268, 0, 268, - 167, 268, 0, 268, 169, 268, 0, 268, 168, 268, - 0, 268, 170, 268, 0, 268, 164, 268, 0, 268, - 165, 268, 0, 268, 163, 268, 0, 268, 162, 268, - 0, 268, 161, 268, 8, 268, 0, 12, 182, 268, - 183, 0, 13, 182, 268, 183, 0, 14, 182, 268, - 183, 0, 15, 182, 268, 183, 0, 16, 182, 268, - 183, 0, 17, 182, 268, 183, 0, 18, 182, 268, - 183, 0, 19, 182, 268, 183, 0, 20, 182, 268, - 183, 0, 22, 182, 268, 183, 0, 23, 182, 268, - 187, 268, 183, 0, 24, 182, 268, 183, 0, 25, - 182, 268, 183, 0, 26, 182, 268, 183, 0, 27, - 182, 268, 183, 0, 28, 182, 268, 183, 0, 29, - 182, 268, 183, 0, 30, 182, 268, 187, 268, 183, - 0, 31, 182, 268, 187, 268, 183, 0, 32, 182, - 268, 187, 268, 183, 0, 21, 182, 268, 183, 0, - 12, 184, 268, 185, 0, 13, 184, 268, 185, 0, - 14, 184, 268, 185, 0, 15, 184, 268, 185, 0, - 16, 184, 268, 185, 0, 17, 184, 268, 185, 0, - 18, 184, 268, 185, 0, 19, 184, 268, 185, 0, - 20, 184, 268, 185, 0, 22, 184, 268, 185, 0, - 23, 184, 268, 187, 268, 185, 0, 24, 184, 268, - 185, 0, 25, 184, 268, 185, 0, 26, 184, 268, - 185, 0, 27, 184, 268, 185, 0, 28, 184, 268, - 185, 0, 29, 184, 268, 185, 0, 30, 184, 268, - 187, 268, 185, 0, 31, 184, 268, 187, 268, 185, - 0, 32, 184, 268, 187, 268, 185, 0, 21, 184, - 268, 185, 0, 3, 0, 9, 0, 10, 0, 11, - 0, 4, 0, 4, 184, 268, 185, 0, 4, 246, - 0, 4, 184, 268, 185, 246, 0, 4, 186, 4, - 0, 4, 184, 268, 185, 186, 4, 0, 4, 186, - 4, 246, 0, 4, 184, 268, 185, 186, 4, 246, - 0, 271, 0, 172, 270, 0, 171, 270, 0, 270, - 172, 270, 0, 270, 171, 270, 0, 188, 268, 187, - 268, 187, 268, 187, 268, 187, 268, 189, 0, 188, - 268, 187, 268, 187, 268, 187, 268, 189, 0, 188, - 268, 187, 268, 187, 268, 189, 0, 182, 268, 187, - 268, 187, 268, 183, 0, 0, 182, 273, 183, 0, - 5, 0, 273, 187, 5, 0, 0, 188, 275, 189, - 0, 182, 275, 183, 0, 276, 0, 275, 187, 276, - 0, 268, 0, 277, 0, 188, 278, 189, 0, 172, - 188, 278, 189, 0, 268, 8, 268, 0, 268, 8, - 268, 8, 268, 0, 4, 184, 185, 0, 172, 4, - 184, 185, 0, 4, 184, 188, 278, 189, 185, 0, - 172, 4, 184, 188, 278, 189, 185, 0, 268, 0, - 277, 0, 278, 187, 268, 0, 278, 187, 277, 0, - 188, 268, 187, 268, 187, 268, 187, 268, 189, 0, - 188, 268, 187, 268, 187, 268, 189, 0, 4, 0, - 4, 186, 92, 186, 4, 0, 188, 281, 189, 0, - 4, 184, 268, 185, 186, 93, 0, 279, 0, 281, - 187, 279, 0, 5, 0, 35, 182, 282, 187, 282, - 183, 0, 36, 182, 282, 183, 0, 34, 182, 282, - 183, 0, 34, 182, 282, 187, 278, 183, 0, 34, - 182, 4, 186, 4, 183, 0, 34, 182, 4, 184, - 268, 185, 186, 4, 183, 0 + 41, 188, 268, 187, 270, 187, 270, 187, 270, 187, + 268, 189, 6, 0, 0, 62, 41, 188, 268, 187, + 270, 189, 257, 188, 263, 189, 6, 0, 0, 62, + 41, 188, 268, 187, 270, 187, 270, 187, 268, 189, + 258, 188, 263, 189, 6, 0, 0, 62, 41, 188, + 268, 187, 270, 187, 270, 187, 270, 187, 268, 189, + 259, 188, 263, 189, 6, 0, 62, 42, 188, 268, + 187, 270, 189, 6, 0, 62, 42, 188, 268, 187, + 270, 187, 270, 187, 268, 189, 6, 0, 62, 42, + 188, 268, 187, 270, 187, 270, 187, 270, 187, 268, + 189, 6, 0, 0, 62, 42, 188, 268, 187, 270, + 189, 260, 188, 263, 189, 6, 0, 0, 62, 42, + 188, 268, 187, 270, 187, 270, 187, 268, 189, 261, + 188, 263, 189, 6, 0, 0, 62, 42, 188, 268, + 187, 270, 187, 270, 187, 270, 187, 268, 189, 262, + 188, 263, 189, 6, 0, 264, 0, 263, 264, 0, + 70, 188, 276, 187, 276, 187, 276, 189, 6, 0, + 70, 188, 276, 187, 276, 189, 6, 0, 65, 6, + 0, 51, 41, 276, 7, 268, 6, 0, 51, 41, + 276, 7, 268, 54, 56, 268, 6, 0, 51, 41, + 276, 7, 268, 54, 55, 268, 6, 0, 51, 42, + 188, 268, 189, 7, 276, 6, 0, 48, 42, 188, + 268, 189, 7, 276, 6, 0, 51, 44, 188, 268, + 189, 7, 276, 6, 0, 65, 42, 276, 7, 268, + 6, 0, 65, 42, 276, 6, 0, 67, 6, 0, + 68, 6, 0, 107, 0, 108, 0, 109, 0, 110, + 0, 111, 0, 269, 0, 182, 268, 183, 0, 172, + 268, 0, 171, 268, 0, 177, 268, 0, 268, 172, + 268, 0, 268, 171, 268, 0, 268, 173, 268, 0, + 268, 174, 268, 0, 268, 175, 268, 0, 268, 181, + 268, 0, 268, 167, 268, 0, 268, 169, 268, 0, + 268, 168, 268, 0, 268, 170, 268, 0, 268, 164, + 268, 0, 268, 165, 268, 0, 268, 163, 268, 0, + 268, 162, 268, 0, 268, 161, 268, 8, 268, 0, + 12, 182, 268, 183, 0, 13, 182, 268, 183, 0, + 14, 182, 268, 183, 0, 15, 182, 268, 183, 0, + 16, 182, 268, 183, 0, 17, 182, 268, 183, 0, + 18, 182, 268, 183, 0, 19, 182, 268, 183, 0, + 20, 182, 268, 183, 0, 22, 182, 268, 183, 0, + 23, 182, 268, 187, 268, 183, 0, 24, 182, 268, + 183, 0, 25, 182, 268, 183, 0, 26, 182, 268, + 183, 0, 27, 182, 268, 183, 0, 28, 182, 268, + 183, 0, 29, 182, 268, 183, 0, 30, 182, 268, + 187, 268, 183, 0, 31, 182, 268, 187, 268, 183, + 0, 32, 182, 268, 187, 268, 183, 0, 21, 182, + 268, 183, 0, 12, 184, 268, 185, 0, 13, 184, + 268, 185, 0, 14, 184, 268, 185, 0, 15, 184, + 268, 185, 0, 16, 184, 268, 185, 0, 17, 184, + 268, 185, 0, 18, 184, 268, 185, 0, 19, 184, + 268, 185, 0, 20, 184, 268, 185, 0, 22, 184, + 268, 185, 0, 23, 184, 268, 187, 268, 185, 0, + 24, 184, 268, 185, 0, 25, 184, 268, 185, 0, + 26, 184, 268, 185, 0, 27, 184, 268, 185, 0, + 28, 184, 268, 185, 0, 29, 184, 268, 185, 0, + 30, 184, 268, 187, 268, 185, 0, 31, 184, 268, + 187, 268, 185, 0, 32, 184, 268, 187, 268, 185, + 0, 21, 184, 268, 185, 0, 3, 0, 9, 0, + 10, 0, 11, 0, 4, 0, 4, 184, 268, 185, + 0, 4, 246, 0, 4, 184, 268, 185, 246, 0, + 4, 186, 4, 0, 4, 184, 268, 185, 186, 4, + 0, 4, 186, 4, 246, 0, 4, 184, 268, 185, + 186, 4, 246, 0, 271, 0, 172, 270, 0, 171, + 270, 0, 270, 172, 270, 0, 270, 171, 270, 0, + 188, 268, 187, 268, 187, 268, 187, 268, 187, 268, + 189, 0, 188, 268, 187, 268, 187, 268, 187, 268, + 189, 0, 188, 268, 187, 268, 187, 268, 189, 0, + 182, 268, 187, 268, 187, 268, 183, 0, 0, 182, + 273, 183, 0, 5, 0, 273, 187, 5, 0, 0, + 188, 275, 189, 0, 182, 275, 183, 0, 276, 0, + 275, 187, 276, 0, 268, 0, 277, 0, 188, 278, + 189, 0, 172, 188, 278, 189, 0, 268, 8, 268, + 0, 268, 8, 268, 8, 268, 0, 4, 184, 185, + 0, 172, 4, 184, 185, 0, 4, 184, 188, 278, + 189, 185, 0, 172, 4, 184, 188, 278, 189, 185, + 0, 268, 0, 277, 0, 278, 187, 268, 0, 278, + 187, 277, 0, 188, 268, 187, 268, 187, 268, 187, + 268, 189, 0, 188, 268, 187, 268, 187, 268, 189, + 0, 4, 0, 4, 186, 92, 186, 4, 0, 188, + 281, 189, 0, 4, 184, 268, 185, 186, 93, 0, + 279, 0, 281, 187, 279, 0, 5, 0, 35, 182, + 282, 187, 282, 183, 0, 36, 182, 282, 183, 0, + 34, 182, 282, 183, 0, 34, 182, 282, 187, 278, + 183, 0, 34, 182, 4, 186, 4, 183, 0, 34, + 182, 4, 184, 268, 185, 186, 4, 183, 0 }; #endif @@ -633,28 +633,28 @@ static const short yyrline[] = { 0, 778, 789, 791, 792, 793, 794, 796, 798, 800, 831, 865, 912, 927, 936, 951, 963, 977, 1000, 1024, 1036, 1050, 1062, 1076, 1092, 1108, 1121, 1141, 1152, 1158, 1177, - 1188, 1196, 1202, 1208, 1227, 1233, 1239, 1255, 1262, 1268, - 1274, 1285, 1296, 1318, 1330, 1336, 1355, 1376, 1384, 1390, - 1396, 1402, 1414, 1420, 1426, 1438, 1444, 1449, 1454, 1461, - 1463, 1464, 1467, 1472, 1483, 1501, 1509, 1514, 1525, 1593, - 1613, 1620, 1624, 1644, 1657, 1668, 1690, 1712, 1733, 1739, - 1744, 1749, 1753, 1763, 1772, 1779, 1788, 1793, 1798, 1803, - 1808, 1813, 1818, 1823, 1828, 1836, 1841, 1846, 1851, 1856, - 1862, 1868, 1874, 1880, 1888, 1892, 1897, 1924, 1948, 1958, - 1977, 1995, 2013, 2035, 2056, 2077, 2091, 2112, 2117, 2128, - 2130, 2131, 2132, 2133, 2136, 2138, 2139, 2140, 2141, 2142, - 2143, 2144, 2145, 2152, 2153, 2154, 2155, 2156, 2157, 2158, - 2159, 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167, 2168, - 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, - 2179, 2180, 2181, 2182, 2183, 2185, 2186, 2187, 2188, 2189, - 2190, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, - 2200, 2201, 2202, 2203, 2204, 2205, 2210, 2215, 2216, 2217, - 2221, 2232, 2249, 2260, 2279, 2295, 2311, 2327, 2344, 2349, - 2353, 2357, 2361, 2366, 2371, 2375, 2379, 2385, 2389, 2394, - 2398, 2403, 2407, 2411, 2417, 2423, 2430, 2436, 2440, 2444, - 2454, 2461, 2472, 2486, 2502, 2522, 2546, 2552, 2556, 2560, - 2571, 2576, 2587, 2592, 2610, 2615, 2628, 2634, 2640, 2645, - 2653, 2666, 2670, 2688, 2702 + 1191, 1197, 1203, 1222, 1228, 1234, 1250, 1257, 1263, 1269, + 1280, 1291, 1316, 1322, 1341, 1362, 1370, 1376, 1382, 1391, + 1397, 1403, 1415, 1421, 1426, 1431, 1438, 1440, 1441, 1444, + 1449, 1454, 1469, 1484, 1505, 1523, 1531, 1536, 1547, 1615, + 1635, 1642, 1646, 1666, 1679, 1690, 1712, 1734, 1755, 1761, + 1766, 1771, 1775, 1785, 1794, 1801, 1810, 1815, 1820, 1825, + 1830, 1835, 1840, 1845, 1850, 1858, 1863, 1868, 1873, 1878, + 1884, 1890, 1896, 1902, 1910, 1914, 1919, 1946, 1970, 1980, + 1999, 2017, 2035, 2057, 2078, 2099, 2113, 2134, 2139, 2150, + 2152, 2153, 2154, 2155, 2158, 2160, 2161, 2162, 2163, 2164, + 2165, 2166, 2167, 2174, 2175, 2176, 2177, 2178, 2179, 2180, + 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2190, + 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, + 2201, 2202, 2203, 2204, 2205, 2207, 2208, 2209, 2210, 2211, + 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2219, 2220, 2221, + 2222, 2223, 2224, 2225, 2226, 2227, 2232, 2237, 2238, 2239, + 2243, 2254, 2271, 2282, 2301, 2317, 2333, 2349, 2366, 2371, + 2375, 2379, 2383, 2388, 2393, 2397, 2401, 2407, 2411, 2416, + 2420, 2425, 2429, 2433, 2439, 2445, 2452, 2458, 2462, 2466, + 2476, 2483, 2494, 2508, 2524, 2544, 2568, 2574, 2578, 2582, + 2593, 2598, 2609, 2614, 2632, 2637, 2650, 2656, 2662, 2667, + 2675, 2688, 2692, 2710, 2724 }; #endif @@ -727,8 +727,8 @@ static const short yyr1[] = { 0, 247, 247, 247, 247, 247, 247, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 249, 249, 249, 249, 250, - 250, 250, 251, 251, 252, 253, 253, 253, 254, 254, + 248, 248, 249, 249, 249, 249, 250, 250, 250, 251, + 251, 251, 251, 251, 252, 253, 253, 253, 254, 254, 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 256, 256, 256, 256, 256, 256, 257, 256, 258, 256, 259, 256, 256, 256, 256, 260, 256, @@ -767,10 +767,10 @@ static const short yyr2[] = { 0, 15, 1, 1, 1, 1, 1, 1, 1, 4, 7, 9, 6, 3, 6, 6, 9, 6, 9, 5, 8, 8, 11, 6, 9, 9, 9, 7, 8, 12, 6, - 5, 7, 7, 12, 7, 7, 9, 17, 8, 8, - 7, 7, 11, 5, 8, 12, 8, 22, 20, 8, - 8, 5, 8, 7, 8, 5, 11, 5, 9, 1, - 1, 1, 0, 2, 4, 4, 6, 3, 3, 3, + 7, 7, 12, 7, 7, 9, 17, 8, 8, 7, + 7, 11, 8, 12, 8, 22, 20, 8, 8, 8, + 7, 8, 5, 11, 5, 9, 1, 1, 1, 0, + 2, 6, 6, 6, 4, 4, 6, 3, 3, 3, 7, 2, 2, 6, 8, 8, 10, 1, 2, 1, 3, 4, 1, 8, 12, 14, 8, 12, 14, 0, 12, 0, 16, 0, 18, 8, 12, 14, 0, 12, @@ -808,1384 +808,1389 @@ static const short yydefact[] = { 0, 0, 0, 0, 0, 0, 265, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 339, 0, 0, + 0, 0, 0, 200, 0, 0, 0, 200, 258, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, + 0, 219, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 339, 0, 0, 0, 0, 0, 203, 0, 0, 0, - 203, 258, 259, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 212, 0, 219, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 333, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 333, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, + 267, 269, 0, 0, 0, 0, 0, 0, 0, 0, + 153, 210, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, + 357, 0, 358, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 341, 340, 0, + 0, 0, 0, 200, 200, 0, 0, 0, 0, 0, + 0, 0, 208, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 268, 267, 269, 0, 0, 0, 0, 0, - 0, 0, 0, 153, 210, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 350, 0, 0, + 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 331, 0, 0, 357, 0, 358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 341, 340, 0, 0, 0, 0, 203, - 203, 0, 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 379, + 0, 0, 0, 266, 0, 0, 367, 368, 0, 0, + 142, 0, 0, 0, 0, 149, 0, 283, 282, 280, + 281, 276, 278, 277, 279, 271, 270, 272, 273, 274, + 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 343, 342, 199, 0, 198, 197, 0, + 0, 0, 0, 0, 0, 0, 0, 205, 201, 257, + 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 350, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 349, 0, 0, 21, 0, + 332, 337, 71, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 285, 306, 286, 307, 287, 308, 288, 309, + 289, 310, 290, 311, 291, 312, 292, 313, 293, 314, + 305, 326, 294, 315, 0, 0, 296, 317, 297, 318, + 298, 319, 299, 320, 300, 321, 301, 322, 0, 0, + 0, 0, 0, 0, 0, 0, 382, 0, 0, 381, + 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, + 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 363, 0, 0, 0, 359, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 193, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 379, 0, 0, 0, 266, - 0, 0, 367, 368, 0, 0, 142, 0, 0, 0, - 0, 149, 0, 283, 282, 280, 281, 276, 278, 277, - 279, 271, 270, 272, 273, 274, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 343, 342, 202, 0, 201, 200, 0, 0, - 0, 0, 0, 205, 204, 257, 0, 0, 206, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, + 0, 348, 0, 334, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 152, 369, 370, 0, 0, 0, 0, 0, + 154, 155, 157, 0, 0, 373, 0, 377, 0, 163, + 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 364, 0, 360, 0, 170, 0, 0, 0, 0, + 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 256, 207, 0, 0, 0, 0, 0, 352, 0, 0, + 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 349, 0, 0, 21, 0, 332, 337, 71, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 84, 85, 285, 306, - 286, 307, 287, 308, 288, 309, 289, 310, 290, 311, - 291, 312, 292, 313, 293, 314, 305, 326, 294, 315, - 0, 0, 296, 317, 297, 318, 298, 319, 299, 320, - 300, 321, 301, 322, 0, 0, 0, 0, 0, 0, - 0, 0, 382, 0, 0, 381, 0, 0, 0, 0, - 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, - 67, 0, 0, 171, 0, 0, 0, 0, 184, 0, - 192, 0, 0, 363, 0, 0, 0, 359, 361, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 196, 198, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 351, 0, 348, 0, 334, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 152, 369, - 370, 0, 0, 0, 0, 0, 154, 155, 157, 0, - 0, 373, 0, 377, 0, 163, 284, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 364, 0, 360, - 0, 170, 0, 0, 0, 0, 250, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 256, 207, 0, 0, 0, 0, 0, - 352, 0, 0, 0, 214, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 260, 261, 262, 263, 264, 0, 0, 0, 0, 0, - 0, 0, 20, 0, 336, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 295, 316, 302, 323, 303, 324, 304, 325, 0, 384, - 383, 380, 0, 142, 0, 0, 0, 0, 150, 0, - 0, 0, 0, 0, 375, 68, 167, 175, 0, 176, - 0, 172, 0, 173, 194, 0, 0, 362, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 211, 0, 0, 0, 0, 203, 0, 0, 0, - 230, 0, 239, 0, 0, 181, 182, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 260, 261, 262, + 263, 264, 0, 0, 0, 0, 0, 0, 0, 20, + 0, 336, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 295, 316, 302, + 323, 303, 324, 304, 325, 0, 384, 383, 380, 0, + 142, 0, 0, 0, 0, 150, 0, 0, 0, 0, + 0, 375, 68, 167, 174, 0, 175, 0, 171, 0, + 172, 191, 0, 0, 362, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 211, 0, + 0, 0, 0, 200, 0, 0, 0, 230, 0, 239, + 0, 0, 0, 0, 0, 180, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 338, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, - 161, 0, 0, 0, 378, 0, 180, 191, 365, 0, - 0, 254, 185, 187, 0, 0, 253, 255, 193, 168, - 179, 190, 195, 0, 0, 0, 347, 0, 346, 0, - 0, 224, 0, 227, 0, 0, 236, 0, 0, 0, - 352, 0, 355, 0, 0, 0, 0, 216, 215, 0, - 0, 0, 0, 0, 23, 0, 32, 0, 36, 0, - 30, 0, 0, 35, 0, 40, 38, 0, 0, 0, - 0, 0, 0, 47, 0, 0, 0, 0, 0, 52, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 151, 156, 158, - 0, 164, 0, 0, 0, 177, 366, 0, 252, 251, - 165, 166, 203, 0, 199, 0, 0, 0, 0, 0, - 0, 0, 0, 354, 0, 353, 0, 0, 0, 0, - 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, + 161, 0, 0, 0, 378, 0, 179, 189, 365, 0, + 0, 254, 183, 185, 0, 0, 253, 255, 190, 168, + 178, 188, 192, 0, 0, 0, 347, 0, 346, 0, + 0, 224, 0, 227, 0, 0, 236, 0, 202, 203, + 204, 0, 0, 352, 0, 355, 0, 0, 0, 0, + 216, 215, 0, 0, 0, 0, 0, 23, 0, 32, + 0, 36, 0, 30, 0, 0, 35, 0, 40, 38, + 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, + 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 151, 156, 158, 0, 164, 0, 0, 0, 176, 366, + 0, 252, 251, 165, 166, 200, 0, 196, 0, 0, + 0, 0, 0, 0, 0, 0, 354, 0, 353, 0, + 0, 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 385, 0, 376, - 374, 0, 0, 0, 0, 345, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 245, 0, 0, 0, - 0, 0, 0, 356, 0, 0, 217, 0, 0, 37, - 0, 0, 0, 0, 27, 0, 33, 0, 39, 28, - 41, 0, 44, 0, 48, 49, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 162, 0, 0, 197, 0, - 0, 0, 0, 232, 0, 249, 0, 0, 246, 241, - 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 385, 0, 376, 374, 0, 0, 0, 0, 345, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, + 0, 0, 0, 0, 0, 0, 356, 0, 0, 217, + 0, 0, 37, 0, 0, 0, 0, 27, 0, 33, + 0, 39, 28, 41, 0, 44, 0, 48, 49, 0, + 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, + 0, 194, 0, 0, 0, 0, 232, 0, 249, 0, + 0, 246, 241, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 88, 92, 96, 136, 0, 0, 372, 0, 344, 225, - 0, 228, 0, 0, 0, 231, 237, 0, 0, 240, - 169, 174, 0, 0, 186, 0, 0, 0, 0, 0, - 31, 34, 42, 0, 43, 50, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 234, 0, 0, 243, + 0, 0, 0, 88, 92, 96, 136, 0, 0, 372, + 0, 344, 225, 0, 228, 0, 0, 0, 231, 237, + 0, 0, 240, 169, 173, 0, 0, 184, 0, 0, + 0, 0, 0, 31, 34, 42, 0, 43, 50, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, + 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 140, 371, 0, 226, 0, 229, 0, 0, - 0, 238, 0, 0, 0, 0, 0, 0, 26, 29, + 0, 0, 0, 0, 0, 140, 371, 0, 226, 0, + 229, 0, 0, 0, 238, 0, 0, 0, 0, 0, + 0, 26, 29, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 86, 0, 90, 0, 94, + 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 86, 0, 90, 0, 94, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 233, 0, 0, 248, + 242, 0, 0, 0, 0, 0, 0, 46, 22, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 87, 89, + 91, 93, 95, 97, 135, 137, 0, 138, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 100, 104, 108, 0, 0, 235, 247, + 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 139, 141, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 233, 0, 0, 248, 242, 0, 0, - 0, 0, 0, 0, 46, 22, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 87, 89, 91, 93, 95, - 97, 135, 137, 0, 138, 178, 0, 0, 0, 0, + 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 98, 0, 102, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 100, 104, 108, 0, 0, 235, 247, 244, 0, 0, + 0, 0, 186, 0, 24, 0, 0, 0, 0, 0, + 0, 99, 101, 103, 105, 107, 109, 0, 0, 0, + 0, 112, 116, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 139, 141, 0, 0, 8, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, - 0, 102, 0, 106, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, - 0, 24, 0, 0, 0, 0, 0, 0, 99, 101, - 103, 105, 107, 109, 0, 0, 0, 0, 112, 116, - 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 110, 0, 114, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 110, 0, 114, 0, 118, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, - 113, 115, 117, 119, 121, 0, 124, 128, 132, 25, - 0, 0, 0, 0, 0, 0, 0, 122, 0, 126, - 0, 130, 0, 0, 0, 0, 0, 0, 123, 125, - 127, 129, 131, 133, 0, 0, 0 + 0, 0, 111, 113, 115, 117, 119, 121, 0, 124, + 128, 132, 25, 0, 0, 0, 0, 0, 0, 0, + 122, 0, 126, 0, 130, 0, 0, 0, 0, 0, + 0, 123, 125, 127, 129, 131, 133, 0, 0, 0 }; -static const short yydefgoto[] = { 1695, +static const short yydefgoto[] = { 1698, 80, 5, 6, 19, 20, 21, 22, 7, 65, 66, - 67, 412, 1442, 605, 1378, 1444, 606, 1379, 1446, 607, - 1380, 1579, 608, 1550, 1581, 609, 1551, 1583, 610, 1552, - 1640, 611, 1626, 1642, 612, 1627, 1644, 613, 1628, 1677, - 614, 1671, 1679, 615, 1672, 1681, 616, 1673, 1448, 617, - 1381, 1514, 618, 1450, 133, 235, 68, 535, 525, 526, - 527, 528, 72, 73, 74, 75, 1085, 1343, 1419, 1088, - 1348, 1423, 1236, 1237, 76, 77, 896, 327, 136, 344, - 171, 230, 405, 991, 1092, 1093, 329, 465, 814, 679, - 815, 137 + 67, 406, 1445, 599, 1381, 1447, 600, 1382, 1449, 601, + 1383, 1582, 602, 1553, 1584, 603, 1554, 1586, 604, 1555, + 1643, 605, 1629, 1645, 606, 1630, 1647, 607, 1631, 1680, + 608, 1674, 1682, 609, 1675, 1684, 610, 1676, 1451, 611, + 1384, 1517, 612, 1453, 133, 232, 68, 529, 516, 517, + 518, 519, 72, 73, 74, 75, 1085, 1346, 1422, 1088, + 1351, 1426, 1239, 1240, 76, 77, 893, 321, 136, 338, + 168, 227, 399, 991, 1095, 1096, 323, 459, 808, 673, + 809, 137 }; -static const short yypact[] = { 2200, - 33,-32768,-32768, -92,-32768, 25, 2380,-32768, 14, 62, - 100, 103, 110, 115, 207, 81, 113, 122,-32768,-32768, --32768,-32768, 1806, 129, 313, -159, 177, 196, -26, -31, - 256, 265, 161, 274, 310, 341, 385, 464, 423, 170, - 297, 299, 117, 117, 303, 339, 304, 454, 9, 510, - 511, 39, 322, 338, -24, 5,-32768, 355,-32768, 517, --32768, 541, 563, 526,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 298, 14, - 2403,-32768,-32768,-32768,-32768,-32768, 457, 457, 605,-32768, - 80, 7,-32768,-32768,-32768,-32768, -83, 1, 12, 78, - 157, 302, 327, 331, 345, 354, 373, 374, 377, 381, - 382, 403, 404, 407, 425, 429, 432, 458, 461, 462, --32768,-32768,-32768,-32768, 1990, 1990, 1990,-32768,-32768, 1990, - 708, 22, 1990, 645, 409,-32768, 647, 653,-32768, 1990, - 1990, 1990, 1990, 477, 1990, 1990, 493, 1990, 1990, 1990, - 1682, 1990, 494, 501, 518, 1682, 516, 519, 531, 534, - 566, 586, 597, 704, 117, 117, 117, 1990, 1990, 119, --32768, 152, 117, 593, 594, 596,-32768, 1682, 502, 780, --32768,-32768,-32768, 1682, 1682, 1990, 1990, -69, 1990, 692, - 1990, 1990,-32768, 783,-32768, 614,-32768, 14, 625, 627, - 631, 632, 633, 634, 636, 638, 639, 640, 641, 648, - 649, 650, 651, 652, 654, 655, 656, 657, 666, 691, - 693, 694, 695, 700, 701, 702, 706, 707, 807, 642, - 644, 687, 1990, 831,-32768, 117,-32768, 1990, 1990, 1990, - 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, - 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, - 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, - 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 40, - 36, 36, 705, 705, 705, 2109, 884, 2020, 5239, 315, - 709, 885, 431,-32768,-32768, 1990, 1990, 1990, 1990, 1990, - 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, --32768, -134, 5889, 763, 5912, 5935, 1990, 5958, 2045, 1990, - 2226, 5981, 6004, 114, 1712, 2020, 697, 887,-32768, 6027, - 1990, 1990, 1990, 895, 1990, 1990, 1990, 1990, 1990, 1990, - 1990, 732, 198,-32768,-32768, 2803, 2824, 117, 117, 472, - 472, 201, 1990, 1990, 1990, 2267, 153, 1990,-32768, 2317, - 911, 912, 6050, 6073, 832, 1990, 6096, 735, 1506, 6119, --32768, 1990, 786, 937, 940, 941, 942, 943, 944, 946, - 948, 949, 953, 955, 958, 959, 960, 961, 962, 963, - 964, 965, 971, 972, 973, 976, 842, 978, 979, 982, - 984, 987, 986,-32768, -59, 990, 991, 993, 5264, 90, - 165, 13, 6142, 5289, 6165, 5314, 6188, 5339, 6211, 5364, - 6234, 5389, 6257, 5414, 6280, 5439, 6303, 5464, 6326, 5489, - 6349, 5514, 6372, 5539, 2845, 2866, 6395, 5564, 6418, 5589, - 6441, 5614, 6464, 5639, 6487, 5664, 6510, 5689, 2887, 2908, - 2929, 2950, 2971, 2992, 436,-32768, 138, 809, 817,-32768, - 1682, 2050, 697,-32768, 428, 264, 36, 1990, 995, 998, - 10,-32768, 1949, 226, 496, 854, 854, -39, -39, -39, - -39, 295, 295, 705, 705, 705, 705, 999, 2020, 997, - 1000, 1023, 1025, 6533, 1026, 1028, 6556, 1030, 1032, 1033, - 1341, 311, 2020, 434, 1990, 1990, 1034, 2389, 6579, 6602, - 1990, 2412, 2435, 6625, 6648, 6671, 6694, 6717, 851, 117, - 1990, 1990,-32768,-32768,-32768, 853, 1511,-32768, 856, 1990, - 3013, 3034, 3055,-32768,-32768,-32768, 1990, 5714,-32768, 855, - 858, 1040, 1041, 867, 6740, 1044, 1990, 1990,-32768, 6763, - 899, 869, 870, 871, 872, 873, 874, 878, 879, 890, - 891, 892, 893, 902, 914, 915, 916, 918, 919, 920, - 921, 924, 930, 947, 950, 952, 954, 966, 967, 969, - 970,-32768, 1049, 927,-32768, 975, -7,-32768,-32768, 917, - 945, 956, 968, 983, 985, 988, 992, 996, 1013, 1014, - 1015, 1016, 1018, 1122,-32768,-32768,-32768,-32768,-32768,-32768, +static const short yypact[] = { 2214, + 43,-32768,-32768, -123,-32768, 5, 2331,-32768, 21, 64, + 92, 103, 139, 158, 165, 29, 111, 131,-32768,-32768, +-32768,-32768, 1795, 146, 181, 178, 186, 193, -45, 130, + 208, 229, 301, 235, 313, 341, 389, 300, 383, 359, + 255, 259, -77, -77, 284, 253, 304, 399, 12, 489, + 494, 84, 324, 328, -15, 17,-32768, 335,-32768, 537, +-32768, 558, 565, 569,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 621, 21, + 2354,-32768,-32768,-32768,-32768,-32768, 455, 455, 643,-32768, + 315, 7,-32768,-32768,-32768,-32768, -94, -46, 198, 203, + 226, 254, 275, 279, 282, 321, 325, 332, 375, 376, + 397, 398, 401, 404, 405, 424, 425, 467, 470, 480, +-32768,-32768,-32768,-32768, 1979, 1979, 1979,-32768,-32768, 1979, + 901, 58, 1979, 659, 403,-32768, 662, 693,-32768, 1979, + 1979, 1979, 521, 1979, 525, 1979, 1979, 1671, 1979, 522, + 534, 544, 1671, 541, 549, 560, 576, 583, 593, 601, + 799, -77, -77, -77, 1979, 1979, -72,-32768, -14, -77, + 620, 633, 644,-32768, 1671, 646, 827,-32768,-32768,-32768, + 1671, 1671, 1979, 1979, -69, 1979, 739, 1979, 1979,-32768, + 829,-32768, 654,-32768, 21, 657, 663, 673, 674, 675, + 676, 677, 684, 694, 695, 696, 697, 698, 701, 702, + 703, 704, 705, 706, 707, 708, 709, 712, 717, 718, + 719, 720, 724, 725, 726, 929, 754, 759, 756, 1979, + 941,-32768, -77,-32768, 1979, 1979, 1979, 1979, 1979, 1979, + 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, + 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, + 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, + 1979, 1979, 1979, 1979, 1979, 1979, 50, 47, 47, 765, + 765, 765, 2123, 942, 2009, 5254, 141, 762, 943, 429, +-32768,-32768, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, + 1979, 1979, 1979, 1979, 1979, 1979, 1979,-32768, -127, 2240, + 5904, 5927, 1979, 5950, 1979, 5973, 5996, 318, 1701, 2009, + 1609, 944,-32768, 6019, 1979, 1979, 1979, 945, 1979, 1979, + 1979, 1979, 1979, 1979, 1979, 772, 163,-32768,-32768, 2818, + 2839, -77, -77, 417, 417, 174, 1979, 1979, 1979, -8, + 257, 1979,-32768, 2155, 949, 950, 6042, 6065, 868, 1979, + 6088, 776, 1938, 6111,-32768, 1979, 812, 964, 965, 966, + 981, 982, 983, 984, 986, 990, 991, 992, 993, 995, + 996, 997, 999, 1000, 1001, 1016, 1017, 1018, 1019, 1020, + 886, 1022, 1023, 1024, 1028, 1031, 1030,-32768, -31, 1032, + 1033, 1035, 5279, 289, -3, 714, 6134, 5304, 6157, 5329, + 6180, 5354, 6203, 5379, 6226, 5404, 6249, 5429, 6272, 5454, + 6295, 5479, 6318, 5504, 6341, 5529, 6364, 5554, 2860, 2881, + 6387, 5579, 6410, 5604, 6433, 5629, 6456, 5654, 6479, 5679, + 6502, 5704, 2902, 2923, 2944, 2965, 2986, 3007, 430,-32768, + 23, 849, 858,-32768, 1671, 2039, 1609,-32768, 428, 19, + 47, 1979, 1039, 1042, 13,-32768, 1953, 642, 809, 486, + 486, 310, 310, 310, 310, 364, 364, 765, 765, 765, + 765, 1048, 2009, 1049, 1050, 1051, 6525, 1052, 6548, 1053, + 1054, 1227, 362, 2009, 432, 1979, 1979, 1056, 2377, 6571, + 6594, 1979, 2400, 2423, 6617, 6640, 6663, 6686, 6709, 878, + -77, 1979, 1979,-32768,-32768,-32768, 876, 2396,-32768, 877, + 1979, 3028, 3049, 3070, -42, -41, -39,-32768,-32768,-32768, + 1979, 5729,-32768, 879, 880, 1062, 1063, 892, 6732, 1068, + 1979, 1979,-32768, 6755, 922, 893, 894, 895, 897, 898, + 900, 903, 904, 905, 906, 907, 908, 917, 927, 928, + 930, 933, 934, 951, 952, 953, 954, 956, 958, 967, + 968, 969, 970, 972, 973,-32768, 1074, 978,-32768, 975, + 82,-32768,-32768, 955, 971, 985, 987, 988, 989, 994, + 998, 1021, 1029, 1034, 1040, 1041, 1043, 1082,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - 1990, 1990,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768, 1990, 1990, 1990, 1990, 1990, 1990, - 1990, 1125,-32768, 2020, 36,-32768, 1124, 2020, 957, 38, - 1990, 1129, 1130, 602,-32768, 1133, 974, 11, 1139, 1990, --32768, 159, 117,-32768, 1682, 1682, 1140, 1682,-32768, 1144, --32768, 1682, 1682,-32768, 2020, 1461, 437,-32768, 1964, 682, - 980, 1145, 1157, 1159, 290, 1162, 1165, 1166, 1168, 1170, - 1173, 1200, 1127, 231, 3076, 3097,-32768,-32768, 2458, 117, - 117, 117, 736, 1154, 1990, 1990, 1682, 1682, 1990, 1201, - 1682, 1979, 379, 1202, 1060, 1208, 1990, 1990, 117, 1209, - 1210, 1042, 1211, 1213, 1682, 1682, 1214, 117, 1215, 1216, - 1682, 1682, 1218, 1219, 1220, 1222, 1223, 1682, 30, 1682, - 1225, 1224, 1230, 1242, 1244,-32768, 1243, 457, 1247,-32768, - 1185, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, - 1990, 1990, 1990, 1990, 1990,-32768, 6786, 5739, 6809, 5764, - 6832, 5789, 6855, 5814, 5839, 1065, 188, 1070,-32768, 697, --32768, 17, 343, 1066, 1264, 923,-32768,-32768,-32768, 11, - 1990, 1087, 1990,-32768, 438,-32768, 7407, 1268, 19, 16, - 1269, 1682, 1270, 1682, 1271, 1273, 441,-32768, 2020,-32768, - 1990,-32768, 1990, 1682, 1682, 1682,-32768, 292, 1682, 1682, - 1682, 1682, 1682, 1682, 1682, 402, 1990, 1990, 1990, 1092, - -137, -108, -89,-32768,-32768, 3118, 3139, 1275, 1276, 6878, - 21, 1192, 1990, 1990,-32768, 1097, 14, 1099, 3160, 3181, - -125, 1100, 1105, 1102, 1107, 1104, 1109, 1106, 1108, -105, - 1110, 1111, 1113, 1121, 1132, 1142, 1143, 1146, 1148, 1115, --32768,-32768,-32768,-32768,-32768, 1149, 1150, 1151, 1155, 1160, - 1126, 1161,-32768, 1188, 90, 1305, 3202, 3223, 3244, 3265, - 3286, 3307, 3328, 3349, 3370, 3391, 3412, 3433, 3454, 3475, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 1163,-32768, --32768,-32768, 1682, 36, 1990, 1326, 1336, 10,-32768, 1340, - 5864, 1284, 3496, 11,-32768,-32768,-32768,-32768, 117,-32768, - 1383,-32768, 1384,-32768,-32768, 1206, 442, 7407, 3517, 1386, - 1387, 1388, 1990, 1990, 1389, 1390, 1391, 1392, 1393, 1394, - 1396,-32768, 1924, 2481, 6901, 630, 472, 117, 1398, 117, - 1400, 117, 1401, 1990, 1990,-32768,-32768, 1407, 1682, 1682, - 1334, 1682, 193, 6924, 1990, 14, 1423, 1990, 1682, 1421, - 1425, 1424, 1258, 1426, 30, 1427, 1431, 1990, 1432, 1434, - 1433, 1435, 1437, 30, 1990, 1990, 1990, 1682, 1446, 1451, - 30, 1990, 1453, 1454, 1452, 1990, 457,-32768,-32768, 1990, - 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, - 1990, 1990, 1990, 1455, 1456, 1457, 951,-32768, 1459, 1462, --32768, 1274, 1283, 1990,-32768, 34,-32768,-32768,-32768, 1309, - 1990,-32768,-32768,-32768, 1069, 1153,-32768,-32768,-32768,-32768, --32768,-32768,-32768, 1248, 1489, 1308,-32768, 1990,-32768, 1272, - 245,-32768, 248,-32768, 1311, 254,-32768, 1312, 3538, 3559, - 21, 253,-32768, 460, 1313, 1420, 1990,-32768,-32768, 3580, - 14, 1327, 3601, 1322,-32768, 1324,-32768, 1328,-32768, 1333, --32768, 1330, 6947,-32768, 1332,-32768,-32768, 1337, 1338, 6970, - 3622, 6993, 1335,-32768, 1348, 1352, 3643, 1349, 1363,-32768, - 3664, 1360, 3685, 3706, 3727, 3748, 3769, 3790, 3811, 3832, - 3853, 3874, 3895, 3916, 3937, 3958, 1365,-32768,-32768,-32768, - 11,-32768, 1464, 1520, 3979,-32768,-32768, 4000,-32768,-32768, --32768,-32768, 472, 1704,-32768, 1744, 1744, -38, 1744, -38, - 1990, 1990, 1468,-32768, 1682,-32768, 1682, 1990, 2504, 1682, - 1412, 1566, 21, 30, 1571, 1990, 1570, 30, 1572, 1574, - 1573, 1575, 1576, 1990, 1577, 1682, 1578, 1579, 1990, 1583, - 1581, 1990, 1585, 1990, 1990, 1990, 1990, 1990, 1990, 1990, - 1990, 1990, 1990, 1990, 1990, 1990, 1990,-32768, 1582,-32768, --32768, 1990, 1586, 1403, 1990,-32768, 1744, 1744, 1990, 2527, - 257, 2550, 259, 1593, 1413, -34,-32768, 2573, 262, -22, - 2596, 2619, 1414,-32768, 1416, 1631,-32768, 1411, 14,-32768, - 1417, 1418, 1419, 4021,-32768, 1430,-32768, 1438,-32768,-32768, --32768, 7016,-32768, 1428,-32768,-32768, 7039, 1439,-32768, 7062, - 1436, 4042, 4063, 4084, 4105, 4126, 4147, 4168, 4189, 4210, - 7085, 7108, 7131, 7154, 4231,-32768, 2323, 1441,-32768, 2642, - 2012, 1608, 1990, 1611, 1990,-32768, 1682, 1612,-32768, 1614, - 1990, 1624, 1628, 1629, 1682, 1682,-32768, 1630, 14, 30, - 30, 30, 30, 1633, 1634, 1635, 30, 1636, 1638, 1639, - 1642, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, --32768,-32768,-32768,-32768, 1990, 1990,-32768, 1643,-32768,-32768, - 2665,-32768, 1466, 2688, 1463,-32768,-32768, 1467, 2711,-32768, --32768,-32768, 1469, 1470,-32768, 14, 1474, 1476, 1482, 1483, --32768,-32768,-32768, 1485,-32768,-32768,-32768, 1496, 4252, 4273, - 4294, 4315, 4336, 4357, 4378, 4399, 4420, 1500, 1501, 1529, - 1530, 7177, 2734, 1497, 1651, -38, 1713, 1682, -38, 1714, - 1682, 1657, 1596, 30, 30, 1743, 1745, 30, 1772, 1990, - 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, - 1990, 36,-32768,-32768, 1773,-32768, -11,-32768, 1562, 463, - -9,-32768, 1591, 1592, 1594, 14, 1597, 1598,-32768,-32768, - 1600, 1604, 4441, 4462, 4483, 4504, 4525, 4546, 4567, 4588, - 4609, 467, 7407, 487, 7407, 491, 7407, 492,-32768, 1601, - 1599, 1774, -38, 1682, 1784, 1785, -38, 1709, 1990, 14, - 30, 1682, 1801, 1802, 1990, 1990, 1990, 1990, 1990, 1990, - 1990, 1990, 1990, 1990, 1833, 1990, 1838, 1990, 1839, 36, - 1840, 36, 1841,-32768, -8, 1659,-32768,-32768, 3, 1661, - 4630, 14, 1663, 1664,-32768,-32768, 4651, 4672, 4693, 4714, - 4735, 4756, 7200, 7223, 7246, 7407,-32768, 7407,-32768, 7407, --32768,-32768,-32768, 498,-32768,-32768, 1846, 1849, 1850, 1990, - 1990, 1703, 30, 1682, 1990, 1990, 1990, 1990, 1990, 1990, --32768,-32768,-32768, 36, 1854,-32768,-32768,-32768, 4777, 2757, - 1705, 1675, 1676, 4798, 4819, 4840, 4861, 4882, 4903, 1692, - 1693, 1694,-32768,-32768, 1990, 1880,-32768, 1682, 30, 1990, - 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 2780,-32768, - 1700, 1707, 4924, 4945, 4966, 4987, 5008, 5029, 503, 7407, - 504, 7407, 508, 7407, 1882, 1682, 1886, 1990, 1990, 1990, - 1990, 1990, 1990, 1990, 1889, 1990, 1890, 1990, 1891,-32768, - 1711,-32768, 5050, 5071, 5092, 7269, 7292, 7315, 7407,-32768, - 7407,-32768, 7407,-32768, 1682, 1990, 1990, 1990,-32768,-32768, --32768, 1715, 5113, 5134, 5155, 1716, 1717, 1718, 1682, 1990, - 1990, 1990, 1990, 1990, 1990, 1720, 5176, 5197, 5218, 509, - 7407, 512, 7407, 554, 7407, 30, 1990, 1990, 1990, 1990, - 1893, 1990, 1895, 1990, 1897, 1725, 7338, 7361, 7384, 7407, --32768, 7407,-32768, 7407,-32768, 1903,-32768,-32768,-32768,-32768, - 1722, 1723, 1724, 1990, 1990, 1990, 557, 7407, 558, 7407, - 591, 7407, 1990, 1907, 1990, 1908, 1990, 1911, 7407,-32768, - 7407,-32768, 7407,-32768, 1918, 1919,-32768 +-32768,-32768,-32768,-32768, 1979, 1979,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 1979, 1979, + 1979, 1979, 1979, 1979, 1979, 1112,-32768, 2009, 47,-32768, + 1142, 2009, 979, 62, 1979, 1157, 1159, 509,-32768, 1161, + 1014, 14, 1166, 1979,-32768, 135, -77, 1671, 1671, 1168, + 1671, 1174, 1671, 1671,-32768, 2009, 1464, 433,-32768, 1968, + 550, 1011, 1176, 1193, 1194, 251, 1197, 1203, 1205, 1207, + 1208, 1210, 1214, 1169, 187, 3091, 3112,-32768,-32768, 2446, + -77, -77, -77, 2009, 2009, 2009, 599, 1172, 1979, 1979, + 1671, 1671, 1979, 1217, 1671, 2064, 361, 1219, 1077, 1225, + 1979, 1979, -77, 1226, 1230, 1061, 1232, 1257, 1671, 1671, + 1258, -77, 1259, 1260, 1671, 1671, 1261, 1262, 1263, 1264, + 1265, 1671, 443, 1671, 1266, 1269, 1271, 1267, 1268,-32768, + 1272, 455, 1273,-32768, 1211, 1979, 1979, 1979, 1979, 1979, + 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979,-32768, + 6778, 5754, 6801, 5779, 6824, 5804, 6847, 5829, 5854, 1097, + 153, 1113,-32768, 1609,-32768, 128, 173, 1111, 1291, 679, +-32768,-32768,-32768, 14, 1979, 1114, 1979,-32768, 436,-32768, + 2185, 1293, 32, 44, 1295, 1671, 1305, 1671, 1306, 1307, + 447,-32768, 2009,-32768, 1979,-32768, 1979, 1671, 1671, 1671, +-32768, 465, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 688, + 1979, 1979, 1979, 1126, -98, -75, 167, 451, 454, 457, +-32768,-32768, 3133, 3154, 1311, 1312, 6870, -29, 1228, 1979, + 1979,-32768, 1132, 21, 1134, 3175, 3196, -103, 1135, 1140, + 1137, 1144, 1138, 1145, 1143, 1150, -96, 1160, 1146, 1165, + 1162, 1163, 1164, 1167, 1170, 1178, 1173,-32768,-32768,-32768, +-32768,-32768, 1179, 1180, 1181, 1182, 1183, 1175, 1184,-32768, + 1185, 289, 1347, 3217, 3238, 3259, 3280, 3301, 3322, 3343, + 3364, 3385, 3406, 3427, 3448, 3469, 3490,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768, 1177,-32768,-32768,-32768, 1671, + 47, 1979, 1349, 1355, 13,-32768, 1367, 5879, 1282, 3511, + 14,-32768,-32768,-32768,-32768, -77,-32768, 1369,-32768, 1370, +-32768,-32768, 1192, 458, 2185, 3532, 1372, 1373, 1387, 1979, + 1979, 1389, 1395, 1396, 1397, 1399, 1400, 1401,-32768, 1913, + 2469, 6893, 1693, 417, -77, 1402, -77, 1404, -77, 1405, + 1408, 1410, 1411, 1979, 1979,-32768,-32768, 1354, 1671, 1671, + 1327, 1671, 281, 6916, 1979, 21, 1416, 1979, 1671, 1414, + 1419, 1415, 1250, 1420, 443, 1421, 1422, 1979, 1423, 1425, + 1426, 1427, 1428, 443, 1979, 1979, 1979, 1671, 1429, 1431, + 443, 1979, 1433, 1434, 1432, 1979, 455,-32768,-32768, 1979, + 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, + 1979, 1979, 1979, 1436, 1435, 1437, 700,-32768, 1448, 1438, +-32768, 1256, 1274, 1979,-32768, 37,-32768,-32768,-32768, 1276, + 1979,-32768,-32768,-32768, 938, 961,-32768,-32768,-32768,-32768, +-32768,-32768,-32768, 1171, 1451, 1275,-32768, 1979,-32768, 1270, + 192,-32768, 194,-32768, 1277, 199,-32768, 1278,-32768,-32768, +-32768, 3553, 3574, -29, 166,-32768, 499, 1281, 1376, 1979, +-32768,-32768, 3595, 21, 1287, 3616, 1284,-32768, 1285,-32768, + 1310,-32768, 1315,-32768, 1316, 6939,-32768, 1317,-32768,-32768, + 1319, 1328, 6962, 3637, 6985, 1325,-32768, 1330, 1332, 3658, + 1329, 1334,-32768, 3679, 1331, 3700, 3721, 3742, 3763, 3784, + 3805, 3826, 3847, 3868, 3889, 3910, 3931, 3952, 3973, 1336, +-32768,-32768,-32768, 14,-32768, 1406, 1516, 3994,-32768,-32768, + 4015,-32768,-32768,-32768,-32768, 417, 2001,-32768, 1733, 1733, + 36, 1733, 36, 1979, 1979, 1430,-32768, 1671,-32768, 1671, + 1979, 2492, 1671, 1374, 1519, -29, 443, 1523, 1979, 1521, + 443, 1522, 1526, 1524, 1525, 1527, 1979, 1528, 1671, 1530, + 1531, 1979, 1529, 1532, 1979, 1534, 1979, 1979, 1979, 1979, + 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, +-32768, 1543,-32768,-32768, 1979, 1545, 1362, 1979,-32768, 1733, + 1733, 1979, 2515, 201, 2538, 206, 1546, 1365, -19,-32768, + 2561, 220, -17, 2584, 2607, 1368,-32768, 1371, 1418,-32768, + 1375, 21,-32768, 1378, 1379, 1380, 4036,-32768, 1377,-32768, + 1392,-32768,-32768,-32768, 7008,-32768, 1390,-32768,-32768, 7031, + 1412,-32768, 7054, 1407, 4057, 4078, 4099, 4120, 4141, 4162, + 4183, 4204, 4225, 7077, 7100, 7123, 7146, 4246,-32768, 2340, + 1413,-32768, 2630, 2791, 1553, 1979, 1555, 1979,-32768, 1671, + 1556,-32768, 1557, 1979, 1578, 1595, 1596, 1671, 1671,-32768, + 1597, 21, 443, 443, 443, 443, 1598, 1600, 1601, 443, + 1603, 1612, 1613, 1615, 1979, 1979, 1979, 1979, 1979, 1979, + 1979, 1979, 1979,-32768,-32768,-32768,-32768, 1979, 1979,-32768, + 1616,-32768,-32768, 2653,-32768, 1443, 2676, 1439,-32768,-32768, + 1445, 2699,-32768,-32768,-32768, 1450, 1449,-32768, 21, 1452, + 1453, 1440, 1441,-32768,-32768,-32768, 1455,-32768,-32768,-32768, + 1456, 4267, 4288, 4309, 4330, 4351, 4372, 4393, 4414, 4435, + 1457, 1459, 1460, 1462, 7169, 2722, 1466, 1619, 36, 1638, + 1671, 36, 1645, 1671, 1569, 1472, 443, 443, 1652, 1653, + 443, 1655, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, + 1979, 1979, 1979, 1979, 47,-32768,-32768, 1656,-32768, -7, +-32768, 1474, 500, -6,-32768, 1476, 1477, 1480, 21, 1482, + 1483,-32768,-32768, 1489, 1490, 4456, 4477, 4498, 4519, 4540, + 4561, 4582, 4603, 4624, 512, 2185, 515, 2185, 543, 2185, + 546,-32768, 1488, 1517, 1672, 36, 1671, 1702, 1703, 36, + 1589, 1979, 21, 443, 1671, 1728, 1729, 1979, 1979, 1979, + 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1732, 1979, 1734, + 1979, 1760, 47, 1761, 47, 1762,-32768, 0, 1518,-32768, +-32768, 2, 1551, 4645, 21, 1582, 1599,-32768,-32768, 4666, + 4687, 4708, 4729, 4750, 4771, 7192, 7215, 7238, 2185,-32768, + 2185,-32768, 2185,-32768,-32768,-32768, 547,-32768,-32768, 1779, + 1781, 1782, 1979, 1979, 1634, 443, 1671, 1979, 1979, 1979, + 1979, 1979, 1979,-32768,-32768,-32768, 47, 1785,-32768,-32768, +-32768, 4792, 2745, 1636, 1606, 1607, 4813, 4834, 4855, 4876, + 4897, 4918, 1608, 1640, 1646,-32768,-32768, 1979, 1789,-32768, + 1671, 443, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, + 1979, 2768,-32768, 1610, 1618, 4939, 4960, 4981, 5002, 5023, + 5044, 551, 2185, 552, 2185, 570, 2185, 1827, 1671, 1829, + 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1830, 1979, 1831, + 1979, 1832,-32768, 1654,-32768, 5065, 5086, 5107, 7261, 7284, + 7307, 2185,-32768, 2185,-32768, 2185,-32768, 1671, 1979, 1979, + 1979,-32768,-32768,-32768, 1657, 5128, 5149, 5170, 1651, 1659, + 1661, 1671, 1979, 1979, 1979, 1979, 1979, 1979, 1658, 5191, + 5212, 5233, 589, 2185, 592, 2185, 612, 2185, 443, 1979, + 1979, 1979, 1979, 1834, 1979, 1844, 1979, 1845, 1669, 7330, + 7353, 7376, 2185,-32768, 2185,-32768, 2185,-32768, 1863,-32768, +-32768,-32768,-32768, 1682, 1683, 1687, 1979, 1979, 1979, 635, + 2185, 639, 2185, 640, 2185, 1979, 1870, 1979, 1871, 1979, + 1873, 2185,-32768, 2185,-32768, 2185,-32768, 1881, 1884,-32768 }; static const short yypgoto[] = {-32768, - -25,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768, 1331,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, + -33,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768, 1302,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768, -284, -18,-32768, 1915, 1916, -335, - -16, 1917,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768, -1119, -1228,-32768,-32768, -984, -23,-32768, 361, --32768, -84,-32768, -1072, 935, 228, -183, -319, -800, 1024, --32768, -279 +-32768,-32768,-32768,-32768, -285, -20,-32768, 1879, 1880, -341, + 91, 1883,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768, -1133, -1234,-32768,-32768, -999, -23,-32768, 385, +-32768, -87,-32768, -1066, 902, 214, -228, -310, -797, 959, +-32768, -265 }; -#define YYLAST 7588 +#define YYLAST 7559 static const short yytable[] = { 135, - 457, 458, 459, 231, 134, 468, 504, 1299, 190, 940, - 236, 1299, 179, 677, 812, 529, 78, 188, 1173, 365, - 1110, 948, 140, 93, 947, 290, 1234, 10, 141, 1119, - 1234, 1235, 147, 348, 349, 1235, 1126, 144, 8, 1156, - 456, 803, 1234, 455, 456, 348, 349, 1235, 488, 978, - 1240, 979, 489, 1234, 198, 1234, 1234, 1000, 1235, 9, - 1235, 1235, 348, 349, 949, 348, 349, 1234, 81, 118, - 119, 120, 1235, 118, 119, 120, 184, 1009, 980, 185, - 981, 348, 349, 590, 591, 592, 593, 594, 595, 596, - 597, 598, 599, 600, 601, 602, 603, 982, 238, 983, - 239, 283, 284, 285, 464, 82, 286, 289, 83, 293, - 1251, 180, 366, 291, 292, 84, 313, 314, 315, 316, - 85, 318, 319, 582, 321, 322, 323, 583, 330, 804, - 805, 305, 306, 307, 308, 309, 891, 892, 893, 894, - 895, 310, 464, 1055, 346, 347, 11, 12, 13, 14, - 15, 16, 17, 18, 1298, 145, 148, 189, 536, 537, - 356, 146, 363, 364, 360, 367, 1302, 369, 370, 682, - 128, 129, 373, 121, 122, 123, 124, 1452, 769, 1456, - 1517, 671, 240, 697, 241, 79, 191, 673, 1299, 348, - 349, 1519, 1299, 242, 237, 243, 181, 678, 813, 1252, - 1097, 604, 989, 1256, 348, 349, 151, 160, 990, 409, - 161, 162, 86, 163, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, - 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, - 449, 450, 451, 452, 453, 454, 1299, 128, 129, 244, - 1299, 245, 87, 233, 463, 234, 1417, 128, 129, 1421, - 93, 469, 473, 474, 475, 476, 477, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 166, 167, 348, - 349, 128, 129, 494, 88, 837, 497, 501, 168, 234, - 197, 284, 463, 89, 169, 464, 350, 508, 509, 510, - 138, 512, 513, 514, 515, 516, 517, 518, 139, 464, - 663, 467, 348, 349, 664, 1357, 1358, 1359, 1360, 531, - 532, 533, 1364, 1485, 538, 348, 349, 1489, 246, 351, - 247, 818, 545, 838, 797, 668, 963, 964, 550, 934, - 1219, 153, 589, 296, 297, 298, 299, 300, 142, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 348, 349, - 931, 348, 349, 310, 668, 827, 174, 143, 328, 175, - 176, 1098, 154, 334, 520, 798, 864, 530, 298, 299, - 300, 588, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 348, 349, 170, 172, 357, 310, 972, 973, 1427, - 1428, 361, 362, 1431, 295, 348, 349, 847, 348, 349, - 121, 122, 123, 124, 348, 349, 155, 348, 349, 348, - 349, 1166, 348, 349, 1167, 1174, 472, 149, 284, 1175, - 1169, 128, 129, 1293, 674, 1295, 150, 672, 1301, 670, - 296, 297, 298, 299, 300, 152, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 463, 159, 307, 308, 309, - 310, 121, 122, 123, 124, 310, 1493, 409, 164, 463, - 464, 699, 700, 248, 801, 249, 165, 705, 128, 129, - 173, 177, 128, 129, 696, 178, 234, 715, 716, 121, - 122, 123, 124, 186, 156, 157, 719, 158, 250, 957, - 251, 464, 252, 723, 253, 182, 183, 933, 935, 187, - 128, 129, 193, 732, 733, 343, 254, 345, 255, 42, - 43, 44, 45, 352, 47, 256, 192, 257, 1542, 296, - 297, 298, 299, 300, 194, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 258, 260, 259, 261, 262, 310, - 263, 865, 264, 266, 265, 267, 195, 196, 770, 296, - 297, 298, 299, 300, 1572, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 268, 270, 269, 271, 272, 310, - 273, 296, 297, 298, 299, 300, 411, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 274, 809, 275, 232, - 276, 310, 277, 278, 668, 279, 669, 787, 788, 661, - 668, 662, 698, 668, 944, 830, 945, 668, 668, 956, - 1060, 789, 790, 791, 792, 793, 794, 795, 229, 280, - 463, 1080, 281, 282, 800, 464, 1175, 806, 1176, 1454, - 294, 1455, 311, 1474, 1046, 1475, 817, 312, 317, 299, - 300, 1656, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 463, 409, 1476, 320, 1477, 310, 1478, 1480, 1479, - 1481, 331, 332, 904, 1534, 358, 1535, 832, 667, 1594, - 1596, 1595, 1597, 1075, 1598, 1650, 1599, 1651, 1652, 333, - 1653, 856, 857, 335, 505, 860, 336, 342, 523, 524, - 90, 91, 337, 869, 870, 338, 94, 95, 96, 97, - 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 1654, 854, 1655, 1683, 1685, 1684, 1686, 339, 907, 908, - 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, - 919, 920, 296, 297, 298, 299, 300, 340, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 1687, 341, 1688, - 353, 354, 310, 355, 936, 359, 368, 941, 371, 943, - 296, 297, 298, 299, 300, 372, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 463, 374, 958, 375, 959, - 310, 404, 376, 377, 378, 379, 1078, 380, 1079, 381, - 382, 383, 384, 974, 975, 976, 407, 1224, 406, 385, - 386, 387, 388, 389, 410, 390, 391, 392, 393, 993, - 994, 996, 296, 297, 298, 299, 300, 394, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 296, 297, 298, - 299, 300, 310, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 395, 408, 396, 397, 398, 310, 125, 126, - 714, 399, 400, 401, 127, 310, 1028, 402, 403, 130, - 461, 471, 287, 506, 470, 288, 296, 297, 298, 299, - 300, 511, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 1047, 820, 821, 519, 823, 310, 540, 541, 825, - 826, 544, 547, 296, 297, 298, 299, 300, 939, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 551, 1065, - 1066, 552, 1132, 310, 553, 554, 555, 556, 557, 1074, - 558, 491, 559, 560, 858, 859, 1150, 561, 862, 562, - 1089, 1090, 563, 564, 565, 566, 567, 568, 569, 570, - 1101, 1100, 877, 878, 1103, 571, 572, 573, 883, 884, - 574, 575, 576, 577, 1113, 890, 578, 897, 579, 580, - 581, 1120, 1121, 1122, 584, 665, 585, 586, 1127, 666, - 675, 676, 1131, 683, 681, 684, 1133, 1134, 1135, 1136, - 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 685, - 1155, 686, 688, 689, 310, 691, 713, 1158, 692, 693, - 701, 717, 725, 819, 718, 726, 727, 728, 729, 951, - 731, 953, 735, 766, 1164, 736, 737, 738, 739, 740, - 741, 960, 961, 962, 742, 743, 965, 966, 967, 968, - 969, 970, 971, 1179, 1159, 1181, 744, 745, 746, 747, - 851, 852, 853, 296, 297, 298, 299, 300, 748, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 772, 871, - 749, 750, 751, 310, 752, 753, 754, 755, 880, 767, - 756, 296, 297, 298, 299, 300, 757, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 773, 786, 796, 799, - 846, 310, 1449, 758, 807, 808, 759, 774, 760, 810, - 761, 802, 1230, 1232, 816, 1238, 822, 1241, 1242, 775, - 824, 834, 762, 763, 1246, 764, 765, 811, 1160, 855, - 1045, 768, 1254, 835, 776, 836, 777, 833, 839, 778, - 1262, 840, 841, 779, 842, 1267, 843, 780, 1270, 844, - 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, - 1282, 1283, 1284, 1285, 781, 782, 783, 784, 1287, 785, - 1512, 1290, 1515, 283, 284, 1291, 845, 861, 866, 867, - 868, 872, 873, 875, 874, 876, 879, 881, 882, 1096, - 885, 886, 887, 1309, 888, 889, 1104, 898, 899, 296, - 297, 298, 299, 300, 900, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 901, 1123, 902, 930, 903, 310, - 905, 937, 932, 1161, 1553, 590, 591, 592, 593, 594, - 595, 596, 597, 598, 599, 600, 601, 602, 603, 1341, - 938, 1344, 942, 946, 950, 952, 954, 1349, 955, 977, - 986, 987, 992, 1356, 995, 997, 1001, 1002, 1003, 1004, - 1005, 1006, 1007, 1011, 1008, 1012, 1010, 1019, 1369, 1370, - 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1013, 1025, 1056, - 1029, 1382, 1383, 296, 297, 298, 299, 300, 1014, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 1015, 1016, - 1393, 1048, 1017, 310, 1018, 1020, 1021, 1022, 1081, 1049, - 1083, 1023, 1086, 90, 91, 1051, 1024, 1026, 1044, 94, + 228, 462, 134, 520, 1302, 1113, 937, 10, 1302, 495, + 233, 451, 452, 453, 1122, 176, 671, 806, 143, 359, + 187, 1129, 143, 78, 145, 93, 185, 1176, 9, 525, + 27, 28, 526, 527, 31, 32, 33, 944, 34, 1243, + 36, 37, 1159, 39, 40, 1237, 195, 1237, 8, 945, + 1238, 450, 1238, 449, 450, 482, 458, 1237, 1237, 483, + 52, 287, 1238, 1238, 1237, 797, 1237, 342, 343, 1238, + 81, 1238, 342, 343, 342, 343, 53, 54, 55, 1000, + 118, 119, 120, 118, 119, 120, 1009, 235, 975, 236, + 976, 458, 946, 163, 164, 342, 343, 82, 342, 343, + 1237, 280, 281, 282, 165, 1238, 283, 286, 83, 290, + 166, 977, 360, 978, 177, 344, 310, 311, 312, 1254, + 314, 181, 316, 317, 182, 324, 11, 12, 13, 14, + 15, 16, 17, 18, 93, 237, 144, 238, 64, 140, + 144, 340, 341, 1055, 84, 714, 715, 461, 716, 288, + 289, 576, 989, 798, 799, 577, 342, 343, 990, 357, + 358, 367, 361, 85, 363, 364, 186, 342, 343, 1301, + 86, 1305, 676, 345, 665, 121, 122, 123, 124, 931, + 528, 1455, 1459, 688, 583, 1302, 139, 1255, 1520, 1302, + 1522, 1259, 79, 145, 234, 667, 128, 129, 188, 178, + 672, 807, 342, 343, 664, 657, 403, 342, 343, 658, + 87, 407, 408, 409, 410, 411, 412, 413, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, + 446, 447, 448, 1302, 458, 1420, 831, 1302, 1424, 128, + 129, 457, 530, 531, 350, 458, 463, 763, 354, 467, + 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 121, 122, 123, 124, 1100, 487, + 171, 489, 88, 172, 173, 281, 457, 121, 122, 123, + 124, 499, 500, 501, 832, 503, 504, 505, 506, 507, + 508, 509, 89, 1360, 1361, 1362, 1363, 812, 128, 129, + 1367, 662, 1488, 522, 523, 524, 1492, 138, 532, 121, + 122, 123, 124, 342, 343, 928, 539, 342, 343, 662, + 153, 154, 544, 155, 342, 343, 148, 791, 1177, 511, + 128, 129, 1178, 979, 150, 980, 1222, 342, 343, 140, + 521, 322, 342, 343, 342, 343, 328, 141, 861, 342, + 343, 342, 343, 841, 142, 821, 342, 343, 1169, 239, + 1170, 240, 151, 582, 241, 1172, 242, 1296, 351, 146, + 342, 343, 1298, 792, 355, 356, 157, 1430, 1431, 158, + 159, 1434, 160, 848, 849, 850, 1304, 243, 292, 244, + 147, 293, 294, 295, 296, 297, 149, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 156, 167, 169, 458, + 152, 307, 281, 795, 466, 245, 161, 246, 668, 666, + 175, 293, 294, 295, 296, 297, 162, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 247, 458, 248, 457, + 249, 307, 250, 251, 1496, 252, 128, 129, 403, 1101, + 457, 170, 690, 691, 42, 43, 44, 45, 696, 47, + 302, 303, 304, 305, 306, 458, 458, 458, 706, 707, + 307, 174, 128, 129, 179, 128, 129, 710, 230, 180, + 231, 492, 253, 231, 254, 183, 255, 717, 256, 184, + 930, 932, 954, 257, 803, 258, 189, 726, 727, 960, + 961, 293, 294, 295, 296, 297, 1545, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 304, 305, 306, 128, + 129, 307, 190, 862, 307, 687, 337, 231, 339, 888, + 889, 890, 891, 892, 346, 826, 259, 261, 260, 262, + 764, 191, 1575, 293, 294, 295, 296, 297, 192, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 263, 265, + 264, 266, 267, 307, 268, 269, 271, 270, 272, 293, + 294, 295, 296, 297, 458, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 851, 273, 275, 274, 276, 307, + 193, 781, 782, 655, 662, 656, 663, 405, 662, 662, + 689, 824, 941, 194, 942, 783, 784, 785, 786, 787, + 788, 789, 1080, 662, 457, 953, 226, 662, 794, 981, + 662, 800, 982, 662, 662, 983, 1060, 229, 277, 1659, + 811, 278, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 279, 457, 403, 291, 1046, 307, 308, 661, 293, + 294, 295, 296, 297, 901, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 936, 1178, 1457, 1179, 1458, 307, + 457, 457, 457, 969, 970, 853, 854, 309, 1477, 857, + 1478, 1479, 313, 1480, 1075, 1153, 315, 866, 867, 325, + 293, 294, 295, 296, 297, 326, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 327, 514, 515, 329, 1481, + 307, 1482, 1483, 1537, 1484, 1538, 330, 1597, 1599, 1598, + 1600, 331, 904, 905, 906, 907, 908, 909, 910, 911, + 912, 913, 914, 915, 916, 917, 1601, 332, 1602, 293, + 294, 295, 296, 297, 333, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 334, 1653, 933, 1654, 1655, 307, + 1656, 938, 335, 940, 584, 585, 586, 587, 588, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 1657, 457, + 1658, 955, 336, 956, 295, 296, 297, 347, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 971, 972, 973, + 348, 1686, 307, 1687, 1227, 1688, 1690, 1689, 1691, 352, + 996, 349, 353, 362, 365, 366, 993, 994, 368, 293, + 294, 295, 296, 297, 369, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 370, 371, 372, 373, 374, 307, + 293, 294, 295, 296, 297, 375, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 376, 377, 378, 379, 380, + 307, 1028, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 814, 815, 390, 817, 705, 819, 820, 391, 392, + 393, 394, 598, 90, 91, 395, 396, 397, 1047, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 906, 1027, 1053, 1433, 1434, 1435, 1436, - 1437, 1438, 1439, 1440, 1441, 1443, 1445, 1447, 1057, 1058, - 1059, 1062, 1063, 1064, 1067, 1068, 1069, 1070, 1071, 1072, - 1460, 1073, 1244, 1082, 1245, 1084, 1087, 1248, 296, 297, - 298, 299, 300, 1091, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 1264, 1095, 1102, 1105, 1106, 310, 1107, - 1108, 1109, 1111, 1112, 1492, 1491, 1115, 1114, 1116, 1118, - 1117, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, - 1506, 1124, 1508, 1125, 1510, 1128, 1129, 1130, 1147, 1153, - 1165, 1148, 1149, 90, 91, 1151, 1522, 1152, 1154, 94, + 115, 116, 117, 398, 855, 856, 1065, 1066, 859, 1135, + 400, 401, 402, 1162, 404, 307, 1074, 464, 455, 465, + 497, 502, 874, 875, 510, 534, 535, 538, 880, 881, + 1092, 1093, 1104, 541, 545, 887, 1163, 894, 546, 547, + 548, 1103, 296, 297, 1106, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 1116, 549, 550, 551, 552, 307, + 553, 1123, 1124, 1125, 554, 555, 556, 557, 1130, 558, + 559, 560, 1134, 561, 562, 563, 1136, 1137, 1138, 1139, + 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, + 564, 565, 566, 567, 568, 569, 570, 571, 572, 948, + 1158, 950, 573, 574, 575, 659, 578, 1161, 579, 580, + 660, 957, 958, 959, 669, 670, 962, 963, 964, 965, + 966, 967, 968, 675, 1167, 677, 678, 679, 681, 683, + 684, 813, 692, 704, 708, 709, 719, 720, 721, 722, + 1184, 125, 126, 723, 725, 729, 1182, 127, 760, 730, + 731, 732, 130, 733, 734, 284, 735, 780, 285, 736, + 737, 738, 739, 740, 741, 845, 846, 847, 293, 294, + 295, 296, 297, 742, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 743, 744, 790, 745, 868, 307, 746, + 747, 293, 294, 295, 296, 297, 877, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 766, 748, 749, 750, + 751, 307, 752, 1045, 753, 1233, 1235, 793, 1241, 1452, + 1244, 1245, 767, 754, 755, 756, 757, 1249, 758, 759, + 761, 762, 801, 796, 802, 1257, 768, 804, 769, 770, + 771, 810, 840, 1265, 816, 772, 1164, 852, 1270, 773, + 818, 1273, 828, 1275, 1276, 1277, 1278, 1279, 1280, 1281, + 1282, 1283, 1284, 1285, 1286, 1287, 1288, 805, 827, 829, + 830, 1290, 774, 833, 1293, 1099, 280, 281, 1294, 834, + 775, 835, 1107, 836, 837, 776, 838, 1515, 1312, 1518, + 839, 777, 778, 858, 779, 863, 864, 865, 869, 90, + 91, 1126, 870, 871, 872, 94, 95, 96, 97, 98, + 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 873, + 876, 878, 879, 882, 883, 884, 885, 886, 895, 898, + 899, 1556, 1344, 896, 1347, 897, 902, 900, 1359, 927, + 1352, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 929, 934, 935, 943, 939, + 947, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, + 949, 951, 952, 974, 1385, 1386, 986, 987, 992, 995, + 997, 1001, 1002, 1003, 1005, 1396, 1004, 1006, 1011, 1007, + 1056, 293, 294, 295, 296, 297, 1008, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 1010, 1012, 1013, 1014, + 1015, 307, 1029, 1016, 1048, 1019, 1017, 1025, 1049, 1081, + 1094, 1083, 1044, 1086, 1018, 1020, 1021, 1022, 1023, 1024, + 1026, 1027, 1051, 1053, 1057, 1058, 1059, 1062, 1063, 1436, + 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1446, 1448, + 1450, 1247, 1064, 1248, 1067, 1463, 1251, 125, 126, 903, + 1068, 1069, 1070, 127, 1071, 1072, 1073, 1082, 130, 1084, + 1087, 685, 1267, 1089, 686, 1090, 1091, 1098, 1105, 1108, + 1110, 1109, 1111, 1310, 1115, 1112, 1114, 1118, 1117, 1495, + 1121, 1119, 1120, 1128, 1127, 1131, 1132, 1133, 1494, 1150, + 1151, 1156, 1152, 1155, 1500, 1501, 1502, 1503, 1504, 1505, + 1506, 1507, 1508, 1509, 1154, 1511, 1165, 1513, 1168, 1157, + 1160, 1525, 1166, 1181, 1171, 1173, 90, 91, 1180, 1185, + 1187, 1188, 94, 95, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 1189, 1190, 1223, 1542, + 1543, 1194, 1191, 1193, 1547, 1548, 1549, 1550, 1551, 1552, + 1195, 1199, 1200, 1348, 1201, 1203, 1204, 1206, 1221, 1224, + 1246, 1356, 1357, 1252, 1253, 1256, 1258, 1260, 1261, 1262, + 1263, 1271, 1264, 1266, 1572, 1268, 1269, 1272, 1274, 1576, + 1577, 1578, 1579, 1580, 1581, 1583, 1585, 1587, 1289, 1291, + 1292, 1299, 1300, 1234, 1236, 1308, 1242, 1309, 1343, 1317, + 1345, 1349, 1350, 1311, 1313, 1314, 1315, 1606, 1607, 1608, + 1609, 1610, 1611, 1612, 1318, 1614, 1320, 1616, 293, 294, + 295, 296, 297, 1353, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 1324, 1322, 1626, 1627, 1628, 307, 1341, + 1354, 1355, 1358, 1364, 1423, 1365, 1366, 1427, 1368, 1640, + 1641, 1642, 1644, 1646, 1648, 339, 496, 1369, 1370, 1371, + 1387, 1429, 1399, 1400, 1419, 1391, 1660, 1661, 1662, 1663, + 1389, 1665, 1392, 1667, 125, 126, 1394, 1395, 1397, 1398, + 127, 1401, 1402, 1421, 1412, 130, 1413, 1414, 822, 1415, + 1425, 823, 1418, 1681, 1683, 1685, 1428, 1432, 1433, 1435, + 1454, 1456, 1692, 1460, 1694, 1461, 1696, 1462, 1464, 1465, + 1489, 1466, 1467, 90, 318, 1485, 1493, 1487, 1497, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 1157, 1162, 1163, 1539, 1540, 1168, 1170, - 1177, 1544, 1545, 1546, 1547, 1548, 1549, 1178, 1184, 1182, - 1185, 125, 126, 548, 1186, 1187, 1188, 127, 1190, 1191, - 1192, 1196, 130, 1221, 1345, 694, 1231, 1233, 695, 1239, - 1197, 1569, 1353, 1354, 1198, 1200, 1573, 1574, 1575, 1576, - 1577, 1578, 1580, 1582, 1584, 1201, 1203, 1218, 26, 27, - 28, 29, 30, 31, 32, 33, 1220, 34, 1243, 36, - 37, 1249, 39, 40, 1603, 1604, 1605, 1606, 1607, 1608, - 1609, 1250, 1611, 1253, 1613, 1255, 1258, 1257, 1259, 52, - 1260, 1261, 1263, 1265, 1266, 1268, 1269, 1286, 345, 1271, - 1288, 1289, 1623, 1624, 1625, 53, 54, 55, 1296, 1308, - 1297, 1305, 1306, 1310, 1311, 1312, 1637, 1638, 1639, 1641, - 1643, 1645, 1314, 1340, 1317, 1420, 1342, 1346, 1424, 1347, - 1315, 1319, 1321, 1657, 1658, 1659, 1660, 1338, 1662, 1350, - 1664, 125, 126, 1351, 1352, 1355, 1307, 127, 1361, 1362, - 1363, 1365, 130, 1366, 1367, 828, 1368, 1384, 829, 1388, - 1678, 1680, 1682, 1386, 1389, 1391, 1416, 64, 1392, 1689, - 1394, 1691, 1395, 1693, 1396, 1397, 296, 297, 298, 299, - 300, 1398, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 1486, 1399, 1415, 90, 324, 310, 1409, 1410, 1494, - 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 117, 90, 502, 1411, 1412, 1418, 1422, - 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 117, 1425, 1426, 90, 91, 1429, 1453, - 1430, 1543, 94, 95, 96, 97, 98, 99, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 1432, 1451, 1457, 1484, - 1458, 1459, 1463, 1461, 1462, 1571, 1464, 1483, 1482, 1487, - 1488, 296, 297, 298, 299, 300, 1490, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 1495, 1496, 90, 91, - 92, 310, 93, 1601, 94, 95, 96, 97, 98, 99, - 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, - 110, 111, 112, 113, 114, 115, 116, 117, 1507, 118, - 119, 120, 1622, 1509, 1511, 1513, 1516, 1518, 1520, 1523, - 1524, 1536, 125, 325, 1537, 1538, 1636, 1541, 127, 1554, - 1557, 1558, 1559, 130, 296, 297, 298, 299, 300, 326, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 1566, - 1567, 1568, 125, 126, 310, 1570, 1586, 1600, 127, 1587, - 1225, 1602, 1226, 130, 1610, 1612, 1614, 1615, 1661, 503, - 1663, 1629, 1665, 1633, 1634, 1635, 1646, 1666, 1670, 1674, - 1675, 1676, 1690, 1692, 1227, 1228, 1694, 1696, 1697, 771, - 127, 69, 70, 71, 1094, 1229, 90, 91, 456, 0, - 0, 169, 94, 95, 96, 97, 98, 99, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 680, 118, 119, 120, - 0, 1050, 121, 122, 123, 124, 0, 0, 0, 0, - 0, 831, 0, 0, 0, 0, 125, 126, 0, 0, - 0, 0, 127, 128, 129, 0, 863, 130, 0, 131, - 0, 132, 90, 91, 0, 0, 0, 0, 94, 95, - 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 90, 324, 0, 0, 0, 0, 94, 95, - 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 90, 502, 0, 0, 0, 0, 94, 95, - 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 125, 126, 0, 0, 0, 0, - 127, 0, 0, 0, 0, 130, 0, 0, 0, 296, - 297, 298, 299, 300, 0, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 296, 297, 298, 299, 300, 310, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 296, - 297, 298, 299, 300, 310, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 125, 126, 0, 0, 0, 0, 127, 0, 0, 0, - 0, 130, 296, 297, 298, 299, 300, 0, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 0, 0, - 125, 462, 310, 0, 460, 0, 127, 0, 521, -10, - 1, 130, -10, -53, 0, 296, 297, 298, 299, 300, - 0, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 125, 126, 0, 0, 0, 310, 127, 0, 0, 0, - 0, 130, -53, 496, 0, 0, -53, -53, -53, -53, - -53, -53, -53, -53, -53, 0, -53, -53, -53, -53, - -53, -53, -53, 0, 0, 0, -53, -53, -53, -53, - -53, -53, -53, 0, -53, -53, -53, -53, -53, 296, - 297, 298, 299, 300, 0, 301, 302, 303, 304, 305, - 306, 307, 308, 309, -53, -53, -53, 0, 0, 310, - 0, 460, 0, -53, 0, -53, -53, -53, -53, -53, - -53, -53, 0, 0, 26, 27, 28, 29, 30, 31, - 32, 33, 0, 34, 0, 36, 37, 0, 39, 40, - 0, -10, -10, -10, -10, -10, -10, -10, -10, 0, - 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, -53, 2, 3, 0, - 4, 53, 54, 55, 26, 27, 28, 29, 30, 31, - 32, 33, 0, 34, 0, 36, 37, 0, 39, 40, + 115, 116, 117, 90, 493, 1486, 1521, 1490, 1491, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 1498, 1499, 90, 91, 1510, 1523, 1512, + 1546, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 1514, 1516, 1519, 1526, 293, + 294, 295, 296, 297, 1574, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 1539, 1527, 1540, 1541, 1544, 307, + 1557, 1560, 1561, 1562, 1573, 1569, 1589, 90, 91, 92, + 1590, 93, 1604, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 1570, 118, 119, + 120, 1625, 1603, 1571, 1605, 1613, 1615, 1617, 1636, 1664, + 1618, 125, 319, 1632, 1649, 1639, 1637, 127, 1638, 1666, + 1668, 1669, 130, 293, 294, 295, 296, 297, 320, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 1673, 1677, + 1678, 125, 126, 307, 1679, 1693, 1695, 127, 1697, 1078, + 1699, 1079, 130, 1700, 765, 69, 70, 0, 494, 71, + 0, 1097, 0, 1050, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1230, 1231, 0, 0, 0, 0, 127, + 0, 0, 0, 0, 1232, 90, 91, 450, 0, 0, + 166, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 542, 118, 119, 120, 0, + 0, 121, 122, 123, 124, 0, 0, 0, 0, 0, + 674, 0, 0, 0, 0, 125, 126, 0, 0, 0, + 0, 127, 128, 129, 0, 825, 130, 0, 131, 0, + 132, 90, 91, 0, 0, 0, 0, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 90, 318, 0, 0, 0, 0, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 90, 493, 0, 0, 0, 0, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 860, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 125, 126, 0, 0, 0, 0, 127, + 0, 0, 0, 0, 130, 0, 0, 0, 293, 294, + 295, 296, 297, 0, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 293, 294, 295, 296, 297, 307, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 293, 294, + 295, 296, 297, 307, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 0, 0, 0, 0, 0, 307, 125, + 126, 0, 0, 0, 0, 127, 0, 0, 0, 0, + 130, 293, 294, 295, 296, 297, 0, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 0, 0, 0, 125, + 456, 307, 0, 0, 0, 127, 0, 1228, 0, 1229, + 130, 0, 525, 27, 28, 526, 527, 31, 32, 33, + 0, 34, 0, 36, 37, 0, 39, 40, 0, 125, + 126, 0, 0, -10, 1, 127, -10, -53, 0, 0, + 130, 0, 0, 52, 293, 294, 295, 296, 297, 0, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 53, + 54, 55, 0, 0, 307, 0, -53, 0, 0, 0, + -53, -53, -53, -53, -53, -53, -53, -53, -53, 0, + -53, -53, -53, -53, -53, -53, -53, 0, 0, 0, + -53, -53, -53, -53, -53, -53, -53, 0, -53, -53, + -53, -53, -53, 293, 294, 295, 296, 297, 0, 298, + 299, 300, 301, 302, 303, 304, 305, 306, -53, -53, + -53, 64, 0, 307, 0, 454, 0, -53, 0, -53, + -53, -53, -53, -53, -53, -53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 23, 0, 52, 296, 297, 298, 299, - 300, 0, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 53, 54, 55, 0, 0, 310, 0, 0, 0, - 0, 0, 24, 64, 498, 0, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 0, 34, 35, 36, 37, - 38, 39, 40, 0, 0, 0, 41, 42, 43, 44, - 45, 46, 47, 199, 48, 49, 50, 51, 52, 0, - 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, - 0, 0, 0, 64, 53, 54, 55, 0, 0, 0, - 0, 0, 0, 56, 0, 57, 58, 59, 60, 61, - 62, 63, 0, 296, 297, 298, 299, 300, 0, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 0, - 0, 0, 0, 310, 0, 539, 200, 201, 202, 1336, - 0, 1337, 0, 0, 203, 204, 205, 206, 207, 208, - 209, 210, 211, 212, 0, 0, 64, 0, 0, 0, - 0, 0, 213, 214, 215, 216, 217, 218, 219, 220, - 221, 222, 0, 223, 224, 225, 226, 227, 228, 296, - 297, 298, 299, 300, 0, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 0, 0, 296, 297, 298, 299, 300, 702, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 0, 0, - 0, 0, 310, 0, 0, 296, 297, 298, 299, 300, - 706, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 0, 0, 0, 0, 310, 0, 0, 296, 297, - 298, 299, 300, 707, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 0, 0, 0, 0, 310, 0, - 0, 296, 297, 298, 299, 300, 850, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 0, 0, 0, 0, - 0, 310, 0, 0, 296, 297, 298, 299, 300, 1076, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 0, 0, 296, 297, 298, - 299, 300, 1247, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 0, 0, 0, 0, 310, 0, 0, - 296, 297, 298, 299, 300, 1292, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 0, 0, 0, 0, - 310, 0, 0, 296, 297, 298, 299, 300, 1294, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 0, - 0, 0, 0, 310, 0, 0, 296, 297, 298, 299, - 300, 1300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 0, 0, 0, 0, 310, 0, 0, 296, - 297, 298, 299, 300, 1303, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 0, 0, 296, 297, 298, 299, 300, 1304, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 0, 0, - 0, 0, 310, 0, 0, 296, 297, 298, 299, 300, - 1339, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 0, 0, 0, 0, 310, 0, 0, 296, 297, - 298, 299, 300, 1385, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 0, 0, 0, 0, 310, 0, - 0, 296, 297, 298, 299, 300, 1387, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 0, 0, 0, 0, - 0, 310, 0, 0, 296, 297, 298, 299, 300, 1390, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 0, 0, 296, 297, 298, - 299, 300, 1414, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 0, 0, 0, 0, 310, 0, 0, - 296, 297, 298, 299, 300, 1556, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 0, 0, 0, 0, - 310, 0, 0, 296, 297, 298, 299, 300, 1585, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 0, - 0, 0, 0, 310, 296, 297, 298, 299, 300, 521, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 296, 297, 298, 299, 300, - 522, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 0, 0, 0, 0, 310, 296, 297, 298, 299, - 300, 641, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 0, 0, 0, 0, 310, 296, 297, 298, - 299, 300, 642, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 0, 0, 0, 0, 310, 296, 297, - 298, 299, 300, 655, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 0, 0, 0, 0, 310, 296, - 297, 298, 299, 300, 656, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 296, 297, 298, 299, 300, 657, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 0, 0, 0, 0, - 310, 296, 297, 298, 299, 300, 658, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 0, 0, 0, 0, - 0, 310, 296, 297, 298, 299, 300, 659, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 0, 0, - 0, 0, 310, 296, 297, 298, 299, 300, 660, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 0, - 0, 0, 0, 310, 296, 297, 298, 299, 300, 720, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 296, 297, 298, 299, 300, - 721, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 0, 0, 0, 0, 310, 296, 297, 298, 299, - 300, 722, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 0, 0, 0, 0, 310, 296, 297, 298, - 299, 300, 848, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 0, 0, 0, 0, 310, 296, 297, - 298, 299, 300, 849, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 0, 0, 0, 0, 310, 296, - 297, 298, 299, 300, 984, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 296, 297, 298, 299, 300, 985, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 0, 0, 0, 0, - 310, 296, 297, 298, 299, 300, 998, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 0, 0, 0, 0, - 0, 310, 296, 297, 298, 299, 300, 999, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 0, 0, - 0, 0, 310, 296, 297, 298, 299, 300, 1030, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 0, - 0, 0, 0, 310, 296, 297, 298, 299, 300, 1031, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 296, 297, 298, 299, 300, - 1032, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 0, 0, 0, 0, 310, 296, 297, 298, 299, - 300, 1033, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 0, 0, 0, 0, 310, 296, 297, 298, - 299, 300, 1034, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 0, 0, 0, 0, 310, 296, 297, - 298, 299, 300, 1035, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 0, 0, 0, 0, 310, 296, - 297, 298, 299, 300, 1036, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 296, 297, 298, 299, 300, 1037, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 0, 0, 0, 0, - 310, 296, 297, 298, 299, 300, 1038, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 0, 0, 0, 0, - 0, 310, 296, 297, 298, 299, 300, 1039, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 0, 0, - 0, 0, 310, 296, 297, 298, 299, 300, 1040, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 0, - 0, 0, 0, 310, 296, 297, 298, 299, 300, 1041, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 296, 297, 298, 299, 300, - 1042, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 0, 0, 0, 0, 310, 296, 297, 298, 299, - 300, 1043, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 0, 0, 0, 0, 310, 296, 297, 298, - 299, 300, 1054, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 0, 0, 0, 0, 310, 296, 297, - 298, 299, 300, 1061, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 0, 0, 0, 0, 310, 296, - 297, 298, 299, 300, 1171, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 296, 297, 298, 299, 300, 1172, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 0, 0, 0, 0, - 310, 296, 297, 298, 299, 300, 1180, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 0, 0, 0, 0, - 0, 310, 296, 297, 298, 299, 300, 1183, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 0, 0, - 0, 0, 310, 296, 297, 298, 299, 300, 1194, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 0, - 0, 0, 0, 310, 296, 297, 298, 299, 300, 1199, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 296, 297, 298, 299, 300, - 1202, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 0, 0, 0, 0, 310, 296, 297, 298, 299, - 300, 1204, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 0, 0, 0, 0, 310, 296, 297, 298, - 299, 300, 1205, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 0, 0, 0, 0, 310, 296, 297, - 298, 299, 300, 1206, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 0, 0, 0, 0, 310, 296, - 297, 298, 299, 300, 1207, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 296, 297, 298, 299, 300, 1208, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 0, 0, 0, 0, - 310, 296, 297, 298, 299, 300, 1209, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 0, 0, 0, 0, - 0, 310, 296, 297, 298, 299, 300, 1210, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 0, 0, - 0, 0, 310, 296, 297, 298, 299, 300, 1211, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 0, - 0, 0, 0, 310, 296, 297, 298, 299, 300, 1212, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 296, 297, 298, 299, 300, - 1213, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 0, 0, 0, 0, 310, 296, 297, 298, 299, - 300, 1214, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 0, 0, 0, 0, 310, 296, 297, 298, - 299, 300, 1215, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 0, 0, 0, 0, 310, 296, 297, - 298, 299, 300, 1216, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 0, 0, 0, 0, 310, 296, - 297, 298, 299, 300, 1217, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 296, 297, 298, 299, 300, 1222, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 0, 0, 0, 0, - 310, 296, 297, 298, 299, 300, 1223, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 0, 0, 0, 0, - 0, 310, 296, 297, 298, 299, 300, 1313, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 0, 0, - 0, 0, 310, 296, 297, 298, 299, 300, 1322, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 0, - 0, 0, 0, 310, 296, 297, 298, 299, 300, 1323, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 296, 297, 298, 299, 300, - 1324, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 0, 0, 0, 0, 310, 296, 297, 298, 299, - 300, 1325, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 0, 0, 0, 0, 310, 296, 297, 298, - 299, 300, 1326, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 0, 0, 0, 0, 310, 296, 297, - 298, 299, 300, 1327, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 0, 0, 0, 0, 310, 296, - 297, 298, 299, 300, 1328, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 296, 297, 298, 299, 300, 1329, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 0, 0, 0, 0, - 310, 296, 297, 298, 299, 300, 1330, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 0, 0, 0, 0, - 0, 310, 296, 297, 298, 299, 300, 1335, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 0, 0, - 0, 0, 310, 296, 297, 298, 299, 300, 1400, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 0, - 0, 0, 0, 310, 296, 297, 298, 299, 300, 1401, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 296, 297, 298, 299, 300, - 1402, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 0, 0, 0, 0, 310, 296, 297, 298, 299, - 300, 1403, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 0, 0, 0, 0, 310, 296, 297, 298, - 299, 300, 1404, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 0, 0, 0, 0, 310, 296, 297, - 298, 299, 300, 1405, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 0, 0, 0, 0, 310, 296, - 297, 298, 299, 300, 1406, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 296, 297, 298, 299, 300, 1407, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 0, 0, 0, 0, - 310, 296, 297, 298, 299, 300, 1408, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 0, 0, 0, 0, - 0, 310, 296, 297, 298, 299, 300, 1465, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 0, 0, - 0, 0, 310, 296, 297, 298, 299, 300, 1466, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 0, - 0, 0, 0, 310, 296, 297, 298, 299, 300, 1467, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 296, 297, 298, 299, 300, - 1468, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 0, 0, 0, 0, 310, 296, 297, 298, 299, - 300, 1469, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 0, 0, 0, 0, 310, 296, 297, 298, - 299, 300, 1470, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 0, 0, 0, 0, 310, 296, 297, - 298, 299, 300, 1471, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 0, 0, 0, 0, 310, 296, - 297, 298, 299, 300, 1472, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 296, 297, 298, 299, 300, 1473, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 0, 0, 0, 0, - 310, 296, 297, 298, 299, 300, 1521, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 0, 0, 0, 0, - 0, 310, 296, 297, 298, 299, 300, 1525, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 0, 0, - 0, 0, 310, 296, 297, 298, 299, 300, 1526, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 0, - 0, 0, 0, 310, 296, 297, 298, 299, 300, 1527, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 296, 297, 298, 299, 300, - 1528, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 0, 0, 0, 0, 310, 296, 297, 298, 299, - 300, 1529, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 0, 0, 0, 0, 310, 296, 297, 298, - 299, 300, 1530, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 0, 0, 0, 0, 310, 296, 297, - 298, 299, 300, 1555, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 0, 0, 0, 0, 310, 296, - 297, 298, 299, 300, 1560, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 296, 297, 298, 299, 300, 1561, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 0, 0, 0, 0, - 310, 296, 297, 298, 299, 300, 1562, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 0, 0, 0, 0, - 0, 310, 296, 297, 298, 299, 300, 1563, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 0, 0, - 0, 0, 310, 296, 297, 298, 299, 300, 1564, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 0, - 0, 0, 0, 310, 296, 297, 298, 299, 300, 1565, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 296, 297, 298, 299, 300, - 1588, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 0, 0, 0, 0, 310, 296, 297, 298, 299, - 300, 1589, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 0, 0, 0, 0, 310, 296, 297, 298, - 299, 300, 1590, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 0, 0, 0, 0, 310, 296, 297, - 298, 299, 300, 1591, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 0, 0, 0, 0, 310, 296, - 297, 298, 299, 300, 1592, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 296, 297, 298, 299, 300, 1593, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 0, 0, 0, 0, - 310, 296, 297, 298, 299, 300, 1616, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 0, 0, 0, 0, - 0, 310, 296, 297, 298, 299, 300, 1617, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 0, 0, - 0, 0, 310, 296, 297, 298, 299, 300, 1618, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 0, - 0, 0, 0, 310, 296, 297, 298, 299, 300, 1630, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 296, 297, 298, 299, 300, - 1631, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 0, 0, 0, 0, 310, 296, 297, 298, 299, - 300, 1632, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 0, 0, 0, 0, 310, 296, 297, 298, - 299, 300, 1647, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 0, 0, 0, 0, 310, 296, 297, - 298, 299, 300, 1648, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 0, 0, 0, 0, 310, 296, - 297, 298, 299, 300, 1649, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 0, 0, 0, 466, 296, 297, 298, 299, 300, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 0, 0, 0, 587, 296, - 297, 298, 299, 300, 0, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 0, 0, 0, 620, 296, 297, 298, 299, 300, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 0, 0, 0, 622, 296, - 297, 298, 299, 300, 0, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 0, 0, 0, 624, 296, 297, 298, 299, 300, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 0, 0, 0, 626, 296, - 297, 298, 299, 300, 0, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 0, 0, 0, 628, 296, 297, 298, 299, 300, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 0, 0, 0, 630, 296, - 297, 298, 299, 300, 0, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 0, 0, 0, 632, 296, 297, 298, 299, 300, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 0, 0, 0, 634, 296, - 297, 298, 299, 300, 0, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 0, 0, 0, 636, 296, 297, 298, 299, 300, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 0, 0, 0, 638, 296, - 297, 298, 299, 300, 0, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 0, 0, 0, 640, 296, 297, 298, 299, 300, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 0, 0, 0, 644, 296, - 297, 298, 299, 300, 0, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 0, 0, 0, 646, 296, 297, 298, 299, 300, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 0, 0, 0, 648, 296, - 297, 298, 299, 300, 0, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 0, 0, 0, 650, 296, 297, 298, 299, 300, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 0, 0, 0, 652, 296, - 297, 298, 299, 300, 0, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 0, 0, 0, 654, 296, 297, 298, 299, 300, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 0, 0, 0, 724, 296, - 297, 298, 299, 300, 0, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 0, 0, 0, 922, 296, 297, 298, 299, 300, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 0, 0, 0, 924, 296, - 297, 298, 299, 300, 0, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 0, 0, 0, 926, 296, 297, 298, 299, 300, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 0, 0, 0, 928, 296, - 297, 298, 299, 300, 0, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 0, 0, 0, 929, 296, 297, 298, 299, 300, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 0, 0, 0, 1052, 296, - 297, 298, 299, 300, 0, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 0, 490, 296, 297, 298, 299, 300, 0, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 0, 0, - 0, 0, 310, 0, 492, 296, 297, 298, 299, 300, - 0, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 0, 0, 0, 0, 310, 0, 493, 296, 297, - 298, 299, 300, 0, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 0, 0, 0, 0, 310, 0, - 495, 296, 297, 298, 299, 300, 0, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 0, 0, 0, 0, - 0, 310, 0, 499, 296, 297, 298, 299, 300, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 0, 500, 296, 297, 298, - 299, 300, 0, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 0, 0, 0, 0, 310, 0, 507, - 296, 297, 298, 299, 300, 0, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 0, 0, 0, 0, - 310, 0, 542, 296, 297, 298, 299, 300, 0, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 0, - 0, 0, 0, 310, 0, 543, 296, 297, 298, 299, - 300, 0, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 0, 0, 0, 0, 310, 0, 546, 296, - 297, 298, 299, 300, 0, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 0, 549, 296, 297, 298, 299, 300, 0, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 0, 0, - 0, 0, 310, 0, 619, 296, 297, 298, 299, 300, - 0, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 0, 0, 0, 0, 310, 0, 621, 296, 297, - 298, 299, 300, 0, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 0, 0, 0, 0, 310, 0, - 623, 296, 297, 298, 299, 300, 0, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 0, 0, 0, 0, - 0, 310, 0, 625, 296, 297, 298, 299, 300, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 0, 627, 296, 297, 298, - 299, 300, 0, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 0, 0, 0, 0, 310, 0, 629, - 296, 297, 298, 299, 300, 0, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 0, 0, 0, 0, - 310, 0, 631, 296, 297, 298, 299, 300, 0, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 0, - 0, 0, 0, 310, 0, 633, 296, 297, 298, 299, - 300, 0, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 0, 0, 0, 0, 310, 0, 635, 296, - 297, 298, 299, 300, 0, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 0, 637, 296, 297, 298, 299, 300, 0, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 0, 0, - 0, 0, 310, 0, 639, 296, 297, 298, 299, 300, - 0, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 0, 0, 0, 0, 310, 0, 643, 296, 297, - 298, 299, 300, 0, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 0, 0, 0, 0, 310, 0, - 645, 296, 297, 298, 299, 300, 0, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 0, 0, 0, 0, - 0, 310, 0, 647, 296, 297, 298, 299, 300, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 0, 649, 296, 297, 298, - 299, 300, 0, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 0, 0, 0, 0, 310, 0, 651, - 296, 297, 298, 299, 300, 0, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 0, 0, 0, 0, - 310, 0, 653, 296, 297, 298, 299, 300, 0, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 0, - 0, 0, 0, 310, 0, 687, 296, 297, 298, 299, - 300, 0, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 0, 0, 0, 0, 310, 0, 690, 296, - 297, 298, 299, 300, 0, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 0, 703, 296, 297, 298, 299, 300, 0, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 0, 0, - 0, 0, 310, 0, 704, 296, 297, 298, 299, 300, - 0, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 0, 0, 0, 0, 310, 0, 708, 296, 297, - 298, 299, 300, 0, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 0, 0, 0, 0, 310, 0, - 709, 296, 297, 298, 299, 300, 0, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 0, 0, 0, 0, - 0, 310, 0, 710, 296, 297, 298, 299, 300, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 0, 711, 296, 297, 298, - 299, 300, 0, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 0, 0, 0, 0, 310, 0, 712, - 296, 297, 298, 299, 300, 0, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 0, 0, 0, 0, - 310, 0, 730, 296, 297, 298, 299, 300, 0, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 0, - 0, 0, 0, 310, 0, 734, 296, 297, 298, 299, - 300, 0, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 0, 0, 0, 0, 310, 0, 921, 296, - 297, 298, 299, 300, 0, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 0, 923, 296, 297, 298, 299, 300, 0, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 0, 0, - 0, 0, 310, 0, 925, 296, 297, 298, 299, 300, - 0, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 0, 0, 0, 0, 310, 0, 927, 296, 297, - 298, 299, 300, 0, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 0, 0, 0, 0, 310, 0, - 988, 296, 297, 298, 299, 300, 0, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 0, 0, 0, 0, - 0, 310, 0, 1077, 296, 297, 298, 299, 300, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 0, 1099, 296, 297, 298, - 299, 300, 0, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 0, 0, 0, 0, 310, 0, 1189, - 296, 297, 298, 299, 300, 0, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 0, 0, 0, 0, - 310, 0, 1193, 296, 297, 298, 299, 300, 0, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 0, - 0, 0, 0, 310, 0, 1195, 296, 297, 298, 299, - 300, 0, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 0, 0, 0, 0, 310, 0, 1316, 296, - 297, 298, 299, 300, 0, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 0, 1318, 296, 297, 298, 299, 300, 0, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 0, 0, - 0, 0, 310, 0, 1320, 296, 297, 298, 299, 300, - 0, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 0, 0, 0, 0, 310, 0, 1331, 296, 297, - 298, 299, 300, 0, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 0, 0, 0, 0, 310, 0, - 1332, 296, 297, 298, 299, 300, 0, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 0, 0, 0, 0, - 0, 310, 0, 1333, 296, 297, 298, 299, 300, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 0, 1334, 296, 297, 298, - 299, 300, 0, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 0, 0, 0, 0, 310, 0, 1413, - 296, 297, 298, 299, 300, 0, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 0, 0, 0, 0, 0, - 310, 0, 1531, 296, 297, 298, 299, 300, 0, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 0, 0, - 0, 0, 0, 310, 0, 1532, 296, 297, 298, 299, - 300, 0, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 0, 0, 0, 0, 0, 310, 0, 1533, 296, - 297, 298, 299, 300, 0, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 0, 0, 0, 0, 0, 310, - 0, 1619, 296, 297, 298, 299, 300, 0, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 0, 0, 0, - 0, 0, 310, 0, 1620, 296, 297, 298, 299, 300, - 0, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 0, 0, 0, 0, 0, 310, 0, 1621, 296, 297, - 298, 299, 300, 0, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 0, 0, 0, 0, 0, 310, 0, - 1667, 296, 297, 298, 299, 300, 0, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 0, 0, 0, 0, - 0, 310, 0, 1668, 296, 297, 298, 299, 300, 0, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 0, - 0, 0, 0, 0, 310, 0, 1669, 296, 297, 298, - 299, 300, 0, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 0, 0, 0, 0, 0, 310 + 0, 0, 0, 0, 23, -10, -10, -10, -10, -10, + -10, -10, -10, 533, 0, 293, 294, 295, 296, 297, + 0, 298, 299, 300, 301, 302, 303, 304, 305, 306, + -53, 2, 3, 24, 4, 307, 0, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 0, 34, 35, 36, + 37, 38, 39, 40, 0, 0, 0, 41, 42, 43, + 44, 45, 46, 47, 196, 48, 49, 50, 51, 52, + 293, 294, 295, 296, 297, 0, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 53, 54, 55, 0, 0, + 307, 0, 484, 0, 56, 0, 57, 58, 59, 60, + 61, 62, 63, 525, 27, 28, 526, 527, 31, 32, + 33, 0, 34, 0, 36, 37, 0, 39, 40, 0, + 0, 0, 0, 0, 0, 0, 0, 197, 198, 199, + 0, 0, 0, 0, 52, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 0, 0, 64, 0, 0, + 53, 54, 55, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 0, 220, 221, 222, 223, 224, 225, + 293, 294, 295, 296, 297, 0, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 0, 0, 0, 0, 0, + 307, 0, 0, 0, 0, 0, 1339, 0, 1340, 0, + 0, 0, 0, 0, 0, 0, 0, 293, 294, 295, + 296, 297, 64, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 0, 0, 0, 0, 0, 307, 0, 0, + 293, 294, 295, 296, 297, 693, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 0, 0, 0, 0, 0, + 307, 0, 0, 293, 294, 295, 296, 297, 697, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 0, 0, + 0, 0, 0, 307, 0, 0, 293, 294, 295, 296, + 297, 698, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 0, 0, 0, 0, 0, 307, 0, 0, 293, + 294, 295, 296, 297, 844, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 0, 0, 293, 294, 295, 296, 297, 1076, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 0, 0, 0, + 0, 0, 307, 0, 0, 293, 294, 295, 296, 297, + 1250, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 0, 0, 0, 0, 0, 307, 0, 0, 293, 294, + 295, 296, 297, 1295, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 0, 0, 0, 0, 0, 307, 0, + 0, 293, 294, 295, 296, 297, 1297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 0, 0, 0, 0, + 0, 307, 0, 0, 293, 294, 295, 296, 297, 1303, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 0, 0, 293, 294, 295, + 296, 297, 1306, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 0, 0, 0, 0, 0, 307, 0, 0, + 293, 294, 295, 296, 297, 1307, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 0, 0, 0, 0, 0, + 307, 0, 0, 293, 294, 295, 296, 297, 1342, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 0, 0, + 0, 0, 0, 307, 0, 0, 293, 294, 295, 296, + 297, 1388, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 0, 0, 0, 0, 0, 307, 0, 0, 293, + 294, 295, 296, 297, 1390, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 0, 0, 293, 294, 295, 296, 297, 1393, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 0, 0, 0, + 0, 0, 307, 0, 0, 293, 294, 295, 296, 297, + 1417, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 0, 0, 0, 0, 0, 307, 0, 0, 293, 294, + 295, 296, 297, 1559, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 0, 0, 0, 0, 0, 307, 0, + 0, 293, 294, 295, 296, 297, 1588, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 0, 0, 0, 0, + 0, 307, 0, 454, 0, 0, 0, 512, 293, 294, + 295, 296, 297, 0, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 0, 0, 0, 0, 0, 307, 293, + 294, 295, 296, 297, 512, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 293, 294, 295, 296, 297, 513, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 0, 0, 0, 0, 0, + 307, 293, 294, 295, 296, 297, 635, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 0, 0, 0, 0, + 0, 307, 293, 294, 295, 296, 297, 636, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 0, 0, 0, + 0, 0, 307, 293, 294, 295, 296, 297, 649, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 0, 0, + 0, 0, 0, 307, 293, 294, 295, 296, 297, 650, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 293, 294, 295, 296, 297, + 651, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 0, 0, 0, 0, 0, 307, 293, 294, 295, 296, + 297, 652, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 0, 0, 0, 0, 0, 307, 293, 294, 295, + 296, 297, 653, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 0, 0, 0, 0, 0, 307, 293, 294, + 295, 296, 297, 654, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 0, 0, 0, 0, 0, 307, 293, + 294, 295, 296, 297, 711, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 293, 294, 295, 296, 297, 712, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 0, 0, 0, 0, 0, + 307, 293, 294, 295, 296, 297, 713, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 0, 0, 0, 0, + 0, 307, 293, 294, 295, 296, 297, 842, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 0, 0, 0, + 0, 0, 307, 293, 294, 295, 296, 297, 843, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 0, 0, + 0, 0, 0, 307, 293, 294, 295, 296, 297, 984, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 293, 294, 295, 296, 297, + 985, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 0, 0, 0, 0, 0, 307, 293, 294, 295, 296, + 297, 998, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 0, 0, 0, 0, 0, 307, 293, 294, 295, + 296, 297, 999, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 0, 0, 0, 0, 0, 307, 293, 294, + 295, 296, 297, 1030, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 0, 0, 0, 0, 0, 307, 293, + 294, 295, 296, 297, 1031, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 293, 294, 295, 296, 297, 1032, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 0, 0, 0, 0, 0, + 307, 293, 294, 295, 296, 297, 1033, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 0, 0, 0, 0, + 0, 307, 293, 294, 295, 296, 297, 1034, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 0, 0, 0, + 0, 0, 307, 293, 294, 295, 296, 297, 1035, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 0, 0, + 0, 0, 0, 307, 293, 294, 295, 296, 297, 1036, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 293, 294, 295, 296, 297, + 1037, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 0, 0, 0, 0, 0, 307, 293, 294, 295, 296, + 297, 1038, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 0, 0, 0, 0, 0, 307, 293, 294, 295, + 296, 297, 1039, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 0, 0, 0, 0, 0, 307, 293, 294, + 295, 296, 297, 1040, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 0, 0, 0, 0, 0, 307, 293, + 294, 295, 296, 297, 1041, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 293, 294, 295, 296, 297, 1042, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 0, 0, 0, 0, 0, + 307, 293, 294, 295, 296, 297, 1043, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 0, 0, 0, 0, + 0, 307, 293, 294, 295, 296, 297, 1054, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 0, 0, 0, + 0, 0, 307, 293, 294, 295, 296, 297, 1061, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 0, 0, + 0, 0, 0, 307, 293, 294, 295, 296, 297, 1174, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 293, 294, 295, 296, 297, + 1175, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 0, 0, 0, 0, 0, 307, 293, 294, 295, 296, + 297, 1183, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 0, 0, 0, 0, 0, 307, 293, 294, 295, + 296, 297, 1186, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 0, 0, 0, 0, 0, 307, 293, 294, + 295, 296, 297, 1197, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 0, 0, 0, 0, 0, 307, 293, + 294, 295, 296, 297, 1202, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 293, 294, 295, 296, 297, 1205, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 0, 0, 0, 0, 0, + 307, 293, 294, 295, 296, 297, 1207, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 0, 0, 0, 0, + 0, 307, 293, 294, 295, 296, 297, 1208, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 0, 0, 0, + 0, 0, 307, 293, 294, 295, 296, 297, 1209, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 0, 0, + 0, 0, 0, 307, 293, 294, 295, 296, 297, 1210, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 293, 294, 295, 296, 297, + 1211, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 0, 0, 0, 0, 0, 307, 293, 294, 295, 296, + 297, 1212, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 0, 0, 0, 0, 0, 307, 293, 294, 295, + 296, 297, 1213, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 0, 0, 0, 0, 0, 307, 293, 294, + 295, 296, 297, 1214, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 0, 0, 0, 0, 0, 307, 293, + 294, 295, 296, 297, 1215, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 293, 294, 295, 296, 297, 1216, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 0, 0, 0, 0, 0, + 307, 293, 294, 295, 296, 297, 1217, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 0, 0, 0, 0, + 0, 307, 293, 294, 295, 296, 297, 1218, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 0, 0, 0, + 0, 0, 307, 293, 294, 295, 296, 297, 1219, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 0, 0, + 0, 0, 0, 307, 293, 294, 295, 296, 297, 1220, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 293, 294, 295, 296, 297, + 1225, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 0, 0, 0, 0, 0, 307, 293, 294, 295, 296, + 297, 1226, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 0, 0, 0, 0, 0, 307, 293, 294, 295, + 296, 297, 1316, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 0, 0, 0, 0, 0, 307, 293, 294, + 295, 296, 297, 1325, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 0, 0, 0, 0, 0, 307, 293, + 294, 295, 296, 297, 1326, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 293, 294, 295, 296, 297, 1327, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 0, 0, 0, 0, 0, + 307, 293, 294, 295, 296, 297, 1328, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 0, 0, 0, 0, + 0, 307, 293, 294, 295, 296, 297, 1329, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 0, 0, 0, + 0, 0, 307, 293, 294, 295, 296, 297, 1330, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 0, 0, + 0, 0, 0, 307, 293, 294, 295, 296, 297, 1331, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 293, 294, 295, 296, 297, + 1332, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 0, 0, 0, 0, 0, 307, 293, 294, 295, 296, + 297, 1333, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 0, 0, 0, 0, 0, 307, 293, 294, 295, + 296, 297, 1338, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 0, 0, 0, 0, 0, 307, 293, 294, + 295, 296, 297, 1403, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 0, 0, 0, 0, 0, 307, 293, + 294, 295, 296, 297, 1404, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 293, 294, 295, 296, 297, 1405, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 0, 0, 0, 0, 0, + 307, 293, 294, 295, 296, 297, 1406, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 0, 0, 0, 0, + 0, 307, 293, 294, 295, 296, 297, 1407, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 0, 0, 0, + 0, 0, 307, 293, 294, 295, 296, 297, 1408, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 0, 0, + 0, 0, 0, 307, 293, 294, 295, 296, 297, 1409, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 293, 294, 295, 296, 297, + 1410, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 0, 0, 0, 0, 0, 307, 293, 294, 295, 296, + 297, 1411, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 0, 0, 0, 0, 0, 307, 293, 294, 295, + 296, 297, 1468, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 0, 0, 0, 0, 0, 307, 293, 294, + 295, 296, 297, 1469, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 0, 0, 0, 0, 0, 307, 293, + 294, 295, 296, 297, 1470, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 293, 294, 295, 296, 297, 1471, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 0, 0, 0, 0, 0, + 307, 293, 294, 295, 296, 297, 1472, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 0, 0, 0, 0, + 0, 307, 293, 294, 295, 296, 297, 1473, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 0, 0, 0, + 0, 0, 307, 293, 294, 295, 296, 297, 1474, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 0, 0, + 0, 0, 0, 307, 293, 294, 295, 296, 297, 1475, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 293, 294, 295, 296, 297, + 1476, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 0, 0, 0, 0, 0, 307, 293, 294, 295, 296, + 297, 1524, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 0, 0, 0, 0, 0, 307, 293, 294, 295, + 296, 297, 1528, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 0, 0, 0, 0, 0, 307, 293, 294, + 295, 296, 297, 1529, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 0, 0, 0, 0, 0, 307, 293, + 294, 295, 296, 297, 1530, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 293, 294, 295, 296, 297, 1531, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 0, 0, 0, 0, 0, + 307, 293, 294, 295, 296, 297, 1532, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 0, 0, 0, 0, + 0, 307, 293, 294, 295, 296, 297, 1533, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 0, 0, 0, + 0, 0, 307, 293, 294, 295, 296, 297, 1558, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 0, 0, + 0, 0, 0, 307, 293, 294, 295, 296, 297, 1563, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 293, 294, 295, 296, 297, + 1564, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 0, 0, 0, 0, 0, 307, 293, 294, 295, 296, + 297, 1565, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 0, 0, 0, 0, 0, 307, 293, 294, 295, + 296, 297, 1566, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 0, 0, 0, 0, 0, 307, 293, 294, + 295, 296, 297, 1567, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 0, 0, 0, 0, 0, 307, 293, + 294, 295, 296, 297, 1568, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 293, 294, 295, 296, 297, 1591, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 0, 0, 0, 0, 0, + 307, 293, 294, 295, 296, 297, 1592, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 0, 0, 0, 0, + 0, 307, 293, 294, 295, 296, 297, 1593, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 0, 0, 0, + 0, 0, 307, 293, 294, 295, 296, 297, 1594, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 0, 0, + 0, 0, 0, 307, 293, 294, 295, 296, 297, 1595, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 293, 294, 295, 296, 297, + 1596, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 0, 0, 0, 0, 0, 307, 293, 294, 295, 296, + 297, 1619, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 0, 0, 0, 0, 0, 307, 293, 294, 295, + 296, 297, 1620, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 0, 0, 0, 0, 0, 307, 293, 294, + 295, 296, 297, 1621, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 0, 0, 0, 0, 0, 307, 293, + 294, 295, 296, 297, 1633, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 293, 294, 295, 296, 297, 1634, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 0, 0, 0, 0, 0, + 307, 293, 294, 295, 296, 297, 1635, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 0, 0, 0, 0, + 0, 307, 293, 294, 295, 296, 297, 1650, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 0, 0, 0, + 0, 0, 307, 293, 294, 295, 296, 297, 1651, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 0, 0, + 0, 0, 0, 307, 293, 294, 295, 296, 297, 1652, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 0, 0, 0, 460, 293, + 294, 295, 296, 297, 0, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 0, 0, 0, 581, 293, 294, 295, 296, 297, 0, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 0, 0, 0, 614, 293, + 294, 295, 296, 297, 0, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 0, 0, 0, 616, 293, 294, 295, 296, 297, 0, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 0, 0, 0, 618, 293, + 294, 295, 296, 297, 0, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 0, 0, 0, 620, 293, 294, 295, 296, 297, 0, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 0, 0, 0, 622, 293, + 294, 295, 296, 297, 0, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 0, 0, 0, 624, 293, 294, 295, 296, 297, 0, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 0, 0, 0, 626, 293, + 294, 295, 296, 297, 0, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 0, 0, 0, 628, 293, 294, 295, 296, 297, 0, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 0, 0, 0, 630, 293, + 294, 295, 296, 297, 0, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 0, 0, 0, 632, 293, 294, 295, 296, 297, 0, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 0, 0, 0, 634, 293, + 294, 295, 296, 297, 0, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 0, 0, 0, 638, 293, 294, 295, 296, 297, 0, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 0, 0, 0, 640, 293, + 294, 295, 296, 297, 0, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 0, 0, 0, 642, 293, 294, 295, 296, 297, 0, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 0, 0, 0, 644, 293, + 294, 295, 296, 297, 0, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 0, 0, 0, 646, 293, 294, 295, 296, 297, 0, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 0, 0, 0, 648, 293, + 294, 295, 296, 297, 0, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 0, 0, 0, 718, 293, 294, 295, 296, 297, 0, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 0, 0, 0, 919, 293, + 294, 295, 296, 297, 0, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 0, 0, 0, 921, 293, 294, 295, 296, 297, 0, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 0, 0, 0, 923, 293, + 294, 295, 296, 297, 0, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 0, 0, 0, 925, 293, 294, 295, 296, 297, 0, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 0, 0, 0, 926, 293, + 294, 295, 296, 297, 0, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 0, 0, 0, 1052, 293, 294, 295, 296, 297, 0, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 0, 485, 293, 294, 295, + 296, 297, 0, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 0, 0, 0, 0, 0, 307, 0, 486, + 293, 294, 295, 296, 297, 0, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 0, 0, 0, 0, 0, + 307, 0, 488, 293, 294, 295, 296, 297, 0, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 0, 0, + 0, 0, 0, 307, 0, 490, 293, 294, 295, 296, + 297, 0, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 0, 0, 0, 0, 0, 307, 0, 491, 293, + 294, 295, 296, 297, 0, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 0, 498, 293, 294, 295, 296, 297, 0, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 0, 0, 0, + 0, 0, 307, 0, 536, 293, 294, 295, 296, 297, + 0, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 0, 0, 0, 0, 0, 307, 0, 537, 293, 294, + 295, 296, 297, 0, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 0, 0, 0, 0, 0, 307, 0, + 540, 293, 294, 295, 296, 297, 0, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 0, 0, 0, 0, + 0, 307, 0, 543, 293, 294, 295, 296, 297, 0, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 0, 613, 293, 294, 295, + 296, 297, 0, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 0, 0, 0, 0, 0, 307, 0, 615, + 293, 294, 295, 296, 297, 0, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 0, 0, 0, 0, 0, + 307, 0, 617, 293, 294, 295, 296, 297, 0, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 0, 0, + 0, 0, 0, 307, 0, 619, 293, 294, 295, 296, + 297, 0, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 0, 0, 0, 0, 0, 307, 0, 621, 293, + 294, 295, 296, 297, 0, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 0, 623, 293, 294, 295, 296, 297, 0, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 0, 0, 0, + 0, 0, 307, 0, 625, 293, 294, 295, 296, 297, + 0, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 0, 0, 0, 0, 0, 307, 0, 627, 293, 294, + 295, 296, 297, 0, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 0, 0, 0, 0, 0, 307, 0, + 629, 293, 294, 295, 296, 297, 0, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 0, 0, 0, 0, + 0, 307, 0, 631, 293, 294, 295, 296, 297, 0, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 0, 633, 293, 294, 295, + 296, 297, 0, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 0, 0, 0, 0, 0, 307, 0, 637, + 293, 294, 295, 296, 297, 0, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 0, 0, 0, 0, 0, + 307, 0, 639, 293, 294, 295, 296, 297, 0, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 0, 0, + 0, 0, 0, 307, 0, 641, 293, 294, 295, 296, + 297, 0, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 0, 0, 0, 0, 0, 307, 0, 643, 293, + 294, 295, 296, 297, 0, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 0, 645, 293, 294, 295, 296, 297, 0, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 0, 0, 0, + 0, 0, 307, 0, 647, 293, 294, 295, 296, 297, + 0, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 0, 0, 0, 0, 0, 307, 0, 680, 293, 294, + 295, 296, 297, 0, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 0, 0, 0, 0, 0, 307, 0, + 682, 293, 294, 295, 296, 297, 0, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 0, 0, 0, 0, + 0, 307, 0, 694, 293, 294, 295, 296, 297, 0, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 0, 695, 293, 294, 295, + 296, 297, 0, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 0, 0, 0, 0, 0, 307, 0, 699, + 293, 294, 295, 296, 297, 0, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 0, 0, 0, 0, 0, + 307, 0, 700, 293, 294, 295, 296, 297, 0, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 0, 0, + 0, 0, 0, 307, 0, 701, 293, 294, 295, 296, + 297, 0, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 0, 0, 0, 0, 0, 307, 0, 702, 293, + 294, 295, 296, 297, 0, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 0, 703, 293, 294, 295, 296, 297, 0, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 0, 0, 0, + 0, 0, 307, 0, 724, 293, 294, 295, 296, 297, + 0, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 0, 0, 0, 0, 0, 307, 0, 728, 293, 294, + 295, 296, 297, 0, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 0, 0, 0, 0, 0, 307, 0, + 918, 293, 294, 295, 296, 297, 0, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 0, 0, 0, 0, + 0, 307, 0, 920, 293, 294, 295, 296, 297, 0, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 0, 922, 293, 294, 295, + 296, 297, 0, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 0, 0, 0, 0, 0, 307, 0, 924, + 293, 294, 295, 296, 297, 0, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 0, 0, 0, 0, 0, + 307, 0, 988, 293, 294, 295, 296, 297, 0, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 0, 0, + 0, 0, 0, 307, 0, 1077, 293, 294, 295, 296, + 297, 0, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 0, 0, 0, 0, 0, 307, 0, 1102, 293, + 294, 295, 296, 297, 0, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 0, 1192, 293, 294, 295, 296, 297, 0, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 0, 0, 0, + 0, 0, 307, 0, 1196, 293, 294, 295, 296, 297, + 0, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 0, 0, 0, 0, 0, 307, 0, 1198, 293, 294, + 295, 296, 297, 0, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 0, 0, 0, 0, 0, 307, 0, + 1319, 293, 294, 295, 296, 297, 0, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 0, 0, 0, 0, + 0, 307, 0, 1321, 293, 294, 295, 296, 297, 0, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 0, 1323, 293, 294, 295, + 296, 297, 0, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 0, 0, 0, 0, 0, 307, 0, 1334, + 293, 294, 295, 296, 297, 0, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 0, 0, 0, 0, 0, + 307, 0, 1335, 293, 294, 295, 296, 297, 0, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 0, 0, + 0, 0, 0, 307, 0, 1336, 293, 294, 295, 296, + 297, 0, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 0, 0, 0, 0, 0, 307, 0, 1337, 293, + 294, 295, 296, 297, 0, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 0, 0, 0, 0, 0, 307, + 0, 1416, 293, 294, 295, 296, 297, 0, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 0, 0, 0, + 0, 0, 307, 0, 1534, 293, 294, 295, 296, 297, + 0, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 0, 0, 0, 0, 0, 307, 0, 1535, 293, 294, + 295, 296, 297, 0, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 0, 0, 0, 0, 0, 307, 0, + 1536, 293, 294, 295, 296, 297, 0, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 0, 0, 0, 0, + 0, 307, 0, 1622, 293, 294, 295, 296, 297, 0, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, + 0, 0, 0, 0, 307, 0, 1623, 293, 294, 295, + 296, 297, 0, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 0, 0, 0, 0, 0, 307, 0, 1624, + 293, 294, 295, 296, 297, 0, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 0, 0, 0, 0, 0, + 307, 0, 1670, 293, 294, 295, 296, 297, 0, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 0, 0, + 0, 0, 0, 307, 0, 1671, 293, 294, 295, 296, + 297, 0, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 0, 0, 0, 0, 0, 307, 0, 1672 }; static const short yycheck[] = { 23, - 280, 281, 282, 88, 23, 290, 326, 1236, 4, 810, - 4, 1240, 4, 4, 4, 351, 3, 42, 1091, 89, - 1005, 6, 182, 7, 6, 4, 65, 3, 188, 1014, - 65, 70, 64, 171, 172, 70, 1021, 64, 6, 6, - 5, 4, 65, 4, 5, 171, 172, 70, 183, 187, - 1170, 189, 187, 65, 80, 65, 65, 183, 70, 152, - 70, 70, 171, 172, 49, 171, 172, 65, 7, 34, - 35, 36, 70, 34, 35, 36, 38, 183, 187, 41, - 189, 171, 172, 71, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 84, 187, 182, 189, - 184, 125, 126, 127, 288, 6, 130, 131, 6, 133, - 1183, 103, 182, 92, 93, 6, 140, 141, 142, 143, - 6, 145, 146, 183, 148, 149, 150, 187, 152, 92, - 93, 171, 172, 173, 174, 175, 107, 108, 109, 110, - 111, 181, 326, 944, 168, 169, 122, 123, 124, 125, - 126, 127, 128, 129, 189, 182, 188, 182, 6, 7, - 177, 188, 186, 187, 181, 189, 189, 191, 192, 489, - 178, 179, 198, 157, 158, 159, 160, 189, 186, 189, - 189, 466, 182, 503, 184, 172, 182, 467, 1417, 171, - 172, 189, 1421, 182, 188, 184, 188, 188, 188, 1184, - 8, 189, 182, 1188, 171, 172, 46, 38, 188, 233, - 41, 42, 6, 44, 238, 239, 240, 241, 242, 243, + 88, 287, 23, 345, 1239, 1005, 804, 3, 1243, 320, + 4, 277, 278, 279, 1014, 4, 4, 4, 64, 89, + 4, 1021, 64, 3, 64, 7, 42, 1094, 152, 38, + 39, 40, 41, 42, 43, 44, 45, 6, 47, 1173, + 49, 50, 6, 52, 53, 65, 80, 65, 6, 6, + 70, 5, 70, 4, 5, 183, 285, 65, 65, 187, + 69, 4, 70, 70, 65, 4, 65, 171, 172, 70, + 7, 70, 171, 172, 171, 172, 85, 86, 87, 183, + 34, 35, 36, 34, 35, 36, 183, 182, 187, 184, + 189, 320, 49, 171, 172, 171, 172, 6, 171, 172, + 65, 125, 126, 127, 182, 70, 130, 131, 6, 133, + 188, 187, 182, 189, 103, 188, 140, 141, 142, 1186, + 144, 38, 146, 147, 41, 149, 122, 123, 124, 125, + 126, 127, 128, 129, 7, 182, 182, 184, 147, 182, + 182, 165, 166, 941, 6, 188, 188, 7, 188, 92, + 93, 183, 182, 92, 93, 187, 171, 172, 188, 183, + 184, 195, 186, 6, 188, 189, 182, 171, 172, 189, + 6, 189, 483, 188, 460, 157, 158, 159, 160, 7, + 189, 189, 189, 494, 188, 1420, 6, 1187, 189, 1424, + 189, 1191, 172, 64, 188, 461, 178, 179, 182, 188, + 188, 188, 171, 172, 186, 183, 230, 171, 172, 187, + 182, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, - 274, 275, 276, 277, 278, 279, 1485, 178, 179, 182, - 1489, 184, 182, 184, 288, 186, 1386, 178, 179, 1389, - 7, 290, 296, 297, 298, 299, 300, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 171, 172, 171, - 172, 178, 179, 317, 182, 6, 320, 184, 182, 186, - 3, 325, 326, 182, 188, 489, 188, 331, 332, 333, - 182, 335, 336, 337, 338, 339, 340, 341, 6, 503, - 183, 7, 171, 172, 187, 1310, 1311, 1312, 1313, 353, - 354, 355, 1317, 1453, 358, 171, 172, 1457, 182, 188, - 184, 183, 366, 54, 664, 187, 55, 56, 372, 7, - 1151, 42, 188, 161, 162, 163, 164, 165, 182, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 171, 172, - 183, 171, 172, 181, 187, 695, 38, 182, 151, 41, - 42, 189, 42, 156, 187, 665, 8, 187, 163, 164, - 165, 410, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 171, 172, 43, 44, 178, 181, 6, 7, 1394, - 1395, 184, 185, 1398, 6, 171, 172, 187, 171, 172, - 157, 158, 159, 160, 171, 172, 42, 171, 172, 171, - 172, 187, 171, 172, 187, 183, 6, 182, 462, 187, - 187, 178, 179, 187, 468, 187, 182, 466, 187, 186, + 274, 275, 276, 1488, 483, 1389, 6, 1492, 1392, 178, + 179, 285, 6, 7, 174, 494, 287, 186, 178, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 157, 158, 159, 160, 8, 313, + 38, 315, 182, 41, 42, 319, 320, 157, 158, 159, + 160, 325, 326, 327, 54, 329, 330, 331, 332, 333, + 334, 335, 182, 1313, 1314, 1315, 1316, 183, 178, 179, + 1320, 187, 1456, 347, 348, 349, 1460, 182, 352, 157, + 158, 159, 160, 171, 172, 183, 360, 171, 172, 187, + 41, 42, 366, 44, 171, 172, 46, 658, 183, 187, + 178, 179, 187, 187, 42, 189, 1154, 171, 172, 182, + 187, 148, 171, 172, 171, 172, 153, 182, 8, 171, + 172, 171, 172, 187, 182, 686, 171, 172, 187, 182, + 187, 184, 42, 404, 182, 187, 184, 187, 175, 182, + 171, 172, 187, 659, 181, 182, 38, 1397, 1398, 41, + 42, 1401, 44, 714, 715, 716, 187, 182, 6, 184, + 182, 161, 162, 163, 164, 165, 182, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 44, 43, 44, 658, + 42, 181, 456, 662, 6, 182, 182, 184, 462, 460, + 42, 161, 162, 163, 164, 165, 188, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 182, 686, 184, 483, + 182, 181, 184, 182, 1464, 184, 178, 179, 492, 189, + 494, 188, 496, 497, 58, 59, 60, 61, 502, 63, + 171, 172, 173, 174, 175, 714, 715, 716, 512, 513, + 181, 188, 178, 179, 6, 178, 179, 521, 184, 6, + 186, 184, 182, 186, 184, 182, 182, 531, 184, 182, + 796, 797, 823, 182, 6, 184, 182, 541, 542, 55, + 56, 161, 162, 163, 164, 165, 1526, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 173, 174, 175, 178, + 179, 181, 6, 183, 181, 184, 162, 186, 164, 107, + 108, 109, 110, 111, 170, 6, 182, 182, 184, 184, + 581, 4, 1562, 161, 162, 163, 164, 165, 4, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 182, 182, + 184, 184, 182, 181, 184, 182, 182, 184, 184, 161, + 162, 163, 164, 165, 823, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 6, 182, 182, 184, 184, 181, + 42, 635, 636, 184, 187, 186, 189, 233, 187, 187, + 189, 189, 187, 3, 189, 649, 650, 651, 652, 653, + 654, 655, 974, 187, 658, 189, 182, 187, 662, 189, + 187, 665, 189, 187, 187, 189, 189, 5, 182, 1649, + 674, 182, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 182, 686, 687, 6, 931, 181, 6, 455, 161, + 162, 163, 164, 165, 762, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 6, 187, 187, 189, 189, 181, + 714, 715, 716, 6, 7, 719, 720, 5, 187, 723, + 189, 187, 182, 189, 970, 6, 182, 731, 732, 188, 161, 162, 163, 164, 165, 182, 167, 168, 169, 170, - 171, 172, 173, 174, 175, 489, 44, 173, 174, 175, - 181, 157, 158, 159, 160, 181, 1461, 501, 182, 503, - 664, 505, 506, 182, 668, 184, 188, 511, 178, 179, - 188, 188, 178, 179, 184, 42, 186, 521, 522, 157, - 158, 159, 160, 182, 41, 42, 530, 44, 182, 829, - 184, 695, 182, 537, 184, 6, 6, 802, 803, 182, - 178, 179, 6, 547, 548, 165, 182, 167, 184, 58, - 59, 60, 61, 173, 63, 182, 182, 184, 1523, 161, - 162, 163, 164, 165, 4, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 182, 182, 184, 184, 182, 181, - 184, 183, 182, 182, 184, 184, 4, 42, 587, 161, - 162, 163, 164, 165, 1559, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 182, 182, 184, 184, 182, 181, - 184, 161, 162, 163, 164, 165, 236, 167, 168, 169, - 170, 171, 172, 173, 174, 175, 182, 6, 184, 5, - 182, 181, 184, 182, 187, 184, 189, 641, 642, 184, - 187, 186, 189, 187, 187, 189, 189, 187, 187, 189, - 189, 655, 656, 657, 658, 659, 660, 661, 182, 182, - 664, 977, 182, 182, 668, 829, 187, 671, 189, 187, - 6, 189, 6, 187, 934, 189, 680, 5, 182, 164, - 165, 1646, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 695, 696, 187, 182, 189, 181, 187, 187, 189, - 189, 188, 182, 768, 187, 184, 189, 6, 461, 187, - 187, 189, 189, 973, 187, 187, 189, 189, 187, 182, - 189, 725, 726, 188, 8, 729, 188, 4, 348, 349, - 3, 4, 182, 737, 738, 182, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 187, 6, 189, 187, 187, 189, 189, 182, 772, 773, - 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, - 784, 785, 161, 162, 163, 164, 165, 182, 167, 168, - 169, 170, 171, 172, 173, 174, 175, 187, 182, 189, - 188, 188, 181, 188, 803, 6, 95, 811, 6, 813, + 171, 172, 173, 174, 175, 182, 342, 343, 188, 187, + 181, 189, 187, 187, 189, 189, 188, 187, 187, 189, + 189, 182, 766, 767, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 187, 182, 189, 161, + 162, 163, 164, 165, 182, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 182, 187, 797, 189, 187, 181, + 189, 805, 182, 807, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 187, 823, + 189, 825, 4, 827, 163, 164, 165, 188, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 841, 842, 843, + 188, 187, 181, 189, 1166, 187, 187, 189, 189, 184, + 864, 188, 6, 95, 6, 182, 860, 861, 182, 161, + 162, 163, 164, 165, 182, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 182, 182, 182, 182, 182, 181, 161, 162, 163, 164, 165, 182, 167, 168, 169, 170, - 171, 172, 173, 174, 175, 829, 182, 831, 182, 833, - 181, 5, 182, 182, 182, 182, 187, 182, 189, 182, - 182, 182, 182, 847, 848, 849, 183, 1163, 187, 182, - 182, 182, 182, 182, 4, 182, 182, 182, 182, 863, - 864, 867, 161, 162, 163, 164, 165, 182, 167, 168, - 169, 170, 171, 172, 173, 174, 175, 161, 162, 163, - 164, 165, 181, 167, 168, 169, 170, 171, 172, 173, - 174, 175, 182, 187, 182, 182, 182, 181, 171, 172, - 520, 182, 182, 182, 177, 181, 905, 182, 182, 182, - 7, 7, 185, 7, 186, 188, 161, 162, 163, 164, - 165, 7, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 935, 685, 686, 183, 688, 181, 7, 7, 692, - 693, 90, 188, 161, 162, 163, 164, 165, 6, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 153, 963, - 964, 5, 1027, 181, 5, 5, 5, 5, 5, 973, - 5, 189, 5, 5, 727, 728, 6, 5, 731, 5, - 984, 985, 5, 5, 5, 5, 5, 5, 5, 5, - 996, 995, 745, 746, 998, 5, 5, 5, 751, 752, - 5, 140, 5, 5, 1008, 758, 5, 760, 5, 3, - 5, 1015, 1016, 1017, 5, 187, 6, 5, 1022, 183, - 6, 4, 1026, 7, 6, 6, 1030, 1031, 1032, 1033, + 171, 172, 173, 174, 175, 182, 182, 182, 182, 182, + 181, 902, 182, 182, 182, 182, 182, 182, 182, 182, + 182, 678, 679, 182, 681, 511, 683, 684, 182, 182, + 182, 182, 189, 3, 4, 182, 182, 182, 932, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 5, 721, 722, 960, 961, 725, 1027, + 187, 183, 187, 6, 4, 181, 970, 186, 7, 7, + 7, 7, 739, 740, 183, 7, 7, 90, 745, 746, + 984, 985, 996, 188, 153, 752, 6, 754, 5, 5, + 5, 995, 164, 165, 998, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 1008, 5, 5, 5, 5, 181, + 5, 1015, 1016, 1017, 5, 5, 5, 5, 1022, 5, + 5, 5, 1026, 5, 5, 5, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, - 167, 168, 169, 170, 171, 172, 173, 174, 175, 7, - 1054, 7, 7, 6, 181, 6, 186, 1061, 7, 7, - 7, 189, 188, 683, 189, 188, 7, 7, 182, 822, - 7, 824, 154, 5, 1078, 187, 187, 187, 187, 187, - 187, 834, 835, 836, 187, 187, 839, 840, 841, 842, - 843, 844, 845, 1097, 6, 1101, 187, 187, 187, 187, - 720, 721, 722, 161, 162, 163, 164, 165, 187, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 182, 739, - 187, 187, 187, 181, 187, 187, 187, 187, 748, 183, - 187, 161, 162, 163, 164, 165, 187, 167, 168, 169, - 170, 171, 172, 173, 174, 175, 182, 6, 4, 6, - 4, 181, 1412, 187, 6, 6, 187, 182, 187, 7, - 187, 185, 1166, 1167, 6, 1169, 7, 1171, 1172, 182, - 7, 7, 187, 187, 1178, 187, 187, 184, 6, 6, - 933, 187, 1186, 7, 182, 7, 182, 188, 7, 182, - 1194, 7, 7, 182, 7, 1199, 7, 182, 1202, 7, - 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, - 1214, 1215, 1216, 1217, 182, 182, 182, 182, 1222, 182, - 1480, 1225, 1482, 1227, 1228, 1229, 7, 7, 7, 150, - 3, 3, 3, 3, 173, 3, 3, 3, 3, 992, - 3, 3, 3, 1249, 3, 3, 999, 3, 5, 161, - 162, 163, 164, 165, 5, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 3, 1018, 3, 183, 6, 181, - 4, 186, 183, 6, 1534, 71, 72, 73, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, 84, 1293, - 7, 1295, 186, 6, 6, 6, 6, 1301, 6, 188, - 6, 6, 91, 1309, 188, 187, 187, 183, 187, 183, - 187, 183, 187, 183, 187, 183, 187, 183, 1322, 1323, - 1324, 1325, 1326, 1327, 1328, 1329, 1330, 187, 183, 949, - 6, 1335, 1336, 161, 162, 163, 164, 165, 187, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 187, 187, - 1356, 6, 187, 181, 187, 187, 187, 187, 978, 4, - 980, 187, 982, 3, 4, 6, 187, 187, 186, 9, + 5, 5, 5, 5, 5, 140, 5, 5, 5, 816, + 1054, 818, 5, 3, 5, 187, 5, 1061, 6, 5, + 183, 828, 829, 830, 6, 4, 833, 834, 835, 836, + 837, 838, 839, 6, 1078, 7, 7, 7, 7, 7, + 7, 677, 7, 186, 189, 189, 188, 188, 7, 7, + 1104, 171, 172, 182, 7, 154, 1100, 177, 5, 187, + 187, 187, 182, 187, 187, 185, 187, 6, 188, 187, + 187, 187, 187, 187, 187, 711, 712, 713, 161, 162, + 163, 164, 165, 187, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 187, 187, 4, 187, 733, 181, 187, + 187, 161, 162, 163, 164, 165, 742, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 182, 187, 187, 187, + 187, 181, 187, 930, 187, 1169, 1170, 6, 1172, 1415, + 1174, 1175, 182, 187, 187, 187, 187, 1181, 187, 187, + 183, 187, 6, 185, 6, 1189, 182, 7, 182, 182, + 182, 6, 4, 1197, 7, 182, 6, 6, 1202, 182, + 7, 1205, 7, 1207, 1208, 1209, 1210, 1211, 1212, 1213, + 1214, 1215, 1216, 1217, 1218, 1219, 1220, 184, 188, 7, + 7, 1225, 182, 7, 1228, 992, 1230, 1231, 1232, 7, + 182, 7, 999, 7, 7, 182, 7, 1483, 1252, 1485, + 7, 182, 182, 7, 182, 7, 150, 3, 3, 3, + 4, 1018, 3, 173, 3, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 1537, 1296, 5, 1298, 5, 4, 6, 1312, 183, + 1304, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 183, 186, 7, 6, 186, + 6, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, + 6, 6, 6, 188, 1338, 1339, 6, 6, 91, 188, + 187, 187, 183, 187, 187, 1359, 183, 183, 183, 187, + 946, 161, 162, 163, 164, 165, 187, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 187, 183, 187, 187, + 187, 181, 6, 187, 6, 183, 187, 183, 4, 975, + 7, 977, 186, 979, 187, 187, 187, 187, 187, 187, + 187, 187, 6, 92, 6, 6, 185, 6, 6, 1403, + 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, + 1414, 1178, 6, 1180, 6, 1429, 1183, 171, 172, 189, + 6, 6, 6, 177, 6, 6, 6, 6, 182, 6, + 6, 185, 1199, 6, 188, 6, 6, 91, 3, 6, + 6, 3, 173, 6, 3, 6, 6, 3, 6, 1463, + 3, 6, 6, 3, 6, 3, 3, 6, 1462, 4, + 6, 186, 6, 6, 1468, 1469, 1470, 1471, 1472, 1473, + 1474, 1475, 1476, 1477, 7, 1479, 6, 1481, 189, 186, + 185, 1495, 188, 88, 188, 188, 3, 4, 188, 183, + 187, 187, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 187, 183, 93, 1523, + 1524, 183, 187, 187, 1528, 1529, 1530, 1531, 1532, 1533, + 183, 187, 183, 1300, 183, 187, 183, 187, 183, 4, + 91, 1308, 1309, 150, 6, 3, 6, 6, 3, 6, + 6, 3, 6, 6, 1558, 6, 6, 6, 5, 1563, + 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 6, 5, + 189, 6, 188, 1169, 1170, 188, 1172, 187, 6, 183, + 6, 6, 6, 189, 187, 187, 187, 1591, 1592, 1593, + 1594, 1595, 1596, 1597, 183, 1599, 187, 1601, 161, 162, + 163, 164, 165, 6, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 187, 183, 1619, 1620, 1621, 181, 187, + 6, 6, 6, 6, 1391, 6, 6, 1394, 6, 1633, + 1634, 1635, 1636, 1637, 1638, 1231, 8, 6, 6, 5, + 5, 150, 183, 183, 6, 187, 1650, 1651, 1652, 1653, + 188, 1655, 188, 1657, 171, 172, 187, 189, 187, 187, + 177, 187, 187, 6, 188, 182, 188, 188, 185, 188, + 6, 188, 187, 1677, 1678, 1679, 88, 6, 6, 5, + 5, 188, 1686, 188, 1688, 189, 1690, 188, 187, 187, + 1457, 183, 183, 3, 4, 188, 88, 6, 1465, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 189, 187, 92, 1400, 1401, 1402, 1403, - 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 6, 6, - 185, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 1426, 6, 1175, 6, 1177, 6, 6, 1180, 161, 162, - 163, 164, 165, 7, 167, 168, 169, 170, 171, 172, - 173, 174, 175, 1196, 91, 3, 6, 3, 181, 6, - 173, 6, 6, 3, 1460, 1459, 3, 6, 6, 3, - 6, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, - 1474, 6, 1476, 3, 1478, 3, 3, 6, 4, 186, - 189, 6, 6, 3, 4, 7, 1492, 6, 186, 9, + 30, 31, 32, 3, 4, 189, 189, 6, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 185, 6, 188, 1520, 1521, 188, 188, - 188, 1525, 1526, 1527, 1528, 1529, 1530, 88, 187, 183, - 187, 171, 172, 8, 187, 183, 187, 177, 187, 183, - 183, 187, 182, 4, 1297, 185, 1166, 1167, 188, 1169, - 183, 1555, 1305, 1306, 183, 187, 1560, 1561, 1562, 1563, - 1564, 1565, 1566, 1567, 1568, 183, 187, 183, 38, 39, - 40, 41, 42, 43, 44, 45, 93, 47, 91, 49, - 50, 150, 52, 53, 1588, 1589, 1590, 1591, 1592, 1593, - 1594, 6, 1596, 3, 1598, 6, 3, 6, 6, 69, - 6, 6, 6, 6, 6, 3, 6, 6, 1228, 5, - 5, 189, 1616, 1617, 1618, 85, 86, 87, 6, 189, - 188, 188, 187, 187, 187, 187, 1630, 1631, 1632, 1633, - 1634, 1635, 183, 6, 187, 1388, 6, 6, 1391, 6, - 183, 183, 187, 1647, 1648, 1649, 1650, 187, 1652, 6, - 1654, 171, 172, 6, 6, 6, 6, 177, 6, 6, - 6, 6, 182, 6, 6, 185, 5, 5, 188, 187, - 1674, 1675, 1676, 188, 188, 187, 6, 147, 189, 1683, - 187, 1685, 187, 1687, 183, 183, 161, 162, 163, 164, - 165, 187, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 1454, 187, 187, 3, 4, 181, 188, 188, 1462, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 3, 4, 188, 188, 6, 6, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 88, 150, 3, 4, 6, 188, - 6, 1524, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 5, 5, 188, 6, - 189, 188, 183, 187, 187, 1558, 183, 189, 188, 6, - 6, 161, 162, 163, 164, 165, 88, 167, 168, 169, - 170, 171, 172, 173, 174, 175, 6, 6, 3, 4, - 5, 181, 7, 1586, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 6, 34, - 35, 36, 1615, 6, 6, 6, 6, 189, 188, 187, - 187, 6, 171, 172, 6, 6, 1629, 155, 177, 6, - 156, 187, 187, 182, 161, 162, 163, 164, 165, 188, - 167, 168, 169, 170, 171, 172, 173, 174, 175, 188, - 188, 188, 171, 172, 181, 6, 187, 6, 177, 183, - 187, 6, 189, 182, 6, 6, 6, 187, 6, 188, - 6, 187, 6, 188, 188, 188, 187, 183, 6, 188, - 188, 188, 6, 6, 171, 172, 6, 0, 0, 589, - 177, 7, 7, 7, 990, 182, 3, 4, 5, -1, - -1, 188, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 8, 34, 35, 36, - -1, 938, 157, 158, 159, 160, -1, -1, -1, -1, - -1, 8, -1, -1, -1, -1, 171, 172, -1, -1, - -1, -1, 177, 178, 179, -1, 8, 182, -1, 184, - -1, 186, 3, 4, -1, -1, -1, -1, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 3, 4, -1, -1, -1, -1, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 3, 4, -1, -1, -1, -1, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 171, 172, -1, -1, -1, -1, - 177, -1, -1, -1, -1, 182, -1, -1, -1, 161, - 162, 163, 164, 165, -1, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 161, 162, 163, 164, 165, 181, - 167, 168, 169, 170, 171, 172, 173, 174, 175, 161, - 162, 163, 164, 165, 181, 167, 168, 169, 170, 171, - 172, 173, 174, 175, -1, -1, -1, -1, -1, 181, - 171, 172, -1, -1, -1, -1, 177, -1, -1, -1, - -1, 182, 161, 162, 163, 164, 165, -1, 167, 168, - 169, 170, 171, 172, 173, 174, 175, -1, -1, -1, - 171, 172, 181, -1, 183, -1, 177, -1, 187, 0, - 1, 182, 3, 4, -1, 161, 162, 163, 164, 165, - -1, 167, 168, 169, 170, 171, 172, 173, 174, 175, - 171, 172, -1, -1, -1, 181, 177, -1, -1, -1, - -1, 182, 33, 189, -1, -1, 37, 38, 39, 40, - 41, 42, 43, 44, 45, -1, 47, 48, 49, 50, - 51, 52, 53, -1, -1, -1, 57, 58, 59, 60, - 61, 62, 63, -1, 65, 66, 67, 68, 69, 161, - 162, 163, 164, 165, -1, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 85, 86, 87, -1, -1, 181, - -1, 183, -1, 94, -1, 96, 97, 98, 99, 100, - 101, 102, -1, -1, 38, 39, 40, 41, 42, 43, - 44, 45, -1, 47, -1, 49, 50, -1, 52, 53, - -1, 122, 123, 124, 125, 126, 127, 128, 129, -1, - -1, -1, -1, -1, -1, 69, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 147, 148, 149, -1, - 151, 85, 86, 87, 38, 39, 40, 41, 42, 43, - 44, 45, -1, 47, -1, 49, 50, -1, 52, 53, + 30, 31, 32, 6, 6, 3, 4, 6, 188, 6, + 1527, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 6, 6, 6, 187, 161, + 162, 163, 164, 165, 1561, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 6, 187, 6, 6, 155, 181, + 6, 156, 187, 187, 6, 188, 187, 3, 4, 5, + 183, 7, 1589, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 188, 34, 35, + 36, 1618, 6, 188, 6, 6, 6, 6, 188, 6, + 187, 171, 172, 187, 187, 1632, 188, 177, 188, 6, + 6, 183, 182, 161, 162, 163, 164, 165, 188, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 6, 188, + 188, 171, 172, 181, 188, 6, 6, 177, 6, 187, + 0, 189, 182, 0, 583, 7, 7, -1, 188, 7, + -1, 990, -1, 935, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 171, 172, -1, -1, -1, -1, 177, + -1, -1, -1, -1, 182, 3, 4, 5, -1, -1, + 188, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 8, 34, 35, 36, -1, + -1, 157, 158, 159, 160, -1, -1, -1, -1, -1, + 8, -1, -1, -1, -1, 171, 172, -1, -1, -1, + -1, 177, 178, 179, -1, 8, 182, -1, 184, -1, + 186, 3, 4, -1, -1, -1, -1, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 3, 4, -1, -1, -1, -1, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 3, 4, -1, -1, -1, -1, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 8, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 171, 172, -1, -1, -1, -1, 177, + -1, -1, -1, -1, 182, -1, -1, -1, 161, 162, + 163, 164, 165, -1, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 161, 162, 163, 164, 165, 181, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 161, 162, + 163, 164, 165, 181, 167, 168, 169, 170, 171, 172, + 173, 174, 175, -1, -1, -1, -1, -1, 181, 171, + 172, -1, -1, -1, -1, 177, -1, -1, -1, -1, + 182, 161, 162, 163, 164, 165, -1, 167, 168, 169, + 170, 171, 172, 173, 174, 175, -1, -1, -1, 171, + 172, 181, -1, -1, -1, 177, -1, 187, -1, 189, + 182, -1, 38, 39, 40, 41, 42, 43, 44, 45, + -1, 47, -1, 49, 50, -1, 52, 53, -1, 171, + 172, -1, -1, 0, 1, 177, 3, 4, -1, -1, + 182, -1, -1, 69, 161, 162, 163, 164, 165, -1, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 85, + 86, 87, -1, -1, 181, -1, 33, -1, -1, -1, + 37, 38, 39, 40, 41, 42, 43, 44, 45, -1, + 47, 48, 49, 50, 51, 52, 53, -1, -1, -1, + 57, 58, 59, 60, 61, 62, 63, -1, 65, 66, + 67, 68, 69, 161, 162, 163, 164, 165, -1, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 85, 86, + 87, 147, -1, 181, -1, 183, -1, 94, -1, 96, + 97, 98, 99, 100, 101, 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 4, -1, 69, 161, 162, 163, 164, - 165, -1, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 85, 86, 87, -1, -1, 181, -1, -1, -1, - -1, -1, 33, 147, 189, -1, 37, 38, 39, 40, - 41, 42, 43, 44, 45, -1, 47, 48, 49, 50, - 51, 52, 53, -1, -1, -1, 57, 58, 59, 60, - 61, 62, 63, 41, 65, 66, 67, 68, 69, -1, - -1, -1, -1, -1, -1, 189, -1, -1, -1, -1, - -1, -1, -1, 147, 85, 86, 87, -1, -1, -1, - -1, -1, -1, 94, -1, 96, 97, 98, 99, 100, - 101, 102, -1, 161, 162, 163, 164, 165, -1, 167, + -1, -1, -1, -1, 4, 122, 123, 124, 125, 126, + 127, 128, 129, 189, -1, 161, 162, 163, 164, 165, + -1, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 147, 148, 149, 33, 151, 181, -1, 37, 38, 39, + 40, 41, 42, 43, 44, 45, -1, 47, 48, 49, + 50, 51, 52, 53, -1, -1, -1, 57, 58, 59, + 60, 61, 62, 63, 41, 65, 66, 67, 68, 69, + 161, 162, 163, 164, 165, -1, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 85, 86, 87, -1, -1, + 181, -1, 183, -1, 94, -1, 96, 97, 98, 99, + 100, 101, 102, 38, 39, 40, 41, 42, 43, 44, + 45, -1, 47, -1, 49, 50, -1, 52, 53, -1, + -1, -1, -1, -1, -1, -1, -1, 104, 105, 106, + -1, -1, -1, -1, 69, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, -1, -1, 147, -1, -1, + 85, 86, 87, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, -1, 141, 142, 143, 144, 145, 146, + 161, 162, 163, 164, 165, -1, 167, 168, 169, 170, + 171, 172, 173, 174, 175, -1, -1, -1, -1, -1, + 181, -1, -1, -1, -1, -1, 187, -1, 189, -1, + -1, -1, -1, -1, -1, -1, -1, 161, 162, 163, + 164, 165, 147, 167, 168, 169, 170, 171, 172, 173, + 174, 175, -1, -1, -1, -1, -1, 181, -1, -1, + 161, 162, 163, 164, 165, 189, 167, 168, 169, 170, + 171, 172, 173, 174, 175, -1, -1, -1, -1, -1, + 181, -1, -1, 161, 162, 163, 164, 165, 189, 167, 168, 169, 170, 171, 172, 173, 174, 175, -1, -1, - -1, -1, -1, 181, -1, 189, 104, 105, 106, 187, - -1, 189, -1, -1, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, -1, -1, 147, -1, -1, -1, - -1, -1, 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, -1, 141, 142, 143, 144, 145, 146, 161, - 162, 163, 164, 165, -1, 167, 168, 169, 170, 171, + -1, -1, -1, 181, -1, -1, 161, 162, 163, 164, + 165, 189, 167, 168, 169, 170, 171, 172, 173, 174, + 175, -1, -1, -1, -1, -1, 181, -1, -1, 161, + 162, 163, 164, 165, 189, 167, 168, 169, 170, 171, 172, 173, 174, 175, -1, -1, -1, -1, -1, 181, -1, -1, 161, 162, 163, 164, 165, 189, 167, 168, 169, 170, 171, 172, 173, 174, 175, -1, -1, -1, @@ -2219,25 +2224,8 @@ static const short yycheck[] = { 23, 173, 174, 175, -1, -1, -1, -1, -1, 181, -1, -1, 161, 162, 163, 164, 165, 189, 167, 168, 169, 170, 171, 172, 173, 174, 175, -1, -1, -1, -1, - -1, 181, -1, -1, 161, 162, 163, 164, 165, 189, - 167, 168, 169, 170, 171, 172, 173, 174, 175, -1, - -1, -1, -1, -1, 181, -1, -1, 161, 162, 163, - 164, 165, 189, 167, 168, 169, 170, 171, 172, 173, - 174, 175, -1, -1, -1, -1, -1, 181, -1, -1, - 161, 162, 163, 164, 165, 189, 167, 168, 169, 170, - 171, 172, 173, 174, 175, -1, -1, -1, -1, -1, - 181, -1, -1, 161, 162, 163, 164, 165, 189, 167, - 168, 169, 170, 171, 172, 173, 174, 175, -1, -1, - -1, -1, -1, 181, 161, 162, 163, 164, 165, 187, - 167, 168, 169, 170, 171, 172, 173, 174, 175, -1, - -1, -1, -1, -1, 181, 161, 162, 163, 164, 165, - 187, 167, 168, 169, 170, 171, 172, 173, 174, 175, - -1, -1, -1, -1, -1, 181, 161, 162, 163, 164, - 165, 187, 167, 168, 169, 170, 171, 172, 173, 174, - 175, -1, -1, -1, -1, -1, 181, 161, 162, 163, - 164, 165, 187, 167, 168, 169, 170, 171, 172, 173, - 174, 175, -1, -1, -1, -1, -1, 181, 161, 162, - 163, 164, 165, 187, 167, 168, 169, 170, 171, 172, + -1, 181, -1, 183, -1, -1, -1, 187, 161, 162, + 163, 164, 165, -1, 167, 168, 169, 170, 171, 172, 173, 174, 175, -1, -1, -1, -1, -1, 181, 161, 162, 163, 164, 165, 187, 167, 168, 169, 170, 171, 172, 173, 174, 175, -1, -1, -1, -1, -1, 181, @@ -2472,7 +2460,15 @@ static const short yycheck[] = { 23, 173, 174, 175, -1, -1, -1, -1, -1, 181, 161, 162, 163, 164, 165, 187, 167, 168, 169, 170, 171, 172, 173, 174, 175, -1, -1, -1, -1, -1, 181, - -1, -1, -1, 185, 161, 162, 163, 164, 165, -1, + 161, 162, 163, 164, 165, 187, 167, 168, 169, 170, + 171, 172, 173, 174, 175, -1, -1, -1, -1, -1, + 181, 161, 162, 163, 164, 165, 187, 167, 168, 169, + 170, 171, 172, 173, 174, 175, -1, -1, -1, -1, + -1, 181, 161, 162, 163, 164, 165, 187, 167, 168, + 169, 170, 171, 172, 173, 174, 175, -1, -1, -1, + -1, -1, 181, 161, 162, 163, 164, 165, 187, 167, + 168, 169, 170, 171, 172, 173, 174, 175, -1, -1, + -1, -1, -1, 181, 161, 162, 163, 164, 165, 187, 167, 168, 169, 170, 171, 172, 173, 174, 175, -1, -1, -1, -1, -1, 181, -1, -1, -1, 185, 161, 162, 163, 164, 165, -1, 167, 168, 169, 170, 171, @@ -2537,16 +2533,7 @@ static const short yycheck[] = { 23, -1, -1, -1, -1, 181, -1, -1, -1, 185, 161, 162, 163, 164, 165, -1, 167, 168, 169, 170, 171, 172, 173, 174, 175, -1, -1, -1, -1, -1, 181, - -1, 183, 161, 162, 163, 164, 165, -1, 167, 168, - 169, 170, 171, 172, 173, 174, 175, -1, -1, -1, - -1, -1, 181, -1, 183, 161, 162, 163, 164, 165, - -1, 167, 168, 169, 170, 171, 172, 173, 174, 175, - -1, -1, -1, -1, -1, 181, -1, 183, 161, 162, - 163, 164, 165, -1, 167, 168, 169, 170, 171, 172, - 173, 174, 175, -1, -1, -1, -1, -1, 181, -1, - 183, 161, 162, 163, 164, 165, -1, 167, 168, 169, - 170, 171, 172, 173, 174, 175, -1, -1, -1, -1, - -1, 181, -1, 183, 161, 162, 163, 164, 165, -1, + -1, -1, -1, 185, 161, 162, 163, 164, 165, -1, 167, 168, 169, 170, 171, 172, 173, 174, 175, -1, -1, -1, -1, -1, 181, -1, 183, 161, 162, 163, 164, 165, -1, 167, 168, 169, 170, 171, 172, 173, @@ -2688,7 +2675,14 @@ static const short yycheck[] = { 23, 167, 168, 169, 170, 171, 172, 173, 174, 175, -1, -1, -1, -1, -1, 181, -1, 183, 161, 162, 163, 164, 165, -1, 167, 168, 169, 170, 171, 172, 173, - 174, 175, -1, -1, -1, -1, -1, 181 + 174, 175, -1, -1, -1, -1, -1, 181, -1, 183, + 161, 162, 163, 164, 165, -1, 167, 168, 169, 170, + 171, 172, 173, 174, 175, -1, -1, -1, -1, -1, + 181, -1, 183, 161, 162, 163, 164, 165, -1, 167, + 168, 169, 170, 171, 172, 173, 174, 175, -1, -1, + -1, -1, -1, 181, -1, 183, 161, 162, 163, 164, + 165, -1, 167, 168, 169, 170, 171, 172, 173, 174, + 175, -1, -1, -1, -1, -1, 181, -1, 183 }; /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ #line 3 "/usr/lib/bison.simple" @@ -4340,30 +4334,23 @@ case 170: ; break;} case 171: -#line 1189 "Gmsh.y" -{ - yyval.s.Type = MSH_POINT; - yyval.s.Num = (int)yyvsp[-2].d; - ; - break;} -case 172: -#line 1197 "Gmsh.y" +#line 1192 "Gmsh.y" { Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_LINE,1,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL); yyval.s.Type = MSH_SEGM_LINE; yyval.s.Num = (int)yyvsp[-4].d; ; break;} -case 173: -#line 1203 "Gmsh.y" +case 172: +#line 1198 "Gmsh.y" { Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_SPLN,3,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL); yyval.s.Type = MSH_SEGM_SPLN; yyval.s.Num = (int)yyvsp[-4].d; ; break;} -case 174: -#line 1209 "Gmsh.y" +case 173: +#line 1204 "Gmsh.y" { Curve *c; Attractor *a; @@ -4383,24 +4370,24 @@ case 174: } ; break;} -case 175: -#line 1228 "Gmsh.y" +case 174: +#line 1223 "Gmsh.y" { Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_CIRC,2,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL); yyval.s.Type = MSH_SEGM_CIRC ; yyval.s.Num = (int)yyvsp[-4].d; ; break;} -case 176: -#line 1234 "Gmsh.y" +case 175: +#line 1229 "Gmsh.y" { Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_ELLI,2,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL); yyval.s.Type = MSH_SEGM_ELLI ; yyval.s.Num = (int)yyvsp[-4].d; ; break;} -case 177: -#line 1240 "Gmsh.y" +case 176: +#line 1235 "Gmsh.y" { List_T *temp; int i,j; @@ -4417,32 +4404,32 @@ case 177: yyval.s.Num = (int)yyvsp[-6].d; ; break;} -case 178: -#line 1257 "Gmsh.y" +case 177: +#line 1252 "Gmsh.y" { Cdbseg101((int)yyvsp[-14].d,MSH_SEGM_PARAMETRIC,2,NULL,NULL,-1,-1,yyvsp[-10].d,yyvsp[-8].d,yyvsp[-6].c,yyvsp[-4].c,yyvsp[-2].c); yyval.s.Type = MSH_SEGM_PARAMETRIC ; yyval.s.Num = (int)yyvsp[-14].d; ; break;} -case 179: -#line 1263 "Gmsh.y" +case 178: +#line 1258 "Gmsh.y" { Cdbz101((int)yyvsp[-4].d,MSH_PHYSICAL_LINE,0,0,0,0,0,NULL,yyvsp[-1].l,NULL); yyval.s.Type = MSH_PHYSICAL_LINE; yyval.s.Num = (int)yyvsp[-4].d; ; break;} -case 180: -#line 1269 "Gmsh.y" +case 179: +#line 1264 "Gmsh.y" { yyval.s.Type = MSH_SEGM_LOOP; Cdbz101((int)yyvsp[-4].d,yyval.s.Type,0,0,0,0,0,NULL,yyvsp[-1].l,NULL); yyval.s.Num = (int)yyvsp[-4].d; ; break;} -case 181: -#line 1275 "Gmsh.y" +case 180: +#line 1270 "Gmsh.y" { if(List_Nbr(yyvsp[-1].l) > 3){ Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_BSPLN,2,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL); @@ -4454,8 +4441,8 @@ case 181: List_Nbr(yyvsp[-1].l)); ; break;} -case 182: -#line 1286 "Gmsh.y" +case 181: +#line 1281 "Gmsh.y" { if(List_Nbr(yyvsp[-1].l) > 3){ Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_BEZIER,2,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL); @@ -4467,8 +4454,8 @@ case 182: List_Nbr(yyvsp[-1].l)); ; break;} -case 183: -#line 1297 "Gmsh.y" +case 182: +#line 1292 "Gmsh.y" { List_T *Temp; int i; @@ -4491,27 +4478,16 @@ case 183: } ; break;} -case 184: -#line 1319 "Gmsh.y" -{ - yyval.s.Num = (int)yyvsp[-2].d; - Curve *c = FindCurve(yyval.s.Num,THEM); - if(!c) - vyyerror("Unkown Curve %d", yyval.s.Num); - else - yyval.s.Type = c->Typ; - ; - break;} -case 185: -#line 1331 "Gmsh.y" +case 183: +#line 1317 "Gmsh.y" { Cdbz101((int)yyvsp[-4].d,MSH_SURF_PLAN,0,0,0,0,0,NULL,yyvsp[-1].l,NULL); yyval.s.Type = MSH_SURF_PLAN; yyval.s.Num = (int)yyvsp[-4].d; ; break;} -case 186: -#line 1337 "Gmsh.y" +case 184: +#line 1323 "Gmsh.y" { Surface *s,*support; support = FindSurface((int)yyvsp[-4].d,THEM); @@ -4531,8 +4507,8 @@ case 186: } ; break;} -case 187: -#line 1356 "Gmsh.y" +case 185: +#line 1342 "Gmsh.y" { List_Read(yyvsp[-1].l,0,&d); i = (int)d; @@ -4554,126 +4530,166 @@ case 187: } ; break;} -case 188: -#line 1379 "Gmsh.y" +case 186: +#line 1365 "Gmsh.y" { CreateNurbsSurface ( (int) yyvsp[-16].d , (int)yyvsp[-4].d , (int)yyvsp[-2].d , yyvsp[-13].l, yyvsp[-10].l, yyvsp[-8].l); yyval.s.Type = MSH_SURF_NURBS; yyval.s.Num = (int)yyvsp[-16].d; ; break;} -case 189: -#line 1387 "Gmsh.y" +case 187: +#line 1373 "Gmsh.y" { CreateNurbsSurfaceSupport ((int)yyvsp[-16].d, (int) yyvsp[-4].d , (int) yyvsp[-2].d , yyvsp[-13].l, yyvsp[-10].l, yyvsp[-8].l); ; break;} -case 190: -#line 1391 "Gmsh.y" +case 188: +#line 1377 "Gmsh.y" { Cdbz101((int)yyvsp[-4].d,MSH_PHYSICAL_SURFACE,0,0,0,0,0,NULL,yyvsp[-1].l,NULL); yyval.s.Type = MSH_PHYSICAL_SURFACE; yyval.s.Num = (int)yyvsp[-4].d; ; break;} -case 191: -#line 1397 "Gmsh.y" +case 189: +#line 1383 "Gmsh.y" { Cdbz101((int)yyvsp[-4].d,MSH_SURF_LOOP,0,0,0,0,0,NULL,yyvsp[-1].l,NULL); yyval.s.Type = MSH_SURF_LOOP; yyval.s.Num = (int)yyvsp[-4].d; ; break;} -case 192: -#line 1403 "Gmsh.y" -{ - yyval.s.Num = (int)yyvsp[-2].d; - Surface *s = FindSurface(yyval.s.Num,THEM); - if(!s) - vyyerror("Unknown Surface %d", yyval.s.Num); - else - yyval.s.Type = s->Typ; - ; - break;} -case 193: -#line 1415 "Gmsh.y" +case 190: +#line 1392 "Gmsh.y" { Cdbz101((int)yyvsp[-4].d,MSH_VOLUME,0,0,0,0,0,NULL,yyvsp[-1].l,NULL); yyval.s.Type = MSH_VOLUME; yyval.s.Num = (int)yyvsp[-4].d; ; break;} -case 194: -#line 1421 "Gmsh.y" +case 191: +#line 1398 "Gmsh.y" { Cdbz101((int)yyvsp[-4].d,MSH_VOLUME,0,0,0,0,0,NULL,yyvsp[-1].l,NULL); yyval.s.Type = MSH_VOLUME; yyval.s.Num = (int)yyvsp[-4].d; ; break;} -case 195: -#line 1427 "Gmsh.y" +case 192: +#line 1404 "Gmsh.y" { Cdbz101((int)yyvsp[-4].d,MSH_PHYSICAL_VOLUME,0,0,0,0,0,NULL,yyvsp[-1].l,NULL); yyval.s.Type = MSH_PHYSICAL_VOLUME; yyval.s.Num = (int)yyvsp[-4].d; ; break;} -case 196: -#line 1440 "Gmsh.y" +case 193: +#line 1417 "Gmsh.y" { TranslateShapes (yyvsp[-3].v[0],yyvsp[-3].v[1],yyvsp[-3].v[2],yyvsp[-1].l,1); yyval.l = yyvsp[-1].l; ; break;} -case 197: -#line 1445 "Gmsh.y" +case 194: +#line 1422 "Gmsh.y" { RotateShapes(yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2],yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].d,yyvsp[-1].l); yyval.l = yyvsp[-1].l; ; break;} -case 198: -#line 1450 "Gmsh.y" +case 195: +#line 1427 "Gmsh.y" { SymmetryShapes(yyvsp[-3].v[0],yyvsp[-3].v[1],yyvsp[-3].v[2],yyvsp[-3].v[3],yyvsp[-1].l,1); yyval.l = yyvsp[-1].l; ; break;} -case 199: -#line 1455 "Gmsh.y" +case 196: +#line 1432 "Gmsh.y" { DilatShapes(yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].d,yyvsp[-1].l,1); yyval.l = yyvsp[-1].l; ; break;} -case 200: -#line 1462 "Gmsh.y" +case 197: +#line 1439 "Gmsh.y" { yyval.l = yyvsp[0].l; ; break;} -case 201: -#line 1463 "Gmsh.y" +case 198: +#line 1440 "Gmsh.y" { yyval.l = yyvsp[0].l; ; break;} -case 202: -#line 1464 "Gmsh.y" +case 199: +#line 1441 "Gmsh.y" { yyval.l = yyvsp[0].l; ; break;} -case 203: -#line 1469 "Gmsh.y" +case 200: +#line 1446 "Gmsh.y" { yyval.l = List_Create(3,3,sizeof(Shape)); ; break;} -case 204: -#line 1473 "Gmsh.y" +case 201: +#line 1450 "Gmsh.y" { List_Add(yyval.l,&yyvsp[0].s); yyval.l = yyvsp[-1].l; ; break;} -case 205: +case 202: +#line 1455 "Gmsh.y" +{ + for(i=0;i<List_Nbr(yyvsp[-2].l);i++){ + List_Read(yyvsp[-2].l, i, &d); + TheShape.Num = (int)d; + Vertex *v = FindPoint(TheShape.Num,THEM); + if(!v) + vyyerror("Unknown Point %d", TheShape.Num); + else{ + TheShape.Type = MSH_POINT; + List_Add(yyval.l,&TheShape); + } + } + yyval.l = yyvsp[-5].l; + ; + break;} +case 203: +#line 1470 "Gmsh.y" +{ + for(i=0;i<List_Nbr(yyvsp[-2].l);i++){ + List_Read(yyvsp[-2].l, i, &d); + TheShape.Num = (int)d; + Curve *c = FindCurve(TheShape.Num,THEM); + if(!c) + vyyerror("Unknown Curve %d", TheShape.Num); + else{ + TheShape.Type = c->Typ; + List_Add(yyval.l,&TheShape); + } + } + yyval.l = yyvsp[-5].l; + ; + break;} +case 204: #line 1485 "Gmsh.y" +{ + for(i=0;i<List_Nbr(yyvsp[-2].l);i++){ + List_Read(yyvsp[-2].l, i, &d); + TheShape.Num = (int)d; + Surface *s = FindSurface(TheShape.Num,THEM); + if(!s) + vyyerror("Unknown Surface %d", TheShape.Num); + else{ + TheShape.Type = s->Typ; + List_Add(yyval.l,&TheShape); + } + } + yyval.l = yyvsp[-5].l; + ; + break;} +case 205: +#line 1507 "Gmsh.y" { yyval.l = List_Create(3,3,sizeof(Shape)); for(i=0;i<List_Nbr(yyvsp[-1].l);i++){ @@ -4685,7 +4701,7 @@ case 205: ; break;} case 206: -#line 1503 "Gmsh.y" +#line 1525 "Gmsh.y" { for(i=0;i<List_Nbr(yyvsp[-1].l);i++){ List_Read (yyvsp[-1].l,i,&TheShape); @@ -4694,20 +4710,20 @@ case 206: ; break;} case 207: -#line 1510 "Gmsh.y" +#line 1532 "Gmsh.y" { if(!strcmp(yyvsp[-4].c, "View")) FreeView((int)yyvsp[-2].d); ; break;} case 208: -#line 1515 "Gmsh.y" +#line 1537 "Gmsh.y" { Init_Mesh(THEM, 1); ; break;} case 209: -#line 1527 "Gmsh.y" +#line 1549 "Gmsh.y" { if(!strcmp(yyvsp[-2].c, "Include")){ @@ -4776,7 +4792,7 @@ case 209: ; break;} case 210: -#line 1594 "Gmsh.y" +#line 1616 "Gmsh.y" { if(!strcmp(yyvsp[-2].c, "Sleep")){ @@ -4798,7 +4814,7 @@ case 210: ; break;} case 211: -#line 1614 "Gmsh.y" +#line 1636 "Gmsh.y" { #ifndef _NOPLUGIN if(CTX.default_plugins) @@ -4807,13 +4823,13 @@ case 211: ; break;} case 212: -#line 1621 "Gmsh.y" +#line 1643 "Gmsh.y" { exit(0); ; break;} case 213: -#line 1625 "Gmsh.y" +#line 1647 "Gmsh.y" { if(!CTX.batch){ // we're in interactive mode if(Tree_Nbr(THEM->Points) != Last_NumberOfPoints){ @@ -4829,7 +4845,7 @@ case 213: ; break;} case 214: -#line 1647 "Gmsh.y" +#line 1669 "Gmsh.y" { // here, we seek remember the position in yyin LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-3].d ; @@ -4842,7 +4858,7 @@ case 214: ; break;} case 215: -#line 1658 "Gmsh.y" +#line 1680 "Gmsh.y" { // here, we seek remember the position in yyin LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-5].d ; @@ -4855,7 +4871,7 @@ case 215: ; break;} case 216: -#line 1669 "Gmsh.y" +#line 1691 "Gmsh.y" { // here, we seek remember the position in yyin LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-3].d ; @@ -4879,7 +4895,7 @@ case 216: ; break;} case 217: -#line 1691 "Gmsh.y" +#line 1713 "Gmsh.y" { // here, we seek remember the position in yyin LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-5].d ; @@ -4903,7 +4919,7 @@ case 217: ; break;} case 218: -#line 1713 "Gmsh.y" +#line 1735 "Gmsh.y" { if(LoopControlVariablesTab[ImbricatedLoop-1][1] > LoopControlVariablesTab[ImbricatedLoop-1][0]){ @@ -4926,7 +4942,7 @@ case 218: ; break;} case 219: -#line 1734 "Gmsh.y" +#line 1756 "Gmsh.y" { if(!FunctionManager::Instance()->createFunction(yyvsp[0].c,yyin,yyname,yylineno)) vyyerror("Redefinition of function %s",yyvsp[0].c); @@ -4934,32 +4950,32 @@ case 219: ; break;} case 220: -#line 1740 "Gmsh.y" +#line 1762 "Gmsh.y" { if(!FunctionManager::Instance()->leaveFunction(&yyin,yyname,yylineno)) vyyerror("Error while exiting function"); ; break;} case 221: -#line 1745 "Gmsh.y" +#line 1767 "Gmsh.y" { if(!FunctionManager::Instance()->enterFunction(yyvsp[-1].c,&yyin,yyname,yylineno)) vyyerror("Unknown function %s",yyvsp[-1].c); ; break;} case 222: -#line 1750 "Gmsh.y" +#line 1772 "Gmsh.y" { if(!yyvsp[-1].d) skip_until("If", "EndIf"); ; break;} case 223: -#line 1754 "Gmsh.y" +#line 1776 "Gmsh.y" { ; break;} case 224: -#line 1766 "Gmsh.y" +#line 1788 "Gmsh.y" { Curve *pc, *prc; Extrude_ProtudePoint(TRANSLATE,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2], @@ -4968,7 +4984,7 @@ case 224: ; break;} case 225: -#line 1773 "Gmsh.y" +#line 1795 "Gmsh.y" { Curve *pc, *prc; Extrude_ProtudePoint(ROTATE,(int)yyvsp[-8].d,0.,0.,0., @@ -4977,7 +4993,7 @@ case 225: ; break;} case 226: -#line 1780 "Gmsh.y" +#line 1802 "Gmsh.y" { Curve *pc, *prc; Extrude_ProtudePoint(TRANSLATE_ROTATE,(int)yyvsp[-10].d,yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2], @@ -4986,98 +5002,98 @@ case 226: ; break;} case 227: -#line 1789 "Gmsh.y" +#line 1811 "Gmsh.y" { Extrude_ProtudeCurve(TRANSLATE,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2], 0.,0.,0.,0.,0.,0.,0.,1,NULL); ; break;} case 228: -#line 1794 "Gmsh.y" +#line 1816 "Gmsh.y" { Extrude_ProtudeCurve(ROTATE,(int)yyvsp[-8].d,0.,0.,0., yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,1,NULL); ; break;} case 229: -#line 1799 "Gmsh.y" +#line 1821 "Gmsh.y" { Extrude_ProtudeCurve(TRANSLATE_ROTATE,(int)yyvsp[-10].d,yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2], yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,1,NULL); ; break;} case 230: -#line 1804 "Gmsh.y" +#line 1826 "Gmsh.y" { extr.mesh.ExtrudeMesh = false; extr.mesh.Recombine = false; ; break;} case 231: -#line 1809 "Gmsh.y" +#line 1831 "Gmsh.y" { Extrude_ProtudeCurve(TRANSLATE,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2], 0.,0.,0.,0.,0.,0.,0.,1,&extr); ; break;} case 232: -#line 1814 "Gmsh.y" +#line 1836 "Gmsh.y" { extr.mesh.ExtrudeMesh = false; extr.mesh.Recombine = false; ; break;} case 233: -#line 1819 "Gmsh.y" +#line 1841 "Gmsh.y" { Extrude_ProtudeCurve(ROTATE,(int)yyvsp[-12].d,0.,0.,0., yyvsp[-10].v[0],yyvsp[-10].v[1],yyvsp[-10].v[2],yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2],yyvsp[-6].d,1,&extr); ; break;} case 234: -#line 1824 "Gmsh.y" +#line 1846 "Gmsh.y" { extr.mesh.ExtrudeMesh = false; extr.mesh.Recombine = false; ; break;} case 235: -#line 1829 "Gmsh.y" +#line 1851 "Gmsh.y" { Extrude_ProtudeCurve(TRANSLATE_ROTATE,(int)yyvsp[-14].d,yyvsp[-12].v[0],yyvsp[-12].v[1],yyvsp[-12].v[2], yyvsp[-10].v[0],yyvsp[-10].v[1],yyvsp[-10].v[2],yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2],yyvsp[-6].d,1,&extr); ; break;} case 236: -#line 1837 "Gmsh.y" +#line 1859 "Gmsh.y" { Extrude_ProtudeSurface(TRANSLATE,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2], 0.,0.,0.,0.,0.,0.,0.,0,NULL); ; break;} case 237: -#line 1842 "Gmsh.y" +#line 1864 "Gmsh.y" { Extrude_ProtudeSurface(ROTATE,(int)yyvsp[-8].d,0.,0.,0., yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,0,NULL); ; break;} case 238: -#line 1847 "Gmsh.y" +#line 1869 "Gmsh.y" { Extrude_ProtudeSurface(TRANSLATE_ROTATE,(int)yyvsp[-10].d,yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2], yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,0,NULL); ; break;} case 239: -#line 1852 "Gmsh.y" +#line 1874 "Gmsh.y" { extr.mesh.ExtrudeMesh = false; extr.mesh.Recombine = false; ; break;} case 240: -#line 1857 "Gmsh.y" +#line 1879 "Gmsh.y" { int vol = NEWREG(); Extrude_ProtudeSurface(TRANSLATE,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2], @@ -5085,14 +5101,14 @@ case 240: ; break;} case 241: -#line 1863 "Gmsh.y" +#line 1885 "Gmsh.y" { extr.mesh.ExtrudeMesh = false; extr.mesh.Recombine = false; ; break;} case 242: -#line 1869 "Gmsh.y" +#line 1891 "Gmsh.y" { int vol = NEWREG(); Extrude_ProtudeSurface(ROTATE,(int)yyvsp[-12].d,0.,0.,0., @@ -5100,14 +5116,14 @@ case 242: ; break;} case 243: -#line 1875 "Gmsh.y" +#line 1897 "Gmsh.y" { extr.mesh.ExtrudeMesh = false; extr.mesh.Recombine = false; ; break;} case 244: -#line 1881 "Gmsh.y" +#line 1903 "Gmsh.y" { int vol = NEWREG(); Extrude_ProtudeSurface(TRANSLATE_ROTATE,(int)yyvsp[-14].d,yyvsp[-12].v[0],yyvsp[-12].v[1],yyvsp[-12].v[2], @@ -5115,17 +5131,17 @@ case 244: ; break;} case 245: -#line 1890 "Gmsh.y" +#line 1912 "Gmsh.y" { ; break;} case 246: -#line 1893 "Gmsh.y" +#line 1915 "Gmsh.y" { ; break;} case 247: -#line 1899 "Gmsh.y" +#line 1921 "Gmsh.y" { double d; extr.mesh.ExtrudeMesh = true; @@ -5153,7 +5169,7 @@ case 247: ; break;} case 248: -#line 1925 "Gmsh.y" +#line 1947 "Gmsh.y" { double d; extr.mesh.ExtrudeMesh = true; @@ -5179,13 +5195,13 @@ case 248: ; break;} case 249: -#line 1949 "Gmsh.y" +#line 1971 "Gmsh.y" { extr.mesh.Recombine = true; ; break;} case 250: -#line 1960 "Gmsh.y" +#line 1982 "Gmsh.y" { Curve *c; for(i=0;i<List_Nbr(yyvsp[-3].l);i++){ @@ -5205,7 +5221,7 @@ case 250: ; break;} case 251: -#line 1978 "Gmsh.y" +#line 2000 "Gmsh.y" { Curve *c; for(i=0;i<List_Nbr(yyvsp[-6].l);i++){ @@ -5225,7 +5241,7 @@ case 251: ; break;} case 252: -#line 1996 "Gmsh.y" +#line 2018 "Gmsh.y" { Curve *c; for(i=0;i<List_Nbr(yyvsp[-6].l);i++){ @@ -5245,7 +5261,7 @@ case 252: ; break;} case 253: -#line 2014 "Gmsh.y" +#line 2036 "Gmsh.y" { Surface *s = FindSurface((int)yyvsp[-4].d,THEM); if(!s) @@ -5269,7 +5285,7 @@ case 253: ; break;} case 254: -#line 2036 "Gmsh.y" +#line 2058 "Gmsh.y" { Surface *s = FindSurface((int)yyvsp[-4].d,THEM); if(!s) @@ -5292,7 +5308,7 @@ case 254: ; break;} case 255: -#line 2057 "Gmsh.y" +#line 2079 "Gmsh.y" { Volume *v = FindVolume((int)yyvsp[-4].d,THEM); if(!v) @@ -5315,7 +5331,7 @@ case 255: ; break;} case 256: -#line 2078 "Gmsh.y" +#line 2100 "Gmsh.y" { Surface *s; for(i=0;i<List_Nbr(yyvsp[-3].l);i++){ @@ -5331,7 +5347,7 @@ case 256: ; break;} case 257: -#line 2092 "Gmsh.y" +#line 2114 "Gmsh.y" { Surface *s; for(i=0;i<List_Nbr(yyvsp[-1].l);i++){ @@ -5347,71 +5363,71 @@ case 257: ; break;} case 258: -#line 2114 "Gmsh.y" +#line 2136 "Gmsh.y" { ReplaceAllDuplicates(THEM); ; break;} case 259: -#line 2118 "Gmsh.y" +#line 2140 "Gmsh.y" { IntersectAllSegmentsTogether(); ; break;} case 260: -#line 2129 "Gmsh.y" +#line 2151 "Gmsh.y" {yyval.i = 1;; break;} case 261: -#line 2130 "Gmsh.y" +#line 2152 "Gmsh.y" {yyval.i = 0;; break;} case 262: -#line 2131 "Gmsh.y" +#line 2153 "Gmsh.y" {yyval.i = -1;; break;} case 263: -#line 2132 "Gmsh.y" +#line 2154 "Gmsh.y" {yyval.i = -1;; break;} case 264: -#line 2133 "Gmsh.y" +#line 2155 "Gmsh.y" {yyval.i = -1;; break;} case 265: -#line 2137 "Gmsh.y" +#line 2159 "Gmsh.y" { yyval.d = yyvsp[0].d; ; break;} case 266: -#line 2138 "Gmsh.y" +#line 2160 "Gmsh.y" { yyval.d = yyvsp[-1].d ; ; break;} case 267: -#line 2139 "Gmsh.y" +#line 2161 "Gmsh.y" { yyval.d = -yyvsp[0].d ; ; break;} case 268: -#line 2140 "Gmsh.y" +#line 2162 "Gmsh.y" { yyval.d = yyvsp[0].d; ; break;} case 269: -#line 2141 "Gmsh.y" +#line 2163 "Gmsh.y" { yyval.d = !yyvsp[0].d ; ; break;} case 270: -#line 2142 "Gmsh.y" +#line 2164 "Gmsh.y" { yyval.d = yyvsp[-2].d - yyvsp[0].d ; ; break;} case 271: -#line 2143 "Gmsh.y" +#line 2165 "Gmsh.y" { yyval.d = yyvsp[-2].d + yyvsp[0].d ; ; break;} case 272: -#line 2144 "Gmsh.y" +#line 2166 "Gmsh.y" { yyval.d = yyvsp[-2].d * yyvsp[0].d ; ; break;} case 273: -#line 2146 "Gmsh.y" +#line 2168 "Gmsh.y" { if(!yyvsp[0].d) vyyerror("Division by zero in '%g / %g'", yyvsp[-2].d, yyvsp[0].d); @@ -5420,235 +5436,235 @@ case 273: ; break;} case 274: -#line 2152 "Gmsh.y" +#line 2174 "Gmsh.y" { yyval.d = (int)yyvsp[-2].d % (int)yyvsp[0].d ; ; break;} case 275: -#line 2153 "Gmsh.y" +#line 2175 "Gmsh.y" { yyval.d = pow(yyvsp[-2].d,yyvsp[0].d) ; ; break;} case 276: -#line 2154 "Gmsh.y" +#line 2176 "Gmsh.y" { yyval.d = yyvsp[-2].d < yyvsp[0].d ; ; break;} case 277: -#line 2155 "Gmsh.y" +#line 2177 "Gmsh.y" { yyval.d = yyvsp[-2].d > yyvsp[0].d ; ; break;} case 278: -#line 2156 "Gmsh.y" +#line 2178 "Gmsh.y" { yyval.d = yyvsp[-2].d <= yyvsp[0].d ; ; break;} case 279: -#line 2157 "Gmsh.y" +#line 2179 "Gmsh.y" { yyval.d = yyvsp[-2].d >= yyvsp[0].d ; ; break;} case 280: -#line 2158 "Gmsh.y" +#line 2180 "Gmsh.y" { yyval.d = yyvsp[-2].d == yyvsp[0].d ; ; break;} case 281: -#line 2159 "Gmsh.y" +#line 2181 "Gmsh.y" { yyval.d = yyvsp[-2].d != yyvsp[0].d ; ; break;} case 282: -#line 2160 "Gmsh.y" +#line 2182 "Gmsh.y" { yyval.d = yyvsp[-2].d && yyvsp[0].d ; ; break;} case 283: -#line 2161 "Gmsh.y" +#line 2183 "Gmsh.y" { yyval.d = yyvsp[-2].d || yyvsp[0].d ; ; break;} case 284: -#line 2162 "Gmsh.y" +#line 2184 "Gmsh.y" { yyval.d = yyvsp[-4].d? yyvsp[-2].d : yyvsp[0].d ; ; break;} case 285: -#line 2163 "Gmsh.y" +#line 2185 "Gmsh.y" { yyval.d = exp(yyvsp[-1].d); ; break;} case 286: -#line 2164 "Gmsh.y" +#line 2186 "Gmsh.y" { yyval.d = log(yyvsp[-1].d); ; break;} case 287: -#line 2165 "Gmsh.y" +#line 2187 "Gmsh.y" { yyval.d = log10(yyvsp[-1].d); ; break;} case 288: -#line 2166 "Gmsh.y" +#line 2188 "Gmsh.y" { yyval.d = sqrt(yyvsp[-1].d); ; break;} case 289: -#line 2167 "Gmsh.y" +#line 2189 "Gmsh.y" { yyval.d = sin(yyvsp[-1].d); ; break;} case 290: -#line 2168 "Gmsh.y" +#line 2190 "Gmsh.y" { yyval.d = asin(yyvsp[-1].d); ; break;} case 291: -#line 2169 "Gmsh.y" +#line 2191 "Gmsh.y" { yyval.d = cos(yyvsp[-1].d); ; break;} case 292: -#line 2170 "Gmsh.y" +#line 2192 "Gmsh.y" { yyval.d = acos(yyvsp[-1].d); ; break;} case 293: -#line 2171 "Gmsh.y" +#line 2193 "Gmsh.y" { yyval.d = tan(yyvsp[-1].d); ; break;} case 294: -#line 2172 "Gmsh.y" +#line 2194 "Gmsh.y" { yyval.d = atan(yyvsp[-1].d); ; break;} case 295: -#line 2173 "Gmsh.y" +#line 2195 "Gmsh.y" { yyval.d = atan2(yyvsp[-3].d,yyvsp[-1].d); ; break;} case 296: -#line 2174 "Gmsh.y" +#line 2196 "Gmsh.y" { yyval.d = sinh(yyvsp[-1].d); ; break;} case 297: -#line 2175 "Gmsh.y" +#line 2197 "Gmsh.y" { yyval.d = cosh(yyvsp[-1].d); ; break;} case 298: -#line 2176 "Gmsh.y" +#line 2198 "Gmsh.y" { yyval.d = tanh(yyvsp[-1].d); ; break;} case 299: -#line 2177 "Gmsh.y" +#line 2199 "Gmsh.y" { yyval.d = fabs(yyvsp[-1].d); ; break;} case 300: -#line 2178 "Gmsh.y" +#line 2200 "Gmsh.y" { yyval.d = floor(yyvsp[-1].d); ; break;} case 301: -#line 2179 "Gmsh.y" +#line 2201 "Gmsh.y" { yyval.d = ceil(yyvsp[-1].d); ; break;} case 302: -#line 2180 "Gmsh.y" +#line 2202 "Gmsh.y" { yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d); ; break;} case 303: -#line 2181 "Gmsh.y" +#line 2203 "Gmsh.y" { yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d); ; break;} case 304: -#line 2182 "Gmsh.y" +#line 2204 "Gmsh.y" { yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ; break;} case 305: -#line 2183 "Gmsh.y" +#line 2205 "Gmsh.y" { yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ; break;} case 306: -#line 2185 "Gmsh.y" +#line 2207 "Gmsh.y" { yyval.d = exp(yyvsp[-1].d); ; break;} case 307: -#line 2186 "Gmsh.y" +#line 2208 "Gmsh.y" { yyval.d = log(yyvsp[-1].d); ; break;} case 308: -#line 2187 "Gmsh.y" +#line 2209 "Gmsh.y" { yyval.d = log10(yyvsp[-1].d); ; break;} case 309: -#line 2188 "Gmsh.y" +#line 2210 "Gmsh.y" { yyval.d = sqrt(yyvsp[-1].d); ; break;} case 310: -#line 2189 "Gmsh.y" +#line 2211 "Gmsh.y" { yyval.d = sin(yyvsp[-1].d); ; break;} case 311: -#line 2190 "Gmsh.y" +#line 2212 "Gmsh.y" { yyval.d = asin(yyvsp[-1].d); ; break;} case 312: -#line 2191 "Gmsh.y" +#line 2213 "Gmsh.y" { yyval.d = cos(yyvsp[-1].d); ; break;} case 313: -#line 2192 "Gmsh.y" +#line 2214 "Gmsh.y" { yyval.d = acos(yyvsp[-1].d); ; break;} case 314: -#line 2193 "Gmsh.y" +#line 2215 "Gmsh.y" { yyval.d = tan(yyvsp[-1].d); ; break;} case 315: -#line 2194 "Gmsh.y" +#line 2216 "Gmsh.y" { yyval.d = atan(yyvsp[-1].d); ; break;} case 316: -#line 2195 "Gmsh.y" +#line 2217 "Gmsh.y" { yyval.d = atan2(yyvsp[-3].d,yyvsp[-1].d); ; break;} case 317: -#line 2196 "Gmsh.y" +#line 2218 "Gmsh.y" { yyval.d = sinh(yyvsp[-1].d); ; break;} case 318: -#line 2197 "Gmsh.y" +#line 2219 "Gmsh.y" { yyval.d = cosh(yyvsp[-1].d); ; break;} case 319: -#line 2198 "Gmsh.y" +#line 2220 "Gmsh.y" { yyval.d = tanh(yyvsp[-1].d); ; break;} case 320: -#line 2199 "Gmsh.y" +#line 2221 "Gmsh.y" { yyval.d = fabs(yyvsp[-1].d); ; break;} case 321: -#line 2200 "Gmsh.y" +#line 2222 "Gmsh.y" { yyval.d = floor(yyvsp[-1].d); ; break;} case 322: -#line 2201 "Gmsh.y" +#line 2223 "Gmsh.y" { yyval.d = ceil(yyvsp[-1].d); ; break;} case 323: -#line 2202 "Gmsh.y" +#line 2224 "Gmsh.y" { yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d); ; break;} case 324: -#line 2203 "Gmsh.y" +#line 2225 "Gmsh.y" { yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d); ; break;} case 325: -#line 2204 "Gmsh.y" +#line 2226 "Gmsh.y" { yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ; break;} case 326: -#line 2205 "Gmsh.y" +#line 2227 "Gmsh.y" { yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ; break;} case 327: -#line 2214 "Gmsh.y" +#line 2236 "Gmsh.y" { yyval.d = yyvsp[0].d; ; break;} case 328: -#line 2215 "Gmsh.y" +#line 2237 "Gmsh.y" { yyval.d = 3.141592653589793; ; break;} case 329: -#line 2216 "Gmsh.y" +#line 2238 "Gmsh.y" { yyval.d = ParUtil::Instance()->rank(); ; break;} case 330: -#line 2217 "Gmsh.y" +#line 2239 "Gmsh.y" { yyval.d = ParUtil::Instance()->size(); ; break;} case 331: -#line 2222 "Gmsh.y" +#line 2244 "Gmsh.y" { TheSymbol.Name = yyvsp[0].c ; if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) { @@ -5660,7 +5676,7 @@ case 331: ; break;} case 332: -#line 2233 "Gmsh.y" +#line 2255 "Gmsh.y" { TheSymbol.Name = yyvsp[-3].c ; if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) { @@ -5678,7 +5694,7 @@ case 332: ; break;} case 333: -#line 2250 "Gmsh.y" +#line 2272 "Gmsh.y" { TheSymbol.Name = yyvsp[-1].c ; if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) { @@ -5690,7 +5706,7 @@ case 333: ; break;} case 334: -#line 2261 "Gmsh.y" +#line 2283 "Gmsh.y" { TheSymbol.Name = yyvsp[-4].c ; if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) { @@ -5708,7 +5724,7 @@ case 334: ; break;} case 335: -#line 2280 "Gmsh.y" +#line 2302 "Gmsh.y" { if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-2].c))){ vyyerror("Unknown numeric option class '%s'", yyvsp[-2].c); @@ -5725,7 +5741,7 @@ case 335: ; break;} case 336: -#line 2296 "Gmsh.y" +#line 2318 "Gmsh.y" { if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-5].c))){ vyyerror("Unknown numeric option class '%s'", yyvsp[-5].c); @@ -5742,7 +5758,7 @@ case 336: ; break;} case 337: -#line 2312 "Gmsh.y" +#line 2334 "Gmsh.y" { if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-3].c))){ vyyerror("Unknown numeric option class '%s'", yyvsp[-3].c); @@ -5759,7 +5775,7 @@ case 337: ; break;} case 338: -#line 2328 "Gmsh.y" +#line 2350 "Gmsh.y" { if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-6].c))){ vyyerror("Unknown numeric option class '%s'", yyvsp[-6].c); @@ -5776,130 +5792,130 @@ case 338: ; break;} case 339: -#line 2346 "Gmsh.y" +#line 2368 "Gmsh.y" { memcpy(yyval.v, yyvsp[0].v, 5*sizeof(double)) ; ; break;} case 340: -#line 2350 "Gmsh.y" +#line 2372 "Gmsh.y" { for(i=0 ; i<5 ; i++) yyval.v[i] = -yyvsp[0].v[i] ; ; break;} case 341: -#line 2354 "Gmsh.y" +#line 2376 "Gmsh.y" { for(i=0 ; i<5 ; i++) yyval.v[i] = yyvsp[0].v[i]; ; break;} case 342: -#line 2358 "Gmsh.y" +#line 2380 "Gmsh.y" { for(i=0 ; i<5 ; i++) yyval.v[i] = yyvsp[-2].v[i] - yyvsp[0].v[i] ; ; break;} case 343: -#line 2362 "Gmsh.y" +#line 2384 "Gmsh.y" { for(i=0 ; i<5 ; i++) yyval.v[i] = yyvsp[-2].v[i] + yyvsp[0].v[i] ; ; break;} case 344: -#line 2368 "Gmsh.y" +#line 2390 "Gmsh.y" { yyval.v[0]=yyvsp[-9].d; yyval.v[1]=yyvsp[-7].d; yyval.v[2]=yyvsp[-5].d; yyval.v[3]=yyvsp[-3].d; yyval.v[4]=yyvsp[-1].d; ; break;} case 345: -#line 2372 "Gmsh.y" +#line 2394 "Gmsh.y" { yyval.v[0]=yyvsp[-7].d; yyval.v[1]=yyvsp[-5].d; yyval.v[2]=yyvsp[-3].d; yyval.v[3]=yyvsp[-1].d; yyval.v[4]=1.0; ; break;} case 346: -#line 2376 "Gmsh.y" +#line 2398 "Gmsh.y" { yyval.v[0]=yyvsp[-5].d; yyval.v[1]=yyvsp[-3].d; yyval.v[2]=yyvsp[-1].d; yyval.v[3]=0.0; yyval.v[4]=1.0; ; break;} case 347: -#line 2380 "Gmsh.y" +#line 2402 "Gmsh.y" { yyval.v[0]=yyvsp[-5].d; yyval.v[1]=yyvsp[-3].d; yyval.v[2]=yyvsp[-1].d; yyval.v[3]=0.0; yyval.v[4]=1.0; ; break;} case 348: -#line 2387 "Gmsh.y" +#line 2409 "Gmsh.y" { ; break;} case 349: -#line 2390 "Gmsh.y" +#line 2412 "Gmsh.y" { ; break;} case 350: -#line 2396 "Gmsh.y" +#line 2418 "Gmsh.y" { ; break;} case 351: -#line 2399 "Gmsh.y" +#line 2421 "Gmsh.y" { ; break;} case 352: -#line 2405 "Gmsh.y" +#line 2427 "Gmsh.y" { ; break;} case 353: -#line 2408 "Gmsh.y" +#line 2430 "Gmsh.y" { yyval.l=yyvsp[-1].l; ; break;} case 354: -#line 2412 "Gmsh.y" +#line 2434 "Gmsh.y" { yyval.l=yyvsp[-1].l; ; break;} case 355: -#line 2419 "Gmsh.y" +#line 2441 "Gmsh.y" { yyval.l = List_Create(2,1,sizeof(List_T*)) ; List_Add(yyval.l, &(yyvsp[0].l)) ; ; break;} case 356: -#line 2424 "Gmsh.y" +#line 2446 "Gmsh.y" { List_Add(yyval.l, &(yyvsp[0].l)) ; ; break;} case 357: -#line 2432 "Gmsh.y" +#line 2454 "Gmsh.y" { yyval.l = List_Create(2,1,sizeof(double)) ; List_Add(yyval.l, &(yyvsp[0].d)) ; ; break;} case 358: -#line 2437 "Gmsh.y" +#line 2459 "Gmsh.y" { yyval.l = yyvsp[0].l ; ; break;} case 359: -#line 2441 "Gmsh.y" +#line 2463 "Gmsh.y" { yyval.l=yyvsp[-1].l; ; break;} case 360: -#line 2445 "Gmsh.y" +#line 2467 "Gmsh.y" { yyval.l=yyvsp[-1].l; for(i=0 ; i<List_Nbr(yyval.l) ; i++){ @@ -5909,7 +5925,7 @@ case 360: ; break;} case 361: -#line 2456 "Gmsh.y" +#line 2478 "Gmsh.y" { yyval.l = List_Create(2,1,sizeof(double)) ; for(d=yyvsp[-2].d ; (yyvsp[-2].d<yyvsp[0].d)?(d<=yyvsp[0].d):(d>=yyvsp[0].d) ; (yyvsp[-2].d<yyvsp[0].d)?(d+=1.):(d-=1.)) @@ -5917,7 +5933,7 @@ case 361: ; break;} case 362: -#line 2462 "Gmsh.y" +#line 2484 "Gmsh.y" { yyval.l = List_Create(2,1,sizeof(double)) ; if(!yyvsp[0].d || (yyvsp[-4].d<yyvsp[-2].d && yyvsp[0].d<0) || (yyvsp[-4].d>yyvsp[-2].d && yyvsp[0].d>0)){ @@ -5930,7 +5946,7 @@ case 362: ; break;} case 363: -#line 2473 "Gmsh.y" +#line 2495 "Gmsh.y" { yyval.l = List_Create(2,1,sizeof(double)) ; TheSymbol.Name = yyvsp[-2].c ; @@ -5946,7 +5962,7 @@ case 363: ; break;} case 364: -#line 2487 "Gmsh.y" +#line 2509 "Gmsh.y" { yyval.l = List_Create(2,1,sizeof(double)) ; TheSymbol.Name = yyvsp[-2].c ; @@ -5964,7 +5980,7 @@ case 364: ; break;} case 365: -#line 2503 "Gmsh.y" +#line 2525 "Gmsh.y" { yyval.l = List_Create(2,1,sizeof(double)) ; TheSymbol.Name = yyvsp[-5].c ; @@ -5986,7 +6002,7 @@ case 365: ; break;} case 366: -#line 2523 "Gmsh.y" +#line 2545 "Gmsh.y" { yyval.l = List_Create(2,1,sizeof(double)) ; TheSymbol.Name = yyvsp[-5].c ; @@ -6010,26 +6026,26 @@ case 366: ; break;} case 367: -#line 2548 "Gmsh.y" +#line 2570 "Gmsh.y" { yyval.l = List_Create(2,1,sizeof(double)) ; List_Add(yyval.l, &(yyvsp[0].d)) ; ; break;} case 368: -#line 2553 "Gmsh.y" +#line 2575 "Gmsh.y" { yyval.l = yyvsp[0].l ; ; break;} case 369: -#line 2557 "Gmsh.y" +#line 2579 "Gmsh.y" { List_Add(yyval.l, &(yyvsp[0].d)) ; ; break;} case 370: -#line 2561 "Gmsh.y" +#line 2583 "Gmsh.y" { for(i=0 ; i<List_Nbr(yyvsp[0].l) ; i++){ List_Read(yyvsp[0].l, i, &d) ; @@ -6039,26 +6055,26 @@ case 370: ; break;} case 371: -#line 2573 "Gmsh.y" +#line 2595 "Gmsh.y" { yyval.u = PACK_COLOR((int)yyvsp[-7].d, (int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d); ; break;} case 372: -#line 2577 "Gmsh.y" +#line 2599 "Gmsh.y" { yyval.u = PACK_COLOR((int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d, 255); ; break;} case 373: -#line 2588 "Gmsh.y" +#line 2610 "Gmsh.y" { yyval.u = Get_ColorForString(ColorString, -1, yyvsp[0].c, &flag); if(flag) vyyerror("Unknown color '%s'", yyvsp[0].c); ; break;} case 374: -#line 2593 "Gmsh.y" +#line 2615 "Gmsh.y" { if(!(pColCat = Get_ColorOptionCategory(yyvsp[-4].c))){ vyyerror("Unknown color option class '%s'", yyvsp[-4].c); @@ -6076,13 +6092,13 @@ case 374: ; break;} case 375: -#line 2612 "Gmsh.y" +#line 2634 "Gmsh.y" { yyval.l = yyvsp[-1].l; ; break;} case 376: -#line 2616 "Gmsh.y" +#line 2638 "Gmsh.y" { yyval.l = List_Create(256,10,sizeof(unsigned int)) ; ColorTable *ct = Get_ColorTable((int)yyvsp[-3].d); @@ -6095,26 +6111,26 @@ case 376: ; break;} case 377: -#line 2630 "Gmsh.y" +#line 2652 "Gmsh.y" { yyval.l = List_Create(256,10,sizeof(unsigned int)) ; List_Add(yyval.l, &(yyvsp[0].u)) ; ; break;} case 378: -#line 2635 "Gmsh.y" +#line 2657 "Gmsh.y" { List_Add(yyval.l, &(yyvsp[0].u)) ; ; break;} case 379: -#line 2642 "Gmsh.y" +#line 2664 "Gmsh.y" { yyval.c = yyvsp[0].c; ; break;} case 380: -#line 2646 "Gmsh.y" +#line 2668 "Gmsh.y" { yyval.c = (char *)Malloc((strlen(yyvsp[-3].c)+strlen(yyvsp[-1].c)+1)*sizeof(char)) ; strcpy(yyval.c, yyvsp[-3].c) ; @@ -6124,7 +6140,7 @@ case 380: ; break;} case 381: -#line 2654 "Gmsh.y" +#line 2676 "Gmsh.y" { yyval.c = (char *)Malloc((strlen(yyvsp[-1].c)+1)*sizeof(char)) ; for(i=strlen(yyvsp[-1].c)-1; i>=0; i--){ @@ -6139,13 +6155,13 @@ case 381: ; break;} case 382: -#line 2667 "Gmsh.y" +#line 2689 "Gmsh.y" { yyval.c = yyvsp[-1].c; ; break;} case 383: -#line 2671 "Gmsh.y" +#line 2693 "Gmsh.y" { i = PrintListOfDouble(yyvsp[-3].c,yyvsp[-1].l,tmpstring); if(i<0){ @@ -6165,7 +6181,7 @@ case 383: ; break;} case 384: -#line 2689 "Gmsh.y" +#line 2711 "Gmsh.y" { if(!(pStrCat = Get_StringOptionCategory(yyvsp[-3].c))) vyyerror("Unknown string option class '%s'", yyvsp[-3].c); @@ -6181,7 +6197,7 @@ case 384: ; break;} case 385: -#line 2703 "Gmsh.y" +#line 2725 "Gmsh.y" { if(!(pStrCat = Get_StringOptionCategory(yyvsp[-6].c))) vyyerror("Unknown string option class '%s'", yyvsp[-6].c); @@ -6418,7 +6434,7 @@ yyerrhandle: } return 1; } -#line 2718 "Gmsh.y" +#line 2740 "Gmsh.y" void InitSymbols(void){ diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y index d97cac8f893570bab1e5ceb845b94403c52bdc02..86cacfe1359c09949cf5b9b3f6e2fdad06c6ca14 100644 --- a/Parser/Gmsh.y +++ b/Parser/Gmsh.y @@ -1,6 +1,6 @@ %{ -// $Id: Gmsh.y,v 1.110 2001-11-12 11:25:22 geuzaine Exp $ +// $Id: Gmsh.y,v 1.111 2001-11-12 13:33:57 geuzaine Exp $ #include <stdarg.h> #ifndef _NOPLUGIN @@ -1185,11 +1185,6 @@ Shape : v->lc = $5; } } - | tPoint '{' FExpr '}' tEND - { - $$.Type = MSH_POINT; - $$.Num = (int)$3; - } /* -------- Lines -------- */ @@ -1315,15 +1310,6 @@ Shape : List_Delete(Temp); } } - | tLine '{' FExpr '}' tEND - { - $$.Num = (int)$3; - Curve *c = FindCurve($$.Num,THEM); - if(!c) - vyyerror("Unkown Curve %d", $$.Num); - else - $$.Type = c->Typ; - } /* -------- Surfaces -------- */ @@ -1399,15 +1385,6 @@ Shape : $$.Type = MSH_SURF_LOOP; $$.Num = (int)$4; } - | tSurface '{' FExpr '}' tEND - { - $$.Num = (int)$3; - Surface *s = FindSurface($$.Num,THEM); - if(!s) - vyyerror("Unknown Surface %d", $$.Num); - else - $$.Type = s->Typ; - } /* -------- Volumes -------- */ @@ -1474,6 +1451,51 @@ ListOfShapes : List_Add($$,&$2); $$ = $1; } + | ListOfShapes tPoint '{' RecursiveListOfDouble '}' tEND + { + for(i=0;i<List_Nbr($4);i++){ + List_Read($4, i, &d); + TheShape.Num = (int)d; + Vertex *v = FindPoint(TheShape.Num,THEM); + if(!v) + vyyerror("Unknown Point %d", TheShape.Num); + else{ + TheShape.Type = MSH_POINT; + List_Add($$,&TheShape); + } + } + $$ = $1; + } + | ListOfShapes tLine '{' RecursiveListOfDouble '}' tEND + { + for(i=0;i<List_Nbr($4);i++){ + List_Read($4, i, &d); + TheShape.Num = (int)d; + Curve *c = FindCurve(TheShape.Num,THEM); + if(!c) + vyyerror("Unknown Curve %d", TheShape.Num); + else{ + TheShape.Type = c->Typ; + List_Add($$,&TheShape); + } + } + $$ = $1; + } + | ListOfShapes tSurface '{' RecursiveListOfDouble '}' tEND + { + for(i=0;i<List_Nbr($4);i++){ + List_Read($4, i, &d); + TheShape.Num = (int)d; + Surface *s = FindSurface(TheShape.Num,THEM); + if(!s) + vyyerror("Unknown Surface %d", TheShape.Num); + else{ + TheShape.Type = s->Typ; + List_Add($$,&TheShape); + } + } + $$ = $1; + } ; /* ------------------- diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp index 5b8ac98356c21222bf9bc0018835aff94b28d592..8ad8ec2e06280f5ae1441dfad21ec7577c7e262e 100644 --- a/Parser/Gmsh.yy.cpp +++ b/Parser/Gmsh.yy.cpp @@ -2,7 +2,7 @@ /* A lexical scanner generated by flex */ /* Scanner skeleton version: - * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.125 2001-11-12 11:25:22 geuzaine Exp $ + * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.126 2001-11-12 13:33:57 geuzaine Exp $ */ #define FLEX_SCANNER @@ -1000,7 +1000,7 @@ char *yytext; #define INITIAL 0 #line 2 "Gmsh.l" -// $Id: Gmsh.yy.cpp,v 1.125 2001-11-12 11:25:22 geuzaine Exp $ +// $Id: Gmsh.yy.cpp,v 1.126 2001-11-12 13:33:57 geuzaine Exp $ #include <stdio.h> #include <stdlib.h> diff --git a/benchmarks/2d/machine/Functions.geo b/benchmarks/2d/machine/Functions.geo index 47c612491b78b2e9b29a92f0f51fbb8095a47271..003c96d8a3a9e14890704b326ad217c452ffd371 100644 --- a/benchmarks/2d/machine/Functions.geo +++ b/benchmarks/2d/machine/Functions.geo @@ -9,6 +9,9 @@ Function CopySlot ll_ = newreg; Line Loop(newreg) = {KK_[{0:NbrLines_-1}]}; lll_= newreg; Plane Surface(newreg) = {ll_}; Physical Surface(PhysNum_+(t_-1)*dPhysNum_) = {lll_}; + + geuz[t_-1]=lll_; + EndFor Return diff --git a/benchmarks/2d/machine/Rotor.geo b/benchmarks/2d/machine/Rotor.geo index 3debe50221c989ae682e3bedec026ef5d2290f7e..96bdd450544a5666b6cf033b23cc3b65e2c5a404 100644 --- a/benchmarks/2d/machine/Rotor.geo +++ b/benchmarks/2d/machine/Rotor.geo @@ -9,6 +9,7 @@ LineLoop_[] = LineLoop3[] ; NbrLines_ = NbrLines3; PhysNum_ = RotorSlotOpening; Printf("Rotor slot openings : physical surface %g", PhysNum_); Call CopySlot; +geuz1[{0:NbrSect_-1}] = geuz[{0:NbrSect_-1}]; LineLoop_[] = LineLoop2[] ; NbrLines_ = NbrLines2; PhysNum_ = RotorConductor; dPhysNum_ = 1; @@ -46,7 +47,11 @@ Printf("RotorIron : physical surface %g", RotorIron); mmm = newreg; Plane Surface(mmm) = {InnerRotor,OuterShaft_}; Physical Surface(RotorIron) = {mmm}; - +Rotate{ {0,0,1},{0,0,0}, 5*Pi/180 }{ + Surface{ mmm }; + Surface{ geuz1[{0:NbrSect_-1}] }; + Surface{ geuz[{0:NbrSect_-1}] }; +}